From 9d5299e9ec228836207fe374207b2cd4a864339b Mon Sep 17 00:00:00 2001 From: zxhlyh Date: Tue, 22 Aug 2023 15:22:16 +0800 Subject: [PATCH] fix: segment error tip & save segment disable when loading (#949) --- .../documents/detail/completed/index.tsx | 49 +++++++++---- .../documents/detail/new-segment-modal.tsx | 19 +++-- .../components/datasets/documents/list.tsx | 72 +------------------ 3 files changed, 51 insertions(+), 89 deletions(-) diff --git a/web/app/components/datasets/documents/detail/completed/index.tsx b/web/app/components/datasets/documents/detail/completed/index.tsx index 34744d6c6..5bd80ede2 100644 --- a/web/app/components/datasets/documents/detail/completed/index.tsx +++ b/web/app/components/datasets/documents/detail/completed/index.tsx @@ -28,6 +28,7 @@ import AutoHeightTextarea from '@/app/components/base/auto-height-textarea/commo import Button from '@/app/components/base/button' import NewSegmentModal from '@/app/components/datasets/documents/detail/new-segment-modal' import TagInput from '@/app/components/base/tag-input' +import { useEventEmitterContextContext } from '@/context/event-emitter' export const SegmentIndexTag: FC<{ positionId: string | number; className?: string }> = ({ positionId, className }) => { const localPositionId = useMemo(() => { @@ -66,6 +67,15 @@ export const SegmentDetail: FC = memo(({ const [question, setQuestion] = useState(segInfo?.content || '') const [answer, setAnswer] = useState(segInfo?.answer || '') const [keywords, setKeywords] = useState(segInfo?.keywords || []) + const { eventEmitter } = useEventEmitterContextContext() + const [loading, setLoading] = useState(false) + + eventEmitter?.useSubscription((v) => { + if (v === 'update-segment') + setLoading(true) + else + setLoading(false) + }) const handleCancel = () => { setIsEditing(false) @@ -129,7 +139,9 @@ export const SegmentDetail: FC = memo(({ @@ -225,6 +237,7 @@ const Completed: FC = ({ const [allSegments, setAllSegments] = useState>([]) // all segments data const [loading, setLoading] = useState(false) const [total, setTotal] = useState() + const { eventEmitter } = useEventEmitterContextContext() const onChangeStatus = ({ value }: Item) => { setSelectedStatus(value === 'all' ? 'all' : !!value) @@ -318,23 +331,29 @@ const Completed: FC = ({ if (keywords.length) params.keywords = keywords - const res = await updateSegment({ datasetId, documentId, segmentId, body: params }) - notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) - onCloseModal() - for (const item of allSegments) { - for (const seg of item) { - if (seg.id === segmentId) { - seg.answer = res.data.answer - seg.content = res.data.content - seg.keywords = res.data.keywords - seg.word_count = res.data.word_count - seg.hit_count = res.data.hit_count - seg.index_node_hash = res.data.index_node_hash - seg.enabled = res.data.enabled + try { + eventEmitter?.emit('update-segment') + const res = await updateSegment({ datasetId, documentId, segmentId, body: params }) + notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) + onCloseModal() + for (const item of allSegments) { + for (const seg of item) { + if (seg.id === segmentId) { + seg.answer = res.data.answer + seg.content = res.data.content + seg.keywords = res.data.keywords + seg.word_count = res.data.word_count + seg.hit_count = res.data.hit_count + seg.index_node_hash = res.data.index_node_hash + seg.enabled = res.data.enabled + } } } + setAllSegments([...allSegments]) + } + finally { + eventEmitter?.emit('') } - setAllSegments([...allSegments]) } useEffect(() => { diff --git a/web/app/components/datasets/documents/detail/new-segment-modal.tsx b/web/app/components/datasets/documents/detail/new-segment-modal.tsx index 9abe36a9f..d4b2662f4 100644 --- a/web/app/components/datasets/documents/detail/new-segment-modal.tsx +++ b/web/app/components/datasets/documents/detail/new-segment-modal.tsx @@ -31,6 +31,7 @@ const NewSegmentModal: FC = memo(({ const [answer, setAnswer] = useState('') const { datasetId, documentId } = useParams() const [keywords, setKeywords] = useState([]) + const [loading, setLoading] = useState(false) const handleCancel = () => { setQuestion('') @@ -60,10 +61,16 @@ const NewSegmentModal: FC = memo(({ if (keywords?.length) params.keywords = keywords - await addSegment({ datasetId, documentId, body: params }) - notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) - handleCancel() - onSave() + setLoading(true) + try { + await addSegment({ datasetId, documentId, body: params }) + notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) + handleCancel() + onSave() + } + finally { + setLoading(false) + } } const renderContent = () => { @@ -136,7 +143,9 @@ const NewSegmentModal: FC = memo(({ diff --git a/web/app/components/datasets/documents/list.tsx b/web/app/components/datasets/documents/list.tsx index b3bc61bfe..a41277a80 100644 --- a/web/app/components/datasets/documents/list.tsx +++ b/web/app/components/datasets/documents/list.tsx @@ -27,7 +27,6 @@ import NotionIcon from '@/app/components/base/notion-icon' import ProgressBar from '@/app/components/base/progress-bar' import { DataSourceType, type DocumentDisplayStatus, type SimpleDocumentDetail } from '@/models/datasets' import type { CommonResponse } from '@/models/common' -import { FilePlus02 } from '@/app/components/base/icons/src/vender/line/files' import { DotsHorizontal, HelpCircle } from '@/app/components/base/icons/src/vender/line/general' export const SettingsIcon: FC<{ className?: string }> = ({ className }) => { @@ -89,7 +88,9 @@ export const StatusItem: FC<{ errorMessage && ( {errorMessage} + } > @@ -152,73 +153,6 @@ export const OperationAction: FC<{ onUpdate(operationName) } - const Operations = (props: any) =>
- {!isListScene && <> -
- - {!archived && enabled ? t('datasetDocuments.list.index.enable') : t('datasetDocuments.list.index.disable')} - - -
- !archived && onOperate(v ? 'enable' : 'disable')} - disabled={archived} - size='md' - /> -
-
-
-
- {!archived && enabled ? t('datasetDocuments.list.index.enableTip') : t('datasetDocuments.list.index.disableTip')} -
- - } - {!archived && ( - <> -
router.push(`/datasets/${datasetId}/documents/${detail.id}/settings`)}> - - {t('datasetDocuments.list.action.settings')} -
- { - !isListScene && ( -
- - {t('datasetDocuments.list.action.add')} -
- ) - } - { - data_source_type === 'notion_import' && ( -
onOperate('sync')}> - - {t('datasetDocuments.list.action.sync')} -
- ) - } - - - )} - {!archived &&
onOperate('archive')}> - - {t('datasetDocuments.list.action.archive')} -
} -
{ - setShowModal(true) - props?.onClose() - }}> - - {t('datasetDocuments.list.action.delete')} -
-
- return
e.stopPropagation()}> {isListScene && <> {archived