callbacks.onMerge?.(outputs)}
onGoto={version => callbacks.onVersionClicked?.(version)} />
const rountangleEditor =
,
;
const makeUndoOrRedoButton = (parentsOrChildren, text, leftIcon?, rightIcon?, callback?) => {
if (parentsOrChildren.length === 0) {
return {text};
}
if (parentsOrChildren.length === 1) {
return {text};
}
return
{text} ({parentsOrChildren.length.toString()})
{/*{text}*/}
{parentsOrChildren.map(([parentOrChildVersion,deltaToUndoOrRedo]) =>
{deltaToUndoOrRedo.getDescription()})}
;
}
const undoButton = makeUndoOrRedoButton(state.version.parents, "Undo", , null, callbacks.onUndoClicked);
const redoButton = makeUndoOrRedoButton(state.version.children, "Redo", null, , callbacks.onRedoClicked);
const undoRedoButtons = <>
{undoButton}
{redoButton}
>;
const stackedUndoButtons = state.version.parents.map(([parentVersion,deltaToUndo]) => {
return (
} onClick={callbacks.onUndoClicked?.bind(null, parentVersion, deltaToUndo)}>
UNDO {deltaToUndo.getDescription()}
);
});
const stackedRedoButtons = state.version.children.map(([childVersion,deltaToRedo]) => {
return (
} onClick={callbacks.onRedoClicked?.bind(null, childVersion, deltaToRedo)}>
REDO {deltaToRedo.getDescription()}
);
});
const stackedUndoRedoButtons = (
{stackedUndoButtons}
{stackedRedoButtons}
);
const makeTabs = (defaultTab: string, tabs: string[]) => {
return
{tabs.map(tab => ({
editor: Editor,
state: State,
history: History,
deltaL1: Deltas (L1),
deltaL0: Deltas (L0),
}[tab]))}
{graphStateComponent}
{rountangleEditor}
{deltaGraphL1Component}
{deltaGraphL0Component}
{historyComponent}
;
}
// React components:
return {
graphStateComponent,
rountangleEditor,
deltaGraphL1Component,
deltaGraphL0Component,
historyComponent,
historyComponentWithMerge,
undoButton,
redoButton,
undoRedoButtons,
stackedUndoRedoButtons,
makeTabs,
};
}
// State, reducers, etc.
return {
initialState,
graphState,
versionRegistry,
getCurrentVersion,
getReducer,
getReactComponents,
};
}