SequenceDiagram/scripts/sequence/components/BaseComponent.js

132 lines
2.0 KiB
JavaScript

/* eslint-disable spaced-comment */
/* eslint-disable capitalized-comments */
export default class BaseComponent {
makeState(/*state*/) {
// Override if required
}
resetState(state) {
// Override if required
this.makeState(state);
}
prepareMeasurements(/*stage, {
renderer,
theme,
agentInfos,
textSizer,
state,
components,
}*/) {
// Override if required
}
separationPre(/*stage, {
renderer,
theme,
agentInfos,
visibleAgentIDs,
momentaryAgentIDs,
textSizer,
addSpacing,
addSeparation,
state,
components,
}*/) {
// Override if required
}
separation(/*stage, {
renderer,
theme,
agentInfos,
visibleAgentIDs,
momentaryAgentIDs,
textSizer,
addSpacing,
addSeparation,
state,
components,
}*/) {
// Override if required
}
renderPre(/*stage, {
renderer,
theme,
agentInfos,
textSizer,
state,
components,
}*/) {
// Override if required
// Return {topShift, agentIDs, asynchronousY}
}
render(/*stage, {
renderer,
topY,
primaryY,
fillLayer,
blockLayer,
theme,
agentInfos,
svg,
textSizer,
addDef,
makeRegion,
state,
components,
}*/) {
// Override if required
// Return bottom Y coordinate
}
renderHidden(/*stage, {
(same args as render, with primaryY = topY)
}*/) {
// Override if required
}
shouldHide(/*stage, {
renderer,
theme,
agentInfos,
textSizer,
state,
components,
}*/) {
// Override if required
// Return {self, nest}
}
}
export function cleanRenderPreResult({
agentIDs = [],
topShift = 0,
y = null,
asynchronousY = null,
} = {}, currentY = null) {
let ts = topShift;
if(y !== null && currentY !== null) {
ts = Math.max(ts, y - currentY);
}
return {
agentIDs,
asynchronousY: (asynchronousY === null) ? currentY : asynchronousY,
topShift: ts,
y,
};
}
const components = new Map();
export function register(name, component) {
components.set(name, component);
}
export function getComponents() {
return components;
}