balibabu
Feat: The Begin and IterationStart operators cannot be deleted using shortcut keys #4287 (#4288)
b1ea792
import { useFetchFlow, useResetFlow, useSetFlow } from '@/hooks/flow-hooks'; | |
import { RAGFlowNodeType } from '@/interfaces/database/flow'; | |
import { useDebounceEffect } from 'ahooks'; | |
import dayjs from 'dayjs'; | |
import { useCallback, useEffect, useState } from 'react'; | |
import { useParams } from 'umi'; | |
import useGraphStore from '../store'; | |
import { useBuildDslData } from './use-build-dsl'; | |
export const useSaveGraph = () => { | |
const { data } = useFetchFlow(); | |
const { setFlow, loading } = useSetFlow(); | |
const { id } = useParams(); | |
const { buildDslData } = useBuildDslData(); | |
const saveGraph = useCallback( | |
async (currentNodes?: RAGFlowNodeType[]) => { | |
return setFlow({ | |
id, | |
title: data.title, | |
dsl: buildDslData(currentNodes), | |
}); | |
}, | |
[setFlow, id, data.title, buildDslData], | |
); | |
return { saveGraph, loading }; | |
}; | |
export const useSaveGraphBeforeOpeningDebugDrawer = (show: () => void) => { | |
const { saveGraph, loading } = useSaveGraph(); | |
const { resetFlow } = useResetFlow(); | |
const handleRun = useCallback( | |
async (nextNodes?: RAGFlowNodeType[]) => { | |
const saveRet = await saveGraph(nextNodes); | |
if (saveRet?.code === 0) { | |
// Call the reset api before opening the run drawer each time | |
const resetRet = await resetFlow(); | |
// After resetting, all previous messages will be cleared. | |
if (resetRet?.code === 0) { | |
show(); | |
} | |
} | |
}, | |
[saveGraph, resetFlow, show], | |
); | |
return { handleRun, loading }; | |
}; | |
export const useWatchAgentChange = (chatDrawerVisible: boolean) => { | |
const [time, setTime] = useState<string>(); | |
const nodes = useGraphStore((state) => state.nodes); | |
const edges = useGraphStore((state) => state.edges); | |
const { saveGraph } = useSaveGraph(); | |
const { data: flowDetail } = useFetchFlow(); | |
const setSaveTime = useCallback((updateTime: number) => { | |
setTime(dayjs(updateTime).format('YYYY-MM-DD HH:mm:ss')); | |
}, []); | |
useEffect(() => { | |
setSaveTime(flowDetail?.update_time); | |
}, [flowDetail, setSaveTime]); | |
const saveAgent = useCallback(async () => { | |
if (!chatDrawerVisible) { | |
const ret = await saveGraph(); | |
setSaveTime(ret.data.update_time); | |
} | |
}, [chatDrawerVisible, saveGraph, setSaveTime]); | |
useDebounceEffect( | |
() => { | |
saveAgent(); | |
}, | |
[nodes, edges], | |
{ | |
wait: 1000 * 20, | |
}, | |
); | |
return time; | |
}; | |