@sunbird-cb/tree-hierarchy 0.0.1-cbrelease-4.8.26

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.
Files changed (118) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/components/action-bar/action-bar.component.mjs +41 -0
  3. package/esm2022/lib/components/approval/approval.component.mjs +19 -0
  4. package/esm2022/lib/components/approve-view/approve-view.component.mjs +64 -0
  5. package/esm2022/lib/components/categories-preview/categories-preview.component.mjs +44 -0
  6. package/esm2022/lib/components/conforamtion-popup/conforamtion-popup.component.mjs +74 -0
  7. package/esm2022/lib/components/connector/connector.component.mjs +59 -0
  8. package/esm2022/lib/components/create-categories/create-categories.component.mjs +83 -0
  9. package/esm2022/lib/components/create-term/create-term.component.mjs +847 -0
  10. package/esm2022/lib/components/create-term-from-framework/create-term-from-framework.component.mjs +823 -0
  11. package/esm2022/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.mjs +149 -0
  12. package/esm2022/lib/components/pending-approval/pending-approval.component.mjs +64 -0
  13. package/esm2022/lib/components/term-card/term-card.component.mjs +311 -0
  14. package/esm2022/lib/components/tree-column-view/tree-column-view.component.mjs +322 -0
  15. package/esm2022/lib/components/tree-view/tree-view.component.mjs +497 -0
  16. package/esm2022/lib/constants/app-constant.mjs +40 -0
  17. package/esm2022/lib/constants/data.mjs +6972 -0
  18. package/esm2022/lib/containers/config-framework/config-framework.component.mjs +92 -0
  19. package/esm2022/lib/containers/dashboard/dashboard.component.mjs +14 -0
  20. package/esm2022/lib/labels/strings.mjs +40 -0
  21. package/esm2022/lib/models/approval.model.mjs +2 -0
  22. package/esm2022/lib/models/connection-type.model.mjs +2 -0
  23. package/esm2022/lib/models/connection.model.mjs +2 -0
  24. package/esm2022/lib/models/framework.model.mjs +2 -0
  25. package/esm2022/lib/models/variable-type.model.mjs +2 -0
  26. package/esm2022/lib/pipes/order-by.pipe.mjs +35 -0
  27. package/esm2022/lib/services/approval.service.mjs +47 -0
  28. package/esm2022/lib/services/connection.service.mjs +3 -0
  29. package/esm2022/lib/services/connector.service.mjs +240 -0
  30. package/esm2022/lib/services/framework.service.mjs +387 -0
  31. package/esm2022/lib/services/local-connection.service.mjs +75 -0
  32. package/esm2022/lib/services/odcs.service.mjs +23 -0
  33. package/esm2022/lib/tree-hierarchy-routing.module.mjs +43 -0
  34. package/esm2022/lib/tree-hierarchy.component.mjs +24 -0
  35. package/esm2022/lib/tree-hierarchy.module.mjs +138 -0
  36. package/esm2022/lib/tree-hierarchy.service.mjs +41 -0
  37. package/esm2022/material.module.mjs +199 -0
  38. package/esm2022/public-api.mjs +9 -0
  39. package/esm2022/sunbird-cb-tree-hierarchy.mjs +2 -0
  40. package/fesm2022/sunbird-cb-tree-hierarchy.mjs +11577 -0
  41. package/fesm2022/sunbird-cb-tree-hierarchy.mjs.map +1 -0
  42. package/index.d.ts +3 -0
  43. package/lib/components/action-bar/action-bar.component.d.ts +17 -0
  44. package/lib/components/action-bar/action-bar.component.d.ts.map +1 -0
  45. package/lib/components/approval/approval.component.d.ts +10 -0
  46. package/lib/components/approval/approval.component.d.ts.map +1 -0
  47. package/lib/components/approve-view/approve-view.component.d.ts +27 -0
  48. package/lib/components/approve-view/approve-view.component.d.ts.map +1 -0
  49. package/lib/components/categories-preview/categories-preview.component.d.ts +14 -0
  50. package/lib/components/categories-preview/categories-preview.component.d.ts.map +1 -0
  51. package/lib/components/conforamtion-popup/conforamtion-popup.component.d.ts +20 -0
  52. package/lib/components/conforamtion-popup/conforamtion-popup.component.d.ts.map +1 -0
  53. package/lib/components/connector/connector.component.d.ts +23 -0
  54. package/lib/components/connector/connector.component.d.ts.map +1 -0
  55. package/lib/components/create-categories/create-categories.component.d.ts +26 -0
  56. package/lib/components/create-categories/create-categories.component.d.ts.map +1 -0
  57. package/lib/components/create-term/create-term.component.d.ts +148 -0
  58. package/lib/components/create-term/create-term.component.d.ts.map +1 -0
  59. package/lib/components/create-term-from-framework/create-term-from-framework.component.d.ts +105 -0
  60. package/lib/components/create-term-from-framework/create-term-from-framework.component.d.ts.map +1 -0
  61. package/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.d.ts +31 -0
  62. package/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.d.ts.map +1 -0
  63. package/lib/components/pending-approval/pending-approval.component.d.ts +21 -0
  64. package/lib/components/pending-approval/pending-approval.component.d.ts.map +1 -0
  65. package/lib/components/term-card/term-card.component.d.ts +43 -0
  66. package/lib/components/term-card/term-card.component.d.ts.map +1 -0
  67. package/lib/components/tree-column-view/tree-column-view.component.d.ts +52 -0
  68. package/lib/components/tree-column-view/tree-column-view.component.d.ts.map +1 -0
  69. package/lib/components/tree-view/tree-view.component.d.ts +91 -0
  70. package/lib/components/tree-view/tree-view.component.d.ts.map +1 -0
  71. package/lib/constants/app-constant.d.ts +44 -0
  72. package/lib/constants/app-constant.d.ts.map +1 -0
  73. package/lib/constants/data.d.ts +117 -0
  74. package/lib/constants/data.d.ts.map +1 -0
  75. package/lib/containers/config-framework/config-framework.component.d.ts +32 -0
  76. package/lib/containers/config-framework/config-framework.component.d.ts.map +1 -0
  77. package/lib/containers/dashboard/dashboard.component.d.ts +9 -0
  78. package/lib/containers/dashboard/dashboard.component.d.ts.map +1 -0
  79. package/lib/labels/strings.d.ts +40 -0
  80. package/lib/labels/strings.d.ts.map +1 -0
  81. package/lib/models/approval.model.d.ts +11 -0
  82. package/lib/models/approval.model.d.ts.map +1 -0
  83. package/lib/models/connection-type.model.d.ts +6 -0
  84. package/lib/models/connection-type.model.d.ts.map +1 -0
  85. package/lib/models/connection.model.d.ts +7 -0
  86. package/lib/models/connection.model.d.ts.map +1 -0
  87. package/lib/models/framework.model.d.ts +88 -0
  88. package/lib/models/framework.model.d.ts.map +1 -0
  89. package/lib/models/variable-type.model.d.ts +46 -0
  90. package/lib/models/variable-type.model.d.ts.map +1 -0
  91. package/lib/pipes/order-by.pipe.d.ts +10 -0
  92. package/lib/pipes/order-by.pipe.d.ts.map +1 -0
  93. package/lib/services/approval.service.d.ts +21 -0
  94. package/lib/services/approval.service.d.ts.map +1 -0
  95. package/lib/services/connection.service.d.ts +4 -0
  96. package/lib/services/connection.service.d.ts.map +1 -0
  97. package/lib/services/connector.service.d.ts +17 -0
  98. package/lib/services/connector.service.d.ts.map +1 -0
  99. package/lib/services/framework.service.d.ts +82 -0
  100. package/lib/services/framework.service.d.ts.map +1 -0
  101. package/lib/services/local-connection.service.d.ts +18 -0
  102. package/lib/services/local-connection.service.d.ts.map +1 -0
  103. package/lib/services/odcs.service.d.ts +11 -0
  104. package/lib/services/odcs.service.d.ts.map +1 -0
  105. package/lib/tree-hierarchy-routing.module.d.ts +8 -0
  106. package/lib/tree-hierarchy-routing.module.d.ts.map +1 -0
  107. package/lib/tree-hierarchy.component.d.ts +13 -0
  108. package/lib/tree-hierarchy.component.d.ts.map +1 -0
  109. package/lib/tree-hierarchy.module.d.ts +31 -0
  110. package/lib/tree-hierarchy.module.d.ts.map +1 -0
  111. package/lib/tree-hierarchy.service.d.ts +17 -0
  112. package/lib/tree-hierarchy.service.d.ts.map +1 -0
  113. package/material.module.d.ts +52 -0
  114. package/material.module.d.ts.map +1 -0
  115. package/package.json +43 -0
  116. package/public-api.d.ts +9 -0
  117. package/public-api.d.ts.map +1 -0
  118. package/sunbird-cb-tree-hierarchy.d.ts.map +1 -0
