Skip to main content

Breakdown

Introduction

Le composant Breakdown est une implémentation React permettant de visualiser des graphes avec des nœuds et des liens. Il est construit avec GoJS, une bibliothèque JavaScript pour la création de diagrammes et de graphes interactifs. Ce composant permet de personnaliser facilement l'apparence des nœuds, des liens, ainsi que les flèches, avec des options pour modifier les styles de ligne, de remplissage et d'interactions (comme le clic et le survol). Il prend en charge des mises en page horizontales, verticales, ou dynamiques, offrant ainsi une flexibilité pour différents types de représentations graphiques. Les fonctionnalités incluent également la gestion des événements pour les liens et les nœuds.

Integration

Simple

Cet exemple illustre un cas basique d'utilisation du composant Breakdown, où un seul nœud est affiché dans le diagramme. Ce type de configuration est idéal pour les tests initiaux ou pour représenter une simple entité dans un organigramme ou un diagramme de processus.

With Relation

Cet exemple montre comment connecter des nœuds dans un diagramme en définissant des relations via des liens. Cela permet de visualiser des hiérarchies, des flux de données, ou des connexions logiques entre entités.

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[
{
from : 0,
to : 1
}
]}
/>
<React.Fragment>

Layouts

Horizontal

Ce layout organise les nœuds de manière horizontale, créant une disposition linéaire de gauche à droite. C’est utile pour représenter des flux d'information ou des processus se déroulant de manière séquentielle.

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{ layout : 'horizontal' }}
/>
<React.Fragment>

Vertical

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{ layout : 'vertical'}}
/>
<React.Fragment>

Dynamic

La disposition dynamique permet de définir un layout personnalisé en utilisant une fonction. Vous pouvez tirer parti de bibliothèques GoJS pour configurer des agencements complexes. Cet exemple montre un layout horizontal basé sur un arbre, configuré dynamiquement.

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
layout : function( go ){
// Horizontal layout
return go.GraphObject.make(
go.TreeLayout,
{
treeStyle: go.TreeLayout.StyleLastParents,
angle: 0,
layerSpacing: 80,
alignment: go.TreeLayout.AlignmentEnd,
}
);
}
}}
/>
<React.Fragment>

Overview Map

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
overview : true
}}
/>
<React.Fragment>

Grid

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
grid : { visible : true }
}}
/>
<React.Fragment>

Dynamic

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
grid : {
visible : true,
template : function( go ){

let maker = go.GraphObject.make;

return maker(
go.Panel,
"Grid",
// Taille de chaque cellule
{
gridCellSize: new go.Size(25, 25)
},
// Lignes horizontales
maker(go.Shape, "LineH", {
strokeWidth: 1,
stroke: "orange",
strokeDashArray: [0, 2, 3, 0]
}),
// Lignes verticales
maker(go.Shape, "LineV", {
strokeWidth: 1,
stroke: "darkred" // Couleur des lignes
})
)

}
}
}}
/>
<React.Fragment>

Themes

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

// createTheme

Breakdown.themes.set( 'light' , {
name : 'light',
colors : {

},
font : {

}
} )

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
themes : [
Breakdown.themes.get('light')
],
defaultTheme : 'light'
}}
/>
<React.Fragment/>

Legend

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{ legend : true }}
/>
<React.Fragment/>

Listeners

Voici une explication des principaux événements disponibles :

ÉvénementDescription
InitialAnimationStarting

Déclenché au début d'une animation initiale (lorsque le diagramme est affiché pour la première fois).

AnimationStarting

Déclenché à chaque début d'une animation (par exemple, pendant un changement de mise en page).

AnimationFinishedDéclenché une fois qu'une animation est terminée.
BackgroundSingleClicked

Déclenché lorsqu'un clic simple est effectué sur l'arrière-plan du diagramme (hors des nœuds et des liens).

BackgroundDoubleClickedDéclenché lorsqu'un double-clic est effectué sur l'arrière-plan.
BackgroundContextClicked

Déclenché lorsqu'un clic droit (ou équivalent) est effectué sur l'arrière-plan.

ChangingSelection

Déclenché juste avant un changement de sélection. Permet d'annuler ou de personnaliser cette action.

ChangedSelection

Déclenché après un changement dans la sélection d'un ou plusieurs éléments.

ClipboardChanged

Déclenché lorsque le contenu du presse-papiers du diagramme est modifié (copie, coupe ou suppression).

ClipboardPasted

Déclenché après que des objets ont été collés depuis le presse-papiers dans le diagramme.

DocumentBoundsChanged

Déclenché lorsque les limites du diagramme sont modifiées (par exemple, ajout ou suppression de nœuds).

InitialLayoutCompleted

Déclenché après la fin de la disposition initiale du diagramme (après son affichage).

LayoutCompleted

Déclenché après qu'une mise en page ou un repositionnement est terminé.

LinkDrawnDéclenché lorsqu'un nouveau lien est créé.
LinkRelinked

Déclenché lorsqu'un lien existant est reconfiguré pour pointer vers de nouveaux nœuds.

Modified

Déclenché lorsque le diagramme est modifié de quelque manière que ce soit (ajout, suppression, modification).

ObjectSingleClicked

Déclenché lorsqu'un objet du diagramme (nœud ou lien) est cliqué une fois.

ObjectDoubleClickedDéclenché lorsqu'un objet est double-cliqué.
SelectionMoved

Déclenché lorsqu'un ou plusieurs objets sélectionnés sont déplacés.

TextEdited

Déclenché après qu'un utilisateur a modifié le texte dans un objet (par exemple, le texte d'un nœud ou d'un lien).

ViewportBoundsChanged

Déclenché lorsqu'il y a un changement dans les limites visibles du diagramme (défilement ou zoom).

ChangedSelection

Cet exemple utilise ChangedSelection pour afficher une alerte à chaque fois qu'un élément est sélectionné ou désélectionné dans le diagramme.

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
isReadOnly : false,
isEnabled : true,
allowSelect : true,
listeners : {
ChangedSelection(){
alert('Selection changed')
}
}
}}
/>
<React.Fragment>

Nodes

Style

Dans cette section, nous abordons la personnalisation du style des nœuds dans un diagramme en utilisant l'option nodeHooks. Cette approche permet de définir des styles spécifiques pour les nœuds, y compris les couleurs, les bordures, et autres propriétés de style graphique.

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
nodeHooks : {
textColor : "white",
style : {
fill : "red",
strokeWidth : 0,
stroke : "black",
}
}
}}
/>
<React.Fragment>

Dynamic

Dans cette section, nous explorons comment personnaliser les nœuds d'un diagramme en utilisant un panel dynamique. Le panel est un composant de type "table" où vous pouvez organiser différents éléments comme des formes et des textes à l’intérieur du nœud. Cette approche est très flexible et permet de personnaliser la structure du nœud à l'aide de GoJS via des panneaux (panels), des lignes (rows) et des colonnes (columns).

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
isReadOnly : false,
isEnabled : true,
allowSelect : true,
nodeHooks : {
textColor : "white",
style : {
fill : "#f2f2f2",
strokeWidth : 0,
},
panel( go ){

let maker = go.GraphObject.make;

return maker(go.Panel, "Table", {
defaultAlignment: go.Spot.Top,
stretch: go.GraphObject.Vertical,
width: 250,
click: () => alert('onNodeClick'),
},
maker(go.RowColumnDefinition, { row: 0, height: 40 }),
maker(go.RowColumnDefinition, { row: 1, height: 40 }),
maker(go.Panel, "Auto",
{
row: 0,
column: 1,
stretch: go.GraphObject.Vertical,
alignment: go.Spot.Top,
width: 300,
},
maker(go.Shape, "RoundedRectangle",
{
parameter1: 1,
strokeWidth: 0,
fill: "#f2f2f2"
}
),
maker(
go.TextBlock,
{
stroke : "dimgray"
},
new go.Binding("text", "name")
)
),
maker(go.Panel, "Auto",
{
row: 1,
column: 1,
stretch: go.GraphObject.Vertical,
alignment: go.Spot.Bottom,
width: 300,
},
maker(go.Shape, "RoundedRectangle",
{
name: 'content',
parameter1: 1,
strokeWidth: 0,
fill: "#f2f2f2"
}
),
maker(
go.TextBlock,
{
stroke : "dimgray",
text : "Text"
}
)
)
)
}
}
}}
/>
<React.Fragment>

Hover stroke

Le hoverStroke est une fonctionnalité permettant d'ajouter un effet visuel de surbrillance (par exemple, une bordure colorée) autour des nœuds lorsqu'ils sont survolés avec la souris. Cela permet de rendre les nœuds plus interactifs et de guider l'utilisateur, en mettant en évidence un nœud spécifique lorsqu'il passe la souris dessus. Par défaut, cette fonctionnalité est désactivée.

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
isEnabled : true,
nodeHooks : { hoverStroke : true }
}}
/>
<React.Fragment>

Hover stroke style

Le hoverStroke permet de personnaliser l'apparence de l'effet de surbrillance appliqué au nœud lorsque la souris le survole. Cette fonctionnalité offre une plus grande flexibilité en permettant de modifier non seulement la couleur du contour mais aussi des propriétés comme la largeur, le style de la ligne, et d'autres aspects visuels de la bordure. Cela permet d'adapter l'interface aux besoins esthétiques et ergonomiques de votre projet.

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
isEnabled : true,
nodeHooks : {
hoverStroke : {
stroke : 'royalblue',
strokeDashArray : [],
strokeWidth : 2
}
}
}}
/>
<React.Fragment>

Listeners

Le paramètre nodeHooks se s'occupe en partie des interactions liées aux nœuds du diagramme, comme le clic, le survol ou la modification.

ÉvénementDescription
addNode

Déclenché lorsqu'un nouveau nœud est ajouté au diagramme. Utilisez cet événement pour effectuer des actions personnalisées après l'ajout d'un nœud, comme définir des propriétés par défaut ou lier des données supplémentaires.

editNode

Déclenché lorsqu'un nœud est modifié. Cet événement peut être utilisé pour valider ou synchroniser les modifications avec une source de données externe.

enterNode

Déclenché lorsque le curseur de la souris entre dans la zone d'un nœud. Idéal pour afficher des surbrillances, des infobulles ou des animations visuelles.

leaveNode

Déclenché lorsque le curseur de la souris quitte la zone d'un nœud. Utilisez-le pour réinitialiser l'état visuel des nœuds ou cacher des éléments contextuels.

clickNode

Déclenché lorsqu'un nœud est cliqué. Utile pour gérer la sélection d'un nœud, ouvrir des formulaires de détails ou déclencher des actions spécifiques.

ClickNode

Cet exemple montre comment implémenter un gestionnaire d'événement pour capturer les clics sur les nœuds.

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
isReadOnly : false,
isEnabled : true,
allowSelect : true,
nodeHooks : {
clickNode(){
alert('onNodeClick');
}
}
}}
/>
<React.Fragment>

Contextual Menu

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';
import { PencilAltIcon } from '@patternfly/react-icons';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
nodeHooks : {
contextMenu : [
{
title : 'editNode',
icon : PencilAltIcon,
action( this:go.Diagram , e: go.InputEvent, thisObj: go.GraphObject ){
alert('editNode');
}
},
{ title : 'clearNode' },
{ title : 'removeNode' },
]
}
}}
/>
<React.Fragment>

Style

La personnalisation des liens permet de modifier l'apparence des connexions entre les nœuds dans un diagramme. En ajustant le style des liens, vous pouvez influencer l'esthétique des lignes ou courbes qui relient les éléments. Cela peut être utile pour rendre vos diagrammes plus lisibles, intuitifs, ou visuellement plus attractifs, en fonction de l'objectif de l'application.

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
linkHooks : {
line : {
strokeWidth : 3,
stroke : 'red',
fill : 'red'
}
}
}}
/>
<React.Fragment>

Dynamic

La personnalisation dynamique des liens permet de définir des comportements plus flexibles et dynamiques pour les connexions entre les nœuds. Cette approche permet de créer des liens ayant des propriétés qui peuvent être calculées à la volée, plutôt que d'être statiquement définies à l'avance. Dans cet exemple, le style des liens est défini à l'aide de fonctions, offrant une grande souplesse.

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
linkHooks : {
line : function( go ){
return go.GraphObject.make(
go.Shape,
{
strokeWidth: 3,
stroke: "royalblue",
}
);
}
}
}}
/>
<React.Fragment>

Arrow

Dans cette configuration statique, nous utilisons l'option linkHooks.arrow pour personnaliser l'apparence de la flèche sur les liens. Ici, la flèche a un style spécifique avec une forme (triangle), une couleur et une largeur de bordure.

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
linkHooks : {
arrow : {
toArrow: "Triangle",
strokeWidth : 3,
stroke : 'red',
fill : 'red'
}
}
}}
/>
<React.Fragment>

Dynamic

La configuration dynamique permet de personnaliser les flèches en fonction des besoins, en utilisant une fonction pour créer la flèche de manière plus flexible. Dans cet exemple, la flèche a une forme de Chevron, avec une couleur bleue et une épaisseur de ligne plus grande.

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
linkHooks : {
arrow : function( go ){
return go.GraphObject.make(
go.Shape,
{
toArrow: "Chevron",
strokeWidth: 5,
stroke: "royalblue",
fill: "royalblue",
}
);
}
}
}}
/>
<React.Fragment>

Listeners

Les listeners ou écouteurs d'événements permettent de définir des actions ou des comportements en réponse aux interactions avec les éléments d'un graphique, tels que les nœuds ou les liens. Dans ce cas, l'exemple montre comment ajouter un écouteur d'événements pour détecter un clic sur un lien et exécuter une action spécifique, comme afficher une alerte.

Click

L'exemple suivant montre comment ajouter un écouteur d'événements pour capturer un clic sur un lien entre deux nœuds. Lorsque l'utilisateur clique sur un lien, une alerte s'affiche, indiquant que le lien a été cliqué.

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
linkHooks : {
click(){
alert('Link clicked');
}
}
}}
/>
<React.Fragment>

Advance

Init

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[
{ myKey : 0, name : 'Alpha' },
{ myKey : 1, name : 'Beta' },
{ myKey : 2, name : 'Gamma' }
]}
modelData = {{
nodeKeyProperty : "myKey",
linkDataArray : [
{ from : 0, to : 1 },
{ from : 0, to : 2 }
]
}}
initOptions = {{ isEnabled : true }}
initDiagram = {function( initOptions ){

const maker = go.GraphObject.make;

const diagram = maker(go.Diagram);

// Configuration basique du diagramme
diagram.initialContentAlignment = go.Spot.Center; // Centrer les nœuds
diagram.layout = maker(go.TreeLayout);

// Définition des modèles de nœuds
diagram.nodeTemplate = maker(go.Node, "Auto")
.add(
maker(go.Shape, "RoundedRectangle", {
fill: "lightgreen",
stroke: null,
})
)
.add(
maker(go.TextBlock, {
margin: 8,
editable: false,
}).bind("text", "name")
);

// Modèle de liens
diagram.linkTemplate = maker(go.Link)
.add(maker(go.Shape)) // Ligne de base
.add(maker(go.Shape, { toArrow: "Standard" })); // Flèche

// Setup de nodeKeyProperty et des links
diagram.model.linkDataArray = this.props.modelData.linkDataArray;
diagram.model.nodeKeyProperty = this.props.modelData.nodeKeyProperty;

return () => diagram;

}}
/>
<React.Fragment>

Utilities

BuildIn - Init

Default

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
/>
<React.Fragment>

Default initialisation function

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
initDiagram = { Breakdown.default_initDiagram_function }
/>
<React.Fragment>

BuildIn - NodeTemplate

Default Node Breakdown Template

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[
{
token : "PR0000",
name : 'MyProject',
type : 'project'
}
]}
initOptions = {{
nodeHooks : { panel : Breakdown.default_node_template() }
}}
/>
<React.Fragment>

BuildIn - NodeTemplate Utilities

