Commit 2b9f394a authored by JzoNg's avatar JzoNg

feat: add type for notion info list

parent 56bebe04
...@@ -26,7 +26,7 @@ const NotionPageSelector = ({ ...@@ -26,7 +26,7 @@ const NotionPageSelector = ({
canPreview, canPreview,
previewPageId, previewPageId,
onPreview, onPreview,
datasetId, datasetId = '',
}: NotionPageSelectorProps) => { }: NotionPageSelectorProps) => {
const { data } = useSWR({ url: '/notion/pre-import/pages', datasetId }, preImportNotionPages) const { data } = useSWR({ url: '/notion/pre-import/pages', datasetId }, preImportNotionPages)
const [prevData, setPrevData] = useState(data) const [prevData, setPrevData] = useState(data)
......
...@@ -11,9 +11,12 @@ import { DataSourceType } from '@/models/datasets' ...@@ -11,9 +11,12 @@ import { DataSourceType } from '@/models/datasets'
import type { DataSet, File, createDocumentResponse } from '@/models/datasets' import type { DataSet, File, createDocumentResponse } from '@/models/datasets'
import { fetchDataSource, fetchTenantInfo } from '@/service/common' import { fetchDataSource, fetchTenantInfo } from '@/service/common'
import { fetchDataDetail } from '@/service/datasets' import { fetchDataDetail } from '@/service/datasets'
import type { DataSourceNotionPage } from '@/models/common'
import AccountSetting from '@/app/components/header/account-setting' import AccountSetting from '@/app/components/header/account-setting'
type Page = DataSourceNotionPage & { workspace_id: string }
type DatasetUpdateFormProps = { type DatasetUpdateFormProps = {
datasetId?: string datasetId?: string
} }
...@@ -32,8 +35,8 @@ const DatasetUpdateForm = ({ datasetId }: DatasetUpdateFormProps) => { ...@@ -32,8 +35,8 @@ const DatasetUpdateForm = ({ datasetId }: DatasetUpdateFormProps) => {
const [hasError, setHasError] = useState(false) const [hasError, setHasError] = useState(false)
// TODO // TODO
const [notionPages, setNotionPages] = useState<any>([]) const [notionPages, setNotionPages] = useState<Page[]>([])
const updateNotionPages = (value: any[]) => { const updateNotionPages = (value: Page[]) => {
setNotionPages(value) setNotionPages(value)
} }
...@@ -100,6 +103,7 @@ const DatasetUpdateForm = ({ datasetId }: DatasetUpdateFormProps) => { ...@@ -100,6 +103,7 @@ const DatasetUpdateForm = ({ datasetId }: DatasetUpdateFormProps) => {
onSetting={showDataSourceSetting} onSetting={showDataSourceSetting}
datasetId={datasetId} datasetId={datasetId}
dataSourceType={dataSourceType} dataSourceType={dataSourceType}
dataSourceTypeDisable={!!detail?.data_source_type}
changeType={setDataSourceType} changeType={setDataSourceType}
file={file} file={file}
updateFile={updateFile} updateFile={updateFile}
......
...@@ -16,6 +16,7 @@ import { NotionPageSelector } from '@/app/components/base/notion-page-selector' ...@@ -16,6 +16,7 @@ import { NotionPageSelector } from '@/app/components/base/notion-page-selector'
type IStepOneProps = { type IStepOneProps = {
datasetId?: string datasetId?: string
dataSourceType: DataSourceType dataSourceType: DataSourceType
dataSourceTypeDisable: Boolean
hasConnection: boolean hasConnection: boolean
onSetting: () => void onSetting: () => void
file?: File file?: File
...@@ -31,6 +32,7 @@ type Page = DataSourceNotionPage & { workspace_id: string } ...@@ -31,6 +32,7 @@ type Page = DataSourceNotionPage & { workspace_id: string }
const StepOne = ({ const StepOne = ({
datasetId, datasetId,
dataSourceType, dataSourceType,
dataSourceTypeDisable,
changeType, changeType,
hasConnection, hasConnection,
onSetting, onSetting,
...@@ -66,8 +68,14 @@ const StepOne = ({ ...@@ -66,8 +68,14 @@ const StepOne = ({
<div className={s.form}> <div className={s.form}>
<div className={s.dataSourceTypeList}> <div className={s.dataSourceTypeList}>
<div <div
className={cn(s.dataSourceItem, dataSourceType === DataSourceType.FILE && s.active)} className={cn(
s.dataSourceItem,
dataSourceType === DataSourceType.FILE && s.active,
dataSourceTypeDisable && dataSourceType !== DataSourceType.FILE && s.disabled,
)}
onClick={() => { onClick={() => {
if (dataSourceTypeDisable)
return
changeType(DataSourceType.FILE) changeType(DataSourceType.FILE)
hidePreview() hidePreview()
}} }}
...@@ -76,8 +84,14 @@ const StepOne = ({ ...@@ -76,8 +84,14 @@ const StepOne = ({
{t('datasetCreation.stepOne.dataSourceType.file')} {t('datasetCreation.stepOne.dataSourceType.file')}
</div> </div>
<div <div
className={cn(s.dataSourceItem, dataSourceType === DataSourceType.NOTION && s.active)} className={cn(
s.dataSourceItem,
dataSourceType === DataSourceType.NOTION && s.active,
dataSourceTypeDisable && dataSourceType !== DataSourceType.NOTION && s.disabled,
)}
onClick={() => { onClick={() => {
if (dataSourceTypeDisable)
return
changeType(DataSourceType.NOTION) changeType(DataSourceType.NOTION)
hidePreview() hidePreview()
}} }}
...@@ -112,9 +126,8 @@ const StepOne = ({ ...@@ -112,9 +126,8 @@ const StepOne = ({
)} )}
{hasConnection && ( {hasConnection && (
<> <>
{/* TODO */}
<div className='mb-8 w-[640px]'> <div className='mb-8 w-[640px]'>
<NotionPageSelector onSelect={updateNotionPages} onPreview={updateCurrentPage} /> <NotionPageSelector value={notionPages.map(page => page.page_id)} onSelect={updateNotionPages} onPreview={updateCurrentPage} />
</div> </div>
<Button disabled={!notionPages.length} className={s.submitButton} type='primary' onClick={onStepChange}>{t('datasetCreation.stepOne.button')}</Button> <Button disabled={!notionPages.length} className={s.submitButton} type='primary' onClick={onStepChange}>{t('datasetCreation.stepOne.button')}</Button>
</> </>
......
...@@ -6,9 +6,10 @@ import { useBoolean } from 'ahooks' ...@@ -6,9 +6,10 @@ import { useBoolean } from 'ahooks'
import { XMarkIcon } from '@heroicons/react/20/solid' import { XMarkIcon } from '@heroicons/react/20/solid'
import cn from 'classnames' import cn from 'classnames'
import Link from 'next/link' import Link from 'next/link'
import { groupBy } from 'lodash-es'
import PreviewItem from './preview-item' import PreviewItem from './preview-item'
import s from './index.module.css' import s from './index.module.css'
import type { CreateDocumentReq, DataSourceType, File, FullDocumentDetail, FileIndexingEstimateResponse as IndexingEstimateResponse, PreProcessingRule, Rules, createDocumentResponse } from '@/models/datasets' import type { CreateDocumentReq, File, FullDocumentDetail, FileIndexingEstimateResponse as IndexingEstimateResponse, NotionInfo, PreProcessingRule, Rules, createDocumentResponse } from '@/models/datasets'
import { import {
createDocument, createDocument,
createFirstDocument, createFirstDocument,
...@@ -20,6 +21,10 @@ import Loading from '@/app/components/base/loading' ...@@ -20,6 +21,10 @@ import Loading from '@/app/components/base/loading'
import Toast from '@/app/components/base/toast' import Toast from '@/app/components/base/toast'
import { formatNumber } from '@/utils/format' import { formatNumber } from '@/utils/format'
import type { DataSourceNotionPage } from '@/models/common'
import { DataSourceType } from '@/models/datasets'
type Page = DataSourceNotionPage & { workspace_id: string }
type StepTwoProps = { type StepTwoProps = {
isSetting?: boolean isSetting?: boolean
...@@ -30,7 +35,7 @@ type StepTwoProps = { ...@@ -30,7 +35,7 @@ type StepTwoProps = {
indexingType?: string indexingType?: string
dataSourceType: DataSourceType dataSourceType: DataSourceType
file?: File file?: File
notionPages?: any[] notionPages?: Page[]
onStepChange?: (delta: number) => void onStepChange?: (delta: number) => void
updateIndexingTypeCache?: (type: string) => void updateIndexingTypeCache?: (type: string) => void
updateResultCache?: (res: createDocumentResponse) => void updateResultCache?: (res: createDocumentResponse) => void
...@@ -56,6 +61,7 @@ const StepTwo = ({ ...@@ -56,6 +61,7 @@ const StepTwo = ({
indexingType, indexingType,
dataSourceType, dataSourceType,
file, file,
notionPages,
onStepChange, onStepChange,
updateIndexingTypeCache, updateIndexingTypeCache,
updateResultCache, updateResultCache,
...@@ -188,6 +194,30 @@ const StepTwo = ({ ...@@ -188,6 +194,30 @@ const StepTwo = ({
return params return params
} }
const getNotionInfo = () => {
const workspacesMap = groupBy(notionPages, 'workspace_id')
const workspaces = Object.keys(workspacesMap).map((workspaceId) => {
return {
workspaceId,
pages: workspacesMap[workspaceId],
}
})
return workspaces.map((workspace) => {
return {
workspace_id: workspace.workspaceId,
pages: workspace.pages.map((page) => {
const { page_id, page_name, page_icon, type } = page
return {
page_id,
page_name,
page_icon,
type,
}
}),
}
}) as NotionInfo[]
}
const getCreationParams = () => { const getCreationParams = () => {
let params let params
if (isSetting) { if (isSetting) {
...@@ -200,14 +230,21 @@ const StepTwo = ({ ...@@ -200,14 +230,21 @@ const StepTwo = ({
params = { params = {
data_source: { data_source: {
type: dataSourceType, type: dataSourceType,
// name: file?.name, info_list: {
info: [{ data_source_type: dataSourceType,
upload_file_id: file?.id, },
}],
}, },
indexing_technique: getIndexing_technique(), indexing_technique: getIndexing_technique(),
process_rule: getProcessRule(), process_rule: getProcessRule(),
} as CreateDocumentReq } as CreateDocumentReq
if (dataSourceType === DataSourceType.FILE) {
params.data_source.info_list.file_info_list = {
// TODO multi files
file_ids: [file?.id || ''],
}
}
if (dataSourceType === DataSourceType.NOTION)
params.data_source.info_list.notion_info_list = getNotionInfo()
} }
return params return params
} }
......
...@@ -19,6 +19,7 @@ import { useDatasetDetailContext } from '@/context/dataset-detail' ...@@ -19,6 +19,7 @@ import { useDatasetDetailContext } from '@/context/dataset-detail'
import { NotionPageSelectorModal } from '@/app/components/base/notion-page-selector' import { NotionPageSelectorModal } from '@/app/components/base/notion-page-selector'
import type { DataSourceNotionPage } from '@/models/common' import type { DataSourceNotionPage } from '@/models/common'
import type { CreateDocumentReq } from '@/models/datasets' import type { CreateDocumentReq } from '@/models/datasets'
import { DataSourceType } from '@/models/datasets'
// Custom page count is not currently supported. // Custom page count is not currently supported.
const limit = 15 const limit = 15
...@@ -95,7 +96,7 @@ const Documents: FC<IDocumentsProps> = ({ datasetId }) => { ...@@ -95,7 +96,7 @@ const Documents: FC<IDocumentsProps> = ({ datasetId }) => {
const total = documentsRes?.total || 0 const total = documentsRes?.total || 0
const routeToDocCreate = () => { const routeToDocCreate = () => {
if (dataset?.data_source_type === 'notion_import') { if (dataset?.data_source_type === DataSourceType.NOTION) {
setNotionPageSelectorModalVisible(true) setNotionPageSelectorModalVisible(true)
return return
} }
......
...@@ -13,7 +13,7 @@ export type DataSet = { ...@@ -13,7 +13,7 @@ export type DataSet = {
icon_background: string icon_background: string
description: string description: string
permission: 'only_me' | 'all_team_members' permission: 'only_me' | 'all_team_members'
data_source_type: 'upload_file' data_source_type: DataSourceType
indexing_technique: 'high_quality' | 'economy' indexing_technique: 'high_quality' | 'economy'
created_by: string created_by: string
updated_by: string updated_by: string
...@@ -169,13 +169,23 @@ export type CreateDocumentReq = { ...@@ -169,13 +169,23 @@ export type CreateDocumentReq = {
} }
export type DataSource = { export type DataSource = {
type: string type: DataSourceType
// name: string info_list: {
info: Info[] // upload_file_id data_source_type: DataSourceType
notion_info_list?: NotionInfo[]
file_info_list?: {
file_ids: string[]
}
}
} }
export type Info = { export type NotionInfo = {
upload_file_id: string workspace_id: string
pages: NotionPage[]
}
export type NotionPage = {
page_id: string
type: string
} }
export type ProcessRule = { export type ProcessRule = {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment