diff --git a/frontend/src/lib/components/FlowBuilder.svelte b/frontend/src/lib/components/FlowBuilder.svelte index b5698ee2ec..c0126a42cd 100644 --- a/frontend/src/lib/components/FlowBuilder.svelte +++ b/frontend/src/lib/components/FlowBuilder.svelte @@ -110,16 +110,19 @@ let loadingDraft = false async function saveDraft(): Promise { - const flow = cleanInputs($flowStore) + if (!newFlow && !savedFlow) { + return + } if (savedFlow) { const draftOrDeployed = cleanValueProperties(savedFlow.draft || savedFlow) - const current = cleanValueProperties(flow) + const current = cleanValueProperties($flowStore) if (orderedJsonStringify(draftOrDeployed) === orderedJsonStringify(current)) { return } } loadingDraft = true try { + const flow = cleanInputs($flowStore) localStorage.removeItem('flow') localStorage.removeItem(`flow-${$pathStore}`) @@ -148,10 +151,15 @@ }) savedFlow = { - ...cloneDeep(flow), - path: newFlow ? $pathStore : initialPath, + ...(newFlow + ? { + ...cloneDeep($flowStore), + path: $pathStore, + draft_only: true + } + : savedFlow), draft: { - ...cloneDeep(flow), + ...cloneDeep($flowStore), path: newFlow ? $pathStore : initialPath } } as Flow & { @@ -178,13 +186,8 @@ async function saveFlow(): Promise { loadingSave = true - - const flow = cleanInputs($flowStore) - savedFlow = { - ...cloneDeep(flow), - path: $pathStore - } as Flow try { + const flow = cleanInputs($flowStore) // console.log('flow', computeUnlockedSteps(flow)) // del // loadingSave = false // del // return @@ -252,6 +255,10 @@ await createSchedule($pathStore) } } + savedFlow = { + ...cloneDeep($flowStore), + path: $pathStore + } as Flow loadingSave = false dispatch('deploy', $pathStore) } catch (err) { @@ -1059,6 +1066,7 @@ size="xs" startIcon={{ icon: faSave }} on:click={() => saveDraft()} + disabled={!newFlow && !savedFlow} > Save draft CtrlS diff --git a/frontend/src/lib/components/ScriptBuilder.svelte b/frontend/src/lib/components/ScriptBuilder.svelte index 26b8b67085..41fa7e60bd 100644 --- a/frontend/src/lib/components/ScriptBuilder.svelte +++ b/frontend/src/lib/components/ScriptBuilder.svelte @@ -222,13 +222,17 @@ } async function saveDraft(): Promise { + if (initialPath != '' && !savedScript) { + return + } if (savedScript) { - const draftOrDeployed = cleanValueProperties(savedScript['draft'] || savedScript) + const draftOrDeployed = cleanValueProperties(savedScript.draft || savedScript) const current = cleanValueProperties(script) if (orderedJsonStringify(draftOrDeployed) === orderedJsonStringify(current)) { return } } + loadingDraft = true try { localStorage.removeItem(script.path) @@ -274,10 +278,10 @@ } }) - savedScript = await ScriptService.getScriptByPathWithDraft({ - workspace: $workspaceStore!, - path: script.path - }) + savedScript = { + ...(initialPath == '' ? { ...cloneDeep(script), draft_only: true } : savedScript), + draft: cloneDeep(script) + } as NewScriptWithDraft if (initialPath == '') { goto(`/scripts/edit/${script.path}`) @@ -854,6 +858,7 @@ size="xs" startIcon={{ icon: faSave }} on:click={() => saveDraft()} + disabled={initialPath != '' && !savedScript} >