External Excel Token Info

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[
{
token : "PR0000",
name : 'MyProject',
type : 'project',
meta : {
external : {
excel : { token : 'external-excel-token' }
}
}
}
]}
initOptions = {{
nodeHooks : {
panel : Breakdown.default_node_template(),
spots : [
Breakdown.default_externalExcelTokenInfo_template()
]
},
}}
/>
<React.Fragment>

External Excel Token Info - Customize

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[
{
token : "PR0000",
name : 'MyProject',
type : 'project',
meta : {
external : {
excel : { token : 'external-excel-token' }
}
}
}
]}
initOptions = {{
nodeHooks : {
panel : Breakdown.default_node_template(),
spots : [
Breakdown.default_externalExcelTokenInfo_template({ background : "red" })
]
},
}}
/>
<React.Fragment>

Node Edit button

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[
{
token : "PR0000",
name : 'MyProject',
type : 'project',
meta : {
external : {
excel : { token : 'external-excel-token' }
}
}
}
]}
initOptions = {{
nodeHooks : {
panel : Breakdown.default_node_template(),
spots : [
Breakdown.default_externalExcelTokenInfo_template(),
Breakdown.default_node_editButton_spot(),
]
},
}}
/>
<React.Fragment>

Node Add button

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[
{
token : "PR0000",
name : 'MyProject',
type : 'project',
meta : {
external : {
excel : { token : 'external-excel-token' }
}
}
}
]}
initOptions = {{
nodeHooks : {
panel : Breakdown.default_node_template(),
spots : [
Breakdown.default_externalExcelTokenInfo_template(),
Breakdown.default_node_addButton_spot(),
]
},
}}
/>
<React.Fragment>
import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[
{
token : "PR0000",
name : 'MyProject',
type : 'project'
},
{
token : "DEL0000",
name : 'MyDeliverable',
type : 'deliverable'
},
{
token : "ORD0000",
name : 'MyOrder',
type : 'order'
}
]}
linkDataArray = {[
{ from : "PR0000" , to : "DEL0000" },
{ from : "DEL0000" , to : "ORD0000" },
]}
initOptions = {{
nodeHooks : {
panel : Breakdown.default_node_template(),
spots : [
Breakdown.default_externalExcelTokenInfo_template()
]
},
}}
/>
<React.Fragment>

Default Structure Breakdown Template

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[
{
token : "STR0000",
name : 'Structure',
type : 'structure',
meta : {
external : {
excel : { token : 'external-excel-token' }
}
}
},
{
token : "STR0000-001",
name : 'Child-1',
child : "1",
type : 'structure_child',
meta : {
external : {
excel : { token : 'external-excel-token' }
}
}
},
{
token : "STR0000-001-001",
name : 'Child-1.1',
child : "1.1",
type : 'structure_child',
meta : {
external : {
excel : { token : 'external-excel-token' }
}
}
}
]}
linkDataArray = {[
{ from : "STR0000" , to : "STR0000-001" },
{ from : "STR0000-001" , to : "STR0000-001-001" },
]}
initOptions = {{
nodeHooks : {
panel : Breakdown.default_node_template(),
spots : [
Breakdown.default_externalExcelTokenInfo_template()
]
},
}}
/>
<React.Fragment>

BuildIn - LinkTemplate

import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {[...]}
linkDataArray = {[...]}
initOptions = {{
linkHooks : {
line : Breakdown.default_link_template(),
arrow : Breakdown.default_arrow_template()
},
}}
/>
<React.Fragment>

TestZone

Details
import { Breakdown } from '@infrasoftbe/infrasoft-ui-components';

<React.Fragment>
<Breakdown
nodeDataArray = {nodes}
linkDataArray = {links}
initOptions = {{
isReadOnly : false,
isEnabled : true,
allowSelect : true,
allowMove : true,
allowZoom : true,
allowHorizontalScroll : true,
allowVerticalScroll : true,
layout : 'vertical',
overview : true,
nodeHooks : {
panel : Breakdown.default_node_template(),
spots : [
Breakdown.default_externalExcelTokenInfo_template(),
Breakdown.default_node_addButton_spot(),
Breakdown.default_node_editButton_spot(),
]
},
linkHooks : {
line : Breakdown.default_link_template(),
arrow : Breakdown.default_arrow_template()
}
}}
/>
<React.Fragment>