import { useState, useEffect, useCallback } from 'react'; import { message } from 'antd'; import type { FormInstance } from 'antd'; import type { Dataset } from '~/api/dify-dataset/type/datasetTypes'; import { updateDatasetName } from '~/api/dify-dataset/api/datasetApi'; /** * 知识库设置状态管理 Hook */ export function useDatasetSettings( dataset: Dataset | null, form: FormInstance, onDatasetUpdated: (dataset: Dataset) => void ) { const [saving, setSaving] = useState(false); const [hasChanges, setHasChanges] = useState(false); // 初始化表单数据 useEffect(() => { if (dataset) { form.setFieldsValue({ name: dataset.name, description: dataset.description || '', }); setHasChanges(false); } }, [dataset, form]); /** * 处理表单值变化 */ const handleValuesChange = useCallback(() => { const values = form.getFieldsValue(); const changed = values.name !== dataset?.name || values.description !== (dataset?.description || ''); setHasChanges(changed); }, [form, dataset]); /** * 保存设置 */ const handleSave = useCallback(async () => { if (!dataset) { message.error('知识库不存在'); return; } try { const values = await form.validateFields(); setSaving(true); // 目前只支持修改名称 const updatedDataset = await updateDatasetName(dataset.id, values.name); message.success('保存成功'); onDatasetUpdated(updatedDataset); setHasChanges(false); } catch (err: any) { console.error('保存设置失败:', err); message.error(err.message || '保存失败'); } finally { setSaving(false); } }, [dataset, form, onDatasetUpdated]); /** * 重置表单 */ const handleReset = useCallback(() => { if (dataset) { form.setFieldsValue({ name: dataset.name, description: dataset.description || '', }); setHasChanges(false); } }, [dataset, form]); return { // 状态 saving, hasChanges, // 方法 handleValuesChange, handleSave, handleReset, }; } export type UseDatasetSettingsReturn = ReturnType;