LogicFlow実践ガイド:カスタマイズと機能拡張

LogicFlowは、フローチャートやBPMNなどのダイアグラムを作成するための強力なJavaScriptライブラリです。このガイドでは、基本的なセットアップから高度なカスタマイズまで、実践的な使い方を解説します。

基本セットアップ

1. モジュールのインポート

import LogicFlow from '@logicflow/core'
import { onMounted, ref } from 'vue'

2. コンテナの準備

<div ref="graphContainer" class="graph-container"></div>

3. インスタンスの生成と初期化

// コンテナとLogicFlowインスタンス用のrefを宣言
const graphContainer = ref()
const flowInstance = ref<LogicFlow>()

// マウント後にLogicFlowを初期化
onMounted(() => {
  flowInstance.value = new LogicFlow({
    container: graphContainer.value,
    grid: {
      visible: true,
      type: 'dot',
      size: 20
    },
    plugins: []
  })
  flowInstance.value.render({})
})

BPMNカスタムタスクの実装

1. 必要モジュールの読み込み

import { bpmnTaskDefinitions } from '@/data/flowDefinitions'
import { registerBPMNTaskNode } from '@/utils/nodeRegistration'

2. カスタムノードの登録

registerBPMNTaskNode(flowInstance.value)
// flowInstance.value.render({})

継承ベースのカスタムノード

1. 依存モジュールのインポート

import { customNodeRegistry } from '@/data/flowDefinitions'
import { registerExtendedNode } from '@/utils/nodeRegistration'

2. 拡張ノードの登録

registerExtendedNode(flowInstance.value)
// flowInstance.value.render({})

ドラッグ&ドロップパネルの構築

1. 必要なリソースのインポート

import { dndPanelItems } from '@/data/flowDefinitions'
import { DndPanel } from '@logicflow/extension'

2. DnDプラグインの適用

LogicFlow初期化時にplugins配列にDndPanelを追加します。

// plugins: [DndPanel]
flowInstance.value.use(DndPanel)
flowInstance.value.extension.dndPanel.setPatterns(dndPanelItems)
// flowInstance.value.render({})

コンテキストメニューの実装

1. 基本モジュールのインポート

import { Menu } from '@logicflow/extension'
import { configureDefaultMenu } from '@/utils/menuSetup'

2. メニュープラグインの有効化

LogicFlow初期化時にplugins配列にMenuを追加します。

// plugins: [Menu]

デフォルトでは、以下のメニュー項目が提供されています:

  • ノードメニュー:削除、複製、テキスト編集
  • エッジメニュー:削除、テキスト編集
  • グラフメニュー:なし

3. 事前定義メニューの適用

configureDefaultMenu(flowInstance.value)
// flowInstance.value.render({})

この設定により以下のメニューが有効になります:

  • ノード:複製、削除
  • エッジ:削除
  • グラフ:全クリア、元に戻す、やり直し

4. 完全カスタムメニューの実装

メニュー項目ごとにコールバック関数が必要で、多くの場合flowInstanceへのアクセスが必要です。そのため、コンポーネント内で直接定義することを推奨します。

const customMenuConfig = {
  nodeMenu: [
    {
      text: 'カスタムアクション',
      callback(node) {
        // カスタム処理
      }
    }
  ]
}
flowInstance.value.extension.menu.setMenuConfig(customMenuConfig)
// flowInstance.value.render({})

5. メニュー項目の動的追加

既存のメニューに項目を追加する場合は、以下の方法を使用します。

const additionalMenuItems = {
  nodeMenu: [
    {
      text: '追加機能',
      callback(node) {
        // 追加処理
      }
    }
  ]
}
flowInstance.value.extension.menu.appendMenuConfig(additionalMenuItems)
// flowInstance.value.render({})

タグ: LogicFlow vue.js BPMN ドラッグ&ドロップ コンテキストメニュー

7月29日 20:21 投稿