chore(svelte): fix types for event handlers

This commit is contained in:
moklick
2023-10-16 15:53:36 +02:00
parent 92a06d25db
commit c7a533bffe
5 changed files with 51 additions and 29 deletions

View File

@@ -6,7 +6,7 @@
import { useStore } from '$lib/store';
import BezierEdge from '$lib/components/edges/BezierEdge.svelte';
import type { EdgeLayouted } from '$lib/types';
import type { EdgeLayouted, Edge } from '$lib/types';
type $$Props = EdgeLayouted;
@@ -39,7 +39,10 @@
export { className as class };
const { edges, edgeTypes, flowId, addSelectedEdges } = useStore();
const dispatch = createEventDispatcher();
const dispatch = createEventDispatcher<{
edgeclick: { edge: Edge; event: MouseEvent | TouchEvent };
edgecontextmenu: { edge: Edge; event: MouseEvent };
}>();
$: edgeComponent = $edgeTypes[type!] || BezierEdge;
$: markerStartUrl = markerStart ? `url(#${getMarkerId(markerStart, $flowId)})` : undefined;
@@ -51,12 +54,18 @@
}
const edge = $edges.find((e) => e.id === id);
dispatch('edgeclick', { event, edge });
if (edge) {
dispatch('edgeclick', { event, edge });
}
}
function onContextMenu(event: MouseEvent) {
const edge = $edges.find((e) => e.id === id);
dispatch('edgecontextmenu', { event, edge });
if (edge) {
dispatch('edgecontextmenu', { event, edge });
}
}
</script>

View File

@@ -1,7 +1,13 @@
<script lang="ts">
import { getContext, createEventDispatcher } from 'svelte';
import cc from 'classcat';
import { Position, XYHandle, isMouseEvent } from '@xyflow/system';
import {
Position,
XYHandle,
isMouseEvent,
type Connection,
type HandleType
} from '@xyflow/system';
import { useStore } from '$lib/store';
import type { HandleComponentProps } from '$lib/types';
@@ -26,7 +32,18 @@
$: handleConnectable = isConnectable !== undefined ? isConnectable : $connectable;
const handleId = id || null;
const dispatch = createEventDispatcher();
const dispatch = createEventDispatcher<{
connect: { connection: Connection };
connectstart: {
event: MouseEvent | TouchEvent;
nodeId: string | null;
handleId: string | null;
handleType: HandleType | null;
};
connectend: {
event: MouseEvent | TouchEvent;
};
}>();
const store = useStore();
const {

View File

@@ -16,6 +16,7 @@
import { useStore } from '$lib/store';
import DefaultNode from '$lib/components/nodes/DefaultNode.svelte';
import type { NodeWrapperProps } from './types';
import type { Node } from '$lib/types';
interface $$Props extends NodeWrapperProps {}
@@ -54,7 +55,16 @@
const nodeComponent: ComponentType<SvelteComponent<NodeProps>> = $nodeTypes[type!] || DefaultNode;
const selectNodesOnDrag = false;
const dispatch = createEventDispatcher();
const dispatch = createEventDispatcher<{
nodeclick: { node: Node; event: MouseEvent | TouchEvent };
nodecontextmenu: { node: Node; event: MouseEvent | TouchEvent };
nodedrag: { node: Node; nodes: Node[]; event: MouseEvent | TouchEvent };
nodedragstart: { node: Node; nodes: Node[]; event: MouseEvent | TouchEvent };
nodedragstop: { node: Node; nodes: Node[]; event: MouseEvent | TouchEvent };
nodemouseenter: { node: Node; event: MouseEvent | TouchEvent };
nodemouseleave: { node: Node; event: MouseEvent | TouchEvent };
nodemousemove: { node: Node; event: MouseEvent | TouchEvent };
}>();
const connectableStore = writable(connectable);
$: {

View File

@@ -41,7 +41,14 @@
export let panOnDrag: $$Props['panOnDrag'] = undefined;
const dispatch = createEventDispatcher();
const dispatch = createEventDispatcher<{
paneclick: {
event: MouseEvent | TouchEvent;
};
panecontextmenu: {
event: MouseEvent;
};
}>();
const {
nodes,
edges,

View File

@@ -83,25 +83,4 @@ export type SvelteFlowProps = DOMAttributes<HTMLDivElement> & {
onMove?: OnMove;
onMoveEnd?: OnMoveEnd;
onError?: OnError;
'on:nodeclick'?: CustomEvent<{ event: MouseEvent | TouchEvent; node: Node }>;
'on:nodemouseenter'?: CustomEvent<{ event: MouseEvent; node: Node }>;
'on:nodemousemove'?: CustomEvent<{ event: MouseEvent; node: Node }>;
'on:nodemouseleave'?: CustomEvent<{ event: MouseEvent; node: Node }>;
'on:edgeclick'?: CustomEvent<{ event: MouseEvent; edge: Edge }>;
'on:edgecontextmenu'?: CustomEvent<{ event: MouseEvent; edge: Edge }>;
'on:connectstart'?: CustomEvent<{
event: MouseEvent | TouchEvent;
nodeId?: string;
handleId?: string;
handleType?: HandleType;
}>;
'on:connect'?: CustomEvent<{ connection: Connection }>;
'on:connectend'?: CustomEvent<{ event: MouseEvent | TouchEvent }>;
'on:paneclick'?: CustomEvent<{ event: MouseEvent | TouchEvent }>;
'on:panecontextmenu'?: CustomEvent<{ event: MouseEvent }>;
'on:nodedragstart'?: CustomEvent<{ event: MouseEvent; node: NodeBase; nodes: NodeBase[] }>;
'on:nodedrag'?: CustomEvent<{ event: MouseEvent; node: NodeBase; nodes: NodeBase[] }>;
'on:nodedragstop'?: CustomEvent<{ event: MouseEvent; node: NodeBase; nodes: NodeBase[] }>;
'on:nodecontextmenu'?: CustomEvent<{ event: MouseEvent; node: NodeBase }>;
};