From 1fb668d93651b1c2cd9152bf4b1d71ec69aa4179 Mon Sep 17 00:00:00 2001 From: peterkogo Date: Thu, 18 Jan 2024 12:14:12 +0100 Subject: [PATCH] Added onInit and useInitialized hooks --- .../components/CallOnMount/CallOnMount.svelte | 14 +++++++++ .../src/lib/components/CallOnMount/index.ts | 1 + .../EdgeRenderer/EdgeRenderer.svelte | 14 ++++++++- .../container/SvelteFlow/SvelteFlow.svelte | 11 +++++++ .../src/lib/container/SvelteFlow/types.ts | 2 ++ .../svelte/src/lib/container/Zoom/Zoom.svelte | 8 ++++- .../svelte/src/lib/hooks/useInitialized.ts | 28 +++++++++++++++++ packages/svelte/src/lib/index.ts | 1 + packages/svelte/src/lib/store/index.ts | 31 +++++++++++++++++++ .../svelte/src/lib/store/initial-store.ts | 6 +++- 10 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 packages/svelte/src/lib/components/CallOnMount/CallOnMount.svelte create mode 100644 packages/svelte/src/lib/components/CallOnMount/index.ts create mode 100644 packages/svelte/src/lib/hooks/useInitialized.ts diff --git a/packages/svelte/src/lib/components/CallOnMount/CallOnMount.svelte b/packages/svelte/src/lib/components/CallOnMount/CallOnMount.svelte new file mode 100644 index 00000000..4184da6f --- /dev/null +++ b/packages/svelte/src/lib/components/CallOnMount/CallOnMount.svelte @@ -0,0 +1,14 @@ + diff --git a/packages/svelte/src/lib/components/CallOnMount/index.ts b/packages/svelte/src/lib/components/CallOnMount/index.ts new file mode 100644 index 00000000..3dee0d92 --- /dev/null +++ b/packages/svelte/src/lib/components/CallOnMount/index.ts @@ -0,0 +1 @@ +export { default as CallOnMount } from './CallOnMount.svelte'; diff --git a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte index 663b72ea..420259c3 100644 --- a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte +++ b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte @@ -1,6 +1,7 @@
createMarkerIds(edges, { defaultColor, id }) ), + initialized: (() => { + console.log('This closure gets called'); + let initialized = false; + const initialNodesLength = get(store.nodes).length; + const initialEdgesLength = get(store.edges).length; + return derived( + [store.nodesInitialized, store.edgesInitialized, store.viewportInitialized], + ([nodesInitialized, edgesInitialized, viewportInitialized]) => { + console.log('Get the derived store even called?'); + // If it was already initialized once return true from then on + if (initialized) return initialized; + + // if it hasn't been initialised check if is now + if (initialNodesLength === 0) { + initialized = viewportInitialized; + return initialized; + } + if (initialEdgesLength === 0) { + initialized = viewportInitialized && nodesInitialized; + return initialized; + } + + initialized = viewportInitialized && nodesInitialized && edgesInitialized; + return initialized; + } + ); + })(), // actions syncNodeStores: (nodes) => syncNodeStores(store.nodes, nodes), diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index 26c57c86..85d5e84b 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -152,6 +152,10 @@ export const getInitialStore = ({ onconnect: writable(undefined), onconnectstart: writable(undefined), onconnectend: writable(undefined), - onbeforedelete: writable(undefined) + onbeforedelete: writable(undefined), + nodesInitialized: writable(false), + edgesInitialized: writable(false), + viewportInitialized: writable(false), + initialized: readable(false) }; };