Added seperate portal to put dom elements inside the flow
This commit is contained in:
@@ -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;
|
||||||
@@ -180,7 +180,7 @@ const GraphView = ({
|
|||||||
/>
|
/>
|
||||||
</EdgeRenderer>
|
</EdgeRenderer>
|
||||||
<div className="react-flow__edgelabel-renderer" />
|
<div className="react-flow__edgelabel-renderer" />
|
||||||
|
<div className="react-flow__view-portal" />
|
||||||
<NodeRenderer
|
<NodeRenderer
|
||||||
nodeTypes={nodeTypesWrapped}
|
nodeTypes={nodeTypesWrapped}
|
||||||
onNodeClick={onNodeClick}
|
onNodeClick={onNodeClick}
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import portal from '$lib/actions/portal';
|
||||||
|
import { useStore } from '$lib/store';
|
||||||
|
|
||||||
|
type $$Props = {};
|
||||||
|
|
||||||
|
const { domNode } = useStore();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div use:portal={{ target: '.svelte-flow__view-portal', domNode: $domNode }}>
|
||||||
|
<slot />
|
||||||
|
</div>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export { default as ViewPortal } from './ViewPortal.svelte';
|
||||||
@@ -218,6 +218,7 @@
|
|||||||
<slot name="connectionLine" slot="connectionLine" />
|
<slot name="connectionLine" slot="connectionLine" />
|
||||||
</ConnectionLine>
|
</ConnectionLine>
|
||||||
<div class="svelte-flow__edgelabel-renderer" />
|
<div class="svelte-flow__edgelabel-renderer" />
|
||||||
|
<div class="svelte-view-portal" />
|
||||||
<NodeRenderer
|
<NodeRenderer
|
||||||
on:nodeclick
|
on:nodeclick
|
||||||
on:nodemouseenter
|
on:nodemouseenter
|
||||||
|
|||||||
Reference in New Issue
Block a user