ngx-sumax-erp-components 1.6.0 → 1.7.0
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.
- package/esm2022/lib/sc-ag-grid/cell-render/sc-cell-render-button/sc-cell-render-button.module.mjs +20 -0
- package/esm2022/lib/sc-ag-grid/cell-render/sc-cell-render-config.mjs +14 -14
- package/esm2022/lib/sc-ag-grid/sc-ag-grid-paginable/models-ag-grid-paginable.mjs +15 -0
- package/esm2022/lib/sc-ag-grid/sc-ag-grid-paginable/sc-ag-grid-paginable.component.mjs +351 -0
- package/esm2022/lib/sc-ag-grid/sc-ag-grid.module.mjs +35 -32
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/ngx-sumax-erp-components.mjs +384 -13
- package/fesm2022/ngx-sumax-erp-components.mjs.map +1 -1
- package/lib/sc-ag-grid/cell-render/sc-cell-render-button/sc-cell-render-button.module.d.ts +10 -0
- package/lib/sc-ag-grid/cell-render/sc-cell-render-config.d.ts +6 -6
- package/lib/sc-ag-grid/sc-ag-grid-paginable/models-ag-grid-paginable.d.ts +27 -0
- package/lib/sc-ag-grid/sc-ag-grid-paginable/sc-ag-grid-paginable.component.d.ts +153 -0
- package/lib/sc-ag-grid/sc-ag-grid.module.d.ts +23 -23
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
package/esm2022/lib/sc-ag-grid/cell-render/sc-cell-render-button/sc-cell-render-button.module.mjs
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CommonModule } from "@angular/common";
|
|
2
|
+
import { NgModule } from "@angular/core";
|
|
3
|
+
import { MatMenuModule } from "@angular/material/menu";
|
|
4
|
+
import { MatTooltipModule } from "@angular/material/tooltip";
|
|
5
|
+
import { ScCellRendererButtonComponent, ScMenuPanelComponent } from "./sc-cell-render-button.component";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class ScCellRendererButtonModule {
|
|
8
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ScCellRendererButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
9
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: ScCellRendererButtonModule, declarations: [ScCellRendererButtonComponent, ScMenuPanelComponent], imports: [CommonModule, MatMenuModule, MatTooltipModule], exports: [ScCellRendererButtonComponent, ScMenuPanelComponent] }); }
|
|
10
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ScCellRendererButtonModule, imports: [CommonModule, MatMenuModule, MatTooltipModule] }); }
|
|
11
|
+
}
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ScCellRendererButtonModule, decorators: [{
|
|
13
|
+
type: NgModule,
|
|
14
|
+
args: [{
|
|
15
|
+
declarations: [ScCellRendererButtonComponent, ScMenuPanelComponent],
|
|
16
|
+
imports: [CommonModule, MatMenuModule, MatTooltipModule],
|
|
17
|
+
exports: [ScCellRendererButtonComponent, ScMenuPanelComponent],
|
|
18
|
+
}]
|
|
19
|
+
}] });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2VsbC1yZW5kZXItYnV0dG9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdW1heC1lcnAtY29tcG9uZW50L3NyYy9saWIvc2MtYWctZ3JpZC9jZWxsLXJlbmRlci9zYy1jZWxsLXJlbmRlci1idXR0b24vc2MtY2VsbC1yZW5kZXItYnV0dG9uLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBT3hHLE1BQU0sT0FBTywwQkFBMEI7K0dBQTFCLDBCQUEwQjtnSEFBMUIsMEJBQTBCLGlCQUp0Qiw2QkFBNkIsRUFBRSxvQkFBb0IsYUFDeEQsWUFBWSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsYUFDN0MsNkJBQTZCLEVBQUUsb0JBQW9CO2dIQUVsRCwwQkFBMEIsWUFIM0IsWUFBWSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0I7OzRGQUc1QywwQkFBMEI7a0JBTHRDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsNkJBQTZCLEVBQUUsb0JBQW9CLENBQUM7b0JBQ25FLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLENBQUM7b0JBQ3hELE9BQU8sRUFBRSxDQUFDLDZCQUE2QixFQUFFLG9CQUFvQixDQUFDO2lCQUMvRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudVwiO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwXCI7XG5pbXBvcnQgeyBTY0NlbGxSZW5kZXJlckJ1dHRvbkNvbXBvbmVudCwgU2NNZW51UGFuZWxDb21wb25lbnQgfSBmcm9tIFwiLi9zYy1jZWxsLXJlbmRlci1idXR0b24uY29tcG9uZW50XCI7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1NjQ2VsbFJlbmRlcmVyQnV0dG9uQ29tcG9uZW50LCBTY01lbnVQYW5lbENvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdE1lbnVNb2R1bGUsIE1hdFRvb2x0aXBNb2R1bGVdLFxuICBleHBvcnRzOiBbU2NDZWxsUmVuZGVyZXJCdXR0b25Db21wb25lbnQsIFNjTWVudVBhbmVsQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgU2NDZWxsUmVuZGVyZXJCdXR0b25Nb2R1bGUge31cbiJdfQ==
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { NoRowsOverlayDefaultComponent } from
|
|
2
|
-
import { ScCellRendererButtonComponent, ScMenuPanelComponent } from
|
|
3
|
-
import { ScCellRenderCheckboxListComponent } from
|
|
4
|
-
import { ScCellRenderSelectComponent } from
|
|
5
|
-
import { ScCellRenderToggleComponent } from
|
|
1
|
+
import { NoRowsOverlayDefaultComponent } from "./no-rows-overlay/noRowsOverlayDefault.component";
|
|
2
|
+
import { ScCellRendererButtonComponent, ScMenuPanelComponent } from "./sc-cell-render-button/sc-cell-render-button.component";
|
|
3
|
+
import { ScCellRenderCheckboxListComponent } from "./sc-cell-render-checkbox-list/sc-cell-render-checkbox-list.component";
|
|
4
|
+
import { ScCellRenderSelectComponent } from "./sc-cell-render-select/sc-cell-render-select.component";
|
|
5
|
+
import { ScCellRenderToggleComponent } from "./sc-cell-render-toggle/sc-cell-render-toggle.component";
|
|
6
6
|
export const scCellRendererFramework = {
|
|
7
7
|
scCellRendererButtonComponent: ScCellRendererButtonComponent,
|
|
8
8
|
scCellRenderCheckboxListComponent: ScCellRenderCheckboxListComponent,
|
|
9
9
|
scCellRenderSelectComponent: ScCellRenderSelectComponent,
|
|
10
10
|
scCellRenderToggleComponent: ScCellRenderToggleComponent,
|
|
11
|
-
noRowsOverlayDefault: NoRowsOverlayDefaultComponent
|
|
11
|
+
noRowsOverlayDefault: NoRowsOverlayDefaultComponent,
|
|
12
12
|
};
|
|
13
13
|
export const scCellRendererComponents = [
|
|
14
|
-
ScCellRendererButtonComponent,
|
|
14
|
+
// ScCellRendererButtonComponent,
|
|
15
15
|
ScCellRenderCheckboxListComponent,
|
|
16
16
|
ScCellRenderSelectComponent,
|
|
17
17
|
ScCellRenderToggleComponent,
|
|
18
|
-
ScMenuPanelComponent
|
|
18
|
+
// ScMenuPanelComponent,
|
|
19
19
|
];
|
|
20
20
|
export const scComponents = {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
scCellRendererButtonComponent: ScCellRendererButtonComponent,
|
|
22
|
+
scCellRenderCheckboxListComponent: ScCellRenderCheckboxListComponent,
|
|
23
|
+
scCellRenderSelectComponent: ScCellRenderSelectComponent,
|
|
24
|
+
scCellRenderToggleComponent: ScCellRenderToggleComponent,
|
|
25
|
+
noRowsOverlayDefault: ScMenuPanelComponent,
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2VsbC1yZW5kZXItY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN1bWF4LWVycC1jb21wb25lbnQvc3JjL2xpYi9zYy1hZy1ncmlkL2NlbGwtcmVuZGVyL3NjLWNlbGwtcmVuZGVyLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUM5SCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUMxSCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUV0RyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRztJQUNyQyw2QkFBNkIsRUFBRSw2QkFBNkI7SUFDNUQsaUNBQWlDLEVBQUUsaUNBQWlDO0lBQ3BFLDJCQUEyQixFQUFFLDJCQUEyQjtJQUN4RCwyQkFBMkIsRUFBRSwyQkFBMkI7SUFDeEQsb0JBQW9CLEVBQUUsNkJBQTZCO0NBQ3BELENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRztJQUN0QyxpQ0FBaUM7SUFDakMsaUNBQWlDO0lBQ2pDLDJCQUEyQjtJQUMzQiwyQkFBMkI7SUFDM0IsMEJBQTBCO0NBQzNCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDMUIsNkJBQTZCLEVBQUUsNkJBQTZCO0lBQzVELGlDQUFpQyxFQUFFLGlDQUFpQztJQUNwRSwyQkFBMkIsRUFBRSwyQkFBMkI7SUFDeEQsMkJBQTJCLEVBQUUsMkJBQTJCO0lBQ3hELG9CQUFvQixFQUFFLG9CQUFvQjtDQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm9Sb3dzT3ZlcmxheURlZmF1bHRDb21wb25lbnQgfSBmcm9tIFwiLi9uby1yb3dzLW92ZXJsYXkvbm9Sb3dzT3ZlcmxheURlZmF1bHQuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTY0NlbGxSZW5kZXJlckJ1dHRvbkNvbXBvbmVudCwgU2NNZW51UGFuZWxDb21wb25lbnQgfSBmcm9tIFwiLi9zYy1jZWxsLXJlbmRlci1idXR0b24vc2MtY2VsbC1yZW5kZXItYnV0dG9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2NDZWxsUmVuZGVyQ2hlY2tib3hMaXN0Q29tcG9uZW50IH0gZnJvbSBcIi4vc2MtY2VsbC1yZW5kZXItY2hlY2tib3gtbGlzdC9zYy1jZWxsLXJlbmRlci1jaGVja2JveC1saXN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2NDZWxsUmVuZGVyU2VsZWN0Q29tcG9uZW50IH0gZnJvbSBcIi4vc2MtY2VsbC1yZW5kZXItc2VsZWN0L3NjLWNlbGwtcmVuZGVyLXNlbGVjdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFNjQ2VsbFJlbmRlclRvZ2dsZUNvbXBvbmVudCB9IGZyb20gXCIuL3NjLWNlbGwtcmVuZGVyLXRvZ2dsZS9zYy1jZWxsLXJlbmRlci10b2dnbGUuY29tcG9uZW50XCI7XG5cbmV4cG9ydCBjb25zdCBzY0NlbGxSZW5kZXJlckZyYW1ld29yayA9IHtcbiAgc2NDZWxsUmVuZGVyZXJCdXR0b25Db21wb25lbnQ6IFNjQ2VsbFJlbmRlcmVyQnV0dG9uQ29tcG9uZW50LFxuICBzY0NlbGxSZW5kZXJDaGVja2JveExpc3RDb21wb25lbnQ6IFNjQ2VsbFJlbmRlckNoZWNrYm94TGlzdENvbXBvbmVudCxcbiAgc2NDZWxsUmVuZGVyU2VsZWN0Q29tcG9uZW50OiBTY0NlbGxSZW5kZXJTZWxlY3RDb21wb25lbnQsXG4gIHNjQ2VsbFJlbmRlclRvZ2dsZUNvbXBvbmVudDogU2NDZWxsUmVuZGVyVG9nZ2xlQ29tcG9uZW50LFxuICBub1Jvd3NPdmVybGF5RGVmYXVsdDogTm9Sb3dzT3ZlcmxheURlZmF1bHRDb21wb25lbnQsXG59O1xuZXhwb3J0IGNvbnN0IHNjQ2VsbFJlbmRlcmVyQ29tcG9uZW50cyA9IFtcbiAgLy8gU2NDZWxsUmVuZGVyZXJCdXR0b25Db21wb25lbnQsXG4gIFNjQ2VsbFJlbmRlckNoZWNrYm94TGlzdENvbXBvbmVudCxcbiAgU2NDZWxsUmVuZGVyU2VsZWN0Q29tcG9uZW50LFxuICBTY0NlbGxSZW5kZXJUb2dnbGVDb21wb25lbnQsXG4gIC8vICAgU2NNZW51UGFuZWxDb21wb25lbnQsXG5dO1xuXG5leHBvcnQgY29uc3Qgc2NDb21wb25lbnRzID0ge1xuICBzY0NlbGxSZW5kZXJlckJ1dHRvbkNvbXBvbmVudDogU2NDZWxsUmVuZGVyZXJCdXR0b25Db21wb25lbnQsXG4gIHNjQ2VsbFJlbmRlckNoZWNrYm94TGlzdENvbXBvbmVudDogU2NDZWxsUmVuZGVyQ2hlY2tib3hMaXN0Q29tcG9uZW50LFxuICBzY0NlbGxSZW5kZXJTZWxlY3RDb21wb25lbnQ6IFNjQ2VsbFJlbmRlclNlbGVjdENvbXBvbmVudCxcbiAgc2NDZWxsUmVuZGVyVG9nZ2xlQ29tcG9uZW50OiBTY0NlbGxSZW5kZXJUb2dnbGVDb21wb25lbnQsXG4gIG5vUm93c092ZXJsYXlEZWZhdWx0OiBTY01lbnVQYW5lbENvbXBvbmVudCxcbn07XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export class FilterPaginable {
|
|
2
|
+
constructor(page, pageSize) {
|
|
3
|
+
this.page = page;
|
|
4
|
+
this.pageSize = pageSize;
|
|
5
|
+
this.sortBy = "";
|
|
6
|
+
this.sortDirection = "";
|
|
7
|
+
}
|
|
8
|
+
getPathFilter() {
|
|
9
|
+
if (this.sortBy === "") {
|
|
10
|
+
return `?page=${this.page}&size=${this.pageSize}`;
|
|
11
|
+
}
|
|
12
|
+
return `?page=${this.page}&size=${this.pageSize}&sortBy=${this.sortBy}&sortDirection=${this.sortDirection}`;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLWFnLWdyaWQtcGFnaW5hYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN1bWF4LWVycC1jb21wb25lbnQvc3JjL2xpYi9zYy1hZy1ncmlkL3NjLWFnLWdyaWQtcGFnaW5hYmxlL21vZGVscy1hZy1ncmlkLXBhZ2luYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQkEsTUFBTSxPQUFPLGVBQWU7SUFNMUIsWUFBWSxJQUFZLEVBQUUsUUFBZ0I7UUFDeEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDdkIsT0FBTyxTQUFTLElBQUksQ0FBQyxJQUFJLFNBQVMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BELENBQUM7UUFDRCxPQUFPLFNBQVMsSUFBSSxDQUFDLElBQUksU0FBUyxJQUFJLENBQUMsUUFBUSxXQUFXLElBQUksQ0FBQyxNQUFNLGtCQUFrQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBQYWdpbmFibGU8VD4ge1xuICBkYXRhPzogVFtdO1xuICAvKipcbiAgICogVG90YWwgZGUgcmVnaXN0cm9zXG4gICAqL1xuICB0b3RhbEl0ZW1zPzogbnVtYmVyO1xuICAvKipcbiAgICogTsO6bWVybyBkZSBww6FnaW5hIGxhIGFjdHVhbFxuICAgKi9cbiAgcGFnZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRhbWHDsW8gZGUgbGEgcMOhZ2luYVxuICAgKi9cbiAgc2l6ZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRvdGFsIGRlIHDDoWdpbmFzXG4gICAqL1xuICB0b3RhbFBhZ2U/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJQYWdpbmFibGUge1xuICBwYWdlPzogbnVtYmVyO1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgc29ydEJ5Pzogc3RyaW5nO1xuICBzb3J0RGlyZWN0aW9uPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2U6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcikge1xuICAgIHRoaXMucGFnZSA9IHBhZ2U7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xuICAgIHRoaXMuc29ydEJ5ID0gXCJcIjtcbiAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSBcIlwiO1xuICB9XG5cbiAgZ2V0UGF0aEZpbHRlcigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnNvcnRCeSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIGA/cGFnZT0ke3RoaXMucGFnZX0mc2l6ZT0ke3RoaXMucGFnZVNpemV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGA/cGFnZT0ke3RoaXMucGFnZX0mc2l6ZT0ke3RoaXMucGFnZVNpemV9JnNvcnRCeT0ke3RoaXMuc29ydEJ5fSZzb3J0RGlyZWN0aW9uPSR7dGhpcy5zb3J0RGlyZWN0aW9ufWA7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import { CommonModule } from "@angular/common";
|
|
2
|
+
import { Component, EventEmitter, inject, Input, Output, ViewChild, } from "@angular/core";
|
|
3
|
+
import { AgGridModule } from "ag-grid-angular";
|
|
4
|
+
import { EMPTY, Subscription, tap } from "rxjs";
|
|
5
|
+
import { EnumButtonType } from "../../utils/IScAgGrid";
|
|
6
|
+
import { ScCellRenderButtonService } from "../cell-render/sc-cell-render-button/sc-cell-render-button.component";
|
|
7
|
+
import { ScCellRendererButtonModule } from "../cell-render/sc-cell-render-button/sc-cell-render-button.module";
|
|
8
|
+
import { scComponents } from "../cell-render/sc-cell-render-config";
|
|
9
|
+
import { FilterPaginable } from "./models-ag-grid-paginable";
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@angular/common";
|
|
12
|
+
import * as i2 from "ag-grid-angular";
|
|
13
|
+
export class ScAgGridPaginableComponent {
|
|
14
|
+
/**
|
|
15
|
+
* @description Componentes de la `grilla`
|
|
16
|
+
* @default undefined
|
|
17
|
+
*/
|
|
18
|
+
set frameworkComponents(value) {
|
|
19
|
+
this._frameworkComponents = { ...this._frameworkComponents, ...value };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @description Para poder agregar más objetos al contexto
|
|
23
|
+
*/
|
|
24
|
+
set context(value) {
|
|
25
|
+
this._context = { ...this._context, ...value };
|
|
26
|
+
}
|
|
27
|
+
// GETTERS
|
|
28
|
+
getTotalPageList(currentPage) {
|
|
29
|
+
let start = currentPage - this.maxVisiblePages;
|
|
30
|
+
let end = currentPage + this.maxVisiblePages;
|
|
31
|
+
// Ajuste cuando está al inicio
|
|
32
|
+
if (start < 1) {
|
|
33
|
+
start = 1;
|
|
34
|
+
end = this.maxVisiblePages * 2 + 1;
|
|
35
|
+
}
|
|
36
|
+
// Ajuste cuando está al final
|
|
37
|
+
if (end > this.totalPage) {
|
|
38
|
+
end = this.totalPage;
|
|
39
|
+
start = Math.max(1, end - this.maxVisiblePages * 2);
|
|
40
|
+
}
|
|
41
|
+
return Array.from({ length: end - start + 1 }, (_, i) => start + i);
|
|
42
|
+
}
|
|
43
|
+
get suppressRowClickSelection() {
|
|
44
|
+
return this.rowSelection === "single" ? false : true;
|
|
45
|
+
}
|
|
46
|
+
constructor(changeDetectorRef) {
|
|
47
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
48
|
+
// INPUTS
|
|
49
|
+
/**
|
|
50
|
+
* @description Opciones de tamaño de página
|
|
51
|
+
* @default '[5, 10, 15, 20, 25]'
|
|
52
|
+
*/
|
|
53
|
+
this.pageSizeOptions = [5, 10, 15, 20, 25, 50];
|
|
54
|
+
/**
|
|
55
|
+
* @description Tamaño de la página
|
|
56
|
+
* @default 15
|
|
57
|
+
* @options [5, 10, 15, 20, 25, 50]
|
|
58
|
+
*/
|
|
59
|
+
this.pageSize = 15;
|
|
60
|
+
/**
|
|
61
|
+
* @description Array de columnas que se mostrara en la `grilla`
|
|
62
|
+
* @default undefined
|
|
63
|
+
*/
|
|
64
|
+
this.columnDefs = [];
|
|
65
|
+
/**
|
|
66
|
+
* @description Función que determina si una fila es seleccionable
|
|
67
|
+
* @default () => true
|
|
68
|
+
*/
|
|
69
|
+
this.isRowSelectable = () => true;
|
|
70
|
+
/**
|
|
71
|
+
* @description Configuración de selección de filas
|
|
72
|
+
* @default 'single'
|
|
73
|
+
* @enum {'single' | 'multiple'}
|
|
74
|
+
*/
|
|
75
|
+
this.rowSelection = "single";
|
|
76
|
+
/**
|
|
77
|
+
* @description Configuración de layout de la `grilla`
|
|
78
|
+
* @default 'normal'
|
|
79
|
+
* @enum {'normal' | 'autoHeight'}
|
|
80
|
+
*/
|
|
81
|
+
/**
|
|
82
|
+
* @description Tamaño de la `grilla`
|
|
83
|
+
* @default '20em'
|
|
84
|
+
*/
|
|
85
|
+
this.height = "20em";
|
|
86
|
+
this.domLayout = "normal";
|
|
87
|
+
/**
|
|
88
|
+
* @description Función que determina el estilo de una fila
|
|
89
|
+
* @default () => undefined
|
|
90
|
+
*/
|
|
91
|
+
this.getRowStyle = () => undefined;
|
|
92
|
+
/**
|
|
93
|
+
* @description Datos de la `grilla`
|
|
94
|
+
* @default undefined
|
|
95
|
+
*/
|
|
96
|
+
this.serviceSearch = () => EMPTY;
|
|
97
|
+
/**
|
|
98
|
+
* @description Datos de la búsqueda
|
|
99
|
+
* @default undefined
|
|
100
|
+
*/
|
|
101
|
+
this.requestBody = {};
|
|
102
|
+
// OUTPUTS
|
|
103
|
+
/**
|
|
104
|
+
* @description Evento que se dispara cuando se hace clic en una fila
|
|
105
|
+
* @default undefined
|
|
106
|
+
*/
|
|
107
|
+
this.rowClicked = new EventEmitter();
|
|
108
|
+
/**
|
|
109
|
+
* @description Evento que se dispara cuando se hace clic doble en una fila
|
|
110
|
+
* @default undefined
|
|
111
|
+
*/
|
|
112
|
+
this.rowDoubleClicked = new EventEmitter();
|
|
113
|
+
/**
|
|
114
|
+
* @description Evento que se dispara cuando se selecciona una fila
|
|
115
|
+
* @default undefined
|
|
116
|
+
*/
|
|
117
|
+
this.rowSelected = new EventEmitter();
|
|
118
|
+
/**
|
|
119
|
+
* @description Evento que se dispara cuando se hace clic en una acción de la `grilla`
|
|
120
|
+
* @default undefined
|
|
121
|
+
*/
|
|
122
|
+
this.buttonActionAgGrid = new EventEmitter();
|
|
123
|
+
/**
|
|
124
|
+
* @description Evento que se dispara cuando se hace clic en una acción de la `cabecera`
|
|
125
|
+
* @default undefined
|
|
126
|
+
*/
|
|
127
|
+
this.buttonActionHeader = new EventEmitter();
|
|
128
|
+
/**
|
|
129
|
+
* @description Evento que se dispara cuando se hace clic en una acción de la `grilla`
|
|
130
|
+
* @default undefined
|
|
131
|
+
*/
|
|
132
|
+
this.editRow = new EventEmitter();
|
|
133
|
+
/**
|
|
134
|
+
* @description Evento que se dispara cuando se hace clic en una acción de la `grilla`
|
|
135
|
+
* @default undefined
|
|
136
|
+
*/
|
|
137
|
+
this.deleteRow = new EventEmitter();
|
|
138
|
+
// VARIABLES
|
|
139
|
+
this.totalItems = 0;
|
|
140
|
+
this.currentPage = 0;
|
|
141
|
+
this.totalPage = 0;
|
|
142
|
+
this.filter = new FilterPaginable(this.currentPage, this.pageSize);
|
|
143
|
+
this._subscription$ = new Subscription();
|
|
144
|
+
this._frameworkComponents = { ...scComponents };
|
|
145
|
+
this._context = { componentParent: this };
|
|
146
|
+
this._configButtonsDefaultAgGrid = [];
|
|
147
|
+
this.columnDefsAndAddCellActions = [];
|
|
148
|
+
this._scCellRenderButtonService = inject(ScCellRenderButtonService);
|
|
149
|
+
this.maxVisiblePages = 2;
|
|
150
|
+
this.overlayNoRowsTemplate = `<span class="ag-overlay-loading-center border-0 bg-transparent shadow-none">
|
|
151
|
+
No se encontraron registros...
|
|
152
|
+
</span>`;
|
|
153
|
+
this.overlayLoadingTemplate = `<span class="ag-overlay-loading-top d-flex align-items-center border-0 bg-white shadow p-4 text-info" style="height: 20px;">
|
|
154
|
+
<img src="assets/media-demo/loading.gif" height="20" width="25" class="mr-2">
|
|
155
|
+
<strong>Cargando registros</strong>
|
|
156
|
+
</span>
|
|
157
|
+
`;
|
|
158
|
+
}
|
|
159
|
+
ngOnInit() {
|
|
160
|
+
this._subscription$.add(this._scCellRenderButtonService.handlerButtonAction$.subscribe(({ index, action, isRightClick }) => {
|
|
161
|
+
if (action == null)
|
|
162
|
+
return;
|
|
163
|
+
if (action.trim() === "")
|
|
164
|
+
return;
|
|
165
|
+
if (index !== -1) {
|
|
166
|
+
this.onButtonActionAgGridEmit(index, action, isRightClick);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
this.onButtonActionHeaderEmit(action);
|
|
170
|
+
}));
|
|
171
|
+
}
|
|
172
|
+
ngOnChanges(changes) {
|
|
173
|
+
if (changes["configButtonsAction"]) {
|
|
174
|
+
this._initActionButton();
|
|
175
|
+
}
|
|
176
|
+
if (changes["requestBody"] && !changes["requestBody"].firstChange) {
|
|
177
|
+
this._fillAgGrid();
|
|
178
|
+
}
|
|
179
|
+
if (changes["pageSize"] && changes["pageSize"].firstChange) {
|
|
180
|
+
this.filter.pageSize = this.pageSize;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
ngOnDestroy() {
|
|
184
|
+
this._subscriptionRowData$?.unsubscribe();
|
|
185
|
+
this._subscription$.unsubscribe();
|
|
186
|
+
}
|
|
187
|
+
onButtonActionHeaderEmit(typeButton) {
|
|
188
|
+
const rowsSelected = this.agGrid?.api?.getSelectedRows();
|
|
189
|
+
this.buttonActionHeader.emit([typeButton, rowsSelected]);
|
|
190
|
+
}
|
|
191
|
+
onGridReady() {
|
|
192
|
+
this._fillAgGrid();
|
|
193
|
+
}
|
|
194
|
+
_fillAgGrid() {
|
|
195
|
+
this._initActionButton();
|
|
196
|
+
if (this._subscriptionRowData$) {
|
|
197
|
+
this._subscriptionRowData$.unsubscribe();
|
|
198
|
+
this.agGrid?.api.setGridOption("rowData", []);
|
|
199
|
+
this.agGrid?.api?.showLoadingOverlay();
|
|
200
|
+
}
|
|
201
|
+
this._subscriptionRowData$ = this.serviceSearch(this.filter, this.requestBody)
|
|
202
|
+
.pipe(tap((data) => {
|
|
203
|
+
this.totalItems = data.totalItems ?? 0;
|
|
204
|
+
this.currentPage = Number(data.page ?? 0);
|
|
205
|
+
this.pageSize = Number(data.size ?? 0);
|
|
206
|
+
this.totalPage = Number(data.totalPage ?? 0);
|
|
207
|
+
this.agGrid?.api.setGridOption("rowData", data.data ?? []);
|
|
208
|
+
this.changeDetectorRef.detectChanges();
|
|
209
|
+
}))
|
|
210
|
+
.subscribe();
|
|
211
|
+
}
|
|
212
|
+
_initActionButton() {
|
|
213
|
+
this._configButtonsDefaultAgGrid = [...(this.configButtonsAction?.agGrid?.actions || [])];
|
|
214
|
+
if (!this.configButtonsAction?.agGrid?.actions?.length) {
|
|
215
|
+
this.columnDefsAndAddCellActions = [...this.columnDefs];
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
const length = this._configButtonsDefaultAgGrid.filter(({ hide }) => {
|
|
219
|
+
return !this._hideFunc(hide);
|
|
220
|
+
}).length;
|
|
221
|
+
const width = length == 2 ? 90 : 80;
|
|
222
|
+
const minWidth = length > 2 ? length * 33 + 10 : width;
|
|
223
|
+
const newColumns = {
|
|
224
|
+
headerName: "Acciones",
|
|
225
|
+
headerClass: "ag-header__center",
|
|
226
|
+
field: "",
|
|
227
|
+
width: minWidth,
|
|
228
|
+
minWidth,
|
|
229
|
+
maxWidth: minWidth,
|
|
230
|
+
cellClass: ["d-flex", "justify-content-center", "align-items-center"],
|
|
231
|
+
cellStyle: { overflow: "visible" },
|
|
232
|
+
resizable: false,
|
|
233
|
+
sortable: false,
|
|
234
|
+
cellRenderer: "scCellRendererButtonComponent",
|
|
235
|
+
pinned: "right",
|
|
236
|
+
suppressMenu: true,
|
|
237
|
+
lockPosition: true,
|
|
238
|
+
};
|
|
239
|
+
this.columnDefsAndAddCellActions = this._hideAgGridMenuAction() ? [...this.columnDefs] : [...this.columnDefs, newColumns];
|
|
240
|
+
}
|
|
241
|
+
onButtonActionAgGridEmit(rowIndex, typeButton, isRightClick) {
|
|
242
|
+
const IRowNode = this.agGrid?.api?.getDisplayedRowAtIndex(rowIndex);
|
|
243
|
+
if (IRowNode) {
|
|
244
|
+
if (typeButton === EnumButtonType.TYPE_EDIT) {
|
|
245
|
+
this.editRow.emit(IRowNode);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
if (typeButton === EnumButtonType.TYPE_DELETE) {
|
|
249
|
+
this.deleteRow.emit([this.agGrid?.api, [IRowNode.data]]);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
this.buttonActionAgGrid.emit([typeButton, IRowNode, isRightClick]);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
_hideFunc(hide) {
|
|
256
|
+
if (hide == null)
|
|
257
|
+
return false;
|
|
258
|
+
if (typeof hide == "function")
|
|
259
|
+
return hide();
|
|
260
|
+
return hide;
|
|
261
|
+
}
|
|
262
|
+
_hideAgGridMenuAction() {
|
|
263
|
+
if (this.configButtonsAction == null)
|
|
264
|
+
return true;
|
|
265
|
+
return (this.configButtonsAction?.agGrid?.actions.every(({ hide }) => {
|
|
266
|
+
return this._hideFunc(hide);
|
|
267
|
+
}) ?? true);
|
|
268
|
+
}
|
|
269
|
+
onSortChanged() {
|
|
270
|
+
const sortModel = this.agGrid.api
|
|
271
|
+
.getColumnState()
|
|
272
|
+
.filter((col) => col.sort != null)
|
|
273
|
+
.map((col) => ({
|
|
274
|
+
field: col.colId,
|
|
275
|
+
sort: col.sort,
|
|
276
|
+
}));
|
|
277
|
+
if (sortModel.length === 0) {
|
|
278
|
+
this.filter.sortBy = "";
|
|
279
|
+
this.filter.sortDirection = "";
|
|
280
|
+
}
|
|
281
|
+
else if (sortModel.length === 1 && sortModel[0].field !== "1") {
|
|
282
|
+
const sortBy = sortModel[0].field;
|
|
283
|
+
const sortDirection = sortModel[0].sort;
|
|
284
|
+
this.filter.sortBy = sortBy;
|
|
285
|
+
this.filter.sortDirection = sortDirection;
|
|
286
|
+
}
|
|
287
|
+
this._fillAgGrid();
|
|
288
|
+
}
|
|
289
|
+
// PAGINATION
|
|
290
|
+
goToPage(page) {
|
|
291
|
+
if (page - 1 === this.currentPage)
|
|
292
|
+
return;
|
|
293
|
+
this.filter.page = page - 1;
|
|
294
|
+
this.currentPage = page - 1;
|
|
295
|
+
this._fillAgGrid();
|
|
296
|
+
}
|
|
297
|
+
changePageSize(event) {
|
|
298
|
+
this.filter.pageSize = Number(event.target.value);
|
|
299
|
+
this._fillAgGrid();
|
|
300
|
+
}
|
|
301
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ScAgGridPaginableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
302
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ScAgGridPaginableComponent, isStandalone: true, selector: "sc-ag-grid-paginable", inputs: { pageSizeOptions: "pageSizeOptions", pageSize: "pageSize", configButtonsAction: "configButtonsAction", columnDefs: "columnDefs", isRowSelectable: "isRowSelectable", rowSelection: "rowSelection", height: "height", domLayout: "domLayout", getRowStyle: "getRowStyle", serviceSearch: "serviceSearch", requestBody: "requestBody", frameworkComponents: "frameworkComponents", context: "context" }, outputs: { rowClicked: "rowClicked", rowDoubleClicked: "rowDoubleClicked", rowSelected: "rowSelected", buttonActionAgGrid: "buttonActionAgGrid", buttonActionHeader: "buttonActionHeader", editRow: "editRow", deleteRow: "deleteRow" }, viewQueries: [{ propertyName: "agGrid", first: true, predicate: ["agGridPaginable"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12\" [ngStyle]=\"{ width: '100%', height: this.height }\">\n <ag-grid-angular\n #agGridPaginable\n style=\"width: 100%; height: 100%\"\n class=\"ag-theme-balham\"\n [columnDefs]=\"columnDefsAndAddCellActions\"\n [components]=\"_frameworkComponents\"\n [context]=\"_context\"\n [rowSelection]=\"rowSelection\"\n [isRowSelectable]=\"isRowSelectable\"\n [domLayout]=\"domLayout\"\n [animateRows]=\"true\"\n [suppressMoveWhenRowDragging]=\"false\"\n [getRowStyle]=\"getRowStyle\"\n [enableRangeSelection]=\"false\"\n [suppressRowTransform]=\"false\"\n [overlayNoRowsTemplate]=\"overlayNoRowsTemplate\"\n [overlayLoadingTemplate]=\"overlayLoadingTemplate\"\n [suppressPropertyNamesCheck]=\"true\"\n [suppressRowClickSelection]=\"suppressRowClickSelection\"\n [paginationPageSize]=\"pageSize\"\n [pagination]=\"true\"\n [suppressPaginationPanel]=\"true\"\n (rowClicked)=\"rowClicked.emit($event)\"\n (rowDoubleClicked)=\"rowDoubleClicked.emit($event)\"\n (rowSelected)=\"rowSelected.emit($event)\"\n (gridReady)=\"onGridReady()\"\n (sortChanged)=\"onSortChanged()\"\n oncontextmenu=\"return false;\">\n </ag-grid-angular>\n </div>\n</div>\n\n<div class=\"d-flex mt-2 justify-content-center justify-content-sm-between sc-ag-grid__pagination\">\n <nav class=\"d-flex flex-wrap\" aria-label=\"AgGrid pagination\">\n <ul class=\"pagination p-0 m-0\">\n <li class=\"page-item\" [ngClass]=\"currentPage === 0 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(1)\"><em class=\"fa fa-angle-double-left\"></em></button>\n </li>\n <li class=\"page-item\" [ngClass]=\"currentPage === 0 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(currentPage)\"><em class=\"fa fa-angle-left\"></em></button>\n </li>\n <li *ngIf=\"currentPage > maxVisiblePages\">\n <button class=\"page-link disabled\">...</button>\n </li>\n <li class=\"page-item\" *ngFor=\"let n of getTotalPageList(currentPage + 1)\" [ngClass]=\"currentPage === n - 1 ? 'active' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(n)\">{{ n }}</button>\n </li>\n <li *ngIf=\"currentPage < totalPage - maxVisiblePages - 1\">\n <button class=\"page-link disabled\">...</button>\n </li>\n <li class=\"page-item\" [ngClass]=\"currentPage === totalPage - 1 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(currentPage + 2)\"><em class=\"fa fa-angle-right\"></em></button>\n </li>\n <li class=\"page-item\" [ngClass]=\"currentPage === totalPage - 1 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(totalPage)\"><em class=\"fa fa-angle-double-right\"></em></button>\n </li>\n </ul>\n <div class=\"d-flex mx-2 align-items-center input-group-sm\">\n Mostrar\n <select class=\"custom-select mx-2\" (change)=\"changePageSize($event)\">\n <option *ngFor=\"let option of pageSizeOptions\" [value]=\"option\" [selected]=\"option === pageSize\">\n {{ option }}\n </option>\n </select>\n registros\n </div>\n </nav>\n\n <div class=\"d-flex justify-content-end mt-2 mt-sm-0\">\n <div class=\"sc-ag-grid__pagination--total d-flex align-items-center flex-nowrap\">\n <span class=\"value\">{{ totalItems }} {{ totalItems > 1 ? \"Registros.\" : \"Registro.\" }}</span>\n <span class=\"label\"> Página </span>\n <span class=\"value\">\n {{ currentPage + 1 }}\n </span>\n <span class=\"label\"> de </span>\n <span class=\"value\">\n {{ totalPage }}\n </span>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: AgGridModule }, { kind: "component", type: i2.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "excludeHiddenColumnsFromQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "suppressChartToolPanelsButton", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "functionsPassive", "enableGroupEdit", "initialState", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "gridPreDestroyed", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "ngmodule", type: ScCellRendererButtonModule }] }); }
|
|
303
|
+
}
|
|
304
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ScAgGridPaginableComponent, decorators: [{
|
|
305
|
+
type: Component,
|
|
306
|
+
args: [{ selector: "sc-ag-grid-paginable", standalone: true, imports: [CommonModule, AgGridModule, ScCellRendererButtonModule], template: "<div class=\"row\">\n <div class=\"col-12\" [ngStyle]=\"{ width: '100%', height: this.height }\">\n <ag-grid-angular\n #agGridPaginable\n style=\"width: 100%; height: 100%\"\n class=\"ag-theme-balham\"\n [columnDefs]=\"columnDefsAndAddCellActions\"\n [components]=\"_frameworkComponents\"\n [context]=\"_context\"\n [rowSelection]=\"rowSelection\"\n [isRowSelectable]=\"isRowSelectable\"\n [domLayout]=\"domLayout\"\n [animateRows]=\"true\"\n [suppressMoveWhenRowDragging]=\"false\"\n [getRowStyle]=\"getRowStyle\"\n [enableRangeSelection]=\"false\"\n [suppressRowTransform]=\"false\"\n [overlayNoRowsTemplate]=\"overlayNoRowsTemplate\"\n [overlayLoadingTemplate]=\"overlayLoadingTemplate\"\n [suppressPropertyNamesCheck]=\"true\"\n [suppressRowClickSelection]=\"suppressRowClickSelection\"\n [paginationPageSize]=\"pageSize\"\n [pagination]=\"true\"\n [suppressPaginationPanel]=\"true\"\n (rowClicked)=\"rowClicked.emit($event)\"\n (rowDoubleClicked)=\"rowDoubleClicked.emit($event)\"\n (rowSelected)=\"rowSelected.emit($event)\"\n (gridReady)=\"onGridReady()\"\n (sortChanged)=\"onSortChanged()\"\n oncontextmenu=\"return false;\">\n </ag-grid-angular>\n </div>\n</div>\n\n<div class=\"d-flex mt-2 justify-content-center justify-content-sm-between sc-ag-grid__pagination\">\n <nav class=\"d-flex flex-wrap\" aria-label=\"AgGrid pagination\">\n <ul class=\"pagination p-0 m-0\">\n <li class=\"page-item\" [ngClass]=\"currentPage === 0 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(1)\"><em class=\"fa fa-angle-double-left\"></em></button>\n </li>\n <li class=\"page-item\" [ngClass]=\"currentPage === 0 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(currentPage)\"><em class=\"fa fa-angle-left\"></em></button>\n </li>\n <li *ngIf=\"currentPage > maxVisiblePages\">\n <button class=\"page-link disabled\">...</button>\n </li>\n <li class=\"page-item\" *ngFor=\"let n of getTotalPageList(currentPage + 1)\" [ngClass]=\"currentPage === n - 1 ? 'active' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(n)\">{{ n }}</button>\n </li>\n <li *ngIf=\"currentPage < totalPage - maxVisiblePages - 1\">\n <button class=\"page-link disabled\">...</button>\n </li>\n <li class=\"page-item\" [ngClass]=\"currentPage === totalPage - 1 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(currentPage + 2)\"><em class=\"fa fa-angle-right\"></em></button>\n </li>\n <li class=\"page-item\" [ngClass]=\"currentPage === totalPage - 1 ? 'disabled' : ''\">\n <button class=\"page-link\" (click)=\"goToPage(totalPage)\"><em class=\"fa fa-angle-double-right\"></em></button>\n </li>\n </ul>\n <div class=\"d-flex mx-2 align-items-center input-group-sm\">\n Mostrar\n <select class=\"custom-select mx-2\" (change)=\"changePageSize($event)\">\n <option *ngFor=\"let option of pageSizeOptions\" [value]=\"option\" [selected]=\"option === pageSize\">\n {{ option }}\n </option>\n </select>\n registros\n </div>\n </nav>\n\n <div class=\"d-flex justify-content-end mt-2 mt-sm-0\">\n <div class=\"sc-ag-grid__pagination--total d-flex align-items-center flex-nowrap\">\n <span class=\"value\">{{ totalItems }} {{ totalItems > 1 ? \"Registros.\" : \"Registro.\" }}</span>\n <span class=\"label\"> Página </span>\n <span class=\"value\">\n {{ currentPage + 1 }}\n </span>\n <span class=\"label\"> de </span>\n <span class=\"value\">\n {{ totalPage }}\n </span>\n </div>\n </div>\n</div>\n" }]
|
|
307
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { pageSizeOptions: [{
|
|
308
|
+
type: Input
|
|
309
|
+
}], pageSize: [{
|
|
310
|
+
type: Input
|
|
311
|
+
}], configButtonsAction: [{
|
|
312
|
+
type: Input
|
|
313
|
+
}], columnDefs: [{
|
|
314
|
+
type: Input
|
|
315
|
+
}], isRowSelectable: [{
|
|
316
|
+
type: Input
|
|
317
|
+
}], rowSelection: [{
|
|
318
|
+
type: Input
|
|
319
|
+
}], height: [{
|
|
320
|
+
type: Input
|
|
321
|
+
}], domLayout: [{
|
|
322
|
+
type: Input
|
|
323
|
+
}], getRowStyle: [{
|
|
324
|
+
type: Input
|
|
325
|
+
}], serviceSearch: [{
|
|
326
|
+
type: Input
|
|
327
|
+
}], requestBody: [{
|
|
328
|
+
type: Input
|
|
329
|
+
}], frameworkComponents: [{
|
|
330
|
+
type: Input
|
|
331
|
+
}], context: [{
|
|
332
|
+
type: Input
|
|
333
|
+
}], rowClicked: [{
|
|
334
|
+
type: Output
|
|
335
|
+
}], rowDoubleClicked: [{
|
|
336
|
+
type: Output
|
|
337
|
+
}], rowSelected: [{
|
|
338
|
+
type: Output
|
|
339
|
+
}], buttonActionAgGrid: [{
|
|
340
|
+
type: Output
|
|
341
|
+
}], buttonActionHeader: [{
|
|
342
|
+
type: Output
|
|
343
|
+
}], editRow: [{
|
|
344
|
+
type: Output
|
|
345
|
+
}], deleteRow: [{
|
|
346
|
+
type: Output
|
|
347
|
+
}], agGrid: [{
|
|
348
|
+
type: ViewChild,
|
|
349
|
+
args: ["agGridPaginable"]
|
|
350
|
+
}] } });
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWctZ3JpZC1wYWdpbmFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN1bWF4LWVycC1jb21wb25lbnQvc3JjL2xpYi9zYy1hZy1ncmlkL3NjLWFnLWdyaWQtcGFnaW5hYmxlL3NjLWFnLWdyaWQtcGFnaW5hYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdW1heC1lcnAtY29tcG9uZW50L3NyYy9saWIvc2MtYWctZ3JpZC9zYy1hZy1ncmlkLXBhZ2luYWJsZS9zYy1hZy1ncmlkLXBhZ2luYWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBaUIsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFOUQsT0FBTyxFQUFFLEtBQUssRUFBYyxZQUFZLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBMEMsY0FBYyxFQUFzQyxNQUFNLHVCQUF1QixDQUFDO0FBQ25JLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFhLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFVeEUsTUFBTSxPQUFPLDBCQUEwQjtJQTREckM7OztPQUdHO0lBQ0gsSUFDSSxtQkFBbUIsQ0FBQyxLQUFVO1FBQ2hDLElBQUks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Z0JBQWdCO3NCQUF6QixNQUFNO2dCQUtHLFdBQVc7c0JBQXBCLE1BQU07Z0JBS0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUtHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFLRyxPQUFPO3NCQUFoQixNQUFNO2dCQUtHLFNBQVM7c0JBQWxCLE1BQU07Z0JBSVAsTUFBTTtzQkFETCxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBZ0dyaWRBbmd1bGFyLCBBZ0dyaWRNb2R1bGUgfSBmcm9tIFwiYWctZ3JpZC1hbmd1bGFyXCI7XG5pbXBvcnQgeyBDb2xEZWYsIEdyaWRBcGksIElSb3dOb2RlLCBJc1Jvd1NlbGVjdGFibGUsIFJvd0NsaWNrZWRFdmVudCwgUm93RG91YmxlQ2xpY2tlZEV2ZW50LCBSb3dTZWxlY3RlZEV2ZW50IH0gZnJvbSBcImFnLWdyaWQtY29tbXVuaXR5XCI7XG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCB0YXAgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQ29uZmlnQnV0dG9uQWN0aW9uLCBDb25maWdCdXR0b25BZ0dyaWQsIEVudW1CdXR0b25UeXBlLCBHZXRSb3dTdHlsZSwgSGlkZUZ1YywgUm93U2VsZWN0aW9uIH0gZnJvbSBcIi4uLy4uL3V0aWxzL0lTY0FnR3JpZFwiO1xuaW1wb3J0IHsgU2NDZWxsUmVuZGVyQnV0dG9uU2VydmljZSB9IGZyb20gXCIuLi9jZWxsLXJlbmRlci9zYy1jZWxsLXJlbmRlci1idXR0b24vc2MtY2VsbC1yZW5kZXItYnV0dG9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2NDZWxsUmVuZGVyZXJCdXR0b25Nb2R1bGUgfSBmcm9tIFwiLi4vY2VsbC1yZW5kZXIvc2MtY2VsbC1yZW5kZXItYnV0dG9uL3NjLWNlbGwtcmVuZGVyLWJ1dHRvbi5tb2R1bGVcIjtcbmltcG9ydCB7IHNjQ29tcG9uZW50cyB9IGZyb20gXCIuLi9jZWxsLXJlbmRlci9zYy1jZWxsLXJlbmRlci1jb25maWdcIjtcbmltcG9ydCB7IEZpbHRlclBhZ2luYWJsZSwgUGFnaW5hYmxlIH0gZnJvbSBcIi4vbW9kZWxzLWFnLWdyaWQtcGFnaW5hYmxlXCI7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogXCJzYy1hZy1ncmlkLXBhZ2luYWJsZVwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBZ0dyaWRNb2R1bGUsIFNjQ2VsbFJlbmRlcmVyQnV0dG9uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9zYy1hZy1ncmlkLXBhZ2luYWJsZS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybDogXCIuL3NjLWFnLWdyaWQtcGFnaW5hYmxlLmNvbXBvbmVudC5zY3NzXCIsXG59KVxuZXhwb3J0IGNsYXNzIFNjQWdHcmlkUGFnaW5hYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8vIElOUFVUU1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uICBPcGNpb25lcyBkZSB0YW1hw7FvIGRlIHDDoWdpbmFcbiAgICogQGRlZmF1bHQgJ1s1LCAxMCwgMTUsIDIwLCAyNV0nXG4gICAqL1xuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnMgPSBbNSwgMTAsIDE1LCAyMCwgMjUsIDUwXTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUYW1hw7FvIGRlIGxhIHDDoWdpbmFcbiAgICogQGRlZmF1bHQgMTVcbiAgICogQG9wdGlvbnMgWzUsIDEwLCAxNSwgMjAsIDI1LCA1MF1cbiAgICovXG4gIEBJbnB1dCgpIHBhZ2VTaXplID0gMTU7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhY2nDs24gZGUgYWNjaW9uZXMgZGUgbGEgYGdyaWxsYWBcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBjb25maWdCdXR0b25zQWN0aW9uITogQ29uZmlnQnV0dG9uQWN0aW9uO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFycmF5IGRlIGNvbHVtbmFzIHF1ZSBzZSBtb3N0cmFyYSBlbiBsYSBgZ3JpbGxhYFxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIGNvbHVtbkRlZnM6IENvbERlZltdID0gW107XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRnVuY2nDs24gcXVlIGRldGVybWluYSBzaSB1bmEgZmlsYSBlcyBzZWxlY2Npb25hYmxlXG4gICAqIEBkZWZhdWx0ICgpID0+IHRydWVcbiAgICovXG4gIEBJbnB1dCgpIGlzUm93U2VsZWN0YWJsZTogSXNSb3dTZWxlY3RhYmxlID0gKCkgPT4gdHJ1ZTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmFjacOzbiBkZSBzZWxlY2Npw7NuIGRlIGZpbGFzXG4gICAqIEBkZWZhdWx0ICdzaW5nbGUnXG4gICAqIEBlbnVtIHsnc2luZ2xlJyB8ICdtdWx0aXBsZSd9XG4gICAqL1xuICBASW5wdXQoKSByb3dTZWxlY3Rpb246IFJvd1NlbGVjdGlvbiA9IFwic2luZ2xlXCI7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhY2nDs24gZGUgbGF5b3V0IGRlIGxhIGBncmlsbGFgXG4gICAqIEBkZWZhdWx0ICdub3JtYWwnXG4gICAqIEBlbnVtIHsnbm9ybWFsJyB8ICdhdXRvSGVpZ2h0J31cbiAgICovXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGFtYcOxbyBkZSBsYSBgZ3JpbGxhYFxuICAgKiBAZGVmYXVsdCAnMjBlbSdcbiAgICovXG4gIEBJbnB1dCgpIGhlaWdodCA9IFwiMjBlbVwiO1xuICBASW5wdXQoKSBkb21MYXlvdXQ6IFwibm9ybWFsXCIgfCBcImF1dG9IZWlnaHRcIiA9IFwibm9ybWFsXCI7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRnVuY2nDs24gcXVlIGRldGVybWluYSBlbCBlc3RpbG8gZGUgdW5hIGZpbGFcbiAgICogQGRlZmF1bHQgKCkgPT4gdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBnZXRSb3dTdHlsZTogR2V0Um93U3R5bGUgPSAoKSA9PiB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGF0b3MgZGUgbGEgYGdyaWxsYWBcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBzZXJ2aWNlU2VhcmNoOiAoZmlsdGVyOiBGaWx0ZXJQYWdpbmFibGUsIHNlYXJjaEJvZHk6IHVua25vd24pID0+IE9ic2VydmFibGU8UGFnaW5hYmxlPHVua25vd24+PiA9ICgpID0+IEVNUFRZO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERhdG9zIGRlIGxhIGLDunNxdWVkYVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIHJlcXVlc3RCb2R5OiB1bmtub3duID0ge307XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZXMgZGUgbGEgYGdyaWxsYWBcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgZnJhbWV3b3JrQ29tcG9uZW50cyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fZnJhbWV3b3JrQ29tcG9uZW50cyA9IHsgLi4udGhpcy5fZnJhbWV3b3JrQ29tcG9uZW50cywgLi4udmFsdWUgfTtcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhcmEgcG9kZXIgYWdyZWdhciBtw6FzIG9iamV0b3MgYWwgY29udGV4dG9cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjb250ZXh0KHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9jb250ZXh0ID0geyAuLi50aGlzLl9jb250ZXh0LCAuLi52YWx1ZSB9O1xuICB9XG5cbiAgLy8gT1VUUFVUU1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV2ZW50byBxdWUgc2UgZGlzcGFyYSBjdWFuZG8gc2UgaGFjZSBjbGljIGVuIHVuYSBmaWxhXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQE91dHB1dCgpIHJvd0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0NsaWNrZWRFdmVudD4oKTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIGhhY2UgY2xpYyBkb2JsZSBlbiB1bmEgZmlsYVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBPdXRwdXQoKSByb3dEb3VibGVDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dEb3VibGVDbGlja2VkRXZlbnQ+KCk7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXZlbnRvIHF1ZSBzZSBkaXNwYXJhIGN1YW5kbyBzZSBzZWxlY2Npb25hIHVuYSBmaWxhXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQE91dHB1dCgpIHJvd1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dTZWxlY3RlZEV2ZW50PigpO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV2ZW50byBxdWUgc2UgZGlzcGFyYSBjdWFuZG8gc2UgaGFjZSBjbGljIGVuIHVuYSBhY2Npw7NuIGRlIGxhIGBncmlsbGFgXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQE91dHB1dCgpIGJ1dHRvbkFjdGlvbkFnR3JpZCA9IG5ldyBFdmVudEVtaXR0ZXI8W0VudW1CdXR0b25UeXBlIHwgc3RyaW5nLCBJUm93Tm9kZSwgYm9vbGVhbl0+KCk7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXZlbnRvIHF1ZSBzZSBkaXNwYXJhIGN1YW5kbyBzZSBoYWNlIGNsaWMgZW4gdW5hIGFjY2nDs24gZGUgbGEgYGNhYmVjZXJhYFxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBPdXRwdXQoKSBidXR0b25BY3Rpb25IZWFkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFtFbnVtQnV0dG9uVHlwZSB8IHN0cmluZywgYW55W11dPigpO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV2ZW50byBxdWUgc2UgZGlzcGFyYSBjdWFuZG8gc2UgaGFjZSBjbGljIGVuIHVuYSBhY2Npw7NuIGRlIGxhIGBncmlsbGFgXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQE91dHB1dCgpIGVkaXRSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dOb2RlPigpO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV2ZW50byBxdWUgc2UgZGlzcGFyYSBjdWFuZG8gc2UgaGFjZSBjbGljIGVuIHVuYSBhY2Npw7NuIGRlIGxhIGBncmlsbGFgXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQE91dHB1dCgpIGRlbGV0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8W0dyaWRBcGksIGFueVtdXT4oKTtcblxuICAvLyBWSUVXIENISUxEUkVOXG4gIEBWaWV3Q2hpbGQoXCJhZ0dyaWRQYWdpbmFibGVcIilcbiAgYWdHcmlkITogQWdHcmlkQW5ndWxhcjtcblxuICAvLyBWQVJJQUJMRVNcbiAgdG90YWxJdGVtczogbnVtYmVyID0gMDtcbiAgY3VycmVudFBhZ2U6IG51bWJlciA9IDA7XG4gIHRvdGFsUGFnZTogbnVtYmVyID0gMDtcbiAgZmlsdGVyOiBGaWx0ZXJQYWdpbmFibGUgPSBuZXcgRmlsdGVyUGFnaW5hYmxlKHRoaXMuY3VycmVudFBhZ2UsIHRoaXMucGFnZVNpemUpO1xuXG4gIF9zdWJzY3JpcHRpb24kID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBfc3Vic2NyaXB0aW9uUm93RGF0YSQ/OiBTdWJzY3JpcHRpb247XG4gIF9mcmFtZXdvcmtDb21wb25lbnRzID0geyAuLi5zY0NvbXBvbmVudHMgfTtcbiAgX2NvbnRleHQgPSB7IGNvbXBvbmVudFBhcmVudDogdGhpcyBhcyBhbnkgfTtcbiAgX2NvbmZpZ0J1dHRvbnNEZWZhdWx0QWdHcmlkOiBDb25maWdCdXR0b25BZ0dyaWRbXSA9IFtdO1xuICBjb2x1bW5EZWZzQW5kQWRkQ2VsbEFjdGlvbnM6IENvbERlZltdID0gW107XG5cbiAgcHJpdmF0ZSBfc2NDZWxsUmVuZGVyQnV0dG9uU2VydmljZSA9IGluamVjdChTY0NlbGxSZW5kZXJCdXR0b25TZXJ2aWNlKTtcbiAgcmVhZG9ubHkgbWF4VmlzaWJsZVBhZ2VzID0gMjtcblxuICByZWFkb25seSBvdmVybGF5Tm9Sb3dzVGVtcGxhdGU6IHN0cmluZyA9IGA8c3BhbiBjbGFzcz1cImFnLW92ZXJsYXktbG9hZGluZy1jZW50ZXIgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgc2hhZG93LW5vbmVcIj5cblx0XHRcdE5vIHNlIGVuY29udHJhcm9uIHJlZ2lzdHJvcy4uLlxuXHRcdDwvc3Bhbj5gO1xuICByZWFkb25seSBvdmVybGF5TG9hZGluZ1RlbXBsYXRlOiBzdHJpbmcgPSBgPHNwYW4gY2xhc3M9XCJhZy1vdmVybGF5LWxvYWRpbmctdG9wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgYm9yZGVyLTAgYmctd2hpdGUgc2hhZG93IHAtNCB0ZXh0LWluZm9cIiBzdHlsZT1cImhlaWdodDogMjBweDtcIj5cblx0XHRcdDxpbWcgc3JjPVwiYXNzZXRzL21lZGlhLWRlbW8vbG9hZGluZy5naWZcIiBoZWlnaHQ9XCIyMFwiIHdpZHRoPVwiMjVcIiBjbGFzcz1cIm1yLTJcIj5cblx0XHRcdDxzdHJvbmc+Q2FyZ2FuZG8gcmVnaXN0cm9zPC9zdHJvbmc+XG5cdFx0PC9zcGFuPlxuXHRcdGA7XG5cbiAgLy8gR0VUVEVSU1xuICBnZXRUb3RhbFBhZ2VMaXN0KGN1cnJlbnRQYWdlOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgbGV0IHN0YXJ0ID0gY3VycmVudFBhZ2UgLSB0aGlzLm1heFZpc2libGVQYWdlcztcbiAgICBsZXQgZW5kID0gY3VycmVudFBhZ2UgKyB0aGlzLm1heFZpc2libGVQYWdlcztcblxuICAgIC8vIEFqdXN0ZSBjdWFuZG8gZXN0w6EgYWwgaW5pY2lvXG4gICAgaWYgKHN0YXJ0IDwgMSkge1xuICAgICAgc3RhcnQgPSAxO1xuICAgICAgZW5kID0gdGhpcy5tYXhWaXNpYmxlUGFnZXMgKiAyICsgMTtcbiAgICB9XG5cbiAgICAvLyBBanVzdGUgY3VhbmRvIGVzdMOhIGFsIGZpbmFsXG4gICAgaWYgKGVuZCA+IHRoaXMudG90YWxQYWdlKSB7XG4gICAgICBlbmQgPSB0aGlzLnRvdGFsUGFnZTtcbiAgICAgIHN0YXJ0ID0gTWF0aC5tYXgoMSwgZW5kIC0gdGhpcy5tYXhWaXNpYmxlUGFnZXMgKiAyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZW5kIC0gc3RhcnQgKyAxIH0sIChfLCBpKSA9PiBzdGFydCArIGkpO1xuICB9XG5cbiAgZ2V0IHN1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucm93U2VsZWN0aW9uID09PSBcInNpbmdsZVwiID8gZmFsc2UgOiB0cnVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uJC5hZGQoXG4gICAgICB0aGlzLl9zY0NlbGxSZW5kZXJCdXR0b25TZXJ2aWNlLmhhbmRsZXJCdXR0b25BY3Rpb24kLnN1YnNjcmliZSgoeyBpbmRleCwgYWN0aW9uLCBpc1JpZ2h0Q2xpY2sgfSkgPT4ge1xuICAgICAgICBpZiAoYWN0aW9uID09IG51bGwpIHJldHVybjtcbiAgICAgICAgaWYgKGFjdGlvbi50cmltKCkgPT09IFwiXCIpIHJldHVybjtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMub25CdXR0b25BY3Rpb25BZ0dyaWRFbWl0KGluZGV4LCBhY3Rpb24sIGlzUmlnaHRDbGljayk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkJ1dHRvbkFjdGlvbkhlYWRlckVtaXQoYWN0aW9uKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1tcImNvbmZpZ0J1dHRvbnNBY3Rpb25cIl0pIHtcbiAgICAgIHRoaXMuX2luaXRBY3Rpb25CdXR0b24oKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbXCJyZXF1ZXN0Qm9keVwiXSAmJiAhY2hhbmdlc1tcInJlcXVlc3RCb2R5XCJdLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLl9maWxsQWdHcmlkKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wicGFnZVNpemVcIl0gJiYgY2hhbmdlc1tcInBhZ2VTaXplXCJdLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLmZpbHRlci5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uUm93RGF0YSQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uJC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgb25CdXR0b25BY3Rpb25IZWFkZXJFbWl0KHR5cGVCdXR0b246IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJvd3NTZWxlY3RlZCA9IHRoaXMuYWdHcmlkPy5hcGk/LmdldFNlbGVjdGVkUm93cygpO1xuICAgIHRoaXMuYnV0dG9uQWN0aW9uSGVhZGVyLmVtaXQoW3R5cGVCdXR0b24sIHJvd3NTZWxlY3RlZF0pO1xuICB9XG5cbiAgb25HcmlkUmVhZHkoKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsbEFnR3JpZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlsbEFnR3JpZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbml0QWN0aW9uQnV0dG9uKCk7XG5cbiAgICBpZiAodGhpcy5fc3Vic2NyaXB0aW9uUm93RGF0YSQpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvblJvd0RhdGEkLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmFnR3JpZD8uYXBpLnNldEdyaWRPcHRpb24oXCJyb3dEYXRhXCIsIFtdKTtcbiAgICAgIHRoaXMuYWdHcmlkPy5hcGk/LnNob3dMb2FkaW5nT3ZlcmxheSgpO1xuICAgIH1cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25Sb3dEYXRhJCA9IHRoaXMuc2VydmljZVNlYXJjaCh0aGlzLmZpbHRlciwgdGhpcy5yZXF1ZXN0Qm9keSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGRhdGEpID0+IHtcbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSBkYXRhLnRvdGFsSXRlbXMgPz8gMDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gTnVtYmVyKGRhdGEucGFnZSA/PyAwKTtcbiAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gTnVtYmVyKGRhdGEuc2l6ZSA/PyAwKTtcbiAgICAgICAgICB0aGlzLnRvdGFsUGFnZSA9IE51bWJlcihkYXRhLnRvdGFsUGFnZSA/PyAwKTtcbiAgICAgICAgICB0aGlzLmFnR3JpZD8uYXBpLnNldEdyaWRPcHRpb24oXCJyb3dEYXRhXCIsIGRhdGEuZGF0YSA/PyBbXSk7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0QWN0aW9uQnV0dG9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2NvbmZpZ0J1dHRvbnNEZWZhdWx0QWdHcmlkID0gWy4uLih0aGlzLmNvbmZpZ0J1dHRvbnNBY3Rpb24/LmFnR3JpZD8uYWN0aW9ucyB8fCBbXSldO1xuICAgIGlmICghdGhpcy5jb25maWdCdXR0b25zQWN0aW9uPy5hZ0dyaWQ/LmFjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb2x1bW5EZWZzQW5kQWRkQ2VsbEFjdGlvbnMgPSBbLi4udGhpcy5jb2x1bW5EZWZzXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLl9jb25maWdCdXR0b25zRGVmYXVsdEFnR3JpZC5maWx0ZXIoKHsgaGlkZSB9KSA9PiB7XG4gICAgICByZXR1cm4gIXRoaXMuX2hpZGVGdW5jKGhpZGUpO1xuICAgIH0pLmxlbmd0aDtcblxuICAgIGNvbnN0IHdpZHRoID0gbGVuZ3RoID09IDIgPyA5MCA6IDgwO1xuICAgIGNvbnN0IG1pbldpZHRoID0gbGVuZ3RoID4gMiA/IGxlbmd0aCAqIDMzICsgMTAgOiB3aWR0aDtcblxuICAgIGNvbnN0IG5ld0NvbHVtbnM6IENvbERlZiA9IHtcbiAgICAgIGhlYWRlck5hbWU6IFwiQWNjaW9uZXNcIixcbiAgICAgIGhlYWRlckNsYXNzOiBcImFnLWhlYWRlcl9fY2VudGVyXCIsXG4gICAgICBmaWVsZDogXCJcIixcbiAgICAgIHdpZHRoOiBtaW5XaWR0aCxcbiAgICAgIG1pbldpZHRoLFxuICAgICAgbWF4V2lkdGg6IG1pbldpZHRoLFxuICAgICAgY2VsbENsYXNzOiBbXCJkLWZsZXhcIiwgXCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIsIFwiYWxpZ24taXRlbXMtY2VudGVyXCJdLFxuICAgICAgY2VsbFN0eWxlOiB7IG92ZXJmbG93OiBcInZpc2libGVcIiB9LFxuICAgICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIGNlbGxSZW5kZXJlcjogXCJzY0NlbGxSZW5kZXJlckJ1dHRvbkNvbXBvbmVudFwiLFxuICAgICAgcGlubmVkOiBcInJpZ2h0XCIsXG4gICAgICBzdXBwcmVzc01lbnU6IHRydWUsXG4gICAgICBsb2NrUG9zaXRpb246IHRydWUsXG4gICAgfTtcbiAgICB0aGlzLmNvbHVtbkRlZnNBbmRBZGRDZWxsQWN0aW9ucyA9IHRoaXMuX2hpZGVBZ0dyaWRNZW51QWN0aW9uKCkgPyBbLi4udGhpcy5jb2x1bW5EZWZzXSA6IFsuLi50aGlzLmNvbHVtbkRlZnMsIG5ld0NvbHVtbnNdO1xuICB9XG5cbiAgb25CdXR0b25BY3Rpb25BZ0dyaWRFbWl0KHJvd0luZGV4OiBudW1iZXIsIHR5cGVCdXR0b246IHN0cmluZywgaXNSaWdodENsaWNrOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgSVJvd05vZGUgPSB0aGlzLmFnR3JpZD8uYXBpPy5nZXREaXNwbGF5ZWRSb3dBdEluZGV4KHJvd0luZGV4KTtcblxuICAgIGlmIChJUm93Tm9kZSkge1xuICAgICAgaWYgKHR5cGVCdXR0b24gPT09IEVudW1CdXR0b25UeXBlLlRZUEVfRURJVCkge1xuICAgICAgICB0aGlzLmVkaXRSb3cuZW1pdChJUm93Tm9kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlQnV0dG9uID09PSBFbnVtQnV0dG9uVHlwZS5UWVBFX0RFTEVURSkge1xuICAgICAgICB0aGlzLmRlbGV0ZVJvdy5lbWl0KFt0aGlzLmFnR3JpZD8uYXBpLCBbSVJvd05vZGUuZGF0YV1dKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmJ1dHRvbkFjdGlvbkFnR3JpZC5lbWl0KFt0eXBlQnV0dG9uLCBJUm93Tm9kZSwgaXNSaWdodENsaWNrXSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGlkZUZ1bmMoaGlkZTogSGlkZUZ1YyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICBpZiAoaGlkZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBoaWRlID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGhpZGUoKTtcblxuICAgIHJldHVybiBoaWRlO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGlkZUFnR3JpZE1lbnVBY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY29uZmlnQnV0dG9uc0FjdGlvbiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb25maWdCdXR0b25zQWN0aW9uPy5hZ0dyaWQ/LmFjdGlvbnMuZXZlcnkoKHsgaGlkZSB9KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlRnVuYyhoaWRlKTtcbiAgICAgIH0pID8/IHRydWVcbiAgICApO1xuICB9XG5cbiAgb25Tb3J0Q2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBzb3J0TW9kZWwgPSB0aGlzLmFnR3JpZC5hcGlcbiAgICAgIC5nZXRDb2x1bW5TdGF0ZSgpXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5zb3J0ICE9IG51bGwpXG4gICAgICAubWFwKChjb2wpID0+ICh7XG4gICAgICAgIGZpZWxkOiBjb2wuY29sSWQsXG4gICAgICAgIHNvcnQ6IGNvbC5zb3J0LFxuICAgICAgfSkpO1xuXG4gICAgaWYgKHNvcnRNb2RlbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZmlsdGVyLnNvcnRCeSA9IFwiXCI7XG4gICAgICB0aGlzLmZpbHRlci5zb3J0RGlyZWN0aW9uID0gXCJcIjtcbiAgICB9IGVsc2UgaWYgKHNvcnRNb2RlbC5sZW5ndGggPT09IDEgJiYgc29ydE1vZGVsWzBdLmZpZWxkICE9PSBcIjFcIikge1xuICAgICAgY29uc3Qgc29ydEJ5ID0gc29ydE1vZGVsWzBdLmZpZWxkO1xuICAgICAgY29uc3Qgc29ydERpcmVjdGlvbiA9IHNvcnRNb2RlbFswXS5zb3J0IGFzIHN0cmluZztcbiAgICAgIHRoaXMuZmlsdGVyLnNvcnRCeSA9IHNvcnRCeTtcbiAgICAgIHRoaXMuZmlsdGVyLnNvcnREaXJlY3Rpb24gPSBzb3J0RGlyZWN0aW9uO1xuICAgIH1cblxuICAgIHRoaXMuX2ZpbGxBZ0dyaWQoKTtcbiAgfVxuXG4gIC8vIFBBR0lOQVRJT05cblxuICBnb1RvUGFnZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAocGFnZSAtIDEgPT09IHRoaXMuY3VycmVudFBhZ2UpIHJldHVybjtcbiAgICB0aGlzLmZpbHRlci5wYWdlID0gcGFnZSAtIDE7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2UgLSAxO1xuICAgIHRoaXMuX2ZpbGxBZ0dyaWQoKTtcbiAgfVxuXG4gIGNoYW5nZVBhZ2VTaXplKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyLnBhZ2VTaXplID0gTnVtYmVyKChldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlKTtcbiAgICB0aGlzLl9maWxsQWdHcmlkKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMlwiIFtuZ1N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiB0aGlzLmhlaWdodCB9XCI+XG4gICAgPGFnLWdyaWQtYW5ndWxhclxuICAgICAgI2FnR3JpZFBhZ2luYWJsZVxuICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlXCJcbiAgICAgIGNsYXNzPVwiYWctdGhlbWUtYmFsaGFtXCJcbiAgICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNBbmRBZGRDZWxsQWN0aW9uc1wiXG4gICAgICBbY29tcG9uZW50c109XCJfZnJhbWV3b3JrQ29tcG9uZW50c1wiXG4gICAgICBbY29udGV4dF09XCJfY29udGV4dFwiXG4gICAgICBbcm93U2VsZWN0aW9uXT1cInJvd1NlbGVjdGlvblwiXG4gICAgICBbaXNSb3dTZWxlY3RhYmxlXT1cImlzUm93U2VsZWN0YWJsZVwiXG4gICAgICBbZG9tTGF5b3V0XT1cImRvbUxheW91dFwiXG4gICAgICBbYW5pbWF0ZVJvd3NdPVwidHJ1ZVwiXG4gICAgICBbc3VwcHJlc3NNb3ZlV2hlblJvd0RyYWdnaW5nXT1cImZhbHNlXCJcbiAgICAgIFtnZXRSb3dTdHlsZV09XCJnZXRSb3dTdHlsZVwiXG4gICAgICBbZW5hYmxlUmFuZ2VTZWxlY3Rpb25dPVwiZmFsc2VcIlxuICAgICAgW3N1cHByZXNzUm93VHJhbnNmb3JtXT1cImZhbHNlXCJcbiAgICAgIFtvdmVybGF5Tm9Sb3dzVGVtcGxhdGVdPVwib3ZlcmxheU5vUm93c1RlbXBsYXRlXCJcbiAgICAgIFtvdmVybGF5TG9hZGluZ1RlbXBsYXRlXT1cIm92ZXJsYXlMb2FkaW5nVGVtcGxhdGVcIlxuICAgICAgW3N1cHByZXNzUHJvcGVydHlOYW1lc0NoZWNrXT1cInRydWVcIlxuICAgICAgW3N1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb25dPVwic3VwcHJlc3NSb3dDbGlja1NlbGVjdGlvblwiXG4gICAgICBbcGFnaW5hdGlvblBhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgIFtwYWdpbmF0aW9uXT1cInRydWVcIlxuICAgICAgW3N1cHByZXNzUGFnaW5hdGlvblBhbmVsXT1cInRydWVcIlxuICAgICAgKHJvd0NsaWNrZWQpPVwicm93Q2xpY2tlZC5lbWl0KCRldmVudClcIlxuICAgICAgKHJvd0RvdWJsZUNsaWNrZWQpPVwicm93RG91YmxlQ2xpY2tlZC5lbWl0KCRldmVudClcIlxuICAgICAgKHJvd1NlbGVjdGVkKT1cInJvd1NlbGVjdGVkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KClcIlxuICAgICAgKHNvcnRDaGFuZ2VkKT1cIm9uU29ydENoYW5nZWQoKVwiXG4gICAgICBvbmNvbnRleHRtZW51PVwicmV0dXJuIGZhbHNlO1wiPlxuICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZC1mbGV4IG10LTIganVzdGlmeS1jb250ZW50LWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtc20tYmV0d2VlbiBzYy1hZy1ncmlkX19wYWdpbmF0aW9uXCI+XG4gIDxuYXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwXCIgYXJpYS1sYWJlbD1cIkFnR3JpZCBwYWdpbmF0aW9uXCI+XG4gICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBwLTAgbS0wXCI+XG4gICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiBbbmdDbGFzc109XCJjdXJyZW50UGFnZSA9PT0gMCA/ICdkaXNhYmxlZCcgOiAnJ1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicGFnZS1saW5rXCIgKGNsaWNrKT1cImdvVG9QYWdlKDEpXCI+PGVtIGNsYXNzPVwiZmEgZmEtYW5nbGUtZG91YmxlLWxlZnRcIj48L2VtPjwvYnV0dG9uPlxuICAgICAgPC9saT5cbiAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbVwiIFtuZ0NsYXNzXT1cImN1cnJlbnRQYWdlID09PSAwID8gJ2Rpc2FibGVkJyA6ICcnXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJwYWdlLWxpbmtcIiAoY2xpY2spPVwiZ29Ub1BhZ2UoY3VycmVudFBhZ2UpXCI+PGVtIGNsYXNzPVwiZmEgZmEtYW5nbGUtbGVmdFwiPjwvZW0+PC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgICAgPGxpICpuZ0lmPVwiY3VycmVudFBhZ2UgPiBtYXhWaXNpYmxlUGFnZXNcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZFwiPi4uLjwvYnV0dG9uPlxuICAgICAgPC9saT5cbiAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbVwiICpuZ0Zvcj1cImxldCBuIG9mIGdldFRvdGFsUGFnZUxpc3QoY3VycmVudFBhZ2UgKyAxKVwiIFtuZ0NsYXNzXT1cImN1cnJlbnRQYWdlID09PSBuIC0gMSA/ICdhY3RpdmUnIDogJydcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInBhZ2UtbGlua1wiIChjbGljayk9XCJnb1RvUGFnZShuKVwiPnt7IG4gfX08L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgKm5nSWY9XCJjdXJyZW50UGFnZSA8IHRvdGFsUGFnZSAtIG1heFZpc2libGVQYWdlcyAtIDFcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZFwiPi4uLjwvYnV0dG9uPlxuICAgICAgPC9saT5cbiAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbVwiIFtuZ0NsYXNzXT1cImN1cnJlbnRQYWdlID09PSB0b3RhbFBhZ2UgLSAxID8gJ2Rpc2FibGVkJyA6ICcnXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJwYWdlLWxpbmtcIiAoY2xpY2spPVwiZ29Ub1BhZ2UoY3VycmVudFBhZ2UgKyAyKVwiPjxlbSBjbGFzcz1cImZhIGZhLWFuZ2xlLXJpZ2h0XCI+PC9lbT48L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiBbbmdDbGFzc109XCJjdXJyZW50UGFnZSA9PT0gdG90YWxQYWdlIC0gMSA/ICdkaXNhYmxlZCcgOiAnJ1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicGFnZS1saW5rXCIgKGNsaWNrKT1cImdvVG9QYWdlKHRvdGFsUGFnZSlcIj48ZW0gY2xhc3M9XCJmYSBmYS1hbmdsZS1kb3VibGUtcmlnaHRcIj48L2VtPjwvYnV0dG9uPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbXgtMiBhbGlnbi1pdGVtcy1jZW50ZXIgaW5wdXQtZ3JvdXAtc21cIj5cbiAgICAgIE1vc3RyYXJcbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJjdXN0b20tc2VsZWN0IG14LTJcIiAoY2hhbmdlKT1cImNoYW5nZVBhZ2VTaXplKCRldmVudClcIj5cbiAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHBhZ2VTaXplT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIiBbc2VsZWN0ZWRdPVwib3B0aW9uID09PSBwYWdlU2l6ZVwiPlxuICAgICAgICAgIHt7IG9wdGlvbiB9fVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgICAgcmVnaXN0cm9zXG4gICAgPC9kaXY+XG4gIDwvbmF2PlxuXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtdC0yIG10LXNtLTBcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2MtYWctZ3JpZF9fcGFnaW5hdGlvbi0tdG90YWwgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LW5vd3JhcFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7IHRvdGFsSXRlbXMgfX0mbmJzcDt7eyB0b3RhbEl0ZW1zID4gMSA/IFwiUmVnaXN0cm9zLlwiIDogXCJSZWdpc3Ryby5cIiB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj4mbmJzcDtQJmFhY3V0ZTtnaW5hJm5ic3A7PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICB7eyBjdXJyZW50UGFnZSArIDEgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj4mbmJzcDtkZSZuYnNwOzwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAge3sgdG90YWxQYWdlIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|