helpers/navigation/nav_node.js (27 lines of code) (raw):
export class Node {
constructor({ title, path, parent = null, depth }) {
this.id = `${parent?.id || ''}${title}_${path}_`;
this.title = title;
this.path = path;
this.parent = parent;
this.depth = depth;
this.isActive = false;
this.children = [];
}
addChild(node) {
this.children.push(node);
}
/**
* Toggles the node's state
*/
toggle() {
if (!this.isActive) {
return this.activate();
}
return this.deactivate();
}
/**
* Activates the node and its parent.
*/
activate() {
this.isActive = true;
this.parent?.activate();
}
/**
* Deactivates the node.
*/
deactivate() {
this.isActive = false;
}
}