ms-data-grid 0.0.58 → 0.0.59

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 (64) hide show
  1. package/ng-package.json +18 -0
  2. package/package.json +38 -51
  3. package/src/lib/css/bootstrap.css +12043 -0
  4. package/src/lib/data-grid/animations.ts +267 -0
  5. package/src/lib/data-grid/data-grid.component.html +5724 -0
  6. package/src/lib/data-grid/data-grid.component.scss +2126 -0
  7. package/src/lib/data-grid/data-grid.component.spec.ts +28 -0
  8. package/src/lib/data-grid/data-grid.component.ts +5780 -0
  9. package/src/lib/data-grid/statuses.ts +49 -0
  10. package/src/lib/data-grid.module.ts +21 -0
  11. package/src/lib/data-grid.service.spec.ts +16 -0
  12. package/src/lib/data-grid.service.ts +9 -0
  13. package/src/lib/directives/cell-render-init.directive.spec.ts +11 -0
  14. package/src/lib/directives/cell-render-init.directive.ts +65 -0
  15. package/src/lib/directives/cellHost.directive.spec.ts +11 -0
  16. package/src/lib/directives/cellHost.directive.ts +10 -0
  17. package/src/lib/directives/draggable-header.directive.spec.ts +11 -0
  18. package/src/lib/directives/draggable-header.directive.ts +172 -0
  19. package/src/lib/pipes/filter.pipe.spec.ts +11 -0
  20. package/src/lib/pipes/filter.pipe.ts +22 -0
  21. package/src/lib/services/cell-selection.service.spec.ts +16 -0
  22. package/src/lib/services/cell-selection.service.ts +205 -0
  23. package/src/lib/services/common.service.spec.ts +16 -0
  24. package/src/lib/services/common.service.ts +306 -0
  25. package/src/lib/services/copy-service.service.spec.ts +16 -0
  26. package/src/lib/services/copy-service.service.ts +252 -0
  27. package/src/lib/services/drag-drp.service.spec.ts +16 -0
  28. package/src/lib/services/drag-drp.service.ts +58 -0
  29. package/src/lib/services/export.service.spec.ts +16 -0
  30. package/src/lib/services/export.service.ts +189 -0
  31. package/src/lib/services/split-columns.service.spec.ts +16 -0
  32. package/src/lib/services/split-columns.service.ts +148 -0
  33. package/src/lib/services/swap-columns.service.spec.ts +16 -0
  34. package/src/lib/services/swap-columns.service.ts +162 -0
  35. package/{public-api.d.ts → src/public-api.ts} +6 -2
  36. package/src/typings.d.ts +4 -0
  37. package/tsconfig.lib.json +19 -0
  38. package/tsconfig.lib.prod.json +10 -0
  39. package/tsconfig.spec.json +14 -0
  40. package/esm2022/lib/data-grid/data-grid.component.mjs +0 -5068
  41. package/esm2022/lib/data-grid/statuses.mjs +0 -45
  42. package/esm2022/lib/data-grid.module.mjs +0 -27
  43. package/esm2022/lib/directives/cell-render-init.directive.mjs +0 -67
  44. package/esm2022/lib/directives/cellHost.directive.mjs +0 -16
  45. package/esm2022/lib/pipes/filter.pipe.mjs +0 -28
  46. package/esm2022/lib/services/common.service.mjs +0 -259
  47. package/esm2022/lib/services/copy-service.service.mjs +0 -222
  48. package/esm2022/lib/services/export.service.mjs +0 -149
  49. package/esm2022/lib/services/split-columns.service.mjs +0 -143
  50. package/esm2022/ms-data-grid.mjs +0 -5
  51. package/esm2022/public-api.mjs +0 -6
  52. package/fesm2022/ms-data-grid.mjs +0 -6005
  53. package/fesm2022/ms-data-grid.mjs.map +0 -1
  54. package/index.d.ts +0 -5
  55. package/lib/data-grid/data-grid.component.d.ts +0 -564
  56. package/lib/data-grid/statuses.d.ts +0 -3
  57. package/lib/data-grid.module.d.ts +0 -15
  58. package/lib/directives/cell-render-init.directive.d.ts +0 -18
  59. package/lib/directives/cellHost.directive.d.ts +0 -8
  60. package/lib/pipes/filter.pipe.d.ts +0 -7
  61. package/lib/services/common.service.d.ts +0 -18
  62. package/lib/services/copy-service.service.d.ts +0 -14
  63. package/lib/services/export.service.d.ts +0 -24
  64. package/lib/services/split-columns.service.d.ts +0 -9
