From cc7c49223b07aefef81cd6f8538dd59e2f43eb57 Mon Sep 17 00:00:00 2001 From: peterkogo Date: Thu, 14 Dec 2023 13:51:25 +0100 Subject: [PATCH] Added seperate portal to put dom elements inside the flow --- .../react/src/components/ViewPortal/index.tsx | 19 +++++++++++++++++++ .../react/src/container/GraphView/index.tsx | 2 +- .../components/ViewPortal/ViewPortal.svelte | 12 ++++++++++++ .../src/lib/components/ViewPortal/index.ts | 1 + .../container/SvelteFlow/SvelteFlow.svelte | 1 + 5 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 packages/react/src/components/ViewPortal/index.tsx create mode 100644 packages/svelte/src/lib/components/ViewPortal/ViewPortal.svelte create mode 100644 packages/svelte/src/lib/components/ViewPortal/index.ts diff --git a/packages/react/src/components/ViewPortal/index.tsx b/packages/react/src/components/ViewPortal/index.tsx new file mode 100644 index 00000000..5560c803 --- /dev/null +++ b/packages/react/src/components/ViewPortal/index.tsx @@ -0,0 +1,19 @@ +import type { ReactNode } from 'react'; +import { createPortal } from 'react-dom'; + +import { useStore } from '../../hooks/useStore'; +import type { ReactFlowState } from '../../types'; + +const selector = (s: ReactFlowState) => s.domNode?.querySelector('.react-flow__view-portal'); + +function ViewPortal({ children }: { children: ReactNode }) { + const viewPortalDiv = useStore(selector); + + if (!viewPortalDiv) { + return null; + } + + return createPortal(children, viewPortalDiv); +} + +export default ViewPortal; diff --git a/packages/react/src/container/GraphView/index.tsx b/packages/react/src/container/GraphView/index.tsx index 014d754f..e7d0f83f 100644 --- a/packages/react/src/container/GraphView/index.tsx +++ b/packages/react/src/container/GraphView/index.tsx @@ -180,7 +180,7 @@ const GraphView = ({ />
- +
+ import portal from '$lib/actions/portal'; + import { useStore } from '$lib/store'; + + type $$Props = {}; + + const { domNode } = useStore(); + + +
+ +
diff --git a/packages/svelte/src/lib/components/ViewPortal/index.ts b/packages/svelte/src/lib/components/ViewPortal/index.ts new file mode 100644 index 00000000..778b6276 --- /dev/null +++ b/packages/svelte/src/lib/components/ViewPortal/index.ts @@ -0,0 +1 @@ +export { default as ViewPortal } from './ViewPortal.svelte'; diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index 81aa81bd..e8db67f2 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -218,6 +218,7 @@
+