@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
82 lines • 9.89 kB
JavaScript
import { NavigatorNode } from './navigator-node';
/**
* Root navigator node. Top node in the hierarchy.
* The root node is used as an anchor point for the rest of the nodes.
*/
export class NavigatorNodeRoot extends NavigatorNode {
/**
* Adds top nodes to the navigator tree structure. These nodes are the direct children of the root node.
* In the case of the cockpit application, such a node is, for example, the "Home" menu entry.
*
* ```ts
* const nodeData: NavigatorNodeData = { label: 'Home' } ;
* const root: NavigatorNodeRoot = new NavigatorNodeRoot();
*
* // Based on the node data, a new node will be created and assigned to root.
* root.addRoot(nodeData);
*
* const parentNode: NavigatorNode = new NavigatorNode({ label: 'Configuration'...});
* const nodeData: NavigatorNodeData = { label: 'Exports', parent: parentNode } ;
* const root: NavigatorNodeRoot = new NavigatorNodeRoot();
*
* // Based on the node data, parent node will be directly assigned to the root node, and newly created child node
* // will be added to the parent node.
* root.add(nodeData);
* ```
*
* @param {Partial<NavigatorNodeData>} nodeData Data on the basis of which a new node is created.
*/
addRoot(nodeData) {
let duplicate;
if (nodeData.preventDuplicates) {
duplicate = this.find(({ path, parents, label }) => {
return (path === nodeData.path &&
label === nodeData.label &&
parents.some(p => p.label === nodeData.parent));
});
if (duplicate && !duplicate.hidden) {
duplicate.routerLinkExact = false;
return duplicate;
}
}
const { parent } = nodeData;
const node = this.createNode(nodeData);
let localParent;
if (parent) {
if (typeof parent === 'object') {
localParent = this.find(parent.label);
if (localParent) {
localParent.update(parent);
}
}
else if (typeof parent === 'string' || typeof parent === 'function') {
localParent = this.find(parent);
}
if (!localParent) {
localParent = this.createNode(parent);
if (!this.find(n => localParent === n)) {
this.add(localParent);
}
}
}
(localParent || this).add(node);
return node;
}
/**
* Creates a new navigator node.
* @param nodeData The data that serves as the basis for creating a new node.
*/
createNode(nodeData) {
if (nodeData instanceof NavigatorNode) {
return nodeData;
}
if (typeof nodeData === 'string') {
return new NavigatorNode({ label: nodeData });
}
if (typeof nodeData === 'object') {
return new NavigatorNode({ ...nodeData, parent: undefined });
}
throw new Error('Wrong type of node data');
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdG9yLW5vZGUtcm9vdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvbmF2aWdhdG9yL25hdmlnYXRvci1ub2RlLXJvb3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR2pEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxhQUFhO0lBQ2xEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FxQkc7SUFDSCxPQUFPLENBQUMsUUFBb0M7UUFDMUMsSUFBSSxTQUFTLENBQUM7UUFFZCxJQUFJLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQy9CLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7Z0JBQ2pELE9BQU8sQ0FDTCxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUk7b0JBQ3RCLEtBQUssS0FBSyxRQUFRLENBQUMsS0FBSztvQkFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUMvQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbkMsU0FBUyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQ2xDLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksV0FBVyxDQUFDO1FBRWhCLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMvQixXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ2hCLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdCLENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUN0RSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxDQUFDO1lBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNqQixXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDeEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxRQUE2RDtRQUN0RSxJQUFJLFFBQVEsWUFBWSxhQUFhLEVBQUUsQ0FBQztZQUN0QyxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBQ0QsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxPQUFPLElBQUksYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDakMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmF2aWdhdG9yTm9kZSB9IGZyb20gJy4vbmF2aWdhdG9yLW5vZGUnO1xuaW1wb3J0IHsgTmF2aWdhdG9yTm9kZURhdGEgfSBmcm9tICcuL25hdmlnYXRvci1ub2RlLWRhdGEnO1xuXG4vKipcbiAqIFJvb3QgbmF2aWdhdG9yIG5vZGUuIFRvcCBub2RlIGluIHRoZSBoaWVyYXJjaHkuXG4gKiBUaGUgcm9vdCBub2RlIGlzIHVzZWQgYXMgYW4gYW5jaG9yIHBvaW50IGZvciB0aGUgcmVzdCBvZiB0aGUgbm9kZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBOYXZpZ2F0b3JOb2RlUm9vdCBleHRlbmRzIE5hdmlnYXRvck5vZGUge1xuICAvKipcbiAgICogQWRkcyB0b3Agbm9kZXMgdG8gdGhlIG5hdmlnYXRvciB0cmVlIHN0cnVjdHVyZS4gVGhlc2Ugbm9kZXMgYXJlIHRoZSBkaXJlY3QgY2hpbGRyZW4gb2YgdGhlIHJvb3Qgbm9kZS5cbiAgICogSW4gdGhlIGNhc2Ugb2YgdGhlIGNvY2twaXQgYXBwbGljYXRpb24sIHN1Y2ggYSBub2RlIGlzLCBmb3IgZXhhbXBsZSwgdGhlIFwiSG9tZVwiIG1lbnUgZW50cnkuXG4gICAqXG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG5vZGVEYXRhOiBOYXZpZ2F0b3JOb2RlRGF0YSA9IHsgbGFiZWw6ICdIb21lJyB9IDtcbiAgICogY29uc3Qgcm9vdDogTmF2aWdhdG9yTm9kZVJvb3QgPSBuZXcgTmF2aWdhdG9yTm9kZVJvb3QoKTtcbiAgICpcbiAgICogLy8gQmFzZWQgb24gdGhlIG5vZGUgZGF0YSwgYSBuZXcgbm9kZSB3aWxsIGJlIGNyZWF0ZWQgYW5kIGFzc2lnbmVkIHRvIHJvb3QuXG4gICAqIHJvb3QuYWRkUm9vdChub2RlRGF0YSk7XG4gICAqXG4gICAqIGNvbnN0IHBhcmVudE5vZGU6IE5hdmlnYXRvck5vZGUgPSAgbmV3IE5hdmlnYXRvck5vZGUoeyBsYWJlbDogJ0NvbmZpZ3VyYXRpb24nLi4ufSk7XG4gICAqIGNvbnN0IG5vZGVEYXRhOiBOYXZpZ2F0b3JOb2RlRGF0YSA9IHsgbGFiZWw6ICdFeHBvcnRzJywgcGFyZW50OiBwYXJlbnROb2RlIH0gO1xuICAgKiBjb25zdCByb290OiBOYXZpZ2F0b3JOb2RlUm9vdCA9IG5ldyBOYXZpZ2F0b3JOb2RlUm9vdCgpO1xuICAgKlxuICAgKiAvLyBCYXNlZCBvbiB0aGUgbm9kZSBkYXRhLCBwYXJlbnQgbm9kZSB3aWxsIGJlIGRpcmVjdGx5IGFzc2lnbmVkIHRvIHRoZSByb290IG5vZGUsIGFuZCBuZXdseSBjcmVhdGVkIGNoaWxkIG5vZGVcbiAgICogLy8gd2lsbCBiZSBhZGRlZCB0byB0aGUgcGFyZW50IG5vZGUuXG4gICAqIHJvb3QuYWRkKG5vZGVEYXRhKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGlhbDxOYXZpZ2F0b3JOb2RlRGF0YT59IG5vZGVEYXRhIERhdGEgb24gdGhlIGJhc2lzIG9mIHdoaWNoIGEgbmV3IG5vZGUgaXMgY3JlYXRlZC5cbiAgICovXG4gIGFkZFJvb3Qobm9kZURhdGE6IFBhcnRpYWw8TmF2aWdhdG9yTm9kZURhdGE+KSB7XG4gICAgbGV0IGR1cGxpY2F0ZTtcblxuICAgIGlmIChub2RlRGF0YS5wcmV2ZW50RHVwbGljYXRlcykge1xuICAgICAgZHVwbGljYXRlID0gdGhpcy5maW5kKCh7IHBhdGgsIHBhcmVudHMsIGxhYmVsIH0pID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBwYXRoID09PSBub2RlRGF0YS5wYXRoICYmXG4gICAgICAgICAgbGFiZWwgPT09IG5vZGVEYXRhLmxhYmVsICYmXG4gICAgICAgICAgcGFyZW50cy5zb21lKHAgPT4gcC5sYWJlbCA9PT0gbm9kZURhdGEucGFyZW50KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBpZiAoZHVwbGljYXRlICYmICFkdXBsaWNhdGUuaGlkZGVuKSB7XG4gICAgICAgIGR1cGxpY2F0ZS5yb3V0ZXJMaW5rRXhhY3QgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGR1cGxpY2F0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHBhcmVudCB9ID0gbm9kZURhdGE7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZShub2RlRGF0YSk7XG4gICAgbGV0IGxvY2FsUGFyZW50O1xuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgaWYgKHR5cGVvZiBwYXJlbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGxvY2FsUGFyZW50ID0gdGhpcy5maW5kKHBhcmVudC5sYWJlbCk7XG4gICAgICAgIGlmIChsb2NhbFBhcmVudCkge1xuICAgICAgICAgIGxvY2FsUGFyZW50LnVwZGF0ZShwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXJlbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwYXJlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbG9jYWxQYXJlbnQgPSB0aGlzLmZpbmQocGFyZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFsb2NhbFBhcmVudCkge1xuICAgICAgICBsb2NhbFBhcmVudCA9IHRoaXMuY3JlYXRlTm9kZShwYXJlbnQpO1xuICAgICAgICBpZiAoIXRoaXMuZmluZChuID0+IGxvY2FsUGFyZW50ID09PSBuKSkge1xuICAgICAgICAgIHRoaXMuYWRkKGxvY2FsUGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIChsb2NhbFBhcmVudCB8fCB0aGlzKS5hZGQobm9kZSk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBuYXZpZ2F0b3Igbm9kZS5cbiAgICogQHBhcmFtIG5vZGVEYXRhIFRoZSBkYXRhIHRoYXQgc2VydmVzIGFzIHRoZSBiYXNpcyBmb3IgY3JlYXRpbmcgYSBuZXcgbm9kZS5cbiAgICovXG4gIGNyZWF0ZU5vZGUobm9kZURhdGE6IHN0cmluZyB8IG9iamVjdCB8IE5hdmlnYXRvck5vZGVEYXRhIHwgTmF2aWdhdG9yTm9kZSkge1xuICAgIGlmIChub2RlRGF0YSBpbnN0YW5jZW9mIE5hdmlnYXRvck5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlRGF0YTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBub2RlRGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBuZXcgTmF2aWdhdG9yTm9kZSh7IGxhYmVsOiBub2RlRGF0YSB9KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBub2RlRGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBuZXcgTmF2aWdhdG9yTm9kZSh7IC4uLm5vZGVEYXRhLCBwYXJlbnQ6IHVuZGVmaW5lZCB9KTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyB0eXBlIG9mIG5vZGUgZGF0YScpO1xuICB9XG59XG4iXX0=