update(examples): Use vmodel for custom node

* use v-model for save & restore example

Signed-off-by: Braks <78412429+bcakmakoglu@users.noreply.github.com>
This commit is contained in:
Braks
2021-11-19 13:47:09 +01:00
parent 054e71a609
commit f99dca1c11
4 changed files with 10 additions and 18 deletions
+3 -3
View File
@@ -30,8 +30,8 @@ const onLoad = (flowInstance: FlowInstance) => {
flowInstance.fitView() flowInstance.fitView()
console.log('flow loaded:', flowInstance) console.log('flow loaded:', flowInstance)
} }
const onNodeDragStop = (_: MouseEvent, node: Node) => console.log('drag stop', node) const onNodeDragStop = ({ node }) => console.log('drag stop', node)
const onElementClick = (_: MouseEvent, element: FlowElement) => console.log('click', element) const onElementClick = ({ element }) => console.log('click', element)
const nodeStroke = (n: Node): string => { const nodeStroke = (n: Node): string => {
if (n.type === 'input') return '#0041d0' if (n.type === 'input') return '#0041d0'
if (n.type === 'selectorNode') return bgColor.value if (n.type === 'selectorNode') return bgColor.value
@@ -112,7 +112,7 @@ const onConnect = (params: Connection | Edge) =>
</script> </script>
<template> <template>
<VueFlow <VueFlow
:elements="elements" v-model="elements"
:style="`background: ${bgColor}`" :style="`background: ${bgColor}`"
:node-types="nodeTypes" :node-types="nodeTypes"
:connection-mode="ConnectionMode.Loose" :connection-mode="ConnectionMode.Loose"
-1
View File
@@ -26,7 +26,6 @@ switch (props.data.color) {
break break
} }
const onChange = (e: any) => emit('change', { color, val: e.target.value }) const onChange = (e: any) => emit('change', { color, val: e.target.value })
console.log('rgb')
</script> </script>
<template> <template>
<div class="px-4 py-2 bg-white rounded-md border-2 border-solid border-black text-left transform scale-75 lg:scale-100"> <div class="px-4 py-2 bg-white rounded-md border-2 border-solid border-black text-left transform scale-75 lg:scale-100">
+4 -8
View File
@@ -1,5 +1,5 @@
<script lang="ts" setup> <script lang="ts" setup>
import { useZoomPanHelper, FlowInstance, FlowExportObject, Node } from '~/index' import { useZoomPanHelper, FlowExportObject, Node, useVueFlow } from '~/index'
const flowKey = 'example-flow' const flowKey = 'example-flow'
const state = useStorage(flowKey, { const state = useStorage(flowKey, {
@@ -12,15 +12,11 @@ const getNodeId = () => `randomnode_${+new Date()}`
const { transform } = useZoomPanHelper() const { transform } = useZoomPanHelper()
type ControlsProps = { const flow = useVueFlow()
flowInstance?: FlowInstance
}
const props = defineProps<ControlsProps>()
const emit = defineEmits(['restore', 'add']) const emit = defineEmits(['restore', 'add'])
const onSave = () => { const onSave = () => {
if (props.flowInstance) state.value = props.flowInstance.toObject() if (flow.instance) state.value = flow.instance.toObject()
} }
const onRestore = () => { const onRestore = () => {
@@ -39,7 +35,7 @@ const onAdd = () => {
data: { label: 'Added node' }, data: { label: 'Added node' },
position: { x: Math.random() * window.innerWidth - 100, y: Math.random() * window.innerHeight }, position: { x: Math.random() * window.innerWidth - 100, y: Math.random() * window.innerHeight },
} as Node } as Node
emit('add', newNode) flow.addElements([newNode])
} }
</script> </script>
<template> <template>
+3 -6
View File
@@ -1,6 +1,6 @@
<script lang="ts" setup> <script lang="ts" setup>
import Controls from './Controls.vue' import Controls from './Controls.vue'
import { VueFlow, addEdge, Connection, Node, Edge, Elements, FlowInstance, removeElements } from '~/index' import { VueFlow, addEdge, Connection, Edge, Elements, removeElements } from '~/index'
import './save.css' import './save.css'
@@ -11,16 +11,13 @@ const initialElements: Elements = [
] ]
const elements = ref(initialElements) const elements = ref(initialElements)
const flowInstance = ref()
const onConnect = (params: Connection | Edge) => (elements.value = addEdge(params, elements.value)) const onConnect = (params: Connection | Edge) => (elements.value = addEdge(params, elements.value))
const onElementsRemove = (elementsToRemove: Elements) => (elements.value = removeElements(elementsToRemove, elements.value)) const onElementsRemove = (elementsToRemove: Elements) => (elements.value = removeElements(elementsToRemove, elements.value))
const onLoad = (instance: FlowInstance) => (flowInstance.value = instance)
const onRestore = (els: Elements) => (elements.value = els) const onRestore = (els: Elements) => (elements.value = els)
const onAdd = (el: Node) => (elements.value = elements.value.concat(el))
</script> </script>
<template> <template>
<VueFlow :elements="elements" @elements-remove="onElementsRemove" @connect="onConnect" @load="onLoad"> <VueFlow v-model="elements" storage-key="vue-flow-123" @elements-remove="onElementsRemove" @connect="onConnect">
<Controls :flow-instance="flowInstance" @restore="onRestore" @add="onAdd" /> <Controls @restore="onRestore" />
</VueFlow> </VueFlow>
</template> </template>