@c8y/ngx-components 1011.0.19 → 1011.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets-navigator/asset-node.service.d.ts +7 -3
- package/assets-navigator/c8y-ngx-components-assets-navigator.metadata.json +1 -1
- package/bundles/c8y-ngx-components-assets-navigator.umd.js +7 -2
- package/bundles/c8y-ngx-components-assets-navigator.umd.js.map +1 -1
- package/bundles/c8y-ngx-components-assets-navigator.umd.min.js +1 -1
- package/bundles/c8y-ngx-components-assets-navigator.umd.min.js.map +1 -1
- package/bundles/c8y-ngx-components-child-devices.umd.js +416 -0
- package/bundles/c8y-ngx-components-child-devices.umd.js.map +1 -0
- package/bundles/c8y-ngx-components-child-devices.umd.min.js +16 -0
- package/bundles/c8y-ngx-components-child-devices.umd.min.js.map +1 -0
- package/bundles/c8y-ngx-components-device-grid.umd.js +169 -36
- package/bundles/c8y-ngx-components-device-grid.umd.js.map +1 -1
- package/bundles/c8y-ngx-components-device-grid.umd.min.js +2 -2
- package/bundles/c8y-ngx-components-device-grid.umd.min.js.map +1 -1
- package/bundles/c8y-ngx-components-sub-assets.umd.js +5 -3
- package/bundles/c8y-ngx-components-sub-assets.umd.js.map +1 -1
- package/bundles/c8y-ngx-components-sub-assets.umd.min.js +1 -1
- package/bundles/c8y-ngx-components-sub-assets.umd.min.js.map +1 -1
- package/child-devices/c8y-ngx-components-child-devices.d.ts +5 -0
- package/child-devices/c8y-ngx-components-child-devices.metadata.json +1 -0
- package/child-devices/child-devices.component.d.ts +9 -0
- package/child-devices/child-devices.guard.d.ts +7 -0
- package/child-devices/child-devices.module.d.ts +2 -0
- package/child-devices/index.d.ts +2 -0
- package/child-devices/package.json +11 -0
- package/device-grid/c8y-ngx-components-device-grid.metadata.json +1 -1
- package/device-grid/device-grid.component.d.ts +18 -4
- package/device-grid/device-grid.service.d.ts +8 -3
- package/esm2015/assets-navigator/asset-node.service.js +8 -3
- package/esm2015/child-devices/c8y-ngx-components-child-devices.js +6 -0
- package/esm2015/child-devices/child-devices.component.js +30 -0
- package/esm2015/child-devices/child-devices.guard.js +30 -0
- package/esm2015/child-devices/child-devices.module.js +36 -0
- package/esm2015/child-devices/index.js +3 -0
- package/esm2015/device-grid/device-grid.component.js +62 -15
- package/esm2015/device-grid/device-grid.service.js +59 -22
- package/esm2015/sub-assets/sub-assets.service.js +7 -5
- package/fesm2015/c8y-ngx-components-assets-navigator.js +7 -2
- package/fesm2015/c8y-ngx-components-assets-navigator.js.map +1 -1
- package/fesm2015/c8y-ngx-components-child-devices.js +96 -0
- package/fesm2015/c8y-ngx-components-child-devices.js.map +1 -0
- package/fesm2015/c8y-ngx-components-device-grid.js +118 -35
- package/fesm2015/c8y-ngx-components-device-grid.js.map +1 -1
- package/fesm2015/c8y-ngx-components-sub-assets.js +6 -4
- package/fesm2015/c8y-ngx-components-sub-assets.js.map +1 -1
- package/locales/locales.pot +6 -0
- package/package.json +2 -2
- package/sub-assets/c8y-ngx-components-sub-assets.metadata.json +1 -1
- package/sub-assets/sub-assets.service.d.ts +3 -2
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
13
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
-
***************************************************************************** */var d=function(e,t){return(d=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};function l(e,t){function r(){this.constructor=e}d(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function h(e,t,r,o){return new(r||(r=Promise))((function(n,i){function s(e){try{a(o.next(e))}catch(e){i(e)}}function c(e){try{a(o.throw(e))}catch(e){i(e)}}function a(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,c)}a((o=o.apply(e,t||[])).next())}))}function y(e,t){var r,o,n,i,s={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;s;)try{if(r=1,o&&(n=2&i[0]?o.return:i[0]?o.throw||((n=o.return)&&n.call(o),0):o.next)&&!(n=n.call(o,i[1])).done)return n;switch(o=0,n&&(i=[2&i[0],n.value]),i[0]){case 0:case 1:n=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,o=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(n=s.trys,(n=n.length>0&&n[n.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!n||i[1]>n[0]&&i[1]<n[3])){s.label=i[1];break}if(6===i[0]&&s.label<n[1]){s.label=n[1],n=i;break}if(n&&s.label<n[2]){s.label=n[2],s.ops.push(i);break}n[2]&&s.ops.pop(),s.trys.pop();continue}i=t.call(e,s)}catch(e){i=[6,e],o=0}finally{r=n=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}function v(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],o=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&o>=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function f(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var o,n,i=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(o=i.next()).done;)s.push(o.value)}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return s}function g(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(f(arguments[t]));return e}var m,b,S=function(e){function r(){var r=e.call(this)||this;return r.label=t.gettext("Load more"),r.icon="plus",r.droppable=!0,r.priority=-1/0,r}return l(r,e),r}(t.NavigatorNode);e.GroupFragment=void 0,(m=e.GroupFragment||(e.GroupFragment={})).groupType="c8y_DeviceGroup",m.subGroupType="c8y_DeviceSubgroup",m.groupFragmentType="c8y_IsDeviceGroup",m.dataBrokerSourceFragment="c8y_BrokerSource",m.dynamicGroupType="c8y_DynamicGroup",m.dynamicGroupFragment="c8y_IsDynamicGroup",m.dynamicGroupColumnConfig="c8y_UIDeviceFilterConfig",m.dynamicGroupQueryString="c8y_DeviceQueryString",e.Action=void 0,(b=e.Action||(e.Action={}))[b.FETCH=0]="FETCH",b[b.NEXT=1]="NEXT",b[b.REFRESH=2]="REFRESH",b[b.LOADING_DONE=3]="LOADING_DONE";var G=function(n){function i(e,r){void 0===r&&(r={});var o=n.call(this,r)||this;return o.service=e,o.root=o.root||!1,o.mo=o.mo||{},o.path=o.root?"group":o.isDeviceOrProbablyChildDevice?"device/"+o.mo.id:"group/"+o.mo.id,o.draggable=!o.service.moduleConfig.disableDragAndDrop&&!o.root,o.droppable=!o.service.moduleConfig.disableDragAndDrop&&!o.isDeviceOrProbablyChildDevice,o.routerLinkExact=o.root,o.updateIcon(!1),o.onUpdateSubscription=o.service.onUpdate(o).subscribe((function(e){var t=e.data,r=e.method;return o.refresh(t,r)})),o.setLabel(),o.iconComponent=o.isDeviceOrProbablyChildDevice?t.DeviceStatusComponent:void 0,o}return l(i,n),Object.defineProperty(i.prototype,"hasChildren",{get:function(){return this.root||this.service.groups.isGroup(this.mo)},enumerable:!1,configurable:!0}),Object.defineProperty(i.prototype,"isDevice",{get:function(){return!!this.mo.c8y_IsDevice},enumerable:!1,configurable:!0}),Object.defineProperty(i.prototype,"isDeviceOrProbablyChildDevice",{get:function(){return this.isDevice||this.isNeitherDeviceOrGroup},enumerable:!1,configurable:!0}),Object.defineProperty(i.prototype,"isNeitherDeviceOrGroup",{get:function(){var e=this.service.groups,t=e.isGroup,r=e.isDynamicGroup;return!(t(this.mo)||r(this.mo)||this.isDevice||this.root)},enumerable:!1,configurable:!0}),i.prototype.openOnStart=function(e){if(this.root&&(this.service.moduleConfig.openOnStart||/^\/group\//.test(e)))return!0;var t=e.match(/\/(group)\/(\d+)/);if(t){var o=t[2];return[].concat(r.get(this.mo,"childAssets.references",[])).some((function(e){return e.managedObject.id===o}))}return!1},i.prototype.refresh=function(t,r){if(void 0===t&&(t={}),void 0===r&&(r="GET"),t.id===this.mo.id)this.mo=t,this.setLabel();else if("DELETE"===r)return void this.parents.forEach((function(e){return e.refresh()}));this.events&&this.events.next(e.Action.REFRESH)},i.prototype.setLabel=function(){this.label=this.root&&t.gettext("Groups")||this.mo.name||"--"},i.prototype.click=function(t){void 0===t&&(t={}),this.isDeviceOrProbablyChildDevice?this.service.preferBreadcrumb(this.parents):(this.hookEvents(),this.updateIcon(t.open),t.open&&this.events.next(e.Action.FETCH))},i.prototype.sort=function(){this.children.sort((function(e,t){return e.priority>t.priority?-1:e.priority<t.priority?1:0}))},i.prototype.addManagedObject=function(e){var t=this.mo.childAdditions;this.isChildAddition(t,e)||this.add(this.service.createChildNode(e))},i.prototype.isChildAddition=function(e,t){return e&&e.references.some((function(e){return e.managedObject.id===t.id}))},i.prototype.destroy=function(){this.onUpdateSubscription.unsubscribe()},Object.defineProperty(i.prototype,"canDrop",{get:function(){var e=this,t=this.service.draggedData;if(t){var r=!!t.find((function(t){return t===e})),o=this.children.some((function(e){return e.mo&&e.mo.id===t.mo.id})),n=this===t||r||o;return this.droppable&&!n}return this.droppable},enumerable:!1,configurable:!0}),i.prototype.dragStart=function(e){n.prototype.dragStart.call(this,e),this.service.draggedData=this,this.service.rootNode.droppable=!this.isDeviceOrProbablyChildDevice},i.prototype.dragEnd=function(e){n.prototype.dragEnd.call(this,e)},i.prototype.drop=function(e){var t=Object.create(null,{drop:{get:function(){return n.prototype.drop}}});return h(this,void 0,void 0,(function(){var r;return y(this,(function(o){switch(o.label){case 0:return t.drop.call(this,e),r=this.service.draggedData,this.canDrop?[4,this.moveNode(r)]:[3,2];case 1:return o.sent(),[3,3];case 2:this.draggedHover=!1,this.service.draggedData=void 0,o.label=3;case 3:return[2]}}))}))},i.prototype.hookEvents=function(){var e=this;this.events||(this.events=new o.Subject,this.events.subscribe((function(t){e.loading||e.handleEvent(t)})))},i.prototype.fetch=function(){return this.root?this.service.getRootNodes():this.service.getGroupItems(this.mo.id)},i.prototype.handleEvent=function(t){return h(this,void 0,void 0,(function(){var r,o;return y(this,(function(n){switch(n.label){case 0:return this.children.length||t!==e.Action.FETCH?[3,2]:(this.loading=!0,r=this.addNodes,[4,this.fetch()]);case 1:return r.apply(this,[n.sent()]),this.loading=!1,[3,5];case 2:return t!==e.Action.NEXT?[3,4]:(this.loadMoreNode.loading=!0,o=this.addNodes,[4,this.paging.next()]);case 3:return o.apply(this,[n.sent()]),this.loadMoreNode.loading=!1,[3,5];case 4:t===e.Action.REFRESH&&(this.loading=!1,this.paging=void 0,this.loadMoreNode=void 0,this.empty(),this.events.next(e.Action.FETCH)),n.label=5;case 5:return[2]}}))}))},i.prototype.addNodes=function(t){var r=this;if(t.paging){var o=this.paging=t.paging,n=o.currentPage,i=o.nextPage,s=o.pageSize;1===n&&this.empty();var c=t.data.length,a=!!i&&c===s;this.toggleLoadMore(a)}(t.data||t).map((function(e){return r.addManagedObject(e)})),this.events.next(e.Action.LOADING_DONE)},i.prototype.toggleLoadMore=function(t){var r=this;!this.loadMoreNode&&t&&(this.loadMoreNode=new S,this.add(this.loadMoreNode),this.loadMoreNode.click=function(){return r.events.next(e.Action.NEXT)}),this.loadMoreNode&&(this.loadMoreNode.hidden=!t)},i.prototype.moveNode=function(e){return h(this,void 0,void 0,(function(){var t,r;return y(this,(function(o){switch(o.label){case 0:return o.trys.push([0,6,7,8]),[4,this.showDropConfirm(e)];case 1:return t=o.sent(),[4,this.verifyNodeAccess(e)];case 2:return o.sent(),[4,this.addMovedNode(e)];case 3:return o.sent(),t?[3,5]:[4,this.removeMovedNode(e)];case 4:o.sent(),o.label=5;case 5:return this.expand(),[3,8];case 6:return(r=o.sent())&&this.service.alert.addServerFailure(r),[3,8];case 7:return this.draggedHover=!1,this.service.draggedData=void 0,[7];case 8:return[2]}}))}))},i.prototype.showDropConfirm=function(e){return h(this,void 0,void 0,(function(){var r;return y(this,(function(o){return this.confirm.title=t.gettext("Move"),this.confirm.message=t.gettext("Do you want to move the group?"),r=[{label:t.gettext("Cancel"),action:function(){return Promise.reject()}},{label:t.gettext("Move"),status:"default",action:function(){return Promise.resolve(!1)}}],e.isDeviceOrProbablyChildDevice&&(this.confirm.title=t.gettext("Move or add"),this.confirm.message=t.gettext("Do you want to move or add the device?"),r.push({label:t.gettext("Add"),status:"primary",action:function(){return Promise.resolve(!0)}})),[2,this.confirm.show(r)]}))}))},i.prototype.verifyNodeAccess=function(e){return h(this,void 0,void 0,(function(){return y(this,(function(t){return[2,this.service.inventory.update({id:e.mo.id})]}))}))},i.prototype.addMovedNode=function(t){return h(this,void 0,void 0,(function(){var r,o;return y(this,(function(n){switch(n.label){case 0:return this.root?[4,this.service.inventory.update({id:t.mo.id,type:e.GroupFragment.groupType})]:[3,2];case 1:return o=n.sent().data,r=o,[3,4];case 2:return[4,this.service.inventory.childAssetsAdd(t.mo,this.mo)];case 3:o=n.sent().data,r=o,n.label=4;case 4:return this.addManagedObject(r),[2]}}))}))},i.prototype.removeMovedNode=function(t){return h(this,void 0,void 0,(function(){var r,o,n,i,s,c;return y(this,(function(a){switch(a.label){case 0:a.trys.push([0,8,9,10]),r=v(t.parents),o=r.next(),a.label=1;case 1:return o.done||(n=o.value).mo&&n.mo.type===e.GroupFragment.dynamicGroupType?[3,7]:n.root?[4,this.service.inventory.update({id:t.mo.id,type:e.GroupFragment.subGroupType})]:[3,3];case 2:return a.sent(),[3,5];case 3:return[4,this.service.inventory.childAssetsRemove(t.mo,n.mo)];case 4:a.sent(),a.label=5;case 5:n.remove(t),a.label=6;case 6:return o=r.next(),[3,1];case 7:return[3,10];case 8:return i=a.sent(),s={error:i},[3,10];case 9:try{o&&!o.done&&(c=r.return)&&c.call(r)}finally{if(s)throw s.error}return[7];case 10:return[2]}}))}))},i.prototype.updateIcon=function(t){this.icon=this.service.groups.icon(this.root?{type:e.GroupFragment.groupType}:this.mo,t)},i}(t.NavigatorNode),x=function(e){function t(t,r){void 0===r&&(r={});var o=e.call(this,t,r)||this;return o.service=t,o.draggable=!1,o.droppable=!1,o}return l(t,e),Object.defineProperty(t.prototype,"hasChildren",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"query",{get:function(){return this.mo.c8y_DeviceQueryString},enumerable:!1,configurable:!0}),t.prototype.fetch=function(){return this.service.getDynamicGroupItems(this.query)},t}(G),N=new n.InjectionToken("AssetNodeConfig"),D=function(){function t(){this.icons={brokerSourceInactive:{icon:"c8y-group-remote-inactive"},brokerSource:{icon:"c8y-group-remote",iconOpen:"c8y-group-remote-open"},group:{icon:"c8y-group",iconOpen:"c8y-group-open"},dynamicGroup:{icon:"c8y-group-smart",iconOpen:"c8y-group-smart-open"},other:{icon:"circle",iconClass:"statusUnknown"}},this.dataBrokerSourceFragmentInactive="_"+e.GroupFragment.dataBrokerSourceFragment}return t.prototype.isGroup=function(t){return!!t[e.GroupFragment.groupFragmentType]||t.type===e.GroupFragment.groupType||t.type===e.GroupFragment.subGroupType},t.prototype.isDynamicGroup=function(t){return!!t[e.GroupFragment.dynamicGroupFragment]||t.type===e.GroupFragment.dynamicGroupType},t.prototype.isDataBroker=function(t){return!!t[e.GroupFragment.dataBrokerSourceFragment]||!!t[this.dataBrokerSourceFragmentInactive]},t.prototype.isDataBrokerActive=function(t){return!!t[e.GroupFragment.dataBrokerSourceFragment]&&!t[this.dataBrokerSourceFragmentInactive]},t.prototype.isDevice=function(e){return!!e.c8y_IsDevice},t.prototype.icon=function(e,t){void 0===t&&(t=!1);var r="other";this.isDynamicGroup(e)?r="dynamicGroup":this.isDataBrokerActive(e)?r="brokerSource":this.isDataBroker(e)?r="brokerSourceInactive":this.isGroup(e)&&(r="group");var o=this.icons[r];return t&&o.iconOpen||o.icon},t.prototype.isAnyGroup=function(e){return this.isGroup(e)||this.isDynamicGroup(e)||this.isDataBroker(e)||this.isDataBrokerActive(e)},t}();D.decorators=[{type:n.Injectable}];var O=function(){function t(e,t,r,o,n,s,c,a,u){this.inventory=e,this.groups=t,this.apiService=r,this.modal=o,this.alert=n,this.breadcrumbService=s,this.user=c,this.appState=a,this.moduleConfig=u,this.firstUrl=!0,this.PAGE_SIZE=20,this.moduleConfig=Object.assign({rootNodePriority:2e3},u||{}),this.queriesUtil=new i.QueriesUtil}return t.prototype.createRootNode=function(){return this.rootNode=this.createAssetNode({root:!0,priority:this.moduleConfig.rootNodePriority}),this.rootNode},t.prototype.createDynamicGroupNode=function(e){return new x(this,e)},t.prototype.createAssetNode=function(e){return new G(this,e)},t.prototype.createChildNode=function(t){var r={mo:t};return t.type===e.GroupFragment.dynamicGroupType?this.createDynamicGroupNode(r):this.createAssetNode(r)},t.prototype.getRootNodes=function(t){var r={pageSize:this.PAGE_SIZE,withChildren:!1,query:this.queriesUtil.buildQuery(this.rootQueryFilter())},o=t||r;return this.user.hasRole(this.appState.currentUser.value,"ROLE_INVENTORY_READ")||(delete o.query,Object.assign(o,{fragmentType:e.GroupFragment.groupFragmentType,onlyRoots:!0})),this.inventory.list(this.createFilter(o))},t.prototype.getGroupItems=function(e,t){void 0===t&&(t={});var r={withChildren:!1,pageSize:this.PAGE_SIZE,query:this.groupQueryFilter(e)};return this.inventory.childAssetsList(e,Object.assign(Object.assign({},r),t))},t.prototype.getDynamicGroupItems=function(e,t){void 0===t&&(t={});var r=t.query,o=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(o=Object.getOwnPropertySymbols(e);n<o.length;n++)t.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(e,o[n])&&(r[o[n]]=e[o[n]])}return r}(t,["query"]),n=r,i=Object.assign({q:this.buildCombinedQuery(e,n)},o);return this.inventory.list(this.createFilter(i))},t.prototype.getDeviceChildren=function(e,t){void 0===t&&(t={});var r={withChildren:!1,pageSize:this.PAGE_SIZE,query:this.groupQueryFilter(e)};return this.inventory.childDevicesList(e,Object.assign(Object.assign({},r),t))},t.prototype.groupQueryFilter=function(e){return"$filter=(bygroupid("+e+"))$orderby=name"},t.prototype.rootQueryFilter=function(){var t=this.moduleConfig,r={__filter:{type:""+e.GroupFragment.groupType},__orderby:[{name:1}]};if(t.smartGroups){var o={__filter:{__and:[{type:""+e.GroupFragment.dynamicGroupType},{__has:""+e.GroupFragment.dynamicGroupFragment},{__not:{__has:e.GroupFragment.dynamicGroupFragment+".invisible"}}]}};this.queriesUtil.addOrFilter(r,o)}return r},t.prototype.onUpdate=function(e){var t=this,r=e.mo,n=e.root;return r.id?this.apiService.hookResponse((function(e){var t=e.url,o=e.method;return["PUT","DELETE","POST"].includes(o)&&RegExp("((inventory/managedObjects)|(service/smartgroup/smartgroups))/"+r.id).test(t)})).pipe(c.filter((function(){return!t.draggedData})),c.mergeMap(this.apiService.resolveData),c.filter((function(e){return!e.data.c8y_Dashboard}))):n?this.apiService.hookResponse((function(e){var t=e.url,r=e.method;return RegExp("((inventory/managedObjects)|(service/smartgroup/smartgroups))/?$").test(t)&&"POST"===r})).pipe(c.mergeMap(this.apiService.resolveData),c.filter((function(e){return t.isNewManagedObjectRoot(e)}))):o.empty()},t.prototype.isNewManagedObjectRoot=function(t){void 0===t&&(t={});var r=t.data,o=!1;return"object"==typeof r&&!(o=!!r[e.GroupFragment.groupFragmentType])&&this.moduleConfig.smartGroups&&(o=!!r[e.GroupFragment.dynamicGroupFragment]),o},t.prototype.preferBreadcrumb=function(e){1===e.length&&this.breadcrumbService.selectPreferredByPath(e[0].path)},t.prototype.createFilter=function(e){void 0===e&&(e={});return Object.assign(Object.assign({},{currentPage:1,withTotalPages:!0,pageSize:10}),e)},t.prototype.buildCombinedQuery=function(e,t){var r;e&&t?r=this.queriesUtil.buildQuery({__useFilterQueryString:e})+" "+t:r=e||t||"";return r},t}();O.decorators=[{type:n.Injectable}],O.ctorParameters=function(){return[{type:i.InventoryService},{type:D},{type:s.ApiService},{type:t.ModalService},{type:t.AlertService},{type:t.BreadcrumbService},{type:i.UserService},{type:t.AppStateService},{type:void 0,decorators:[{type:n.Optional},{type:n.Inject,args:[N]}]}]};var F=function(){function e(e){this.service=e}return e.prototype.get=function(){return this.service.rootNode||this.service.createRootNode(),this.service.rootNode},e}();F.decorators=[{type:n.Injectable}],F.ctorParameters=function(){return[{type:O}]};var A=function(){function e(){}return e.config=function(t){return{ngModule:e,providers:[{provide:N,useValue:t}]}},e}();A.decorators=[{type:n.NgModule,args:[{declarations:[],imports:[t.ModalModule,t.DeviceStatusModule],providers:[t.ModalService,O,D,{provide:t.HOOK_NAVIGATOR_NODES,useClass:F,multi:!0}],entryComponents:[t.DeviceStatusComponent]}]}];var E=function(e){function t(t,r){void 0===r&&(r={});var o=e.call(this,t,r)||this;return o.service=t,o}return l(t,e),t}(G),C=function(t){function r(){var e=t.apply(this,g(arguments))||this;return e.PAGE_SIZE=5,e}return l(r,t),r.prototype.createGroupNode=function(e){return new E(this,e)},r.prototype.createChildNode=function(e){var t={mo:e};return this.createGroupNode(t)},r.prototype.subAssetsQueryFilter=function(){var t=this.rootQueryFilter(),r=this.queriesUtil.addOrFilter(t,{type:e.GroupFragment.subGroupType});return this.queriesUtil.buildQuery(r)},r.prototype.getGroupItems=function(e){return this.inventory.childAssetsList(e,{query:this.subAssetsQueryFilter(),withChildren:!1,pageSize:this.PAGE_SIZE,withTotalPages:!0})},r}(O);C.decorators=[{type:n.Injectable}];var I=function(){function e(e){this.groupNodeService=e,this.selected=[],this.onChange=new n.EventEmitter}return e.prototype.ngOnInit=function(){this.rootNode=this.groupNodeService.createGroupNode({root:!0})},e.prototype.select=function(e){-1===this.getIndexOfSelected(this.selected,e)&&this.selected.push(e),this.onChange.emit(this.selected)},e.prototype.deselect=function(e){var t=this.getIndexOfSelected(this.selected,e);t>-1&&this.selected.splice(t,1),this.onChange.emit(this.selected)},e.prototype.getIndexOfSelected=function(e,t){return e.findIndex((function(e){return e.id===t.id}))},e}();I.decorators=[{type:n.Component,args:[{selector:"c8y-asset-selector",template:'<c8y-asset-selector-node [node]="rootNode" [preselected]="selected"></c8y-asset-selector-node>\n'}]}],I.ctorParameters=function(){return[{type:C}]},I.propDecorators={selected:[{type:n.Input}],onChange:[{type:n.Output}]};var w=function(){function r(e,t,r){this.translateService=e,this.cd=t,this.parentNode=r,this.preselected=[],this.showPath=!1,this.level=0,this.checked=!1,this.unsubscribe$=new o.Subject}return Object.defineProperty(r.prototype,"expandTitle",{get:function(){return this.node.open?t.gettext("Collapse"):t.gettext("Expand")},enumerable:!1,configurable:!0}),r.prototype.ngOnInit=function(){return h(this,void 0,void 0,(function(){var t=this;return y(this,(function(r){return this.breadcrumb=this.node.label,this.setupBreadcrumbsAndLevel(this.node),this.node instanceof E&&this.node.hookEvents(),this.node.root&&this.click(),this.node.events&&this.node.events.pipe(c.takeUntil(this.unsubscribe$),c.filter((function(t){return t===e.Action.LOADING_DONE}))).subscribe((function(){t.cd.markForCheck()})),this.checked=this.isPreselected(),[2]}))}))},r.prototype.click=function(){this.node.open=!this.node.open,this.node.click({open:this.node.open})},r.prototype.setupBreadcrumbsAndLevel=function(e){if(e.parents&&e.parents.length){var t=e.parents[0];this.breadcrumb=this.translateService.instant(t.label)+" > "+this.breadcrumb,this.level++,this.setupBreadcrumbsAndLevel(t)}},r.prototype.selected=function(e){this.checked=!this.checked,this.updateSelection(e.mo)},r.prototype.ngOnDestroy=function(){this.unsubscribe$.next(!0),this.unsubscribe$.complete()},r.prototype.isPreselected=function(){return!(this.node.root||!this.node.mo)&&this.parentNode.getIndexOfSelected(this.preselected,this.node.mo)>-1},r.prototype.updateSelection=function(e){this.checked?this.parentNode.select(e):this.parentNode.deselect(e)},r}();w.decorators=[{type:n.Component,args:[{selector:"c8y-asset-selector-node",template:'<div\n class="d-flex collapsible"\n [ngClass]="{ \'expanded separator-top\': node.open }"\n title="{{ breadcrumb | translate }}"\n *ngIf="!node.root && !node.hidden"\n>\n <div\n class="p-t-8 p-b-8 m-r-8"\n [ngStyle]="{ \'padding-left\': level < 6 ? (level - 1) * 8 + \'px\' : \'24px\' }"\n [style.visibility]="node.routerLinkExact ? \'hidden\' : \'visible\'"\n >\n <label class="c8y-checkbox">\n <input type="checkbox" (change)="selected(node)" [checked]="checked" />\n <span></span>\n </label>\n </div>\n <div\n class="flex-grow flex-item-middle p-t-8 p-b-8 text-truncate p-r-8"\n [style.cursor]="node.routerLinkExact ? \'pointer\' : \'normal\'"\n (click)="node.routerLinkExact ? node.click() : \'\'"\n >\n <i\n [c8yIcon]="node.icon"\n *ngIf="node.icon === \'c8y-group-smart\'"\n [title]="\'Smart group\' | translate"\n class="c8y-icon c8y-icon-duocolor m-r-4 text-16"\n ></i>\n <i\n [c8yIcon]="node.icon"\n *ngIf="node.icon !== \'c8y-group-smart\'"\n [title]="\'Group\' | translate"\n class="c8y-icon c8y-icon-duocolor m-r-4 text-16"\n ></i>\n <span title="{{ breadcrumb }}">\n {{ node.label | translate }}\n \x3c!-- use just for search results to display the path --\x3e\n <p *ngIf="showPath" class="text-truncate">\n <small class="text-muted" title="{{ breadcrumb }}">\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n \x3c!-- up to here --\x3e\n </span>\n </div>\n <div>\n <button\n [title]="expandTitle"\n class="collapse-btn btn"\n (click)="click()"\n [attr.aria-expanded]="!node.open"\n >\n <i c8yIcon="angle-down" [ngClass]="{ \'text-primary\': node.open }"></i>\n </button>\n </div>\n</div>\n<div class="collapse" [ngClass]="{ \'separator-bottom\': node.open }" [collapse]="!node.open">\n <c8y-asset-selector-node\n *ngFor="let childNode of node.children"\n [node]="childNode"\n [preselected]="preselected || []"\n ></c8y-asset-selector-node>\n</div>\n'}]}],w.ctorParameters=function(){return[{type:p.TranslateService},{type:n.ChangeDetectorRef},{type:I}]},w.propDecorators={node:[{type:n.Input}],preselected:[{type:n.Input}],showPath:[{type:n.Input}]};var _=function(){};_.decorators=[{type:n.NgModule,args:[{imports:[t.CommonModule,a.CollapseModule,u.BsDropdownModule],exports:[w,I],providers:[C],declarations:[w,I]}]}],e.ASSET_NAVIGATOR_CONFIG=N,e.AssetNode=G,e.AssetNodeFactory=F,e.AssetNodeService=O,e.AssetSelectorComponent=I,e.AssetSelectorModule=_,e.AssetSelectorNodeComponent=w,e.AssetsNavigatorModule=A,e.DeviceGroupService=D,e.DynamicGroupNode=x,e.GroupNode=E,e.GroupNodeService=C,e.LoadMoreNode=S,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
15
|
+
***************************************************************************** */var d=function(e,t){return(d=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};function l(e,t){function r(){this.constructor=e}d(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function h(e,t,r,o){return new(r||(r=Promise))((function(n,i){function s(e){try{a(o.next(e))}catch(e){i(e)}}function c(e){try{a(o.throw(e))}catch(e){i(e)}}function a(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,c)}a((o=o.apply(e,t||[])).next())}))}function y(e,t){var r,o,n,i,s={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;s;)try{if(r=1,o&&(n=2&i[0]?o.return:i[0]?o.throw||((n=o.return)&&n.call(o),0):o.next)&&!(n=n.call(o,i[1])).done)return n;switch(o=0,n&&(i=[2&i[0],n.value]),i[0]){case 0:case 1:n=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,o=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(n=s.trys,(n=n.length>0&&n[n.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!n||i[1]>n[0]&&i[1]<n[3])){s.label=i[1];break}if(6===i[0]&&s.label<n[1]){s.label=n[1],n=i;break}if(n&&s.label<n[2]){s.label=n[2],s.ops.push(i);break}n[2]&&s.ops.pop(),s.trys.pop();continue}i=t.call(e,s)}catch(e){i=[6,e],o=0}finally{r=n=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}function v(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],o=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&o>=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function f(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var o,n,i=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(o=i.next()).done;)s.push(o.value)}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return s}function g(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(f(arguments[t]));return e}var m,b,S=function(e){function r(){var r=e.call(this)||this;return r.label=t.gettext("Load more"),r.icon="plus",r.droppable=!0,r.priority=-1/0,r}return l(r,e),r}(t.NavigatorNode);e.GroupFragment=void 0,(m=e.GroupFragment||(e.GroupFragment={})).groupType="c8y_DeviceGroup",m.subGroupType="c8y_DeviceSubgroup",m.groupFragmentType="c8y_IsDeviceGroup",m.dataBrokerSourceFragment="c8y_BrokerSource",m.dynamicGroupType="c8y_DynamicGroup",m.dynamicGroupFragment="c8y_IsDynamicGroup",m.dynamicGroupColumnConfig="c8y_UIDeviceFilterConfig",m.dynamicGroupQueryString="c8y_DeviceQueryString",e.Action=void 0,(b=e.Action||(e.Action={}))[b.FETCH=0]="FETCH",b[b.NEXT=1]="NEXT",b[b.REFRESH=2]="REFRESH",b[b.LOADING_DONE=3]="LOADING_DONE";var G=function(n){function i(e,r){void 0===r&&(r={});var o=n.call(this,r)||this;return o.service=e,o.root=o.root||!1,o.mo=o.mo||{},o.path=o.root?"group":o.isDeviceOrProbablyChildDevice?"device/"+o.mo.id:"group/"+o.mo.id,o.draggable=!o.service.moduleConfig.disableDragAndDrop&&!o.root,o.droppable=!o.service.moduleConfig.disableDragAndDrop&&!o.isDeviceOrProbablyChildDevice,o.routerLinkExact=o.root,o.updateIcon(!1),o.onUpdateSubscription=o.service.onUpdate(o).subscribe((function(e){var t=e.data,r=e.method;return o.refresh(t,r)})),o.setLabel(),o.iconComponent=o.isDeviceOrProbablyChildDevice?t.DeviceStatusComponent:void 0,o}return l(i,n),Object.defineProperty(i.prototype,"hasChildren",{get:function(){return this.root||this.service.groups.isGroup(this.mo)},enumerable:!1,configurable:!0}),Object.defineProperty(i.prototype,"isDevice",{get:function(){return!!this.mo.c8y_IsDevice},enumerable:!1,configurable:!0}),Object.defineProperty(i.prototype,"isDeviceOrProbablyChildDevice",{get:function(){return this.isDevice||this.isNeitherDeviceOrGroup},enumerable:!1,configurable:!0}),Object.defineProperty(i.prototype,"isNeitherDeviceOrGroup",{get:function(){var e=this.service.groups,t=e.isGroup,r=e.isDynamicGroup;return!(t(this.mo)||r(this.mo)||this.isDevice||this.root)},enumerable:!1,configurable:!0}),i.prototype.openOnStart=function(e){if(this.root&&(this.service.moduleConfig.openOnStart||/^\/group\//.test(e)))return!0;var t=e.match(/\/(group)\/(\d+)/);if(t){var o=t[2];return[].concat(r.get(this.mo,"childAssets.references",[])).some((function(e){return e.managedObject.id===o}))}return!1},i.prototype.refresh=function(t,r){if(void 0===t&&(t={}),void 0===r&&(r="GET"),t.id===this.mo.id)this.mo=t,this.setLabel();else if("DELETE"===r)return void this.parents.forEach((function(e){return e.refresh()}));this.events&&this.events.next(e.Action.REFRESH)},i.prototype.setLabel=function(){this.label=this.root&&t.gettext("Groups")||this.mo.name||"--"},i.prototype.click=function(t){void 0===t&&(t={}),this.isDeviceOrProbablyChildDevice?this.service.preferBreadcrumb(this.parents):(this.hookEvents(),this.updateIcon(t.open),t.open&&this.events.next(e.Action.FETCH))},i.prototype.sort=function(){this.children.sort((function(e,t){return e.priority>t.priority?-1:e.priority<t.priority?1:0}))},i.prototype.addManagedObject=function(e){var t=this.mo.childAdditions;this.isChildAddition(t,e)||this.add(this.service.createChildNode(e))},i.prototype.isChildAddition=function(e,t){return e&&e.references.some((function(e){return e.managedObject.id===t.id}))},i.prototype.destroy=function(){this.onUpdateSubscription.unsubscribe()},Object.defineProperty(i.prototype,"canDrop",{get:function(){var e=this,t=this.service.draggedData;if(t){var r=!!t.find((function(t){return t===e})),o=this.children.some((function(e){return e.mo&&e.mo.id===t.mo.id})),n=this===t||r||o;return this.droppable&&!n}return this.droppable},enumerable:!1,configurable:!0}),i.prototype.dragStart=function(e){n.prototype.dragStart.call(this,e),this.service.draggedData=this,this.service.rootNode.droppable=!this.isDeviceOrProbablyChildDevice},i.prototype.dragEnd=function(e){n.prototype.dragEnd.call(this,e)},i.prototype.drop=function(e){var t=Object.create(null,{drop:{get:function(){return n.prototype.drop}}});return h(this,void 0,void 0,(function(){var r;return y(this,(function(o){switch(o.label){case 0:return t.drop.call(this,e),r=this.service.draggedData,this.canDrop?[4,this.moveNode(r)]:[3,2];case 1:return o.sent(),[3,3];case 2:this.draggedHover=!1,this.service.draggedData=void 0,o.label=3;case 3:return[2]}}))}))},i.prototype.hookEvents=function(){var e=this;this.events||(this.events=new o.Subject,this.events.subscribe((function(t){e.loading||e.handleEvent(t)})))},i.prototype.fetch=function(){return this.root?this.service.getRootNodes():this.service.getGroupItems(this.mo.id)},i.prototype.handleEvent=function(t){return h(this,void 0,void 0,(function(){var r,o;return y(this,(function(n){switch(n.label){case 0:return this.children.length||t!==e.Action.FETCH?[3,2]:(this.loading=!0,r=this.addNodes,[4,this.fetch()]);case 1:return r.apply(this,[n.sent()]),this.loading=!1,[3,5];case 2:return t!==e.Action.NEXT?[3,4]:(this.loadMoreNode.loading=!0,o=this.addNodes,[4,this.paging.next()]);case 3:return o.apply(this,[n.sent()]),this.loadMoreNode.loading=!1,[3,5];case 4:t===e.Action.REFRESH&&(this.loading=!1,this.paging=void 0,this.loadMoreNode=void 0,this.empty(),this.events.next(e.Action.FETCH)),n.label=5;case 5:return[2]}}))}))},i.prototype.addNodes=function(t){var r=this;if(t.paging){var o=this.paging=t.paging,n=o.currentPage,i=o.nextPage,s=o.pageSize;1===n&&this.empty();var c=t.data.length,a=!!i&&c===s;this.toggleLoadMore(a)}(t.data||t).map((function(e){return r.addManagedObject(e)})),this.events.next(e.Action.LOADING_DONE)},i.prototype.toggleLoadMore=function(t){var r=this;!this.loadMoreNode&&t&&(this.loadMoreNode=new S,this.add(this.loadMoreNode),this.loadMoreNode.click=function(){return r.events.next(e.Action.NEXT)}),this.loadMoreNode&&(this.loadMoreNode.hidden=!t)},i.prototype.moveNode=function(e){return h(this,void 0,void 0,(function(){var t,r;return y(this,(function(o){switch(o.label){case 0:return o.trys.push([0,6,7,8]),[4,this.showDropConfirm(e)];case 1:return t=o.sent(),[4,this.verifyNodeAccess(e)];case 2:return o.sent(),[4,this.addMovedNode(e)];case 3:return o.sent(),t?[3,5]:[4,this.removeMovedNode(e)];case 4:o.sent(),o.label=5;case 5:return this.expand(),[3,8];case 6:return(r=o.sent())&&this.service.alert.addServerFailure(r),[3,8];case 7:return this.draggedHover=!1,this.service.draggedData=void 0,[7];case 8:return[2]}}))}))},i.prototype.showDropConfirm=function(e){return h(this,void 0,void 0,(function(){var r;return y(this,(function(o){return this.confirm.title=t.gettext("Move"),this.confirm.message=t.gettext("Do you want to move the group?"),r=[{label:t.gettext("Cancel"),action:function(){return Promise.reject()}},{label:t.gettext("Move"),status:"default",action:function(){return Promise.resolve(!1)}}],e.isDeviceOrProbablyChildDevice&&(this.confirm.title=t.gettext("Move or add"),this.confirm.message=t.gettext("Do you want to move or add the device?"),r.push({label:t.gettext("Add"),status:"primary",action:function(){return Promise.resolve(!0)}})),[2,this.confirm.show(r)]}))}))},i.prototype.verifyNodeAccess=function(e){return h(this,void 0,void 0,(function(){return y(this,(function(t){return[2,this.service.inventory.update({id:e.mo.id})]}))}))},i.prototype.addMovedNode=function(t){return h(this,void 0,void 0,(function(){var r,o;return y(this,(function(n){switch(n.label){case 0:return this.root?[4,this.service.inventory.update({id:t.mo.id,type:e.GroupFragment.groupType})]:[3,2];case 1:return o=n.sent().data,r=o,[3,4];case 2:return[4,this.service.inventory.childAssetsAdd(t.mo,this.mo)];case 3:o=n.sent().data,r=o,n.label=4;case 4:return this.addManagedObject(r),[2]}}))}))},i.prototype.removeMovedNode=function(t){return h(this,void 0,void 0,(function(){var r,o,n,i,s,c;return y(this,(function(a){switch(a.label){case 0:a.trys.push([0,8,9,10]),r=v(t.parents),o=r.next(),a.label=1;case 1:return o.done||(n=o.value).mo&&n.mo.type===e.GroupFragment.dynamicGroupType?[3,7]:n.root?[4,this.service.inventory.update({id:t.mo.id,type:e.GroupFragment.subGroupType})]:[3,3];case 2:return a.sent(),[3,5];case 3:return[4,this.service.inventory.childAssetsRemove(t.mo,n.mo)];case 4:a.sent(),a.label=5;case 5:n.remove(t),a.label=6;case 6:return o=r.next(),[3,1];case 7:return[3,10];case 8:return i=a.sent(),s={error:i},[3,10];case 9:try{o&&!o.done&&(c=r.return)&&c.call(r)}finally{if(s)throw s.error}return[7];case 10:return[2]}}))}))},i.prototype.updateIcon=function(t){this.icon=this.service.groups.icon(this.root?{type:e.GroupFragment.groupType}:this.mo,t)},i}(t.NavigatorNode),x=function(e){function t(t,r){void 0===r&&(r={});var o=e.call(this,t,r)||this;return o.service=t,o.draggable=!1,o.droppable=!1,o}return l(t,e),Object.defineProperty(t.prototype,"hasChildren",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"query",{get:function(){return this.mo.c8y_DeviceQueryString},enumerable:!1,configurable:!0}),t.prototype.fetch=function(){return this.service.getDynamicGroupItems(this.query)},t}(G),N=new n.InjectionToken("AssetNodeConfig"),D=function(){function t(){this.icons={brokerSourceInactive:{icon:"c8y-group-remote-inactive"},brokerSource:{icon:"c8y-group-remote",iconOpen:"c8y-group-remote-open"},group:{icon:"c8y-group",iconOpen:"c8y-group-open"},dynamicGroup:{icon:"c8y-group-smart",iconOpen:"c8y-group-smart-open"},other:{icon:"circle",iconClass:"statusUnknown"}},this.dataBrokerSourceFragmentInactive="_"+e.GroupFragment.dataBrokerSourceFragment}return t.prototype.isGroup=function(t){return!!t[e.GroupFragment.groupFragmentType]||t.type===e.GroupFragment.groupType||t.type===e.GroupFragment.subGroupType},t.prototype.isDynamicGroup=function(t){return!!t[e.GroupFragment.dynamicGroupFragment]||t.type===e.GroupFragment.dynamicGroupType},t.prototype.isDataBroker=function(t){return!!t[e.GroupFragment.dataBrokerSourceFragment]||!!t[this.dataBrokerSourceFragmentInactive]},t.prototype.isDataBrokerActive=function(t){return!!t[e.GroupFragment.dataBrokerSourceFragment]&&!t[this.dataBrokerSourceFragmentInactive]},t.prototype.isDevice=function(e){return!!e.c8y_IsDevice},t.prototype.icon=function(e,t){void 0===t&&(t=!1);var r="other";this.isDynamicGroup(e)?r="dynamicGroup":this.isDataBrokerActive(e)?r="brokerSource":this.isDataBroker(e)?r="brokerSourceInactive":this.isGroup(e)&&(r="group");var o=this.icons[r];return t&&o.iconOpen||o.icon},t.prototype.isAnyGroup=function(e){return this.isGroup(e)||this.isDynamicGroup(e)||this.isDataBroker(e)||this.isDataBrokerActive(e)},t}();D.decorators=[{type:n.Injectable}];var O=function(){function t(e,t,r,o,n,s,c,a,u){this.inventory=e,this.groups=t,this.apiService=r,this.modal=o,this.alert=n,this.breadcrumbService=s,this.user=c,this.appState=a,this.moduleConfig=u,this.firstUrl=!0,this.PAGE_SIZE=20,this.moduleConfig=Object.assign({rootNodePriority:2e3},u||{}),this.queriesUtil=new i.QueriesUtil}return t.prototype.createRootNode=function(){return this.rootNode=this.createAssetNode({root:!0,priority:this.moduleConfig.rootNodePriority}),this.rootNode},t.prototype.createDynamicGroupNode=function(e){return new x(this,e)},t.prototype.createAssetNode=function(e){return new G(this,e)},t.prototype.createChildNode=function(t){var r={mo:t};return t.type===e.GroupFragment.dynamicGroupType?this.createDynamicGroupNode(r):this.createAssetNode(r)},t.prototype.getRootNodes=function(t){var r={pageSize:this.PAGE_SIZE,withChildren:!1,query:this.queriesUtil.buildQuery(this.navRootQueryFilter())},o=t||r;return this.user.hasRole(this.appState.currentUser.value,"ROLE_INVENTORY_READ")||(delete o.query,Object.assign(o,{fragmentType:e.GroupFragment.groupFragmentType,onlyRoots:!0})),this.inventory.list(this.createFilter(o))},t.prototype.getGroupItems=function(e,t){void 0===t&&(t={});var r={withChildren:!1,pageSize:this.PAGE_SIZE,query:this.groupQueryFilter(e)};return this.inventory.childAssetsList(e,Object.assign(Object.assign({},r),t))},t.prototype.getDynamicGroupItems=function(e,t){void 0===t&&(t={});var r=t.query,o=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(o=Object.getOwnPropertySymbols(e);n<o.length;n++)t.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(e,o[n])&&(r[o[n]]=e[o[n]])}return r}(t,["query"]),n=r,i=Object.assign({q:this.buildCombinedQuery(e,n)},o);return this.inventory.list(this.createFilter(i))},t.prototype.getDeviceChildren=function(e,t){void 0===t&&(t={});var r={withChildren:!1,pageSize:this.PAGE_SIZE,query:this.groupQueryFilter(e)};return this.inventory.childDevicesList(e,Object.assign(Object.assign({},r),t))},t.prototype.groupQueryFilter=function(e){return"$filter=(bygroupid("+e+"))$orderby=name"},t.prototype.navRootQueryFilter=function(){var e=this.rootQueryFilter();return e.__orderby=[{name:1}],e},t.prototype.rootQueryFilter=function(){var t=this.moduleConfig,r={__filter:{type:""+e.GroupFragment.groupType},__orderby:[]};if(t.smartGroups){var o={__filter:{__and:[{type:""+e.GroupFragment.dynamicGroupType},{__has:""+e.GroupFragment.dynamicGroupFragment},{__not:{__has:e.GroupFragment.dynamicGroupFragment+".invisible"}}]}};this.queriesUtil.addOrFilter(r,o)}return r},t.prototype.onUpdate=function(e){var t=this,r=e.mo,n=e.root;return r.id?this.apiService.hookResponse((function(e){var t=e.url,o=e.method;return["PUT","DELETE","POST"].includes(o)&&RegExp("((inventory/managedObjects)|(service/smartgroup/smartgroups))/"+r.id).test(t)})).pipe(c.filter((function(){return!t.draggedData})),c.mergeMap(this.apiService.resolveData),c.filter((function(e){return!e.data.c8y_Dashboard}))):n?this.apiService.hookResponse((function(e){var t=e.url,r=e.method;return RegExp("((inventory/managedObjects)|(service/smartgroup/smartgroups))/?$").test(t)&&"POST"===r})).pipe(c.mergeMap(this.apiService.resolveData),c.filter((function(e){return t.isNewManagedObjectRoot(e)}))):o.empty()},t.prototype.isNewManagedObjectRoot=function(t){void 0===t&&(t={});var r=t.data,o=!1;return"object"==typeof r&&!(o=!!r[e.GroupFragment.groupFragmentType])&&this.moduleConfig.smartGroups&&(o=!!r[e.GroupFragment.dynamicGroupFragment]),o},t.prototype.preferBreadcrumb=function(e){1===e.length&&this.breadcrumbService.selectPreferredByPath(e[0].path)},t.prototype.createFilter=function(e){void 0===e&&(e={});return Object.assign(Object.assign({},{currentPage:1,withTotalPages:!0,pageSize:10}),e)},t.prototype.buildCombinedQuery=function(e,t){var r;e&&t?r=this.queriesUtil.buildQuery({__useFilterQueryString:e})+" "+t:r=e||t||"";return r},t}();O.decorators=[{type:n.Injectable}],O.ctorParameters=function(){return[{type:i.InventoryService},{type:D},{type:s.ApiService},{type:t.ModalService},{type:t.AlertService},{type:t.BreadcrumbService},{type:i.UserService},{type:t.AppStateService},{type:void 0,decorators:[{type:n.Optional},{type:n.Inject,args:[N]}]}]};var F=function(){function e(e){this.service=e}return e.prototype.get=function(){return this.service.rootNode||this.service.createRootNode(),this.service.rootNode},e}();F.decorators=[{type:n.Injectable}],F.ctorParameters=function(){return[{type:O}]};var A=function(){function e(){}return e.config=function(t){return{ngModule:e,providers:[{provide:N,useValue:t}]}},e}();A.decorators=[{type:n.NgModule,args:[{declarations:[],imports:[t.ModalModule,t.DeviceStatusModule],providers:[t.ModalService,O,D,{provide:t.HOOK_NAVIGATOR_NODES,useClass:F,multi:!0}],entryComponents:[t.DeviceStatusComponent]}]}];var E=function(e){function t(t,r){void 0===r&&(r={});var o=e.call(this,t,r)||this;return o.service=t,o}return l(t,e),t}(G),C=function(t){function r(){var e=t.apply(this,g(arguments))||this;return e.PAGE_SIZE=5,e}return l(r,t),r.prototype.createGroupNode=function(e){return new E(this,e)},r.prototype.createChildNode=function(e){var t={mo:e};return this.createGroupNode(t)},r.prototype.subAssetsQueryFilter=function(){var t=this.rootQueryFilter(),r=this.queriesUtil.addOrFilter(t,{type:e.GroupFragment.subGroupType});return this.queriesUtil.buildQuery(r)},r.prototype.getGroupItems=function(e){return this.inventory.childAssetsList(e,{query:this.subAssetsQueryFilter(),withChildren:!1,pageSize:this.PAGE_SIZE,withTotalPages:!0})},r}(O);C.decorators=[{type:n.Injectable}];var I=function(){function e(e){this.groupNodeService=e,this.selected=[],this.onChange=new n.EventEmitter}return e.prototype.ngOnInit=function(){this.rootNode=this.groupNodeService.createGroupNode({root:!0})},e.prototype.select=function(e){-1===this.getIndexOfSelected(this.selected,e)&&this.selected.push(e),this.onChange.emit(this.selected)},e.prototype.deselect=function(e){var t=this.getIndexOfSelected(this.selected,e);t>-1&&this.selected.splice(t,1),this.onChange.emit(this.selected)},e.prototype.getIndexOfSelected=function(e,t){return e.findIndex((function(e){return e.id===t.id}))},e}();I.decorators=[{type:n.Component,args:[{selector:"c8y-asset-selector",template:'<c8y-asset-selector-node [node]="rootNode" [preselected]="selected"></c8y-asset-selector-node>\n'}]}],I.ctorParameters=function(){return[{type:C}]},I.propDecorators={selected:[{type:n.Input}],onChange:[{type:n.Output}]};var _=function(){function r(e,t,r){this.translateService=e,this.cd=t,this.parentNode=r,this.preselected=[],this.showPath=!1,this.level=0,this.checked=!1,this.unsubscribe$=new o.Subject}return Object.defineProperty(r.prototype,"expandTitle",{get:function(){return this.node.open?t.gettext("Collapse"):t.gettext("Expand")},enumerable:!1,configurable:!0}),r.prototype.ngOnInit=function(){return h(this,void 0,void 0,(function(){var t=this;return y(this,(function(r){return this.breadcrumb=this.node.label,this.setupBreadcrumbsAndLevel(this.node),this.node instanceof E&&this.node.hookEvents(),this.node.root&&this.click(),this.node.events&&this.node.events.pipe(c.takeUntil(this.unsubscribe$),c.filter((function(t){return t===e.Action.LOADING_DONE}))).subscribe((function(){t.cd.markForCheck()})),this.checked=this.isPreselected(),[2]}))}))},r.prototype.click=function(){this.node.open=!this.node.open,this.node.click({open:this.node.open})},r.prototype.setupBreadcrumbsAndLevel=function(e){if(e.parents&&e.parents.length){var t=e.parents[0];this.breadcrumb=this.translateService.instant(t.label)+" > "+this.breadcrumb,this.level++,this.setupBreadcrumbsAndLevel(t)}},r.prototype.selected=function(e){this.checked=!this.checked,this.updateSelection(e.mo)},r.prototype.ngOnDestroy=function(){this.unsubscribe$.next(!0),this.unsubscribe$.complete()},r.prototype.isPreselected=function(){return!(this.node.root||!this.node.mo)&&this.parentNode.getIndexOfSelected(this.preselected,this.node.mo)>-1},r.prototype.updateSelection=function(e){this.checked?this.parentNode.select(e):this.parentNode.deselect(e)},r}();_.decorators=[{type:n.Component,args:[{selector:"c8y-asset-selector-node",template:'<div\n class="d-flex collapsible"\n [ngClass]="{ \'expanded separator-top\': node.open }"\n title="{{ breadcrumb | translate }}"\n *ngIf="!node.root && !node.hidden"\n>\n <div\n class="p-t-8 p-b-8 m-r-8"\n [ngStyle]="{ \'padding-left\': level < 6 ? (level - 1) * 8 + \'px\' : \'24px\' }"\n [style.visibility]="node.routerLinkExact ? \'hidden\' : \'visible\'"\n >\n <label class="c8y-checkbox">\n <input type="checkbox" (change)="selected(node)" [checked]="checked" />\n <span></span>\n </label>\n </div>\n <div\n class="flex-grow flex-item-middle p-t-8 p-b-8 text-truncate p-r-8"\n [style.cursor]="node.routerLinkExact ? \'pointer\' : \'normal\'"\n (click)="node.routerLinkExact ? node.click() : \'\'"\n >\n <i\n [c8yIcon]="node.icon"\n *ngIf="node.icon === \'c8y-group-smart\'"\n [title]="\'Smart group\' | translate"\n class="c8y-icon c8y-icon-duocolor m-r-4 text-16"\n ></i>\n <i\n [c8yIcon]="node.icon"\n *ngIf="node.icon !== \'c8y-group-smart\'"\n [title]="\'Group\' | translate"\n class="c8y-icon c8y-icon-duocolor m-r-4 text-16"\n ></i>\n <span title="{{ breadcrumb }}">\n {{ node.label | translate }}\n \x3c!-- use just for search results to display the path --\x3e\n <p *ngIf="showPath" class="text-truncate">\n <small class="text-muted" title="{{ breadcrumb }}">\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n \x3c!-- up to here --\x3e\n </span>\n </div>\n <div>\n <button\n [title]="expandTitle"\n class="collapse-btn btn"\n (click)="click()"\n [attr.aria-expanded]="!node.open"\n >\n <i c8yIcon="angle-down" [ngClass]="{ \'text-primary\': node.open }"></i>\n </button>\n </div>\n</div>\n<div class="collapse" [ngClass]="{ \'separator-bottom\': node.open }" [collapse]="!node.open">\n <c8y-asset-selector-node\n *ngFor="let childNode of node.children"\n [node]="childNode"\n [preselected]="preselected || []"\n ></c8y-asset-selector-node>\n</div>\n'}]}],_.ctorParameters=function(){return[{type:p.TranslateService},{type:n.ChangeDetectorRef},{type:I}]},_.propDecorators={node:[{type:n.Input}],preselected:[{type:n.Input}],showPath:[{type:n.Input}]};var w=function(){};w.decorators=[{type:n.NgModule,args:[{imports:[t.CommonModule,a.CollapseModule,u.BsDropdownModule],exports:[_,I],providers:[C],declarations:[_,I]}]}],e.ASSET_NAVIGATOR_CONFIG=N,e.AssetNode=G,e.AssetNodeFactory=F,e.AssetNodeService=O,e.AssetSelectorComponent=I,e.AssetSelectorModule=w,e.AssetSelectorNodeComponent=_,e.AssetsNavigatorModule=A,e.DeviceGroupService=D,e.DynamicGroupNode=x,e.GroupNode=E,e.GroupNodeService=C,e.LoadMoreNode=S,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
16
16
|
//# sourceMappingURL=c8y-ngx-components-assets-navigator.umd.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../../assets-navigator/group-fragment.model.ts","../../assets-navigator/action.enum.ts","../../assets-navigator/load-more-node.ts","../../assets-navigator/asset-node.ts","../../assets-navigator/dynamic-group-node.ts","../../assets-navigator/asset-node-config.model.ts","../../assets-navigator/group.service.ts","../../assets-navigator/asset-node.service.ts","../../assets-navigator/asset-node.factory.ts","../../assets-navigator/assets-navigator.module.ts","../../assets-navigator/asset-selector/group-node.ts","../../assets-navigator/asset-selector/group-node.service.ts","../../assets-navigator/asset-selector/asset-selector.component.ts","../../assets-navigator/asset-selector/asset-selector-node.component.ts","../../assets-navigator/asset-selector/asset-selector.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","call","pop","length","push","__values","o","s","m","i","__read","r","ar","error","__spread","arguments","concat","GroupFragment","Action","LoadMoreNode","_this","_super","gettext","icon","droppable","priority","Infinity","NavigatorNode","AssetNode","service","config","_super_1","root","mo","path","isDeviceOrProbablyChildDevice","id","draggable","moduleConfig","disableDragAndDrop","routerLinkExact","updateIcon","onUpdateSubscription","onUpdate","subscribe","_a","data","method","refresh","setLabel","iconComponent","DeviceStatusComponent","undefined","defineProperty","groups","isGroup","c8y_IsDevice","isDevice","isNeitherDeviceOrGroup","isDynamicGroup","openOnStart","url","test","matches","match","id_1","get","some","managedObject","parents","forEach","node","events","REFRESH","name","click","options","preferBreadcrumb","hookEvents","open","FETCH","sort","children","a","addManagedObject","childAdditions","isChildAddition","add","createChildNode","references","destroy","unsubscribe","nodeToMove","draggedData","shouldGetChildOfItsOwn","find","child","isAlreadyChild","preventMove","dragStart","$event","rootNode","dragEnd","drop","canDrop","moveNode","draggedHover","Subject","evt","loading","handleEvent","fetch","getRootNodes","getGroupItems","addNodes","_c","NEXT","loadMoreNode","_b","paging","empty","res","currentPage","nextPage","pageSize","itemsCount","moreItemsAvailable","toggleLoadMore","map","LOADING_DONE","show","hidden","showDropConfirm","isCopy","verifyNodeAccess","addMovedNode","removeMovedNode","expand","alert","addServerFailure","ex_1","confirm","title","message","buttons","action","status","inventory","update","type","groupType","childAssetsAdd","parent","dynamicGroupType","subGroupType","_d","childAssetsRemove","remove","DynamicGroupNode","c8y_DeviceQueryString","getDynamicGroupItems","query","ASSET_NAVIGATOR_CONFIG","InjectionToken","DeviceGroupService","icons","brokerSourceInactive","brokerSource","iconOpen","group","dynamicGroup","other","iconClass","dataBrokerSourceFragmentInactive","dataBrokerSourceFragment","groupFragmentType","dynamicGroupFragment","isDataBroker","isDataBrokerActive","isAnyGroup","Injectable","AssetNodeService","apiService","modal","breadcrumbService","user","appState","firstUrl","PAGE_SIZE","assign","rootNodePriority","queriesUtil","QueriesUtil","createRootNode","createAssetNode","createDynamicGroupNode","customFilter","defaultFilter","withChildren","buildQuery","rootQueryFilter","groupFilter","hasRole","currentUser","fragmentType","onlyRoots","list","createFilter","moId","extraFilter","queryFilter","groupQueryFilter","childAssetsList","groupQuery","filterObj","queryParams","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__rest","orderByQuery","q","buildCombinedQuery","getDeviceChildren","childDevicesList","rootFilter","__filter","__orderby","smartGroups","__and","__has","__not","addOrFilter","hookResponse","includes","RegExp","pipe","filter","mergeMap","resolveData","response","c8y_Dashboard","isNewManagedObjectRoot","isRootAsset","selectPreferredByPath","extraParams","withTotalPages","combinedQuery","__useFilterQueryString","InventoryService","ApiService","ModalService","AlertService","BreadcrumbService","UserService","AppStateService","Optional","Inject","args","AssetNodeFactory","AssetsNavigatorModule","ngModule","providers","provide","useValue","NgModule","declarations","imports","ModalModule","DeviceStatusModule","HOOK_NAVIGATOR_NODES","useClass","multi","entryComponents","GroupNode","GroupNodeService","createGroupNode","subAssetsQueryFilter","AssetSelectorComponent","groupNodeService","selected","onChange","EventEmitter","ngOnInit","select","selectedMo","getIndexOfSelected","emit","deselect","index","splice","findIndex","Component","selector","template","Input","Output","AssetSelectorNodeComponent","translateService","cd","parentNode","preselected","showPath","level","checked","unsubscribe$","breadcrumb","setupBreadcrumbsAndLevel","takeUntil","markForCheck","isPreselected","instant","updateSelection","ngOnDestroy","complete","TranslateService","ChangeDetectorRef","CommonModule","CollapseModule","BsDropdownModule","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export enum GroupFragment {\n groupType = 'c8y_DeviceGroup',\n subGroupType = 'c8y_DeviceSubgroup',\n groupFragmentType = 'c8y_IsDeviceGroup',\n dataBrokerSourceFragment = 'c8y_BrokerSource',\n dynamicGroupType = 'c8y_DynamicGroup',\n dynamicGroupFragment = 'c8y_IsDynamicGroup',\n dynamicGroupColumnConfig = 'c8y_UIDeviceFilterConfig',\n dynamicGroupQueryString = 'c8y_DeviceQueryString',\n}\n","export enum Action {\n FETCH,\n NEXT,\n REFRESH,\n LOADING_DONE\n}\n","import { NavigatorNode, gettext } from '@c8y/ngx-components';\n\nexport class LoadMoreNode extends NavigatorNode {\n label = gettext('Load more');\n icon = 'plus';\n droppable = true;\n\n constructor() {\n super();\n this.priority = -Infinity;\n }\n}\n","import { Paging } from '@c8y/client';\nimport { ClickOptions, gettext, NavigatorNode, DeviceStatusComponent } from '@c8y/ngx-components';\nimport { get } from 'lodash-es';\nimport { Subject, Subscription } from 'rxjs';\nimport { AssetNodeMo, AssetNodeService } from './asset-node.service';\nimport { LoadMoreNode } from './load-more-node';\nimport { GroupFragment } from './group-fragment.model';\nimport { Action } from './action.enum';\n\nexport class AssetNode extends NavigatorNode {\n root: boolean;\n mo: any;\n\n get hasChildren() {\n return this.root || this.service.groups.isGroup(this.mo);\n }\n\n get isDevice() {\n return !!this.mo.c8y_IsDevice;\n }\n\n get isDeviceOrProbablyChildDevice() {\n return this.isDevice || this.isNeitherDeviceOrGroup;\n }\n\n get isNeitherDeviceOrGroup() {\n const { isGroup, isDynamicGroup } = this.service.groups;\n return !isGroup(this.mo) && !isDynamicGroup(this.mo) && !this.isDevice && !this.root;\n }\n\n events: Subject<Action>;\n protected paging: Paging<AssetNodeMo>;\n protected loadMoreNode: LoadMoreNode;\n private onUpdateSubscription: Subscription;\n\n constructor(protected service: AssetNodeService, config = {}) {\n super(config);\n this.root = this.root || false;\n this.mo = this.mo || {};\n this.path = this.root\n ? 'group'\n : this.isDeviceOrProbablyChildDevice\n ? `device/${this.mo.id}`\n : `group/${this.mo.id}`;\n this.draggable = !this.service.moduleConfig.disableDragAndDrop && !this.root;\n this.droppable =\n !this.service.moduleConfig.disableDragAndDrop && !this.isDeviceOrProbablyChildDevice;\n this.routerLinkExact = this.root;\n this.updateIcon(false);\n this.onUpdateSubscription = this.service\n .onUpdate(this)\n .subscribe(({ data, method }) => this.refresh(data, method));\n this.setLabel();\n this.iconComponent = this.isDeviceOrProbablyChildDevice ? DeviceStatusComponent : undefined;\n }\n\n openOnStart(url) {\n const urlRegex = /^\\/group\\//;\n if (this.root) {\n if (this.service.moduleConfig.openOnStart || urlRegex.test(url)) {\n return true;\n }\n }\n const matches = url.match(/\\/(group)\\/(\\d+)/);\n let isMatch = false;\n if (matches) {\n const id = matches[2];\n isMatch = []\n .concat(get(this.mo, 'childAssets.references', []))\n .some(({ managedObject }) => managedObject.id === id);\n return isMatch;\n }\n return false;\n }\n\n refresh(mo: any = {}, method = 'GET') {\n if (mo.id === this.mo.id) {\n this.mo = mo;\n this.setLabel();\n } else if (method === 'DELETE') {\n this.parents.forEach((node: AssetNode) => node.refresh());\n return;\n }\n if (this.events) {\n this.events.next(Action.REFRESH);\n }\n }\n\n setLabel() {\n this.label = (this.root && gettext('Groups')) || this.mo.name || '--';\n }\n\n click(options: ClickOptions = {}) {\n if (this.isDeviceOrProbablyChildDevice) {\n this.service.preferBreadcrumb(this.parents);\n return;\n }\n this.hookEvents();\n\n this.updateIcon(options.open);\n if (options.open) {\n this.events.next(Action.FETCH);\n }\n }\n\n sort() {\n this.children.sort((a, b) => {\n if (a.priority > b.priority) {\n return -1;\n } else if (a.priority < b.priority) {\n return 1;\n } else {\n return 0;\n }\n });\n }\n\n addManagedObject(mo) {\n const { childAdditions } = this.mo;\n if (!this.isChildAddition(childAdditions, mo)) {\n this.add(this.service.createChildNode(mo));\n }\n }\n\n isChildAddition(childAdditions, mo) {\n return (\n childAdditions && childAdditions.references.some(({ managedObject: { id } }) => id === mo.id)\n );\n }\n\n destroy() {\n this.onUpdateSubscription.unsubscribe();\n }\n\n get canDrop() {\n const nodeToMove = this.service.draggedData;\n if (nodeToMove) {\n const shouldGetChildOfItsOwn = !!nodeToMove.find(child => child === this);\n const isAlreadyChild = (this.children as AssetNode[]).some(\n child => child.mo && child.mo.id === nodeToMove.mo.id\n );\n const preventMove = this === nodeToMove || shouldGetChildOfItsOwn || isAlreadyChild;\n return this.droppable && !preventMove;\n }\n return this.droppable;\n }\n\n dragStart($event) {\n super.dragStart($event);\n this.service.draggedData = this;\n this.service.rootNode.droppable = !this.isDeviceOrProbablyChildDevice;\n }\n\n dragEnd($event) {\n super.dragEnd($event);\n }\n\n async drop($event) {\n super.drop($event);\n const nodeToMove = this.service.draggedData;\n if (this.canDrop) {\n await this.moveNode(nodeToMove);\n } else {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n hookEvents() {\n if (!this.events) {\n this.events = new Subject();\n this.events.subscribe(evt => {\n if (!this.loading) {\n this.handleEvent(evt);\n }\n });\n }\n }\n\n protected fetch() {\n return this.root ? this.service.getRootNodes() : this.service.getGroupItems(this.mo.id);\n }\n\n protected async handleEvent(evt: Action) {\n if (!this.children.length && evt === Action.FETCH) {\n this.loading = true;\n this.addNodes(await this.fetch());\n this.loading = false;\n } else if (evt === Action.NEXT) {\n this.loadMoreNode.loading = true;\n this.addNodes(await this.paging.next());\n this.loadMoreNode.loading = false;\n } else if (evt === Action.REFRESH) {\n this.loading = false;\n this.paging = undefined;\n this.loadMoreNode = undefined;\n this.empty();\n this.events.next(Action.FETCH);\n }\n }\n\n protected addNodes(res) {\n if (res.paging) {\n const { currentPage, nextPage, pageSize } = (this.paging = res.paging);\n if (currentPage === 1) {\n this.empty();\n }\n const itemsCount = res.data.length;\n const moreItemsAvailable = !!nextPage && itemsCount === pageSize;\n this.toggleLoadMore(moreItemsAvailable);\n }\n (res.data || res).map(mo => this.addManagedObject(mo));\n this.events.next(Action.LOADING_DONE);\n }\n\n protected toggleLoadMore(show: boolean) {\n if (!this.loadMoreNode && show) {\n this.loadMoreNode = new LoadMoreNode();\n this.add(this.loadMoreNode);\n this.loadMoreNode.click = () => this.events.next(Action.NEXT);\n }\n\n if (this.loadMoreNode) {\n this.loadMoreNode.hidden = !show;\n }\n }\n\n private async moveNode(nodeToMove: AssetNode) {\n try {\n const isCopy = await this.showDropConfirm(nodeToMove);\n await this.verifyNodeAccess(nodeToMove);\n await this.addMovedNode(nodeToMove);\n if (!isCopy) {\n await this.removeMovedNode(nodeToMove);\n }\n this.expand();\n } catch (ex) {\n if (ex) {\n this.service.alert.addServerFailure(ex);\n }\n } finally {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n private async showDropConfirm(nodeToMove: AssetNode) {\n this.confirm.title = gettext('Move');\n this.confirm.message = gettext('Do you want to move the group?');\n const buttons: any = [\n {\n label: gettext('Cancel'),\n action: () => Promise.reject()\n },\n {\n label: gettext('Move'),\n status: 'default',\n action: () => Promise.resolve(false)\n }\n ];\n if (nodeToMove.isDeviceOrProbablyChildDevice) {\n this.confirm.title = gettext('Move or add');\n this.confirm.message = gettext('Do you want to move or add the device?');\n buttons.push({\n label: gettext('Add'),\n status: 'primary',\n action: () => Promise.resolve(true)\n });\n }\n return this.confirm.show(buttons);\n }\n\n private async verifyNodeAccess(nodeToMove: AssetNode) {\n return this.service.inventory.update({ id: nodeToMove.mo.id });\n }\n\n private async addMovedNode(nodeToMove: AssetNode) {\n let mo;\n if (this.root) {\n const { data } = await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.groupType\n });\n mo = data;\n } else {\n const { data } = await this.service.inventory.childAssetsAdd(nodeToMove.mo, this.mo);\n mo = data;\n }\n this.addManagedObject(mo);\n }\n\n private async removeMovedNode(nodeToMove: AssetNode) {\n for (const parent of nodeToMove.parents as AssetNode[]) {\n if (parent.mo && parent.mo.type === GroupFragment.dynamicGroupType) {\n break; // smart groups don't need to be changed\n }\n if (parent.root) {\n await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.subGroupType\n });\n } else {\n await this.service.inventory.childAssetsRemove(nodeToMove.mo, parent.mo);\n }\n parent.remove(nodeToMove);\n }\n }\n\n private updateIcon(open) {\n this.icon = this.service.groups.icon(\n // if it's root we are going to pass a fake mo to get the same icon as groups\n this.root ? { type: GroupFragment.groupType } : this.mo,\n open\n );\n }\n}\n","\nimport { AssetNode } from './asset-node';\nimport { AssetNodeService } from './asset-node.service';\n\nexport class DynamicGroupNode extends AssetNode {\n constructor(\n protected service: AssetNodeService,\n config = {}\n ) {\n super(service, config);\n this.draggable = false;\n this.droppable = false;\n }\n\n get hasChildren() {\n return true;\n }\n\n get query() {\n return this.mo.c8y_DeviceQueryString;\n }\n\n protected fetch(): any {\n return this.service.getDynamicGroupItems(this.query);\n }\n}\n","import { InjectionToken } from '@angular/core';\r\nexport const ASSET_NAVIGATOR_CONFIG = new InjectionToken<AssetNavigatorConfig>('AssetNodeConfig');\r\n\r\nexport interface AssetNavigatorConfig {\r\n smartGroups?: boolean;\r\n openOnStart?: boolean;\r\n rootNodePriority?: number;\r\n disableDragAndDrop?: boolean;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { GroupFragment } from './group-fragment.model';\nimport { IManagedObject } from '@c8y/client';\n\n@Injectable()\nexport class DeviceGroupService {\n icons = {\n brokerSourceInactive: {\n icon: 'c8y-group-remote-inactive'\n },\n brokerSource: {\n icon: 'c8y-group-remote',\n iconOpen: 'c8y-group-remote-open'\n },\n group: {\n icon: 'c8y-group',\n iconOpen: 'c8y-group-open'\n },\n dynamicGroup: {\n icon: 'c8y-group-smart',\n iconOpen: 'c8y-group-smart-open'\n },\n other: {\n icon: 'circle',\n iconClass: 'statusUnknown'\n }\n };\n dataBrokerSourceFragmentInactive = `_${GroupFragment.dataBrokerSourceFragment}`;\n\n isGroup(mo) {\n return (\n !!mo[GroupFragment.groupFragmentType] ||\n mo.type === GroupFragment.groupType ||\n mo.type === GroupFragment.subGroupType\n );\n }\n\n isDynamicGroup(mo) {\n return !!mo[GroupFragment.dynamicGroupFragment] || mo.type === GroupFragment.dynamicGroupType;\n }\n\n isDataBroker(mo) {\n return (\n !!mo[GroupFragment.dataBrokerSourceFragment] || !!mo[this.dataBrokerSourceFragmentInactive]\n );\n }\n\n isDataBrokerActive(mo) {\n return (\n !!mo[GroupFragment.dataBrokerSourceFragment] && !mo[this.dataBrokerSourceFragmentInactive]\n );\n }\n\n isDevice(mo) {\n return !!mo.c8y_IsDevice;\n }\n\n icon(mo, open = false) {\n let type = 'other';\n if (this.isDynamicGroup(mo)) {\n type = 'dynamicGroup';\n } else if (this.isDataBrokerActive(mo)) {\n type = 'brokerSource';\n } else if (this.isDataBroker(mo)) {\n type = 'brokerSourceInactive';\n } else if (this.isGroup(mo)) {\n type = 'group';\n }\n const icon = this.icons[type];\n return (open && icon.iconOpen) || icon.icon;\n }\n\n isAnyGroup(mo: IManagedObject) {\n return (\n this.isGroup(mo) ||\n this.isDynamicGroup(mo) ||\n this.isDataBroker(mo) ||\n this.isDataBrokerActive(mo)\n );\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { InventoryService, QueriesUtil, UserService, IManagedObject, IResult } from '@c8y/client';\nimport {\n AlertService,\n BreadcrumbService,\n ModalService,\n NavigatorNode,\n AppStateService\n} from '@c8y/ngx-components';\nimport { ApiService } from '@c8y/ngx-components/api';\nimport { empty } from 'rxjs';\nimport { filter, mergeMap } from 'rxjs/operators';\nimport { AssetNode } from './asset-node';\nimport { AssetNavigatorConfig, ASSET_NAVIGATOR_CONFIG } from './asset-node-config.model';\nimport { DynamicGroupNode } from './dynamic-group-node';\nimport { GroupFragment } from './group-fragment.model';\nimport { DeviceGroupService } from './group.service';\n\nexport interface AssetNodeMo {\n id: string;\n type: string;\n}\n\n@Injectable()\nexport class AssetNodeService {\n rootNode: AssetNode;\n firstUrl = true;\n draggedData: AssetNode;\n queriesUtil: QueriesUtil;\n protected PAGE_SIZE = 20;\n\n constructor(\n public inventory: InventoryService,\n public groups: DeviceGroupService,\n public apiService: ApiService,\n public modal: ModalService,\n public alert: AlertService,\n protected breadcrumbService: BreadcrumbService,\n protected user: UserService,\n protected appState: AppStateService,\n @Optional() @Inject(ASSET_NAVIGATOR_CONFIG) public moduleConfig: AssetNavigatorConfig\n ) {\n this.moduleConfig = {\n rootNodePriority: 2000,\n ...(moduleConfig || {})\n };\n this.queriesUtil = new QueriesUtil();\n }\n\n createRootNode() {\n this.rootNode = this.createAssetNode({\n root: true,\n priority: this.moduleConfig.rootNodePriority\n });\n return this.rootNode;\n }\n\n createDynamicGroupNode(config) {\n return new DynamicGroupNode(this, config);\n }\n\n createAssetNode(config) {\n return new AssetNode(this, config);\n }\n\n createChildNode(managedObject) {\n const { type } = managedObject;\n const config: Partial<AssetNode> = { mo: managedObject };\n if (type === GroupFragment.dynamicGroupType) {\n return this.createDynamicGroupNode(config);\n }\n return this.createAssetNode(config);\n }\n\n getRootNodes(customFilter?: any): Promise<any> {\n const defaultFilter = {\n pageSize: this.PAGE_SIZE,\n withChildren: false,\n query: this.queriesUtil.buildQuery(this.rootQueryFilter())\n };\n const groupFilter = customFilter ? customFilter : defaultFilter;\n\n // due to BE performance limitations we do not allow filtering and sorting for a user without inventory roles\n if (!this.user.hasRole(this.appState.currentUser.value, 'ROLE_INVENTORY_READ')) {\n delete groupFilter.query;\n Object.assign(groupFilter, {\n fragmentType: GroupFragment.groupFragmentType,\n onlyRoots: true\n });\n }\n return this.inventory.list(this.createFilter(groupFilter));\n }\n\n getGroupItems(moId: string, extraFilter: object = {}) {\n const queryFilter = {\n withChildren: false,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId)\n };\n return this.inventory.childAssetsList(moId, { ...queryFilter, ...extraFilter });\n }\n\n getDynamicGroupItems(groupQuery: string, filterObj: any = {}) {\n const { query, ...queryParams } = filterObj;\n const orderByQuery = query;\n const queryFilter = {\n q: this.buildCombinedQuery(groupQuery, orderByQuery),\n ...queryParams\n };\n return this.inventory.list(this.createFilter(queryFilter));\n }\n\n getDeviceChildren(moId: string, extraFilter: object = {}) {\n const queryFilter = {\n withChildren: false,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId)\n };\n return this.inventory.childDevicesList(moId, { ...queryFilter, ...extraFilter });\n }\n\n groupQueryFilter(moId: string) {\n return `$filter=(bygroupid(${moId}))$orderby=name`;\n }\n\n rootQueryFilter() {\n const { moduleConfig } = this;\n const rootFilter = {\n __filter: {\n type: `${GroupFragment.groupType}`\n },\n __orderby: [{ name: 1 }]\n };\n if (moduleConfig.smartGroups) {\n const queryFilter = {\n __filter: {\n __and: [\n {\n type: `${GroupFragment.dynamicGroupType}`\n },\n {\n __has: `${GroupFragment.dynamicGroupFragment}`\n },\n { __not: { __has: `${GroupFragment.dynamicGroupFragment}.invisible` } }\n ]\n }\n };\n this.queriesUtil.addOrFilter(rootFilter, queryFilter);\n }\n return rootFilter;\n }\n\n onUpdate({ mo, root }) {\n if (mo.id) {\n return this.apiService\n .hookResponse(\n ({ url, method }) =>\n ['PUT', 'DELETE', 'POST'].includes(method) &&\n RegExp(`((inventory/managedObjects)|(service/smartgroup/smartgroups))/${mo.id}`).test(\n url\n )\n )\n .pipe(\n filter(() => !this.draggedData),\n mergeMap(this.apiService.resolveData),\n filter(response => !response.data.c8y_Dashboard)\n );\n } else if (root) {\n return this.apiService\n .hookResponse(\n ({ url, method }) =>\n RegExp('((inventory/managedObjects)|(service/smartgroup/smartgroups))/?$').test(url) &&\n method === 'POST'\n )\n .pipe(\n mergeMap(this.apiService.resolveData),\n filter(response => this.isNewManagedObjectRoot(response))\n );\n } else {\n return empty();\n }\n }\n\n isNewManagedObjectRoot(response: Partial<IResult<IManagedObject>> = {}) {\n const { data } = response;\n let isRootAsset = false;\n\n if (typeof data === 'object') {\n isRootAsset = !!data[GroupFragment.groupFragmentType];\n if (!isRootAsset && this.moduleConfig.smartGroups) {\n isRootAsset = !!data[GroupFragment.dynamicGroupFragment];\n }\n }\n return isRootAsset;\n }\n\n /**\n * There could be multiple breadcrumbs for devices,\n * so we set a preferred one on click on a device.\n * @param parents The parent nodes of the device to select the prefered one.\n */\n preferBreadcrumb(parents: NavigatorNode[]) {\n if (parents.length === 1) {\n this.breadcrumbService.selectPreferredByPath(parents[0].path);\n }\n }\n\n protected createFilter(extraParams: any = {}) {\n const params = {\n currentPage: 1,\n withTotalPages: true,\n pageSize: 10\n };\n return { ...params, ...extraParams };\n }\n\n private buildCombinedQuery(query, orderByQuery) {\n let combinedQuery;\n if (query && orderByQuery) {\n const filterQuery = this.queriesUtil.buildQuery({\n __useFilterQueryString: query\n });\n combinedQuery = `${filterQuery} ${orderByQuery}`;\n } else {\n combinedQuery = query || orderByQuery || '';\n }\n return combinedQuery;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AssetNodeService } from './asset-node.service';\nimport { NavigatorNode } from '@c8y/ngx-components';\n\n@Injectable()\nexport class AssetNodeFactory {\n constructor(private service: AssetNodeService) {}\n\n get(): NavigatorNode {\n if (!this.service.rootNode) {\n this.service.createRootNode();\n }\n return this.service.rootNode;\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { HOOK_NAVIGATOR_NODES, ModalModule, ModalService, DeviceStatusComponent, DeviceStatusModule} from '@c8y/ngx-components';\nimport { ASSET_NAVIGATOR_CONFIG} from './asset-node-config.model';\nimport { AssetNodeFactory } from './asset-node.factory';\nimport { AssetNodeService } from './asset-node.service';\nimport { AssetNavigatorConfig } from './asset-node-config.model';\nimport { DeviceGroupService } from './group.service';\n\n@NgModule({\n declarations: [],\n imports: [\n ModalModule,\n DeviceStatusModule\n ],\n providers: [\n ModalService,\n AssetNodeService,\n DeviceGroupService,\n {\n provide: HOOK_NAVIGATOR_NODES, useClass: AssetNodeFactory, multi: true\n }\n ],\n entryComponents: [DeviceStatusComponent]\n})\nexport class AssetsNavigatorModule {\n static config(config: AssetNavigatorConfig): ModuleWithProviders<AssetsNavigatorModule> {\n return {\n ngModule: AssetsNavigatorModule,\n providers: [\n {\n provide: ASSET_NAVIGATOR_CONFIG, useValue: config\n }\n ],\n };\n }\n\n}\n","import { GroupNodeService } from './group-node.service';\nimport { AssetNode } from '../asset-node';\n\nexport class GroupNode extends AssetNode {\n // FIXME: Currently hasChildren returns true if it is a group,\n // Issue is, that we disable the children in the API\n // getGroupItems service call due to performance. This leads\n // to that the dropdown chevron is shown always. Issue is,\n // that even if we return the chevrons, we have no way to determine\n // if the childAssets contain groups or other assets (like dashboards).\n // get hasChildren() {\n // return this.root || this.service.groups.isGroup(this.mo) && (this.mo as IManagedObject).childAssets.references.length > 0;\n // }\n\n /**\n * Creates a new node which shows only groups.\n *\n * @param service The service to use.\n * @param config The default configuration of the node.\n */\n constructor(protected service: GroupNodeService, config = {}) {\n super(service, config);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AssetNodeService } from '../asset-node.service';\nimport { GroupNode } from './group-node';\nimport { GroupFragment } from '../group-fragment.model';\n\n@Injectable()\nexport class GroupNodeService extends AssetNodeService {\n protected PAGE_SIZE = 5;\n\n createGroupNode(config) {\n return new GroupNode(this, config);\n }\n\n createChildNode(managedObject): GroupNode {\n const config: Partial<GroupNode> = { mo: managedObject };\n return this.createGroupNode(config);\n }\n\n subAssetsQueryFilter() {\n const rootQueryFilter = this.rootQueryFilter();\n const filter = this.queriesUtil.addOrFilter(rootQueryFilter, {\n type: GroupFragment.subGroupType\n });\n return this.queriesUtil.buildQuery(filter);\n }\n\n getGroupItems(moId: string): Promise<any> {\n return this.inventory.childAssetsList(moId, {\n query: this.subAssetsQueryFilter(),\n withChildren: false,\n pageSize: this.PAGE_SIZE,\n withTotalPages: true\n });\n }\n}\n","import { Component, Output, Input, EventEmitter, OnInit } from '@angular/core';\nimport { GroupNodeService } from './group-node.service';\nimport { GroupNode } from './group-node';\nimport { IManagedObject } from '@c8y/client';\n\n/**\n * Displays a hierarchical tree selector for assets.\n */\n@Component({\n selector: 'c8y-asset-selector',\n templateUrl: './asset-selector.component.html'\n})\nexport class AssetSelectorComponent implements OnInit {\n /**\n * An array of predefined nodes.\n */\n @Input() selected: IManagedObject[] = [];\n /**\n * Emits if one item was selected (all currently selected nodes).\n */\n @Output() onChange = new EventEmitter<IManagedObject[]>();\n /**\n * @ignore\n */\n rootNode: GroupNode;\n\n /**\n * @ignore only DI\n */\n constructor(private groupNodeService: GroupNodeService) {}\n\n /**\n * @ignore\n */\n ngOnInit(): void {\n this.rootNode = this.groupNodeService.createGroupNode({ root: true });\n }\n\n /**\n * Adds an managed object to the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n select(selectedMo: IManagedObject) {\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index === -1) {\n this.selected.push(selectedMo);\n }\n this.onChange.emit(this.selected);\n }\n\n /**\n * Removes a managed object from the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n deselect(selectedMo: IManagedObject) {\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index > -1) {\n this.selected.splice(index, 1);\n }\n this.onChange.emit(this.selected);\n }\n\n getIndexOfSelected(selected: Array<Partial<IManagedObject>>, selectedMo: IManagedObject) {\n return selected.findIndex(mo => mo.id === selectedMo.id);\n }\n}\n","import { Component, Input, OnInit, ChangeDetectorRef } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { GroupNode } from './group-node';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { AssetSelectorComponent } from './asset-selector.component';\nimport { IManagedObject } from '@c8y/client';\nimport { Action } from '../action.enum';\n\n@Component({\n selector: 'c8y-asset-selector-node',\n templateUrl: './asset-selector-node.component.html'\n})\nexport class AssetSelectorNodeComponent implements OnInit {\n /**\n * The current node.\n */\n @Input() node: GroupNode;\n /**\n * All preselected items\n */\n @Input() preselected: Array<Partial<IManagedObject>> = [];\n /**\n * Should the path be shown\n */\n @Input() showPath: boolean = false;\n /**\n * The current path to the node\n */\n breadcrumb: string;\n /**\n * @ignore\n */\n level: number = 0;\n /**\n * The selection status of the node\n */\n checked: boolean = false;\n /**\n * @ignore\n */\n unsubscribe$ = new Subject<any>();\n\n /**\n * @ignore\n */\n get expandTitle() {\n return !this.node.open ? gettext('Expand') : gettext('Collapse');\n }\n\n /**\n * @ignore only di\n */\n constructor(\n private translateService: TranslateService,\n private cd: ChangeDetectorRef,\n private parentNode: AssetSelectorComponent\n ) {}\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.breadcrumb = this.node.label;\n this.setupBreadcrumbsAndLevel(this.node);\n\n if (this.node instanceof GroupNode) {\n this.node.hookEvents();\n }\n\n // open on startup\n if (this.node.root) {\n this.click();\n }\n\n if (this.node.events) {\n this.node.events\n .pipe(\n takeUntil(this.unsubscribe$),\n filter((a: Action) => a === Action.LOADING_DONE)\n )\n .subscribe(() => {\n this.cd.markForCheck();\n });\n }\n\n this.checked = this.isPreselected();\n }\n\n /**\n * Opens a node.\n */\n click() {\n this.node.open = !this.node.open;\n this.node.click({ open: this.node.open });\n }\n\n /**\n * TODO: Only level used. Breadcrumbs needs to be implemented.\n */\n setupBreadcrumbsAndLevel(node: GroupNode) {\n if (node.parents && node.parents.length) {\n const parent = node.parents[0] as GroupNode;\n this.breadcrumb = this.translateService.instant(parent.label) + ' > ' + this.breadcrumb;\n this.level++;\n\n this.setupBreadcrumbsAndLevel(parent);\n }\n }\n\n /**\n * Selects the node and emits a change on the parent component.\n * @param node The node to select.\n */\n selected(node: GroupNode) {\n this.checked = !this.checked;\n this.updateSelection(node.mo);\n }\n\n /**\n * @ignore\n */\n ngOnDestroy(): void {\n this.unsubscribe$.next(true);\n this.unsubscribe$.complete();\n }\n\n private isPreselected() {\n if (this.node.root || !this.node.mo) {\n return false;\n }\n return this.parentNode.getIndexOfSelected(this.preselected, this.node.mo) > -1;\n }\n\n private updateSelection(selectedMo: IManagedObject) {\n if (this.checked) {\n this.parentNode.select(selectedMo);\n return;\n }\n this.parentNode.deselect(selectedMo);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@c8y/ngx-components';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { GroupNodeService } from './group-node.service';\n\nimport { AssetSelectorNodeComponent } from './asset-selector-node.component';\nimport { AssetSelectorComponent } from './asset-selector.component';\n\n@NgModule({\n imports: [CommonModule, CollapseModule, BsDropdownModule ],\n exports: [AssetSelectorNodeComponent, AssetSelectorComponent],\n providers: [GroupNodeService],\n declarations: [AssetSelectorNodeComponent, AssetSelectorComponent]\n})\nexport class AssetSelectorModule {}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../../assets-navigator/group-fragment.model.ts","../../assets-navigator/action.enum.ts","../../assets-navigator/load-more-node.ts","../../assets-navigator/asset-node.ts","../../assets-navigator/dynamic-group-node.ts","../../assets-navigator/asset-node-config.model.ts","../../assets-navigator/group.service.ts","../../assets-navigator/asset-node.service.ts","../../assets-navigator/asset-node.factory.ts","../../assets-navigator/assets-navigator.module.ts","../../assets-navigator/asset-selector/group-node.ts","../../assets-navigator/asset-selector/group-node.service.ts","../../assets-navigator/asset-selector/asset-selector.component.ts","../../assets-navigator/asset-selector/asset-selector-node.component.ts","../../assets-navigator/asset-selector/asset-selector.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","call","pop","length","push","__values","o","s","m","i","__read","r","ar","error","__spread","arguments","concat","GroupFragment","Action","LoadMoreNode","_this","_super","gettext","icon","droppable","priority","Infinity","NavigatorNode","AssetNode","service","config","_super_1","root","mo","path","isDeviceOrProbablyChildDevice","id","draggable","moduleConfig","disableDragAndDrop","routerLinkExact","updateIcon","onUpdateSubscription","onUpdate","subscribe","_a","data","method","refresh","setLabel","iconComponent","DeviceStatusComponent","undefined","defineProperty","groups","isGroup","c8y_IsDevice","isDevice","isNeitherDeviceOrGroup","isDynamicGroup","openOnStart","url","test","matches","match","id_1","get","some","managedObject","parents","forEach","node","events","REFRESH","name","click","options","preferBreadcrumb","hookEvents","open","FETCH","sort","children","a","addManagedObject","childAdditions","isChildAddition","add","createChildNode","references","destroy","unsubscribe","nodeToMove","draggedData","shouldGetChildOfItsOwn","find","child","isAlreadyChild","preventMove","dragStart","$event","rootNode","dragEnd","drop","canDrop","moveNode","draggedHover","Subject","evt","loading","handleEvent","fetch","getRootNodes","getGroupItems","addNodes","_c","NEXT","loadMoreNode","_b","paging","empty","res","currentPage","nextPage","pageSize","itemsCount","moreItemsAvailable","toggleLoadMore","map","LOADING_DONE","show","hidden","showDropConfirm","isCopy","verifyNodeAccess","addMovedNode","removeMovedNode","expand","alert","addServerFailure","ex_1","confirm","title","message","buttons","action","status","inventory","update","type","groupType","childAssetsAdd","parent","dynamicGroupType","subGroupType","_d","childAssetsRemove","remove","DynamicGroupNode","c8y_DeviceQueryString","getDynamicGroupItems","query","ASSET_NAVIGATOR_CONFIG","InjectionToken","DeviceGroupService","icons","brokerSourceInactive","brokerSource","iconOpen","group","dynamicGroup","other","iconClass","dataBrokerSourceFragmentInactive","dataBrokerSourceFragment","groupFragmentType","dynamicGroupFragment","isDataBroker","isDataBrokerActive","isAnyGroup","Injectable","AssetNodeService","apiService","modal","breadcrumbService","user","appState","firstUrl","PAGE_SIZE","assign","rootNodePriority","queriesUtil","QueriesUtil","createRootNode","createAssetNode","createDynamicGroupNode","customFilter","defaultFilter","withChildren","buildQuery","navRootQueryFilter","groupFilter","hasRole","currentUser","fragmentType","onlyRoots","list","createFilter","moId","extraFilter","queryFilter","groupQueryFilter","childAssetsList","groupQuery","filterObj","queryParams","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__rest","orderByQuery","q","buildCombinedQuery","getDeviceChildren","childDevicesList","navRootFilter","rootQueryFilter","__orderby","rootFilter","__filter","smartGroups","__and","__has","__not","addOrFilter","hookResponse","includes","RegExp","pipe","filter","mergeMap","resolveData","response","c8y_Dashboard","isNewManagedObjectRoot","isRootAsset","selectPreferredByPath","extraParams","withTotalPages","combinedQuery","__useFilterQueryString","InventoryService","ApiService","ModalService","AlertService","BreadcrumbService","UserService","AppStateService","Optional","Inject","args","AssetNodeFactory","AssetsNavigatorModule","ngModule","providers","provide","useValue","NgModule","declarations","imports","ModalModule","DeviceStatusModule","HOOK_NAVIGATOR_NODES","useClass","multi","entryComponents","GroupNode","GroupNodeService","createGroupNode","subAssetsQueryFilter","AssetSelectorComponent","groupNodeService","selected","onChange","EventEmitter","ngOnInit","select","selectedMo","getIndexOfSelected","emit","deselect","index","splice","findIndex","Component","selector","template","Input","Output","AssetSelectorNodeComponent","translateService","cd","parentNode","preselected","showPath","level","checked","unsubscribe$","breadcrumb","setupBreadcrumbsAndLevel","takeUntil","markForCheck","isPreselected","instant","updateSelection","ngOnDestroy","complete","TranslateService","ChangeDetectorRef","CommonModule","CollapseModule","BsDropdownModule","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export enum GroupFragment {\n groupType = 'c8y_DeviceGroup',\n subGroupType = 'c8y_DeviceSubgroup',\n groupFragmentType = 'c8y_IsDeviceGroup',\n dataBrokerSourceFragment = 'c8y_BrokerSource',\n dynamicGroupType = 'c8y_DynamicGroup',\n dynamicGroupFragment = 'c8y_IsDynamicGroup',\n dynamicGroupColumnConfig = 'c8y_UIDeviceFilterConfig',\n dynamicGroupQueryString = 'c8y_DeviceQueryString',\n}\n","export enum Action {\n FETCH,\n NEXT,\n REFRESH,\n LOADING_DONE\n}\n","import { NavigatorNode, gettext } from '@c8y/ngx-components';\n\nexport class LoadMoreNode extends NavigatorNode {\n label = gettext('Load more');\n icon = 'plus';\n droppable = true;\n\n constructor() {\n super();\n this.priority = -Infinity;\n }\n}\n","import { Paging } from '@c8y/client';\nimport { ClickOptions, gettext, NavigatorNode, DeviceStatusComponent } from '@c8y/ngx-components';\nimport { get } from 'lodash-es';\nimport { Subject, Subscription } from 'rxjs';\nimport { AssetNodeMo, AssetNodeService } from './asset-node.service';\nimport { LoadMoreNode } from './load-more-node';\nimport { GroupFragment } from './group-fragment.model';\nimport { Action } from './action.enum';\n\nexport class AssetNode extends NavigatorNode {\n root: boolean;\n mo: any;\n\n get hasChildren() {\n return this.root || this.service.groups.isGroup(this.mo);\n }\n\n get isDevice() {\n return !!this.mo.c8y_IsDevice;\n }\n\n get isDeviceOrProbablyChildDevice() {\n return this.isDevice || this.isNeitherDeviceOrGroup;\n }\n\n get isNeitherDeviceOrGroup() {\n const { isGroup, isDynamicGroup } = this.service.groups;\n return !isGroup(this.mo) && !isDynamicGroup(this.mo) && !this.isDevice && !this.root;\n }\n\n events: Subject<Action>;\n protected paging: Paging<AssetNodeMo>;\n protected loadMoreNode: LoadMoreNode;\n private onUpdateSubscription: Subscription;\n\n constructor(protected service: AssetNodeService, config = {}) {\n super(config);\n this.root = this.root || false;\n this.mo = this.mo || {};\n this.path = this.root\n ? 'group'\n : this.isDeviceOrProbablyChildDevice\n ? `device/${this.mo.id}`\n : `group/${this.mo.id}`;\n this.draggable = !this.service.moduleConfig.disableDragAndDrop && !this.root;\n this.droppable =\n !this.service.moduleConfig.disableDragAndDrop && !this.isDeviceOrProbablyChildDevice;\n this.routerLinkExact = this.root;\n this.updateIcon(false);\n this.onUpdateSubscription = this.service\n .onUpdate(this)\n .subscribe(({ data, method }) => this.refresh(data, method));\n this.setLabel();\n this.iconComponent = this.isDeviceOrProbablyChildDevice ? DeviceStatusComponent : undefined;\n }\n\n openOnStart(url) {\n const urlRegex = /^\\/group\\//;\n if (this.root) {\n if (this.service.moduleConfig.openOnStart || urlRegex.test(url)) {\n return true;\n }\n }\n const matches = url.match(/\\/(group)\\/(\\d+)/);\n let isMatch = false;\n if (matches) {\n const id = matches[2];\n isMatch = []\n .concat(get(this.mo, 'childAssets.references', []))\n .some(({ managedObject }) => managedObject.id === id);\n return isMatch;\n }\n return false;\n }\n\n refresh(mo: any = {}, method = 'GET') {\n if (mo.id === this.mo.id) {\n this.mo = mo;\n this.setLabel();\n } else if (method === 'DELETE') {\n this.parents.forEach((node: AssetNode) => node.refresh());\n return;\n }\n if (this.events) {\n this.events.next(Action.REFRESH);\n }\n }\n\n setLabel() {\n this.label = (this.root && gettext('Groups')) || this.mo.name || '--';\n }\n\n click(options: ClickOptions = {}) {\n if (this.isDeviceOrProbablyChildDevice) {\n this.service.preferBreadcrumb(this.parents);\n return;\n }\n this.hookEvents();\n\n this.updateIcon(options.open);\n if (options.open) {\n this.events.next(Action.FETCH);\n }\n }\n\n sort() {\n this.children.sort((a, b) => {\n if (a.priority > b.priority) {\n return -1;\n } else if (a.priority < b.priority) {\n return 1;\n } else {\n return 0;\n }\n });\n }\n\n addManagedObject(mo) {\n const { childAdditions } = this.mo;\n if (!this.isChildAddition(childAdditions, mo)) {\n this.add(this.service.createChildNode(mo));\n }\n }\n\n isChildAddition(childAdditions, mo) {\n return (\n childAdditions && childAdditions.references.some(({ managedObject: { id } }) => id === mo.id)\n );\n }\n\n destroy() {\n this.onUpdateSubscription.unsubscribe();\n }\n\n get canDrop() {\n const nodeToMove = this.service.draggedData;\n if (nodeToMove) {\n const shouldGetChildOfItsOwn = !!nodeToMove.find(child => child === this);\n const isAlreadyChild = (this.children as AssetNode[]).some(\n child => child.mo && child.mo.id === nodeToMove.mo.id\n );\n const preventMove = this === nodeToMove || shouldGetChildOfItsOwn || isAlreadyChild;\n return this.droppable && !preventMove;\n }\n return this.droppable;\n }\n\n dragStart($event) {\n super.dragStart($event);\n this.service.draggedData = this;\n this.service.rootNode.droppable = !this.isDeviceOrProbablyChildDevice;\n }\n\n dragEnd($event) {\n super.dragEnd($event);\n }\n\n async drop($event) {\n super.drop($event);\n const nodeToMove = this.service.draggedData;\n if (this.canDrop) {\n await this.moveNode(nodeToMove);\n } else {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n hookEvents() {\n if (!this.events) {\n this.events = new Subject();\n this.events.subscribe(evt => {\n if (!this.loading) {\n this.handleEvent(evt);\n }\n });\n }\n }\n\n protected fetch() {\n return this.root ? this.service.getRootNodes() : this.service.getGroupItems(this.mo.id);\n }\n\n protected async handleEvent(evt: Action) {\n if (!this.children.length && evt === Action.FETCH) {\n this.loading = true;\n this.addNodes(await this.fetch());\n this.loading = false;\n } else if (evt === Action.NEXT) {\n this.loadMoreNode.loading = true;\n this.addNodes(await this.paging.next());\n this.loadMoreNode.loading = false;\n } else if (evt === Action.REFRESH) {\n this.loading = false;\n this.paging = undefined;\n this.loadMoreNode = undefined;\n this.empty();\n this.events.next(Action.FETCH);\n }\n }\n\n protected addNodes(res) {\n if (res.paging) {\n const { currentPage, nextPage, pageSize } = (this.paging = res.paging);\n if (currentPage === 1) {\n this.empty();\n }\n const itemsCount = res.data.length;\n const moreItemsAvailable = !!nextPage && itemsCount === pageSize;\n this.toggleLoadMore(moreItemsAvailable);\n }\n (res.data || res).map(mo => this.addManagedObject(mo));\n this.events.next(Action.LOADING_DONE);\n }\n\n protected toggleLoadMore(show: boolean) {\n if (!this.loadMoreNode && show) {\n this.loadMoreNode = new LoadMoreNode();\n this.add(this.loadMoreNode);\n this.loadMoreNode.click = () => this.events.next(Action.NEXT);\n }\n\n if (this.loadMoreNode) {\n this.loadMoreNode.hidden = !show;\n }\n }\n\n private async moveNode(nodeToMove: AssetNode) {\n try {\n const isCopy = await this.showDropConfirm(nodeToMove);\n await this.verifyNodeAccess(nodeToMove);\n await this.addMovedNode(nodeToMove);\n if (!isCopy) {\n await this.removeMovedNode(nodeToMove);\n }\n this.expand();\n } catch (ex) {\n if (ex) {\n this.service.alert.addServerFailure(ex);\n }\n } finally {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n private async showDropConfirm(nodeToMove: AssetNode) {\n this.confirm.title = gettext('Move');\n this.confirm.message = gettext('Do you want to move the group?');\n const buttons: any = [\n {\n label: gettext('Cancel'),\n action: () => Promise.reject()\n },\n {\n label: gettext('Move'),\n status: 'default',\n action: () => Promise.resolve(false)\n }\n ];\n if (nodeToMove.isDeviceOrProbablyChildDevice) {\n this.confirm.title = gettext('Move or add');\n this.confirm.message = gettext('Do you want to move or add the device?');\n buttons.push({\n label: gettext('Add'),\n status: 'primary',\n action: () => Promise.resolve(true)\n });\n }\n return this.confirm.show(buttons);\n }\n\n private async verifyNodeAccess(nodeToMove: AssetNode) {\n return this.service.inventory.update({ id: nodeToMove.mo.id });\n }\n\n private async addMovedNode(nodeToMove: AssetNode) {\n let mo;\n if (this.root) {\n const { data } = await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.groupType\n });\n mo = data;\n } else {\n const { data } = await this.service.inventory.childAssetsAdd(nodeToMove.mo, this.mo);\n mo = data;\n }\n this.addManagedObject(mo);\n }\n\n private async removeMovedNode(nodeToMove: AssetNode) {\n for (const parent of nodeToMove.parents as AssetNode[]) {\n if (parent.mo && parent.mo.type === GroupFragment.dynamicGroupType) {\n break; // smart groups don't need to be changed\n }\n if (parent.root) {\n await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.subGroupType\n });\n } else {\n await this.service.inventory.childAssetsRemove(nodeToMove.mo, parent.mo);\n }\n parent.remove(nodeToMove);\n }\n }\n\n private updateIcon(open) {\n this.icon = this.service.groups.icon(\n // if it's root we are going to pass a fake mo to get the same icon as groups\n this.root ? { type: GroupFragment.groupType } : this.mo,\n open\n );\n }\n}\n","\nimport { AssetNode } from './asset-node';\nimport { AssetNodeService } from './asset-node.service';\n\nexport class DynamicGroupNode extends AssetNode {\n constructor(\n protected service: AssetNodeService,\n config = {}\n ) {\n super(service, config);\n this.draggable = false;\n this.droppable = false;\n }\n\n get hasChildren() {\n return true;\n }\n\n get query() {\n return this.mo.c8y_DeviceQueryString;\n }\n\n protected fetch(): any {\n return this.service.getDynamicGroupItems(this.query);\n }\n}\n","import { InjectionToken } from '@angular/core';\r\nexport const ASSET_NAVIGATOR_CONFIG = new InjectionToken<AssetNavigatorConfig>('AssetNodeConfig');\r\n\r\nexport interface AssetNavigatorConfig {\r\n smartGroups?: boolean;\r\n openOnStart?: boolean;\r\n rootNodePriority?: number;\r\n disableDragAndDrop?: boolean;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { GroupFragment } from './group-fragment.model';\nimport { IManagedObject } from '@c8y/client';\n\n@Injectable()\nexport class DeviceGroupService {\n icons = {\n brokerSourceInactive: {\n icon: 'c8y-group-remote-inactive'\n },\n brokerSource: {\n icon: 'c8y-group-remote',\n iconOpen: 'c8y-group-remote-open'\n },\n group: {\n icon: 'c8y-group',\n iconOpen: 'c8y-group-open'\n },\n dynamicGroup: {\n icon: 'c8y-group-smart',\n iconOpen: 'c8y-group-smart-open'\n },\n other: {\n icon: 'circle',\n iconClass: 'statusUnknown'\n }\n };\n dataBrokerSourceFragmentInactive = `_${GroupFragment.dataBrokerSourceFragment}`;\n\n isGroup(mo) {\n return (\n !!mo[GroupFragment.groupFragmentType] ||\n mo.type === GroupFragment.groupType ||\n mo.type === GroupFragment.subGroupType\n );\n }\n\n isDynamicGroup(mo) {\n return !!mo[GroupFragment.dynamicGroupFragment] || mo.type === GroupFragment.dynamicGroupType;\n }\n\n isDataBroker(mo) {\n return (\n !!mo[GroupFragment.dataBrokerSourceFragment] || !!mo[this.dataBrokerSourceFragmentInactive]\n );\n }\n\n isDataBrokerActive(mo) {\n return (\n !!mo[GroupFragment.dataBrokerSourceFragment] && !mo[this.dataBrokerSourceFragmentInactive]\n );\n }\n\n isDevice(mo) {\n return !!mo.c8y_IsDevice;\n }\n\n icon(mo, open = false) {\n let type = 'other';\n if (this.isDynamicGroup(mo)) {\n type = 'dynamicGroup';\n } else if (this.isDataBrokerActive(mo)) {\n type = 'brokerSource';\n } else if (this.isDataBroker(mo)) {\n type = 'brokerSourceInactive';\n } else if (this.isGroup(mo)) {\n type = 'group';\n }\n const icon = this.icons[type];\n return (open && icon.iconOpen) || icon.icon;\n }\n\n isAnyGroup(mo: IManagedObject) {\n return (\n this.isGroup(mo) ||\n this.isDynamicGroup(mo) ||\n this.isDataBroker(mo) ||\n this.isDataBrokerActive(mo)\n );\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { InventoryService, QueriesUtil, UserService, IManagedObject, IResult } from '@c8y/client';\nimport {\n AlertService,\n BreadcrumbService,\n ModalService,\n NavigatorNode,\n AppStateService\n} from '@c8y/ngx-components';\nimport { ApiService } from '@c8y/ngx-components/api';\nimport { empty } from 'rxjs';\nimport { filter, mergeMap } from 'rxjs/operators';\nimport { AssetNode } from './asset-node';\nimport { AssetNavigatorConfig, ASSET_NAVIGATOR_CONFIG } from './asset-node-config.model';\nimport { DynamicGroupNode } from './dynamic-group-node';\nimport { GroupFragment } from './group-fragment.model';\nimport { DeviceGroupService } from './group.service';\n\nexport interface AssetNodeMo {\n id: string;\n type: string;\n}\n\n@Injectable()\nexport class AssetNodeService {\n rootNode: AssetNode;\n firstUrl = true;\n draggedData: AssetNode;\n queriesUtil: QueriesUtil;\n protected PAGE_SIZE = 20;\n\n constructor(\n public inventory: InventoryService,\n public groups: DeviceGroupService,\n public apiService: ApiService,\n public modal: ModalService,\n public alert: AlertService,\n protected breadcrumbService: BreadcrumbService,\n protected user: UserService,\n protected appState: AppStateService,\n @Optional() @Inject(ASSET_NAVIGATOR_CONFIG) public moduleConfig: AssetNavigatorConfig\n ) {\n this.moduleConfig = {\n rootNodePriority: 2000,\n ...(moduleConfig || {})\n };\n this.queriesUtil = new QueriesUtil();\n }\n\n createRootNode() {\n this.rootNode = this.createAssetNode({\n root: true,\n priority: this.moduleConfig.rootNodePriority\n });\n return this.rootNode;\n }\n\n createDynamicGroupNode(config) {\n return new DynamicGroupNode(this, config);\n }\n\n createAssetNode(config) {\n return new AssetNode(this, config);\n }\n\n createChildNode(managedObject) {\n const { type } = managedObject;\n const config: Partial<AssetNode> = { mo: managedObject };\n if (type === GroupFragment.dynamicGroupType) {\n return this.createDynamicGroupNode(config);\n }\n return this.createAssetNode(config);\n }\n\n getRootNodes(customFilter?: any): Promise<any> {\n const defaultFilter = {\n pageSize: this.PAGE_SIZE,\n withChildren: false,\n query: this.queriesUtil.buildQuery(this.navRootQueryFilter())\n };\n const groupFilter = customFilter ? customFilter : defaultFilter;\n\n // due to BE performance limitations we do not allow filtering and sorting for a user without inventory roles\n if (!this.user.hasRole(this.appState.currentUser.value, 'ROLE_INVENTORY_READ')) {\n delete groupFilter.query;\n Object.assign(groupFilter, {\n fragmentType: GroupFragment.groupFragmentType,\n onlyRoots: true\n });\n }\n return this.inventory.list(this.createFilter(groupFilter));\n }\n\n getGroupItems(moId: string, extraFilter: object = {}) {\n const queryFilter = {\n withChildren: false,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId)\n };\n return this.inventory.childAssetsList(moId, { ...queryFilter, ...extraFilter });\n }\n\n getDynamicGroupItems(groupQuery: string, filterObj: any = {}) {\n const { query, ...queryParams } = filterObj;\n const orderByQuery = query;\n const queryFilter = {\n q: this.buildCombinedQuery(groupQuery, orderByQuery),\n ...queryParams\n };\n return this.inventory.list(this.createFilter(queryFilter));\n }\n\n getDeviceChildren(moId: string, extraFilter: object = {}) {\n const queryFilter = {\n withChildren: false,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId)\n };\n return this.inventory.childDevicesList(moId, { ...queryFilter, ...extraFilter });\n }\n\n groupQueryFilter(moId: string) {\n return `$filter=(bygroupid(${moId}))$orderby=name`;\n }\n\n navRootQueryFilter() {\n const navRootFilter = this.rootQueryFilter();\n navRootFilter.__orderby = [{ name: 1 }];\n return navRootFilter;\n }\n\n rootQueryFilter() {\n const { moduleConfig } = this;\n const rootFilter = {\n __filter: {\n type: `${GroupFragment.groupType}`\n },\n __orderby: []\n };\n if (moduleConfig.smartGroups) {\n const queryFilter = {\n __filter: {\n __and: [\n {\n type: `${GroupFragment.dynamicGroupType}`\n },\n {\n __has: `${GroupFragment.dynamicGroupFragment}`\n },\n { __not: { __has: `${GroupFragment.dynamicGroupFragment}.invisible` } }\n ]\n }\n };\n this.queriesUtil.addOrFilter(rootFilter, queryFilter);\n }\n return rootFilter;\n }\n\n onUpdate({ mo, root }) {\n if (mo.id) {\n return this.apiService\n .hookResponse(\n ({ url, method }) =>\n ['PUT', 'DELETE', 'POST'].includes(method) &&\n RegExp(`((inventory/managedObjects)|(service/smartgroup/smartgroups))/${mo.id}`).test(\n url\n )\n )\n .pipe(\n filter(() => !this.draggedData),\n mergeMap(this.apiService.resolveData),\n filter(response => !response.data.c8y_Dashboard)\n );\n } else if (root) {\n return this.apiService\n .hookResponse(\n ({ url, method }) =>\n RegExp('((inventory/managedObjects)|(service/smartgroup/smartgroups))/?$').test(url) &&\n method === 'POST'\n )\n .pipe(\n mergeMap(this.apiService.resolveData),\n filter(response => this.isNewManagedObjectRoot(response))\n );\n } else {\n return empty();\n }\n }\n\n isNewManagedObjectRoot(response: Partial<IResult<IManagedObject>> = {}) {\n const { data } = response;\n let isRootAsset = false;\n\n if (typeof data === 'object') {\n isRootAsset = !!data[GroupFragment.groupFragmentType];\n if (!isRootAsset && this.moduleConfig.smartGroups) {\n isRootAsset = !!data[GroupFragment.dynamicGroupFragment];\n }\n }\n return isRootAsset;\n }\n\n /**\n * There could be multiple breadcrumbs for devices,\n * so we set a preferred one on click on a device.\n * @param parents The parent nodes of the device to select the prefered one.\n */\n preferBreadcrumb(parents: NavigatorNode[]) {\n if (parents.length === 1) {\n this.breadcrumbService.selectPreferredByPath(parents[0].path);\n }\n }\n\n protected createFilter(extraParams: any = {}) {\n const params = {\n currentPage: 1,\n withTotalPages: true,\n pageSize: 10\n };\n return { ...params, ...extraParams };\n }\n\n private buildCombinedQuery(query, orderByQuery) {\n let combinedQuery;\n if (query && orderByQuery) {\n const filterQuery = this.queriesUtil.buildQuery({\n __useFilterQueryString: query\n });\n combinedQuery = `${filterQuery} ${orderByQuery}`;\n } else {\n combinedQuery = query || orderByQuery || '';\n }\n return combinedQuery;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AssetNodeService } from './asset-node.service';\nimport { NavigatorNode } from '@c8y/ngx-components';\n\n@Injectable()\nexport class AssetNodeFactory {\n constructor(private service: AssetNodeService) {}\n\n get(): NavigatorNode {\n if (!this.service.rootNode) {\n this.service.createRootNode();\n }\n return this.service.rootNode;\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { HOOK_NAVIGATOR_NODES, ModalModule, ModalService, DeviceStatusComponent, DeviceStatusModule} from '@c8y/ngx-components';\nimport { ASSET_NAVIGATOR_CONFIG} from './asset-node-config.model';\nimport { AssetNodeFactory } from './asset-node.factory';\nimport { AssetNodeService } from './asset-node.service';\nimport { AssetNavigatorConfig } from './asset-node-config.model';\nimport { DeviceGroupService } from './group.service';\n\n@NgModule({\n declarations: [],\n imports: [\n ModalModule,\n DeviceStatusModule\n ],\n providers: [\n ModalService,\n AssetNodeService,\n DeviceGroupService,\n {\n provide: HOOK_NAVIGATOR_NODES, useClass: AssetNodeFactory, multi: true\n }\n ],\n entryComponents: [DeviceStatusComponent]\n})\nexport class AssetsNavigatorModule {\n static config(config: AssetNavigatorConfig): ModuleWithProviders<AssetsNavigatorModule> {\n return {\n ngModule: AssetsNavigatorModule,\n providers: [\n {\n provide: ASSET_NAVIGATOR_CONFIG, useValue: config\n }\n ],\n };\n }\n\n}\n","import { GroupNodeService } from './group-node.service';\nimport { AssetNode } from '../asset-node';\n\nexport class GroupNode extends AssetNode {\n // FIXME: Currently hasChildren returns true if it is a group,\n // Issue is, that we disable the children in the API\n // getGroupItems service call due to performance. This leads\n // to that the dropdown chevron is shown always. Issue is,\n // that even if we return the chevrons, we have no way to determine\n // if the childAssets contain groups or other assets (like dashboards).\n // get hasChildren() {\n // return this.root || this.service.groups.isGroup(this.mo) && (this.mo as IManagedObject).childAssets.references.length > 0;\n // }\n\n /**\n * Creates a new node which shows only groups.\n *\n * @param service The service to use.\n * @param config The default configuration of the node.\n */\n constructor(protected service: GroupNodeService, config = {}) {\n super(service, config);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AssetNodeService } from '../asset-node.service';\nimport { GroupNode } from './group-node';\nimport { GroupFragment } from '../group-fragment.model';\n\n@Injectable()\nexport class GroupNodeService extends AssetNodeService {\n protected PAGE_SIZE = 5;\n\n createGroupNode(config) {\n return new GroupNode(this, config);\n }\n\n createChildNode(managedObject): GroupNode {\n const config: Partial<GroupNode> = { mo: managedObject };\n return this.createGroupNode(config);\n }\n\n subAssetsQueryFilter() {\n const rootQueryFilter = this.rootQueryFilter();\n const filter = this.queriesUtil.addOrFilter(rootQueryFilter, {\n type: GroupFragment.subGroupType\n });\n return this.queriesUtil.buildQuery(filter);\n }\n\n getGroupItems(moId: string): Promise<any> {\n return this.inventory.childAssetsList(moId, {\n query: this.subAssetsQueryFilter(),\n withChildren: false,\n pageSize: this.PAGE_SIZE,\n withTotalPages: true\n });\n }\n}\n","import { Component, Output, Input, EventEmitter, OnInit } from '@angular/core';\nimport { GroupNodeService } from './group-node.service';\nimport { GroupNode } from './group-node';\nimport { IManagedObject } from '@c8y/client';\n\n/**\n * Displays a hierarchical tree selector for assets.\n */\n@Component({\n selector: 'c8y-asset-selector',\n templateUrl: './asset-selector.component.html'\n})\nexport class AssetSelectorComponent implements OnInit {\n /**\n * An array of predefined nodes.\n */\n @Input() selected: IManagedObject[] = [];\n /**\n * Emits if one item was selected (all currently selected nodes).\n */\n @Output() onChange = new EventEmitter<IManagedObject[]>();\n /**\n * @ignore\n */\n rootNode: GroupNode;\n\n /**\n * @ignore only DI\n */\n constructor(private groupNodeService: GroupNodeService) {}\n\n /**\n * @ignore\n */\n ngOnInit(): void {\n this.rootNode = this.groupNodeService.createGroupNode({ root: true });\n }\n\n /**\n * Adds an managed object to the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n select(selectedMo: IManagedObject) {\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index === -1) {\n this.selected.push(selectedMo);\n }\n this.onChange.emit(this.selected);\n }\n\n /**\n * Removes a managed object from the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n deselect(selectedMo: IManagedObject) {\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index > -1) {\n this.selected.splice(index, 1);\n }\n this.onChange.emit(this.selected);\n }\n\n getIndexOfSelected(selected: Array<Partial<IManagedObject>>, selectedMo: IManagedObject) {\n return selected.findIndex(mo => mo.id === selectedMo.id);\n }\n}\n","import { Component, Input, OnInit, ChangeDetectorRef } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { GroupNode } from './group-node';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { AssetSelectorComponent } from './asset-selector.component';\nimport { IManagedObject } from '@c8y/client';\nimport { Action } from '../action.enum';\n\n@Component({\n selector: 'c8y-asset-selector-node',\n templateUrl: './asset-selector-node.component.html'\n})\nexport class AssetSelectorNodeComponent implements OnInit {\n /**\n * The current node.\n */\n @Input() node: GroupNode;\n /**\n * All preselected items\n */\n @Input() preselected: Array<Partial<IManagedObject>> = [];\n /**\n * Should the path be shown\n */\n @Input() showPath: boolean = false;\n /**\n * The current path to the node\n */\n breadcrumb: string;\n /**\n * @ignore\n */\n level: number = 0;\n /**\n * The selection status of the node\n */\n checked: boolean = false;\n /**\n * @ignore\n */\n unsubscribe$ = new Subject<any>();\n\n /**\n * @ignore\n */\n get expandTitle() {\n return !this.node.open ? gettext('Expand') : gettext('Collapse');\n }\n\n /**\n * @ignore only di\n */\n constructor(\n private translateService: TranslateService,\n private cd: ChangeDetectorRef,\n private parentNode: AssetSelectorComponent\n ) {}\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.breadcrumb = this.node.label;\n this.setupBreadcrumbsAndLevel(this.node);\n\n if (this.node instanceof GroupNode) {\n this.node.hookEvents();\n }\n\n // open on startup\n if (this.node.root) {\n this.click();\n }\n\n if (this.node.events) {\n this.node.events\n .pipe(\n takeUntil(this.unsubscribe$),\n filter((a: Action) => a === Action.LOADING_DONE)\n )\n .subscribe(() => {\n this.cd.markForCheck();\n });\n }\n\n this.checked = this.isPreselected();\n }\n\n /**\n * Opens a node.\n */\n click() {\n this.node.open = !this.node.open;\n this.node.click({ open: this.node.open });\n }\n\n /**\n * TODO: Only level used. Breadcrumbs needs to be implemented.\n */\n setupBreadcrumbsAndLevel(node: GroupNode) {\n if (node.parents && node.parents.length) {\n const parent = node.parents[0] as GroupNode;\n this.breadcrumb = this.translateService.instant(parent.label) + ' > ' + this.breadcrumb;\n this.level++;\n\n this.setupBreadcrumbsAndLevel(parent);\n }\n }\n\n /**\n * Selects the node and emits a change on the parent component.\n * @param node The node to select.\n */\n selected(node: GroupNode) {\n this.checked = !this.checked;\n this.updateSelection(node.mo);\n }\n\n /**\n * @ignore\n */\n ngOnDestroy(): void {\n this.unsubscribe$.next(true);\n this.unsubscribe$.complete();\n }\n\n private isPreselected() {\n if (this.node.root || !this.node.mo) {\n return false;\n }\n return this.parentNode.getIndexOfSelected(this.preselected, this.node.mo) > -1;\n }\n\n private updateSelection(selectedMo: IManagedObject) {\n if (this.checked) {\n this.parentNode.select(selectedMo);\n return;\n }\n this.parentNode.deselect(selectedMo);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@c8y/ngx-components';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { GroupNodeService } from './group-node.service';\n\nimport { AssetSelectorNodeComponent } from './asset-selector-node.component';\nimport { AssetSelectorComponent } from './asset-selector.component';\n\n@NgModule({\n imports: [CommonModule, CollapseModule, BsDropdownModule ],\n exports: [AssetSelectorNodeComponent, AssetSelectorComponent],\n providers: [GroupNodeService],\n declarations: [AssetSelectorNodeComponent, AssetSelectorComponent]\n})\nexport class AssetSelectorModule {}\n"]}
|