Move node EventMap to types and use createEventDispatcher from svelte
Using createEventDispatcher from another imported function seems to break the svelte types and thus none of the node events where typed.
This commit is contained in:
@@ -5,17 +5,17 @@
|
|||||||
import { useStore } from '$lib/store';
|
import { useStore } from '$lib/store';
|
||||||
import { Selection } from '$lib/components/Selection';
|
import { Selection } from '$lib/components/Selection';
|
||||||
import drag from '$lib/actions/drag';
|
import drag from '$lib/actions/drag';
|
||||||
import type { Node } from '$lib/types';
|
import type { Node, NodeEventMap } from '$lib/types';
|
||||||
import { createNodeEventDispatcher } from '$lib';
|
|
||||||
|
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
const { selectionRectMode, nodes } = store;
|
const { selectionRectMode, nodes } = store;
|
||||||
|
|
||||||
const dispatch = createEventDispatcher<{
|
const dispatch = createEventDispatcher<
|
||||||
selectioncontextmenu: { nodes: Node[]; event: MouseEvent | TouchEvent };
|
NodeEventMap & {
|
||||||
selectionclick: { nodes: Node[]; event: MouseEvent | TouchEvent };
|
selectioncontextmenu: { nodes: Node[]; event: MouseEvent | TouchEvent };
|
||||||
}>();
|
selectionclick: { nodes: Node[]; event: MouseEvent | TouchEvent };
|
||||||
const dispatchNodeEvent = createNodeEventDispatcher();
|
}
|
||||||
|
>();
|
||||||
|
|
||||||
$: selectedNodes = $nodes.filter((n) => n.selected);
|
$: selectedNodes = $nodes.filter((n) => n.selected);
|
||||||
$: bounds = getNodesBounds(selectedNodes);
|
$: bounds = getNodesBounds(selectedNodes);
|
||||||
@@ -37,13 +37,13 @@
|
|||||||
disabled: false,
|
disabled: false,
|
||||||
store,
|
store,
|
||||||
onDrag: (event, _, __, nodes) => {
|
onDrag: (event, _, __, nodes) => {
|
||||||
dispatchNodeEvent('nodedrag', { event, targetNode: null, nodes });
|
dispatch('nodedrag', { event, targetNode: null, nodes });
|
||||||
},
|
},
|
||||||
onDragStart: (event, _, __, nodes) => {
|
onDragStart: (event, _, __, nodes) => {
|
||||||
dispatchNodeEvent('nodedragstart', { event, targetNode: null, nodes });
|
dispatch('nodedragstart', { event, targetNode: null, nodes });
|
||||||
},
|
},
|
||||||
onDragStop: (event, _, __, nodes) => {
|
onDragStop: (event, _, __, nodes) => {
|
||||||
dispatchNodeEvent('nodedragstop', { event, targetNode: null, nodes });
|
dispatch('nodedragstop', { event, targetNode: null, nodes });
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
on:contextmenu={onContextMenu}
|
on:contextmenu={onContextMenu}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<svelte:options immutable />
|
<svelte:options immutable />
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { setContext, onDestroy } from 'svelte';
|
import { setContext, onDestroy, createEventDispatcher } from 'svelte';
|
||||||
import { get, writable } from 'svelte/store';
|
import { get, writable } from 'svelte/store';
|
||||||
import cc from 'classcat';
|
import cc from 'classcat';
|
||||||
import { errorMessages, Position } from '@xyflow/system';
|
import { errorMessages, Position } from '@xyflow/system';
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
import DefaultNode from '$lib/components/nodes/DefaultNode.svelte';
|
import DefaultNode from '$lib/components/nodes/DefaultNode.svelte';
|
||||||
import type { NodeWrapperProps } from './types';
|
import type { NodeWrapperProps } from './types';
|
||||||
import { getNodeInlineStyleDimensions } from './utils';
|
import { getNodeInlineStyleDimensions } from './utils';
|
||||||
import { createNodeEventDispatcher } from '$lib';
|
import type { NodeEventMap } from '$lib/types';
|
||||||
|
|
||||||
interface $$Props extends NodeWrapperProps {}
|
interface $$Props extends NodeWrapperProps {}
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
let nodeRef: HTMLDivElement;
|
let nodeRef: HTMLDivElement;
|
||||||
let prevNodeRef: HTMLDivElement | null = null;
|
let prevNodeRef: HTMLDivElement | null = null;
|
||||||
|
|
||||||
const dispatchNodeEvent = createNodeEventDispatcher();
|
const dispatchNodeEvent = createEventDispatcher<NodeEventMap>();
|
||||||
const connectableStore = writable(connectable);
|
const connectableStore = writable(connectable);
|
||||||
let prevType: string | undefined = undefined;
|
let prevType: string | undefined = undefined;
|
||||||
let prevSourcePosition: Position | undefined = undefined;
|
let prevSourcePosition: Position | undefined = undefined;
|
||||||
|
|||||||
@@ -45,3 +45,14 @@ export type NodeTypes = Record<
|
|||||||
export type DefaultNodeOptions = Partial<Omit<Node, 'id'>>;
|
export type DefaultNodeOptions = Partial<Omit<Node, 'id'>>;
|
||||||
|
|
||||||
export type BuiltInNode = Node<{ label: string }, 'input' | 'output' | 'default'>;
|
export type BuiltInNode = Node<{ label: string }, 'input' | 'output' | 'default'>;
|
||||||
|
|
||||||
|
export type NodeEventMap = {
|
||||||
|
nodeclick: { node: Node; event: MouseEvent | TouchEvent };
|
||||||
|
nodecontextmenu: { node: Node; event: MouseEvent | TouchEvent };
|
||||||
|
nodedrag: { targetNode: Node | null; nodes: Node[]; event: MouseEvent | TouchEvent };
|
||||||
|
nodedragstart: { targetNode: Node | null; nodes: Node[]; event: MouseEvent | TouchEvent };
|
||||||
|
nodedragstop: { targetNode: Node | null; nodes: Node[]; event: MouseEvent | TouchEvent };
|
||||||
|
nodemouseenter: { node: Node; event: MouseEvent | TouchEvent };
|
||||||
|
nodemouseleave: { node: Node; event: MouseEvent | TouchEvent };
|
||||||
|
nodemousemove: { node: Node; event: MouseEvent | TouchEvent };
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import { createEventDispatcher } from 'svelte';
|
|
||||||
import { isNodeBase, isEdgeBase } from '@xyflow/system';
|
import { isNodeBase, isEdgeBase } from '@xyflow/system';
|
||||||
|
|
||||||
import type { Edge, Node } from '$lib/types';
|
import type { Edge, Node } from '$lib/types';
|
||||||
@@ -22,15 +21,3 @@ export const isNode = <NodeType extends Node = Node>(element: unknown): element
|
|||||||
*/
|
*/
|
||||||
export const isEdge = <EdgeType extends Edge = Edge>(element: unknown): element is EdgeType =>
|
export const isEdge = <EdgeType extends Edge = Edge>(element: unknown): element is EdgeType =>
|
||||||
isEdgeBase<EdgeType>(element);
|
isEdgeBase<EdgeType>(element);
|
||||||
|
|
||||||
export const createNodeEventDispatcher = () =>
|
|
||||||
createEventDispatcher<{
|
|
||||||
nodeclick: { node: Node; event: MouseEvent | TouchEvent };
|
|
||||||
nodecontextmenu: { node: Node; event: MouseEvent | TouchEvent };
|
|
||||||
nodedrag: { targetNode: Node | null; nodes: Node[]; event: MouseEvent | TouchEvent };
|
|
||||||
nodedragstart: { targetNode: Node | null; nodes: Node[]; event: MouseEvent | TouchEvent };
|
|
||||||
nodedragstop: { targetNode: Node | null; nodes: Node[]; event: MouseEvent | TouchEvent };
|
|
||||||
nodemouseenter: { node: Node; event: MouseEvent | TouchEvent };
|
|
||||||
nodemouseleave: { node: Node; event: MouseEvent | TouchEvent };
|
|
||||||
nodemousemove: { node: Node; event: MouseEvent | TouchEvent };
|
|
||||||
}>();
|
|
||||||
|
|||||||
Reference in New Issue
Block a user