Fix: Dataset parse error (#12310)

### What problem does this PR solve?

Fix: Dataset parse error

### Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)
This commit is contained in:
chanx
2025-12-30 13:08:20 +08:00
committed by GitHub
parent 59884ab0fb
commit 4037788e0c
7 changed files with 138 additions and 138 deletions

View File

@ -278,7 +278,7 @@ export const useRunDocument = () => {
const ret = await kbService.document_run({ const ret = await kbService.document_run({
doc_ids: documentIds, doc_ids: documentIds,
run, run,
...option, ...(option || {}),
}); });
const code = get(ret, 'data.code'); const code = get(ret, 'data.code');
if (code === 0) { if (code === 0) {

View File

@ -129,6 +129,7 @@ export const util = {
metaDataSettingJSONToMetaDataTableData( metaDataSettingJSONToMetaDataTableData(
data: IMetaDataReturnJSONSettings, data: IMetaDataReturnJSONSettings,
): IMetaDataTableData[] { ): IMetaDataTableData[] {
if (!Array.isArray(data)) return [];
return data.map((item) => { return data.map((item) => {
return { return {
field: item.key, field: item.key,

View File

@ -216,7 +216,7 @@ export default function Dataset() {
{reparseDialogVisible && ( {reparseDialogVisible && (
<ReparseDialog <ReparseDialog
// hidden={isZeroChunk || isRunning} // hidden={isZeroChunk || isRunning}
hidden={false} hidden={true}
handleOperationIconClick={handleOperationIconClick} handleOperationIconClick={handleOperationIconClick}
chunk_num={0} chunk_num={0}
visible={reparseDialogVisible} visible={reparseDialogVisible}

View File

@ -72,7 +72,7 @@ export function ParsingStatusCell({
const isRunning = isParserRunning(run); const isRunning = isParserRunning(run);
const isZeroChunk = chunk_num === 0; const isZeroChunk = chunk_num === 0;
const handleOperationIconClick = (option: { const handleOperationIconClick = (option?: {
delete: boolean; delete: boolean;
apply_kb: boolean; apply_kb: boolean;
}) => { }) => {
@ -183,8 +183,8 @@ export function ParsingStatusCell({
)} )}
{reparseDialogVisible && ( {reparseDialogVisible && (
<ReparseDialog <ReparseDialog
// hidden={isZeroChunk || isRunning} hidden={isZeroChunk || isRunning}
hidden={false} // hidden={false}
handleOperationIconClick={handleOperationIconClick} handleOperationIconClick={handleOperationIconClick}
chunk_num={chunk_num} chunk_num={chunk_num}
visible={reparseDialogVisible} visible={reparseDialogVisible}

View File

@ -7,136 +7,134 @@ import {
import { Checkbox } from '@/components/ui/checkbox'; import { Checkbox } from '@/components/ui/checkbox';
import { DialogProps } from '@radix-ui/react-dialog'; import { DialogProps } from '@radix-ui/react-dialog';
import { t } from 'i18next'; import { t } from 'i18next';
import { useCallback, useState } from 'react'; import { memo, useCallback, useEffect, useRef } from 'react';
export const ReparseDialog = ({ export const ReparseDialog = memo(
handleOperationIconClick, ({
chunk_num, handleOperationIconClick,
hidden = false, chunk_num,
visible = true, hidden = false,
hideModal, visible = true,
children, hideModal,
}: DialogProps & { }: DialogProps & {
chunk_num: number; chunk_num: number;
handleOperationIconClick: (options: { handleOperationIconClick: (options?: {
delete: boolean; delete: boolean;
apply_kb: boolean; apply_kb: boolean;
}) => void; }) => void;
visible: boolean; visible: boolean;
hideModal: () => void; hideModal: () => void;
hidden?: boolean; hidden?: boolean;
}) => { }) => {
const [formInstance, setFormInstance] = useState<DynamicFormRef | null>(null); // const [formInstance, setFormInstance] = useState<DynamicFormRef | null>(
// null,
// );
const formCallbackRef = useCallback((node: DynamicFormRef | null) => { // const formCallbackRef = useCallback((node: DynamicFormRef | null) => {
if (node) { // if (node) {
setFormInstance(node); // setFormInstance(node);
console.log('Form instance assigned:', node); // console.log('Form instance assigned:', node);
} else { // } else {
console.log('Form instance removed'); // console.log('Form instance removed');
} // }
}, []); // }, []);
const handleCancel = useCallback(() => { const formCallbackRef = useRef<DynamicFormRef>(null);
// handleOperationIconClick(false);
hideModal?.();
formInstance?.reset();
}, [formInstance]);
const handleSave = useCallback(async () => { const handleCancel = useCallback(() => {
const instance = formInstance; // handleOperationIconClick(false);
if (!instance) { hideModal?.();
console.error('Form instance is null'); // formInstance?.reset();
return; formCallbackRef?.current?.reset();
} }, [formCallbackRef, hideModal]);
const check = await instance.trigger(); const handleSave = useCallback(async () => {
if (check) { // const instance = formInstance;
instance.submit(); const instance = formCallbackRef?.current;
const formValues = instance.getValues(); if (!instance) {
console.log(formValues); console.error('Form instance is null');
handleOperationIconClick({ return;
delete: formValues.delete, }
apply_kb: formValues.apply_kb,
});
}
}, [formInstance, handleOperationIconClick]);
// useEffect(() => { const check = await instance.trigger();
// if (!hidden) { if (check) {
// const timer = setTimeout(() => { instance.submit();
// if (!formInstance) { const formValues = instance.getValues();
// console.warn( console.log(formValues);
// 'Form ref is still null after component should be mounted', handleOperationIconClick({
// ); delete: formValues.delete,
// } else { apply_kb: formValues.apply_kb,
// console.log('Form ref is properly set'); });
// } }
// }, 1000); }, [formCallbackRef, handleOperationIconClick]);
// return () => clearTimeout(timer); useEffect(() => {
// } if (hidden) {
// }, [hidden, formInstance]); handleOperationIconClick();
}
}, []);
return ( return (
<ConfirmDeleteDialog <ConfirmDeleteDialog
title={t(`knowledgeDetails.parseFile`)} title={t(`knowledgeDetails.parseFile`)}
onOk={() => handleSave()} onOk={() => handleSave()}
onCancel={() => handleCancel()} onCancel={() => handleCancel()}
hidden={hidden} hidden={hidden}
open={visible} open={visible}
okButtonText={t('common.confirm')} okButtonText={t('common.confirm')}
content={{ content={{
title: t(`knowledgeDetails.parseFileTip`), title: t(`knowledgeDetails.parseFileTip`),
node: ( node: (
<div> <div>
<DynamicForm.Root <DynamicForm.Root
onSubmit={(data) => { onSubmit={(data) => {
console.log('submit', data); console.log('submit', data);
}} }}
ref={formCallbackRef} ref={formCallbackRef}
fields={[ fields={[
{ {
name: 'delete', name: 'delete',
label: '', label: '',
type: FormFieldType.Checkbox, type: FormFieldType.Checkbox,
render: (fieldProps) => ( render: (fieldProps) => (
<div className="flex items-center text-text-secondary p-5 border border-border-button rounded-lg"> <div className="flex items-center text-text-secondary p-5 border border-border-button rounded-lg">
<Checkbox <Checkbox
{...fieldProps} {...fieldProps}
onCheckedChange={(checked: boolean) => { onCheckedChange={(checked: boolean) => {
fieldProps.onChange(checked); fieldProps.onChange(checked);
}} }}
/> />
<span className="ml-2"> <span className="ml-2">
{chunk_num > 0 {chunk_num > 0
? t(`knowledgeDetails.redo`, { chunkNum: chunk_num }) ? t(`knowledgeDetails.redo`, {
: t('knowledgeDetails.redoAll')} chunkNum: chunk_num,
</span> })
</div> : t('knowledgeDetails.redoAll')}
), </span>
}, </div>
{ ),
name: 'apply_kb', },
label: '', {
type: FormFieldType.Checkbox, name: 'apply_kb',
render: (fieldProps) => ( label: '',
<div className="flex items-center text-text-secondary p-5 border border-border-button rounded-lg"> type: FormFieldType.Checkbox,
<Checkbox render: (fieldProps) => (
{...fieldProps} <div className="flex items-center text-text-secondary p-5 border border-border-button rounded-lg">
onCheckedChange={(checked: boolean) => { <Checkbox
fieldProps.onChange(checked); {...fieldProps}
}} onCheckedChange={(checked: boolean) => {
/> fieldProps.onChange(checked);
<span className="ml-2"> }}
{t('knowledgeDetails.applyAutoMetadataSettings')} />
</span> <span className="ml-2">
</div> {t('knowledgeDetails.applyAutoMetadataSettings')}
), </span>
}, </div>
]} ),
> },
{/* <DynamicForm.CancelButton ]}
>
{/* <DynamicForm.CancelButton
handleCancel={() => handleOperationIconClick(false)} handleCancel={() => handleOperationIconClick(false)}
cancelText={t('common.cancel')} cancelText={t('common.cancel')}
/> />
@ -144,12 +142,13 @@ export const ReparseDialog = ({
buttonText={t('common.confirm')} buttonText={t('common.confirm')}
submitFunc={handleSave} submitFunc={handleSave}
/> */} /> */}
</DynamicForm.Root> </DynamicForm.Root>
</div> </div>
), ),
}} }}
> >
{/* {children} */} {/* {children} */}
</ConfirmDeleteDialog> </ConfirmDeleteDialog>
); );
}; },
);

View File

@ -54,7 +54,7 @@ export function useBulkOperateDataset({
); );
const handleRunClick = useCallback( const handleRunClick = useCallback(
(option: { delete: boolean; apply_kb: boolean }) => { (option?: { delete: boolean; apply_kb: boolean }) => {
runDocument(1, option); runDocument(1, option);
}, },
[runDocument], [runDocument],

View File

@ -10,7 +10,7 @@ export const useHandleRunDocumentByIds = (id: string) => {
const handleRunDocumentByIds = async ( const handleRunDocumentByIds = async (
documentId: string, documentId: string,
isRunning: boolean, isRunning: boolean,
option: { delete: boolean; apply_kb: boolean }, option?: { delete: boolean; apply_kb: boolean },
) => { ) => {
if (isLoading) { if (isLoading) {
return; return;