mirror of
https://github.com/infiniflow/ragflow.git
synced 2025-12-25 08:06:48 +08:00
### What problem does this PR solve? Feat: Add FormDrawer to agent page. #3221 ### Type of change - [x] New Feature (non-breaking change which adds functionality)
98 lines
2.4 KiB
TypeScript
98 lines
2.4 KiB
TypeScript
import get from 'lodash/get';
|
|
import {
|
|
ChangeEventHandler,
|
|
MouseEventHandler,
|
|
useCallback,
|
|
useMemo,
|
|
} from 'react';
|
|
import { v4 as uuid } from 'uuid';
|
|
import { IGenerateParameter, IInvokeVariable } from '../../interface';
|
|
import useGraphStore from '../../store';
|
|
|
|
export const useHandleOperateParameters = (nodeId: string) => {
|
|
const { getNode, updateNodeForm } = useGraphStore((state) => state);
|
|
const node = getNode(nodeId);
|
|
const dataSource: IGenerateParameter[] = useMemo(
|
|
() => get(node, 'data.form.variables', []) as IGenerateParameter[],
|
|
[node],
|
|
);
|
|
|
|
const changeValue = useCallback(
|
|
(row: IInvokeVariable, field: string, value: string) => {
|
|
const newData = [...dataSource];
|
|
const index = newData.findIndex((item) => row.id === item.id);
|
|
const item = newData[index];
|
|
newData.splice(index, 1, {
|
|
...item,
|
|
[field]: value,
|
|
});
|
|
|
|
updateNodeForm(nodeId, { variables: newData });
|
|
},
|
|
[dataSource, nodeId, updateNodeForm],
|
|
);
|
|
|
|
const handleComponentIdChange = useCallback(
|
|
(row: IInvokeVariable) => (value: string) => {
|
|
changeValue(row, 'component_id', value);
|
|
},
|
|
[changeValue],
|
|
);
|
|
|
|
const handleValueChange = useCallback(
|
|
(row: IInvokeVariable): ChangeEventHandler<HTMLInputElement> =>
|
|
(e) => {
|
|
changeValue(row, 'value', e.target.value);
|
|
},
|
|
[changeValue],
|
|
);
|
|
|
|
const handleRemove = useCallback(
|
|
(id?: string) => () => {
|
|
const newData = dataSource.filter((item) => item.id !== id);
|
|
updateNodeForm(nodeId, { variables: newData });
|
|
},
|
|
[updateNodeForm, nodeId, dataSource],
|
|
);
|
|
|
|
const handleAdd: MouseEventHandler = useCallback(
|
|
(e) => {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
updateNodeForm(nodeId, {
|
|
variables: [
|
|
...dataSource,
|
|
{
|
|
id: uuid(),
|
|
key: '',
|
|
component_id: undefined,
|
|
value: '',
|
|
},
|
|
],
|
|
});
|
|
},
|
|
[dataSource, nodeId, updateNodeForm],
|
|
);
|
|
|
|
const handleSave = (row: IGenerateParameter) => {
|
|
const newData = [...dataSource];
|
|
const index = newData.findIndex((item) => row.id === item.id);
|
|
const item = newData[index];
|
|
newData.splice(index, 1, {
|
|
...item,
|
|
...row,
|
|
});
|
|
|
|
updateNodeForm(nodeId, { variables: newData });
|
|
};
|
|
|
|
return {
|
|
handleAdd,
|
|
handleRemove,
|
|
handleComponentIdChange,
|
|
handleValueChange,
|
|
handleSave,
|
|
dataSource,
|
|
};
|
|
};
|