@@ -0,0 +1,149 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA } from '@angular/material/legacy-dialog';
3
+ import { FormControl } from '@angular/forms';
4
+ import { Subject } from 'rxjs';
5
+ import { takeUntil } from 'rxjs/operators';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/material/legacy-dialog";
8
+ import * as i2 from "../../tree-hierarchy.service";
9
+ import * as i3 from "@angular/common";
10
+ import * as i4 from "@angular/material/core";
11
+ import * as i5 from "@angular/material/button";
12
+ import * as i6 from "@angular/material/icon";
13
+ import * as i7 from "@angular/material/form-field";
14
+ import * as i8 from "@angular/material/select";
15
+ import * as i9 from "@angular/forms";
16
+ export class OrgHierarchyAddModalComponent {
17
+ constructor(dialogRef, data, treeHierarchySvc) {
18
+ this.dialogRef = dialogRef;
19
+ this.data = data;
20
+ this.treeHierarchySvc = treeHierarchySvc;
21
+ this.searchControl = new FormControl('');
22
+ this.selectedOrgsControl = new FormControl([]);
23
+ this.orgOptions = [];
24
+ this.filteredOptions = [];
25
+ this.destroy$ = new Subject();
26
+ }
27
+ ngOnInit() {
28
+ this.getSelectedStateOrg();
29
+ this.searchControl.valueChanges
30
+ .pipe(takeUntil(this.destroy$))
31
+ .subscribe((value) => {
32
+ this.filterOptions(value);
33
+ });
34
+ }
35
+ ngOnDestroy() {
36
+ this.destroy$.next();
37
+ this.destroy$.complete();
38
+ }
39
+ filterOptions(searchValue) {
40
+ if (!searchValue) {
41
+ this.filteredOptions = [...this.orgOptions];
42
+ return;
43
+ }
44
+ const filterValue = searchValue.toLowerCase();
45
+ this.filteredOptions = this.orgOptions.filter(option => option.orgName.toLowerCase().includes(filterValue));
46
+ const selectedIds = this.selectedOrgsControl.value || [];
47
+ if (selectedIds.length > 0) {
48
+ const missingSelectedOptions = this.orgOptions.filter((option) => selectedIds.includes(option.identifier) &&
49
+ !this.filteredOptions.some(filtered => filtered.identifier === option.identifier));
50
+ if (missingSelectedOptions.length > 0) {
51
+ this.filteredOptions = [...this.filteredOptions, ...missingSelectedOptions];
52
+ }
53
+ }
54
+ this.sortOptionsWithSelectedFirst();
55
+ }
56
+ sortOptionsWithSelectedFirst() {
57
+ const selectedIds = this.selectedOrgsControl.value || [];
58
+ this.filteredOptions.sort((a, b) => {
59
+ const aIsSelected = selectedIds.includes(a.identifier);
60
+ const bIsSelected = selectedIds.includes(b.identifier);
61
+ if (aIsSelected && !bIsSelected) {
62
+ return -1;
63
+ }
64
+ if (!aIsSelected && bIsSelected) {
65
+ return 1;
66
+ }
67
+ return a.orgName.localeCompare(b.orgName);
68
+ });
69
+ }
70
+ clearSearch(event) {
71
+ event.stopPropagation();
72
+ this.searchControl.setValue('');
73
+ }
74
+ toggleSelectAll(event) {
75
+ event.stopPropagation();
76
+ if (this.isAllSelected()) {
77
+ this.selectedOrgsControl.setValue([]);
78
+ }
79
+ else {
80
+ const allValues = this.filteredOptions.map(option => option.identifier);
81
+ this.selectedOrgsControl.setValue(allValues);
82
+ }
83
+ }
84
+ isAllSelected() {
85
+ const numSelected = this.selectedOrgsControl.value?.length || 0;
86
+ const numFiltered = this.filteredOptions.length;
87
+ return numSelected > 0 && numSelected === numFiltered;
88
+ }
89
+ getSelectedOptions() {
90
+ const selectedIds = this.selectedOrgsControl.value || [];
91
+ return this.orgOptions.filter((option) => selectedIds.includes(option.identifier));
92
+ }
93
+ removeSelected(id) {
94
+ const currentSelection = this.selectedOrgsControl.value || [];
95
+ this.selectedOrgsControl.setValue(currentSelection.filter((value) => value !== id));
96
+ }
97
+ onClose() {
98
+ this.dialogRef.close();
99
+ }
100
+ onSave() {
101
+ const selectedOrgs = this.getSelectedOptions();
102
+ this.dialogRef.close(selectedOrgs);
103
+ }
104
+ async getSelectedStateOrg() {
105
+ const requestBody = {
106
+ request: {
107
+ filters: {
108
+ status: 1,
109
+ ministryOrStateType: (this.data && this.data.selectedOrgData) ?
110
+ this.data.selectedOrgData.sbOrgType : '',
111
+ ministryOrStateId: (this.data && this.data.selectedOrgData) ?
112
+ this.data.selectedOrgData.identifier : ''
113
+ },
114
+ sort_by: {
115
+ createdDate: "desc"
116
+ },
117
+ limit: 100,
118
+ offset: 0,
119
+ fields: [
120
+ 'identifier',
121
+ 'orgName',
122
+ 'description',
123
+ 'parentOrgName',
124
+ 'ministryOrStateId',
125
+ 'ministryOrStateType',
126
+ 'ministryOrStateName'
127
+ ]
128
+ }
129
+ };
130
+ const orgListData = await this.treeHierarchySvc.orgSerachApi(requestBody).toPromise().catch(err => {
131
+ console.error('Error fetching organization data:', err);
132
+ });
133
+ if (orgListData && orgListData.result &&
134
+ orgListData.result.response && orgListData.result.response.content) {
135
+ this.orgOptions = orgListData.result.response.content || [];
136
+ this.filteredOptions = [...this.orgOptions];
137
+ }
138
+ }
139
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OrgHierarchyAddModalComponent, deps: [{ token: i1.MatLegacyDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.TreeHierarchyService }], target: i0.ɵɵFactoryTarget.Component }); }
140
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: OrgHierarchyAddModalComponent, selector: "sb-cb-tree-org-hierarchy-add-modal", ngImport: i0, template: "<div class=\"org-hierarchy-modal\">\n <!-- Modal Header -->\n <div class=\"modal-header\">\n <div class=\"header-title\">\n <h2 class=\"m-0\">Update Organisation Hierarchy</h2>\n </div>\n <button mat-icon-button class=\"close-button\" (click)=\"onClose()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <!-- Modal Content -->\n <div class=\"modal-content\">\n <div class=\"content-container\">\n <div class=\"flex flex-col org-container\">\n <label class=\"orgTypeName\">{{data?.selectedOrgData?.sbOrgType}}</label>\n <label class=\"orgTypeSelected\">{{data?.selectedOrgData?.orgName?.toLowerCase()}}</label>\n <div class=\"dashed-line\"></div>\n </div>\n <ng-container *ngIf=\"data?.previous?.length > 0\">\n <div class=\"flex flex-col org-container\" *ngFor=\"let item of data?.previous;let i = index\"\n [ngStyle]=\"{'margin-left': 30 * (i+1) + 'px'}\">\n <label class=\"orgTypeName\">{{item?.category?.toLowerCase()}}</label>\n <label class=\"orgTypeSelected\">{{item?.name?.toLowerCase()}}</label>\n <div class=\"dashed-line\"></div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"data?.currentData\">\n <div class=\"flex flex-col org-container\" \n [ngStyle]=\"{'margin-left': 30 * (data?.previous?.length + 1) + 'px'}\">\n <label class=\"orgTypeName\">{{data?.currentData?.code?.toLowerCase()}}</label>\n \n <!-- Searchable multi-select -->\n <div class=\"select-search-container\">\n <mat-form-field appearance=\"outline\" class=\"w-full custom-height-select\">\n <mat-select [formControl]=\"selectedOrgsControl\" placeholder=\"Select\" #singleSelect\n [panelClass]=\"'mat-select-panel-below'\" disableOptionCentering [disableOptionCentering]=\"true\"\n multiple> <!-- Added the multiple attribute here -->\n <!-- Search container -->\n <div class=\"search-container\">\n <input type=\"text\" [formControl]=\"searchControl\" placeholder=\"Search...\"\n (keydown)=\"$event.key === ' ' ? $event.stopPropagation() : null\" (click)=\"$event.stopPropagation()\"\n class=\"search-input\" #searchInput>\n </div>\n <mat-option *ngFor=\"let organization of filteredOptions\" [value]=\"organization.identifier\">\n {{organization.orgName}}\n </mat-option>\n <mat-option *ngIf=\"filteredOptions.length === 0\" disabled>\n No data found\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n \n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Modal Footer -->\n <div class=\"modal-footer\">\n <button mat-stroked-button class=\"btn-common btn-secondary\" (click)=\"onClose()\" type=\"button\">\n Cancel\n </button>\n <button \n mat-stroked-button \n class=\"btn-common btn-primary\" \n [disabled]=\"!selectedOrgsControl.value?.length\" \n (click)=\"onSave()\" \n type=\"button\">\n Save\n </button>\n </div>\n</div>", styles: [":host{display:block;height:100%}.custom-height-select{width:100%;margin-top:5px}.custom-height-select ::ng-deep .mat-mdc-select{height:35px;line-height:35px}.custom-height-select ::ng-deep .mat-form-field-flex{height:35px!important;min-height:35px!important}.custom-height-select ::ng-deep .mat-form-field-infix{min-height:35px!important;height:35px!important;display:flex;align-items:center;border:0;position:relative;padding:4px 8px 0}.custom-height-select ::ng-deep .mat-form-field-wrapper{height:35px;padding:0;margin:0}.custom-height-select ::ng-deep .mdc-notched-outline{border-radius:20px!important}.custom-height-select ::ng-deep .mdc-notched-outline__leading{display:none}.custom-height-select ::ng-deep .mdc-notched-outline__notch{border-color:#00000029!important}.custom-height-select ::ng-deep .mdc-notched-outline__trailing{border-color:#00000029!important;border-radius:20px!important;border-left:1px solid rgba(0,0,0,.1607843137)!important;border-right:1px solid rgba(0,0,0,.1607843137)!important}.custom-height-select ::ng-deep .mat-select-arrow-wrapper{padding-top:15px;transform:translateY(-4px)}.custom-height-select ::ng-deep .mat-select-value{line-height:35px}::ng-deep .right-side-modal.cdk-global-overlay-wrapper{justify-content:flex-end}::ng-deep .right-side-modal .mat-dialog-container{border-radius:0!important;padding:0!important;overflow-x:hidden;display:flex!important;flex-direction:column!important;height:100vh!important}::ng-deep .right-side-modal .cdk-overlay-pane{margin-right:0!important;max-width:90vw!important}::ng-deep .mat-pseudo-checkbox-checked{background-color:#1b4ca1!important;border-color:#1b4ca1!important}.org-hierarchy-modal{display:flex;flex-direction:column;height:100%}.org-hierarchy-modal .modal-header{display:flex;justify-content:space-between;align-items:center;padding:12px 24px;border-bottom:1px solid rgba(0,0,0,.08);flex-shrink:0}.org-hierarchy-modal .modal-header .header-title h2{font-size:16px;font-weight:600;color:#000000de}.org-hierarchy-modal .modal-header .close-button{color:#666}.org-hierarchy-modal .modal-content{flex:1;overflow-y:auto;padding:12px 24px;min-height:0}.org-hierarchy-modal .modal-content .content-container{max-width:800px;margin:0 auto}.org-hierarchy-modal .modal-content .form-field{margin-bottom:16px}.org-hierarchy-modal .modal-content .form-field .w-full{width:100%}.org-hierarchy-modal .modal-footer{display:flex;justify-content:flex-end;padding:12px 24px;border-top:1px solid rgba(0,0,0,.08);gap:16px;flex-shrink:0}.org-hierarchy-modal .modal-footer .cancel-btn,.org-hierarchy-modal .modal-footer .save-btn{min-width:100px}.searchable-select-container{margin-top:16px;margin-bottom:24px}.selected-items-container{margin-top:8px;margin-bottom:16px}.selected-items-container .selected-chips{display:flex;flex-wrap:wrap;gap:8px}::ng-deep .searchable-select-panel .mat-select-panel{max-height:350px}::ng-deep .searchable-select-panel .search-box{position:relative;padding:8px}::ng-deep .searchable-select-panel .search-box input{width:100%;height:36px;border:1px solid #ddd;border-radius:4px;padding:8px 36px 8px 12px;outline:none;font-size:14px}::ng-deep .searchable-select-panel .search-box input:focus{border-color:#1b4ca1}::ng-deep .searchable-select-panel .search-box .clear-search{position:absolute;right:8px;top:8px;width:24px;height:24px;line-height:24px}::ng-deep .searchable-select-panel .search-box .clear-search .mat-icon{font-size:16px;width:16px;height:16px;line-height:16px}::ng-deep .mat-chip{font-size:12px;min-height:26px}::ng-deep .mat-chip .mat-icon{font-size:16px;width:16px;height:16px}::ng-deep .mat-mdc-chip{font-size:12px;min-height:26px}::ng-deep .mat-mdc-chip .mat-icon{font-size:16px;width:16px!important;height:16px!important}::ng-deep .mat-mdc-chip-option[disabled]{opacity:1}::ng-deep .mat-mdc-chip-option[disabled] .mdc-evolution-chip__text-label{opacity:1}.m-0{margin:0}.w-full{width:100%}.orgTypeName{font-weight:700;font-size:14px;text-transform:capitalize}.orgTypeSelected{padding:5px 15px;border:1px solid rgba(0,0,0,.1607843137);background:#e8e9eb;border-radius:20px;margin-top:5px;font-size:14px;font-weight:400;text-transform:capitalize}.search-container{position:relative;width:100%;padding:8px;box-sizing:border-box}.search-container:before{content:\"\";position:absolute;left:16px;top:50%;transform:translateY(-50%);width:16px;height:16px;background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" fill=\"%23757575\"/></svg>');background-repeat:no-repeat;background-size:contain;z-index:1}.search-container .search-input{width:calc(100% - 8px);height:28px;border:1px solid rgba(0,0,0,.1607843137);border-radius:20px;padding:4px 12px 4px 36px;outline:none;font-size:14px;box-sizing:border-box}.search-container .search-input:focus{border-color:#1b4ca1}.dashed-line{height:25px;border-left:2px dashed #1B4CA1;margin-left:10px}.org-container{position:relative}.org-container:not(:first-child){margin-top:0}.org-container:not(:first-child):before{content:\"\";position:absolute;left:-20px;top:4px;height:8px;border-left:2px dashed #1B4CA1;z-index:0;border-bottom:2px dashed #1B4CA1;width:10px}.org-container:not(:first-child):after{content:\"\";position:absolute;left:-15px;top:8px;width:8px;height:8px;border-right:2px solid #1B4CA1;border-bottom:2px solid #1B4CA1;transform:rotate(-45deg);z-index:1;background-color:transparent}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] }); }
141
+ }
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OrgHierarchyAddModalComponent, decorators: [{
143
+ type: Component,
144
+ args: [{ selector: 'sb-cb-tree-org-hierarchy-add-modal', template: "<div class=\"org-hierarchy-modal\">\n <!-- Modal Header -->\n <div class=\"modal-header\">\n <div class=\"header-title\">\n <h2 class=\"m-0\">Update Organisation Hierarchy</h2>\n </div>\n <button mat-icon-button class=\"close-button\" (click)=\"onClose()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <!-- Modal Content -->\n <div class=\"modal-content\">\n <div class=\"content-container\">\n <div class=\"flex flex-col org-container\">\n <label class=\"orgTypeName\">{{data?.selectedOrgData?.sbOrgType}}</label>\n <label class=\"orgTypeSelected\">{{data?.selectedOrgData?.orgName?.toLowerCase()}}</label>\n <div class=\"dashed-line\"></div>\n </div>\n <ng-container *ngIf=\"data?.previous?.length > 0\">\n <div class=\"flex flex-col org-container\" *ngFor=\"let item of data?.previous;let i = index\"\n [ngStyle]=\"{'margin-left': 30 * (i+1) + 'px'}\">\n <label class=\"orgTypeName\">{{item?.category?.toLowerCase()}}</label>\n <label class=\"orgTypeSelected\">{{item?.name?.toLowerCase()}}</label>\n <div class=\"dashed-line\"></div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"data?.currentData\">\n <div class=\"flex flex-col org-container\" \n [ngStyle]=\"{'margin-left': 30 * (data?.previous?.length + 1) + 'px'}\">\n <label class=\"orgTypeName\">{{data?.currentData?.code?.toLowerCase()}}</label>\n \n <!-- Searchable multi-select -->\n <div class=\"select-search-container\">\n <mat-form-field appearance=\"outline\" class=\"w-full custom-height-select\">\n <mat-select [formControl]=\"selectedOrgsControl\" placeholder=\"Select\" #singleSelect\n [panelClass]=\"'mat-select-panel-below'\" disableOptionCentering [disableOptionCentering]=\"true\"\n multiple> <!-- Added the multiple attribute here -->\n <!-- Search container -->\n <div class=\"search-container\">\n <input type=\"text\" [formControl]=\"searchControl\" placeholder=\"Search...\"\n (keydown)=\"$event.key === ' ' ? $event.stopPropagation() : null\" (click)=\"$event.stopPropagation()\"\n class=\"search-input\" #searchInput>\n </div>\n <mat-option *ngFor=\"let organization of filteredOptions\" [value]=\"organization.identifier\">\n {{organization.orgName}}\n </mat-option>\n <mat-option *ngIf=\"filteredOptions.length === 0\" disabled>\n No data found\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n \n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Modal Footer -->\n <div class=\"modal-footer\">\n <button mat-stroked-button class=\"btn-common btn-secondary\" (click)=\"onClose()\" type=\"button\">\n Cancel\n </button>\n <button \n mat-stroked-button \n class=\"btn-common btn-primary\" \n [disabled]=\"!selectedOrgsControl.value?.length\" \n (click)=\"onSave()\" \n type=\"button\">\n Save\n </button>\n </div>\n</div>", styles: [":host{display:block;height:100%}.custom-height-select{width:100%;margin-top:5px}.custom-height-select ::ng-deep .mat-mdc-select{height:35px;line-height:35px}.custom-height-select ::ng-deep .mat-form-field-flex{height:35px!important;min-height:35px!important}.custom-height-select ::ng-deep .mat-form-field-infix{min-height:35px!important;height:35px!important;display:flex;align-items:center;border:0;position:relative;padding:4px 8px 0}.custom-height-select ::ng-deep .mat-form-field-wrapper{height:35px;padding:0;margin:0}.custom-height-select ::ng-deep .mdc-notched-outline{border-radius:20px!important}.custom-height-select ::ng-deep .mdc-notched-outline__leading{display:none}.custom-height-select ::ng-deep .mdc-notched-outline__notch{border-color:#00000029!important}.custom-height-select ::ng-deep .mdc-notched-outline__trailing{border-color:#00000029!important;border-radius:20px!important;border-left:1px solid rgba(0,0,0,.1607843137)!important;border-right:1px solid rgba(0,0,0,.1607843137)!important}.custom-height-select ::ng-deep .mat-select-arrow-wrapper{padding-top:15px;transform:translateY(-4px)}.custom-height-select ::ng-deep .mat-select-value{line-height:35px}::ng-deep .right-side-modal.cdk-global-overlay-wrapper{justify-content:flex-end}::ng-deep .right-side-modal .mat-dialog-container{border-radius:0!important;padding:0!important;overflow-x:hidden;display:flex!important;flex-direction:column!important;height:100vh!important}::ng-deep .right-side-modal .cdk-overlay-pane{margin-right:0!important;max-width:90vw!important}::ng-deep .mat-pseudo-checkbox-checked{background-color:#1b4ca1!important;border-color:#1b4ca1!important}.org-hierarchy-modal{display:flex;flex-direction:column;height:100%}.org-hierarchy-modal .modal-header{display:flex;justify-content:space-between;align-items:center;padding:12px 24px;border-bottom:1px solid rgba(0,0,0,.08);flex-shrink:0}.org-hierarchy-modal .modal-header .header-title h2{font-size:16px;font-weight:600;color:#000000de}.org-hierarchy-modal .modal-header .close-button{color:#666}.org-hierarchy-modal .modal-content{flex:1;overflow-y:auto;padding:12px 24px;min-height:0}.org-hierarchy-modal .modal-content .content-container{max-width:800px;margin:0 auto}.org-hierarchy-modal .modal-content .form-field{margin-bottom:16px}.org-hierarchy-modal .modal-content .form-field .w-full{width:100%}.org-hierarchy-modal .modal-footer{display:flex;justify-content:flex-end;padding:12px 24px;border-top:1px solid rgba(0,0,0,.08);gap:16px;flex-shrink:0}.org-hierarchy-modal .modal-footer .cancel-btn,.org-hierarchy-modal .modal-footer .save-btn{min-width:100px}.searchable-select-container{margin-top:16px;margin-bottom:24px}.selected-items-container{margin-top:8px;margin-bottom:16px}.selected-items-container .selected-chips{display:flex;flex-wrap:wrap;gap:8px}::ng-deep .searchable-select-panel .mat-select-panel{max-height:350px}::ng-deep .searchable-select-panel .search-box{position:relative;padding:8px}::ng-deep .searchable-select-panel .search-box input{width:100%;height:36px;border:1px solid #ddd;border-radius:4px;padding:8px 36px 8px 12px;outline:none;font-size:14px}::ng-deep .searchable-select-panel .search-box input:focus{border-color:#1b4ca1}::ng-deep .searchable-select-panel .search-box .clear-search{position:absolute;right:8px;top:8px;width:24px;height:24px;line-height:24px}::ng-deep .searchable-select-panel .search-box .clear-search .mat-icon{font-size:16px;width:16px;height:16px;line-height:16px}::ng-deep .mat-chip{font-size:12px;min-height:26px}::ng-deep .mat-chip .mat-icon{font-size:16px;width:16px;height:16px}::ng-deep .mat-mdc-chip{font-size:12px;min-height:26px}::ng-deep .mat-mdc-chip .mat-icon{font-size:16px;width:16px!important;height:16px!important}::ng-deep .mat-mdc-chip-option[disabled]{opacity:1}::ng-deep .mat-mdc-chip-option[disabled] .mdc-evolution-chip__text-label{opacity:1}.m-0{margin:0}.w-full{width:100%}.orgTypeName{font-weight:700;font-size:14px;text-transform:capitalize}.orgTypeSelected{padding:5px 15px;border:1px solid rgba(0,0,0,.1607843137);background:#e8e9eb;border-radius:20px;margin-top:5px;font-size:14px;font-weight:400;text-transform:capitalize}.search-container{position:relative;width:100%;padding:8px;box-sizing:border-box}.search-container:before{content:\"\";position:absolute;left:16px;top:50%;transform:translateY(-50%);width:16px;height:16px;background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" fill=\"%23757575\"/></svg>');background-repeat:no-repeat;background-size:contain;z-index:1}.search-container .search-input{width:calc(100% - 8px);height:28px;border:1px solid rgba(0,0,0,.1607843137);border-radius:20px;padding:4px 12px 4px 36px;outline:none;font-size:14px;box-sizing:border-box}.search-container .search-input:focus{border-color:#1b4ca1}.dashed-line{height:25px;border-left:2px dashed #1B4CA1;margin-left:10px}.org-container{position:relative}.org-container:not(:first-child){margin-top:0}.org-container:not(:first-child):before{content:\"\";position:absolute;left:-20px;top:4px;height:8px;border-left:2px dashed #1B4CA1;z-index:0;border-bottom:2px dashed #1B4CA1;width:10px}.org-container:not(:first-child):after{content:\"\";position:absolute;left:-15px;top:8px;width:8px;height:8px;border-right:2px solid #1B4CA1;border-bottom:2px solid #1B4CA1;transform:rotate(-45deg);z-index:1;background-color:transparent}\n"] }]
145
+ }], ctorParameters: function () { return [{ type: i1.MatLegacyDialogRef }, { type: undefined, decorators: [{
146
+ type: Inject,
147
+ args: [MAT_DIALOG_DATA]
148
+ }] }, { type: i2.TreeHierarchyService }]; } });
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWhpZXJhcmNoeS1hZGQtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RyZWUtaGllcmFyY2h5L3NyYy9saWIvY29tcG9uZW50cy9vcmctaGllcmFyY2h5LWFkZC1tb2RhbC9vcmctaGllcmFyY2h5LWFkZC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBc0Msc0JBQXNCLElBQUksZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEksT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7OztBQVEzQyxNQUFNLE9BQU8sNkJBQTZCO0lBVXhDLFlBQ1MsU0FBc0QsRUFDN0IsSUFBUyxFQUNqQyxnQkFBc0M7UUFGdkMsY0FBUyxHQUFULFNBQVMsQ0FBNkM7UUFDN0IsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXNCO1FBWmhELGtCQUFhLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsd0JBQW1CLEdBQUcsSUFBSSxXQUFXLENBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBRy9ELGVBQVUsR0FBVSxFQUFFLENBQUM7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WSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNoRyxPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU07WUFDbkMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQ2xFLElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDL0M7SUFDSCxDQUFDOytHQTFKVSw2QkFBNkIsb0RBWTlCLGVBQWU7bUdBWmQsNkJBQTZCLDBFQ1oxQyw4K0dBeUVNOzs0RkQ3RE8sNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLG9DQUFvQzs7MEJBZ0IzQyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZ1JlZiBhcyBNYXREaWFsb2dSZWYsIE1BVF9MRUdBQ1lfRElBTE9HX0RBVEEgYXMgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRyZWVIaWVyYXJjaHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdHJlZS1oaWVyYXJjaHkuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NiLWNiLXRyZWUtb3JnLWhpZXJhcmNoeS1hZGQtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vb3JnLWhpZXJhcmNoeS1hZGQtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vcmctaGllcmFyY2h5LWFkZC1tb2RhbC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE9yZ0hpZXJhcmNoeUFkZE1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBzZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgc2VsZWN0ZWRPcmdzQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDwoc3RyaW5nIHwgbnVtYmVyKVtdPihbXSk7XG4gIFxuICAvLyBFeGFtcGxlIG9wdGlvbnMgLSByZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgZGF0YVxuICBvcmdPcHRpb25zOiBhbnlbXSA9IFtdO1xuICBmaWx0ZXJlZE9wdGlvbnM6IGFueVtdID0gW107XG4gIFxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8T3JnSGllcmFyY2h5QWRkTW9kYWxDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICAgIHByaXZhdGUgdHJlZUhpZXJhcmNoeVN2YzogVHJlZUhpZXJhcmNoeVNlcnZpY2UsIFxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5nZXRTZWxlY3RlZFN0YXRlT3JnKClcbiAgICBcbiAgICAvLyBMaXN0ZW4gZm9yIHNlYXJjaCBjaGFuZ2VzXG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnModmFsdWUpO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBmaWx0ZXJPcHRpb25zKHNlYXJjaFZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFsuLi50aGlzLm9yZ09wdGlvbnNdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9yZ09wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBcbiAgICAgIG9wdGlvbi5vcmdOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpXG4gICAgKTtcbiAgICBcbiAgICAvLyBFbnN1cmUgc2VsZWN0ZWQgaXRlbXMgYXJlIHByZXNlcnZlZCBpbiB0aGUgZmlsdGVyZWQgbGlzdFxuICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gdGhpcy5zZWxlY3RlZE9yZ3NDb250cm9sLnZhbHVlIHx8IFtdO1xuICAgIGlmIChzZWxlY3RlZElkcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBGaW5kIGFueSBzZWxlY3RlZCBpdGVtcyB0aGF0IHdlcmUgZmlsdGVyZWQgb3V0XG4gICAgICBjb25zdCBtaXNzaW5nU2VsZWN0ZWRPcHRpb25zID0gdGhpcy5vcmdPcHRpb25zLmZpbHRlcigob3B0aW9uOmFueSkgPT4gXG4gICAgICAgIHNlbGVjdGVkSWRzLmluY2x1ZGVzKG9wdGlvbi5pZGVudGlmaWVyKSAmJiBcbiAgICAgICAgIXRoaXMuZmlsdGVyZWRPcHRpb25zLnNvbWUoZmlsdGVyZWQgPT4gZmlsdGVyZWQuaWRlbnRpZmllciA9PT0gb3B0aW9uLmlkZW50aWZpZXIpXG4gICAgICApO1xuICAgICAgLy8gQWRkIG1pc3Npbmcgc2VsZWN0ZWQgaXRlbXMgYmFjayB0byBmaWx0ZXJlZE9wdGlvbnNcbiAgICAgIGlmIChtaXNzaW5nU2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4udGhpcy5maWx0ZXJlZE9wdGlvbnMsIC4uLm1pc3NpbmdTZWxlY3RlZE9wdGlvbnNdO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNvcnRPcHRpb25zV2l0aFNlbGVjdGVkRmlyc3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydE9wdGlvbnNXaXRoU2VsZWN0ZWRGaXJzdCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZElkcyA9IHRoaXMuc2VsZWN0ZWRPcmdzQ29udHJvbC52YWx1ZSB8fCBbXTtcbiAgICBcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBhSXNTZWxlY3RlZCA9IHNlbGVjdGVkSWRzLmluY2x1ZGVzKGEuaWRlbnRpZmllcik7XG4gICAgICBjb25zdCBiSXNTZWxlY3RlZCA9IHNlbGVjdGVkSWRzLmluY2x1ZGVzKGIuaWRlbnRpZmllcik7XG4gICAgICBcbiAgICAgIGlmIChhSXNTZWxlY3RlZCAmJiAhYklzU2VsZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIC0xOyAvLyBhIGNvbWVzIGZpcnN0IChzZWxlY3RlZCBpdGVtcyBmaXJzdClcbiAgICAgIH1cbiAgICAgIGlmICghYUlzU2VsZWN0ZWQgJiYgYklzU2VsZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIDE7IC8vIGIgY29tZXMgZmlyc3QgKHNlbGVjdGVkIGl0ZW1zIGZpcnN0KVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJZiBib3RoIGFyZSBzZWxlY3RlZCBvciBib3RoIGFyZSBub3Qgc2VsZWN0ZWQsIHNvcnQgYWxwaGFiZXRpY2FsbHlcbiAgICAgIHJldHVybiBhLm9yZ05hbWUubG9jYWxlQ29tcGFyZShiLm9yZ05hbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJTZWFyY2goZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdEFsbChldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcmdzQ29udHJvbC5zZXRWYWx1ZShbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFsbFZhbHVlczphbnkgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5tYXAob3B0aW9uID0+IG9wdGlvbi5pZGVudGlmaWVyKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcmdzQ29udHJvbC5zZXRWYWx1ZShhbGxWYWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkT3Jnc0NvbnRyb2wudmFsdWU/Lmxlbmd0aCB8fCAwO1xuICAgIGNvbnN0IG51bUZpbHRlcmVkID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoO1xuICAgIHJldHVybiBudW1TZWxlY3RlZCA+IDAgJiYgbnVtU2VsZWN0ZWQgPT09IG51bUZpbHRlcmVkO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkSWRzOiBhbnkgPSB0aGlzLnNlbGVjdGVkT3Jnc0NvbnRyb2wudmFsdWUgfHwgW107XG4gICAgcmV0dXJuIHRoaXMub3JnT3B0aW9ucy5maWx0ZXIoKG9wdGlvbjogYW55KSA9PiBzZWxlY3RlZElkcy5pbmNsdWRlcyhvcHRpb24uaWRlbnRpZmllcikpO1xuICB9XG5cbiAgcmVtb3ZlU2VsZWN0ZWQoaWQ6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGVkT3Jnc0NvbnRyb2wudmFsdWUgfHwgW107XG4gICAgdGhpcy5zZWxlY3RlZE9yZ3NDb250cm9sLnNldFZhbHVlKFxuICAgICAgY3VycmVudFNlbGVjdGlvbi5maWx0ZXIoKHZhbHVlOiBhbnkpID0+IHZhbHVlICE9PSBpZClcbiAgICApO1xuICB9XG5cbiAgb25DbG9zZSgpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG5cbiAgb25TYXZlKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkT3JncyA9IHRoaXMuZ2V0U2VsZWN0ZWRPcHRpb25zKCk7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoc2VsZWN0ZWRPcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGdldFNlbGVjdGVkU3RhdGVPcmcoKSB7XG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgIHN0YXR1czogMSxcbiAgICAgICAgICAgIG1pbmlzdHJ5T3JTdGF0ZVR5cGU6ICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnNlbGVjdGVkT3JnRGF0YSkgP1xuICAgICAgICAgICAgIHRoaXMuZGF0YS5zZWxlY3RlZE9yZ0RhdGEuc2JPcmdUeXBlIDogJycsXG4gICAgICAgICAgICBtaW5pc3RyeU9yU3RhdGVJZDogKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEuc2VsZWN0ZWRPcmdEYXRhKSA/IFxuICAgICAgICAgICAgdGhpcy5kYXRhLnNlbGVjdGVkT3JnRGF0YS5pZGVudGlmaWVyIDogJydcbiAgICAgICAgfSxcbiAgICAgICAgc29ydF9ieToge1xuICAgICAgICAgICAgY3JlYXRlZERhdGU6IFwiZGVzY1wiXG4gICAgICAgIH0sXG4gICAgICAgIGxpbWl0OiAxMDAsXG4gICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICAnaWRlbnRpZmllcicsXG4gICAgICAgICAgICAnb3JnTmFtZScsXG4gICAgICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgJ3BhcmVudE9yZ05hbWUnLFxuICAgICAgICAgICAgJ21pbmlzdHJ5T3JTdGF0ZUlkJyxcbiAgICAgICAgICAgICdtaW5pc3RyeU9yU3RhdGVUeXBlJyxcbiAgICAgICAgICAgICdtaW5pc3RyeU9yU3RhdGVOYW1lJ1xuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG9yZ0xpc3REYXRhID0gYXdhaXQgdGhpcy50cmVlSGllcmFyY2h5U3ZjLm9yZ1NlcmFjaEFwaShyZXF1ZXN0Qm9keSkudG9Qcm9taXNlKCkuY2F0Y2goZXJyID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIG9yZ2FuaXphdGlvbiBkYXRhOicsIGVycik7XG4gICAgfSk7XG4gICAgaWYgKG9yZ0xpc3REYXRhICYmIG9yZ0xpc3REYXRhLnJlc3VsdCAmJiBcbiAgICAgIG9yZ0xpc3REYXRhLnJlc3VsdC5yZXNwb25zZSAmJiBvcmdMaXN0RGF0YS5yZXN1bHQucmVzcG9uc2UuY29udGVudCkge1xuICAgICAgICB0aGlzLm9yZ09wdGlvbnMgPSBvcmdMaXN0RGF0YS5yZXN1bHQucmVzcG9uc2UuY29udGVudCB8fCBbXTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4udGhpcy5vcmdPcHRpb25zXTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvcmctaGllcmFyY2h5LW1vZGFsXCI+XG4gIDwhLS0gTW9kYWwgSGVhZGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZVwiPlxuICAgICAgPGgyIGNsYXNzPVwibS0wXCI+VXBkYXRlIE9yZ2FuaXNhdGlvbiBIaWVyYXJjaHk8L2gyPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiY2xvc2UtYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBNb2RhbCBDb250ZW50IC0tPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBvcmctY29udGFpbmVyXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwib3JnVHlwZU5hbWVcIj57e2RhdGE/LnNlbGVjdGVkT3JnRGF0YT8uc2JPcmdUeXBlfX08L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm9yZ1R5cGVTZWxlY3RlZFwiPnt7ZGF0YT8uc2VsZWN0ZWRPcmdEYXRhPy5vcmdOYW1lPy50b0xvd2VyQ2FzZSgpfX08L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXNoZWQtbGluZVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LnByZXZpb3VzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBvcmctY29udGFpbmVyXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YT8ucHJldmlvdXM7bGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7J21hcmdpbi1sZWZ0JzogMzAgKiAoaSsxKSArICdweCd9XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwib3JnVHlwZU5hbWVcIj57e2l0ZW0/LmNhdGVnb3J5Py50b0xvd2VyQ2FzZSgpfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm9yZ1R5cGVTZWxlY3RlZFwiPnt7aXRlbT8ubmFtZT8udG9Mb3dlckNhc2UoKX19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGFzaGVkLWxpbmVcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LmN1cnJlbnREYXRhXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBvcmctY29udGFpbmVyXCIgXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7J21hcmdpbi1sZWZ0JzogMzAgKiAoZGF0YT8ucHJldmlvdXM/Lmxlbmd0aCArIDEpICsgJ3B4J31cIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJvcmdUeXBlTmFtZVwiPnt7ZGF0YT8uY3VycmVudERhdGE/LmNvZGU/LnRvTG93ZXJDYXNlKCl9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPCEtLSBTZWFyY2hhYmxlIG11bHRpLXNlbGVjdCAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXNlYXJjaC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGwgY3VzdG9tLWhlaWdodC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJzZWxlY3RlZE9yZ3NDb250cm9sXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIiAjc2luZ2xlU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBbcGFuZWxDbGFzc109XCInbWF0LXNlbGVjdC1wYW5lbC1iZWxvdydcIiBkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIFtkaXNhYmxlT3B0aW9uQ2VudGVyaW5nXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU+IDwhLS0gQWRkZWQgdGhlIG11bHRpcGxlIGF0dHJpYnV0ZSBoZXJlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGNvbnRhaW5lciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbZm9ybUNvbnRyb2xdPVwic2VhcmNoQ29udHJvbFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LmtleSA9PT0gJyAnID8gJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIDogbnVsbFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiICNzZWFyY2hJbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3JnYW5pemF0aW9uIG9mIGZpbHRlcmVkT3B0aW9uc1wiIFt2YWx1ZV09XCJvcmdhbml6YXRpb24uaWRlbnRpZmllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29yZ2FuaXphdGlvbi5vcmdOYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIGRhdGEgZm91bmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gTW9kYWwgRm9vdGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJidG4tY29tbW9uIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwib25DbG9zZSgpXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgQ2FuY2VsXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBcbiAgICAgIG1hdC1zdHJva2VkLWJ1dHRvbiBcbiAgICAgIGNsYXNzPVwiYnRuLWNvbW1vbiBidG4tcHJpbWFyeVwiIFxuICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZE9yZ3NDb250cm9sLnZhbHVlPy5sZW5ndGhcIiBcbiAgICAgIChjbGljayk9XCJvblNhdmUoKVwiIFxuICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgU2F2ZVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -0,0 +1,64 @@
1
+ import { Component } from '@angular/core';
2
+ import * as API from '../../constants/app-constant';
3
+ import { labels } from '../../labels/strings';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../services/approval.service";
6
+ import * as i2 from "../../services/framework.service";
7
+ import * as i3 from "@angular/common";
8
+ import * as i4 from "@angular/material/card";
9
+ import * as i5 from "@angular/material/icon";
10
+ import * as i6 from "@angular/material/tooltip";
11
+ import * as i7 from "@angular/router";
12
+ import * as i8 from "../../pipes/order-by.pipe";
13
+ export class PendingApprovalComponent {
14
+ constructor(approvalService, frameworkService) {
15
+ this.approvalService = approvalService;
16
+ this.frameworkService = frameworkService;
17
+ this.pendingList = [];
18
+ this.approvalList = [];
19
+ this.categories = [];
20
+ this.app_strings = labels;
21
+ }
22
+ ngOnInit() {
23
+ this.getApprovalList();
24
+ this.frameworkService.getFrameworkInfo().subscribe(res => {
25
+ this.categories = res.result.framework.categories.map((d) => d.code);
26
+ });
27
+ }
28
+ getApprovalList() {
29
+ const payload = { applicationStatus: API.APPROVAL.LEVEL1, serviceName: API.APPROVAL.SERVICE_NAME };
30
+ this.approvalService.getApprovalList(payload).subscribe((res) => {
31
+ this.approvalList = res.result.data;
32
+ });
33
+ }
34
+ removeDuplicates(arr) {
35
+ return [...new Set(arr)];
36
+ }
37
+ createApprovalList(updateFieldValues) {
38
+ let updateFileds = [];
39
+ let categories = [];
40
+ let approvalList = [];
41
+ updateFileds = JSON.parse(updateFieldValues);
42
+ categories = updateFileds.map((fd) => fd.category);
43
+ categories = this.removeDuplicates(categories);
44
+ categories.forEach((c) => {
45
+ let temp = { name: '', terms: [], children: [] };
46
+ temp.name = c,
47
+ temp.children = updateFileds.filter((term) => term.category === c);
48
+ approvalList.push(temp);
49
+ });
50
+ return approvalList;
51
+ }
52
+ getTerms(terms) {
53
+ const temp = terms.map((t) => t.name);
54
+ temp.shift();
55
+ return temp;
56
+ }
57
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PendingApprovalComponent, deps: [{ token: i1.ApprovalService }, { token: i2.FrameworkService }], target: i0.ɵɵFactoryTarget.Component }); }
58
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PendingApprovalComponent, selector: "lib-pending-approval", ngImport: i0, template: "<div class=\"pending-approval\">\n <header class=\"mat-header\">\n <h2>{{app_strings.pendingApproval}} ({{approvalList.length}})</h2>\n </header>\n\n <mat-card *ngFor=\"let p of approvalList | orderBy\">\n\n <mat-card-content>\n <span class=\"date\">\n <h4>{{app_strings.date}}</h4>\n <span>{{p.lastUpdatedOn | date}}</span>\n </span>\n <div *ngFor=\"let t of createApprovalList(p.updateFieldValues)\" class=\"col\">\n <h4>{{t.name}}</h4>\n <div matTooltip=\"{{getTerms(t.children)}}\" matTooltipPosition=\"above\" matTooltipClass=\"custom-tooltip\">\n {{t.children[0].name}}\n <ng-container *ngIf=\"t.children.length>1\">\n & {{t.children.length-1}} {{app_strings.more}}\n </ng-container>\n </div>\n </div>\n <a class=\"approve-view-link\" routerLink=\"/approval/{{p.wfId}}\"><mat-icon>{{app_strings.rightArrow}}</mat-icon></a>\n </mat-card-content>\n </mat-card>\n <!-- <mat-tab-group mat-align-tabs=\"center\" animationDuration=\"0ms\">\n <mat-tab label=\"Sent for approval\" active> -->\n <!-- <mat-card>\n <mat-card-content>\n <div *ngFor=\"let t of categories\" class=\"col\">\n <h4>{{t}}</h4>\n </div>\n </mat-card-content>\n </mat-card> -->\n <!-- <mat-card *ngFor=\"let p of approvalList\">\n <mat-card-content>\n <div *ngFor=\"let t of createApprovalList(p.updateFieldValues)\" class=\"col\">\n <h4>{{t.name}}</h4>\n <div matTooltip=\"{{getTerms(t.children)}}\" matTooltipPosition=\"above\" matTooltipClass=\"custom-tooltip\">\n {{t.children[0].name}}\n <ng-container *ngIf=\"t.children.length>1\">\n & {{t.children.length-1}} more...\n </ng-container>\n </div>\n \n </div> \n <a class=\"approve-view-link\" routerLink=\"/approval/{{p.wfId}}\"><mat-icon>keyboard_arrow_right</mat-icon></a>\n </mat-card-content>\n </mat-card>\n </mat-tab> -->\n <!-- <mat-tab label=\"Approved\"> Approved </mat-tab>\n <mat-tab label=\"Rejected\"> Rejected </mat-tab> -->\n <!-- </mat-tab-group> -->\n\n</div>", styles: [".pending-approval{padding:0 15px}.pending-approval h2{font-weight:400}.pending-approval .mat-tab-group ::ng-deep .mat-tab-header{background-color:#fff}.pending-approval .mat-tab-group ::ng-deep .mat-tab-header .mat-tab-label{padding:0 10px}.pending-approval .mat-tab-group ::ng-deep .mat-tab-header .mat-tab-label .mat-tab-label-content{color:#000}.pending-approval .mat-tab-group ::ng-deep .mat-tab-header .mat-tab-label-active{background:#fff}.pending-approval .mat-tab-group ::ng-deep .mat-tab-header .mat-tab-label-active .mat-tab-label-content{color:#000}.pending-approval .mat-card{background:#f3f3f3;margin-top:25px;padding:5px 0;box-shadow:none}.pending-approval .mat-card-content{display:flex;flex-direction:row;justify-content:left;align-items:center;padding-left:4%;position:relative}.pending-approval .mat-card-content h4{text-transform:capitalize;padding:0;margin:10px 0}.pending-approval .mat-card-content .approve-view-link{position:absolute;right:4%}.pending-approval .col{display:flex;flex-direction:column;padding-right:100px}.pending-approval .col div{cursor:pointer;font-size:20px}::ng-deep .custom-tooltip{font-size:16px;background:#fff!important;color:#000!important;padding:10px 0}::ng-deep .mat-icon{font-size:40px;color:#000000de;cursor:pointer}.date{padding:0 20px;font-weight:600}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: i8.OrderByPipe, name: "orderBy" }] }); }
59
+ }
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PendingApprovalComponent, decorators: [{
61
+ type: Component,
62
+ args: [{ selector: 'lib-pending-approval', template: "<div class=\"pending-approval\">\n <header class=\"mat-header\">\n <h2>{{app_strings.pendingApproval}} ({{approvalList.length}})</h2>\n </header>\n\n <mat-card *ngFor=\"let p of approvalList | orderBy\">\n\n <mat-card-content>\n <span class=\"date\">\n <h4>{{app_strings.date}}</h4>\n <span>{{p.lastUpdatedOn | date}}</span>\n </span>\n <div *ngFor=\"let t of createApprovalList(p.updateFieldValues)\" class=\"col\">\n <h4>{{t.name}}</h4>\n <div matTooltip=\"{{getTerms(t.children)}}\" matTooltipPosition=\"above\" matTooltipClass=\"custom-tooltip\">\n {{t.children[0].name}}\n <ng-container *ngIf=\"t.children.length>1\">\n & {{t.children.length-1}} {{app_strings.more}}\n </ng-container>\n </div>\n </div>\n <a class=\"approve-view-link\" routerLink=\"/approval/{{p.wfId}}\"><mat-icon>{{app_strings.rightArrow}}</mat-icon></a>\n </mat-card-content>\n </mat-card>\n <!-- <mat-tab-group mat-align-tabs=\"center\" animationDuration=\"0ms\">\n <mat-tab label=\"Sent for approval\" active> -->\n <!-- <mat-card>\n <mat-card-content>\n <div *ngFor=\"let t of categories\" class=\"col\">\n <h4>{{t}}</h4>\n </div>\n </mat-card-content>\n </mat-card> -->\n <!-- <mat-card *ngFor=\"let p of approvalList\">\n <mat-card-content>\n <div *ngFor=\"let t of createApprovalList(p.updateFieldValues)\" class=\"col\">\n <h4>{{t.name}}</h4>\n <div matTooltip=\"{{getTerms(t.children)}}\" matTooltipPosition=\"above\" matTooltipClass=\"custom-tooltip\">\n {{t.children[0].name}}\n <ng-container *ngIf=\"t.children.length>1\">\n & {{t.children.length-1}} more...\n </ng-container>\n </div>\n \n </div> \n <a class=\"approve-view-link\" routerLink=\"/approval/{{p.wfId}}\"><mat-icon>keyboard_arrow_right</mat-icon></a>\n </mat-card-content>\n </mat-card>\n </mat-tab> -->\n <!-- <mat-tab label=\"Approved\"> Approved </mat-tab>\n <mat-tab label=\"Rejected\"> Rejected </mat-tab> -->\n <!-- </mat-tab-group> -->\n\n</div>", styles: [".pending-approval{padding:0 15px}.pending-approval h2{font-weight:400}.pending-approval .mat-tab-group ::ng-deep .mat-tab-header{background-color:#fff}.pending-approval .mat-tab-group ::ng-deep .mat-tab-header .mat-tab-label{padding:0 10px}.pending-approval .mat-tab-group ::ng-deep .mat-tab-header .mat-tab-label .mat-tab-label-content{color:#000}.pending-approval .mat-tab-group ::ng-deep .mat-tab-header .mat-tab-label-active{background:#fff}.pending-approval .mat-tab-group ::ng-deep .mat-tab-header .mat-tab-label-active .mat-tab-label-content{color:#000}.pending-approval .mat-card{background:#f3f3f3;margin-top:25px;padding:5px 0;box-shadow:none}.pending-approval .mat-card-content{display:flex;flex-direction:row;justify-content:left;align-items:center;padding-left:4%;position:relative}.pending-approval .mat-card-content h4{text-transform:capitalize;padding:0;margin:10px 0}.pending-approval .mat-card-content .approve-view-link{position:absolute;right:4%}.pending-approval .col{display:flex;flex-direction:column;padding-right:100px}.pending-approval .col div{cursor:pointer;font-size:20px}::ng-deep .custom-tooltip{font-size:16px;background:#fff!important;color:#000!important;padding:10px 0}::ng-deep .mat-icon{font-size:40px;color:#000000de;cursor:pointer}.date{padding:0 20px;font-weight:600}\n"] }]
63
+ }], ctorParameters: function () { return [{ type: i1.ApprovalService }, { type: i2.FrameworkService }]; } });
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZy1hcHByb3ZhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3BlbmRpbmctYXBwcm92YWwvcGVuZGluZy1hcHByb3ZhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3BlbmRpbmctYXBwcm92YWwvcGVuZGluZy1hcHByb3ZhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sS0FBSyxHQUFHLE1BQU0sOEJBQThCLENBQUM7QUFHcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7O0FBTzlDLE1BQU0sT0FBTyx3QkFBd0I7SUFLbkMsWUFBb0IsZUFBZ0MsRUFBVSxnQkFBa0M7UUFBNUUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUpoRyxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGdCQUFXLEdBQVEsTUFBTSxDQUFDO0lBQzBFLENBQUM7SUFFckcsUUFBUTtRQUNKLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtRQUN0QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDM0UsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sT0FBTyxHQUFtQixFQUFFLGlCQUFpQixFQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ2hILElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQU8sRUFBRSxFQUFFO1lBQ2pFLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUE7UUFDdEMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBTztRQUN0QixPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxpQkFBc0I7UUFDdkMsSUFBSSxZQUFZLEdBQU8sRUFBRSxDQUFBO1FBQ3pCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQTtRQUNuQixJQUFJLFlBQVksR0FBUSxFQUFFLENBQUE7UUFDMUIsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM3QyxVQUFVLEdBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3hELFVBQVUsR0FBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDL0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3ZCLElBQUksSUFBSSxHQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUMsQ0FBQTtZQUNqRCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQ3ZFLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdkIsQ0FBQyxDQUFDLENBQUE7UUFDRixPQUFPLFlBQVksQ0FBQTtJQUN2QixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVU7UUFDZixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ1osT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDOytHQTdDVSx3QkFBd0I7bUdBQXhCLHdCQUF3Qiw0RENackMsaW5GQXFETTs7NEZEekNPLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwcm92YWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwcm92YWwuc2VydmljZSc7XG5pbXBvcnQgKiBhcyBBUEkgZnJvbSAnLi4vLi4vY29uc3RhbnRzL2FwcC1jb25zdGFudCc7XG5pbXBvcnQgeyBGcmFtZXdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZnJhbWV3b3JrLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgSUFwcCBmcm9tICcuLi8uLi9tb2RlbHMvYXBwcm92YWwubW9kZWwnO1xuaW1wb3J0IHsgbGFiZWxzIH0gZnJvbSAnLi4vLi4vbGFiZWxzL3N0cmluZ3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItcGVuZGluZy1hcHByb3ZhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9wZW5kaW5nLWFwcHJvdmFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGVuZGluZy1hcHByb3ZhbC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFBlbmRpbmdBcHByb3ZhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHBlbmRpbmdMaXN0ID0gW107XG4gIGFwcHJvdmFsTGlzdCA9IFtdO1xuICBjYXRlZ29yaWVzID0gW107XG4gIGFwcF9zdHJpbmdzOiBhbnkgPSBsYWJlbHM7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwcm92YWxTZXJ2aWNlOiBBcHByb3ZhbFNlcnZpY2UsIHByaXZhdGUgZnJhbWV3b3JrU2VydmljZTogRnJhbWV3b3JrU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgICB0aGlzLmdldEFwcHJvdmFsTGlzdCgpXG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSW5mbygpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXMgPSByZXMucmVzdWx0LmZyYW1ld29yay5jYXRlZ29yaWVzLm1hcCgoZDogYW55KSA9PiBkLmNvZGUpXG4gICAgICB9KVxuICB9XG5cbiAgZ2V0QXBwcm92YWxMaXN0KCkge1xuICAgIGNvbnN0IHBheWxvYWQ6IElBcHAuSUFwcHJvdmFsID0geyBhcHBsaWNhdGlvblN0YXR1czpBUEkuQVBQUk9WQUwuTEVWRUwxLCBzZXJ2aWNlTmFtZTpBUEkuQVBQUk9WQUwuU0VSVklDRV9OQU1FIH1cbiAgICB0aGlzLmFwcHJvdmFsU2VydmljZS5nZXRBcHByb3ZhbExpc3QocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6YW55KSA9PiB7XG4gICAgICAgdGhpcy5hcHByb3ZhbExpc3QgPSByZXMucmVzdWx0LmRhdGFcbiAgICB9KVxuICB9XG5cbiAgcmVtb3ZlRHVwbGljYXRlcyhhcnI6YW55KSB7XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KGFycildO1xuICB9XG5cbiAgY3JlYXRlQXBwcm92YWxMaXN0KHVwZGF0ZUZpZWxkVmFsdWVzIDphbnkpe1xuICAgIGxldCB1cGRhdGVGaWxlZHM6YW55ID0gW11cbiAgICBsZXQgY2F0ZWdvcmllcyA9IFtdXG4gICAgbGV0IGFwcHJvdmFsTGlzdDogYW55ID0gW11cbiAgICB1cGRhdGVGaWxlZHMgPSBKU09OLnBhcnNlKHVwZGF0ZUZpZWxkVmFsdWVzKTtcbiAgICBjYXRlZ29yaWVzID0gIHVwZGF0ZUZpbGVkcy5tYXAoKGZkOiBhbnkpID0+IGZkLmNhdGVnb3J5KVxuICAgIGNhdGVnb3JpZXMgPSAgdGhpcy5yZW1vdmVEdXBsaWNhdGVzKGNhdGVnb3JpZXMpXG4gICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICBsZXQgdGVtcDogYW55ID0ge25hbWU6JycsIHRlcm1zOltdLCBjaGlsZHJlbjogW119XG4gICAgICB0ZW1wLm5hbWUgPSBjLFxuICAgICAgdGVtcC5jaGlsZHJlbiA9IHVwZGF0ZUZpbGVkcy5maWx0ZXIoKHRlcm06IGFueSkgPT4gdGVybS5jYXRlZ29yeSA9PT0gYylcbiAgICAgIGFwcHJvdmFsTGlzdC5wdXNoKHRlbXApXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGFwcHJvdmFsTGlzdFxuICB9XG5cbiAgZ2V0VGVybXModGVybXM6IGFueSl7XG4gICAgICBjb25zdCB0ZW1wID0gdGVybXMubWFwKCh0OmFueSkgPT4gdC5uYW1lKTtcbiAgICAgIHRlbXAuc2hpZnQoKVxuICAgICAgcmV0dXJuIHRlbXBcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwicGVuZGluZy1hcHByb3ZhbFwiPlxuICAgIDxoZWFkZXIgY2xhc3M9XCJtYXQtaGVhZGVyXCI+XG4gICAgICAgIDxoMj57e2FwcF9zdHJpbmdzLnBlbmRpbmdBcHByb3ZhbH19ICh7e2FwcHJvdmFsTGlzdC5sZW5ndGh9fSk8L2gyPlxuICAgIDwvaGVhZGVyPlxuXG4gICAgPG1hdC1jYXJkICpuZ0Zvcj1cImxldCBwIG9mIGFwcHJvdmFsTGlzdCB8IG9yZGVyQnlcIj5cblxuICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxoND57e2FwcF9zdHJpbmdzLmRhdGV9fTwvaDQ+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3twLmxhc3RVcGRhdGVkT24gfCBkYXRlfX08L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0IG9mIGNyZWF0ZUFwcHJvdmFsTGlzdChwLnVwZGF0ZUZpZWxkVmFsdWVzKVwiIGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgPGg0Pnt7dC5uYW1lfX08L2g0PlxuICAgICAgICAgICAgICAgIDxkaXYgbWF0VG9vbHRpcD1cInt7Z2V0VGVybXModC5jaGlsZHJlbil9fVwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAge3t0LmNoaWxkcmVuWzBdLm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidC5jaGlsZHJlbi5sZW5ndGg+MVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJiB7e3QuY2hpbGRyZW4ubGVuZ3RoLTF9fSB7e2FwcF9zdHJpbmdzLm1vcmV9fVxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJhcHByb3ZlLXZpZXctbGlua1wiIHJvdXRlckxpbms9XCIvYXBwcm92YWwve3twLndmSWR9fVwiPjxtYXQtaWNvbj57e2FwcF9zdHJpbmdzLnJpZ2h0QXJyb3d9fTwvbWF0LWljb24+PC9hPlxuICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgPC9tYXQtY2FyZD5cbiAgICA8IS0tIDxtYXQtdGFiLWdyb3VwIG1hdC1hbGlnbi10YWJzPVwiY2VudGVyXCIgYW5pbWF0aW9uRHVyYXRpb249XCIwbXNcIj5cbiAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJTZW50IGZvciBhcHByb3ZhbFwiIGFjdGl2ZT4gIC0tPlxuICAgIDwhLS0gPG1hdC1jYXJkPlxuICAgICAgICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHQgb2YgY2F0ZWdvcmllc1wiIGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQ+e3t0fX08L2g0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgIDwvbWF0LWNhcmQ+IC0tPlxuICAgIDwhLS0gPG1hdC1jYXJkICpuZ0Zvcj1cImxldCBwIG9mIGFwcHJvdmFsTGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHQgb2YgY3JlYXRlQXBwcm92YWxMaXN0KHAudXBkYXRlRmllbGRWYWx1ZXMpXCIgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0Pnt7dC5uYW1lfX08L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFRvb2x0aXA9XCJ7e2dldFRlcm1zKHQuY2hpbGRyZW4pfX1cIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0LmNoaWxkcmVuWzBdLm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0LmNoaWxkcmVuLmxlbmd0aD4xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiB7e3QuY2hpbGRyZW4ubGVuZ3RoLTF9fSBtb3JlLi4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImFwcHJvdmUtdmlldy1saW5rXCIgcm91dGVyTGluaz1cIi9hcHByb3ZhbC97e3Aud2ZJZH19XCI+PG1hdC1pY29uPmtleWJvYXJkX2Fycm93X3JpZ2h0PC9tYXQtaWNvbj48L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICAgIDwvbWF0LXRhYj4gLS0+XG4gICAgPCEtLSA8bWF0LXRhYiBsYWJlbD1cIkFwcHJvdmVkXCI+IEFwcHJvdmVkIDwvbWF0LXRhYj5cbiAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJSZWplY3RlZFwiPiBSZWplY3RlZCA8L21hdC10YWI+IC0tPlxuICAgIDwhLS0gPC9tYXQtdGFiLWdyb3VwPiAtLT5cblxuPC9kaXY+Il19