@@ -1,45 +0,0 @@
1
- export const STATUSES_BADGE_MAP = {
2
- // Success – Green
3
- 'active': 'badge badge-success',
4
- 'approved': 'badge badge-success',
5
- 'accepted': 'badge badge-success',
6
- 'completed': 'badge badge-success',
7
- 'evaluated': 'badge badge-success',
8
- 'assigned': 'badge badge-success',
9
- 'scrap': 'badge badge-success',
10
- 'move-available': 'badge badge-success',
11
- 'move-assigned': 'badge badge-success',
12
- // Warning – Yellow/Amber
13
- 'contract': 'badge badge-warning',
14
- 'warranty': 'badge badge-warning',
15
- 'scheduled': 'badge badge-warning',
16
- 'leased': 'badge badge-warning',
17
- 'disposed': 'badge badge-warning',
18
- 'maintenance': 'badge badge-warning',
19
- 'assigning start': 'badge badge-warning',
20
- 'evaluation start': 'badge badge-warning',
21
- 'to be start assigning': 'badge badge-warning',
22
- 'pending': 'badge badge-warning',
23
- 'leave': 'badge badge-warning',
24
- // Danger – Red
25
- 'inactive': 'badge badge-danger',
26
- 'rejected': 'badge badge-danger',
27
- 'unassigned': 'badge badge-danger',
28
- 'trashed': 'badge badge-danger',
29
- 'onhold': 'badge badge-danger',
30
- 'assigning stop': 'badge badge-danger',
31
- 'evaluation stop': 'badge badge-danger',
32
- 'unavailable': 'badge badge-danger',
33
- 'move-error': 'badge badge-danger',
34
- 'failed': 'badge badge-danger',
35
- 'absent': 'badge badge-danger',
36
- // Info – Blue
37
- 'insurance': 'badge badge-info',
38
- 'pastdue': 'badge badge-info',
39
- // Dark – Neutral/Other
40
- 'expired': 'badge badge-dark',
41
- 'draft': 'badge badge-dark',
42
- 'present': 'badge badge-success',
43
- 'todo': 'badge badge-secondary',
44
- };
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9kYXRhLWdyaWQvc3RhdHVzZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQThCO0lBQzNELG1CQUFtQjtJQUNuQixRQUFRLEVBQUUscUJBQXFCO0lBQy9CLFVBQVUsRUFBRSxxQkFBcUI7SUFDakMsVUFBVSxFQUFFLHFCQUFxQjtJQUNqQyxXQUFXLEVBQUUscUJBQXFCO0lBQ2xDLFdBQVcsRUFBRSxxQkFBcUI7SUFDbEMsVUFBVSxFQUFFLHFCQUFxQjtJQUNqQyxPQUFPLEVBQUUscUJBQXFCO0lBQzlCLGdCQUFnQixFQUFFLHFCQUFxQjtJQUN2QyxlQUFlLEVBQUUscUJBQXFCO0lBRXRDLHlCQUF5QjtJQUN6QixVQUFVLEVBQUUscUJBQXFCO0lBQ2pDLFVBQVUsRUFBRSxxQkFBcUI7SUFDakMsV0FBVyxFQUFFLHFCQUFxQjtJQUNsQyxRQUFRLEVBQUUscUJBQXFCO0lBQy9CLFVBQVUsRUFBRSxxQkFBcUI7SUFDakMsYUFBYSxFQUFFLHFCQUFxQjtJQUNwQyxpQkFBaUIsRUFBRSxxQkFBcUI7SUFDeEMsa0JBQWtCLEVBQUUscUJBQXFCO0lBQ3pDLHVCQUF1QixFQUFFLHFCQUFxQjtJQUM5QyxTQUFTLEVBQUUscUJBQXFCO0lBQ2hDLE9BQU8sRUFBRSxxQkFBcUI7SUFFOUIsZ0JBQWdCO0lBQ2hCLFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsVUFBVSxFQUFFLG9CQUFvQjtJQUNoQyxZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDLFNBQVMsRUFBRSxvQkFBb0I7SUFDL0IsUUFBUSxFQUFFLG9CQUFvQjtJQUM5QixnQkFBZ0IsRUFBRSxvQkFBb0I7SUFDdEMsaUJBQWlCLEVBQUUsb0JBQW9CO0lBQ3ZDLGFBQWEsRUFBRSxvQkFBb0I7SUFDbkMsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQyxRQUFRLEVBQUUsb0JBQW9CO0lBQzlCLFFBQVEsRUFBRSxvQkFBb0I7SUFFOUIsZUFBZTtJQUNmLFdBQVcsRUFBRSxrQkFBa0I7SUFDL0IsU0FBUyxFQUFFLGtCQUFrQjtJQUU3Qix3QkFBd0I7SUFDeEIsU0FBUyxFQUFFLGtCQUFrQjtJQUM3QixPQUFPLEVBQUUsa0JBQWtCO0lBQzNCLFNBQVMsRUFBRSxxQkFBcUI7SUFFaEMsTUFBTSxFQUFFLHVCQUF1QjtDQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNUQVRVU0VTX0JBREdFX01BUDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAvLyAgU3VjY2VzcyDigJMgR3JlZW5cclxuICAnYWN0aXZlJzogJ2JhZGdlIGJhZGdlLXN1Y2Nlc3MnLFxyXG4gICdhcHByb3ZlZCc6ICdiYWRnZSBiYWRnZS1zdWNjZXNzJyxcclxuICAnYWNjZXB0ZWQnOiAnYmFkZ2UgYmFkZ2Utc3VjY2VzcycsXHJcbiAgJ2NvbXBsZXRlZCc6ICdiYWRnZSBiYWRnZS1zdWNjZXNzJyxcclxuICAnZXZhbHVhdGVkJzogJ2JhZGdlIGJhZGdlLXN1Y2Nlc3MnLFxyXG4gICdhc3NpZ25lZCc6ICdiYWRnZSBiYWRnZS1zdWNjZXNzJyxcclxuICAnc2NyYXAnOiAnYmFkZ2UgYmFkZ2Utc3VjY2VzcycsXHJcbiAgJ21vdmUtYXZhaWxhYmxlJzogJ2JhZGdlIGJhZGdlLXN1Y2Nlc3MnLFxyXG4gICdtb3ZlLWFzc2lnbmVkJzogJ2JhZGdlIGJhZGdlLXN1Y2Nlc3MnLFxyXG5cclxuICAvLyBXYXJuaW5nIOKAkyBZZWxsb3cvQW1iZXJcclxuICAnY29udHJhY3QnOiAnYmFkZ2UgYmFkZ2Utd2FybmluZycsXHJcbiAgJ3dhcnJhbnR5JzogJ2JhZGdlIGJhZGdlLXdhcm5pbmcnLFxyXG4gICdzY2hlZHVsZWQnOiAnYmFkZ2UgYmFkZ2Utd2FybmluZycsXHJcbiAgJ2xlYXNlZCc6ICdiYWRnZSBiYWRnZS13YXJuaW5nJyxcclxuICAnZGlzcG9zZWQnOiAnYmFkZ2UgYmFkZ2Utd2FybmluZycsXHJcbiAgJ21haW50ZW5hbmNlJzogJ2JhZGdlIGJhZGdlLXdhcm5pbmcnLFxyXG4gICdhc3NpZ25pbmcgc3RhcnQnOiAnYmFkZ2UgYmFkZ2Utd2FybmluZycsXHJcbiAgJ2V2YWx1YXRpb24gc3RhcnQnOiAnYmFkZ2UgYmFkZ2Utd2FybmluZycsXHJcbiAgJ3RvIGJlIHN0YXJ0IGFzc2lnbmluZyc6ICdiYWRnZSBiYWRnZS13YXJuaW5nJyxcclxuICAncGVuZGluZyc6ICdiYWRnZSBiYWRnZS13YXJuaW5nJyxcclxuICAnbGVhdmUnOiAnYmFkZ2UgYmFkZ2Utd2FybmluZycsXHJcblxyXG4gIC8vICBEYW5nZXIg4oCTIFJlZFxyXG4gICdpbmFjdGl2ZSc6ICdiYWRnZSBiYWRnZS1kYW5nZXInLFxyXG4gICdyZWplY3RlZCc6ICdiYWRnZSBiYWRnZS1kYW5nZXInLFxyXG4gICd1bmFzc2lnbmVkJzogJ2JhZGdlIGJhZGdlLWRhbmdlcicsXHJcbiAgJ3RyYXNoZWQnOiAnYmFkZ2UgYmFkZ2UtZGFuZ2VyJyxcclxuICAnb25ob2xkJzogJ2JhZGdlIGJhZGdlLWRhbmdlcicsXHJcbiAgJ2Fzc2lnbmluZyBzdG9wJzogJ2JhZGdlIGJhZGdlLWRhbmdlcicsXHJcbiAgJ2V2YWx1YXRpb24gc3RvcCc6ICdiYWRnZSBiYWRnZS1kYW5nZXInLFxyXG4gICd1bmF2YWlsYWJsZSc6ICdiYWRnZSBiYWRnZS1kYW5nZXInLFxyXG4gICdtb3ZlLWVycm9yJzogJ2JhZGdlIGJhZGdlLWRhbmdlcicsXHJcbiAgJ2ZhaWxlZCc6ICdiYWRnZSBiYWRnZS1kYW5nZXInLFxyXG4gICdhYnNlbnQnOiAnYmFkZ2UgYmFkZ2UtZGFuZ2VyJyxcclxuXHJcbiAgLy8gIEluZm8g4oCTIEJsdWVcclxuICAnaW5zdXJhbmNlJzogJ2JhZGdlIGJhZGdlLWluZm8nLFxyXG4gICdwYXN0ZHVlJzogJ2JhZGdlIGJhZGdlLWluZm8nLFxyXG5cclxuICAvLyAgRGFyayDigJMgTmV1dHJhbC9PdGhlclxyXG4gICdleHBpcmVkJzogJ2JhZGdlIGJhZGdlLWRhcmsnLFxyXG4gICdkcmFmdCc6ICdiYWRnZSBiYWRnZS1kYXJrJyxcclxuICAncHJlc2VudCc6ICdiYWRnZSBiYWRnZS1zdWNjZXNzJyxcclxuXHJcbiAgJ3RvZG8nOiAnYmFkZ2UgYmFkZ2Utc2Vjb25kYXJ5JyxcclxufTtcclxuIl19
@@ -1,27 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { DataGridComponent } from './data-grid/data-grid.component';
3
- import { CommonModule } from '@angular/common';
4
- import { FormsModule } from '@angular/forms';
5
- import { FilterPipe } from './pipes/filter.pipe';
6
- import { DragDropModule } from '@angular/cdk/drag-drop';
7
- import { InlineSVGModule } from 'ng-inline-svg';
8
- import { ScrollingModule } from '@angular/cdk/scrolling';
9
- import { CellHostDirective } from './directives/cellHost.directive';
10
- import { CellRenderInitDirective } from './directives/cell-render-init.directive';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "ng-inline-svg";
13
- export class DataGridModule {
14
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
15
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, declarations: [DataGridComponent, FilterPipe, CellHostDirective, CellRenderInitDirective], imports: [CommonModule, FormsModule, DragDropModule, i1.InlineSVGModule, ScrollingModule], exports: [DataGridComponent] }); }
16
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, imports: [CommonModule, FormsModule, DragDropModule, InlineSVGModule.forRoot(), ScrollingModule] }); }
17
- }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, decorators: [{
19
- type: NgModule,
20
- args: [{
21
- declarations: [DataGridComponent, FilterPipe, CellHostDirective, CellRenderInitDirective],
22
- imports: [CommonModule, FormsModule, DragDropModule, InlineSVGModule.forRoot(), ScrollingModule],
23
- exports: [DataGridComponent],
24
- providers: [],
25
- }]
26
- }] });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtZ3JpZC9zcmMvbGliL2RhdGEtZ3JpZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUM7OztBQVVsRixNQUFNLE9BQU8sY0FBYzsrR0FBZCxjQUFjO2dIQUFkLGNBQWMsaUJBTFYsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixhQUM5RSxZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWMsc0JBQTZCLGVBQWUsYUFDckYsaUJBQWlCO2dIQUdoQixjQUFjLFlBSmYsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLGVBQWU7OzRGQUlwRixjQUFjO2tCQU4xQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsQ0FBRztvQkFDM0YsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLGVBQWUsQ0FBQztvQkFDaEcsT0FBTyxFQUFFLENBQUMsaUJBQWlCLENBQUM7b0JBQzVCLFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0YUdyaWRDb21wb25lbnQgfSBmcm9tICcuL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZpbHRlclBpcGUgfSBmcm9tICcuL3BpcGVzL2ZpbHRlci5waXBlJztcclxuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgSW5saW5lU1ZHTW9kdWxlIH0gZnJvbSAnbmctaW5saW5lLXN2Zyc7XHJcbmltcG9ydCB7IEJyb3dzZXJBbmltYXRpb25zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7IFxyXG5pbXBvcnQgeyBDZWxsSG9zdERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9jZWxsSG9zdC5kaXJlY3RpdmUnOyBcclxuaW1wb3J0IHsgQ2VsbFJlbmRlckluaXREaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvY2VsbC1yZW5kZXItaW5pdC5kaXJlY3RpdmUnOyBcclxuXHJcblxyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtEYXRhR3JpZENvbXBvbmVudCwgRmlsdGVyUGlwZSwgQ2VsbEhvc3REaXJlY3RpdmUsIENlbGxSZW5kZXJJbml0RGlyZWN0aXZlICBdLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBEcmFnRHJvcE1vZHVsZSwgSW5saW5lU1ZHTW9kdWxlLmZvclJvb3QoKSwgU2Nyb2xsaW5nTW9kdWxlXSxcclxuICBleHBvcnRzOiBbRGF0YUdyaWRDb21wb25lbnRdLFxyXG4gIHByb3ZpZGVyczogW10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhR3JpZE1vZHVsZSB7fVxyXG4iXX0=
@@ -1,67 +0,0 @@
1
- import { Directive, Input, Injector, EventEmitter, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class CellRenderInitDirective {
4
- constructor(vcr, injector) {
5
- this.vcr = vcr;
6
- this.injector = injector;
7
- this.cellEvent = new EventEmitter();
8
- }
9
- ngOnInit() {
10
- if (!this.componentType)
11
- return;
12
- // ✅ Dynamically create the component
13
- const componentRef = this.vcr.createComponent(this.componentType, {
14
- injector: Injector.create({
15
- providers: [
16
- { provide: 'rowData', useValue: this.rowData },
17
- { provide: 'colData', useValue: this.colData },
18
- { provide: 'cellValue', useValue: this.cellValue }
19
- ],
20
- parent: this.injector
21
- })
22
- });
23
- // ✅ Automatically call custom lifecycle hook if present
24
- if (typeof componentRef.instance.gridInit === 'function') {
25
- componentRef.instance.gridInit({
26
- row: this.rowData,
27
- col: this.colData,
28
- value: this.cellValue
29
- });
30
- }
31
- for (const key of Object.keys(componentRef.instance)) {
32
- const property = componentRef.instance[key];
33
- if (property instanceof EventEmitter) {
34
- property.subscribe((value) => {
35
- this.cellEvent.emit({
36
- eventName: key,
37
- data: {
38
- row: this.rowData,
39
- col: this.colData,
40
- value,
41
- }
42
- });
43
- });
44
- }
45
- }
46
- }
47
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellRenderInitDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
48
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: CellRenderInitDirective, selector: "[cellRenderInit]", inputs: { componentType: ["cellRenderInit", "componentType"], rowData: "rowData", colData: "colData", cellValue: "cellValue" }, outputs: { cellEvent: "cellEvent" }, ngImport: i0 }); }
49
- }
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellRenderInitDirective, decorators: [{
51
- type: Directive,
52
- args: [{
53
- selector: '[cellRenderInit]'
54
- }]
55
- }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.Injector }]; }, propDecorators: { componentType: [{
56
- type: Input,
57
- args: ['cellRenderInit']
58
- }], rowData: [{
59
- type: Input
60
- }], colData: [{
61
- type: Input
62
- }], cellValue: [{
63
- type: Input
64
- }], cellEvent: [{
65
- type: Output
66
- }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1yZW5kZXItaW5pdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9kaXJlY3RpdmVzL2NlbGwtcmVuZGVyLWluaXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFFBQVEsRUFHUixZQUFZLEVBQ1osTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDOztBQUt2QixNQUFNLE9BQU8sdUJBQXVCO0lBUWxDLFlBQW9CLEdBQXFCLEVBQVUsUUFBa0I7UUFBakQsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRjNELGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBb0MsQ0FBQztJQUVGLENBQUM7SUFFMUUsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFaEMscUNBQXFDO1FBQ3JDLE1BQU0sWUFBWSxHQUFzQixJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ25GLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUN4QixTQUFTLEVBQUU7b0JBQ1QsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUM5QyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQzlDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtpQkFDbkQ7Z0JBQ0QsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3RCLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCx3REFBd0Q7UUFDeEQsSUFBSSxPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRTtZQUN4RCxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNqQixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUzthQUN0QixDQUFDLENBQUM7U0FDSjtRQUNELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDcEQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxJQUFJLFFBQVEsWUFBWSxZQUFZLEVBQUU7Z0JBQ3BDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7d0JBQ2xCLFNBQVMsRUFBRSxHQUFHO3dCQUNkLElBQUksRUFBRTs0QkFDSixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87NEJBQ2pCLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTzs0QkFDakIsS0FBSzt5QkFDTjtxQkFDRixDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO0lBQ0gsQ0FBQzsrR0FoRFUsdUJBQXVCO21HQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtpQkFDN0I7OEhBRTBCLGFBQWE7c0JBQXJDLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQUNkLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgSW5qZWN0b3IsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIFR5cGUsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbY2VsbFJlbmRlckluaXRdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2VsbFJlbmRlckluaXREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgnY2VsbFJlbmRlckluaXQnKSBjb21wb25lbnRUeXBlITogVHlwZTxhbnk+O1xyXG4gIEBJbnB1dCgpIHJvd0RhdGE6IGFueTtcclxuICBASW5wdXQoKSBjb2xEYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY2VsbFZhbHVlOiBhbnk7XHJcblxyXG4gIEBPdXRwdXQoKSBjZWxsRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnROYW1lOiBzdHJpbmc7IGRhdGE6IGFueSB9PigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZjcjogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jb21wb25lbnRUeXBlKSByZXR1cm47XHJcblxyXG4gICAgLy8g4pyFIER5bmFtaWNhbGx5IGNyZWF0ZSB0aGUgY29tcG9uZW50XHJcbiAgICBjb25zdCBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+ID0gdGhpcy52Y3IuY3JlYXRlQ29tcG9uZW50KHRoaXMuY29tcG9uZW50VHlwZSwge1xyXG4gICAgICBpbmplY3RvcjogSW5qZWN0b3IuY3JlYXRlKHtcclxuICAgICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAgIHsgcHJvdmlkZTogJ3Jvd0RhdGEnLCB1c2VWYWx1ZTogdGhpcy5yb3dEYXRhIH0sXHJcbiAgICAgICAgICB7IHByb3ZpZGU6ICdjb2xEYXRhJywgdXNlVmFsdWU6IHRoaXMuY29sRGF0YSB9LFxyXG4gICAgICAgICAgeyBwcm92aWRlOiAnY2VsbFZhbHVlJywgdXNlVmFsdWU6IHRoaXMuY2VsbFZhbHVlIH1cclxuICAgICAgICBdLFxyXG4gICAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvclxyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g4pyFIEF1dG9tYXRpY2FsbHkgY2FsbCBjdXN0b20gbGlmZWN5Y2xlIGhvb2sgaWYgcHJlc2VudFxyXG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnRSZWYuaW5zdGFuY2UuZ3JpZEluaXQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmdyaWRJbml0KHtcclxuICAgICAgICByb3c6IHRoaXMucm93RGF0YSxcclxuICAgICAgICBjb2w6IHRoaXMuY29sRGF0YSxcclxuICAgICAgICB2YWx1ZTogdGhpcy5jZWxsVmFsdWVcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb21wb25lbnRSZWYuaW5zdGFuY2UpKSB7XHJcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gY29tcG9uZW50UmVmLmluc3RhbmNlW2tleV07XHJcbiAgICAgIGlmIChwcm9wZXJ0eSBpbnN0YW5jZW9mIEV2ZW50RW1pdHRlcikge1xyXG4gICAgICAgIHByb3BlcnR5LnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jZWxsRXZlbnQuZW1pdCh7XHJcbiAgICAgICAgICAgIGV2ZW50TmFtZToga2V5LFxyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgcm93OiB0aGlzLnJvd0RhdGEsXHJcbiAgICAgICAgICAgICAgY29sOiB0aGlzLmNvbERhdGEsXHJcbiAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,16 +0,0 @@
1
- import { Directive } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class CellHostDirective {
4
- constructor(viewContainerRef) {
5
- this.viewContainerRef = viewContainerRef;
6
- }
7
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellHostDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
8
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: CellHostDirective, selector: "[cellHost]", ngImport: i0 }); }
9
- }
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellHostDirective, decorators: [{
11
- type: Directive,
12
- args: [{
13
- selector: '[cellHost]'
14
- }]
15
- }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; } });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbEhvc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1ncmlkL3NyYy9saWIvZGlyZWN0aXZlcy9jZWxsSG9zdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7O0FBSzVELE1BQU0sT0FBTyxpQkFBaUI7SUFFNUIsWUFBbUIsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFBRyxDQUFDOytHQUY5QyxpQkFBaUI7bUdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFIN0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtpQkFDdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2NlbGxIb3N0XSdcclxufSlcclxuZXhwb3J0IGNsYXNzIENlbGxIb3N0RGlyZWN0aXZlICB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7fVxyXG5cclxufVxyXG4iXX0=
@@ -1,28 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class FilterPipe {
4
- transform(items, searchText, key) {
5
- if (!items || !searchText)
6
- return items;
7
- const lowerSearch = searchText.toLowerCase();
8
- return items.filter(item => {
9
- if (key && item && typeof item === 'object') {
10
- const value = item[key];
11
- return value?.toString().toLowerCase().includes(lowerSearch);
12
- }
13
- if (typeof item === 'string' || typeof item === 'number') {
14
- return item.toString().toLowerCase().includes(lowerSearch);
15
- }
16
- return false;
17
- });
18
- }
19
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
20
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: FilterPipe, name: "filter" }); }
21
- }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterPipe, decorators: [{
23
- type: Pipe,
24
- args: [{
25
- name: 'filter',
26
- }]
27
- }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9waXBlcy9maWx0ZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFLcEQsTUFBTSxPQUFPLFVBQVU7SUFDdkIsU0FBUyxDQUFDLEtBQVksRUFBRSxVQUFrQixFQUFFLEdBQVk7UUFDdEQsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV4QyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFN0MsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQzNDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEIsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzlEO1lBQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUN4RCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDNUQ7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FoQlksVUFBVTs2R0FBVixVQUFVOzs0RkFBVixVQUFVO2tCQUh0QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxRQUFRO2lCQUNmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdmaWx0ZXInLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG50cmFuc2Zvcm0oaXRlbXM6IGFueVtdLCBzZWFyY2hUZXh0OiBzdHJpbmcsIGtleT86IHN0cmluZyk6IGFueVtdIHtcclxuICBpZiAoIWl0ZW1zIHx8ICFzZWFyY2hUZXh0KSByZXR1cm4gaXRlbXM7XHJcbiBcclxuICBjb25zdCBsb3dlclNlYXJjaCA9IHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKTtcclxuIFxyXG4gIHJldHVybiBpdGVtcy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICBpZiAoa2V5ICYmIGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtrZXldO1xyXG4gICAgICByZXR1cm4gdmFsdWU/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlclNlYXJjaCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gaXRlbS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJTZWFyY2gpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH0pO1xyXG59fVxyXG4iXX0=
@@ -1,259 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class CommonService {
4
- constructor() {
5
- this.activeFilteredColumns = [];
6
- }
7
- gethasVisibleColumns(columns) {
8
- const checkVisible = (columns) => {
9
- return columns.some((col) => {
10
- if (col?.is_visible)
11
- return true;
12
- if (col?.children?.length) {
13
- return checkVisible(col.children);
14
- }
15
- return false;
16
- });
17
- };
18
- return checkVisible(columns);
19
- }
20
- gethasInVisibleColumns(columns) {
21
- const checkVisible = (columns) => {
22
- return columns.some((col) => {
23
- if (!col?.is_visible)
24
- return true;
25
- if (col?.children?.length) {
26
- return checkVisible(col.children);
27
- }
28
- return false;
29
- });
30
- };
31
- return checkVisible(columns);
32
- }
33
- getTotalColumnsLength(columns) {
34
- let count = 0;
35
- columns.forEach(col => {
36
- if (col.children && Array.isArray(col.children) && col.children.length) {
37
- count += col.children.length; // count children instead of parent
38
- }
39
- else {
40
- count += 1; // count parent directly
41
- }
42
- });
43
- return count;
44
- }
45
- gethasRightPinnedColumns(columns) {
46
- const checkPinnedRight = (columns) => {
47
- return columns.some((col) => {
48
- if (col?.pinned === 'right' && col?.is_visible)
49
- return true;
50
- if (col?.children?.length) {
51
- return checkPinnedRight(col.children);
52
- }
53
- return false;
54
- });
55
- };
56
- return checkPinnedRight(columns);
57
- }
58
- gethasLeftPinnedColumns(columns) {
59
- const checkPinnedRight = (columns) => {
60
- return columns.some((col) => {
61
- if (col?.pinned === 'left' && col?.is_visible)
62
- return true;
63
- if (col?.children?.length) {
64
- return checkPinnedRight(col.children);
65
- }
66
- return false;
67
- });
68
- };
69
- return checkPinnedRight(columns);
70
- }
71
- getExpandedRowCount(data) {
72
- let groupCount = 0;
73
- let rowCount = 0;
74
- data.forEach(group => {
75
- if (group?.isGroup) {
76
- groupCount++;
77
- if (group?.isExpand && Array.isArray(group?.children)) {
78
- group.children.forEach((child) => {
79
- if (child.isGroup) {
80
- if (child.isExpand && Array.isArray(child.children)) {
81
- rowCount += child.children.length;
82
- }
83
- }
84
- else {
85
- rowCount++;
86
- }
87
- });
88
- }
89
- }
90
- });
91
- if (groupCount === 0) {
92
- return data.length;
93
- }
94
- return groupCount + rowCount;
95
- }
96
- getFiltersFromColumns(columns, filtersConfig) {
97
- const result = [];
98
- const checkColumn = (col) => {
99
- if (col.query?.condition === 'none') {
100
- col.query.second_value = null;
101
- col.query.second_condition = null;
102
- }
103
- const hasFirstValue = col.query?.first_value != null && col.query?.first_value !== "" && filtersConfig.some((ele) => ele.field == col.field);
104
- const hasIds = Array.isArray(col.query?._ids) && col.query._ids.length > 0 && filtersConfig.some((ele) => ele.field == col.field);
105
- if (hasFirstValue || hasIds) {
106
- result.push({
107
- search: col.search ?? "",
108
- field: col.field,
109
- type: col.type,
110
- _ids: col.type == 'dropdown' ? col.query?._ids : [],
111
- query: col.type == 'dropdown' ? null : (col?.query?.first_value ? col?.query : null)
112
- });
113
- }
114
- if (Array.isArray(col.children) && col.children.length > 0) {
115
- col.children.forEach(checkColumn);
116
- }
117
- };
118
- columns.forEach(checkColumn);
119
- return result;
120
- }
121
- async applyFiltersToColumns(columns, filters) {
122
- for (const col of columns) {
123
- if (!col.query) {
124
- col.query = {
125
- first_value: null,
126
- second_value: null,
127
- first_condition: col.type !== 'date' ? 'contain' : 'equal',
128
- second_condition: null,
129
- condition: 'none',
130
- _ids: []
131
- };
132
- }
133
- const filter = filters.find(f => f.field === col.field);
134
- if (filter) {
135
- if (col.type === 'dropdown') {
136
- const selectedIds = filter._ids ?? [];
137
- const dropdownValues = col.column_dropdown_value ?? [];
138
- // ✅ Map depending on dropdown value structure
139
- let selectedLabels = [];
140
- if (Array.isArray(dropdownValues) && dropdownValues.length > 0) {
141
- if (typeof dropdownValues[0] === 'object') {
142
- // object-based dropdowns: { id, name/label/value/text }
143
- selectedLabels = dropdownValues
144
- .filter(opt => selectedIds.includes(opt.id))
145
- .map(opt => opt.name ?? opt.label ?? opt.value ?? opt.text ?? '');
146
- }
147
- else {
148
- // string-based dropdowns
149
- selectedLabels = dropdownValues.filter(opt => selectedIds.includes(opt));
150
- }
151
- }
152
- // ✅ Store readable text in filterValue (comma-separated)
153
- col.filterValue = selectedLabels.join(', ');
154
- // maintain query state
155
- col.query._ids = selectedIds;
156
- col.search = filter.search ?? '';
157
- }
158
- else {
159
- // ✅ Non-dropdown filters (text/date/number)
160
- col.filterValue = filter.search || filter.query?.first_value || '';
161
- col.search = filter.search ?? '';
162
- col.query.first_value = filter.query?.first_value ?? null;
163
- col.query.second_value = filter.query?.second_value ?? null;
164
- col.query.first_condition =
165
- filter.query?.first_condition ??
166
- (col.type !== 'date' ? 'contain' : 'equal');
167
- col.query.second_condition = filter.query?.second_condition ?? null;
168
- col.query.condition = filter.query?.condition ?? 'none';
169
- }
170
- }
171
- else {
172
- // Clear filter if not present
173
- col.filterValue = null;
174
- col.search = '';
175
- col.query._ids = [];
176
- col.query.first_value = null;
177
- }
178
- // ✅ Recursively apply for children
179
- if (Array.isArray(col.children) && col.children.length > 0) {
180
- col.children = await this.applyFiltersToColumns(col.children, filters);
181
- }
182
- }
183
- return columns;
184
- }
185
- updateActiveFilteredColumns(columns) {
186
- const collectFiltered = (cols) => {
187
- let result = [];
188
- for (let i = 0; i < cols.length; i++) {
189
- const col = cols[i];
190
- if (col.children && col.children.length > 0) {
191
- result = result.concat(collectFiltered(col.children));
192
- }
193
- if (col.query) {
194
- const hasDropdownFilter = Array.isArray(col.query._ids) && col.query._ids.length > 0;
195
- const hasValueFilter = (col.query.first_value && col.query.first_value !== '') ||
196
- (col.query.second_value && col.query.second_value !== '');
197
- if (hasDropdownFilter || hasValueFilter) {
198
- result.push(col);
199
- }
200
- }
201
- }
202
- return result;
203
- };
204
- this.activeFilteredColumns = [...collectFiltered(columns)];
205
- return this.activeFilteredColumns;
206
- }
207
- hasFieldChanged(current, original, type) {
208
- switch (type) {
209
- case 'number':
210
- return Number(current) !== Number(original);
211
- case 'string':
212
- return String(current || '') !== String(original || '');
213
- case 'dropdown':
214
- if (typeof current === 'object' && typeof original === 'object') {
215
- return current?.id !== original?.id || current?.value !== original?.value;
216
- }
217
- return current !== original;
218
- case 'boolean':
219
- return Boolean(current) !== Boolean(original);
220
- case 'date':
221
- const currentDate = new Date(current).getTime();
222
- const originalDate = new Date(original).getTime();
223
- return isNaN(currentDate) || isNaN(originalDate)
224
- ? current !== original
225
- : currentDate !== originalDate;
226
- default:
227
- return JSON.stringify(current) !== JSON.stringify(original);
228
- }
229
- }
230
- // Copy column data to column dropdown values in case of absence
231
- async copyDropdownDataRecursively(columns) {
232
- for (const col of columns) {
233
- if (col.type === 'dropdown') {
234
- const dropdownValues = col.column_dropdown_value;
235
- const dataValues = col.column_data;
236
- if ((!Array.isArray(dropdownValues) || dropdownValues.length === 0) &&
237
- Array.isArray(dataValues) &&
238
- dataValues.length > 0) {
239
- col.column_dropdown_value = dataValues.map(item => typeof item === 'object'
240
- ? item
241
- : { id: item, name: item, value: item });
242
- }
243
- }
244
- if (Array.isArray(col.children) && col.children.length > 0) {
245
- col.children = await this.copyDropdownDataRecursively(col.children);
246
- }
247
- }
248
- return columns;
249
- }
250
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CommonService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
251
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CommonService, providedIn: 'root' }); }
252
- }
253
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CommonService, decorators: [{
254
- type: Injectable,
255
- args: [{
256
- providedIn: 'root'
257
- }]
258
- }], ctorParameters: function () { return []; } });
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9zZXJ2aWNlcy9jb21tb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sYUFBYTtJQUV4QjtRQTRNRiwwQkFBcUIsR0FBVSxFQUFFLENBQUM7SUE1TWhCLENBQUM7SUFDakIsb0JBQW9CLENBQUMsT0FBYztRQUNqQyxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQWMsRUFBVyxFQUFFO1lBQy9DLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMxQixJQUFJLEdBQUcsRUFBRSxVQUFVO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUNqQyxJQUFJLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO29CQUN6QixPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ25DO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFDRixPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsc0JBQXNCLENBQUMsT0FBYztRQUNuQyxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQWMsRUFBVyxFQUFFO1lBQy9DLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMxQixJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVU7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQ2xDLElBQUksR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7b0JBQ3pCLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDbkM7Z0JBQ0Qs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RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQzFDLENBQUM7aUJBQ0g7YUFDRjtZQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMxRCxHQUFHLENBQUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNyRTtTQUNGO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzsrR0F0U1ksYUFBYTttSEFBYixhQUFhLGNBRlosTUFBTTs7NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21tb25TZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuICBnZXRoYXNWaXNpYmxlQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2hlY2tWaXNpYmxlID0gKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiBjb2x1bW5zLnNvbWUoKGNvbCkgPT4ge1xyXG4gICAgICAgIGlmIChjb2w/LmlzX3Zpc2libGUpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmIChjb2w/LmNoaWxkcmVuPy5sZW5ndGgpIHtcclxuICAgICAgICAgIHJldHVybiBjaGVja1Zpc2libGUoY29sLmNoaWxkcmVuKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gY2hlY2tWaXNpYmxlKGNvbHVtbnMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0aGFzSW5WaXNpYmxlQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2hlY2tWaXNpYmxlID0gKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiBjb2x1bW5zLnNvbWUoKGNvbCkgPT4ge1xyXG4gICAgICAgIGlmICghY29sPy5pc192aXNpYmxlKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAoY29sPy5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXR1cm4gY2hlY2tWaXNpYmxlKGNvbC5jaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGNoZWNrVmlzaWJsZShjb2x1bW5zKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRUb3RhbENvbHVtbnNMZW5ndGgoY29sdW1uczogYW55W10pOiBudW1iZXIge1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgICBjb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgaWYgKGNvbC5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikgJiYgY29sLmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgIGNvdW50ICs9IGNvbC5jaGlsZHJlbi5sZW5ndGg7IC8vIGNvdW50IGNoaWxkcmVuIGluc3RlYWQgb2YgcGFyZW50XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY291bnQgKz0gMTsgLy8gY291bnQgcGFyZW50IGRpcmVjdGx5XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBjb3VudDtcclxuICB9XHJcblxyXG4gIGdldGhhc1JpZ2h0UGlubmVkQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2hlY2tQaW5uZWRSaWdodCA9IChjb2x1bW5zOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gY29sdW1ucy5zb21lKChjb2wpID0+IHtcclxuICAgICAgICBpZiAoY29sPy5waW5uZWQgPT09ICdyaWdodCcgJiYgY29sPy5pc192aXNpYmxlKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAoY29sPy5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXR1cm4gY2hlY2tQaW5uZWRSaWdodChjb2wuY2hpbGRyZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBjaGVja1Bpbm5lZFJpZ2h0KGNvbHVtbnMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0aGFzTGVmdFBpbm5lZENvbHVtbnMoY29sdW1uczogYW55W10pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGNoZWNrUGlubmVkUmlnaHQgPSAoY29sdW1uczogYW55W10pOiBib29sZWFuID0+IHtcclxuICAgICAgcmV0dXJuIGNvbHVtbnMuc29tZSgoY29sKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbD8ucGlubmVkID09PSAnbGVmdCcgJiYgY29sPy5pc192aXNpYmxlKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAoY29sPy5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXR1cm4gY2hlY2tQaW5uZWRSaWdodChjb2wuY2hpbGRyZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBjaGVja1Bpbm5lZFJpZ2h0KGNvbHVtbnMpO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldEV4cGFuZGVkUm93Q291bnQoZGF0YTogYW55W10pOiBudW1iZXIge1xyXG4gICAgbGV0IGdyb3VwQ291bnQgPSAwO1xyXG4gICAgbGV0IHJvd0NvdW50ID0gMDtcclxuXHJcbiAgICBkYXRhLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICBpZiAoZ3JvdXA/LmlzR3JvdXApIHtcclxuICAgICAgICBncm91cENvdW50Kys7XHJcblxyXG4gICAgICAgIGlmIChncm91cD8uaXNFeHBhbmQgJiYgQXJyYXkuaXNBcnJheShncm91cD8uY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgICBncm91cC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5pc0dyb3VwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNoaWxkLmlzRXhwYW5kICYmIEFycmF5LmlzQXJyYXkoY2hpbGQuY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgICAgICAgICByb3dDb3VudCArPSBjaGlsZC5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJvd0NvdW50Kys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGdyb3VwQ291bnQgPT09IDApIHtcclxuICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cENvdW50ICsgcm93Q291bnQ7XHJcbiAgfVxyXG5cclxuXHJcbmdldEZpbHRlcnNGcm9tQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSwgZmlsdGVyc0NvbmZpZzphbnkgW10pOiBhbnlbXSB7XHJcbiAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIFxyXG4gIGNvbnN0IGNoZWNrQ29sdW1uID0gKGNvbDogYW55KSA9PiB7XHJcbiAgICAgaWYgKGNvbC5xdWVyeT8uY29uZGl0aW9uID09PSAnbm9uZScpIHtcclxuICAgICAgY29sLnF1ZXJ5LnNlY29uZF92YWx1ZSA9IG51bGw7XHJcbiAgICAgIGNvbC5xdWVyeS5zZWNvbmRfY29uZGl0aW9uID0gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGhhc0ZpcnN0VmFsdWUgPSBjb2wucXVlcnk/LmZpcnN0X3ZhbHVlICE9IG51bGwgJiYgY29sLnF1ZXJ5Py5maXJzdF92YWx1ZSAhPT0gXCJcIiAmJiBmaWx0ZXJzQ29uZmlnLnNvbWUoKGVsZSk9PiBlbGUuZmllbGQgPT0gY29sLmZpZWxkKTtcclxuICAgIGNvbnN0IGhhc0lkcyA9IEFycmF5LmlzQXJyYXkoY29sLnF1ZXJ5Py5faWRzKSAmJiBjb2wucXVlcnkuX2lkcy5sZW5ndGggPiAwICYmIGZpbHRlcnNDb25maWcuc29tZSgoZWxlKT0+IGVsZS5maWVsZCA9PSBjb2wuZmllbGQpO1xyXG4gICAgaWYgKGhhc0ZpcnN0VmFsdWUgfHwgaGFzSWRzKSB7XHJcbiAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICBzZWFyY2g6IGNvbC5zZWFyY2ggPz8gXCJcIixcclxuICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxyXG4gICAgICAgIHR5cGU6IGNvbC50eXBlLFxyXG4gICAgICAgIF9pZHM6IGNvbC50eXBlID09ICdkcm9wZG93bic/IGNvbC5xdWVyeT8uX2lkczogW10sXHJcbiAgICAgICAgcXVlcnk6IGNvbC50eXBlID09ICdkcm9wZG93bic/IG51bGwgOiAoY29sPy5xdWVyeT8uZmlyc3RfdmFsdWUgPyBjb2w/LnF1ZXJ5IDogbnVsbClcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiBcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikgJiYgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29sLmNoaWxkcmVuLmZvckVhY2goY2hlY2tDb2x1bW4pO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgY29sdW1ucy5mb3JFYWNoKGNoZWNrQ29sdW1uKTtcclxuIFxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmFzeW5jIGFwcGx5RmlsdGVyc1RvQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSwgZmlsdGVyczogYW55W10pOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xyXG4gICAgaWYgKCFjb2wucXVlcnkpIHtcclxuICAgICAgY29sLnF1ZXJ5ID0ge1xyXG4gICAgICAgIGZpcnN0X3ZhbHVlOiBudWxsLFxyXG4gICAgICAgIHNlY29uZF92YWx1ZTogbnVsbCxcclxuICAgICAgICBmaXJzdF9jb25kaXRpb246IGNvbC50eXBlICE9PSAnZGF0ZScgPyAnY29udGFpbicgOiAnZXF1YWwnLFxyXG4gICAgICAgIHNlY29uZF9jb25kaXRpb246IG51bGwsXHJcbiAgICAgICAgY29uZGl0aW9uOiAnbm9uZScsXHJcbiAgICAgICAgX2lkczogW11cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJzLmZpbmQoZiA9PiBmLmZpZWxkID09PSBjb2wuZmllbGQpO1xyXG5cclxuICAgIGlmIChmaWx0ZXIpIHtcclxuICAgICAgaWYgKGNvbC50eXBlID09PSAnZHJvcGRvd24nKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBmaWx0ZXIuX2lkcyA/PyBbXTtcclxuICAgICAgICBjb25zdCBkcm9wZG93blZhbHVlcyA9IGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWUgPz8gW107XHJcblxyXG4gICAgICAgIC8vIOKchSBNYXAgZGVwZW5kaW5nIG9uIGRyb3Bkb3duIHZhbHVlIHN0cnVjdHVyZVxyXG4gICAgICAgIGxldCBzZWxlY3RlZExhYmVsczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZHJvcGRvd25WYWx1ZXMpICYmIGRyb3Bkb3duVmFsdWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgZHJvcGRvd25WYWx1ZXNbMF0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIC8vIG9iamVjdC1iYXNlZCBkcm9wZG93bnM6IHsgaWQsIG5hbWUvbGFiZWwvdmFsdWUvdGV4dCB9XHJcbiAgICAgICAgICAgIHNlbGVjdGVkTGFiZWxzID0gZHJvcGRvd25WYWx1ZXNcclxuICAgICAgICAgICAgICAuZmlsdGVyKG9wdCA9PiBzZWxlY3RlZElkcy5pbmNsdWRlcyhvcHQuaWQpKVxyXG4gICAgICAgICAgICAgIC5tYXAob3B0ID0+IG9wdC5uYW1lID8/IG9wdC5sYWJlbCA/PyBvcHQudmFsdWUgPz8gb3B0LnRleHQgPz8gJycpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gc3RyaW5nLWJhc2VkIGRyb3Bkb3duc1xyXG4gICAgICAgICAgICBzZWxlY3RlZExhYmVscyA9IGRyb3Bkb3duVmFsdWVzLmZpbHRlcihvcHQgPT4gc2VsZWN0ZWRJZHMuaW5jbHVkZXMob3B0KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDinIUgU3RvcmUgcmVhZGFibGUgdGV4dCBpbiBmaWx0ZXJWYWx1ZSAoY29tbWEtc2VwYXJhdGVkKVxyXG4gICAgICAgIGNvbC5maWx0ZXJWYWx1ZSA9IHNlbGVjdGVkTGFiZWxzLmpvaW4oJywgJyk7XHJcblxyXG4gICAgICAgIC8vIG1haW50YWluIHF1ZXJ5IHN0YXRlXHJcbiAgICAgICAgY29sLnF1ZXJ5Ll9pZHMgPSBzZWxlY3RlZElkcztcclxuICAgICAgICBjb2wuc2VhcmNoID0gZmlsdGVyLnNlYXJjaCA/PyAnJztcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8g4pyFIE5vbi1kcm9wZG93biBmaWx0ZXJzICh0ZXh0L2RhdGUvbnVtYmVyKVxyXG4gICAgICAgIGNvbC5maWx0ZXJWYWx1ZSA9IGZpbHRlci5zZWFyY2ggfHwgZmlsdGVyLnF1ZXJ5Py5maXJzdF92YWx1ZSB8fCAnJztcclxuICAgICAgICBjb2wuc2VhcmNoID0gZmlsdGVyLnNlYXJjaCA/PyAnJztcclxuICAgICAgICBjb2wucXVlcnkuZmlyc3RfdmFsdWUgPSBmaWx0ZXIucXVlcnk/LmZpcnN0X3ZhbHVlID8/IG51bGw7XHJcbiAgICAgICAgY29sLnF1ZXJ5LnNlY29uZF92YWx1ZSA9IGZpbHRlci5xdWVyeT8uc2Vjb25kX3ZhbHVlID8/IG51bGw7XHJcbiAgICAgICAgY29sLnF1ZXJ5LmZpcnN0X2NvbmRpdGlvbiA9XHJcbiAgICAgICAgICBmaWx0ZXIucXVlcnk/LmZpcnN0X2NvbmRpdGlvbiA/P1xyXG4gICAgICAgICAgKGNvbC50eXBlICE9PSAnZGF0ZScgPyAnY29udGFpbicgOiAnZXF1YWwnKTtcclxuICAgICAgICBjb2wucXVlcnkuc2Vjb25kX2NvbmRpdGlvbiA9IGZpbHRlci5xdWVyeT8uc2Vjb25kX2NvbmRpdGlvbiA/PyBudWxsO1xyXG4gICAgICAgIGNvbC5xdWVyeS5jb25kaXRpb24gPSBmaWx0ZXIucXVlcnk/LmNvbmRpdGlvbiA/PyAnbm9uZSc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIENsZWFyIGZpbHRlciBpZiBub3QgcHJlc2VudFxyXG4gICAgICBjb2wuZmlsdGVyVmFsdWUgPSBudWxsO1xyXG4gICAgICBjb2wuc2VhcmNoID0gJyc7XHJcbiAgICAgIGNvbC5xdWVyeS5faWRzID0gW107XHJcbiAgICAgIGNvbC5xdWVyeS5maXJzdF92YWx1ZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g4pyFIFJlY3Vyc2l2ZWx5IGFwcGx5IGZvciBjaGlsZHJlblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSAmJiBjb2wuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb2wuY2hpbGRyZW4gPSBhd2FpdCB0aGlzLmFwcGx5RmlsdGVyc1RvQ29sdW1ucyhjb2wuY2hpbGRyZW4sIGZpbHRlcnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNvbHVtbnM7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuYWN0aXZlRmlsdGVyZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG51cGRhdGVBY3RpdmVGaWx0ZXJlZENvbHVtbnMoY29sdW1uczogYW55W10pOiBhbnlbXSB7XHJcbiAgY29uc3QgY29sbGVjdEZpbHRlcmVkID0gKGNvbHM6IGFueVtdKTogYW55W10gPT4ge1xyXG4gICAgbGV0IHJlc3VsdDogYW55W10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgY29sID0gY29sc1tpXTtcclxuICAgICAgaWYgKGNvbC5jaGlsZHJlbiAmJiBjb2wuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoY29sbGVjdEZpbHRlcmVkKGNvbC5jaGlsZHJlbikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY29sLnF1ZXJ5KSB7XHJcbiAgICAgICAgY29uc3QgaGFzRHJvcGRvd25GaWx0ZXIgPVxyXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShjb2wucXVlcnkuX2lkcykgJiYgY29sLnF1ZXJ5Ll9pZHMubGVuZ3RoID4gMDtcclxuXHJcbiAgICAgICAgY29uc3QgaGFzVmFsdWVGaWx0ZXIgPVxyXG4gICAgICAgICAgKGNvbC5xdWVyeS5maXJzdF92YWx1ZSAmJiBjb2wucXVlcnkuZmlyc3RfdmFsdWUgIT09ICcnKSB8fFxyXG4gICAgICAgICAgKGNvbC5xdWVyeS5zZWNvbmRfdmFsdWUgJiYgY29sLnF1ZXJ5LnNlY29uZF92YWx1ZSAhPT0gJycpO1xyXG5cclxuICAgICAgICBpZiAoaGFzRHJvcGRvd25GaWx0ZXIgfHwgaGFzVmFsdWVGaWx0ZXIpIHtcclxuICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH07XHJcbiAgdGhpcy5hY3RpdmVGaWx0ZXJlZENvbHVtbnMgPSBbLi4uY29sbGVjdEZpbHRlcmVkKGNvbHVtbnMpXTtcclxuICByZXR1cm4gdGhpcy5hY3RpdmVGaWx0ZXJlZENvbHVtbnM7XHJcbn1cclxuXHJcblxyXG5cclxuaGFzRmllbGRDaGFuZ2VkKGN1cnJlbnQ6IGFueSwgb3JpZ2luYWw6IGFueSwgdHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnbnVtYmVyJzpcclxuICAgICAgICByZXR1cm4gTnVtYmVyKGN1cnJlbnQpICE9PSBOdW1iZXIob3JpZ2luYWwpO1xyXG5cclxuICAgICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgICByZXR1cm4gU3RyaW5nKGN1cnJlbnQgfHwgJycpICE9PSBTdHJpbmcob3JpZ2luYWwgfHwgJycpO1xyXG5cclxuICAgICAgY2FzZSAnZHJvcGRvd24nOlxyXG4gICAgICAgIGlmICh0eXBlb2YgY3VycmVudCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9yaWdpbmFsID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ/LmlkICE9PSBvcmlnaW5hbD8uaWQgfHwgY3VycmVudD8udmFsdWUgIT09IG9yaWdpbmFsPy52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQgIT09IG9yaWdpbmFsO1xyXG5cclxuICAgICAgY2FzZSAnYm9vbGVhbic6XHJcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oY3VycmVudCkgIT09IEJvb2xlYW4ob3JpZ2luYWwpO1xyXG5cclxuICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZShjdXJyZW50KS5nZXRUaW1lKCk7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRlID0gbmV3IERhdGUob3JpZ2luYWwpLmdldFRpbWUoKTtcclxuICAgICAgICByZXR1cm4gaXNOYU4oY3VycmVudERhdGUpIHx8IGlzTmFOKG9yaWdpbmFsRGF0ZSlcclxuICAgICAgICAgID8gY3VycmVudCAhPT0gb3JpZ2luYWxcclxuICAgICAgICAgIDogY3VycmVudERhdGUgIT09IG9yaWdpbmFsRGF0ZTtcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGN1cnJlbnQpICE9PSBKU09OLnN0cmluZ2lmeShvcmlnaW5hbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgIC8vIENvcHkgY29sdW1uIGRhdGEgdG8gY29sdW1uIGRyb3Bkb3duIHZhbHVlcyBpbiBjYXNlIG9mIGFic2VuY2VcclxuIGFzeW5jIGNvcHlEcm9wZG93bkRhdGFSZWN1cnNpdmVseShjb2x1bW5zOiBhbnlbXSk6IFByb21pc2U8YW55W10+IHtcclxuICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XHJcbiAgICBpZiAoY29sLnR5cGUgPT09ICdkcm9wZG93bicpIHtcclxuICAgICAgY29uc3QgZHJvcGRvd25WYWx1ZXMgPSBjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlO1xyXG4gICAgICBjb25zdCBkYXRhVmFsdWVzID0gY29sLmNvbHVtbl9kYXRhO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgICghQXJyYXkuaXNBcnJheShkcm9wZG93blZhbHVlcykgfHwgZHJvcGRvd25WYWx1ZXMubGVuZ3RoID09PSAwKSAmJlxyXG4gICAgICAgIEFycmF5LmlzQXJyYXkoZGF0YVZhbHVlcykgJiZcclxuICAgICAgICBkYXRhVmFsdWVzLmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSA9IGRhdGFWYWx1ZXMubWFwKGl0ZW0gPT5cclxuICAgICAgICAgIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICA/IGl0ZW1cclxuICAgICAgICAgICAgOiB7IGlkOiBpdGVtLCBuYW1lOiBpdGVtLCB2YWx1ZTogaXRlbSB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikgJiYgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29sLmNoaWxkcmVuID0gYXdhaXQgdGhpcy5jb3B5RHJvcGRvd25EYXRhUmVjdXJzaXZlbHkoY29sLmNoaWxkcmVuKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBjb2x1bW5zO1xyXG59XHJcblxyXG59XHJcblxyXG5cclxuXHJcblxyXG4iXX0=