中間ノードの削除
この例では、チェーンの中間からノードを削除したときに削除されたエッジを復元する方法を示します。言い換えると、3つのノードがシーケンスで接続されている場合 - a->b->c
- 中間ノードb
を削除した場合、この例ではグラフa->c
になる方法を示します。
これを実現するには、いくつかの要素を使用する必要があります。
onNodesDelete
コールバックを使用すると、ノードが削除されたときに通知されます。getConnectedEdges
を使用すると、ソースまたはターゲットとしてノードに接続されているすべてのエッジを取得できます。getIncomers
とgetOutgoers
を使用すると、ソースまたはターゲットとしてノードに接続されているノードを取得できます。
これらを組み合わせることで、削除されたノードに接続されているすべてのノードを取得し、削除されたノードが接続されていた任意のノードに再接続できます。
この例は20行未満のコードですが、理解するには多くの情報が必要です。いくつか分解してみましょう。
-
onNodesDelete
コールバックは、1つの引数deleted
で呼び出され、これは削除されたすべてのノードの配列です。個々のノードを選択してDeleteキーを押すと、deleted
にはそのノードのみが含まれますが、複数選択すると、その選択範囲内のすべてのノードがdeleted
に含まれます。 -
フロー内のエッジすべてを、削除したノードとは無関係なものだけを含む新しいエッジ配列
remainingEdges
を作成します。 -
incomers
の配列を`flatMap`することで、別のエッジ配列を作成します。これらは、ソースとして削除されたノードに接続されていたノードです。これらのノードごとに、outgoers
の配列内の各ノードに接続する新しいエッジを作成します。これらは、ターゲットとして削除されたノードに接続されていたノードです。
簡潔にするために、オブジェクトのデストラクチャリングを行いながら、バインドされる変数の名前を変更しています(例:({ id: source }) => ...)
はオブジェクトのid
プロパティをデストラクチャリングし、source
という新しい変数にバインドします)が、これは必須ではありません。