Direkte Knotenbearbeitung
Pivotick liefert eine Bearbeitungsebene, nicht nur einen Viewer. Doppelklicken Sie auf einen Knoten, um dessen Bearbeitungsmodalität zu öffnen. onBeforeNodeEditCommit ist Ihr Validierungs-/Veto-Hook (geben Sie false zurück, um eine fehlerhafte Bearbeitung abzulehnen und das Modal offen zu halten), und onNodeEditCancel wird ausgelöst, wenn der Benutzer zurücktritt.
Doppelklicken Sie auf Alice und ändern Sie ein Feld. Löschen Sie den Namen und versuchen Sie zu speichern – der Commit wird abgelehnt. Mit Grafik bearbeiten → Bearbeiten der Symbolleiste wird das gleiche Modal geöffnet.
js
// Editing needs the full UI mode — the default 'viewer' is read-only. Double-click
// opens the built-in edit modal; the two commit hooks below validate and observe it.
const options = {
// Off: `full` mode brings a minimap and the data dock, and this card is about
// neither (see the Minimap and Data table cards for those).
UI: { mode: 'full', minimap: false, table: false },
callbacks: {
// Open the edit modal on double-click (the toolbar's Edit Graph → Edit does
// the same). onNodeEdit(session) also lets you return a fully custom body.
onNodeDbclick: (event, node) => graph.editing.openNodeSession(node),
// Validation / veto hook — return false to reject the commit and keep the
// modal open. Here we refuse an empty name.
onBeforeNodeEditCommit: ({ previousData, nextData }) => {
if (!nextData.label || !String(nextData.label).trim()) {
graph.notifier.warning('Name required', 'A node must keep a name.')
return false
}
graph.notifier.success('Node updated', `${previousData.label} → ${nextData.label}`)
return true
},
// Fires when the user cancels the edit.
onNodeEditCancel: (node) => graph.notifier.info('Edit cancelled', node.getData().label)
}
}js
const data = {
nodes: [
{ id: 'alice', data: { label: 'Alice', role: 'Maintainer', team: 'Core' } },
{ id: 'bob', data: { label: 'Bob', role: 'Contributor', team: 'Core' } },
{ id: 'carol', data: { label: 'Carol', role: 'Reviewer', team: 'Docs' } },
{ id: 'dave', data: { label: 'Dave', role: 'Contributor', team: 'Docs' } },
{ id: 'erin', data: { label: 'Erin', role: 'Maintainer', team: 'Infra' } }
],
edges: [
{ from: 'alice', to: 'bob' },
{ from: 'alice', to: 'carol' },
{ from: 'carol', to: 'dave' },
{ from: 'erin', to: 'alice' }
]
}