|
|
|
|
|
|
|
|
import { |
|
|
import { |
|
|
useChildSegmentList, |
|
|
useChildSegmentList, |
|
|
useChildSegmentListKey, |
|
|
useChildSegmentListKey, |
|
|
|
|
|
useChunkListAllKey, |
|
|
|
|
|
useChunkListDisabledKey, |
|
|
|
|
|
useChunkListEnabledKey, |
|
|
useDeleteChildSegment, |
|
|
useDeleteChildSegment, |
|
|
useDeleteSegment, |
|
|
useDeleteSegment, |
|
|
useDisableSegment, |
|
|
useDisableSegment, |
|
|
|
|
|
|
|
|
page: isFullDocMode ? 1 : currentPage, |
|
|
page: isFullDocMode ? 1 : currentPage, |
|
|
limit: isFullDocMode ? 10 : limit, |
|
|
limit: isFullDocMode ? 10 : limit, |
|
|
keyword: isFullDocMode ? '' : searchValue, |
|
|
keyword: isFullDocMode ? '' : searchValue, |
|
|
enabled: selectedStatus === 'all' ? 'all' : !!selectedStatus, |
|
|
|
|
|
|
|
|
enabled: selectedStatus, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
currentPage === 0, |
|
|
|
|
|
) |
|
|
) |
|
|
const invalidSegmentList = useInvalid(useSegmentListKey) |
|
|
const invalidSegmentList = useInvalid(useSegmentListKey) |
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
useEffect(() => { |
|
|
if (segmentListData) { |
|
|
if (segmentListData) { |
|
|
setSegments(segmentListData.data || []) |
|
|
setSegments(segmentListData.data || []) |
|
|
if (segmentListData.total_pages < currentPage) |
|
|
|
|
|
setCurrentPage(segmentListData.total_pages) |
|
|
|
|
|
|
|
|
const totalPages = segmentListData.total_pages |
|
|
|
|
|
if (totalPages < currentPage) |
|
|
|
|
|
setCurrentPage(totalPages === 0 ? 1 : totalPages) |
|
|
} |
|
|
} |
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps |
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps |
|
|
}, [segmentListData]) |
|
|
}, [segmentListData]) |
|
|
|
|
|
|
|
|
documentId, |
|
|
documentId, |
|
|
segmentId: segments[0]?.id || '', |
|
|
segmentId: segments[0]?.id || '', |
|
|
params: { |
|
|
params: { |
|
|
page: currentPage, |
|
|
|
|
|
|
|
|
page: currentPage === 0 ? 1 : currentPage, |
|
|
limit, |
|
|
limit, |
|
|
keyword: searchValue, |
|
|
keyword: searchValue, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
!isFullDocMode || segments.length === 0 || currentPage === 0, |
|
|
|
|
|
|
|
|
!isFullDocMode || segments.length === 0, |
|
|
) |
|
|
) |
|
|
const invalidChildSegmentList = useInvalid(useChildSegmentListKey) |
|
|
const invalidChildSegmentList = useInvalid(useChildSegmentListKey) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
useEffect(() => { |
|
|
if (childChunkListData) { |
|
|
if (childChunkListData) { |
|
|
setChildSegments(childChunkListData.data || []) |
|
|
setChildSegments(childChunkListData.data || []) |
|
|
if (childChunkListData.total_pages < currentPage) |
|
|
|
|
|
setCurrentPage(childChunkListData.total_pages) |
|
|
|
|
|
|
|
|
const totalPages = childChunkListData.total_pages |
|
|
|
|
|
if (totalPages < currentPage) |
|
|
|
|
|
setCurrentPage(totalPages === 0 ? 1 : totalPages) |
|
|
} |
|
|
} |
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps |
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps |
|
|
}, [childChunkListData]) |
|
|
}, [childChunkListData]) |
|
|
|
|
|
|
|
|
const resetList = useCallback(() => { |
|
|
const resetList = useCallback(() => { |
|
|
setSegments([]) |
|
|
|
|
|
setSelectedSegmentIds([]) |
|
|
setSelectedSegmentIds([]) |
|
|
invalidSegmentList() |
|
|
invalidSegmentList() |
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps |
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps |
|
|
}, []) |
|
|
}, []) |
|
|
|
|
|
|
|
|
const resetChildList = useCallback(() => { |
|
|
const resetChildList = useCallback(() => { |
|
|
setChildSegments([]) |
|
|
|
|
|
invalidChildSegmentList() |
|
|
invalidChildSegmentList() |
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps |
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps |
|
|
}, []) |
|
|
}, []) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const { mutateAsync: enableSegment } = useEnableSegment() |
|
|
const { mutateAsync: enableSegment } = useEnableSegment() |
|
|
const { mutateAsync: disableSegment } = useDisableSegment() |
|
|
const { mutateAsync: disableSegment } = useDisableSegment() |
|
|
|
|
|
const invalidChunkListAll = useInvalid(useChunkListAllKey) |
|
|
|
|
|
const invalidChunkListEnabled = useInvalid(useChunkListEnabledKey) |
|
|
|
|
|
const invalidChunkListDisabled = useInvalid(useChunkListDisabledKey) |
|
|
|
|
|
|
|
|
|
|
|
const refreshChunkListWithStatusChanged = () => { |
|
|
|
|
|
switch (selectedStatus) { |
|
|
|
|
|
case 'all': |
|
|
|
|
|
invalidChunkListDisabled() |
|
|
|
|
|
invalidChunkListEnabled() |
|
|
|
|
|
break |
|
|
|
|
|
default: |
|
|
|
|
|
invalidSegmentList() |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
const onChangeSwitch = useCallback(async (enable: boolean, segId?: string) => { |
|
|
const onChangeSwitch = useCallback(async (enable: boolean, segId?: string) => { |
|
|
const operationApi = enable ? enableSegment : disableSegment |
|
|
const operationApi = enable ? enableSegment : disableSegment |
|
|
|
|
|
|
|
|
seg.enabled = enable |
|
|
seg.enabled = enable |
|
|
} |
|
|
} |
|
|
setSegments([...segments]) |
|
|
setSegments([...segments]) |
|
|
|
|
|
refreshChunkListWithStatusChanged() |
|
|
}, |
|
|
}, |
|
|
onError: () => { |
|
|
onError: () => { |
|
|
notify({ type: 'error', message: t('common.actionMsg.modifiedUnsuccessfully') }) |
|
|
notify({ type: 'error', message: t('common.actionMsg.modifiedUnsuccessfully') }) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const { mutateAsync: updateSegment } = useUpdateSegment() |
|
|
const { mutateAsync: updateSegment } = useUpdateSegment() |
|
|
|
|
|
|
|
|
|
|
|
const refreshChunkListDataWithDetailChanged = () => { |
|
|
|
|
|
switch (selectedStatus) { |
|
|
|
|
|
case 'all': |
|
|
|
|
|
invalidChunkListDisabled() |
|
|
|
|
|
invalidChunkListEnabled() |
|
|
|
|
|
break |
|
|
|
|
|
case true: |
|
|
|
|
|
invalidChunkListAll() |
|
|
|
|
|
invalidChunkListDisabled() |
|
|
|
|
|
break |
|
|
|
|
|
case false: |
|
|
|
|
|
invalidChunkListAll() |
|
|
|
|
|
invalidChunkListEnabled() |
|
|
|
|
|
break |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
const handleUpdateSegment = useCallback(async ( |
|
|
const handleUpdateSegment = useCallback(async ( |
|
|
segmentId: string, |
|
|
segmentId: string, |
|
|
question: string, |
|
|
question: string, |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
setSegments([...segments]) |
|
|
setSegments([...segments]) |
|
|
|
|
|
refreshChunkListDataWithDetailChanged() |
|
|
eventEmitter?.emit('update-segment-success') |
|
|
eventEmitter?.emit('update-segment-success') |
|
|
}, |
|
|
}, |
|
|
onSettled() { |
|
|
onSettled() { |
|
|
|
|
|
|
|
|
seg.child_chunks?.push(newChildChunk!) |
|
|
seg.child_chunks?.push(newChildChunk!) |
|
|
} |
|
|
} |
|
|
setSegments([...segments]) |
|
|
setSegments([...segments]) |
|
|
|
|
|
refreshChunkListDataWithDetailChanged() |
|
|
} |
|
|
} |
|
|
else { |
|
|
else { |
|
|
resetChildList() |
|
|
resetChildList() |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
setSegments([...segments]) |
|
|
setSegments([...segments]) |
|
|
|
|
|
refreshChunkListDataWithDetailChanged() |
|
|
} |
|
|
} |
|
|
else { |
|
|
else { |
|
|
for (const childSeg of childSegments) { |
|
|
|
|
|
if (childSeg.id === childChunkId) { |
|
|
|
|
|
childSeg.content = res.data.content |
|
|
|
|
|
childSeg.type = res.data.type |
|
|
|
|
|
childSeg.word_count = res.data.word_count |
|
|
|
|
|
childSeg.updated_at = res.data.updated_at |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
setChildSegments([...childSegments]) |
|
|
|
|
|
|
|
|
resetChildList() |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
onSettled: () => { |
|
|
onSettled: () => { |
|
|
|
|
|
|
|
|
<SimpleSelect |
|
|
<SimpleSelect |
|
|
onSelect={onChangeStatus} |
|
|
onSelect={onChangeStatus} |
|
|
items={statusList.current} |
|
|
items={statusList.current} |
|
|
defaultValue={'all'} |
|
|
|
|
|
|
|
|
defaultValue={selectedStatus === 'all' ? 'all' : selectedStatus ? 1 : 0} |
|
|
className={s.select} |
|
|
className={s.select} |
|
|
wrapperClassName='h-fit mr-2' |
|
|
wrapperClassName='h-fit mr-2' |
|
|
optionWrapClassName='w-[160px]' |
|
|
optionWrapClassName='w-[160px]' |
|
|
optionClassName='p-0' |
|
|
optionClassName='p-0' |
|
|
renderOption={({ item, selected }) => <StatusItem item={item} selected={selected} />} |
|
|
renderOption={({ item, selected }) => <StatusItem item={item} selected={selected} />} |
|
|
|
|
|
notClearable |
|
|
/> |
|
|
/> |
|
|
<Input |
|
|
<Input |
|
|
showLeftIcon |
|
|
showLeftIcon |