mirror of
https://github.com/infiniflow/ragflow.git
synced 2025-12-31 01:01:30 +08:00
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:
@ -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) {
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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}
|
||||||
|
|||||||
@ -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}
|
||||||
|
|||||||
@ -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>
|
||||||
);
|
);
|
||||||
};
|
},
|
||||||
|
);
|
||||||
|
|||||||
@ -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],
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user