ms-data-grid 0.0.121 → 0.0.123

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.
@@ -10,7 +10,7 @@ export class CellRenderInitDirective {
10
10
  if (!this.componentType)
11
11
  return;
12
12
  // ✅ Dynamically create the component
13
- const componentRef = this.vcr.createComponent(this.componentType, {
13
+ this.componentRef = this.vcr.createComponent(this.componentType, {
14
14
  injector: Injector.create({
15
15
  providers: [
16
16
  { provide: 'rowData', useValue: this.rowData },
@@ -20,16 +20,20 @@ export class CellRenderInitDirective {
20
20
  parent: this.injector
21
21
  })
22
22
  });
23
+ if (this.colData) {
24
+ this.colData.cellComponentRef = this.componentRef;
25
+ }
23
26
  // ✅ Automatically call custom lifecycle hook if present
24
- if (typeof componentRef.instance.gridInit === 'function') {
25
- componentRef.instance.gridInit({
27
+ if (typeof this.componentRef.instance.gridInit === 'function') {
28
+ this.componentRef.instance.gridInit({
26
29
  row: this.rowData,
27
30
  col: this.colData,
28
- value: this.cellValue
31
+ value: this.cellValue,
32
+ context: this.context
29
33
  });
30
34
  }
31
- for (const key of Object.keys(componentRef.instance)) {
32
- const property = componentRef.instance[key];
35
+ for (const key of Object.keys(this.componentRef.instance)) {
36
+ const property = this.componentRef.instance[key];
33
37
  if (property instanceof EventEmitter) {
34
38
  property.subscribe((value) => {
35
39
  this.cellEvent.emit({
@@ -44,8 +48,22 @@ export class CellRenderInitDirective {
44
48
  }
45
49
  }
46
50
  }
51
+ ngOnChanges(changes) {
52
+ if (this.componentRef &&
53
+ typeof this.componentRef.instance.gridRefresh === 'function') {
54
+ this.componentRef.instance.gridRefresh({
55
+ row: this.rowData,
56
+ col: this.colData,
57
+ value: this.cellValue,
58
+ context: this.context
59
+ });
60
+ }
61
+ }
62
+ ngOnDestroy() {
63
+ this.componentRef?.destroy();
64
+ }
47
65
  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 }); }
66
+ 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", context: "context" }, outputs: { cellEvent: "cellEvent" }, usesOnChanges: true, ngImport: i0 }); }
49
67
  }
50
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellRenderInitDirective, decorators: [{
51
69
  type: Directive,
@@ -61,7 +79,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
61
79
  type: Input
62
80
  }], cellValue: [{
63
81
  type: Input
82
+ }], context: [{
83
+ type: Input
64
84
  }], cellEvent: [{
65
85
  type: Output
66
86
  }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1yZW5kZXItaW5pdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9kaXJlY3RpdmVzL2NlbGwtcmVuZGVyLWluaXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFFBQVEsRUFHUixZQUFZLEVBQ1osTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDOztBQUt2QixNQUFNLE9BQU8sdUJBQXVCO0lBUWxDLFlBQW9CLEdBQXFCLEVBQVUsUUFBa0I7UUFBakQsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRjNELGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBb0MsQ0FBQztJQUVGLENBQUM7SUFFMUUsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFaEMscUNBQXFDO1FBQ3JDLE1BQU0sWUFBWSxHQUFzQixJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ25GLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUN4QixTQUFTLEVBQUU7b0JBQ1QsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUM5QyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQzlDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtpQkFDbkQ7Z0JBQ0QsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3RCLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCx3REFBd0Q7UUFDeEQsSUFBSSxPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRTtZQUN4RCxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNqQixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUzthQUN0QixDQUFDLENBQUM7U0FDSjtRQUNELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDcEQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxJQUFJLFFBQVEsWUFBWSxZQUFZLEVBQUU7Z0JBQ3BDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7d0JBQ2xCLFNBQVMsRUFBRSxHQUFHO3dCQUNkLElBQUksRUFBRTs0QkFDSixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87NEJBQ2pCLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTzs0QkFDakIsS0FBSzt5QkFDTjtxQkFDRixDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO0lBQ0gsQ0FBQzsrR0FoRFUsdUJBQXVCO21HQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtpQkFDN0I7OEhBRTBCLGFBQWE7c0JBQXJDLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQUNkLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBJbmplY3RvcixcbiAgQ29tcG9uZW50UmVmLFxuICBUeXBlLFxuICBFdmVudEVtaXR0ZXIsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NlbGxSZW5kZXJJbml0XSdcbn0pXG5leHBvcnQgY2xhc3MgQ2VsbFJlbmRlckluaXREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoJ2NlbGxSZW5kZXJJbml0JykgY29tcG9uZW50VHlwZSE6IFR5cGU8YW55PjtcbiAgQElucHV0KCkgcm93RGF0YTogYW55O1xuICBASW5wdXQoKSBjb2xEYXRhOiBhbnk7XG4gIEBJbnB1dCgpIGNlbGxWYWx1ZTogYW55O1xuXG4gIEBPdXRwdXQoKSBjZWxsRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnROYW1lOiBzdHJpbmc7IGRhdGE6IGFueSB9PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdmNyOiBWaWV3Q29udGFpbmVyUmVmLCBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcikgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFR5cGUpIHJldHVybjtcblxuICAgIC8vIOKchSBEeW5hbWljYWxseSBjcmVhdGUgdGhlIGNvbXBvbmVudFxuICAgIGNvbnN0IGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT4gPSB0aGlzLnZjci5jcmVhdGVDb21wb25lbnQodGhpcy5jb21wb25lbnRUeXBlLCB7XG4gICAgICBpbmplY3RvcjogSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgeyBwcm92aWRlOiAncm93RGF0YScsIHVzZVZhbHVlOiB0aGlzLnJvd0RhdGEgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6ICdjb2xEYXRhJywgdXNlVmFsdWU6IHRoaXMuY29sRGF0YSB9LFxuICAgICAgICAgIHsgcHJvdmlkZTogJ2NlbGxWYWx1ZScsIHVzZVZhbHVlOiB0aGlzLmNlbGxWYWx1ZSB9XG4gICAgICAgIF0sXG4gICAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvclxuICAgICAgfSlcbiAgICB9KTtcblxuICAgIC8vIOKchSBBdXRvbWF0aWNhbGx5IGNhbGwgY3VzdG9tIGxpZmVjeWNsZSBob29rIGlmIHByZXNlbnRcbiAgICBpZiAodHlwZW9mIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5ncmlkSW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmdyaWRJbml0KHtcbiAgICAgICAgcm93OiB0aGlzLnJvd0RhdGEsXG4gICAgICAgIGNvbDogdGhpcy5jb2xEYXRhLFxuICAgICAgICB2YWx1ZTogdGhpcy5jZWxsVmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb21wb25lbnRSZWYuaW5zdGFuY2UpKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZVtrZXldO1xuICAgICAgaWYgKHByb3BlcnR5IGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSB7XG4gICAgICAgIHByb3BlcnR5LnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2VsbEV2ZW50LmVtaXQoe1xuICAgICAgICAgICAgZXZlbnROYW1lOiBrZXksXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHJvdzogdGhpcy5yb3dEYXRhLFxuICAgICAgICAgICAgICBjb2w6IHRoaXMuY29sRGF0YSxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1yZW5kZXItaW5pdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9kaXJlY3RpdmVzL2NlbGwtcmVuZGVyLWluaXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFFBQVEsRUFHUixZQUFZLEVBQ1osTUFBTSxFQUlQLE1BQU0sZUFBZSxDQUFDOztBQUt2QixNQUFNLE9BQU8sdUJBQXVCO0lBVWxDLFlBQW9CLEdBQXFCLEVBQVUsUUFBa0I7UUFBakQsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRjNELGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBb0MsQ0FBQztJQUVGLENBQUM7SUFHMUUsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFaEMscUNBQXFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNoRSxRQUFRLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDeEIsU0FBUyxFQUFFO29CQUNULEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDOUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUM5QyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7aUJBQ25EO2dCQUNELE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUTthQUN0QixDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUNuRDtRQUVELHdEQUF3RDtRQUN4RCxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRTtZQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQ2xDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDakIsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3JCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTzthQUN0QixDQUFDLENBQUM7U0FDSjtRQUdELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3pELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksUUFBUSxZQUFZLFlBQVksRUFBRTtnQkFDcEMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQzt3QkFDbEIsU0FBUyxFQUFFLEdBQUc7d0JBQ2QsSUFBSSxFQUFFOzRCQUNKLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTzs0QkFDakIsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPOzRCQUNqQixLQUFLO3lCQUNOO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDO0lBR0QsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQ0UsSUFBSSxDQUFDLFlBQVk7WUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEtBQUssVUFBVSxFQUM1RDtZQUNBLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztnQkFDckMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNqQixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2FBQ3RCLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUdELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7K0dBOUVVLHVCQUF1QjttR0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQUhuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7aUJBQzdCOzhIQUUwQixhQUFhO3NCQUFyQyxLQUFLO3VCQUFDLGdCQUFnQjtnQkFDZCxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUdJLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIEluamVjdG9yLFxuICBDb21wb25lbnRSZWYsXG4gIFR5cGUsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NlbGxSZW5kZXJJbml0XSdcbn0pXG5leHBvcnQgY2xhc3MgQ2VsbFJlbmRlckluaXREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCdjZWxsUmVuZGVySW5pdCcpIGNvbXBvbmVudFR5cGUhOiBUeXBlPGFueT47XG4gIEBJbnB1dCgpIHJvd0RhdGE6IGFueTtcbiAgQElucHV0KCkgY29sRGF0YTogYW55O1xuICBASW5wdXQoKSBjZWxsVmFsdWU6IGFueTtcbiAgQElucHV0KCkgY29udGV4dDogYW55O1xuXG5cbiAgQE91dHB1dCgpIGNlbGxFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudE5hbWU6IHN0cmluZzsgZGF0YTogYW55IH0+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2Y3I6IFZpZXdDb250YWluZXJSZWYsIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7IH1cbiAgY29tcG9uZW50UmVmITogQ29tcG9uZW50UmVmPGFueT5cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50VHlwZSkgcmV0dXJuO1xuXG4gICAgLy8g4pyFIER5bmFtaWNhbGx5IGNyZWF0ZSB0aGUgY29tcG9uZW50XG4gICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy52Y3IuY3JlYXRlQ29tcG9uZW50KHRoaXMuY29tcG9uZW50VHlwZSwge1xuICAgICAgaW5qZWN0b3I6IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgIHsgcHJvdmlkZTogJ3Jvd0RhdGEnLCB1c2VWYWx1ZTogdGhpcy5yb3dEYXRhIH0sXG4gICAgICAgICAgeyBwcm92aWRlOiAnY29sRGF0YScsIHVzZVZhbHVlOiB0aGlzLmNvbERhdGEgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6ICdjZWxsVmFsdWUnLCB1c2VWYWx1ZTogdGhpcy5jZWxsVmFsdWUgfVxuICAgICAgICBdLFxuICAgICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3JcbiAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5jb2xEYXRhKSB7XG4gICAgICB0aGlzLmNvbERhdGEuY2VsbENvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50UmVmO1xuICAgIH1cblxuICAgIC8vIOKchSBBdXRvbWF0aWNhbGx5IGNhbGwgY3VzdG9tIGxpZmVjeWNsZSBob29rIGlmIHByZXNlbnRcbiAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmdyaWRJbml0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5ncmlkSW5pdCh7XG4gICAgICAgIHJvdzogdGhpcy5yb3dEYXRhLFxuICAgICAgICBjb2w6IHRoaXMuY29sRGF0YSxcbiAgICAgICAgdmFsdWU6IHRoaXMuY2VsbFZhbHVlLFxuICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHRcbiAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UpKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlW2tleV07XG4gICAgICBpZiAocHJvcGVydHkgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgcHJvcGVydHkuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5jZWxsRXZlbnQuZW1pdCh7XG4gICAgICAgICAgICBldmVudE5hbWU6IGtleSxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgcm93OiB0aGlzLnJvd0RhdGEsXG4gICAgICAgICAgICAgIGNvbDogdGhpcy5jb2xEYXRhLFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb21wb25lbnRSZWYgJiZcbiAgICAgIHR5cGVvZiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5ncmlkUmVmcmVzaCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuZ3JpZFJlZnJlc2goe1xuICAgICAgICByb3c6IHRoaXMucm93RGF0YSxcbiAgICAgICAgY29sOiB0aGlzLmNvbERhdGEsXG4gICAgICAgIHZhbHVlOiB0aGlzLmNlbGxWYWx1ZSxcbiAgICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY29tcG9uZW50UmVmPy5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,145 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class RowActionService {
4
+ constructor() {
5
+ this.STATUS_SETS = {
6
+ EDIT_BLOCKED: [
7
+ 'expired', 'closed', 'Assigning Stop', 'Evaluation Start',
8
+ 'Evaluation Stop', 'Completed', 'approved', 'rejected',
9
+ 'partially', 'accepted'
10
+ ],
11
+ ARCHIVE_BLOCKED: [
12
+ 'approved', 'partially', 'Assigning Start',
13
+ 'Completed', 'Evaluation Start'
14
+ ],
15
+ DISPOSED: ['scrap', 'trashed', 'disposed'],
16
+ SEPARATED: ['termination', 'resignation', 'retirement', 'separated'],
17
+ UNAVAILABLE: ['unavailable', 'unAvailable']
18
+ };
19
+ this.ACTION_ALIASES = {
20
+ accept: 'view',
21
+ achive: 'unactive'
22
+ };
23
+ this.rules = {
24
+ assigningstart: (r) => r.status === 'To be start Assigning' && !r.isDeleted,
25
+ assigningstop: (r) => r.status === 'Assigning Start' && !r.isDeleted,
26
+ evaluationstart: (r) => r.status === 'Assigning Stop' && !r.isDeleted,
27
+ completed: (r) => r.status === 'Evaluation Start' && !r.isDeleted,
28
+ archive: (r) => this.canArchiveOrDelete(r),
29
+ unactive: (r) => this.canArchiveOrDelete(r),
30
+ delete: (r) => this.canArchiveOrDelete(r),
31
+ unarchive: (r) => r.isDeleted && r.availStatus !== 'disposed',
32
+ active: (r) => r.isDeleted && r.availStatus !== 'disposed',
33
+ link: (r) => !this.STATUS_SETS.UNAVAILABLE.includes(r.status) &&
34
+ !r.isDeleted &&
35
+ r.availStatus !== 'disposed' &&
36
+ r.status !== 'linked',
37
+ unlink: (r, ctx) => ctx.showUnLink === true && r.status === 'linked',
38
+ rejoin: (r) => this.STATUS_SETS.SEPARATED.includes(r.accountStatus),
39
+ settlementinfo: (r) => this.STATUS_SETS.SEPARATED.includes(r.accountStatus),
40
+ assign: (r) => r.status !== 'assigned',
41
+ edit: (r, ctx) => this.canEdit(r, ctx),
42
+ trash: (r) => !this.STATUS_SETS.DISPOSED.includes(r.availStatus),
43
+ scrap: (r) => !this.STATUS_SETS.DISPOSED.includes(r.availStatus),
44
+ retain: (r) => !this.STATUS_SETS.DISPOSED.includes(r.availStatus),
45
+ defaultgrade: (r) => r.isCustomGrade !== 'Active',
46
+ subscribe: (r, ctx) => !r.assignedToIds.includes(ctx.currentUserId),
47
+ unsubscribe: (r, ctx) => r.assignedToIds.includes(ctx.currentUserId),
48
+ changestatus: (r) => !r.isDeleted,
49
+ download: (r) => r.offerLetter !== null,
50
+ view: (r) => r.offerLetter !== null
51
+ };
52
+ }
53
+ normalizeRow(element) {
54
+ return {
55
+ isDeleted: element.is_deleted === true || element.is_deleted === 'true',
56
+ status: element.status || '',
57
+ availStatus: element.availStatus || '',
58
+ accountStatus: (element.account_status || '').toLowerCase(),
59
+ assigneeCount: element.assignee?.length ?? 0,
60
+ assignedToIds: element.assigned_to?.map((x) => x.id) ?? [],
61
+ settlementCompleted: element.settlement_completed === true,
62
+ finalSettlementCompleted: element.final_settlement_completed === true,
63
+ storeEdit: element.store_edit !== false,
64
+ isOwner: element.is_owner ?? true,
65
+ isCustomGrade: element.is_custom_grade || '',
66
+ parent: element.parent,
67
+ offerLetter: element.offer_letter,
68
+ typename: element.__typename || ''
69
+ };
70
+ }
71
+ normalizeAction(action, ctx) {
72
+ let normalized = this.ACTION_ALIASES[action] || action;
73
+ if (ctx.packageData) {
74
+ if (action === 'unarchive')
75
+ return 'active';
76
+ if (action === 'archive')
77
+ return 'unactive';
78
+ }
79
+ return normalized.toLowerCase();
80
+ }
81
+ canArchiveOrDelete(r) {
82
+ return (!r.isDeleted &&
83
+ !r.settlementCompleted &&
84
+ !r.finalSettlementCompleted &&
85
+ r.availStatus !== 'reserved' &&
86
+ r.assigneeCount === 0 &&
87
+ r.availStatus !== 'disposed' &&
88
+ r.availStatus !== 'maintenance' &&
89
+ r.availStatus !== 'assigned' &&
90
+ !this.STATUS_SETS.ARCHIVE_BLOCKED.includes(r.status) &&
91
+ r.parent !== null);
92
+ }
93
+ canEdit(r, ctx) {
94
+ const isBlocked = this.STATUS_SETS.EDIT_BLOCKED.includes(r.status) ||
95
+ r.isDeleted ||
96
+ !r.storeEdit ||
97
+ r.availStatus === 'disposed' ||
98
+ r.settlementCompleted ||
99
+ r.finalSettlementCompleted;
100
+ if (isBlocked)
101
+ return false;
102
+ if (ctx.tableType === 'BusinessExpenseListing') {
103
+ return true;
104
+ }
105
+ return r.status !== 'accepted' && r.isOwner;
106
+ }
107
+ isActionValid(action, element, ctx = {}) {
108
+ const row = this.normalizeRow(element);
109
+ const normalizedAction = this.normalizeAction(action, ctx);
110
+ const rule = this.rules[normalizedAction];
111
+ if (rule) {
112
+ return rule(row, ctx);
113
+ }
114
+ return row.availStatus !== 'disposed' || row.typename === 'Alert';
115
+ }
116
+ getValidActions(actions, element, ctx = {}) {
117
+ if (!actions?.length)
118
+ return [];
119
+ let validActions = actions.filter(action => this.isActionValid(action, element, ctx));
120
+ if (ctx.tableType === 'recruitmentListing') {
121
+ validActions = this.applyRecruitmentFilters(validActions, element);
122
+ }
123
+ return validActions;
124
+ }
125
+ applyRecruitmentFilters(actions, element) {
126
+ let filtered = [...actions];
127
+ if (element?.status === 'hired' && !element?.is_deleted) {
128
+ filtered = filtered.filter(action => !['changestatus', 'unarchive', 'archive', 'edit'].includes(action));
129
+ }
130
+ if (element?.is_deleted) {
131
+ filtered = filtered.filter(action => action !== 'changestatus');
132
+ }
133
+ if (element?.offer_letter === null) {
134
+ filtered = filtered.filter(action => !['download', 'view'].includes(action));
135
+ }
136
+ return filtered;
137
+ }
138
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RowActionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
139
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RowActionService, providedIn: 'root' }); }
140
+ }
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RowActionService, decorators: [{
142
+ type: Injectable,
143
+ args: [{ providedIn: 'root' }]
144
+ }] });
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWFjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1ncmlkL3NyYy9saWIvc2VydmljZXMvcm93LWFjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBNkIzQyxNQUFNLE9BQU8sZ0JBQWdCO0lBRDdCO1FBR21CLGdCQUFXLEdBQUc7WUFDN0IsWUFBWSxFQUFFO2dCQUNaLFNBQVMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCO2dCQUN6RCxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVU7Z0JBQ3RELFdBQVcsRUFBRSxVQUFVO2FBQ3hCO1lBQ0QsZUFBZSxFQUFFO2dCQUNmLFVBQVUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCO2dCQUMxQyxXQUFXLEVBQUUsa0JBQWtCO2FBQ2hDO1lBQ0QsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUM7WUFDMUMsU0FBUyxFQUFFLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDO1lBQ3BFLFdBQVcsRUFBRSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUM7U0FDbkMsQ0FBQztRQUVNLG1CQUFjLEdBQTJCO1lBQ3hELE1BQU0sRUFBRSxNQUFNO1lBQ2QsTUFBTSxFQUFFLFVBQVU7U0FDbkIsQ0FBQztRQUVlLFVBQUssR0FBK0I7WUFDbkQsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLHVCQUF1QixJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDM0UsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxDQUFDLFNB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SyxvQkFBb0IsRUFBRTtZQUMxQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNwRTtRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxPQUFpQixFQUFFLE9BQVk7UUFDN0QsSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBRTVCLElBQUksT0FBTyxFQUFFLE1BQU0sS0FBSyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFO1lBQ3ZELFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ2xDLENBQUMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQ25FLENBQUM7U0FDSDtRQUVELElBQUksT0FBTyxFQUFFLFVBQVUsRUFBRTtZQUN2QixRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsQ0FBQztTQUNqRTtRQUVELElBQUksT0FBTyxFQUFFLFlBQVksS0FBSyxJQUFJLEVBQUU7WUFDbEMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDbEMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQ3ZDLENBQUM7U0FDSDtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7K0dBNUtVLGdCQUFnQjttSEFBaEIsZ0JBQWdCLGNBREgsTUFBTTs7NEZBQ25CLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uQ29udGV4dCB7XG4gIHRhYmxlVHlwZT86IHN0cmluZztcbiAgcGFja2FnZURhdGE/OiBib29sZWFuO1xuICBzaG93VW5MaW5rPzogYm9vbGVhbjtcbiAgY3VycmVudFVzZXJJZD86IHN0cmluZyB8IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIE5vcm1hbGl6ZWRSb3cge1xuICBpc0RlbGV0ZWQ6IGJvb2xlYW47XG4gIHN0YXR1czogc3RyaW5nO1xuICBhdmFpbFN0YXR1czogc3RyaW5nO1xuICBhY2NvdW50U3RhdHVzOiBzdHJpbmc7XG4gIGFzc2lnbmVlQ291bnQ6IG51bWJlcjtcbiAgYXNzaWduZWRUb0lkczogKHN0cmluZyB8IG51bWJlcilbXTtcbiAgc2V0dGxlbWVudENvbXBsZXRlZDogYm9vbGVhbjtcbiAgZmluYWxTZXR0bGVtZW50Q29tcGxldGVkOiBib29sZWFuO1xuICBzdG9yZUVkaXQ6IGJvb2xlYW47XG4gIGlzT3duZXI6IGJvb2xlYW47XG4gIGlzQ3VzdG9tR3JhZGU6IHN0cmluZztcbiAgcGFyZW50OiBhbnk7XG4gIG9mZmVyTGV0dGVyOiBhbnk7XG4gIHR5cGVuYW1lOiBzdHJpbmc7XG59XG5cbnR5cGUgQWN0aW9uUnVsZSA9IChyb3c6IE5vcm1hbGl6ZWRSb3csIGN0eDogQWN0aW9uQ29udGV4dCkgPT4gYm9vbGVhbjtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSb3dBY3Rpb25TZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IFNUQVRVU19TRVRTID0ge1xuICAgIEVESVRfQkxPQ0tFRDogW1xuICAgICAgJ2V4cGlyZWQnLCAnY2xvc2VkJywgJ0Fzc2lnbmluZyBTdG9wJywgJ0V2YWx1YXRpb24gU3RhcnQnLFxuICAgICAgJ0V2YWx1YXRpb24gU3RvcCcsICdDb21wbGV0ZWQnLCAnYXBwcm92ZWQnLCAncmVqZWN0ZWQnLFxuICAgICAgJ3BhcnRpYWxseScsICdhY2NlcHRlZCdcbiAgICBdLFxuICAgIEFSQ0hJVkVfQkxPQ0tFRDogW1xuICAgICAgJ2FwcHJvdmVkJywgJ3BhcnRpYWxseScsICdBc3NpZ25pbmcgU3RhcnQnLFxuICAgICAgJ0NvbXBsZXRlZCcsICdFdmFsdWF0aW9uIFN0YXJ0J1xuICAgIF0sXG4gICAgRElTUE9TRUQ6IFsnc2NyYXAnLCAndHJhc2hlZCcsICdkaXNwb3NlZCddLFxuICAgIFNFUEFSQVRFRDogWyd0ZXJtaW5hdGlvbicsICdyZXNpZ25hdGlvbicsICdyZXRpcmVtZW50JywgJ3NlcGFyYXRlZCddLFxuICAgIFVOQVZBSUxBQkxFOiBbJ3VuYXZhaWxhYmxlJywgJ3VuQXZhaWxhYmxlJ11cbiAgfSBhcyBjb25zdDtcblxuICBwcml2YXRlIHJlYWRvbmx5IEFDVElPTl9BTElBU0VTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGFjY2VwdDogJ3ZpZXcnLFxuICAgIGFjaGl2ZTogJ3VuYWN0aXZlJ1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcnVsZXM6IFJlY29yZDxzdHJpbmcsIEFjdGlvblJ1bGU+ID0ge1xuICAgIGFzc2lnbmluZ3N0YXJ0OiAocikgPT4gci5zdGF0dXMgPT09ICdUbyBiZSBzdGFydCBBc3NpZ25pbmcnICYmICFyLmlzRGVsZXRlZCxcbiAgICBhc3NpZ25pbmdzdG9wOiAocikgPT4gci5zdGF0dXMgPT09ICdBc3NpZ25pbmcgU3RhcnQnICYmICFyLmlzRGVsZXRlZCxcbiAgICBldmFsdWF0aW9uc3RhcnQ6IChyKSA9PiByLnN0YXR1cyA9PT0gJ0Fzc2lnbmluZyBTdG9wJyAmJiAhci5pc0RlbGV0ZWQsXG4gICAgY29tcGxldGVkOiAocikgPT4gci5zdGF0dXMgPT09ICdFdmFsdWF0aW9uIFN0YXJ0JyAmJiAhci5pc0RlbGV0ZWQsXG5cbiAgICBhcmNoaXZlOiAocikgPT4gdGhpcy5jYW5BcmNoaXZlT3JEZWxldGUociksXG4gICAgdW5hY3RpdmU6IChyKSA9PiB0aGlzLmNhbkFyY2hpdmVPckRlbGV0ZShyKSxcbiAgICBkZWxldGU6IChyKSA9PiB0aGlzLmNhbkFyY2hpdmVPckRlbGV0ZShyKSxcblxuICAgIHVuYXJjaGl2ZTogKHIpID0+IHIuaXNEZWxldGVkICYmIHIuYXZhaWxTdGF0dXMgIT09ICdkaXNwb3NlZCcsXG4gICAgYWN0aXZlOiAocikgPT4gci5pc0RlbGV0ZWQgJiYgci5hdmFpbFN0YXR1cyAhPT0gJ2Rpc3Bvc2VkJyxcblxuICAgIGxpbms6IChyKSA9PiBcbiAgICAgICF0aGlzLlNUQVRVU19TRVRTLlVOQVZBSUxBQkxFLmluY2x1ZGVzKChyLnN0YXR1cyBhcyBhbnkpKSAmJlxuICAgICAgIXIuaXNEZWxldGVkICYmXG4gICAgICByLmF2YWlsU3RhdHVzICE9PSAnZGlzcG9zZWQnICYmXG4gICAgICByLnN0YXR1cyAhPT0gJ2xpbmtlZCcsXG4gICAgdW5saW5rOiAociwgY3R4KSA9PiBjdHguc2hvd1VuTGluayA9PT0gdHJ1ZSAmJiByLnN0YXR1cyA9PT0gJ2xpbmtlZCcsXG5cbiAgICByZWpvaW46IChyKSA9PiB0aGlzLlNUQVRVU19TRVRTLlNFUEFSQVRFRC5pbmNsdWRlcygoci5hY2NvdW50U3RhdHVzIGFzIGFueSkpLFxuICAgIHNldHRsZW1lbnRpbmZvOiAocikgPT4gdGhpcy5TVEFUVVNfU0VUUy5TRVBBUkFURUQuaW5jbHVkZXMoKHIuYWNjb3VudFN0YXR1cyBhcyBhbnkpKSxcblxuICAgIGFzc2lnbjogKHIpID0+IHIuc3RhdHVzICE9PSAnYXNzaWduZWQnLFxuICAgIGVkaXQ6IChyLCBjdHgpID0+IHRoaXMuY2FuRWRpdChyLCBjdHgpLFxuXG4gICAgdHJhc2g6IChyKSA9PiAhdGhpcy5TVEFUVVNfU0VUUy5ESVNQT1NFRC5pbmNsdWRlcygoci5hdmFpbFN0YXR1cyBhcyBhbnkpKSxcbiAgICBzY3JhcDogKHIpID0+ICF0aGlzLlNUQVRVU19TRVRTLkRJU1BPU0VELmluY2x1ZGVzKChyLmF2YWlsU3RhdHVzIGFzIGFueSkpLFxuICAgIHJldGFpbjogKHIpID0+ICF0aGlzLlNUQVRVU19TRVRTLkRJU1BPU0VELmluY2x1ZGVzKChyLmF2YWlsU3RhdHVzIGFzIGFueSkpLFxuXG4gICAgZGVmYXVsdGdyYWRlOiAocikgPT4gci5pc0N1c3RvbUdyYWRlICE9PSAnQWN0aXZlJyxcblxuICAgIHN1YnNjcmliZTogKHIsIGN0eCkgPT4gIXIuYXNzaWduZWRUb0lkcy5pbmNsdWRlcygoY3R4LmN1cnJlbnRVc2VySWQgYXMgYW55KSksXG4gICAgdW5zdWJzY3JpYmU6IChyLCBjdHgpID0+IHIuYXNzaWduZWRUb0lkcy5pbmNsdWRlcygoY3R4LmN1cnJlbnRVc2VySWQgYXMgYW55KSksXG5cbiAgICBjaGFuZ2VzdGF0dXM6IChyKSA9PiAhci5pc0RlbGV0ZWQsXG5cbiAgICBkb3dubG9hZDogKHIpID0+IHIub2ZmZXJMZXR0ZXIgIT09IG51bGwsXG4gICAgdmlldzogKHIpID0+IHIub2ZmZXJMZXR0ZXIgIT09IG51bGxcbiAgfTtcblxuICBwcml2YXRlIG5vcm1hbGl6ZVJvdyhlbGVtZW50OiBhbnkpOiBOb3JtYWxpemVkUm93IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNEZWxldGVkOiBlbGVtZW50LmlzX2RlbGV0ZWQgPT09IHRydWUgfHwgZWxlbWVudC5pc19kZWxldGVkID09PSAndHJ1ZScsXG4gICAgICBzdGF0dXM6IGVsZW1lbnQuc3RhdHVzIHx8ICcnLFxuICAgICAgYXZhaWxTdGF0dXM6IGVsZW1lbnQuYXZhaWxTdGF0dXMgfHwgJycsXG4gICAgICBhY2NvdW50U3RhdHVzOiAoZWxlbWVudC5hY2NvdW50X3N0YXR1cyB8fCAnJykudG9Mb3dlckNhc2UoKSxcbiAgICAgIGFzc2lnbmVlQ291bnQ6IGVsZW1lbnQuYXNzaWduZWU/Lmxlbmd0aCA/PyAwLFxuICAgICAgYXNzaWduZWRUb0lkczogZWxlbWVudC5hc3NpZ25lZF90bz8ubWFwKCh4OiBhbnkpID0+IHguaWQpID8/IFtdLFxuICAgICAgc2V0dGxlbWVudENvbXBsZXRlZDogZWxlbWVudC5zZXR0bGVtZW50X2NvbXBsZXRlZCA9PT0gdHJ1ZSxcbiAgICAgIGZpbmFsU2V0dGxlbWVudENvbXBsZXRlZDogZWxlbWVudC5maW5hbF9zZXR0bGVtZW50X2NvbXBsZXRlZCA9PT0gdHJ1ZSxcbiAgICAgIHN0b3JlRWRpdDogZWxlbWVudC5zdG9yZV9lZGl0ICE9PSBmYWxzZSxcbiAgICAgIGlzT3duZXI6IGVsZW1lbnQuaXNfb3duZXIgPz8gdHJ1ZSxcbiAgICAgIGlzQ3VzdG9tR3JhZGU6IGVsZW1lbnQuaXNfY3VzdG9tX2dyYWRlIHx8ICcnLFxuICAgICAgcGFyZW50OiBlbGVtZW50LnBhcmVudCxcbiAgICAgIG9mZmVyTGV0dGVyOiBlbGVtZW50Lm9mZmVyX2xldHRlcixcbiAgICAgIHR5cGVuYW1lOiBlbGVtZW50Ll9fdHlwZW5hbWUgfHwgJydcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVBY3Rpb24oYWN0aW9uOiBzdHJpbmcsIGN0eDogQWN0aW9uQ29udGV4dCk6IHN0cmluZyB7XG4gICAgbGV0IG5vcm1hbGl6ZWQgPSB0aGlzLkFDVElPTl9BTElBU0VTW2FjdGlvbl0gfHwgYWN0aW9uO1xuXG4gICAgaWYgKGN0eC5wYWNrYWdlRGF0YSkge1xuICAgICAgaWYgKGFjdGlvbiA9PT0gJ3VuYXJjaGl2ZScpIHJldHVybiAnYWN0aXZlJztcbiAgICAgIGlmIChhY3Rpb24gPT09ICdhcmNoaXZlJykgcmV0dXJuICd1bmFjdGl2ZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuQXJjaGl2ZU9yRGVsZXRlKHI6IE5vcm1hbGl6ZWRSb3cpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXIuaXNEZWxldGVkICYmXG4gICAgICAhci5zZXR0bGVtZW50Q29tcGxldGVkICYmXG4gICAgICAhci5maW5hbFNldHRsZW1lbnRDb21wbGV0ZWQgJiZcbiAgICAgIHIuYXZhaWxTdGF0dXMgIT09ICdyZXNlcnZlZCcgJiZcbiAgICAgIHIuYXNzaWduZWVDb3VudCA9PT0gMCAmJlxuICAgICAgci5hdmFpbFN0YXR1cyAhPT0gJ2Rpc3Bvc2VkJyAmJlxuICAgICAgci5hdmFpbFN0YXR1cyAhPT0gJ21haW50ZW5hbmNlJyAmJlxuICAgICAgci5hdmFpbFN0YXR1cyAhPT0gJ2Fzc2lnbmVkJyAmJlxuICAgICAgIXRoaXMuU1RBVFVTX1NFVFMuQVJDSElWRV9CTE9DS0VELmluY2x1ZGVzKChyLnN0YXR1cyBhcyBhbnkpKSAmJlxuICAgICAgci5wYXJlbnQgIT09IG51bGxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5FZGl0KHI6IE5vcm1hbGl6ZWRSb3csIGN0eDogQWN0aW9uQ29udGV4dCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzQmxvY2tlZCA9IFxuICAgICAgdGhpcy5TVEFUVVNfU0VUUy5FRElUX0JMT0NLRUQuaW5jbHVkZXMoKHIuc3RhdHVzIGFzIGFueSkpIHx8XG4gICAgICByLmlzRGVsZXRlZCB8fFxuICAgICAgIXIuc3RvcmVFZGl0IHx8XG4gICAgICByLmF2YWlsU3RhdHVzID09PSAnZGlzcG9zZWQnIHx8XG4gICAgICByLnNldHRsZW1lbnRDb21wbGV0ZWQgfHxcbiAgICAgIHIuZmluYWxTZXR0bGVtZW50Q29tcGxldGVkO1xuXG4gICAgaWYgKGlzQmxvY2tlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKGN0eC50YWJsZVR5cGUgPT09ICdCdXNpbmVzc0V4cGVuc2VMaXN0aW5nJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHIuc3RhdHVzICE9PSAnYWNjZXB0ZWQnICYmIHIuaXNPd25lcjtcbiAgfVxuXG4gIGlzQWN0aW9uVmFsaWQoYWN0aW9uOiBzdHJpbmcsIGVsZW1lbnQ6IGFueSwgY3R4OiBBY3Rpb25Db250ZXh0ID0ge30pOiBib29sZWFuIHtcbiAgICBjb25zdCByb3cgPSB0aGlzLm5vcm1hbGl6ZVJvdyhlbGVtZW50KTtcbiAgICBjb25zdCBub3JtYWxpemVkQWN0aW9uID0gdGhpcy5ub3JtYWxpemVBY3Rpb24oYWN0aW9uLCBjdHgpO1xuICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnJ1bGVzW25vcm1hbGl6ZWRBY3Rpb25dO1xuXG4gICAgaWYgKHJ1bGUpIHtcbiAgICAgIHJldHVybiBydWxlKHJvdywgY3R4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93LmF2YWlsU3RhdHVzICE9PSAnZGlzcG9zZWQnIHx8IHJvdy50eXBlbmFtZSA9PT0gJ0FsZXJ0JztcbiAgfVxuXG4gIGdldFZhbGlkQWN0aW9ucyhhY3Rpb25zOiBzdHJpbmdbXSwgZWxlbWVudDogYW55LCBjdHg6IEFjdGlvbkNvbnRleHQgPSB7fSk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIWFjdGlvbnM/Lmxlbmd0aCkgcmV0dXJuIFtdO1xuICAgIFxuICAgIGxldCB2YWxpZEFjdGlvbnMgPSBhY3Rpb25zLmZpbHRlcihhY3Rpb24gPT4gXG4gICAgICB0aGlzLmlzQWN0aW9uVmFsaWQoYWN0aW9uLCBlbGVtZW50LCBjdHgpXG4gICAgKTtcblxuICAgIGlmIChjdHgudGFibGVUeXBlID09PSAncmVjcnVpdG1lbnRMaXN0aW5nJykge1xuICAgICAgdmFsaWRBY3Rpb25zID0gdGhpcy5hcHBseVJlY3J1aXRtZW50RmlsdGVycyh2YWxpZEFjdGlvbnMsIGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZEFjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5UmVjcnVpdG1lbnRGaWx0ZXJzKGFjdGlvbnM6IHN0cmluZ1tdLCBlbGVtZW50OiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGZpbHRlcmVkID0gWy4uLmFjdGlvbnNdO1xuXG4gICAgaWYgKGVsZW1lbnQ/LnN0YXR1cyA9PT0gJ2hpcmVkJyAmJiAhZWxlbWVudD8uaXNfZGVsZXRlZCkge1xuICAgICAgZmlsdGVyZWQgPSBmaWx0ZXJlZC5maWx0ZXIoYWN0aW9uID0+IFxuICAgICAgICAhWydjaGFuZ2VzdGF0dXMnLCAndW5hcmNoaXZlJywgJ2FyY2hpdmUnLCAnZWRpdCddLmluY2x1ZGVzKGFjdGlvbilcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQ/LmlzX2RlbGV0ZWQpIHtcbiAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24gIT09ICdjaGFuZ2VzdGF0dXMnKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudD8ub2ZmZXJfbGV0dGVyID09PSBudWxsKSB7XG4gICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcihhY3Rpb24gPT4gXG4gICAgICAgICFbJ2Rvd25sb2FkJywgJ3ZpZXcnXS5pbmNsdWRlcyhhY3Rpb24pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgfVxufSJdfQ==