feat: support node copying between `Chatflow` and `Workflow` apps

pull/20219/head
lexmin0412 8 months ago
parent 3995f55cbc
commit 467ce30f07

@ -119,6 +119,7 @@ export const Workflow: FC<WorkflowProps> = memo(({
setShowConfirm, setShowConfirm,
setControlPromptEditorRerenderKey, setControlPromptEditorRerenderKey,
setSyncWorkflowDraftHash, setSyncWorkflowDraftHash,
setClipboardElements,
} = workflowStore.getState() } = workflowStore.getState()
const { const {
handleSyncWorkflowDraft, handleSyncWorkflowDraft,
@ -145,6 +146,21 @@ export const Workflow: FC<WorkflowProps> = memo(({
} }
}) })
const handleVisibilityChange = useCallback(() => {
if (document.visibilityState === 'visible') {
const storedElements = localStorage.getItem('clipboard_elements')
setClipboardElements(storedElements ? JSON.parse(storedElements) : [])
}
}, [setClipboardElements])
useEffect(() => {
document.addEventListener('visibilitychange', handleVisibilityChange)
return () => {
document.removeEventListener('visibilitychange', handleVisibilityChange)
}
}, [])
useEffect(() => { useEffect(() => {
setAutoFreeze(false) setAutoFreeze(false)

@ -37,8 +37,14 @@ export type WorkflowSliceShape = {
export const createWorkflowSlice: StateCreator<WorkflowSliceShape> = set => ({ export const createWorkflowSlice: StateCreator<WorkflowSliceShape> = set => ({
workflowRunningData: undefined, workflowRunningData: undefined,
setWorkflowRunningData: workflowRunningData => set(() => ({ workflowRunningData })), setWorkflowRunningData: workflowRunningData => set(() => ({ workflowRunningData })),
clipboardElements: [], clipboardElements: (() => {
setClipboardElements: clipboardElements => set(() => ({ clipboardElements })), const storedElements = localStorage.getItem('clipboard_elements')
return storedElements ? JSON.parse(storedElements) : []
})(),
setClipboardElements: (clipboardElements) => {
set(() => ({ clipboardElements }))
localStorage.setItem('clipboard_elements', JSON.stringify(clipboardElements))
},
selection: null, selection: null,
setSelection: selection => set(() => ({ selection })), setSelection: selection => set(() => ({ selection })),
bundleNodeSize: null, bundleNodeSize: null,

Loading…
Cancel
Save