Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

index.tsx 2.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import React, { useCallback, useMemo, useState } from 'react'
  2. import Item from './item'
  3. import { RiAddCircleFill, RiFileUploadLine } from '@remixicon/react'
  4. import CreateFromScratchModal from './create-from-scratch-modal'
  5. import { useRouter, useSearchParams } from 'next/navigation'
  6. import CreateFromDSLModal, { CreateFromDSLModalTab } from './create-from-dsl-modal'
  7. import { useProviderContextSelector } from '@/context/provider-context'
  8. import { useTranslation } from 'react-i18next'
  9. import { useResetDatasetList } from '@/service/knowledge/use-dataset'
  10. const CreateOptions = () => {
  11. const { t } = useTranslation()
  12. const [showCreateModal, setShowCreateModal] = useState(false)
  13. const [showImportModal, setShowImportModal] = useState(false)
  14. const onPlanInfoChanged = useProviderContextSelector(state => state.onPlanInfoChanged)
  15. const searchParams = useSearchParams()
  16. const { replace } = useRouter()
  17. const dslUrl = searchParams.get('remoteInstallUrl') || undefined
  18. const resetDatasetList = useResetDatasetList()
  19. const activeTab = useMemo(() => {
  20. if (dslUrl)
  21. return CreateFromDSLModalTab.FROM_URL
  22. return undefined
  23. }, [dslUrl])
  24. const openCreateFromScratch = useCallback(() => {
  25. setShowCreateModal(true)
  26. }, [])
  27. const closeCreateFromScratch = useCallback(() => {
  28. setShowCreateModal(false)
  29. }, [])
  30. const openImportFromDSL = useCallback(() => {
  31. setShowImportModal(true)
  32. }, [])
  33. const onCloseImportModal = useCallback(() => {
  34. setShowImportModal(false)
  35. if (dslUrl)
  36. replace('/datasets/create-from-pipeline')
  37. }, [dslUrl, replace])
  38. const onImportFromDSLSuccess = useCallback(() => {
  39. onPlanInfoChanged()
  40. resetDatasetList()
  41. }, [onPlanInfoChanged, resetDatasetList])
  42. return (
  43. <div className='flex items-center gap-x-3 px-16 py-2'>
  44. <Item
  45. Icon={RiAddCircleFill}
  46. title={t('datasetPipeline.creation.createFromScratch.title')}
  47. description={t('datasetPipeline.creation.createFromScratch.description')}
  48. onClick={openCreateFromScratch}
  49. />
  50. <Item
  51. Icon={RiFileUploadLine}
  52. title={t('datasetPipeline.creation.ImportDSL.title')}
  53. description={t('datasetPipeline.creation.ImportDSL.description')}
  54. onClick={openImportFromDSL}
  55. />
  56. <CreateFromScratchModal
  57. show={showCreateModal}
  58. onClose={closeCreateFromScratch}
  59. />
  60. <CreateFromDSLModal
  61. show={showImportModal}
  62. onClose={onCloseImportModal}
  63. activeTab={activeTab}
  64. dslUrl={dslUrl}
  65. onSuccess={onImportFromDSLSuccess}
  66. />
  67. </div>
  68. )
  69. }
  70. export default CreateOptions