index.tsx 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. 'use client'
  2. import React, { useState } from 'react'
  3. import { useTranslation } from 'react-i18next'
  4. import type { File } from '@/models/datasets'
  5. import FilePreview from '../file-preview'
  6. import FileUploader from '../file-uploader'
  7. import EmptyDatasetCreationModal from '../empty-dataset-creation-modal'
  8. import Button from '@/app/components/base/button'
  9. import cn from 'classnames'
  10. import s from './index.module.css'
  11. type IStepOneProps = {
  12. datasetId?: string,
  13. file?: File,
  14. updateFile: (file?: File) => void,
  15. onStepChange: () => void,
  16. }
  17. const StepOne = ({
  18. datasetId,
  19. onStepChange,
  20. file,
  21. updateFile,
  22. }: IStepOneProps) => {
  23. const [dataSourceType, setDataSourceType] = useState('FILE')
  24. const [showModal, setShowModal] = useState(false)
  25. const { t } = useTranslation()
  26. const modalShowHandle = () => setShowModal(true)
  27. const modalCloseHandle = () => setShowModal(false)
  28. return (
  29. <div className='flex w-full h-full'>
  30. <div className='grow overflow-y-auto relative'>
  31. <div className={s.stepHeader}>{t('datasetCreation.steps.one')}</div>
  32. <div className={s.form}>
  33. <div className={s.dataSourceTypeList}>
  34. <div
  35. className={cn(s.dataSourceItem, dataSourceType === 'FILE' && s.active)}
  36. onClick={() => setDataSourceType('FILE')}
  37. >
  38. <span className={cn(s.datasetIcon)}/>
  39. {t('datasetCreation.stepOne.dataSourceType.file')}
  40. </div>
  41. <div
  42. className={cn(s.dataSourceItem, s.disabled, dataSourceType === 'notion' && s.active)}
  43. // onClick={() => setDataSourceType('notion')}
  44. >
  45. <span className={s.comingTag}>Coming soon</span>
  46. <span className={cn(s.datasetIcon, s.notion)}/>
  47. {t('datasetCreation.stepOne.dataSourceType.notion')}
  48. </div>
  49. <div
  50. className={cn(s.dataSourceItem, s.disabled, dataSourceType === 'web' && s.active)}
  51. // onClick={() => setDataSourceType('web')}
  52. >
  53. <span className={s.comingTag}>Coming soon</span>
  54. <span className={cn(s.datasetIcon, s.web)}/>
  55. {t('datasetCreation.stepOne.dataSourceType.web')}
  56. </div>
  57. </div>
  58. <FileUploader onFileUpdate={updateFile} file={file} />
  59. <Button disabled={!file} className={s.submitButton} type='primary' onClick={onStepChange}>{t('datasetCreation.stepOne.button')}</Button>
  60. {!datasetId && (
  61. <>
  62. <div className={s.dividerLine}/>
  63. <div onClick={modalShowHandle} className={s.OtherCreationOption}>{t('datasetCreation.stepOne.emptyDatasetCreation')}</div>
  64. </>
  65. )}
  66. </div>
  67. <EmptyDatasetCreationModal show={showModal} onHide={modalCloseHandle}/>
  68. </div>
  69. {file && <FilePreview file={file} />}
  70. </div>
  71. )
  72. }
  73. export default StepOne