76 lines
1.6 KiB
TypeScript
76 lines
1.6 KiB
TypeScript
import { useStore } from '$lib/store';
|
|
import type { Edge, Node } from '$lib/types';
|
|
import type { Viewport } from '@xyflow/system';
|
|
|
|
/**
|
|
* Hook for getting the current nodes from the store.
|
|
*
|
|
* @public
|
|
* @returns reactive signal of the current edges
|
|
*/
|
|
export function useNodes() {
|
|
const store = $derived(useStore());
|
|
return {
|
|
get current() {
|
|
return store.nodes;
|
|
},
|
|
set current(nodes) {
|
|
store.nodes = nodes;
|
|
},
|
|
update(updateFn: (nodes: Node[]) => Node[]) {
|
|
store.nodes = updateFn(store.nodes);
|
|
},
|
|
set(nodes: Node[]) {
|
|
store.nodes = nodes;
|
|
}
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Hook for getting the current edges from the store.
|
|
*
|
|
* @public
|
|
* @returns reactive signal of the current edges
|
|
*/
|
|
export function useEdges() {
|
|
const store = $derived(useStore());
|
|
return {
|
|
get current() {
|
|
return store.edges;
|
|
},
|
|
set current(edges) {
|
|
store.edges = edges;
|
|
},
|
|
update(updateFn: (edges: Edge[]) => Edge[]) {
|
|
store.edges = updateFn(store.edges);
|
|
},
|
|
set(edges: Edge[]) {
|
|
store.edges = edges;
|
|
}
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Hook for getting the current viewport from the store.
|
|
*
|
|
* @public
|
|
* @returns reactive signal of the current viewport
|
|
*/
|
|
export function useViewport() {
|
|
const store = $derived(useStore());
|
|
return {
|
|
get current() {
|
|
return store.viewport;
|
|
},
|
|
set current(viewport: Viewport) {
|
|
store.viewport = viewport;
|
|
},
|
|
update(updateFn: (viewport: Viewport) => Viewport) {
|
|
store.viewport = updateFn(store.viewport);
|
|
},
|
|
set(viewport: Viewport) {
|
|
store.viewport = viewport;
|
|
}
|
|
};
|
|
}
|