@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
96 lines • 12.3 kB
JavaScript
import { Subject, defer, of } from 'rxjs';
import { merge } from 'rxjs/operators';
import { pick, map, property, some, every } from 'lodash-es';
import { NavigatorNodeRootLegacy } from './navigator-node-root-legacy';
// Just to hook into the bridge service
export function c8yNavigatorProvider() {
const root = new NavigatorNodeRootLegacy();
const rootNodesSubject = new Subject();
const conditionalNodes = [];
const rootNodes$ = rootNodesSubject.pipe(merge(defer(() => of(root.children))));
function addNavigation(nodes) {
const nodeList = Array.isArray(nodes) ? nodes : [nodes];
nodeList.forEach(node => {
if (isConditional(node)) {
node.hidden = undefined;
conditionalNodes.push(node);
}
node.navNode = root.addRoot(node);
});
rootNodesSubject.next(root.children);
}
function removeNavigation(node) {
const found = root.find(n => n === node);
if (found) {
found.parents.forEach(p => p.remove(found));
rootNodesSubject.next(root.children);
}
}
function findNode(node) {
return root.find(node);
}
function isConditional(node) {
return node.showIf || node.showIfPermissions || node.showIfContainsVisibleViews;
}
function $get($q, $injector) {
'ngInject';
// This avoids the circular dependency
setTimeout(() => conditionalNodes.forEach(processShowIf));
function processShowIf(node) {
const c8yUiUtil = $injector.get('c8yUiUtil');
const visibilityPromises = [];
const { showIf, showIfPermissions, showIfContainsVisibleViews } = node;
if (showIf) {
visibilityPromises.push($injector.invoke(showIf));
}
if (showIfContainsVisibleViews) {
visibilityPromises.push(viewsConditionalVisibility(node));
}
c8yUiUtil
.configureVisibility({
showIf: () => $q.all(visibilityPromises).then(every),
showIfPermissions
}, 'visible')
.then(({ visible }) => {
if (visible) {
node.navNode.update({
hidden: false,
showIf: null,
showIfPermission: null,
showIfContainsVisibleViews: null
});
}
else {
node.navNode.update({
hidden: true
});
}
});
}
function viewsConditionalVisibility(node) {
const c8yUiUtil = $injector.get('c8yUiUtil');
const c8yViews = $injector.get('c8yViews');
const views = c8yViews.getByPath(node.path);
return $q
.all(map(views, view => c8yUiUtil
.configureVisibility(pick(view, ['showIf', 'showIfPermissions']), 'show', false)
.then(property('show'))))
.then(some);
}
return {
rootNodes() {
return root.children;
},
findNode,
addNavigation,
removeNavigation,
rootNodes$
};
}
return {
$get,
addNavigation,
removeNavigation
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdG9yLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdXBncmFkZS9uZzEvbmF2aWdhdG9yLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBYyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFdkUsdUNBQXVDO0FBQ3ZDLE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO0lBQzNDLE1BQU0sZ0JBQWdCLEdBQTZCLElBQUksT0FBTyxFQUFFLENBQUM7SUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDNUIsTUFBTSxVQUFVLEdBQWdDLGdCQUFnQixDQUFDLElBQUksQ0FDbkUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDdEMsQ0FBQztJQUVGLFNBQVMsYUFBYSxDQUFDLEtBQUs7UUFDMUIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hELFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEIsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7Z0JBQ3hCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFJO1FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzVDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLFFBQVEsQ0FBQyxJQUFJO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsU0FBUyxhQUFhLENBQUMsSUFBSTtRQUN6QixPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQztJQUNsRixDQUFDO0lBRUQsU0FBUyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVM7UUFDekIsVUFBVSxDQUFDO1FBRVgsc0NBQXNDO1FBQ3RDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUUxRCxTQUFTLGFBQWEsQ0FBQyxJQUFJO1lBQ3pCLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0MsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7WUFDOUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxHQUFHLElBQUksQ0FBQztZQUV2RSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUNELElBQUksMEJBQTBCLEVBQUUsQ0FBQztnQkFDL0Isa0JBQWtCLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQztZQUVELFNBQVM7aUJBQ04sbUJBQW1CLENBQ2xCO2dCQUNFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDcEQsaUJBQWlCO2FBQ2xCLEVBQ0QsU0FBUyxDQUNWO2lCQUNBLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtnQkFDcEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDbEIsTUFBTSxFQUFFLEtBQUs7d0JBQ2IsTUFBTSxFQUFFLElBQUk7d0JBQ1osZ0JBQWdCLEVBQUUsSUFBSTt3QkFDdEIsMEJBQTBCLEVBQUUsSUFBSTtxQkFDakMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDbEIsTUFBTSxFQUFFLElBQUk7cUJBQ2IsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxTQUFTLDBCQUEwQixDQUFDLElBQUk7WUFDdEMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM3QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLE9BQU8sRUFBRTtpQkFDTixHQUFHLENBQ0YsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUNoQixTQUFTO2lCQUNOLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7aUJBQy9FLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDMUIsQ0FDRjtpQkFDQSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEIsQ0FBQztRQUVELE9BQU87WUFDTCxTQUFTO2dCQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN2QixDQUFDO1lBQ0QsUUFBUTtZQUNSLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsVUFBVTtTQUNYLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUk7UUFDSixhQUFhO1FBQ2IsZ0JBQWdCO0tBQ2pCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmF2aWdhdG9yTm9kZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZGVmZXIsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHBpY2ssIG1hcCwgcHJvcGVydHksIHNvbWUsIGV2ZXJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE5hdmlnYXRvck5vZGVSb290TGVnYWN5IH0gZnJvbSAnLi9uYXZpZ2F0b3Itbm9kZS1yb290LWxlZ2FjeSc7XG5cbi8vIEp1c3QgdG8gaG9vayBpbnRvIHRoZSBicmlkZ2Ugc2VydmljZVxuZXhwb3J0IGZ1bmN0aW9uIGM4eU5hdmlnYXRvclByb3ZpZGVyKCkge1xuICBjb25zdCByb290ID0gbmV3IE5hdmlnYXRvck5vZGVSb290TGVnYWN5KCk7XG4gIGNvbnN0IHJvb3ROb2Rlc1N1YmplY3Q6IFN1YmplY3Q8TmF2aWdhdG9yTm9kZVtdPiA9IG5ldyBTdWJqZWN0KCk7XG4gIGNvbnN0IGNvbmRpdGlvbmFsTm9kZXMgPSBbXTtcbiAgY29uc3Qgcm9vdE5vZGVzJDogT2JzZXJ2YWJsZTxOYXZpZ2F0b3JOb2RlW10+ID0gcm9vdE5vZGVzU3ViamVjdC5waXBlKFxuICAgIG1lcmdlKGRlZmVyKCgpID0+IG9mKHJvb3QuY2hpbGRyZW4pKSlcbiAgKTtcblxuICBmdW5jdGlvbiBhZGROYXZpZ2F0aW9uKG5vZGVzKSB7XG4gICAgY29uc3Qgbm9kZUxpc3QgPSBBcnJheS5pc0FycmF5KG5vZGVzKSA/IG5vZGVzIDogW25vZGVzXTtcbiAgICBub2RlTGlzdC5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgaWYgKGlzQ29uZGl0aW9uYWwobm9kZSkpIHtcbiAgICAgICAgbm9kZS5oaWRkZW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbmRpdGlvbmFsTm9kZXMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICAgIG5vZGUubmF2Tm9kZSA9IHJvb3QuYWRkUm9vdChub2RlKTtcbiAgICB9KTtcbiAgICByb290Tm9kZXNTdWJqZWN0Lm5leHQocm9vdC5jaGlsZHJlbik7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVOYXZpZ2F0aW9uKG5vZGUpIHtcbiAgICBjb25zdCBmb3VuZCA9IHJvb3QuZmluZChuID0+IG4gPT09IG5vZGUpO1xuICAgIGlmIChmb3VuZCkge1xuICAgICAgZm91bmQucGFyZW50cy5mb3JFYWNoKHAgPT4gcC5yZW1vdmUoZm91bmQpKTtcbiAgICAgIHJvb3ROb2Rlc1N1YmplY3QubmV4dChyb290LmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kTm9kZShub2RlKSB7XG4gICAgcmV0dXJuIHJvb3QuZmluZChub2RlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ29uZGl0aW9uYWwobm9kZSkge1xuICAgIHJldHVybiBub2RlLnNob3dJZiB8fCBub2RlLnNob3dJZlBlcm1pc3Npb25zIHx8IG5vZGUuc2hvd0lmQ29udGFpbnNWaXNpYmxlVmlld3M7XG4gIH1cblxuICBmdW5jdGlvbiAkZ2V0KCRxLCAkaW5qZWN0b3IpIHtcbiAgICAnbmdJbmplY3QnO1xuXG4gICAgLy8gVGhpcyBhdm9pZHMgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3lcbiAgICBzZXRUaW1lb3V0KCgpID0+IGNvbmRpdGlvbmFsTm9kZXMuZm9yRWFjaChwcm9jZXNzU2hvd0lmKSk7XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzU2hvd0lmKG5vZGUpIHtcbiAgICAgIGNvbnN0IGM4eVVpVXRpbCA9ICRpbmplY3Rvci5nZXQoJ2M4eVVpVXRpbCcpO1xuICAgICAgY29uc3QgdmlzaWJpbGl0eVByb21pc2VzID0gW107XG4gICAgICBjb25zdCB7IHNob3dJZiwgc2hvd0lmUGVybWlzc2lvbnMsIHNob3dJZkNvbnRhaW5zVmlzaWJsZVZpZXdzIH0gPSBub2RlO1xuXG4gICAgICBpZiAoc2hvd0lmKSB7XG4gICAgICAgIHZpc2liaWxpdHlQcm9taXNlcy5wdXNoKCRpbmplY3Rvci5pbnZva2Uoc2hvd0lmKSk7XG4gICAgICB9XG4gICAgICBpZiAoc2hvd0lmQ29udGFpbnNWaXNpYmxlVmlld3MpIHtcbiAgICAgICAgdmlzaWJpbGl0eVByb21pc2VzLnB1c2godmlld3NDb25kaXRpb25hbFZpc2liaWxpdHkobm9kZSkpO1xuICAgICAgfVxuXG4gICAgICBjOHlVaVV0aWxcbiAgICAgICAgLmNvbmZpZ3VyZVZpc2liaWxpdHkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2hvd0lmOiAoKSA9PiAkcS5hbGwodmlzaWJpbGl0eVByb21pc2VzKS50aGVuKGV2ZXJ5KSxcbiAgICAgICAgICAgIHNob3dJZlBlcm1pc3Npb25zXG4gICAgICAgICAgfSxcbiAgICAgICAgICAndmlzaWJsZSdcbiAgICAgICAgKVxuICAgICAgICAudGhlbigoeyB2aXNpYmxlIH0pID0+IHtcbiAgICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgICAgbm9kZS5uYXZOb2RlLnVwZGF0ZSh7XG4gICAgICAgICAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICAgICAgICAgIHNob3dJZjogbnVsbCxcbiAgICAgICAgICAgICAgc2hvd0lmUGVybWlzc2lvbjogbnVsbCxcbiAgICAgICAgICAgICAgc2hvd0lmQ29udGFpbnNWaXNpYmxlVmlld3M6IG51bGxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlLm5hdk5vZGUudXBkYXRlKHtcbiAgICAgICAgICAgICAgaGlkZGVuOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZpZXdzQ29uZGl0aW9uYWxWaXNpYmlsaXR5KG5vZGUpIHtcbiAgICAgIGNvbnN0IGM4eVVpVXRpbCA9ICRpbmplY3Rvci5nZXQoJ2M4eVVpVXRpbCcpO1xuICAgICAgY29uc3QgYzh5Vmlld3MgPSAkaW5qZWN0b3IuZ2V0KCdjOHlWaWV3cycpO1xuICAgICAgY29uc3Qgdmlld3MgPSBjOHlWaWV3cy5nZXRCeVBhdGgobm9kZS5wYXRoKTtcbiAgICAgIHJldHVybiAkcVxuICAgICAgICAuYWxsKFxuICAgICAgICAgIG1hcCh2aWV3cywgdmlldyA9PlxuICAgICAgICAgICAgYzh5VWlVdGlsXG4gICAgICAgICAgICAgIC5jb25maWd1cmVWaXNpYmlsaXR5KHBpY2sodmlldywgWydzaG93SWYnLCAnc2hvd0lmUGVybWlzc2lvbnMnXSksICdzaG93JywgZmFsc2UpXG4gICAgICAgICAgICAgIC50aGVuKHByb3BlcnR5KCdzaG93JykpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIC50aGVuKHNvbWUpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByb290Tm9kZXMoKSB7XG4gICAgICAgIHJldHVybiByb290LmNoaWxkcmVuO1xuICAgICAgfSxcbiAgICAgIGZpbmROb2RlLFxuICAgICAgYWRkTmF2aWdhdGlvbixcbiAgICAgIHJlbW92ZU5hdmlnYXRpb24sXG4gICAgICByb290Tm9kZXMkXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgJGdldCxcbiAgICBhZGROYXZpZ2F0aW9uLFxuICAgIHJlbW92ZU5hdmlnYXRpb25cbiAgfTtcbn1cbiJdfQ==