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:
@@ -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"
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user