Workflow.vue 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <template>
  2. <div class="w-full h-full relative">
  3. <Canvas
  4. ref="vueflowRef"
  5. :id="id"
  6. :nodes="nodes"
  7. :edges="edges"
  8. :read-only="readOnly"
  9. :node-map="nodeMap"
  10. :default-viewport="workflow?.viewPort"
  11. hide-child-node
  12. v-bind="$attrs"
  13. />
  14. <slot />
  15. </div>
  16. </template>
  17. <script setup lang="ts">
  18. import { ref, computed, toRef } from 'vue'
  19. import Canvas from './components/Canvas.vue'
  20. import type { IWorkflow } from './Interface'
  21. import { provideWorkflowContext } from './hooks/useWorkflowContext'
  22. defineOptions({
  23. inheritAttrs: false
  24. })
  25. const props = withDefaults(
  26. defineProps<{
  27. id?: string
  28. workflow?: IWorkflow
  29. readOnly?: boolean
  30. nodeMap: Record<string, any>
  31. }>(),
  32. {
  33. id: 'canvas',
  34. readOnly: false
  35. }
  36. )
  37. const vueflowRef = ref<InstanceType<typeof Canvas> | null>(null)
  38. // nodes
  39. const nodes = computed(() => props.workflow?.nodes || [])
  40. // edges
  41. const edges = computed(() => props.workflow?.edges || [])
  42. defineExpose({
  43. getVueFlow() {
  44. return vueflowRef.value?.vueFlow
  45. }
  46. })
  47. provideWorkflowContext(toRef(props, 'workflow'))
  48. </script>