setup()

in seatunnel-ui/src/views/task/synchronization-definition/dag/index.tsx [28:119]


  setup() {
    const dagRef = ref()

    const tempNode = {
      type: '',
      name: ''
    }
    const { t, locale } = useI18n()
    const { state, detailInit, onDelete, onSave } = useDagDetail()
    const handelDragstart = (type: any, name: any) => {
      tempNode.type = type
      tempNode.name = name
    }

    const handelDrop = (e: DragEvent) => {
      if (!tempNode.type) return
      dagRef.value.addNode({
        x: e.offsetX,
        y: e.offsetY,
        label: tempNode.name || tempNode.type,
        node: tempNode.type
      })
    }

    const handleDelete = async () => {
      const cells = dagRef.value.getSelectedCells()
      if (!cells.length) {
        window.$message.warning(
          t('project.synchronization_definition.delete_empty_tips')
        )
        return
      }
      let result = true
      if (cells[0].isNode() && !cells[0].getData().unsaved) {
        result = await onDelete(cells[0].getData().pluginId)
      }
      if (result) dagRef.value.removeCell(cells[0].id)
    }

    const handleSave = () => {
      const result = dagRef.value.getDagData()
      result && onSave(dagRef.value.getDagData(), dagRef.value.getGraph())
    }

    const handleLayout = (
      layoutType: 'grid' | 'dagre',
      cols: number,
      rows: number
    ) => {
      dagRef.value.layoutDag(layoutType, cols, rows)
    }

    onMounted(async () => {
      const result = await detailInit()
      if (result?.nodesAndEdges) {
        dagRef.value.addNodesAndEdges(
          result.nodesAndEdges.plugins,
          result.nodesAndEdges.edges
        )
      }
      document.documentElement.style.setProperty(
        '--node-config-hint',
        `"${t('dag.nodeConfigHint')}"`
      )
    })

    watch(
      () => locale.value,
      () => {
        document.documentElement.style.setProperty(
          '--node-config-hint',
          `"${t('dag.nodeConfigHint')}"`
        )
      }
    )

    return () => (
      <NSpin show={state.loading}>
        <NSpace vertical>
          <DagToolbar
            onDelete={handleDelete}
            onSave={handleSave}
            onLayout={handleLayout}
          />
          <div class={styles['workflow-dag']}>
            <DagSidebar onDragstart={handelDragstart} />
            <DagCanvas onDrop={handelDrop} ref={dagRef} />
          </div>
        </NSpace>
      </NSpin>
    )
  }