@unipin/angular-applet 18.4.3 → 18.4.5

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.
@@ -28,7 +28,7 @@ export class ApprovalService {
28
28
  return this.apollo.mutate({
29
29
  variables,
30
30
  mutation: gql `
31
- mutation ${variables.isApprove ? 'ApproveApproval' : 'DeclineApproval'}($approvalGroupGuid: String, $guids: String, $isApprove: Boolean, $reason: String) {
31
+ mutation ${variables.isApprove ? 'ApproveApproval' : 'DeclineApproval'}($approvalGroupGuid: String, $guids: [String], $isApprove: Boolean, $reason: String) {
32
32
  approvalMsApproveOrDeclineRequest(approvalGroupGuid: $approvalGroupGuid, guids: $guids, isApprove: $isApprove, reason: $reason)
33
33
  }
34
34
  `
@@ -43,4 +43,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
43
43
  providedIn: 'root'
44
44
  }]
45
45
  }], ctorParameters: () => [{ type: i1.Apollo }] });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9hcHByb3ZhbC9zZXJ2aWNlcy9hcHByb3ZhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFVLEdBQUcsRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBTTdELE1BQU0sT0FBTyxlQUFlO0lBSTFCLFlBQ3FCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBSGhCLGFBQVEsR0FBVyxnRkFBZ0YsQ0FBQztJQUluSCxDQUFDO0lBRUUsS0FBSyxDQUFDLEtBQXVCLEVBQUUsWUFBb0IsRUFBRSxFQUFFLFdBQXlCO1FBQ3JGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDdkIsV0FBVztZQUNYLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRTtZQUNwQixLQUFLLEVBQUUsR0FBRyxDQUFBOzs7O2dCQUlDLElBQUksQ0FBQyxRQUFTO2dCQUNkLFNBQVU7O2NBRVosS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRzs7O09BRzdDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE9BQU8sQ0FBQyxTQUF3RDtRQUNyRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3hCLFNBQVM7WUFDVCxRQUFRLEVBQUUsR0FBRyxDQUFBO21CQUNDLFNBQVMsQ0FBQyxTQUFTLENBQUEsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxpQkFBa0I7OztPQUd4RTtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBbkNVLGVBQWU7a0hBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXBvbGxvUXVlcnlSZXN1bHQsIEZldGNoUG9saWN5IH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQgeyBBcG9sbG8sIGdxbCwgTXV0YXRpb25SZXN1bHQgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQgeyBBcHByb3ZhbENyaXRlcmlhLCBQYWdlYWJsZVJlc3BvbnNlLCBNdXRhdGlvbkFwcHJvdmFsTXNBcHByb3ZlT3JEZWNsaW5lUmVxdWVzdEFyZ3MgfSBmcm9tICcuLy4uLy4uLy4uLy4uL2dyYXBocWwvZ2VuZXJhdGVkJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXBwcm92YWxTZXJ2aWNlIHtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYmFzZUF0dHI6IHN0cmluZyA9IGBndWlkIGNyZWF0ZWRBdCBlbnRpdHkgcmVtYXJrIHNvdXJjZVBsYXRmb3JtIHN0YXR1cyB0eXBlIGFwcHJvdmFsR3JvdXAgeyBndWlkIH1gO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSBhcG9sbG86IEFwb2xsb1xuICApIHsgfVxuXG4gIHB1YmxpYyBxdWVyeShpbnB1dDogQXBwcm92YWxDcml0ZXJpYSwgZXh0cmFBdHRyOiBzdHJpbmcgPSAnJywgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeSk6IE9ic2VydmFibGU8QXBvbGxvUXVlcnlSZXN1bHQ8eyBhcHByb3ZhbE1zQXBwcm92YWxzOiBQYWdlYWJsZVJlc3BvbnNlIH0+PntcbiAgICByZXR1cm4gdGhpcy5hcG9sbG8ucXVlcnkoe1xuICAgICAgZmV0Y2hQb2xpY3ksXG4gICAgICB2YXJpYWJsZXM6IHsgaW5wdXQgfSxcbiAgICAgIHF1ZXJ5OiBncWxgXG4gICAgICAgIHF1ZXJ5IFF1ZXJ5QXBwcm92YWwoJGlucHV0OiBBcHByb3ZhbENyaXRlcmlhKSB7XG4gICAgICAgICAgYXBwcm92YWxNc0FwcHJvdmFscyhpbnB1dDogJGlucHV0KSB7XG4gICAgICAgICAgICBkYXRhIHtcbiAgICAgICAgICAgICAgJHsgdGhpcy5iYXNlQXR0ciB9XG4gICAgICAgICAgICAgICR7IGV4dHJhQXR0ciB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkeyBpbnB1dC5wYWdlID09PSAwPyAndG90YWxSZWNvcmQnIDogJycgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlcXVlc3QodmFyaWFibGVzOiBNdXRhdGlvbkFwcHJvdmFsTXNBcHByb3ZlT3JEZWNsaW5lUmVxdWVzdEFyZ3MpOiBPYnNlcnZhYmxlPE11dGF0aW9uUmVzdWx0PHsgYXBwcm92YWxNc0FwcHJvdmVPckRlY2xpbmVSZXF1ZXN0OiBzdHJpbmcgfT4+e1xuICAgIHJldHVybiB0aGlzLmFwb2xsby5tdXRhdGUoe1xuICAgICAgdmFyaWFibGVzLFxuICAgICAgbXV0YXRpb246IGdxbGBcbiAgICAgICAgbXV0YXRpb24gJHsgdmFyaWFibGVzLmlzQXBwcm92ZT8gJ0FwcHJvdmVBcHByb3ZhbCcgOiAnRGVjbGluZUFwcHJvdmFsJyB9KCRhcHByb3ZhbEdyb3VwR3VpZDogU3RyaW5nLCAkZ3VpZHM6IFN0cmluZywgJGlzQXBwcm92ZTogQm9vbGVhbiwgJHJlYXNvbjogU3RyaW5nKSB7XG4gICAgICAgICAgYXBwcm92YWxNc0FwcHJvdmVPckRlY2xpbmVSZXF1ZXN0KGFwcHJvdmFsR3JvdXBHdWlkOiAkYXBwcm92YWxHcm91cEd1aWQsIGd1aWRzOiAkZ3VpZHMsIGlzQXBwcm92ZTogJGlzQXBwcm92ZSwgcmVhc29uOiAkcmVhc29uKVxuICAgICAgICB9XG4gICAgICBgXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9hcHByb3ZhbC9zZXJ2aWNlcy9hcHByb3ZhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFVLEdBQUcsRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBTTdELE1BQU0sT0FBTyxlQUFlO0lBSTFCLFlBQ3FCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBSGhCLGFBQVEsR0FBVyxnRkFBZ0YsQ0FBQztJQUluSCxDQUFDO0lBRUUsS0FBSyxDQUFDLEtBQXVCLEVBQUUsWUFBb0IsRUFBRSxFQUFFLFdBQXlCO1FBQ3JGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDdkIsV0FBVztZQUNYLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRTtZQUNwQixLQUFLLEVBQUUsR0FBRyxDQUFBOzs7O2dCQUlDLElBQUksQ0FBQyxRQUFTO2dCQUNkLFNBQVU7O2NBRVosS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRzs7O09BRzdDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE9BQU8sQ0FBQyxTQUF3RDtRQUNyRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3hCLFNBQVM7WUFDVCxRQUFRLEVBQUUsR0FBRyxDQUFBO21CQUNDLFNBQVMsQ0FBQyxTQUFTLENBQUEsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxpQkFBa0I7OztPQUd4RTtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBbkNVLGVBQWU7a0hBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXBvbGxvUXVlcnlSZXN1bHQsIEZldGNoUG9saWN5IH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQgeyBBcG9sbG8sIGdxbCwgTXV0YXRpb25SZXN1bHQgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQgeyBBcHByb3ZhbENyaXRlcmlhLCBQYWdlYWJsZVJlc3BvbnNlLCBNdXRhdGlvbkFwcHJvdmFsTXNBcHByb3ZlT3JEZWNsaW5lUmVxdWVzdEFyZ3MgfSBmcm9tICcuLy4uLy4uLy4uLy4uL2dyYXBocWwvZ2VuZXJhdGVkJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXBwcm92YWxTZXJ2aWNlIHtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYmFzZUF0dHI6IHN0cmluZyA9IGBndWlkIGNyZWF0ZWRBdCBlbnRpdHkgcmVtYXJrIHNvdXJjZVBsYXRmb3JtIHN0YXR1cyB0eXBlIGFwcHJvdmFsR3JvdXAgeyBndWlkIH1gO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSBhcG9sbG86IEFwb2xsb1xuICApIHsgfVxuXG4gIHB1YmxpYyBxdWVyeShpbnB1dDogQXBwcm92YWxDcml0ZXJpYSwgZXh0cmFBdHRyOiBzdHJpbmcgPSAnJywgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeSk6IE9ic2VydmFibGU8QXBvbGxvUXVlcnlSZXN1bHQ8eyBhcHByb3ZhbE1zQXBwcm92YWxzOiBQYWdlYWJsZVJlc3BvbnNlIH0+PntcbiAgICByZXR1cm4gdGhpcy5hcG9sbG8ucXVlcnkoe1xuICAgICAgZmV0Y2hQb2xpY3ksXG4gICAgICB2YXJpYWJsZXM6IHsgaW5wdXQgfSxcbiAgICAgIHF1ZXJ5OiBncWxgXG4gICAgICAgIHF1ZXJ5IFF1ZXJ5QXBwcm92YWwoJGlucHV0OiBBcHByb3ZhbENyaXRlcmlhKSB7XG4gICAgICAgICAgYXBwcm92YWxNc0FwcHJvdmFscyhpbnB1dDogJGlucHV0KSB7XG4gICAgICAgICAgICBkYXRhIHtcbiAgICAgICAgICAgICAgJHsgdGhpcy5iYXNlQXR0ciB9XG4gICAgICAgICAgICAgICR7IGV4dHJhQXR0ciB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkeyBpbnB1dC5wYWdlID09PSAwPyAndG90YWxSZWNvcmQnIDogJycgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlcXVlc3QodmFyaWFibGVzOiBNdXRhdGlvbkFwcHJvdmFsTXNBcHByb3ZlT3JEZWNsaW5lUmVxdWVzdEFyZ3MpOiBPYnNlcnZhYmxlPE11dGF0aW9uUmVzdWx0PHsgYXBwcm92YWxNc0FwcHJvdmVPckRlY2xpbmVSZXF1ZXN0OiBzdHJpbmcgfT4+e1xuICAgIHJldHVybiB0aGlzLmFwb2xsby5tdXRhdGUoe1xuICAgICAgdmFyaWFibGVzLFxuICAgICAgbXV0YXRpb246IGdxbGBcbiAgICAgICAgbXV0YXRpb24gJHsgdmFyaWFibGVzLmlzQXBwcm92ZT8gJ0FwcHJvdmVBcHByb3ZhbCcgOiAnRGVjbGluZUFwcHJvdmFsJyB9KCRhcHByb3ZhbEdyb3VwR3VpZDogU3RyaW5nLCAkZ3VpZHM6IFtTdHJpbmddLCAkaXNBcHByb3ZlOiBCb29sZWFuLCAkcmVhc29uOiBTdHJpbmcpIHtcbiAgICAgICAgICBhcHByb3ZhbE1zQXBwcm92ZU9yRGVjbGluZVJlcXVlc3QoYXBwcm92YWxHcm91cEd1aWQ6ICRhcHByb3ZhbEdyb3VwR3VpZCwgZ3VpZHM6ICRndWlkcywgaXNBcHByb3ZlOiAkaXNBcHByb3ZlLCByZWFzb246ICRyZWFzb24pXG4gICAgICAgIH1cbiAgICAgIGBcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,13 +1,10 @@
