'use client' import React, { useMemo, useState } from 'react' import useSWR from 'swr' import { useTranslation } from 'react-i18next' import cn from 'classnames' import FilePreview from '../file-preview' import FileUploader from '../file-uploader' import NotionPagePreview from '../notion-page-preview' import EmptyDatasetCreationModal from '../empty-dataset-creation-modal' import s from './index.module.css' import type { FileItem } from '@/models/datasets' import type { NotionPage } from '@/models/common' import { DataSourceType } from '@/models/datasets' import Button from '@/app/components/base/button' import { NotionPageSelector } from '@/app/components/base/notion-page-selector' import { useDatasetDetailContext } from '@/context/dataset-detail' import { fetchDocumentsLimit } from '@/service/common' type IStepOneProps = { datasetId?: string dataSourceType?: DataSourceType dataSourceTypeDisable: Boolean hasConnection: boolean onSetting: () => void files: FileItem[] updateFileList: (files: FileItem[]) => void updateFile: (fileItem: FileItem, progress: number, list: FileItem[]) => void notionPages?: NotionPage[] updateNotionPages: (value: NotionPage[]) => void onStepChange: () => void changeType: (type: DataSourceType) => void } type NotionConnectorProps = { onSetting: () => void } export const NotionConnector = ({ onSetting }: NotionConnectorProps) => { const { t } = useTranslation() return (
{t('datasetCreation.stepOne.notionSyncTitle')}
{t('datasetCreation.stepOne.notionSyncTip')}
) } const StepOne = ({ datasetId, dataSourceType, dataSourceTypeDisable, changeType, hasConnection, onSetting, onStepChange, files, updateFileList, updateFile, notionPages = [], updateNotionPages, }: IStepOneProps) => { const { data: limitsData } = useSWR('/datasets/limit', fetchDocumentsLimit) const { dataset } = useDatasetDetailContext() const [showModal, setShowModal] = useState(false) const [currentFile, setCurrentFile] = useState() const [currentNotionPage, setCurrentNotionPage] = useState() const { t } = useTranslation() const modalShowHandle = () => setShowModal(true) const modalCloseHandle = () => setShowModal(false) const updateCurrentFile = (file: File) => { setCurrentFile(file) } const hideFilePreview = () => { setCurrentFile(undefined) } const updateCurrentPage = (page: NotionPage) => { setCurrentNotionPage(page) } const hideNotionPagePreview = () => { setCurrentNotionPage(undefined) } const shouldShowDataSourceTypeList = !datasetId || (datasetId && !dataset?.data_source_type) const nextDisabled = useMemo(() => { if (!files.length) return true if (files.some(file => !file.file.id)) return true return false }, [files]) return (
{ shouldShowDataSourceTypeList && (
{t('datasetCreation.steps.one')}
) }
{ shouldShowDataSourceTypeList && (
{ if (dataSourceTypeDisable) return changeType(DataSourceType.FILE) hideFilePreview() hideNotionPagePreview() }} > {t('datasetCreation.stepOne.dataSourceType.file')}
{ if (dataSourceTypeDisable) return changeType(DataSourceType.NOTION) hideFilePreview() hideNotionPagePreview() }} > {t('datasetCreation.stepOne.dataSourceType.notion')}
changeType(DataSourceType.WEB)} > Coming soon {t('datasetCreation.stepOne.dataSourceType.web')}
) } {dataSourceType === DataSourceType.FILE && limitsData && ( <> )} {dataSourceType === DataSourceType.NOTION && ( <> {!hasConnection && } {hasConnection && limitsData && ( <>
page.page_id)} onSelect={updateNotionPages} onPreview={updateCurrentPage} countLimit={limitsData.documents_limit} countUsed={limitsData.documents_count} />
)} )} {!datasetId && ( <>
{t('datasetCreation.stepOne.emptyDatasetCreation')}
)}
{currentFile && } {currentNotionPage && }
) } export default StepOne