diff --git a/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte b/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte index ee448ab7..44ecb77f 100644 --- a/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte +++ b/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte @@ -2,8 +2,17 @@ import { setContext } from 'svelte'; import { createStore, key } from '$lib/store'; + import type { SvelteFlowProviderProps } from './types'; - const store = createStore(); + type $$Props = SvelteFlowProviderProps; + + export let nodes: $$Props['nodes']; + export let edges: $$Props['edges']; + + const store = createStore({ + nodes, + edges, + }); setContext(key, { getStore: () => store diff --git a/packages/svelte/src/lib/components/SvelteFlowProvider/types.ts b/packages/svelte/src/lib/components/SvelteFlowProvider/types.ts index 2b102f3f..151bef8a 100644 --- a/packages/svelte/src/lib/components/SvelteFlowProvider/types.ts +++ b/packages/svelte/src/lib/components/SvelteFlowProvider/types.ts @@ -1,6 +1,9 @@ -import type { SvelteFlowProps } from '$lib/container/SvelteFlow/types'; +import type { Writable } from 'svelte/store'; -export type SvelteFlowProviderProps = Pick< - SvelteFlowProps, - 'nodes' | 'edges' | 'fitView' | 'nodeTypes' ->; +import type { Edge } from '$lib/types'; +import type { createNodes } from '$lib/utils'; + +export type SvelteFlowProviderProps = { + nodes: ReturnType; + edges: Writable; +}; diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index f200b5e6..e47c4da2 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -1,5 +1,5 @@ diff --git a/packages/svelte/src/lib/container/SvelteFlow/Wrapper.svelte b/packages/svelte/src/lib/container/SvelteFlow/Wrapper.svelte deleted file mode 100644 index eb703fda..00000000 --- a/packages/svelte/src/lib/container/SvelteFlow/Wrapper.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - -{#if hasContext(key)} - - - -{:else} - - - - - -{/if} \ No newline at end of file diff --git a/packages/svelte/src/lib/container/SvelteFlow/index.ts b/packages/svelte/src/lib/container/SvelteFlow/index.ts index e0b8153e..eaec432b 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/index.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/index.ts @@ -1,2 +1,2 @@ -export { default as SvelteFlow } from './Wrapper.svelte'; +export { default as SvelteFlow } from './SvelteFlow.svelte'; export * from './types'; diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index f9cfab2d..352604c0 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -11,9 +11,6 @@ import type { Writable } from 'svelte/store'; import type { createNodes } from '$lib/utils'; export type SvelteFlowProps = { - nodes: ReturnType; - edges: Writable; - id?: string; nodeTypes?: NodeTypes; edgeTypes?: EdgeTypes; diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 1c1f1a43..c94c44a6 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -31,16 +31,14 @@ import type { SvelteFlowStore } from './types'; export const key = Symbol(); -type CreateStoreParams = Pick & { fitView?: boolean }; +type CreateStoreParams = Pick; -export function createStore(params?: CreateStoreParams): SvelteFlowStore { +export function createStore(params: CreateStoreParams): SvelteFlowStore { const store = { ...initialStoreState, - ...(params !== undefined ? params : {}) + ...params }; - let fitViewOnInitDone = false; - function setNodeTypes(nodeTypes: NodeTypes) { store.nodeTypes.set({ ...initialNodeTypes, @@ -120,9 +118,11 @@ export function createStore(params?: CreateStoreParams): SvelteFlowStore { const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); - fitViewOnInitDone = - fitViewOnInitDone || (!!params?.fitView && !!d3Zoom && !!d3Selection && fitView()); + const fitViewOnInitDone = + get(store.fitViewOnInitDone) || + (get(store.fitViewOnInit) && !!d3Zoom && !!d3Selection && fitView()); + store.fitViewOnInitDone.set(fitViewOnInitDone); store.nodes.set(nextNodes); } diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index ee22e0cf..f0e6f10c 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -47,7 +47,8 @@ export const initialStoreState = { width: writable(500), minZoom: writable(0.5), maxZoom: writable(2), - fitViewOnInit: false, + fitViewOnInit: writable(false), + fitViewOnInitDone: writable(false), nodeOrigin: writable([0, 0]), d3: writable<{ zoom: D3ZoomInstance | null; selection: D3SelectionInstance | null }>({ zoom: null, diff --git a/packages/svelte/src/routes/overview/+page.svelte b/packages/svelte/src/routes/overview/+page.svelte index 412a7423..d7c1ba76 100644 --- a/packages/svelte/src/routes/overview/+page.svelte +++ b/packages/svelte/src/routes/overview/+page.svelte @@ -1,5 +1,6 @@ - console.log('on node click', event)} - on:node:mouseenter={(event) => console.log('on node enter', event)} - on:node:mouseleave={(event) => console.log('on node leave', event)} - on:edge:click={(event) => console.log('edge click', event)} - on:connect:start={(event) => console.log('on connect start', event)} - on:connect={(event) => console.log('on connect', event)} - on:connect:end={(event) => console.log('on connect end', event)} - on:pane:click={(event) => console.log('on pane click', event)} - on:pane:contextmenu={(event) => { event.preventDefault(); console.log('on pane contextmenu', event); }} > - - - - - - - + console.log('on node click', event)} + on:node:mouseenter={(event) => console.log('on node enter', event)} + on:node:mouseleave={(event) => console.log('on node leave', event)} + on:edge:click={(event) => console.log('edge click', event)} + on:connect:start={(event) => console.log('on connect start', event)} + on:connect={(event) => console.log('on connect', event)} + on:connect:end={(event) => console.log('on connect end', event)} + on:pane:click={(event) => console.log('on pane click', event)} + on:pane:contextmenu={(event) => { event.preventDefault(); console.log('on pane contextmenu', event); }} + > + + + + + + + +