1
1
  import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { RouterModule } from '@angular/router';
2
+ import { RouterLink, RouterLinkActive } from '@angular/router';
4
3
  import { IonicModule } from '@ionic/angular';
5
4
  import { fromEvent } from 'rxjs';
6
5
  import * as i0 from "@angular/core";
7
6
  import * as i1 from "../../../modules";
8
7
  import * as i2 from "@ionic/angular";
9
- import * as i3 from "@angular/router";
10
- import * as i4 from "@angular/common";
11
8
  export class AppletContainerComponent {
12
9
  constructor(config, ch, permissionService) {
13
10
  this.config = config;
@@ -18,8 +15,10 @@ export class AppletContainerComponent {
18
15
  this.isMenuActive = false;
19
16
  }
20
17
  ngOnInit() {
21
- this.sub = this.permissionService.permModules.subscribe((permModules) => {
22
- this.isHidden = this.config.containers.map(({ permModule }) => !permModules.includes(permModule));
18
+ this.sub = this.permissionService.permModules.subscribe((listPermModule) => {
19
+ this.isHidden = this.config.containers.map(({ permModule }) => {
20
+ return !listPermModule.includes(permModule);
21
+ });
23
22
  });
24
23
  this.subEvent = fromEvent(window, 'menuEvent').subscribe((event) => {
25
24
  this.isMenuActive = event.detail.isActive;
@@ -30,12 +29,14 @@ export class AppletContainerComponent {
30
29
  this.sub.unsubscribe();
31
30
  this.subEvent.unsubscribe();
32
31
  }
33
- toggleSidenav() { this.isCollapsed = !this.isCollapsed; }
32
+ toggleSidenav() {
33
+ this.isCollapsed = !this.isCollapsed;
34
+ }
34
35
  selectMenu() {
35
36
  dispatchEvent(new CustomEvent('menuEvent', { detail: { isActive: false } }));
36
37
  }
37
38
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: AppletContainerComponent, deps: [{ token: 'APPLET_CONFIG' }, { token: i0.ChangeDetectorRef }, { token: i1.PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
38
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.4", type: AppletContainerComponent, isStandalone: true, selector: "up-applet-container", host: { classAttribute: "d-flex h-100 w-100" }, ngImport: i0, template: "<div class=\"sidenav flex-shrink-0 h-100 py-4 d-flex flex-column\" [class.collapsed]=\"isCollapsed\" [class.show]=\"isMenuActive\">\n <div class=\"logo-container px-3 pb-3 border-bottom flex-shrink-0 position-relative d-flex align-items-center gap-3 d-none d-md-flex\">\n <img alt=\"Applet Icon\" width=\"44px\" height=\"44px\" class=\"rounded\" [src]=\"config.icon\" />\n\n <div class=\"info w-75 pe-2\">\n <div class=\"name fw-medium text-truncate\">{{ config.name }}</div>\n <div class=\"tenant pt-1 fw-medium\">v{{ config.version }}</div>\n </div>\n\n <button class=\"btn-close cursor-pointer position-absolute border-0 rounded-circle d-none d-md-block\" (click)=\"toggleSidenav()\">\n <ion-icon name=\"chevron-forward\" class=\"mt-1\" />\n </button>\n </div>\n\n <div class=\"flex-grow-1 px-3 pt-3 overflow-y-auto d-none d-md-block\" (click)=\"selectMenu()\">\n <a class=\"nav align-items-center text-decoration-none gap-2 rounded mb-1 {{ isHidden[i]? 'd-none' : 'd-flex' }}\" title=\"{{ c.label }}\" [routerLink]=\"c.path\" routerLinkActive=\"fw-medium\" *ngFor=\"let c of config.containers; let i = index\">\n <ion-icon name=\"{{ c.icon }}\" />\n <div class=\"text-truncate\">{{ c.label }}</div>\n </a>\n </div>\n\n <div class=\"flex-shrink-0 px-3 pt-3 border-top d-none d-md-block\" *ngIf=\"config.enabledSetting\" (click)=\"selectMenu()\">\n <a class=\"nav d-flex align-items-center text-decoration-none gap-2 rounded\" title=\"Setting\" routerLink=\"setting\" routerLinkActive=\"fw-medium\">\n <ion-icon name=\"settings\" />\n <div class=\"text-truncate\">Setting</div>\n </a>\n </div>\n</div>\n\n<div class=\"flex-grow-1 w-100 overflow-y-auto\">\n <ng-content />\n</div>\n", styles: [".info{display:none}.name{font-size:16px}.tenant{color:#757575}.sidenav{width:73px;background:#f8f9fb;transition:all .2s ease;border-right:1px solid #D1D1D1}.sidenav.collapsed{width:250px}.sidenav.collapsed .btn-close{transform:rotate(180deg)}.sidenav.collapsed .nav div,.sidenav.collapsed .info{display:block}.sidenav.show{width:250px}.sidenav.show .logo-container{display:flex!important}.sidenav.show div:not(.logo-container),.sidenav.show img,.sidenav.show .info{display:block!important}.btn-close{width:35px;height:35px;bottom:23px;right:-17px;z-index:999;transition:all .3s ease;background-color:#f8f9fb;box-shadow:0 0 .15rem #616161}.btn-close ion-icon{color:#616161;font-size:16px}@media (max-width: 768px){.btn-close{right:-18px}.btn-close ion-icon{position:absolute;right:9px;bottom:10px}}.nav{padding:12px;color:#616161;transition:all .3s ease}.nav.fw-medium,.nav:hover{background-color:#fef3ee;color:#ed6b26!important}.nav ion-icon{font-size:20px}.nav div{display:none;font-size:16px}@media (max-width: 767px){.sidenav{width:0;z-index:2;position:absolute!important}}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i2.RouterLinkWithHrefDelegate, selector: "a[routerLink],area[routerLink]" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: AppletContainerComponent, isStandalone: true, selector: "up-applet-container", host: { classAttribute: "d-flex h-100 w-100" }, ngImport: i0, template: "<div class=\"sidenav flex-shrink-0 h-100 py-4 d-flex flex-column\" [class.collapsed]=\"isCollapsed\" [class.show]=\"isMenuActive\">\n <div class=\"logo-container px-3 pb-3 border-bottom flex-shrink-0 position-relative d-flex align-items-center gap-3 d-none d-md-flex\">\n <img alt=\"Applet Icon\" width=\"44px\" height=\"44px\" class=\"rounded\" [src]=\"config.icon\" />\n\n <div class=\"info w-75 pe-2\">\n <div class=\"name fw-medium text-truncate\">{{ config.name }}</div>\n \n <div class=\"tenant pt-1 fw-medium\">\n v{{ config.version }}\n </div>\n </div>\n\n <button class=\"btn-close cursor-pointer position-absolute border-0 rounded-circle d-none d-md-block\" (click)=\"toggleSidenav()\">\n <ion-icon name=\"chevron-forward\" class=\"mt-1\" />\n </button>\n </div>\n\n <div class=\"flex-grow-1 px-3 pt-3 overflow-y-auto d-none d-md-block\" (click)=\"selectMenu()\">\n @for (c of config.containers; track $index) {\n <a class=\"nav align-items-center text-decoration-none gap-2 rounded mb-1 {{ isHidden[$index]? 'd-none' : 'd-flex' }}\" routerLinkActive=\"fw-medium\" title=\"{{ c.label }}\" [routerLink]=\"c.path\">\n <ion-icon name=\"{{ c.icon }}\" />\n <div class=\"text-truncate\">{{ c.label }}</div>\n </a>\n }\n </div>\n\n @if (config.enabledSetting) {\n <div class=\"flex-shrink-0 px-3 pt-3 border-top d-none d-md-block\" (click)=\"selectMenu()\">\n <a class=\"nav d-flex align-items-center text-decoration-none gap-2 rounded\" title=\"Setting\" routerLink=\"setting\" routerLinkActive=\"fw-medium\">\n <ion-icon name=\"settings\" />\n <div class=\"text-truncate\">Setting</div>\n </a>\n </div>\n }\n</div>\n\n<div class=\"flex-grow-1 w-100 overflow-y-auto\">\n <ng-content />\n</div>\n", styles: [".info{display:none}.name{font-size:16px}.tenant{color:#757575}.sidenav{width:73px;background:#f8f9fb;transition:all .2s ease;border-right:1px solid #D1D1D1}.sidenav.collapsed{width:250px}.sidenav.collapsed .btn-close{transform:rotate(180deg)}.sidenav.collapsed .nav div,.sidenav.collapsed .info{display:block}.sidenav.show{width:250px}.sidenav.show .logo-container{display:flex!important}.sidenav.show div:not(.logo-container),.sidenav.show img,.sidenav.show .info{display:block!important}.btn-close{width:35px;height:35px;bottom:23px;right:-17px;z-index:999;transition:all .3s ease;background-color:#f8f9fb;box-shadow:0 0 .15rem #616161}.btn-close ion-icon{color:#616161;font-size:16px}@media (max-width: 768px){.btn-close{right:-18px}.btn-close ion-icon{position:absolute;right:9px;bottom:10px}}.nav{padding:12px;color:#616161;transition:all .3s ease}.nav.fw-medium,.nav:hover{background-color:#fef3ee;color:#ed6b26!important}.nav ion-icon{font-size:20px}.nav div{display:none;font-size:16px}@media (max-width: 767px){.sidenav{width:0;z-index:2;position:absolute!important}}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i2.RouterLinkWithHrefDelegate, selector: "a[routerLink],area[routerLink]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39
40
  }
40
41
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: AppletContainerComponent, decorators: [{
41
42
  type: Component,
@@ -43,11 +44,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
43
44
  class: 'd-flex h-100 w-100'
44
45
  }, imports: [
45
46
  IonicModule,
46
- RouterModule,
47
- CommonModule
48
- ], template: "<div class=\"sidenav flex-shrink-0 h-100 py-4 d-flex flex-column\" [class.collapsed]=\"isCollapsed\" [class.show]=\"isMenuActive\">\n <div class=\"logo-container px-3 pb-3 border-bottom flex-shrink-0 position-relative d-flex align-items-center gap-3 d-none d-md-flex\">\n <img alt=\"Applet Icon\" width=\"44px\" height=\"44px\" class=\"rounded\" [src]=\"config.icon\" />\n\n <div class=\"info w-75 pe-2\">\n <div class=\"name fw-medium text-truncate\">{{ config.name }}</div>\n <div class=\"tenant pt-1 fw-medium\">v{{ config.version }}</div>\n </div>\n\n <button class=\"btn-close cursor-pointer position-absolute border-0 rounded-circle d-none d-md-block\" (click)=\"toggleSidenav()\">\n <ion-icon name=\"chevron-forward\" class=\"mt-1\" />\n </button>\n </div>\n\n <div class=\"flex-grow-1 px-3 pt-3 overflow-y-auto d-none d-md-block\" (click)=\"selectMenu()\">\n <a class=\"nav align-items-center text-decoration-none gap-2 rounded mb-1 {{ isHidden[i]? 'd-none' : 'd-flex' }}\" title=\"{{ c.label }}\" [routerLink]=\"c.path\" routerLinkActive=\"fw-medium\" *ngFor=\"let c of config.containers; let i = index\">\n <ion-icon name=\"{{ c.icon }}\" />\n <div class=\"text-truncate\">{{ c.label }}</div>\n </a>\n </div>\n\n <div class=\"flex-shrink-0 px-3 pt-3 border-top d-none d-md-block\" *ngIf=\"config.enabledSetting\" (click)=\"selectMenu()\">\n <a class=\"nav d-flex align-items-center text-decoration-none gap-2 rounded\" title=\"Setting\" routerLink=\"setting\" routerLinkActive=\"fw-medium\">\n <ion-icon name=\"settings\" />\n <div class=\"text-truncate\">Setting</div>\n </a>\n </div>\n</div>\n\n<div class=\"flex-grow-1 w-100 overflow-y-auto\">\n <ng-content />\n</div>\n", styles: [".info{display:none}.name{font-size:16px}.tenant{color:#757575}.sidenav{width:73px;background:#f8f9fb;transition:all .2s ease;border-right:1px solid #D1D1D1}.sidenav.collapsed{width:250px}.sidenav.collapsed .btn-close{transform:rotate(180deg)}.sidenav.collapsed .nav div,.sidenav.collapsed .info{display:block}.sidenav.show{width:250px}.sidenav.show .logo-container{display:flex!important}.sidenav.show div:not(.logo-container),.sidenav.show img,.sidenav.show .info{display:block!important}.btn-close{width:35px;height:35px;bottom:23px;right:-17px;z-index:999;transition:all .3s ease;background-color:#f8f9fb;box-shadow:0 0 .15rem #616161}.btn-close ion-icon{color:#616161;font-size:16px}@media (max-width: 768px){.btn-close{right:-18px}.btn-close ion-icon{position:absolute;right:9px;bottom:10px}}.nav{padding:12px;color:#616161;transition:all .3s ease}.nav.fw-medium,.nav:hover{background-color:#fef3ee;color:#ed6b26!important}.nav ion-icon{font-size:20px}.nav div{display:none;font-size:16px}@media (max-width: 767px){.sidenav{width:0;z-index:2;position:absolute!important}}\n"] }]
47
+ RouterLink,
48
+ RouterLinkActive
49
+ ], template: "<div class=\"sidenav flex-shrink-0 h-100 py-4 d-flex flex-column\" [class.collapsed]=\"isCollapsed\" [class.show]=\"isMenuActive\">\n <div class=\"logo-container px-3 pb-3 border-bottom flex-shrink-0 position-relative d-flex align-items-center gap-3 d-none d-md-flex\">\n <img alt=\"Applet Icon\" width=\"44px\" height=\"44px\" class=\"rounded\" [src]=\"config.icon\" />\n\n <div class=\"info w-75 pe-2\">\n <div class=\"name fw-medium text-truncate\">{{ config.name }}</div>\n \n <div class=\"tenant pt-1 fw-medium\">\n v{{ config.version }}\n </div>\n </div>\n\n <button class=\"btn-close cursor-pointer position-absolute border-0 rounded-circle d-none d-md-block\" (click)=\"toggleSidenav()\">\n <ion-icon name=\"chevron-forward\" class=\"mt-1\" />\n </button>\n </div>\n\n <div class=\"flex-grow-1 px-3 pt-3 overflow-y-auto d-none d-md-block\" (click)=\"selectMenu()\">\n @for (c of config.containers; track $index) {\n <a class=\"nav align-items-center text-decoration-none gap-2 rounded mb-1 {{ isHidden[$index]? 'd-none' : 'd-flex' }}\" routerLinkActive=\"fw-medium\" title=\"{{ c.label }}\" [routerLink]=\"c.path\">\n <ion-icon name=\"{{ c.icon }}\" />\n <div class=\"text-truncate\">{{ c.label }}</div>\n </a>\n }\n </div>\n\n @if (config.enabledSetting) {\n <div class=\"flex-shrink-0 px-3 pt-3 border-top d-none d-md-block\" (click)=\"selectMenu()\">\n <a class=\"nav d-flex align-items-center text-decoration-none gap-2 rounded\" title=\"Setting\" routerLink=\"setting\" routerLinkActive=\"fw-medium\">\n <ion-icon name=\"settings\" />\n <div class=\"text-truncate\">Setting</div>\n </a>\n </div>\n }\n</div>\n\n<div class=\"flex-grow-1 w-100 overflow-y-auto\">\n <ng-content />\n</div>\n", styles: [".info{display:none}.name{font-size:16px}.tenant{color:#757575}.sidenav{width:73px;background:#f8f9fb;transition:all .2s ease;border-right:1px solid #D1D1D1}.sidenav.collapsed{width:250px}.sidenav.collapsed .btn-close{transform:rotate(180deg)}.sidenav.collapsed .nav div,.sidenav.collapsed .info{display:block}.sidenav.show{width:250px}.sidenav.show .logo-container{display:flex!important}.sidenav.show div:not(.logo-container),.sidenav.show img,.sidenav.show .info{display:block!important}.btn-close{width:35px;height:35px;bottom:23px;right:-17px;z-index:999;transition:all .3s ease;background-color:#f8f9fb;box-shadow:0 0 .15rem #616161}.btn-close ion-icon{color:#616161;font-size:16px}@media (max-width: 768px){.btn-close{right:-18px}.btn-close ion-icon{position:absolute;right:9px;bottom:10px}}.nav{padding:12px;color:#616161;transition:all .3s ease}.nav.fw-medium,.nav:hover{background-color:#fef3ee;color:#ed6b26!important}.nav ion-icon{font-size:20px}.nav div{display:none;font-size:16px}@media (max-width: 767px){.sidenav{width:0;z-index:2;position:absolute!important}}\n"] }]
49
50
  }], ctorParameters: () => [{ type: undefined, decorators: [{
50
51
  type: Inject,
51
52
  args: ['APPLET_CONFIG']
52
53
  }] }, { type: i0.ChangeDetectorRef }, { type: i1.PermissionService }] });
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGV0LWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvY29udGFpbmVycy9hcHBsZXQtY29udGFpbmVyL2FwcGxldC1jb250YWluZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2NvbnRhaW5lcnMvYXBwbGV0LWNvbnRhaW5lci9hcHBsZXQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQWtCL0MsTUFBTSxPQUFPLHdCQUF3QjtJQXlCbkMsWUFDMkMsTUFPeEMsRUFDa0IsRUFBcUIsRUFDckIsaUJBQW9DO1FBVGQsV0FBTSxHQUFOLE1BQU0sQ0FPOUM7UUFDa0IsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQTVCbEQsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFPN0IsYUFBUSxHQUFjLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFPdEUsaUJBQVksR0FBWSxLQUFLLENBQUM7SUFlakMsQ0FBQztJQU1FLFFBQVE7UUFDYixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBcUIsRUFBRSxFQUFFO1lBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEcsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDdEUsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUMxQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQU1NLFdBQVc7UUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFPTSxhQUFhLEtBQVUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBUTlELFVBQVU7UUFDZixhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7OEdBN0VVLHdCQUF3QixrQkEwQnpCLGVBQWU7a0dBMUJkLHdCQUF3QiwrSEN0QnJDLHN6REFnQ0EsK21DRGZJLFdBQVcsMlNBQ1gsWUFBWSxnZkFDWixZQUFZOzsyRkFHSCx3QkFBd0I7a0JBZnBDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNKLEtBQUssRUFBRSxvQkFBb0I7cUJBQzVCLFdBQ1E7d0JBQ1AsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLFlBQVk7cUJBQ2I7OzBCQTRCRSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL21vZHVsZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd1cC1hcHBsZXQtY29udGFpbmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcGxldC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcHBsZXQtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdkLWZsZXggaC0xMDAgdy0xMDAnXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBJb25pY01vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQXBwbGV0Q29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKlxuICAgKiBBIGZsYWcgdmFyaWFibGUgdGhhdCB1c2VkIHRvIGNvbnRyb2wgc2lkZWJhci4gV2hlbiBzZXQgdGhlIHRoZSB2YWx1ZSB0byB0cnVlLCB0aGUgY29tcG9uZW50IHdpbGwgb3BlbiB0aGUgc2lkZWJhci5cbiAgICogd2hlbiBzZXQgdGhlIHZhbHVlIHRvIGZhbHNlLCB0aGUgY29tcG9uZW50IHdpbGwgY2xvc2UgdGhlIHNpZGViYXIuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgcHVibGljIGlzQ29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgZmxhZyB2YXJpYWJsZSB0aGF0IHVzZWQgdG8gY29udHJvbCBzaWRlYmFyIG1lbnUuIFdoZW4gc2V0IHZhbHVlIHRvIHRydWUsIHRoZSBjb21wb25lbnQgd2lsbCBoaWRlIHRoZSBzaWRlYmFyIG1lbnUuXG4gICAqIFdoZW4gc2V0IGZhbHNlLCB0aGUgY29tcG9uZW50IHdpbGwgc2hvdyB0aGUgc2lkZWJhciBtZW51LlxuICAgKiBAdHlwZSB7Ym9vbGVhbltdfVxuICAgKi9cbiAgcHVibGljIGlzSGlkZGVuOiBib29sZWFuW10gPSBBcnJheSh0aGlzLmNvbmZpZy5jb250YWluZXJzLmxlbmd0aCkuZmlsbCh0cnVlKTtcbiAgXG4gIC8qKlxuICAgKiBBIGZsYWcgdmFyaWFibGUgZm9yIGluZGljYXRlcyB3aGV0aGVyIHRoZSBzaWRlYmFyIG1lbnUgaXMgYWN0aXZlIG9yIG5vdCBpbiBtb2JpbGUgdmlldy5cbiAgICogV2hlbiBzZXQgZmFsc2UgdGhlIHNpZGViYXIgbWVudSB3aWxsIGJlIGhpZGRlblxuICAgKiBAdHlwZSB7Ym9vbGVhbltdfVxuICAgKi9cbiAgcHVibGljIGlzTWVudUFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgc3ViITogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgc3ViRXZlbnQhOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdCgnQVBQTEVUX0NPTkZJRycpIHB1YmxpYyByZWFkb25seSBjb25maWc6IHtcbiAgICAgIGljb246IHN0cmluZyxcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIHRlbmFudE5hbWU6IHN0cmluZyxcbiAgICAgIGVuYWJsZWRTZXR0aW5nOiBib29sZWFuLFxuICAgICAgY29udGFpbmVyczogeyBpY29uOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcsIHBhdGg6IGAvJHsgc3RyaW5nIH1gLCBwZXJtTW9kdWxlOiBzdHJpbmcgfVtdLFxuICAgICAgdmVyc2lvbjogc3RyaW5nXG4gICAgfSxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2g6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2VcbiAgKSB7IH1cblxuICAvKipcbiAgICogTGlmZWN5Y2xlIGhvb2sgdG8gaW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50cy5cbiAgICogU3Vic2NyaWJlcyB0byBwZXJtaXNzaW9uIGNoYW5nZXMgYW5kIHdpbmRvdyBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZHtcbiAgICB0aGlzLnN1YiA9IHRoaXMucGVybWlzc2lvblNlcnZpY2UucGVybU1vZHVsZXMuc3Vic2NyaWJlKChwZXJtTW9kdWxlczogc3RyaW5nW10pID0+IHtcbiAgICAgIHRoaXMuaXNIaWRkZW4gPSB0aGlzLmNvbmZpZy5jb250YWluZXJzLm1hcCgoeyBwZXJtTW9kdWxlIH0pID0+ICFwZXJtTW9kdWxlcy5pbmNsdWRlcyhwZXJtTW9kdWxlKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YkV2ZW50ID0gZnJvbUV2ZW50KHdpbmRvdywgJ21lbnVFdmVudCcpLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5pc01lbnVBY3RpdmUgPSBldmVudC5kZXRhaWwuaXNBY3RpdmU7XG4gICAgICB0aGlzLmNoLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpZmVjeWNsZSBob29rIHRvIGhhbmRsZSBjb21wb25lbnQgZGVzdHJ1Y3Rpb24uXG4gICAqIENsZWFucyB1cCBzdWJzY3JpcHRpb25zIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzXG4gICAqL1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZHsgXG4gICAgdGhpcy5zdWIudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnN1YkV2ZW50LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgaXQgd2lsbCBjaGFuZ2UgdGhlIHZhbHVlIG9mIGlzQ29sbGFwc2VkIHRvIGl0cyBvcHBvc2l0ZSB2YWx1ZS4gXG4gICAqIElmIGlzQ29sbGFwc2VkIGlzIGN1cnJlbnRseSB0cnVlLCBpdCB3aWxsIGJlIHNldCB0byBmYWxzZSwgYW5kIGlmIGl0IGlzIGN1cnJlbnRseSBmYWxzZSwgaXQgd2lsbCBiZSBzZXQgdG8gdHJ1ZS4gXG4gICAqIFRoaXMgbWV0aG9kIGlzIHR5cGljYWxseSB1c2VkIHRvIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBhIHNpZGUgbmF2aWdhdGlvbiBtZW51LlxuICAgKi9cbiAgcHVibGljIHRvZ2dsZVNpZGVuYXYoKTogdm9pZHsgdGhpcy5pc0NvbGxhcHNlZCA9ICF0aGlzLmlzQ29sbGFwc2VkOyB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgbWVudSBzZWxlY3Rpb24gYnkgZGlzcGF0Y2hpbmcgYSBjdXN0b20gZXZlbnQuXG4gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGEgc2lkZWJhciBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqIEl0IGRpc3BhdGNoZXMgYSBjdXN0b20gJ21lbnVFdmVudCcgd2l0aCBkZXRhaWwgaW5kaWNhdGluZyB0aGUgbWVudSBpcyBpbmFjdGl2ZS5cbiAgICogVGhpcyBldmVudCBpcyB0eXBpY2FsbHkgdXNlZCB0byBjbG9zZSB0aGUgc2lkZWJhciBtZW51LlxuICAgKi9cbiAgcHVibGljIHNlbGVjdE1lbnUoKTogdm9pZHtcbiAgICBkaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbWVudUV2ZW50JywgeyBkZXRhaWw6IHsgaXNBY3RpdmU6IGZhbHNlIH0gfSkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2lkZW5hdiBmbGV4LXNocmluay0wIGgtMTAwIHB5LTQgZC1mbGV4IGZsZXgtY29sdW1uXCIgW2NsYXNzLmNvbGxhcHNlZF09XCJpc0NvbGxhcHNlZFwiIFtjbGFzcy5zaG93XT1cImlzTWVudUFjdGl2ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lciBweC0zIHBiLTMgYm9yZGVyLWJvdHRvbSBmbGV4LXNocmluay0wIHBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgZC1ub25lIGQtbWQtZmxleFwiPlxuICAgICAgICA8aW1nIGFsdD1cIkFwcGxldCBJY29uXCIgd2lkdGg9XCI0NHB4XCIgaGVpZ2h0PVwiNDRweFwiIGNsYXNzPVwicm91bmRlZFwiIFtzcmNdPVwiY29uZmlnLmljb25cIiAvPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvIHctNzUgcGUtMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWUgZnctbWVkaXVtIHRleHQtdHJ1bmNhdGVcIj57eyBjb25maWcubmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRlbmFudCBwdC0xIGZ3LW1lZGl1bVwiPnZ7eyBjb25maWcudmVyc2lvbiB9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWNsb3NlIGN1cnNvci1wb2ludGVyIHBvc2l0aW9uLWFic29sdXRlIGJvcmRlci0wIHJvdW5kZWQtY2lyY2xlIGQtbm9uZSBkLW1kLWJsb2NrXCIgKGNsaWNrKT1cInRvZ2dsZVNpZGVuYXYoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWZvcndhcmRcIiBjbGFzcz1cIm10LTFcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBweC0zIHB0LTMgb3ZlcmZsb3cteS1hdXRvIGQtbm9uZSBkLW1kLWJsb2NrXCIgKGNsaWNrKT1cInNlbGVjdE1lbnUoKVwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdiBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1kZWNvcmF0aW9uLW5vbmUgZ2FwLTIgcm91bmRlZCBtYi0xIHt7IGlzSGlkZGVuW2ldPyAnZC1ub25lJyA6ICdkLWZsZXgnIH19XCIgdGl0bGU9XCJ7eyBjLmxhYmVsIH19XCIgW3JvdXRlckxpbmtdPVwiYy5wYXRoXCIgcm91dGVyTGlua0FjdGl2ZT1cImZ3LW1lZGl1bVwiICpuZ0Zvcj1cImxldCBjIG9mIGNvbmZpZy5jb250YWluZXJzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInt7IGMuaWNvbiB9fVwiIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPnt7IGMubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgPC9hPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtc2hyaW5rLTAgcHgtMyBwdC0zIGJvcmRlci10b3AgZC1ub25lIGQtbWQtYmxvY2tcIiAqbmdJZj1cImNvbmZpZy5lbmFibGVkU2V0dGluZ1wiIChjbGljayk9XCJzZWxlY3RNZW51KClcIj5cbiAgICAgICAgPGEgY2xhc3M9XCJuYXYgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB0ZXh0LWRlY29yYXRpb24tbm9uZSBnYXAtMiByb3VuZGVkXCIgdGl0bGU9XCJTZXR0aW5nXCIgcm91dGVyTGluaz1cInNldHRpbmdcIiByb3V0ZXJMaW5rQWN0aXZlPVwiZnctbWVkaXVtXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInNldHRpbmdzXCIgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+U2V0dGluZzwvZGl2PlxuICAgICAgICA8L2E+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIHctMTAwIG92ZXJmbG93LXktYXV0b1wiPlxuICAgIDxuZy1jb250ZW50IC8+XG48L2Rpdj5cbiJdfQ==
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGV0LWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvY29udGFpbmVycy9hcHBsZXQtY29udGFpbmVyL2FwcGxldC1jb250YWluZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2NvbnRhaW5lcnMvYXBwbGV0LWNvbnRhaW5lci9hcHBsZXQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQWtCL0MsTUFBTSxPQUFPLHdCQUF3QjtJQXlCbkMsWUFDMkMsTUFZeEMsRUFDa0IsRUFBcUIsRUFDckIsaUJBQW9DO1FBZGQsV0FBTSxHQUFOLE1BQU0sQ0FZOUM7UUFDa0IsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWpDbEQsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFPN0IsYUFBUSxHQUFjLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFPdEUsaUJBQVksR0FBWSxLQUFLLENBQUM7SUFvQmpDLENBQUM7SUFNRSxRQUFRO1FBQ2IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGNBQXdCLEVBQUUsRUFBRTtZQUNuRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRTtnQkFDNUQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUN0RSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQzFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBTU0sV0FBVztRQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQU9NLGFBQWE7UUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDdkMsQ0FBQztJQVFNLFVBQVU7UUFDZixhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7OEdBdEZVLHdCQUF3QixrQkEwQnpCLGVBQWU7a0dBMUJkLHdCQUF3QiwrSENyQnJDLHc2REF1Q0EsK21DRHZCSSxXQUFXLDRTQUNYLFVBQVUsb09BQ1YsZ0JBQWdCOzsyRkFHUCx3QkFBd0I7a0JBZnBDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNKLEtBQUssRUFBRSxvQkFBb0I7cUJBQzVCLFdBQ1E7d0JBQ1AsV0FBVzt3QkFDWCxVQUFVO3dCQUNWLGdCQUFnQjtxQkFDakI7OzBCQTRCRSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTGluaywgUm91dGVyTGlua0FjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL21vZHVsZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd1cC1hcHBsZXQtY29udGFpbmVyJyxcbiAgc3R5bGVVcmw6ICcuL2FwcGxldC1jb250YWluZXIuY29tcG9uZW50LnNjc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwbGV0LWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdkLWZsZXggaC0xMDAgdy0xMDAnXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBJb25pY01vZHVsZSxcbiAgICBSb3V0ZXJMaW5rLFxuICAgIFJvdXRlckxpbmtBY3RpdmVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBcHBsZXRDb250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqXG4gICAqIEEgZmxhZyB2YXJpYWJsZSB0aGF0IHVzZWQgdG8gY29udHJvbCBzaWRlYmFyLiBXaGVuIHNldCB0aGUgdGhlIHZhbHVlIHRvIHRydWUsIHRoZSBjb21wb25lbnQgd2lsbCBvcGVuIHRoZSBzaWRlYmFyLlxuICAgKiB3aGVuIHNldCB0aGUgdmFsdWUgdG8gZmFsc2UsIHRoZSBjb21wb25lbnQgd2lsbCBjbG9zZSB0aGUgc2lkZWJhci5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgaXNDb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBmbGFnIHZhcmlhYmxlIHRoYXQgdXNlZCB0byBjb250cm9sIHNpZGViYXIgbWVudS4gV2hlbiBzZXQgdmFsdWUgdG8gdHJ1ZSwgdGhlIGNvbXBvbmVudCB3aWxsIGhpZGUgdGhlIHNpZGViYXIgbWVudS5cbiAgICogV2hlbiBzZXQgZmFsc2UsIHRoZSBjb21wb25lbnQgd2lsbCBzaG93IHRoZSBzaWRlYmFyIG1lbnUuXG4gICAqIEB0eXBlIHtib29sZWFuW119XG4gICAqL1xuICBwdWJsaWMgaXNIaWRkZW46IGJvb2xlYW5bXSA9IEFycmF5KHRoaXMuY29uZmlnLmNvbnRhaW5lcnMubGVuZ3RoKS5maWxsKHRydWUpO1xuICBcbiAgLyoqXG4gICAqIEEgZmxhZyB2YXJpYWJsZSBmb3IgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNpZGViYXIgbWVudSBpcyBhY3RpdmUgb3Igbm90IGluIG1vYmlsZSB2aWV3LlxuICAgKiBXaGVuIHNldCBmYWxzZSB0aGUgc2lkZWJhciBtZW51IHdpbGwgYmUgaGlkZGVuXG4gICAqIEB0eXBlIHtib29sZWFuW119XG4gICAqL1xuICBwdWJsaWMgaXNNZW51QWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBzdWIhOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBzdWJFdmVudCE6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCdBUFBMRVRfQ09ORklHJykgcHVibGljIHJlYWRvbmx5IGNvbmZpZzoge1xuICAgICAgaWNvbjogc3RyaW5nLFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgdGVuYW50TmFtZTogc3RyaW5nLFxuICAgICAgZW5hYmxlZFNldHRpbmc6IGJvb2xlYW4sXG4gICAgICBjb250YWluZXJzOiB7XG4gICAgICAgIGljb246IHN0cmluZyxcbiAgICAgICAgbGFiZWw6IHN0cmluZyxcbiAgICAgICAgcGF0aDogYC8keyBzdHJpbmcgfWAsXG4gICAgICAgIHBlcm1Nb2R1bGU6IHN0cmluZ1xuICAgICAgfVtdLFxuICAgICAgdmVyc2lvbjogc3RyaW5nXG4gICAgfSxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2g6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2VcbiAgKSB7IH1cblxuICAvKipcbiAgICogTGlmZWN5Y2xlIGhvb2sgdG8gaW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50cy5cbiAgICogU3Vic2NyaWJlcyB0byBwZXJtaXNzaW9uIGNoYW5nZXMgYW5kIHdpbmRvdyBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZHtcbiAgICB0aGlzLnN1YiA9IHRoaXMucGVybWlzc2lvblNlcnZpY2UucGVybU1vZHVsZXMuc3Vic2NyaWJlKChsaXN0UGVybU1vZHVsZTogc3RyaW5nW10pID0+IHtcbiAgICAgIHRoaXMuaXNIaWRkZW4gPSB0aGlzLmNvbmZpZy5jb250YWluZXJzLm1hcCgoeyBwZXJtTW9kdWxlIH0pID0+IHtcbiAgICAgICAgcmV0dXJuICFsaXN0UGVybU1vZHVsZS5pbmNsdWRlcyhwZXJtTW9kdWxlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zdWJFdmVudCA9IGZyb21FdmVudCh3aW5kb3csICdtZW51RXZlbnQnKS5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuaXNNZW51QWN0aXZlID0gZXZlbnQuZGV0YWlsLmlzQWN0aXZlO1xuICAgICAgdGhpcy5jaC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaWZlY3ljbGUgaG9vayB0byBoYW5kbGUgY29tcG9uZW50IGRlc3RydWN0aW9uLlxuICAgKiBDbGVhbnMgdXAgc3Vic2NyaXB0aW9ucyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuICAgKi9cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWR7IFxuICAgIHRoaXMuc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWJFdmVudC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhlIG1ldGhvZCBpcyBjYWxsZWQsIGl0IHdpbGwgY2hhbmdlIHRoZSB2YWx1ZSBvZiBpc0NvbGxhcHNlZCB0byBpdHMgb3Bwb3NpdGUgdmFsdWUuIFxuICAgKiBJZiBpc0NvbGxhcHNlZCBpcyBjdXJyZW50bHkgdHJ1ZSwgaXQgd2lsbCBiZSBzZXQgdG8gZmFsc2UsIGFuZCBpZiBpdCBpcyBjdXJyZW50bHkgZmFsc2UsIGl0IHdpbGwgYmUgc2V0IHRvIHRydWUuIFxuICAgKiBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgdXNlZCB0byB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgYSBzaWRlIG5hdmlnYXRpb24gbWVudS5cbiAgICovXG4gIHB1YmxpYyB0b2dnbGVTaWRlbmF2KCk6IHZvaWR7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9ICF0aGlzLmlzQ29sbGFwc2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgbWVudSBzZWxlY3Rpb24gYnkgZGlzcGF0Y2hpbmcgYSBjdXN0b20gZXZlbnQuXG4gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGEgc2lkZWJhciBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqIEl0IGRpc3BhdGNoZXMgYSBjdXN0b20gJ21lbnVFdmVudCcgd2l0aCBkZXRhaWwgaW5kaWNhdGluZyB0aGUgbWVudSBpcyBpbmFjdGl2ZS5cbiAgICogVGhpcyBldmVudCBpcyB0eXBpY2FsbHkgdXNlZCB0byBjbG9zZSB0aGUgc2lkZWJhciBtZW51LlxuICAgKi9cbiAgcHVibGljIHNlbGVjdE1lbnUoKTogdm9pZHtcbiAgICBkaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbWVudUV2ZW50JywgeyBkZXRhaWw6IHsgaXNBY3RpdmU6IGZhbHNlIH0gfSkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2lkZW5hdiBmbGV4LXNocmluay0wIGgtMTAwIHB5LTQgZC1mbGV4IGZsZXgtY29sdW1uXCIgW2NsYXNzLmNvbGxhcHNlZF09XCJpc0NvbGxhcHNlZFwiIFtjbGFzcy5zaG93XT1cImlzTWVudUFjdGl2ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lciBweC0zIHBiLTMgYm9yZGVyLWJvdHRvbSBmbGV4LXNocmluay0wIHBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgZC1ub25lIGQtbWQtZmxleFwiPlxuICAgICAgICA8aW1nIGFsdD1cIkFwcGxldCBJY29uXCIgd2lkdGg9XCI0NHB4XCIgaGVpZ2h0PVwiNDRweFwiIGNsYXNzPVwicm91bmRlZFwiIFtzcmNdPVwiY29uZmlnLmljb25cIiAvPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvIHctNzUgcGUtMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWUgZnctbWVkaXVtIHRleHQtdHJ1bmNhdGVcIj57eyBjb25maWcubmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVuYW50IHB0LTEgZnctbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgdnt7IGNvbmZpZy52ZXJzaW9uIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1jbG9zZSBjdXJzb3ItcG9pbnRlciBwb3NpdGlvbi1hYnNvbHV0ZSBib3JkZXItMCByb3VuZGVkLWNpcmNsZSBkLW5vbmUgZC1tZC1ibG9ja1wiIChjbGljayk9XCJ0b2dnbGVTaWRlbmF2KClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1mb3J3YXJkXCIgY2xhc3M9XCJtdC0xXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgcHgtMyBwdC0zIG92ZXJmbG93LXktYXV0byBkLW5vbmUgZC1tZC1ibG9ja1wiIChjbGljayk9XCJzZWxlY3RNZW51KClcIj5cbiAgICAgICAgQGZvciAoYyBvZiBjb25maWcuY29udGFpbmVyczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8YSBjbGFzcz1cIm5hdiBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1kZWNvcmF0aW9uLW5vbmUgZ2FwLTIgcm91bmRlZCBtYi0xIHt7IGlzSGlkZGVuWyRpbmRleF0/ICdkLW5vbmUnIDogJ2QtZmxleCcgfX1cIiByb3V0ZXJMaW5rQWN0aXZlPVwiZnctbWVkaXVtXCIgdGl0bGU9XCJ7eyBjLmxhYmVsIH19XCIgW3JvdXRlckxpbmtdPVwiYy5wYXRoXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ7eyBjLmljb24gfX1cIiAvPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3sgYy5sYWJlbCB9fTwvZGl2PlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGNvbmZpZy5lbmFibGVkU2V0dGluZykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMCBweC0zIHB0LTMgYm9yZGVyLXRvcCBkLW5vbmUgZC1tZC1ibG9ja1wiIChjbGljayk9XCJzZWxlY3RNZW51KClcIj5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1kZWNvcmF0aW9uLW5vbmUgZ2FwLTIgcm91bmRlZFwiIHRpdGxlPVwiU2V0dGluZ1wiIHJvdXRlckxpbms9XCJzZXR0aW5nXCIgcm91dGVyTGlua0FjdGl2ZT1cImZ3LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwic2V0dGluZ3NcIiAvPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+U2V0dGluZzwvZGl2PlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIHctMTAwIG92ZXJmbG93LXktYXV0b1wiPlxuICAgIDxuZy1jb250ZW50IC8+XG48L2Rpdj5cbiJdfQ==
@@ -7,16 +7,24 @@ export const PermissionGuard = (route) => {
7
7
  const location = inject(Location);
8
8
  const permissionService = inject(PermissionService);
9
9
  const permission = route.data['requiredPermission'];
10
+ const permissions = route.data['requiredPermissions'];
10
11
  if (!permission)
11
12
  throw new Error('Invalid config: requiredPermission is a required parameter in route data for PermissionGuard');
12
13
  if (!permissionService.isInitiated) {
13
14
  router.navigate(['loading'], { queryParams: { url: `${location.path() + window.location.hash}` } });
14
15
  return false;
15
16
  }
17
+ if (permissions) {
18
+ for (let i = 0; i < permissions.length; i++) {
19
+ const { scope, module, type } = permissions[i];
20
+ if (permissionService.checkPermission(scope, module, type))
21
+ return true;
22
+ }
23
+ }
16
24
  const { scope, module, type } = permission;
17
25
  if (permissionService.checkPermission(scope, module, type))
18
26
  return true;
19
27
  router.navigate(['401']);
20
28
  return false;
21
29
  };
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvbW9kdWxlcy9wZXJtaXNzaW9uL2d1YXJkcy9wZXJtaXNzaW9uLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBeUMsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFbkUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFrQixDQUFDLEtBQTZCLEVBQVcsRUFBRTtJQUV2RixNQUFNLE1BQU0sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsTUFBTSxRQUFRLEdBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0saUJBQWlCLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRXZFLE1BQU0sVUFBVSxHQUFvRCxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFckcsSUFBSSxDQUFDLFVBQVU7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhGQUE4RixDQUFDLENBQUM7SUFFakksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBRSxTQUFTLENBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hHLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUMzQyxJQUFJLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXhFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBRSxLQUFLLENBQUUsQ0FBQyxDQUFDO0lBQzNCLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZUZuLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wZXJtaXNzaW9uLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgUGVybWlzc2lvbkd1YXJkOiBDYW5BY3RpdmF0ZUZuID0gKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogYm9vbGVhbiA9PiB7XG4gIFxuICBjb25zdCByb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBjb25zdCBsb2NhdGlvbjogTG9jYXRpb24gPSBpbmplY3QoTG9jYXRpb24pO1xuICBjb25zdCBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UgPSBpbmplY3QoUGVybWlzc2lvblNlcnZpY2UpO1xuXG4gIGNvbnN0IHBlcm1pc3Npb246IHsgc2NvcGU6IHN0cmluZywgbW9kdWxlOiBzdHJpbmcsIHR5cGU6IHN0cmluZyB9ID0gcm91dGUuZGF0YVsncmVxdWlyZWRQZXJtaXNzaW9uJ107XG4gIFxuICBpZiAoIXBlcm1pc3Npb24pIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb25maWc6IHJlcXVpcmVkUGVybWlzc2lvbiBpcyBhIHJlcXVpcmVkIHBhcmFtZXRlciBpbiByb3V0ZSBkYXRhIGZvciBQZXJtaXNzaW9uR3VhcmQnKTtcblxuICBpZiAoIXBlcm1pc3Npb25TZXJ2aWNlLmlzSW5pdGlhdGVkKSB7XG4gICAgcm91dGVyLm5hdmlnYXRlKFsgJ2xvYWRpbmcnIF0sIHsgcXVlcnlQYXJhbXM6IHsgdXJsOiBgJHsgbG9jYXRpb24ucGF0aCgpICsgd2luZG93LmxvY2F0aW9uLmhhc2ggfWAgfSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB7IHNjb3BlLCBtb2R1bGUsIHR5cGUgfSA9IHBlcm1pc3Npb247XG4gIGlmIChwZXJtaXNzaW9uU2VydmljZS5jaGVja1Blcm1pc3Npb24oc2NvcGUsIG1vZHVsZSwgdHlwZSkpIHJldHVybiB0cnVlO1xuXG4gIHJvdXRlci5uYXZpZ2F0ZShbICc0MDEnIF0pO1xuICByZXR1cm4gZmFsc2U7XG59O1xuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvbW9kdWxlcy9wZXJtaXNzaW9uL2d1YXJkcy9wZXJtaXNzaW9uLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBeUMsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFbkUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFrQixDQUFDLEtBQTZCLEVBQVcsRUFBRTtJQUV2RixNQUFNLE1BQU0sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsTUFBTSxRQUFRLEdBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0saUJBQWlCLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBT3ZFLE1BQU0sVUFBVSxHQUFvRCxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDckcsTUFBTSxXQUFXLEdBQXNELEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUV6RyxJQUFJLENBQUMsVUFBVTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEZBQThGLENBQUMsQ0FBQztJQUVqSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFFLFNBQVMsQ0FBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUksUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEcsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzVDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQyxJQUFJLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztRQUMxRSxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUMzQyxJQUFJLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXhFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBRSxLQUFLLENBQUUsQ0FBQyxDQUFDO0lBQzNCLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZUZuLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wZXJtaXNzaW9uLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgUGVybWlzc2lvbkd1YXJkOiBDYW5BY3RpdmF0ZUZuID0gKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogYm9vbGVhbiA9PiB7XG4gIFxuICBjb25zdCByb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBjb25zdCBsb2NhdGlvbjogTG9jYXRpb24gPSBpbmplY3QoTG9jYXRpb24pO1xuICBjb25zdCBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UgPSBpbmplY3QoUGVybWlzc2lvblNlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgcGVybU1vZHVsZSB2YXJpYWJsZSB3aWxsIGJlIGRlbGV0ZWQgaW4gZmF2b3IgZm9yIG11bHRpcGxlIHBlcm1pc3Npb24gZm9yIGEgbWVudVxuICAgKiBcbiAgICogV2lsbCBiZSByZW1vdmVkIG9uIFNlcHRlbWJlciAyMDI0XG4gICAqL1xuICBjb25zdCBwZXJtaXNzaW9uOiB7IHNjb3BlOiBzdHJpbmcsIG1vZHVsZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcgfSA9IHJvdXRlLmRhdGFbJ3JlcXVpcmVkUGVybWlzc2lvbiddO1xuICBjb25zdCBwZXJtaXNzaW9uczogeyBzY29wZTogc3RyaW5nLCBtb2R1bGU6IHN0cmluZywgdHlwZTogc3RyaW5nIH1bXSA9IHJvdXRlLmRhdGFbJ3JlcXVpcmVkUGVybWlzc2lvbnMnXTtcbiAgXG4gIGlmICghcGVybWlzc2lvbikgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbmZpZzogcmVxdWlyZWRQZXJtaXNzaW9uIGlzIGEgcmVxdWlyZWQgcGFyYW1ldGVyIGluIHJvdXRlIGRhdGEgZm9yIFBlcm1pc3Npb25HdWFyZCcpO1xuXG4gIGlmICghcGVybWlzc2lvblNlcnZpY2UuaXNJbml0aWF0ZWQpIHtcbiAgICByb3V0ZXIubmF2aWdhdGUoWyAnbG9hZGluZycgXSwgeyBxdWVyeVBhcmFtczogeyB1cmw6IGAkeyBsb2NhdGlvbi5wYXRoKCkgKyB3aW5kb3cubG9jYXRpb24uaGFzaCB9YCB9IH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwZXJtaXNzaW9ucykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGVybWlzc2lvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHsgc2NvcGUsIG1vZHVsZSwgdHlwZSB9ID0gcGVybWlzc2lvbnNbaV07XG4gICAgICBpZiAocGVybWlzc2lvblNlcnZpY2UuY2hlY2tQZXJtaXNzaW9uKHNjb3BlLCBtb2R1bGUsIHR5cGUpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB7IHNjb3BlLCBtb2R1bGUsIHR5cGUgfSA9IHBlcm1pc3Npb247XG4gIGlmIChwZXJtaXNzaW9uU2VydmljZS5jaGVja1Blcm1pc3Npb24oc2NvcGUsIG1vZHVsZSwgdHlwZSkpIHJldHVybiB0cnVlO1xuXG4gIHJvdXRlci5uYXZpZ2F0ZShbICc0MDEnIF0pO1xuICByZXR1cm4gZmFsc2U7XG59O1xuIl19
@@ -5,7 +5,7 @@ import { CommonModule, Location, formatDate, DatePipe, JsonPipe } from '@angular
5
5
  import * as i1 from '@ionic/angular';
6
6
  import { IonButton, IonicModule, NavController } from '@ionic/angular';
7
7
  import * as i1$2 from '@angular/router';
8
- import { Router, RouterModule, NavigationEnd } from '@angular/router';
8
+ import { Router, RouterLink, RouterLinkActive, NavigationEnd, RouterModule } from '@angular/router';
9
9
  import { Subject, fromEvent, distinctUntilChanged, debounceTime, tap, switchMap, map, catchError, of, concat, filter, throwError } from 'rxjs';
10
10
  import { platformBrowser } from '@angular/platform-browser';
11
11
  import * as i1$1 from 'apollo-angular';
@@ -349,12 +349,20 @@ const PermissionGuard = (route) => {
349
349
  const location = inject(Location);
350
350
  const permissionService = inject(PermissionService);
351
351
  const permission = route.data['requiredPermission'];
352
+ const permissions = route.data['requiredPermissions'];
352
353
  if (!permission)
353
354
  throw new Error('Invalid config: requiredPermission is a required parameter in route data for PermissionGuard');
354
355
  if (!permissionService.isInitiated) {
355
356
  router.navigate(['loading'], { queryParams: { url: `${location.path() + window.location.hash}` } });
356
357
  return false;
357
358
  }
359
+ if (permissions) {
360
+ for (let i = 0; i < permissions.length; i++) {
361
+ const { scope, module, type } = permissions[i];
362
+ if (permissionService.checkPermission(scope, module, type))
363
+ return true;
364
+ }
365
+ }
358
366
  const { scope, module, type } = permission;
359
367
  if (permissionService.checkPermission(scope, module, type))
360
368
  return true;
@@ -400,8 +408,10 @@ class AppletContainerComponent {
400
408
  this.isMenuActive = false;
401
409
  }
402
410
  ngOnInit() {
403
- this.sub = this.permissionService.permModules.subscribe((permModules) => {
404
- this.isHidden = this.config.containers.map(({ permModule }) => !permModules.includes(permModule));
411
+ this.sub = this.permissionService.permModules.subscribe((listPermModule) => {
412
+ this.isHidden = this.config.containers.map(({ permModule }) => {
413
+ return !listPermModule.includes(permModule);
414
+ });
405
415
  });
406
416
  this.subEvent = fromEvent(window, 'menuEvent').subscribe((event) => {
407
417
  this.isMenuActive = event.detail.isActive;
@@ -412,12 +422,14 @@ class AppletContainerComponent {
412
422
  this.sub.unsubscribe();
413
423
  this.subEvent.unsubscribe();
414
424
  }
415
- toggleSidenav() { this.isCollapsed = !this.isCollapsed; }
425
+ toggleSidenav() {
426
+ this.isCollapsed = !this.isCollapsed;
427
+ }
416
428
  selectMenu() {
417
429
  dispatchEvent(new CustomEvent('menuEvent', { detail: { isActive: false } }));
418
430
  }
419
431
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: AppletContainerComponent, deps: [{ token: 'APPLET_CONFIG' }, { token: i0.ChangeDetectorRef }, { token: PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
420
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.4", type: AppletContainerComponent, isStandalone: true, selector: "up-applet-container", host: { classAttribute: "d-flex h-100 w-100" }, ngImport: i0, template: "<div class=\"sidenav flex-shrink-0 h-100 py-4 d-flex flex-column\" [class.collapsed]=\"isCollapsed\" [class.show]=\"isMenuActive\">\n <div class=\"logo-container px-3 pb-3 border-bottom flex-shrink-0 position-relative d-flex align-items-center gap-3 d-none d-md-flex\">\n <img alt=\"Applet Icon\" width=\"44px\" height=\"44px\" class=\"rounded\" [src]=\"config.icon\" />\n\n <div class=\"info w-75 pe-2\">\n <div class=\"name fw-medium text-truncate\">{{ config.name }}</div>\n <div class=\"tenant pt-1 fw-medium\">v{{ config.version }}</div>\n </div>\n\n <button class=\"btn-close cursor-pointer position-absolute border-0 rounded-circle d-none d-md-block\" (click)=\"toggleSidenav()\">\n <ion-icon name=\"chevron-forward\" class=\"mt-1\" />\n </button>\n </div>\n\n <div class=\"flex-grow-1 px-3 pt-3 overflow-y-auto d-none d-md-block\" (click)=\"selectMenu()\">\n <a class=\"nav align-items-center text-decoration-none gap-2 rounded mb-1 {{ isHidden[i]? 'd-none' : 'd-flex' }}\" title=\"{{ c.label }}\" [routerLink]=\"c.path\" routerLinkActive=\"fw-medium\" *ngFor=\"let c of config.containers; let i = index\">\n <ion-icon name=\"{{ c.icon }}\" />\n <div class=\"text-truncate\">{{ c.label }}</div>\n </a>\n </div>\n\n <div class=\"flex-shrink-0 px-3 pt-3 border-top d-none d-md-block\" *ngIf=\"config.enabledSetting\" (click)=\"selectMenu()\">\n <a class=\"nav d-flex align-items-center text-decoration-none gap-2 rounded\" title=\"Setting\" routerLink=\"setting\" routerLinkActive=\"fw-medium\">\n <ion-icon name=\"settings\" />\n <div class=\"text-truncate\">Setting</div>\n </a>\n </div>\n</div>\n\n<div class=\"flex-grow-1 w-100 overflow-y-auto\">\n <ng-content />\n</div>\n", styles: [".info{display:none}.name{font-size:16px}.tenant{color:#757575}.sidenav{width:73px;background:#f8f9fb;transition:all .2s ease;border-right:1px solid #D1D1D1}.sidenav.collapsed{width:250px}.sidenav.collapsed .btn-close{transform:rotate(180deg)}.sidenav.collapsed .nav div,.sidenav.collapsed .info{display:block}.sidenav.show{width:250px}.sidenav.show .logo-container{display:flex!important}.sidenav.show div:not(.logo-container),.sidenav.show img,.sidenav.show .info{display:block!important}.btn-close{width:35px;height:35px;bottom:23px;right:-17px;z-index:999;transition:all .3s ease;background-color:#f8f9fb;box-shadow:0 0 .15rem #616161}.btn-close ion-icon{color:#616161;font-size:16px}@media (max-width: 768px){.btn-close{right:-18px}.btn-close ion-icon{position:absolute;right:9px;bottom:10px}}.nav{padding:12px;color:#616161;transition:all .3s ease}.nav.fw-medium,.nav:hover{background-color:#fef3ee;color:#ed6b26!important}.nav ion-icon{font-size:20px}.nav div{display:none;font-size:16px}@media (max-width: 767px){.sidenav{width:0;z-index:2;position:absolute!important}}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i1.RouterLinkWithHrefDelegate, selector: "a[routerLink],area[routerLink]" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
432
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: AppletContainerComponent, isStandalone: true, selector: "up-applet-container", host: { classAttribute: "d-flex h-100 w-100" }, ngImport: i0, template: "<div class=\"sidenav flex-shrink-0 h-100 py-4 d-flex flex-column\" [class.collapsed]=\"isCollapsed\" [class.show]=\"isMenuActive\">\n <div class=\"logo-container px-3 pb-3 border-bottom flex-shrink-0 position-relative d-flex align-items-center gap-3 d-none d-md-flex\">\n <img alt=\"Applet Icon\" width=\"44px\" height=\"44px\" class=\"rounded\" [src]=\"config.icon\" />\n\n <div class=\"info w-75 pe-2\">\n <div class=\"name fw-medium text-truncate\">{{ config.name }}</div>\n \n <div class=\"tenant pt-1 fw-medium\">\n v{{ config.version }}\n </div>\n </div>\n\n <button class=\"btn-close cursor-pointer position-absolute border-0 rounded-circle d-none d-md-block\" (click)=\"toggleSidenav()\">\n <ion-icon name=\"chevron-forward\" class=\"mt-1\" />\n </button>\n </div>\n\n <div class=\"flex-grow-1 px-3 pt-3 overflow-y-auto d-none d-md-block\" (click)=\"selectMenu()\">\n @for (c of config.containers; track $index) {\n <a class=\"nav align-items-center text-decoration-none gap-2 rounded mb-1 {{ isHidden[$index]? 'd-none' : 'd-flex' }}\" routerLinkActive=\"fw-medium\" title=\"{{ c.label }}\" [routerLink]=\"c.path\">\n <ion-icon name=\"{{ c.icon }}\" />\n <div class=\"text-truncate\">{{ c.label }}</div>\n </a>\n }\n </div>\n\n @if (config.enabledSetting) {\n <div class=\"flex-shrink-0 px-3 pt-3 border-top d-none d-md-block\" (click)=\"selectMenu()\">\n <a class=\"nav d-flex align-items-center text-decoration-none gap-2 rounded\" title=\"Setting\" routerLink=\"setting\" routerLinkActive=\"fw-medium\">\n <ion-icon name=\"settings\" />\n <div class=\"text-truncate\">Setting</div>\n </a>\n </div>\n }\n</div>\n\n<div class=\"flex-grow-1 w-100 overflow-y-auto\">\n <ng-content />\n</div>\n", styles: [".info{display:none}.name{font-size:16px}.tenant{color:#757575}.sidenav{width:73px;background:#f8f9fb;transition:all .2s ease;border-right:1px solid #D1D1D1}.sidenav.collapsed{width:250px}.sidenav.collapsed .btn-close{transform:rotate(180deg)}.sidenav.collapsed .nav div,.sidenav.collapsed .info{display:block}.sidenav.show{width:250px}.sidenav.show .logo-container{display:flex!important}.sidenav.show div:not(.logo-container),.sidenav.show img,.sidenav.show .info{display:block!important}.btn-close{width:35px;height:35px;bottom:23px;right:-17px;z-index:999;transition:all .3s ease;background-color:#f8f9fb;box-shadow:0 0 .15rem #616161}.btn-close ion-icon{color:#616161;font-size:16px}@media (max-width: 768px){.btn-close{right:-18px}.btn-close ion-icon{position:absolute;right:9px;bottom:10px}}.nav{padding:12px;color:#616161;transition:all .3s ease}.nav.fw-medium,.nav:hover{background-color:#fef3ee;color:#ed6b26!important}.nav ion-icon{font-size:20px}.nav div{display:none;font-size:16px}@media (max-width: 767px){.sidenav{width:0;z-index:2;position:absolute!important}}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i1.RouterLinkWithHrefDelegate, selector: "a[routerLink],area[routerLink]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
421
433
  }
422
434
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: AppletContainerComponent, decorators: [{
423
435
  type: Component,
@@ -425,9 +437,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
425
437
  class: 'd-flex h-100 w-100'
426
438
  }, imports: [
427
439
  IonicModule,
428
- RouterModule,
429
- CommonModule
430
- ], template: "<div class=\"sidenav flex-shrink-0 h-100 py-4 d-flex flex-column\" [class.collapsed]=\"isCollapsed\" [class.show]=\"isMenuActive\">\n <div class=\"logo-container px-3 pb-3 border-bottom flex-shrink-0 position-relative d-flex align-items-center gap-3 d-none d-md-flex\">\n <img alt=\"Applet Icon\" width=\"44px\" height=\"44px\" class=\"rounded\" [src]=\"config.icon\" />\n\n <div class=\"info w-75 pe-2\">\n <div class=\"name fw-medium text-truncate\">{{ config.name }}</div>\n <div class=\"tenant pt-1 fw-medium\">v{{ config.version }}</div>\n </div>\n\n <button class=\"btn-close cursor-pointer position-absolute border-0 rounded-circle d-none d-md-block\" (click)=\"toggleSidenav()\">\n <ion-icon name=\"chevron-forward\" class=\"mt-1\" />\n </button>\n </div>\n\n <div class=\"flex-grow-1 px-3 pt-3 overflow-y-auto d-none d-md-block\" (click)=\"selectMenu()\">\n <a class=\"nav align-items-center text-decoration-none gap-2 rounded mb-1 {{ isHidden[i]? 'd-none' : 'd-flex' }}\" title=\"{{ c.label }}\" [routerLink]=\"c.path\" routerLinkActive=\"fw-medium\" *ngFor=\"let c of config.containers; let i = index\">\n <ion-icon name=\"{{ c.icon }}\" />\n <div class=\"text-truncate\">{{ c.label }}</div>\n </a>\n </div>\n\n <div class=\"flex-shrink-0 px-3 pt-3 border-top d-none d-md-block\" *ngIf=\"config.enabledSetting\" (click)=\"selectMenu()\">\n <a class=\"nav d-flex align-items-center text-decoration-none gap-2 rounded\" title=\"Setting\" routerLink=\"setting\" routerLinkActive=\"fw-medium\">\n <ion-icon name=\"settings\" />\n <div class=\"text-truncate\">Setting</div>\n </a>\n </div>\n</div>\n\n<div class=\"flex-grow-1 w-100 overflow-y-auto\">\n <ng-content />\n</div>\n", styles: [".info{display:none}.name{font-size:16px}.tenant{color:#757575}.sidenav{width:73px;background:#f8f9fb;transition:all .2s ease;border-right:1px solid #D1D1D1}.sidenav.collapsed{width:250px}.sidenav.collapsed .btn-close{transform:rotate(180deg)}.sidenav.collapsed .nav div,.sidenav.collapsed .info{display:block}.sidenav.show{width:250px}.sidenav.show .logo-container{display:flex!important}.sidenav.show div:not(.logo-container),.sidenav.show img,.sidenav.show .info{display:block!important}.btn-close{width:35px;height:35px;bottom:23px;right:-17px;z-index:999;transition:all .3s ease;background-color:#f8f9fb;box-shadow:0 0 .15rem #616161}.btn-close ion-icon{color:#616161;font-size:16px}@media (max-width: 768px){.btn-close{right:-18px}.btn-close ion-icon{position:absolute;right:9px;bottom:10px}}.nav{padding:12px;color:#616161;transition:all .3s ease}.nav.fw-medium,.nav:hover{background-color:#fef3ee;color:#ed6b26!important}.nav ion-icon{font-size:20px}.nav div{display:none;font-size:16px}@media (max-width: 767px){.sidenav{width:0;z-index:2;position:absolute!important}}\n"] }]
440
+ RouterLink,
441
+ RouterLinkActive
442
+ ], template: "<div class=\"sidenav flex-shrink-0 h-100 py-4 d-flex flex-column\" [class.collapsed]=\"isCollapsed\" [class.show]=\"isMenuActive\">\n <div class=\"logo-container px-3 pb-3 border-bottom flex-shrink-0 position-relative d-flex align-items-center gap-3 d-none d-md-flex\">\n <img alt=\"Applet Icon\" width=\"44px\" height=\"44px\" class=\"rounded\" [src]=\"config.icon\" />\n\n <div class=\"info w-75 pe-2\">\n <div class=\"name fw-medium text-truncate\">{{ config.name }}</div>\n \n <div class=\"tenant pt-1 fw-medium\">\n v{{ config.version }}\n </div>\n </div>\n\n <button class=\"btn-close cursor-pointer position-absolute border-0 rounded-circle d-none d-md-block\" (click)=\"toggleSidenav()\">\n <ion-icon name=\"chevron-forward\" class=\"mt-1\" />\n </button>\n </div>\n\n <div class=\"flex-grow-1 px-3 pt-3 overflow-y-auto d-none d-md-block\" (click)=\"selectMenu()\">\n @for (c of config.containers; track $index) {\n <a class=\"nav align-items-center text-decoration-none gap-2 rounded mb-1 {{ isHidden[$index]? 'd-none' : 'd-flex' }}\" routerLinkActive=\"fw-medium\" title=\"{{ c.label }}\" [routerLink]=\"c.path\">\n <ion-icon name=\"{{ c.icon }}\" />\n <div class=\"text-truncate\">{{ c.label }}</div>\n </a>\n }\n </div>\n\n @if (config.enabledSetting) {\n <div class=\"flex-shrink-0 px-3 pt-3 border-top d-none d-md-block\" (click)=\"selectMenu()\">\n <a class=\"nav d-flex align-items-center text-decoration-none gap-2 rounded\" title=\"Setting\" routerLink=\"setting\" routerLinkActive=\"fw-medium\">\n <ion-icon name=\"settings\" />\n <div class=\"text-truncate\">Setting</div>\n </a>\n </div>\n }\n</div>\n\n<div class=\"flex-grow-1 w-100 overflow-y-auto\">\n <ng-content />\n</div>\n", styles: [".info{display:none}.name{font-size:16px}.tenant{color:#757575}.sidenav{width:73px;background:#f8f9fb;transition:all .2s ease;border-right:1px solid #D1D1D1}.sidenav.collapsed{width:250px}.sidenav.collapsed .btn-close{transform:rotate(180deg)}.sidenav.collapsed .nav div,.sidenav.collapsed .info{display:block}.sidenav.show{width:250px}.sidenav.show .logo-container{display:flex!important}.sidenav.show div:not(.logo-container),.sidenav.show img,.sidenav.show .info{display:block!important}.btn-close{width:35px;height:35px;bottom:23px;right:-17px;z-index:999;transition:all .3s ease;background-color:#f8f9fb;box-shadow:0 0 .15rem #616161}.btn-close ion-icon{color:#616161;font-size:16px}@media (max-width: 768px){.btn-close{right:-18px}.btn-close ion-icon{position:absolute;right:9px;bottom:10px}}.nav{padding:12px;color:#616161;transition:all .3s ease}.nav.fw-medium,.nav:hover{background-color:#fef3ee;color:#ed6b26!important}.nav ion-icon{font-size:20px}.nav div{display:none;font-size:16px}@media (max-width: 767px){.sidenav{width:0;z-index:2;position:absolute!important}}\n"] }]
431
443
  }], ctorParameters: () => [{ type: undefined, decorators: [{
432
444
  type: Inject,
433
445
  args: ['APPLET_CONFIG']
@@ -3359,7 +3371,7 @@ class ApprovalService {
3359
3371
  return this.apollo.mutate({
3360
3372
  variables,
3361
3373
  mutation: gql `
3362
- mutation ${variables.isApprove ? 'ApproveApproval' : 'DeclineApproval'}($approvalGroupGuid: String, $guids: String, $isApprove: Boolean, $reason: String) {
3374
+ mutation ${variables.isApprove ? 'ApproveApproval' : 'DeclineApproval'}($approvalGroupGuid: String, $guids: [String], $isApprove: Boolean, $reason: String) {
3363
3375
  approvalMsApproveOrDeclineRequest(approvalGroupGuid: $approvalGroupGuid, guids: $guids, isApprove: $isApprove, reason: $reason)
3364
3376
  }
3365
3377
  `