UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

1 lines • 31.3 kB
{"version":3,"file":"c8y-ngx-components-operations-bulk-operations-list.mjs","sources":["../../operations/bulk-operations-list/modals/bulk-operations-modal.component.ts","../../operations/bulk-operations-list/modals/bulk-operations-modal.component.html","../../operations/bulk-operations-list/modals/bulk-operation-modals.service.ts","../../operations/bulk-operations-list/bulk-operations-list.component.ts","../../operations/bulk-operations-list/bulk-operations-list.component.html","../../operations/bulk-operations-list/bulk-operations-list.module.ts","../../operations/bulk-operations-list/c8y-ngx-components-operations-bulk-operations-list.ts"],"sourcesContent":["import { Component, ViewContainerRef, ViewChild, OnInit, Inject, forwardRef } from '@angular/core';\nimport { GainsightService } from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport {\n BulkOperationsService,\n OperationType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport {\n ACTIONS_OPERATIONS_BULK,\n BULK_OPERATION_DIALOG_STEPS,\n BULK_OPERATION_EVENT\n} from '@c8y/ngx-components/operations/product-experience';\nimport { BulkOperationModalsService } from '..';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'c8y-bulk-operations-modal',\n templateUrl: 'bulk-operations-modal.component.html',\n standalone: false\n})\nexport class BulkOperationsModalComponent implements OnInit {\n BULK_OPERATION_EVENT = BULK_OPERATION_EVENT;\n bulkActions = ACTIONS_OPERATIONS_BULK;\n pxSteps = BULK_OPERATION_DIALOG_STEPS;\n\n @ViewChild('container', { static: false, read: ViewContainerRef }) container;\n showComponent = false;\n bulkList: OperationType[] = [];\n\n constructor(\n private bsModalRef: BsModalRef,\n private router: Router,\n private gainsightService: GainsightService,\n private bulkOperationsService: BulkOperationsService,\n @Inject(forwardRef(() => BulkOperationModalsService))\n private bulkOperationModalsService: BulkOperationModalsService\n ) {}\n\n ngOnInit() {\n this.bulkList = this.bulkOperationsService.getBulkTypes();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n createComponent(item: OperationType) {\n if (item && item.component) {\n this.showComponent = true;\n this.container.createComponent(item.component);\n this.gainsightService.triggerEvent(this.BULK_OPERATION_EVENT, {\n action: this.bulkActions.SELECT_BULK_OPERTION_TYPE,\n bulkOperationType: item.type\n });\n }\n }\n\n handleClick(item: OperationType) {\n if (item.path) {\n this.bulkOperationModalsService.hideNewBulkOperationModal();\n this.router.navigateByUrl(item.path);\n this.gainsightService.triggerEvent(this.BULK_OPERATION_EVENT, {\n action: this.bulkActions.SELECT_BULK_OPERTION_TYPE,\n bulkOperationType: item.type\n });\n } else if (item.component) {\n this.createComponent(item);\n }\n }\n}\n","<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"c8y-energy\"></i>\n <h4\n id=\"modal-title\"\n translate\n >\n Add bulk operation\n </h4>\n </div>\n <div\n class=\"modal-inner-scroll\"\n id=\"modal-body\"\n >\n <div\n class=\"modal-body p-t-8 p-b-8 sticky-top separator-bottom text-center\"\n [hidden]=\"showComponent\"\n >\n <p\n class=\"text-medium\"\n translate\n >\n Select one of the available options\n </p>\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Check the\n <a\n c8y-guide-href=\"/docs/device-management-application/monitoring-and-controlling-devices/#to-add-a-bulk-operation-using-the-wizard\"\n >\n user documentation\n </a>\n for more details.\n </small>\n </p>\n </div>\n\n <div class=\"list-group list-group-links\">\n <button\n class=\"list-group-item flex-row\"\n type=\"button\"\n *ngFor=\"let item of bulkList\"\n (click)=\"handleClick(item)\"\n >\n <div\n class=\"list-item-icon\"\n *ngIf=\"item.c8yIcon; else icon\"\n >\n <i [c8yIcon]=\"item.c8yIcon\"></i>\n </div>\n <ng-template #icon>\n <div class=\"list-item-icon\">\n <i c8yIcon=\"cogs\"></i>\n </div>\n </ng-template>\n <div\n class=\"list-item-body text-truncate\"\n title=\"{{ item.name | translate }}\"\n >\n {{ item.name | translate }}\n </div>\n </button>\n </div>\n <template #container></template>\n </div>\n <div\n class=\"modal-footer\"\n [hidden]=\"showComponent\"\n >\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n [actionData]=\"{\n action: bulkActions.CANCEL_ADD_BULK_OPERATION_DIALOG,\n step: pxSteps.SELECT_OPERATION_TYPE\n }\"\n >\n <span translate>Cancel</span>\n </button>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { BulkOperationsModalComponent } from './bulk-operations-modal.component';\n\n@Injectable()\nexport class BulkOperationModalsService {\n private bsModalRef: BsModalRef;\n\n constructor(private bsModalService: BsModalService) {}\n\n showNewBulkOperationModal() {\n this.bsModalRef = this.bsModalService.show(BulkOperationsModalComponent, {\n backdrop: 'static',\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title'\n });\n }\n\n hideNewBulkOperationModal() {\n if (this.bsModalRef) {\n this.bsModalRef.hide();\n }\n }\n}\n","import { Component, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { IOperationBulk, IResultList } from '@c8y/client';\nimport {\n DatePickerComponent,\n ForOfFilterPipe,\n OperationBulkRealtimeService\n} from '@c8y/ngx-components';\nimport {\n BulkOperationListItemComponent,\n BULK_OPERATION_STATUS_OPTIONS,\n OperationStatusOptionsMap\n} from '@c8y/ngx-components/operations/bulk-operation-list-item';\nimport {\n BulkOperationsService,\n OperationType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport {\n ACTIONS_OPERATIONS_BULK,\n BULK_OPERATION_EVENT\n} from '@c8y/ngx-components/operations/product-experience';\nimport { OperationStatusOption } from '@c8y/ngx-components/operations/shared';\nimport { StatusFilterComponent } from '@c8y/ngx-components/operations/status-filter';\nimport { flatten } from 'lodash-es';\nimport { BehaviorSubject, combineLatest, Observable, pipe } from 'rxjs';\nimport { map, shareReplay, switchMap, tap, withLatestFrom } from 'rxjs/operators';\nimport { BulkOperationModalsService } from './modals/bulk-operation-modals.service';\n@Component({\n selector: 'c8y-bulk-operations',\n templateUrl: './bulk-operations-list.component.html',\n providers: [OperationBulkRealtimeService],\n standalone: false\n})\nexport class BulkOperationsListComponent implements OnInit {\n bulkTypes: OperationType[] = [];\n selectedTypeFilters = this.getTypeFilters();\n bulkOperationStatusOptions: OperationStatusOptionsMap = BULK_OPERATION_STATUS_OPTIONS;\n BULK_OPERATION_EVENT = BULK_OPERATION_EVENT;\n bulkActions = ACTIONS_OPERATIONS_BULK;\n\n filterPipe: ForOfFilterPipe<IOperationBulk>;\n refreshLoading = false;\n statusFilter$: BehaviorSubject<OperationStatusOption[]> = new BehaviorSubject(null);\n typeFilter$: BehaviorSubject<OperationType[]> = new BehaviorSubject(null);\n timeFilter$: BehaviorSubject<any> = new BehaviorSubject(null);\n reload$: BehaviorSubject<void> = new BehaviorSubject(null);\n @ViewChildren(BulkOperationListItemComponent)\n listItems: QueryList<BulkOperationListItemComponent>;\n @ViewChild('statusFilter', { static: true }) statusFilter: StatusFilterComponent;\n @ViewChild(DatePickerComponent, { static: true }) datePicker: DatePickerComponent;\n\n bulkOperations$: Observable<IResultList<IOperationBulk>> = combineLatest(\n this.statusFilter$,\n this.timeFilter$,\n this.typeFilter$,\n this.reload$\n ).pipe(\n tap(() => {\n this.refreshLoading = true;\n }),\n switchMap(([statusFilters, timeFilters]) => this.filter(statusFilters, timeFilters)),\n withLatestFrom(this.typeFilter$),\n map(([result, typeFilter]: [IResultList<IOperationBulk>, OperationType[]]) => {\n this.filterPipe = pipe(map(data => this.filterByType(data, typeFilter)));\n return { ...result, data: this.filterByType(result.data, typeFilter) };\n }),\n tap(() => {\n this.refreshLoading = false;\n }),\n shareReplay(1)\n );\n\n private allFilterFragments: string[];\n\n constructor(\n public realtime: OperationBulkRealtimeService,\n private bulkOperationsService: BulkOperationsService,\n private bulkOperationModalsService: BulkOperationModalsService\n ) {\n this.allFilterFragments = this.flattenFilterFragments(this.getTypeFilters());\n }\n\n ngOnInit() {\n this.bulkTypes = this.bulkOperationsService.getBulkTypes();\n }\n\n filterByType(bulkOperations: IOperationBulk[], typeFilter) {\n const flattenedFragments: string[] = this.flattenFilterFragments(typeFilter);\n if (\n // return data unfiltered if no filters selected...\n !flattenedFragments.length ||\n // ...or when all filters are selected\n this.allFilterFragments.every(fragment => flattenedFragments.includes(fragment))\n ) {\n return bulkOperations;\n }\n\n const filteredData = bulkOperations.filter(item => {\n return Object.keys(item.operationPrototype).some(key => flattenedFragments.includes(key));\n });\n\n return filteredData;\n }\n\n resetFilter() {\n this.statusFilter$.next(null);\n this.timeFilter$.next(null);\n this.typeFilter$.next(null);\n\n this.datePicker.clearFilter();\n this.selectedTypeFilters = this.getTypeFilters();\n this.statusFilter.reset();\n }\n\n isFilterApplied() {\n return (\n !!this.statusFilter$.getValue()?.length ||\n !!this.typeFilter$.getValue()?.length ||\n !!this.timeFilter$.getValue()\n );\n }\n\n filter(statusFilters, timeFilter) {\n const status =\n statusFilters && statusFilters.length > 0\n ? {\n generalStatus: flatten(statusFilters.map(statusFilter => statusFilter.generalStatuses))\n }\n : {};\n\n const time = timeFilter\n ? {\n ...(timeFilter.dateFrom && {\n dateFrom: timeFilter.dateFrom.toISOString()\n }),\n ...(timeFilter.dateTo && {\n dateTo: timeFilter.dateTo.toISOString()\n })\n }\n : {};\n return this.getBulkOperations({ ...status, ...time });\n }\n\n getBulkOperations(filter?) {\n return this.bulkOperationsService.getBulkOperations(filter);\n }\n\n getTypeFilters() {\n return this.bulkOperationsService.getBulkTypes();\n }\n\n addBulkOperation() {\n this.bulkOperationModalsService.showNewBulkOperationModal();\n }\n\n openFailedOperation(failedParentId) {\n this.listItems.forEach(item => {\n if (item.bulkOperation.id === failedParentId) {\n item.listItem.collapsed = false;\n item.listItem.element.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n });\n }\n\n compareOperations(operationA: IOperationBulk, operationB: IOperationBulk): number {\n return new Date(operationA.startDate).getTime() - new Date(operationB.startDate).getTime();\n }\n\n private flattenFilterFragments(filters: OperationType[]): string[] {\n return (filters || []).reduce((flattened, current) => flattened.concat(current.fragments), []);\n }\n}\n","<c8y-title>{{ 'Bulk operations' | translate }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-overviews'\"\n [label]=\"'Overviews' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-control'\"\n [label]=\"'Device control' | translate\"\n [path]=\"'devicecontrol/single'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-energy'\"\n [label]=\"'Bulk operations' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n *ngIf=\"bulkTypes?.length\"\n itemClass=\"navbar-form\"\n [placement]=\"'left'\"\n>\n <label\n class=\"hidden-sm hidden-xs\"\n translate\n >\n Type\n </label>\n <c8y-select-legacy\n style=\"width: 180px\"\n [items]=\"bulkTypes\"\n [selected]=\"selectedTypeFilters\"\n [disableApplyOnNoSelection]=\"true\"\n (onChange)=\"selectedTypeFilters = $event; typeFilter$.next(selectedTypeFilters)\"\n ></c8y-select-legacy>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form\"\n>\n <c8y-status-filter\n #statusFilter\n [options]=\"bulkOperationStatusOptions\"\n (onFilterChanged)=\"statusFilter$.next($event)\"\n ></c8y-status-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form\"\n>\n <c8y-date-picker (onDateSelected)=\"timeFilter$.next($event)\"></c8y-date-picker>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <c8y-realtime-btn [service]=\"realtime\"></c8y-realtime-btn>\n</c8y-action-bar-item>\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link d-flex a-i-center\"\n title=\"{{ 'Add bulk operation' | translate }}\"\n *ngIf=\"bulkTypes?.length\"\n (click)=\"addBulkOperation()\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n [actionData]=\"{ action: bulkActions.OPEN_ADD_BULK_OPERATION_DIALOG }\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"plus-circle\"\n ></i>\n <span class=\"text-truncate\">\n {{ 'Add bulk operation' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link d-flex a-i-center\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"reload$.next()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': refreshLoading }\"\n ></i>\n <span class=\"text-truncate\">\n {{ 'Reload' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-management-application/monitoring-and-controlling-devices/#to-view-bulk-operations\"\n></c8y-help>\n\n<!-- Empty state -->\n<c8y-ui-empty-state\n icon=\"c8y-energy\"\n [title]=\"'No items to display' | translate\"\n [subtitle]=\"'Bulk operations will be displayed here' | translate\"\n *ngIf=\"(bulkOperations$ | async)?.data.length === 0 && !isFilterApplied()\"\n>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add bulk operation' | translate }}\"\n type=\"button\"\n *ngIf=\"bulkTypes?.length\"\n (click)=\"addBulkOperation()\"\n translate\n >\n Add bulk operation\n </button>\n</c8y-ui-empty-state>\n\n<!-- No results empty state -->\n<c8y-ui-empty-state\n icon=\"search\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Adjust or reset the filter.' | translate\"\n *ngIf=\"(bulkOperations$ | async)?.data.length === 0 && isFilterApplied()\"\n>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Reset filter' | translate }}\"\n type=\"button\"\n (click)=\"resetFilter()\"\n translate\n >\n Reset filter\n </button>\n</c8y-ui-empty-state>\n\n<!-- Detailed list of operations + load more button -->\n<c8y-list-group class=\"m-b-24\">\n <div\n class=\"page-sticky-header hidden-xs c8y-list__item--double-actions c8y-list__item\"\n *ngIf=\"(bulkOperations$ | async)?.data.length\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i\n class=\"invisible\"\n c8yIcon=\"refresh\"\n ></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-57\">\n <div class=\"col-5\">\n {{ 'Operation' | translate }}\n </div>\n <div class=\"flex-grow\">\n {{ 'Progress' | translate }}\n </div>\n <div class=\"col-4\">\n {{ 'Status' | translate }}\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\"></div>\n </div>\n </div>\n <div\n class=\"d-contents\"\n *c8yFor=\"\n let bulkOperation of bulkOperations$ | async;\n let i = index;\n realtime: realtime;\n pipe: filterPipe;\n comparator: compareOperations.bind(this);\n loadMore: 'auto'\n \"\n >\n <c8y-bulk-operation-list-item\n class=\"d-contents\"\n [bulkOperation]=\"bulkOperation\"\n (reload)=\"reload$.next()\"\n (showFailedOperation)=\"openFailedOperation($event)\"\n ></c8y-bulk-operation-list-item>\n </div>\n</c8y-list-group>\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\nimport { CoreModule, Route } from '@c8y/ngx-components';\nimport { StatusFilterModule } from '@c8y/ngx-components/operations/status-filter';\nimport { BulkOperationSchedulerModule } from '@c8y/ngx-components/operations/bulk-operation-scheduler';\nimport { BulkOperationListItemModule } from '@c8y/ngx-components/operations/bulk-operation-list-item';\n\nimport { BulkOperationsListComponent } from './bulk-operations-list.component';\nimport { BulkOperationModalsService } from './modals/bulk-operation-modals.service';\nimport { BulkOperationsModalComponent } from './modals/bulk-operations-modal.component';\n\nexport const bulkOperationListRoutes: Route[] = [\n {\n path: 'devicecontrol/bulk',\n component: BulkOperationsListComponent\n }\n];\n\n/**\n * This module allows for displaying the list of bulk operations and their details.\n */\n@NgModule({\n imports: [\n CoreModule,\n PopoverModule,\n TooltipModule,\n StatusFilterModule,\n BulkOperationSchedulerModule,\n BulkOperationListItemModule,\n RouterModule.forChild(bulkOperationListRoutes)\n ],\n providers: [BulkOperationModalsService],\n declarations: [BulkOperationsListComponent, BulkOperationsModalComponent],\n exports: [BulkOperationsListComponent, BulkOperationsModalComponent]\n})\nexport class BulkOperationsListModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","i5","i1","i2","i3.BulkOperationModalsService","i4"],"mappings":"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"}