feat: use beforeunload to make sure graph is saved
This commit is contained in:
+16
-13
@@ -7,7 +7,7 @@
|
||||
import { debugNode } from '$lib/node-registry/debugNode';
|
||||
import { groupNode } from '$lib/node-registry/groupNode.js';
|
||||
import { IndexDBCache, RemoteNodeRegistry } from '$lib/node-registry/index';
|
||||
import NodeStore from '$lib/node-store/NodeStore.svelte';
|
||||
|
||||
import PerformanceViewer from '$lib/performance/PerformanceViewer.svelte';
|
||||
import { ProjectManager } from '$lib/project-manager/project-manager.svelte';
|
||||
import ProjectManagerEl from '$lib/project-manager/ProjectManager.svelte';
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
let performanceStore = createPerformanceStore();
|
||||
let planty = $state<ReturnType<typeof Planty>>();
|
||||
let pendingSave = false;
|
||||
|
||||
const { data } = $props();
|
||||
|
||||
@@ -52,8 +53,8 @@
|
||||
);
|
||||
|
||||
$effect(() => {
|
||||
workerRuntime.useRegistryCache = appSettings.value.debug.cache.useRuntimeCache;
|
||||
workerRuntime.useRuntimeCache = appSettings.value.debug.cache.useRegistryCache;
|
||||
workerRuntime.useRegistryCache = appSettings.value.debug.cache.useRegistryCache;
|
||||
workerRuntime.useRuntimeCache = appSettings.value.debug.cache.useRuntimeCache;
|
||||
|
||||
if (appSettings.value.debug.cache.useRegistryCache) {
|
||||
nodeRegistry.cache = registryCache;
|
||||
@@ -68,6 +69,16 @@
|
||||
}
|
||||
});
|
||||
|
||||
$effect(() => {
|
||||
const handler = (e: BeforeUnloadEvent) => {
|
||||
if (pendingSave) {
|
||||
e.preventDefault();
|
||||
}
|
||||
};
|
||||
window.addEventListener('beforeunload', handler);
|
||||
return () => window.removeEventListener('beforeunload', handler);
|
||||
});
|
||||
|
||||
let activeNode = $state<NodeInstance | undefined>(undefined);
|
||||
let scene = $state<Group>(null!);
|
||||
let isExecuting = $state(false);
|
||||
@@ -288,7 +299,7 @@
|
||||
bind:showHelp={appSettings.value.nodeInterface.showHelp}
|
||||
bind:settings={graphSettings}
|
||||
bind:settingTypes={graphSettingTypes}
|
||||
onsave={(g) => pm.saveGraph(g)}
|
||||
onsave={async (g) => { pendingSave = true; await pm.saveGraph(g); pendingSave = false; }}
|
||||
onresult={(result) => handleUpdate(result as Graph)}
|
||||
/>
|
||||
{/key}
|
||||
@@ -317,15 +328,7 @@
|
||||
<Panel id="exports" title="Exporter" icon="i-[tabler--package-export]">
|
||||
<ExportSettings {scene} />
|
||||
</Panel>
|
||||
{#if 0 > 1}
|
||||
<Panel
|
||||
id="node-store"
|
||||
title="Node Store"
|
||||
icon="i-[tabler--database] bg-green-400"
|
||||
>
|
||||
<NodeStore registry={nodeRegistry} />
|
||||
</Panel>
|
||||
{/if}
|
||||
|
||||
<Panel
|
||||
id="performance"
|
||||
title="Performance"
|
||||
|
||||
Reference in New Issue
Block a user