fix: sync draft

This commit is contained in:
StyleZhang 2024-03-28 14:46:45 +08:00
parent 858ab8c8c4
commit 12ea3af242
2 changed files with 44 additions and 7 deletions

View File

@ -11,6 +11,7 @@ import { useNodesReadOnly } from './use-workflow'
import { syncWorkflowDraft } from '@/service/workflow' import { syncWorkflowDraft } from '@/service/workflow'
import { useFeaturesStore } from '@/app/components/base/features/hooks' import { useFeaturesStore } from '@/app/components/base/features/hooks'
import { useStore as useAppStore } from '@/app/components/app/store' import { useStore as useAppStore } from '@/app/components/app/store'
import { API_PREFIX } from '@/config'
export const useNodesSyncDraft = () => { export const useNodesSyncDraft = () => {
const store = useStoreApi() const store = useStoreApi()
@ -20,7 +21,7 @@ export const useNodesSyncDraft = () => {
const debouncedSyncWorkflowDraft = useStore(s => s.debouncedSyncWorkflowDraft) const debouncedSyncWorkflowDraft = useStore(s => s.debouncedSyncWorkflowDraft)
const params = useParams() const params = useParams()
const doSyncWorkflowDraft = useCallback(async () => { const getPostParams = useCallback(() => {
const { const {
getNodes, getNodes,
edges, edges,
@ -53,7 +54,7 @@ export const useNodesSyncDraft = () => {
}) })
}) })
}) })
syncWorkflowDraft({ return {
url: `/apps/${appId || params.appId}/workflows/draft`, url: `/apps/${appId || params.appId}/workflows/draft`,
params: { params: {
graph: { graph: {
@ -76,11 +77,29 @@ export const useNodesSyncDraft = () => {
file_upload: features.file, file_upload: features.file,
}, },
}, },
}).then((res) => { }
workflowStore.getState().setDraftUpdatedAt(res.updated_at)
})
} }
}, [store, featuresStore, workflowStore, params.appId]) }, [store, featuresStore, params.appId])
const syncWorkflowDraftWhenPageClose = useCallback(() => {
const postParams = getPostParams()
if (postParams) {
navigator.sendBeacon(
`${API_PREFIX}/apps/${params.appId}/workflows/draft?_token=${localStorage.getItem('console_token')}`,
JSON.stringify(postParams.params),
)
}
}, [getPostParams, params.appId])
const doSyncWorkflowDraft = useCallback(async () => {
const postParams = getPostParams()
if (postParams) {
const res = await syncWorkflowDraft(postParams)
workflowStore.getState().setDraftUpdatedAt(res.updated_at)
}
}, [workflowStore, getPostParams])
const handleSyncWorkflowDraft = useCallback((sync?: boolean) => { const handleSyncWorkflowDraft = useCallback((sync?: boolean) => {
if (getNodesReadOnly()) if (getNodesReadOnly())
@ -95,5 +114,6 @@ export const useNodesSyncDraft = () => {
return { return {
doSyncWorkflowDraft, doSyncWorkflowDraft,
handleSyncWorkflowDraft, handleSyncWorkflowDraft,
syncWorkflowDraftWhenPageClose,
} }
} }

View File

@ -3,6 +3,7 @@
import type { FC } from 'react' import type { FC } from 'react'
import { import {
memo, memo,
useCallback,
useEffect, useEffect,
useMemo, useMemo,
} from 'react' } from 'react'
@ -66,7 +67,10 @@ const Workflow: FC<WorkflowProps> = memo(({
}) => { }) => {
const showFeaturesPanel = useStore(state => state.showFeaturesPanel) const showFeaturesPanel = useStore(state => state.showFeaturesPanel)
const nodeAnimation = useStore(s => s.nodeAnimation) const nodeAnimation = useStore(s => s.nodeAnimation)
const { handleSyncWorkflowDraft } = useNodesSyncDraft() const {
handleSyncWorkflowDraft,
syncWorkflowDraftWhenPageClose,
} = useNodesSyncDraft()
const { workflowReadOnly } = useWorkflowReadOnly() const { workflowReadOnly } = useWorkflowReadOnly()
const { nodesReadOnly } = useNodesReadOnly() const { nodesReadOnly } = useNodesReadOnly()
@ -84,6 +88,19 @@ const Workflow: FC<WorkflowProps> = memo(({
} }
}, []) }, [])
const handleSyncWorkflowDraftWhenPageClose = useCallback(() => {
if (document.visibilityState === 'hidden')
syncWorkflowDraftWhenPageClose()
}, [syncWorkflowDraftWhenPageClose])
useEffect(() => {
document.addEventListener('visibilitychange', handleSyncWorkflowDraftWhenPageClose)
return () => {
document.removeEventListener('visibilitychange', handleSyncWorkflowDraftWhenPageClose)
}
}, [handleSyncWorkflowDraftWhenPageClose])
const { const {
handleNodeDragStart, handleNodeDragStart,
handleNodeDrag, handleNodeDrag,