use generics across the library
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
import { XYDrag, type OnDrag } from '@xyflow/system';
|
||||
import { XYDrag, type NodeBase, type OnDrag, type XYDragParams } from '@xyflow/system';
|
||||
|
||||
import type { SvelteFlowStore } from '$lib/store/types';
|
||||
import type { Node, Edge, NodeTargetEventWithPointer } from '$lib/types';
|
||||
|
||||
export type UseDragParams = {
|
||||
store: SvelteFlowStore;
|
||||
export type UseDragParams<NodeType extends Node = Node, EdgeType extends Edge = Edge> = {
|
||||
store: SvelteFlowStore<NodeType, EdgeType>;
|
||||
disabled?: boolean;
|
||||
noDragClass?: string;
|
||||
handleSelector?: string;
|
||||
@@ -16,7 +17,10 @@ export type UseDragParams = {
|
||||
onNodeMouseDown?: (id: string) => void;
|
||||
};
|
||||
|
||||
export default function drag(domNode: Element, params: UseDragParams) {
|
||||
export default function drag<NodeType extends Node = Node, EdgeType extends Edge = Edge>(
|
||||
domNode: Element,
|
||||
params: UseDragParams<NodeType, EdgeType>
|
||||
) {
|
||||
const { store, onDrag, onDragStart, onDragStop, onNodeMouseDown } = params;
|
||||
const dragInstance = XYDrag({
|
||||
onDrag,
|
||||
@@ -27,7 +31,7 @@ export default function drag(domNode: Element, params: UseDragParams) {
|
||||
const { snapGrid, viewport } = store;
|
||||
|
||||
return {
|
||||
nodes: store.nodes,
|
||||
nodes: store.nodes satisfies NodeBase[],
|
||||
nodeLookup: store.nodeLookup,
|
||||
edges: store.edges,
|
||||
nodeExtent: store.nodeExtent,
|
||||
@@ -46,9 +50,9 @@ export default function drag(domNode: Element, params: UseDragParams) {
|
||||
panBy: store.panBy
|
||||
};
|
||||
}
|
||||
});
|
||||
} as XYDragParams<NodeTargetEventWithPointer<MouseEvent | TouchEvent, NodeType>>);
|
||||
|
||||
function updateDrag(domNode: Element, params: UseDragParams) {
|
||||
function updateDrag(domNode: Element, params: UseDragParams<NodeType, EdgeType>) {
|
||||
if (params.disabled) {
|
||||
dragInstance.destroy();
|
||||
return;
|
||||
@@ -67,7 +71,7 @@ export default function drag(domNode: Element, params: UseDragParams) {
|
||||
updateDrag(domNode, params);
|
||||
|
||||
return {
|
||||
update(params: UseDragParams) {
|
||||
update(params: UseDragParams<NodeType, EdgeType>) {
|
||||
updateDrag(domNode, params);
|
||||
},
|
||||
destroy() {
|
||||
|
||||
Reference in New Issue
Block a user