You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.tsx 2.4KB

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