From babcbd0e1ff68cf57d7c44390cf62e0aa33811c6 Mon Sep 17 00:00:00 2001 From: Braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Fri, 22 Oct 2021 12:39:55 +0200 Subject: [PATCH] update: Flow instance provides update node internals func * Rename onLoadParams to FlowInstance * Pass update node internals to instance --- examples/Basic/Basic.vue | 6 +- examples/CustomNode/CustomNode.vue | 4 +- examples/DragNDrop/DnD.vue | 6 +- examples/EdgeTypes/EdgeTypesExample.vue | 4 +- examples/EdgeWithButton/EdgeWithButton.vue | 4 +- examples/Edges/EdgesExample.vue | 4 +- examples/Empty/EmptyExample.vue | 4 +- .../NodeTypeChange/NodeTypeChangeExample.vue | 4 +- examples/Overview/Overview.vue | 4 +- examples/Provider/ProviderExample.vue | 4 +- examples/SaveRestore/Controls.vue | 4 +- examples/SaveRestore/SaveRestoreExample.vue | 4 +- examples/Stress/StressExample.vue | 4 +- .../UpdatableEdge/UpdatableEdgeExample.vue | 4 +- examples/UpdateNodeInternals/CustomNode.vue | 25 ++++++ .../UpdateNodeInternalsExample.vue | 77 +++++++++++++++++++ examples/router.ts | 4 + src/composables/useHooks.ts | 4 +- src/composables/useUpdateNodeInternals.ts | 12 +-- src/container/ZoomPane/ZoomPane.vue | 3 +- src/index.ts | 1 - src/types/hooks.ts | 4 +- src/types/types.ts | 5 +- 23 files changed, 149 insertions(+), 46 deletions(-) create mode 100644 examples/UpdateNodeInternals/CustomNode.vue create mode 100644 examples/UpdateNodeInternals/UpdateNodeInternalsExample.vue diff --git a/examples/Basic/Basic.vue b/examples/Basic/Basic.vue index 6ce3e7c5..e4ccc33c 100644 --- a/examples/Basic/Basic.vue +++ b/examples/Basic/Basic.vue @@ -7,7 +7,7 @@ import Flow, { Edge, Elements, FlowElement, - OnLoadParams, + FlowInstance, addEdge, isNode, removeElements, @@ -24,11 +24,11 @@ const elements = ref([ { id: 'e1-2', source: '1', target: '2', animated: true }, { id: 'e1-3', source: '1', target: '3' }, ] as Elements) -const rfInstance = ref(null) +const rfInstance = ref(null) const onElementsRemove = (elementsToRemove: Elements) => (elements.value = removeElements(elementsToRemove, elements.value as Elements)) const onConnect = (params: Edge | Connection) => (elements.value = addEdge(params, elements.value as Elements)) -const onLoad = (flowInstance: OnLoadParams) => { +const onLoad = (flowInstance: FlowInstance) => { flowInstance.fitView({ padding: 0.1 }) rfInstance.value = flowInstance } diff --git a/examples/CustomNode/CustomNode.vue b/examples/CustomNode/CustomNode.vue index ea28e6c4..8ad80906 100644 --- a/examples/CustomNode/CustomNode.vue +++ b/examples/CustomNode/CustomNode.vue @@ -8,7 +8,7 @@ import Flow, { Controls, Node, FlowElement, - OnLoadParams, + FlowInstance, Elements, Position, SnapGrid, @@ -25,7 +25,7 @@ const nodeTypes = { selectorNode: ColorSelectorNode, } -const onLoad = (flowInstance: OnLoadParams) => { +const onLoad = (flowInstance: FlowInstance) => { flowInstance.fitView() console.log('flow loaded:', flowInstance) } diff --git a/examples/DragNDrop/DnD.vue b/examples/DragNDrop/DnD.vue index ee8890a4..d63d29c9 100644 --- a/examples/DragNDrop/DnD.vue +++ b/examples/DragNDrop/DnD.vue @@ -1,9 +1,9 @@ diff --git a/examples/Stress/StressExample.vue b/examples/Stress/StressExample.vue index 4c5b2a5b..eed0dfe3 100644 --- a/examples/Stress/StressExample.vue +++ b/examples/Stress/StressExample.vue @@ -8,7 +8,7 @@ import Flow, { isNode, Controls, Background, - OnLoadParams, + FlowInstance, Elements, Connection, Edge, @@ -16,7 +16,7 @@ import Flow, { const buttonWrapperStyles: CSSProperties = { position: 'absolute', right: 10, top: 10, zIndex: 4 } -const onLoad = (flowInstance: OnLoadParams) => { +const onLoad = (flowInstance: FlowInstance) => { flowInstance.fitView() console.log(flowInstance.getElements()) } diff --git a/examples/UpdatableEdge/UpdatableEdgeExample.vue b/examples/UpdatableEdge/UpdatableEdgeExample.vue index 03126db1..b7e103bc 100644 --- a/examples/UpdatableEdge/UpdatableEdgeExample.vue +++ b/examples/UpdatableEdge/UpdatableEdgeExample.vue @@ -4,7 +4,7 @@ import Flow, { updateEdge, addEdge, Elements, - OnLoadParams, + FlowInstance, Connection, Edge, removeElements, @@ -40,7 +40,7 @@ const initialElements: Elements = [ ] as Elements const elements = ref(initialElements) -const onLoad = (flowInstance: OnLoadParams) => flowInstance.fitView() +const onLoad = (flowInstance: FlowInstance) => flowInstance.fitView() const onEdgeUpdateStart = (edge: Edge) => console.log('start update', edge) const onEdgeUpdateEnd = (edge: Edge) => console.log('end update', edge) const onEdgeUpdate = ({ edge, connection }: FlowEvents['edgeUpdate']) => diff --git a/examples/UpdateNodeInternals/CustomNode.vue b/examples/UpdateNodeInternals/CustomNode.vue new file mode 100644 index 00000000..1f4be0a9 --- /dev/null +++ b/examples/UpdateNodeInternals/CustomNode.vue @@ -0,0 +1,25 @@ + + diff --git a/examples/UpdateNodeInternals/UpdateNodeInternalsExample.vue b/examples/UpdateNodeInternals/UpdateNodeInternalsExample.vue new file mode 100644 index 00000000..ab2429eb --- /dev/null +++ b/examples/UpdateNodeInternals/UpdateNodeInternalsExample.vue @@ -0,0 +1,77 @@ + + diff --git a/examples/router.ts b/examples/router.ts index ce1ddb71..4876a964 100644 --- a/examples/router.ts +++ b/examples/router.ts @@ -93,6 +93,10 @@ export const routes: RouterOptions['routes'] = [ path: '/update-node', component: () => import('./UpdateNode/UpdateNodeExample.vue'), }, + { + path: '/update-node-internals', + component: () => import('./UpdateNodeInternals/UpdateNodeInternalsExample.vue'), + }, ] export const router = createRouter({ diff --git a/src/composables/useHooks.ts b/src/composables/useHooks.ts index b7300293..ae121c7e 100644 --- a/src/composables/useHooks.ts +++ b/src/composables/useHooks.ts @@ -1,4 +1,4 @@ -import { Connection, Edge, Elements, EmitFunc, FlowHooks, FlowTransform, Node, OnConnectStartParams, OnLoadParams } from '~/types' +import { Connection, Edge, Elements, EmitFunc, FlowHooks, FlowTransform, Node, OnConnectStartParams, FlowInstance } from '~/types' import { Hooks } from '~/context' // flow event hooks @@ -22,7 +22,7 @@ const hooks = (): FlowHooks => { }>(), connectStop: createEventHook(), connectEnd: createEventHook(), - load: createEventHook(), + load: createEventHook(), move: createEventHook(), moveStart: createEventHook(), moveEnd: createEventHook(), diff --git a/src/composables/useUpdateNodeInternals.ts b/src/composables/useUpdateNodeInternals.ts index 9052709b..97b46095 100644 --- a/src/composables/useUpdateNodeInternals.ts +++ b/src/composables/useUpdateNodeInternals.ts @@ -1,14 +1,10 @@ -import { ElementId, UpdateNodeInternals } from '~/types' -import useStore from '~/composables/useStore' +import { ElementId, FlowStore, UpdateNodeInternals } from '~/types' -export default (): UpdateNodeInternals => { - const store = useStore() - - return (id: ElementId) => { +export default (store: FlowStore): UpdateNodeInternals => + (id: ElementId) => { const nodeElement: HTMLDivElement | null = document.querySelector(`.vue-flow__node[data-id="${id}"]`) if (nodeElement) { - store.updateNodeDimensions([{ id, nodeElement, forceUpdate: true }]) + store.updateNodeDimensions({ id, nodeElement, forceUpdate: true }) } } -} diff --git a/src/container/ZoomPane/ZoomPane.vue b/src/container/ZoomPane/ZoomPane.vue index fd16500d..e06272ad 100644 --- a/src/container/ZoomPane/ZoomPane.vue +++ b/src/container/ZoomPane/ZoomPane.vue @@ -4,7 +4,7 @@ import { D3ZoomEvent, zoom, zoomIdentity, ZoomTransform } from 'd3-zoom' import { get } from '@vueuse/core' import { pointer, select } from 'd3-selection' import { FlowTransform, KeyCode, PanOnScrollMode } from '~/types' -import { useHooks, useKeyPress, useStore, useZoomPanHelper } from '~/composables' +import { useHooks, useKeyPress, useStore, useUpdateNodeInternals, useZoomPanHelper } from '~/composables' import { clamp, onLoadGetElements, onLoadProject, onLoadToObject } from '~/utils/graph' interface ZoomPaneProps { @@ -208,6 +208,7 @@ onMounted(() => { zoomOut, zoomTo, setTransform, + updateNodeInternals: useUpdateNodeInternals(store), project: onLoadProject(store), getElements: onLoadGetElements(store), toObject: onLoadToObject(store), diff --git a/src/index.ts b/src/index.ts index f62f8034..8fa5a793 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,7 +17,6 @@ export { isInputDOMNode, } from './utils/graph' export { default as useZoomPanHelper } from './composables/useZoomPanHelper' -export { default as useUpdateNodeInternals } from './composables/useUpdateNodeInternals' export { default as useStore } from './composables/useStore' export { default as useHooks } from './composables/useHooks' export { default as useHandle } from './composables/useHandle' diff --git a/src/types/hooks.ts b/src/types/hooks.ts index 7384eba6..c2daa00f 100644 --- a/src/types/hooks.ts +++ b/src/types/hooks.ts @@ -1,5 +1,5 @@ import { EventHook } from '@vueuse/core' -import { Connection, Edge, Elements, FlowTransform, Node, OnConnectStartParams, OnLoadParams } from '../types' +import { Connection, Edge, Elements, FlowTransform, Node, OnConnectStartParams, FlowInstance } from '../types' export type FlowHook = EventHook @@ -22,7 +22,7 @@ export interface FlowEvents { } connectStop: MouseEvent connectEnd: MouseEvent - load: OnLoadParams + load: FlowInstance move: FlowTransform | undefined moveStart: FlowTransform | undefined moveEnd: FlowTransform | undefined diff --git a/src/types/types.ts b/src/types/types.ts index c41824cf..b4e5bab6 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -77,7 +77,7 @@ export type FitViewFunc = (fitViewOptions?: FitViewParams) => void export type ProjectFunc = (position: XYPosition) => XYPosition export type ToObjectFunc = () => FlowExportObject -export type OnLoadParams = { +export type FlowInstance = { zoomIn: () => void zoomOut: () => void zoomTo: (zoomLevel: number) => void @@ -86,9 +86,10 @@ export type OnLoadParams = { getElements: () => Elements setTransform: (transform: FlowTransform) => void toObject: ToObjectFunc + updateNodeInternals: (id: ElementId) => void } -export type OnLoadFunc = (params: OnLoadParams) => void +export type OnLoadFunc = (params: FlowInstance) => void export interface FlowOptions extends Omit { elements: Elements