added Edge Reconnection
This commit is contained in:
@@ -1,31 +1 @@
|
||||
type PortalOptions = {
|
||||
target?: string;
|
||||
domNode: Element | null;
|
||||
};
|
||||
|
||||
function tryToMount(node: Element, domNode: Element | null, target: string | undefined) {
|
||||
if (!domNode) {
|
||||
return;
|
||||
}
|
||||
|
||||
const targetEl = target ? domNode.querySelector(target) : domNode;
|
||||
|
||||
if (targetEl) {
|
||||
targetEl.appendChild(node);
|
||||
}
|
||||
}
|
||||
|
||||
export default function (node: Element, { target, domNode }: PortalOptions) {
|
||||
tryToMount(node, domNode, target);
|
||||
|
||||
return {
|
||||
async update({ target, domNode }: PortalOptions) {
|
||||
tryToMount(node, domNode, target);
|
||||
},
|
||||
destroy() {
|
||||
if (node.parentNode) {
|
||||
node.parentNode.removeChild(node);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
export { default as portal } from './portal.svelte';
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
import { useStore } from '$lib/store';
|
||||
|
||||
type Portal = 'viewport' | 'edgelabel' | 'root';
|
||||
|
||||
const selector: Record<Exclude<Portal, 'root'>, string> = {
|
||||
viewport: '.svelte-flow__viewport-portal',
|
||||
edgelabel: '.svelte-flow__edgelabel-renderer'
|
||||
};
|
||||
|
||||
function tryToMount(node: Element, domNode: Element | null, target: Portal | undefined) {
|
||||
if (!target || !domNode) {
|
||||
return;
|
||||
}
|
||||
|
||||
const targetEl = target === 'root' ? domNode : domNode.querySelector(selector[target]);
|
||||
|
||||
if (targetEl) {
|
||||
targetEl.appendChild(node);
|
||||
}
|
||||
}
|
||||
|
||||
export default function (node: Element, target: Portal | undefined) {
|
||||
const { domNode } = $derived(useStore());
|
||||
|
||||
let previousTarget: Portal | undefined = target;
|
||||
|
||||
tryToMount(node, domNode, target);
|
||||
|
||||
return {
|
||||
async update(target: Portal) {
|
||||
if (target !== previousTarget) {
|
||||
node.parentNode?.removeChild(node);
|
||||
}
|
||||
tryToMount(node, domNode, target);
|
||||
},
|
||||
destroy() {
|
||||
if (node.parentNode) {
|
||||
node.parentNode.removeChild(node);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user