@firestitch/list 12.17.1 → 12.18.1
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/app/classes/actions-controller.d.ts +20 -20
- package/app/classes/columns-controller.d.ts +71 -71
- package/app/classes/data-controller.d.ts +91 -91
- package/app/classes/external-params-controller.d.ts +31 -31
- package/app/classes/index.d.ts +2 -2
- package/app/classes/list-controller.d.ts +179 -179
- package/app/classes/pagination-controller.d.ts +189 -189
- package/app/classes/persistance-controller.d.ts +10 -10
- package/app/classes/reorder-controller.d.ts +68 -68
- package/app/classes/selection-controller.d.ts +155 -155
- package/app/classes/sorting-controller.d.ts +64 -64
- package/app/components/body/body.component.d.ts +28 -28
- package/app/components/body/row/actions/actions.component.d.ts +36 -36
- package/app/components/body/row/cell/cell.component.d.ts +23 -22
- package/app/components/body/row/inline-action/inline-action.component.d.ts +16 -16
- package/app/components/body/row/menu-action/menu-action.component.d.ts +20 -20
- package/app/components/body/row/row.component.d.ts +82 -82
- package/app/components/customize-cols/customize-cols.component.d.ts +17 -17
- package/app/components/footer/footer-row/footer-cell/footer-cell.component.d.ts +7 -7
- package/app/components/footer/footer-row/footer-row.component.d.ts +14 -14
- package/app/components/footer/footer.component.d.ts +15 -15
- package/app/components/head/head-cell/head-cell.component.d.ts +14 -14
- package/app/components/head/head.component.d.ts +49 -49
- package/app/components/list/list.component.d.ts +122 -122
- package/app/components/loader/loader.component.d.ts +14 -14
- package/app/components/manage-saved-filters/manage-saved-filters.component.d.ts +13 -13
- package/app/components/pagination/pagination.component.d.ts +14 -14
- package/app/components/saved-filters/saved-filters.component.d.ts +15 -15
- package/app/components/status/status.component.d.ts +21 -21
- package/app/directives/cell/cell.directive.d.ts +8 -8
- package/app/directives/column/column.directive.d.ts +33 -33
- package/app/directives/content/content.directive.d.ts +5 -5
- package/app/directives/content-init/content-init.directive.d.ts +9 -9
- package/app/directives/draggable-list/draggable-list.directive.d.ts +95 -95
- package/app/directives/draggable-row/draggable-row.directive.d.ts +23 -23
- package/app/directives/empty-state/empty-state.directive.d.ts +5 -5
- package/app/directives/footer/footer.directive.d.ts +8 -8
- package/app/directives/group-expand-trigger/group-expand-trigger.directive.d.ts +10 -10
- package/app/directives/group-footer/group-footer.directive.d.ts +6 -6
- package/app/directives/group-header/group-header.directive.d.ts +6 -6
- package/app/directives/header/header.directive.d.ts +8 -8
- package/app/directives/heading/heading.directive.d.ts +5 -5
- package/app/directives/heading-container/heading-container.directive.d.ts +5 -5
- package/app/directives/index.d.ts +3 -3
- package/app/directives/subheading/subheading.directive.d.ts +5 -5
- package/app/enums/button-type.enum.d.ts +7 -7
- package/app/enums/page-change-type.enum.d.ts +4 -4
- package/app/enums/pagination-strategy.enum.d.ts +5 -5
- package/app/enums/row-type.enum.d.ts +6 -6
- package/app/enums/state.enum.d.ts +9 -9
- package/app/fs-list.module.d.ts +60 -60
- package/app/fs-list.providers.d.ts +3 -3
- package/app/interfaces/cellconfig.interface.d.ts +5 -5
- package/app/interfaces/column-config.interface.d.ts +2 -2
- package/app/interfaces/draggable-list.interface.d.ts +7 -7
- package/app/interfaces/external-params.interface.d.ts +13 -13
- package/app/interfaces/index.d.ts +3 -3
- package/app/interfaces/listconfig.interface.d.ts +267 -267
- package/app/interfaces/pagination.interface.d.ts +13 -13
- package/app/models/column-async-attribute.d.ts +5 -5
- package/app/models/column-attributes.d.ts +39 -39
- package/app/models/column.model.d.ts +59 -59
- package/app/models/row/base-row.d.ts +13 -13
- package/app/models/row/child-row.d.ts +12 -12
- package/app/models/row/group-footer-row.d.ts +10 -10
- package/app/models/row/group-row.d.ts +16 -16
- package/app/models/row/simple-row.d.ts +5 -5
- package/app/models/row-action.model.d.ts +29 -29
- package/app/models/row.d.ts +30 -30
- package/app/models/styleConfig.model.d.ts +31 -31
- package/app/pipes/action-label.d.ts +8 -8
- package/app/pipes/index.d.ts +1 -1
- package/app/services/group-expand-notifier.service.d.ts +11 -11
- package/bundles/firestitch-list.umd.js +6930 -6909
- package/bundles/firestitch-list.umd.js.map +1 -1
- package/esm2015/app/classes/actions-controller.js +55 -55
- package/esm2015/app/classes/columns-controller.js +205 -205
- package/esm2015/app/classes/data-controller.js +365 -353
- package/esm2015/app/classes/external-params-controller.js +153 -153
- package/esm2015/app/classes/index.js +3 -3
- package/esm2015/app/classes/list-controller.js +738 -738
- package/esm2015/app/classes/pagination-controller.js +460 -460
- package/esm2015/app/classes/persistance-controller.js +19 -19
- package/esm2015/app/classes/reorder-controller.js +182 -182
- package/esm2015/app/classes/selection-controller.js +467 -467
- package/esm2015/app/classes/sorting-controller.js +180 -180
- package/esm2015/app/components/body/body.component.js +68 -68
- package/esm2015/app/components/body/row/actions/actions.component.js +98 -98
- package/esm2015/app/components/body/row/cell/cell.component.js +113 -106
- package/esm2015/app/components/body/row/inline-action/inline-action.component.js +39 -39
- package/esm2015/app/components/body/row/menu-action/menu-action.component.js +49 -49
- package/esm2015/app/components/body/row/row.component.js +305 -305
- package/esm2015/app/components/customize-cols/customize-cols.component.js +72 -72
- package/esm2015/app/components/footer/footer-row/footer-cell/footer-cell.component.js +20 -20
- package/esm2015/app/components/footer/footer-row/footer-row.component.js +31 -31
- package/esm2015/app/components/footer/footer.component.js +35 -35
- package/esm2015/app/components/head/head-cell/head-cell.component.js +34 -34
- package/esm2015/app/components/head/head.component.js +107 -107
- package/esm2015/app/components/list/list.component.js +385 -385
- package/esm2015/app/components/loader/loader.component.js +47 -47
- package/esm2015/app/components/manage-saved-filters/manage-saved-filters.component.js +78 -78
- package/esm2015/app/components/pagination/pagination.component.js +44 -44
- package/esm2015/app/components/saved-filters/saved-filters.component.js +33 -33
- package/esm2015/app/components/status/status.component.js +72 -72
- package/esm2015/app/directives/cell/cell.directive.js +18 -18
- package/esm2015/app/directives/column/column.directive.js +111 -111
- package/esm2015/app/directives/content/content.directive.js +12 -12
- package/esm2015/app/directives/content-init/content-init.directive.js +21 -21
- package/esm2015/app/directives/draggable-list/draggable-list.directive.js +330 -329
- package/esm2015/app/directives/draggable-row/draggable-row.directive.js +78 -78
- package/esm2015/app/directives/empty-state/empty-state.directive.js +13 -13
- package/esm2015/app/directives/footer/footer.directive.js +18 -18
- package/esm2015/app/directives/group-expand-trigger/group-expand-trigger.directive.js +26 -26
- package/esm2015/app/directives/group-footer/group-footer.directive.js +13 -13
- package/esm2015/app/directives/group-header/group-header.directive.js +13 -13
- package/esm2015/app/directives/header/header.directive.js +18 -18
- package/esm2015/app/directives/heading/heading.directive.js +13 -13
- package/esm2015/app/directives/heading-container/heading-container.directive.js +13 -13
- package/esm2015/app/directives/index.js +4 -4
- package/esm2015/app/directives/subheading/subheading.directive.js +13 -13
- package/esm2015/app/enums/button-type.enum.js +9 -9
- package/esm2015/app/enums/page-change-type.enum.js +6 -6
- package/esm2015/app/enums/pagination-strategy.enum.js +7 -7
- package/esm2015/app/enums/row-type.enum.js +7 -7
- package/esm2015/app/enums/state.enum.js +11 -11
- package/esm2015/app/fs-list.module.js +244 -244
- package/esm2015/app/fs-list.providers.js +4 -4
- package/esm2015/app/interfaces/cellconfig.interface.js +2 -2
- package/esm2015/app/interfaces/column-config.interface.js +1 -1
- package/esm2015/app/interfaces/draggable-list.interface.js +2 -2
- package/esm2015/app/interfaces/external-params.interface.js +2 -2
- package/esm2015/app/interfaces/index.js +4 -4
- package/esm2015/app/interfaces/listconfig.interface.js +1 -1
- package/esm2015/app/interfaces/pagination.interface.js +2 -2
- package/esm2015/app/models/column-async-attribute.js +13 -13
- package/esm2015/app/models/column-attributes.js +130 -130
- package/esm2015/app/models/column.model.js +166 -166
- package/esm2015/app/models/row/base-row.js +23 -23
- package/esm2015/app/models/row/child-row.js +28 -28
- package/esm2015/app/models/row/group-footer-row.js +20 -20
- package/esm2015/app/models/row/group-row.js +44 -44
- package/esm2015/app/models/row/simple-row.js +10 -10
- package/esm2015/app/models/row-action.model.js +94 -94
- package/esm2015/app/models/row.js +80 -80
- package/esm2015/app/models/styleConfig.model.js +75 -75
- package/esm2015/app/pipes/action-label.js +16 -16
- package/esm2015/app/pipes/index.js +1 -1
- package/esm2015/app/services/group-expand-notifier.service.js +26 -26
- package/esm2015/firestitch-list.js +4 -4
- package/esm2015/public_api.js +45 -45
- package/fesm2015/firestitch-list.js +5710 -5690
- package/fesm2015/firestitch-list.js.map +1 -1
- package/firestitch-list.d.ts +5 -5
- package/package.json +1 -1
- package/public_api.d.ts +39 -39
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
import { Subject } from 'rxjs';
|
|
2
|
-
export class ActionsController {
|
|
3
|
-
constructor() {
|
|
4
|
-
this._actions = [];
|
|
5
|
-
this._destroy$ = new Subject();
|
|
6
|
-
}
|
|
7
|
-
get destroy$() {
|
|
8
|
-
return this._destroy$.asObservable();
|
|
9
|
-
}
|
|
10
|
-
get actions() {
|
|
11
|
-
return this._actions;
|
|
12
|
-
}
|
|
13
|
-
get hasActions() {
|
|
14
|
-
return this._actions.length > 0;
|
|
15
|
-
}
|
|
16
|
-
setFilterRef(ref) {
|
|
17
|
-
this._filterRef = ref;
|
|
18
|
-
}
|
|
19
|
-
setActions(actions) {
|
|
20
|
-
this.clearActions();
|
|
21
|
-
this._actions = actions;
|
|
22
|
-
if (this._reorderAction) {
|
|
23
|
-
this._actions.unshift(this._reorderAction);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
addReorderAction(action) {
|
|
27
|
-
const actionClickFn = action.click;
|
|
28
|
-
this._actions.unshift(action);
|
|
29
|
-
action.click = () => {
|
|
30
|
-
this._filterRef.updateActions([this._doneAction]);
|
|
31
|
-
this._filterRef.hideKeywordField();
|
|
32
|
-
this._filterRef.hideFiltersBtn();
|
|
33
|
-
actionClickFn(null);
|
|
34
|
-
};
|
|
35
|
-
this._reorderAction = action;
|
|
36
|
-
}
|
|
37
|
-
addReorderDoneAction(action) {
|
|
38
|
-
this._doneAction = action;
|
|
39
|
-
const actionClickFn = action.click;
|
|
40
|
-
this._doneAction.click = () => {
|
|
41
|
-
this._filterRef.updateActions(this._actions);
|
|
42
|
-
this._filterRef.showKeywordField();
|
|
43
|
-
this._filterRef.showFiltersBtn();
|
|
44
|
-
actionClickFn(null);
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
clearActions() {
|
|
48
|
-
this._actions = [];
|
|
49
|
-
this._destroy$.next();
|
|
50
|
-
}
|
|
51
|
-
updateDisabledState() {
|
|
52
|
-
this._filterRef.updateDisabledState();
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
export class ActionsController {
|
|
3
|
+
constructor() {
|
|
4
|
+
this._actions = [];
|
|
5
|
+
this._destroy$ = new Subject();
|
|
6
|
+
}
|
|
7
|
+
get destroy$() {
|
|
8
|
+
return this._destroy$.asObservable();
|
|
9
|
+
}
|
|
10
|
+
get actions() {
|
|
11
|
+
return this._actions;
|
|
12
|
+
}
|
|
13
|
+
get hasActions() {
|
|
14
|
+
return this._actions.length > 0;
|
|
15
|
+
}
|
|
16
|
+
setFilterRef(ref) {
|
|
17
|
+
this._filterRef = ref;
|
|
18
|
+
}
|
|
19
|
+
setActions(actions) {
|
|
20
|
+
this.clearActions();
|
|
21
|
+
this._actions = actions;
|
|
22
|
+
if (this._reorderAction) {
|
|
23
|
+
this._actions.unshift(this._reorderAction);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
addReorderAction(action) {
|
|
27
|
+
const actionClickFn = action.click;
|
|
28
|
+
this._actions.unshift(action);
|
|
29
|
+
action.click = () => {
|
|
30
|
+
this._filterRef.updateActions([this._doneAction]);
|
|
31
|
+
this._filterRef.hideKeywordField();
|
|
32
|
+
this._filterRef.hideFiltersBtn();
|
|
33
|
+
actionClickFn(null);
|
|
34
|
+
};
|
|
35
|
+
this._reorderAction = action;
|
|
36
|
+
}
|
|
37
|
+
addReorderDoneAction(action) {
|
|
38
|
+
this._doneAction = action;
|
|
39
|
+
const actionClickFn = action.click;
|
|
40
|
+
this._doneAction.click = () => {
|
|
41
|
+
this._filterRef.updateActions(this._actions);
|
|
42
|
+
this._filterRef.showKeywordField();
|
|
43
|
+
this._filterRef.showFiltersBtn();
|
|
44
|
+
actionClickFn(null);
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
clearActions() {
|
|
48
|
+
this._actions = [];
|
|
49
|
+
this._destroy$.next();
|
|
50
|
+
}
|
|
51
|
+
updateDisabledState() {
|
|
52
|
+
this._filterRef.updateDisabledState();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9jbGFzc2VzL2FjdGlvbnMtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTTNDLE1BQU0sT0FBTyxpQkFBaUI7SUFVNUI7UUFOUSxhQUFRLEdBQW1CLEVBQUUsQ0FBQztRQUk5QixjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV6QixDQUFDO0lBRWhCLElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sWUFBWSxDQUFDLEdBQW9CO1FBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxVQUFVLENBQUMsT0FBdUI7UUFDdkMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsTUFBb0I7UUFDMUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5QixNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRTtZQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2pDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUE7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztJQUMvQixDQUFDO0lBRU0sb0JBQW9CLENBQUMsTUFBb0I7UUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFDMUIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUVuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2pDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUE7SUFDSCxDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ3hDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnQGZpcmVzdGl0Y2gvZmlsdGVyJztcbmltcG9ydCB7IEZzTGlzdEFjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvbGlzdGNvbmZpZy5pbnRlcmZhY2UnO1xuXG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25zQ29udHJvbGxlciB7XG5cbiAgcHJpdmF0ZSBfZmlsdGVyUmVmOiBGaWx0ZXJDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfYWN0aW9uczogRnNMaXN0QWN0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBfcmVvcmRlckFjdGlvbjogRnNMaXN0QWN0aW9uO1xuICBwcml2YXRlIF9kb25lQWN0aW9uOiBGc0xpc3RBY3Rpb247XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgZ2V0IGRlc3Ryb3kkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9kZXN0cm95JC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aW9ucygpOiBGc0xpc3RBY3Rpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0FjdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRGaWx0ZXJSZWYocmVmOiBGaWx0ZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLl9maWx0ZXJSZWYgPSByZWY7XG4gIH1cblxuICBwdWJsaWMgc2V0QWN0aW9ucyhhY3Rpb25zOiBGc0xpc3RBY3Rpb25bXSkge1xuICAgIHRoaXMuY2xlYXJBY3Rpb25zKCk7XG4gICAgdGhpcy5fYWN0aW9ucyA9IGFjdGlvbnM7XG5cbiAgICBpZiAodGhpcy5fcmVvcmRlckFjdGlvbikge1xuICAgICAgdGhpcy5fYWN0aW9ucy51bnNoaWZ0KHRoaXMuX3Jlb3JkZXJBY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRSZW9yZGVyQWN0aW9uKGFjdGlvbjogRnNMaXN0QWN0aW9uKSB7XG4gICAgY29uc3QgYWN0aW9uQ2xpY2tGbiA9IGFjdGlvbi5jbGljaztcbiAgICB0aGlzLl9hY3Rpb25zLnVuc2hpZnQoYWN0aW9uKTtcblxuICAgIGFjdGlvbi5jbGljayA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2ZpbHRlclJlZi51cGRhdGVBY3Rpb25zKFt0aGlzLl9kb25lQWN0aW9uXSk7XG4gICAgICB0aGlzLl9maWx0ZXJSZWYuaGlkZUtleXdvcmRGaWVsZCgpO1xuICAgICAgdGhpcy5fZmlsdGVyUmVmLmhpZGVGaWx0ZXJzQnRuKCk7XG4gICAgICBhY3Rpb25DbGlja0ZuKG51bGwpO1xuICAgIH1cblxuICAgIHRoaXMuX3Jlb3JkZXJBY3Rpb24gPSBhY3Rpb247XG4gIH1cblxuICBwdWJsaWMgYWRkUmVvcmRlckRvbmVBY3Rpb24oYWN0aW9uOiBGc0xpc3RBY3Rpb24pIHtcbiAgICB0aGlzLl9kb25lQWN0aW9uID0gYWN0aW9uO1xuICAgIGNvbnN0IGFjdGlvbkNsaWNrRm4gPSBhY3Rpb24uY2xpY2s7XG5cbiAgICB0aGlzLl9kb25lQWN0aW9uLmNsaWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZmlsdGVyUmVmLnVwZGF0ZUFjdGlvbnModGhpcy5fYWN0aW9ucyk7XG4gICAgICB0aGlzLl9maWx0ZXJSZWYuc2hvd0tleXdvcmRGaWVsZCgpO1xuICAgICAgdGhpcy5fZmlsdGVyUmVmLnNob3dGaWx0ZXJzQnRuKCk7XG4gICAgICBhY3Rpb25DbGlja0ZuKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbGVhckFjdGlvbnMoKSB7XG4gICAgdGhpcy5fYWN0aW9ucyA9IFtdO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVEaXNhYmxlZFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZpbHRlclJlZi51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,206 +1,206 @@
|
|
|
1
|
-
import { isNumber } from 'lodash-es';
|
|
2
|
-
import { BehaviorSubject, merge, Subject } from 'rxjs';
|
|
3
|
-
import { skip, takeUntil, tap } from 'rxjs/operators';
|
|
4
|
-
import { Column } from '../models/column.model';
|
|
5
|
-
export class ColumnsController {
|
|
6
|
-
constructor() {
|
|
7
|
-
this._visibleColumns$ = new BehaviorSubject([]);
|
|
8
|
-
this._visibleColumnsShared$ = this._visibleColumns$.pipe();
|
|
9
|
-
this._theadClass = '';
|
|
10
|
-
this._isConfigured = false;
|
|
11
|
-
this._loadFnConfigured = false;
|
|
12
|
-
this._changeFnConfigured = false;
|
|
13
|
-
this._columnsFetched = false;
|
|
14
|
-
this._hasHeader = false;
|
|
15
|
-
this._hasFooter = false;
|
|
16
|
-
this._columns = [];
|
|
17
|
-
this._columnsUpdated$ = new Subject();
|
|
18
|
-
this._destroy$ = new Subject();
|
|
19
|
-
}
|
|
20
|
-
get columns() {
|
|
21
|
-
return this._columns.slice();
|
|
22
|
-
}
|
|
23
|
-
get visibleColumns() {
|
|
24
|
-
return this._visibleColumns$.getValue();
|
|
25
|
-
}
|
|
26
|
-
get visibleColumns$() {
|
|
27
|
-
return this._visibleColumnsShared$;
|
|
28
|
-
}
|
|
29
|
-
get columnsForDialog() {
|
|
30
|
-
const hasCustomTitle = !!this._customizeFieldTitleFn;
|
|
31
|
-
const hasCustomDisabledStatus = !!this._customizeFieldDisabledFn;
|
|
32
|
-
const hasCustomTooltip = !!this._columnTooltipFn;
|
|
33
|
-
return this._columns
|
|
34
|
-
.filter((column) => column.customize && !!column.name)
|
|
35
|
-
.map((column) => {
|
|
36
|
-
const title = hasCustomTitle
|
|
37
|
-
? this._customizeFieldTitleFn(column.name, column.title)
|
|
38
|
-
: column.name;
|
|
39
|
-
const disabled = hasCustomDisabledStatus
|
|
40
|
-
? this._customizeFieldDisabledFn(column.name)
|
|
41
|
-
: false;
|
|
42
|
-
const tooltip = hasCustomTooltip
|
|
43
|
-
? this._columnTooltipFn(column.name, column.visible, disabled)
|
|
44
|
-
: void 0;
|
|
45
|
-
return {
|
|
46
|
-
template: column.headerTemplate,
|
|
47
|
-
name: column.name,
|
|
48
|
-
show: column.visible,
|
|
49
|
-
title: title,
|
|
50
|
-
disabled: disabled,
|
|
51
|
-
tooltip: tooltip,
|
|
52
|
-
};
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
get columnsFetched() {
|
|
56
|
-
return this._columnsFetched;
|
|
57
|
-
}
|
|
58
|
-
get hasHeader() {
|
|
59
|
-
return this._hasHeader;
|
|
60
|
-
}
|
|
61
|
-
get hasFooter() {
|
|
62
|
-
return this._hasFooter;
|
|
63
|
-
}
|
|
64
|
-
get theadClass() {
|
|
65
|
-
return this._theadClass;
|
|
66
|
-
}
|
|
67
|
-
get configured() {
|
|
68
|
-
return this._isConfigured;
|
|
69
|
-
}
|
|
70
|
-
get loadFnConfigured() {
|
|
71
|
-
return this._loadFnConfigured;
|
|
72
|
-
}
|
|
73
|
-
get changeFnConfigured() {
|
|
74
|
-
return this._changeFnConfigured;
|
|
75
|
-
}
|
|
76
|
-
get changeFn() {
|
|
77
|
-
return this._changeFn;
|
|
78
|
-
}
|
|
79
|
-
get visibleColumnsNames() {
|
|
80
|
-
return this.visibleColumns
|
|
81
|
-
.map((column) => column.name)
|
|
82
|
-
.filter((name) => !!name);
|
|
83
|
-
}
|
|
84
|
-
setDefaults(defaults) {
|
|
85
|
-
this._defaultConfigs = defaults;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Set data from list config
|
|
89
|
-
* @param config
|
|
90
|
-
*/
|
|
91
|
-
initConfig(config) {
|
|
92
|
-
if (config) {
|
|
93
|
-
if (config.load) {
|
|
94
|
-
this._loadFn = config.load;
|
|
95
|
-
this._loadFnConfigured = true;
|
|
96
|
-
}
|
|
97
|
-
if (config.change) {
|
|
98
|
-
this._changeFn = config.change;
|
|
99
|
-
this._changeFnConfigured = true;
|
|
100
|
-
}
|
|
101
|
-
if (config.title) {
|
|
102
|
-
this._customizeFieldTitleFn = config.title;
|
|
103
|
-
}
|
|
104
|
-
if (config.disabled) {
|
|
105
|
-
this._customizeFieldDisabledFn = config.disabled;
|
|
106
|
-
}
|
|
107
|
-
if (config.tooltip) {
|
|
108
|
-
this._columnTooltipFn = config.tooltip;
|
|
109
|
-
}
|
|
110
|
-
this._isConfigured = true;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Base initialization for columns
|
|
115
|
-
* @param templates
|
|
116
|
-
*/
|
|
117
|
-
initializeColumns(templates) {
|
|
118
|
-
this._columns = [];
|
|
119
|
-
templates.forEach((column) => {
|
|
120
|
-
const col = new Column(column, this._defaultConfigs);
|
|
121
|
-
if (col.headerTemplate || col.title) {
|
|
122
|
-
this._hasHeader = true;
|
|
123
|
-
}
|
|
124
|
-
if (col.footerTemplate) {
|
|
125
|
-
this._hasFooter = true;
|
|
126
|
-
}
|
|
127
|
-
this._columns.push(col);
|
|
128
|
-
});
|
|
129
|
-
this._theadClass = this.hasHeader ? 'has-header' : '';
|
|
130
|
-
this._updateColspans('headerConfigs', 'headerColspanned');
|
|
131
|
-
this._updateColspans('groupHeaderConfigs', 'groupHeaderColspanned');
|
|
132
|
-
this._updateColspans('groupFooterConfigs', 'groupFooterColspanned');
|
|
133
|
-
this._updateColspans('cellConfigs', 'cellColspanned');
|
|
134
|
-
this._updateColspans('footerConfigs', 'footerColspanned');
|
|
135
|
-
this.updateVisibleColumns();
|
|
136
|
-
this._listenColumnVisibilityUpdates();
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Load visiblity config for columns from remote
|
|
140
|
-
*/
|
|
141
|
-
loadRemoteColumnConfigs() {
|
|
142
|
-
return this._loadFn()
|
|
143
|
-
.pipe(takeUntil(this._destroy$), tap((columnConfigs) => {
|
|
144
|
-
this._columnsFetched = true;
|
|
145
|
-
this.updateVisibilityForCols(columnConfigs);
|
|
146
|
-
}));
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Set visible columns based on current columns show status
|
|
150
|
-
*/
|
|
151
|
-
updateVisibleColumns() {
|
|
152
|
-
this._visibleColumns$.next(this._columns.filter((column) => column.visible) || []);
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Update visibility based on passed config
|
|
156
|
-
* @param columnsConfig
|
|
157
|
-
*/
|
|
158
|
-
updateVisibilityForCols(columnsConfig) {
|
|
159
|
-
columnsConfig.forEach((columnConfig) => {
|
|
160
|
-
const col = this._columns
|
|
161
|
-
.find((column) => column.name === columnConfig.name);
|
|
162
|
-
if (col) {
|
|
163
|
-
col.updateVisibility(columnConfig.show);
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
this.updateVisibleColumns();
|
|
167
|
-
}
|
|
168
|
-
destroy() {
|
|
169
|
-
this._destroy$.next();
|
|
170
|
-
this._destroy$.complete();
|
|
171
|
-
this._columnsUpdated$.complete();
|
|
172
|
-
this._columns = void 0;
|
|
173
|
-
this._visibleColumns$ = void 0;
|
|
174
|
-
this._defaultConfigs = void 0;
|
|
175
|
-
this._loadFn = void 0;
|
|
176
|
-
this._changeFn = void 0;
|
|
177
|
-
}
|
|
178
|
-
_listenColumnVisibilityUpdates() {
|
|
179
|
-
this._columnsUpdated$.next();
|
|
180
|
-
const columnsVisibility = this._columns.map((column) => {
|
|
181
|
-
return column.visible$.pipe(skip(1));
|
|
182
|
-
});
|
|
183
|
-
merge(...columnsVisibility)
|
|
184
|
-
.pipe(takeUntil(this._columnsUpdated$), takeUntil(this._destroy$))
|
|
185
|
-
.subscribe(() => {
|
|
186
|
-
this.updateVisibleColumns();
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
_updateColspans(config, updateFlag) {
|
|
190
|
-
this._columns.forEach((col, index) => {
|
|
191
|
-
if (col[config].colspan !== void 0) {
|
|
192
|
-
const spanTo = index + +col[config].colspan;
|
|
193
|
-
if (!isNumber(spanTo)) {
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
this._columns[index][updateFlag] = false;
|
|
197
|
-
for (let i = index + 1; i < spanTo; i++) {
|
|
198
|
-
if (this._columns[i]) {
|
|
199
|
-
this._columns[i][updateFlag] = true;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
}
|
|
1
|
+
import { isNumber } from 'lodash-es';
|
|
2
|
+
import { BehaviorSubject, merge, Subject } from 'rxjs';
|
|
3
|
+
import { skip, takeUntil, tap } from 'rxjs/operators';
|
|
4
|
+
import { Column } from '../models/column.model';
|
|
5
|
+
export class ColumnsController {
|
|
6
|
+
constructor() {
|
|
7
|
+
this._visibleColumns$ = new BehaviorSubject([]);
|
|
8
|
+
this._visibleColumnsShared$ = this._visibleColumns$.pipe();
|
|
9
|
+
this._theadClass = '';
|
|
10
|
+
this._isConfigured = false;
|
|
11
|
+
this._loadFnConfigured = false;
|
|
12
|
+
this._changeFnConfigured = false;
|
|
13
|
+
this._columnsFetched = false;
|
|
14
|
+
this._hasHeader = false;
|
|
15
|
+
this._hasFooter = false;
|
|
16
|
+
this._columns = [];
|
|
17
|
+
this._columnsUpdated$ = new Subject();
|
|
18
|
+
this._destroy$ = new Subject();
|
|
19
|
+
}
|
|
20
|
+
get columns() {
|
|
21
|
+
return this._columns.slice();
|
|
22
|
+
}
|
|
23
|
+
get visibleColumns() {
|
|
24
|
+
return this._visibleColumns$.getValue();
|
|
25
|
+
}
|
|
26
|
+
get visibleColumns$() {
|
|
27
|
+
return this._visibleColumnsShared$;
|
|
28
|
+
}
|
|
29
|
+
get columnsForDialog() {
|
|
30
|
+
const hasCustomTitle = !!this._customizeFieldTitleFn;
|
|
31
|
+
const hasCustomDisabledStatus = !!this._customizeFieldDisabledFn;
|
|
32
|
+
const hasCustomTooltip = !!this._columnTooltipFn;
|
|
33
|
+
return this._columns
|
|
34
|
+
.filter((column) => column.customize && !!column.name)
|
|
35
|
+
.map((column) => {
|
|
36
|
+
const title = hasCustomTitle
|
|
37
|
+
? this._customizeFieldTitleFn(column.name, column.title)
|
|
38
|
+
: column.name;
|
|
39
|
+
const disabled = hasCustomDisabledStatus
|
|
40
|
+
? this._customizeFieldDisabledFn(column.name)
|
|
41
|
+
: false;
|
|
42
|
+
const tooltip = hasCustomTooltip
|
|
43
|
+
? this._columnTooltipFn(column.name, column.visible, disabled)
|
|
44
|
+
: void 0;
|
|
45
|
+
return {
|
|
46
|
+
template: column.headerTemplate,
|
|
47
|
+
name: column.name,
|
|
48
|
+
show: column.visible,
|
|
49
|
+
title: title,
|
|
50
|
+
disabled: disabled,
|
|
51
|
+
tooltip: tooltip,
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
get columnsFetched() {
|
|
56
|
+
return this._columnsFetched;
|
|
57
|
+
}
|
|
58
|
+
get hasHeader() {
|
|
59
|
+
return this._hasHeader;
|
|
60
|
+
}
|
|
61
|
+
get hasFooter() {
|
|
62
|
+
return this._hasFooter;
|
|
63
|
+
}
|
|
64
|
+
get theadClass() {
|
|
65
|
+
return this._theadClass;
|
|
66
|
+
}
|
|
67
|
+
get configured() {
|
|
68
|
+
return this._isConfigured;
|
|
69
|
+
}
|
|
70
|
+
get loadFnConfigured() {
|
|
71
|
+
return this._loadFnConfigured;
|
|
72
|
+
}
|
|
73
|
+
get changeFnConfigured() {
|
|
74
|
+
return this._changeFnConfigured;
|
|
75
|
+
}
|
|
76
|
+
get changeFn() {
|
|
77
|
+
return this._changeFn;
|
|
78
|
+
}
|
|
79
|
+
get visibleColumnsNames() {
|
|
80
|
+
return this.visibleColumns
|
|
81
|
+
.map((column) => column.name)
|
|
82
|
+
.filter((name) => !!name);
|
|
83
|
+
}
|
|
84
|
+
setDefaults(defaults) {
|
|
85
|
+
this._defaultConfigs = defaults;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Set data from list config
|
|
89
|
+
* @param config
|
|
90
|
+
*/
|
|
91
|
+
initConfig(config) {
|
|
92
|
+
if (config) {
|
|
93
|
+
if (config.load) {
|
|
94
|
+
this._loadFn = config.load;
|
|
95
|
+
this._loadFnConfigured = true;
|
|
96
|
+
}
|
|
97
|
+
if (config.change) {
|
|
98
|
+
this._changeFn = config.change;
|
|
99
|
+
this._changeFnConfigured = true;
|
|
100
|
+
}
|
|
101
|
+
if (config.title) {
|
|
102
|
+
this._customizeFieldTitleFn = config.title;
|
|
103
|
+
}
|
|
104
|
+
if (config.disabled) {
|
|
105
|
+
this._customizeFieldDisabledFn = config.disabled;
|
|
106
|
+
}
|
|
107
|
+
if (config.tooltip) {
|
|
108
|
+
this._columnTooltipFn = config.tooltip;
|
|
109
|
+
}
|
|
110
|
+
this._isConfigured = true;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Base initialization for columns
|
|
115
|
+
* @param templates
|
|
116
|
+
*/
|
|
117
|
+
initializeColumns(templates) {
|
|
118
|
+
this._columns = [];
|
|
119
|
+
templates.forEach((column) => {
|
|
120
|
+
const col = new Column(column, this._defaultConfigs);
|
|
121
|
+
if (col.headerTemplate || col.title) {
|
|
122
|
+
this._hasHeader = true;
|
|
123
|
+
}
|
|
124
|
+
if (col.footerTemplate) {
|
|
125
|
+
this._hasFooter = true;
|
|
126
|
+
}
|
|
127
|
+
this._columns.push(col);
|
|
128
|
+
});
|
|
129
|
+
this._theadClass = this.hasHeader ? 'has-header' : '';
|
|
130
|
+
this._updateColspans('headerConfigs', 'headerColspanned');
|
|
131
|
+
this._updateColspans('groupHeaderConfigs', 'groupHeaderColspanned');
|
|
132
|
+
this._updateColspans('groupFooterConfigs', 'groupFooterColspanned');
|
|
133
|
+
this._updateColspans('cellConfigs', 'cellColspanned');
|
|
134
|
+
this._updateColspans('footerConfigs', 'footerColspanned');
|
|
135
|
+
this.updateVisibleColumns();
|
|
136
|
+
this._listenColumnVisibilityUpdates();
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Load visiblity config for columns from remote
|
|
140
|
+
*/
|
|
141
|
+
loadRemoteColumnConfigs() {
|
|
142
|
+
return this._loadFn()
|
|
143
|
+
.pipe(takeUntil(this._destroy$), tap((columnConfigs) => {
|
|
144
|
+
this._columnsFetched = true;
|
|
145
|
+
this.updateVisibilityForCols(columnConfigs);
|
|
146
|
+
}));
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Set visible columns based on current columns show status
|
|
150
|
+
*/
|
|
151
|
+
updateVisibleColumns() {
|
|
152
|
+
this._visibleColumns$.next(this._columns.filter((column) => column.visible) || []);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Update visibility based on passed config
|
|
156
|
+
* @param columnsConfig
|
|
157
|
+
*/
|
|
158
|
+
updateVisibilityForCols(columnsConfig) {
|
|
159
|
+
columnsConfig.forEach((columnConfig) => {
|
|
160
|
+
const col = this._columns
|
|
161
|
+
.find((column) => column.name === columnConfig.name);
|
|
162
|
+
if (col) {
|
|
163
|
+
col.updateVisibility(columnConfig.show);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
this.updateVisibleColumns();
|
|
167
|
+
}
|
|
168
|
+
destroy() {
|
|
169
|
+
this._destroy$.next();
|
|
170
|
+
this._destroy$.complete();
|
|
171
|
+
this._columnsUpdated$.complete();
|
|
172
|
+
this._columns = void 0;
|
|
173
|
+
this._visibleColumns$ = void 0;
|
|
174
|
+
this._defaultConfigs = void 0;
|
|
175
|
+
this._loadFn = void 0;
|
|
176
|
+
this._changeFn = void 0;
|
|
177
|
+
}
|
|
178
|
+
_listenColumnVisibilityUpdates() {
|
|
179
|
+
this._columnsUpdated$.next();
|
|
180
|
+
const columnsVisibility = this._columns.map((column) => {
|
|
181
|
+
return column.visible$.pipe(skip(1));
|
|
182
|
+
});
|
|
183
|
+
merge(...columnsVisibility)
|
|
184
|
+
.pipe(takeUntil(this._columnsUpdated$), takeUntil(this._destroy$))
|
|
185
|
+
.subscribe(() => {
|
|
186
|
+
this.updateVisibleColumns();
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
_updateColspans(config, updateFlag) {
|
|
190
|
+
this._columns.forEach((col, index) => {
|
|
191
|
+
if (col[config].colspan !== void 0) {
|
|
192
|
+
const spanTo = index + +col[config].colspan;
|
|
193
|
+
if (!isNumber(spanTo)) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
this._columns[index][updateFlag] = false;
|
|
197
|
+
for (let i = index + 1; i < spanTo; i++) {
|
|
198
|
+
if (this._columns[i]) {
|
|
199
|
+
this._columns[i][updateFlag] = true;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
206
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9jbGFzc2VzL2NvbHVtbnMtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFXaEQsTUFBTSxPQUFPLGlCQUFpQjtJQXVCNUI7UUFyQlEscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFDckQsMkJBQXNCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RELGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBT2pCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGFBQVEsR0FBYSxFQUFFLENBQUM7UUFHeEIscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN2QyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV6QixDQUFDO0lBRWhCLElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxnQkFB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fSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2tpcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IENvbHVtbiB9IGZyb20gJy4uL21vZGVscy9jb2x1bW4ubW9kZWwnO1xuaW1wb3J0IHtcbiAgRnNMaXN0Q29sdW1uQ2hhbmdlRm4sXG4gIEZzTGlzdENvbHVtbkNvbmZpZyxcbiAgRnNMaXN0Q29sdW1uRGlzYWJsZWRGbixcbiAgRnNMaXN0Q29sdW1uTG9hZEZuLFxuICBGc0xpc3RDb2x1bW5UaXRsZUZuLFxuICBGc0xpc3RDb2x1bW5Ub29sdGlwRm4sXG59IGZyb20gJy4uL2ludGVyZmFjZXMvbGlzdGNvbmZpZy5pbnRlcmZhY2UnO1xuXG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5zQ29udHJvbGxlciB7XG5cbiAgcHJpdmF0ZSBfdmlzaWJsZUNvbHVtbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5bXT4oW10pO1xuICBwcml2YXRlIF92aXNpYmxlQ29sdW1uc1NoYXJlZCQgPSB0aGlzLl92aXNpYmxlQ29sdW1ucyQucGlwZSgpO1xuICBwcml2YXRlIF90aGVhZENsYXNzID0gJyc7XG4gIHByaXZhdGUgX2xvYWRGbjogRnNMaXN0Q29sdW1uTG9hZEZuO1xuICBwcml2YXRlIF9jaGFuZ2VGbjogRnNMaXN0Q29sdW1uQ2hhbmdlRm47XG4gIHByaXZhdGUgX2N1c3RvbWl6ZUZpZWxkVGl0bGVGbjogRnNMaXN0Q29sdW1uVGl0bGVGbjtcbiAgcHJpdmF0ZSBfY3VzdG9taXplRmllbGREaXNhYmxlZEZuOiBGc0xpc3RDb2x1bW5EaXNhYmxlZEZuO1xuICBwcml2YXRlIF9jb2x1bW5Ub29sdGlwRm46IEZzTGlzdENvbHVtblRvb2x0aXBGbjtcblxuICBwcml2YXRlIF9pc0NvbmZpZ3VyZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbG9hZEZuQ29uZmlndXJlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9jaGFuZ2VGbkNvbmZpZ3VyZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY29sdW1uc0ZldGNoZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaGFzSGVhZGVyID0gZmFsc2U7XG4gIHByaXZhdGUgX2hhc0Zvb3RlciA9IGZhbHNlO1xuICBwcml2YXRlIF9jb2x1bW5zOiBDb2x1bW5bXSA9IFtdO1xuICBwcml2YXRlIF9kZWZhdWx0Q29uZmlncztcblxuICBwcml2YXRlIF9jb2x1bW5zVXBkYXRlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHB1YmxpYyBnZXQgY29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucy5zbGljZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCB2aXNpYmxlQ29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGVDb2x1bW5zJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCB2aXNpYmxlQ29sdW1ucyQoKTogT2JzZXJ2YWJsZTxDb2x1bW5bXT4ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlQ29sdW1uc1NoYXJlZCQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbHVtbnNGb3JEaWFsb2coKSB7XG4gICAgY29uc3QgaGFzQ3VzdG9tVGl0bGUgPSAhIXRoaXMuX2N1c3RvbWl6ZUZpZWxkVGl0bGVGbjtcbiAgICBjb25zdCBoYXNDdXN0b21EaXNhYmxlZFN0YXR1cyA9ICEhdGhpcy5fY3VzdG9taXplRmllbGREaXNhYmxlZEZuO1xuICAgIGNvbnN0IGhhc0N1c3RvbVRvb2x0aXAgPSAhIXRoaXMuX2NvbHVtblRvb2x0aXBGbjtcblxuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zXG4gICAgICAuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5jdXN0b21pemUgJiYgISFjb2x1bW4ubmFtZSlcbiAgICAgIC5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCB0aXRsZSA9IGhhc0N1c3RvbVRpdGxlXG4gICAgICAgICAgPyB0aGlzLl9jdXN0b21pemVGaWVsZFRpdGxlRm4oY29sdW1uLm5hbWUsIGNvbHVtbi50aXRsZSlcbiAgICAgICAgICA6IGNvbHVtbi5uYW1lO1xuXG4gICAgICAgIGNvbnN0IGRpc2FibGVkID0gaGFzQ3VzdG9tRGlzYWJsZWRTdGF0dXNcbiAgICAgICAgICA/IHRoaXMuX2N1c3RvbWl6ZUZpZWxkRGlzYWJsZWRGbihjb2x1bW4ubmFtZSlcbiAgICAgICAgICA6IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSBoYXNDdXN0b21Ub29sdGlwXG4gICAgICAgICAgPyB0aGlzLl9jb2x1bW5Ub29sdGlwRm4oY29sdW1uLm5hbWUsIGNvbHVtbi52aXNpYmxlLCBkaXNhYmxlZClcbiAgICAgICAgICA6IHZvaWQgMDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRlbXBsYXRlOiBjb2x1bW4uaGVhZGVyVGVtcGxhdGUsXG4gICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgc2hvdzogY29sdW1uLnZpc2libGUsXG4gICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICB0b29sdGlwOiB0b29sdGlwLFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29sdW1uc0ZldGNoZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnNGZXRjaGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNIZWFkZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0hlYWRlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzRm9vdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9oYXNGb290ZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRoZWFkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RoZWFkQ2xhc3M7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbmZpZ3VyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQ29uZmlndXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9hZEZuQ29uZmlndXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZEZuQ29uZmlndXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hhbmdlRm5Db25maWd1cmVkKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VGbkNvbmZpZ3VyZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNoYW5nZUZuKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VGbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUNvbHVtbnNOYW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1uc1xuICAgICAgLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSlcbiAgICAgIC5maWx0ZXIoKG5hbWUpID0+ICEhbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0RGVmYXVsdHMoZGVmYXVsdHMpIHtcbiAgICB0aGlzLl9kZWZhdWx0Q29uZmlncyA9IGRlZmF1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkYXRhIGZyb20gbGlzdCBjb25maWdcbiAgICogQHBhcmFtIGNvbmZpZ1xuICAgKi9cbiAgcHVibGljIGluaXRDb25maWcoY29uZmlnOiBGc0xpc3RDb2x1bW5Db25maWcpIHtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBpZiAoY29uZmlnLmxvYWQpIHtcbiAgICAgICAgdGhpcy5fbG9hZEZuID0gY29uZmlnLmxvYWQ7XG4gICAgICAgIHRoaXMuX2xvYWRGbkNvbmZpZ3VyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLmNoYW5nZSkge1xuICAgICAgICB0aGlzLl9jaGFuZ2VGbiA9IGNvbmZpZy5jaGFuZ2U7XG4gICAgICAgIHRoaXMuX2NoYW5nZUZuQ29uZmlndXJlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcudGl0bGUpIHtcbiAgICAgICAgdGhpcy5fY3VzdG9taXplRmllbGRUaXRsZUZuID0gY29uZmlnLnRpdGxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuX2N1c3RvbWl6ZUZpZWxkRGlzYWJsZWRGbiA9IGNvbmZpZy5kaXNhYmxlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy50b29sdGlwKSB7XG4gICAgICAgIHRoaXMuX2NvbHVtblRvb2x0aXBGbiA9IGNvbmZpZy50b29sdGlwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc0NvbmZpZ3VyZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCYXNlIGluaXRpYWxpemF0aW9uIGZvciBjb2x1bW5zXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZXNcbiAgICovXG4gIHB1YmxpYyBpbml0aWFsaXplQ29sdW1ucyh0ZW1wbGF0ZXMpIHtcbiAgICB0aGlzLl9jb2x1bW5zID0gW107XG5cbiAgICB0ZW1wbGF0ZXMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBjb25zdCBjb2wgPSBuZXcgQ29sdW1uKGNvbHVtbiwgdGhpcy5fZGVmYXVsdENvbmZpZ3MpO1xuXG5cbiAgICAgIGlmIChjb2wuaGVhZGVyVGVtcGxhdGUgfHwgY29sLnRpdGxlKSB7XG4gICAgICAgIHRoaXMuX2hhc0hlYWRlciA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoY29sLmZvb3RlclRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMuX2hhc0Zvb3RlciA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2wpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fdGhlYWRDbGFzcyA9IHRoaXMuaGFzSGVhZGVyID8gJ2hhcy1oZWFkZXInIDogJyc7XG5cbiAgICB0aGlzLl91cGRhdGVDb2xzcGFucygnaGVhZGVyQ29uZmlncycsICdoZWFkZXJDb2xzcGFubmVkJyk7XG4gICAgdGhpcy5fdXBkYXRlQ29sc3BhbnMoJ2dyb3VwSGVhZGVyQ29uZmlncycsICdncm91cEhlYWRlckNvbHNwYW5uZWQnKTtcbiAgICB0aGlzLl91cGRhdGVDb2xzcGFucygnZ3JvdXBGb290ZXJDb25maWdzJywgJ2dyb3VwRm9vdGVyQ29sc3Bhbm5lZCcpO1xuICAgIHRoaXMuX3VwZGF0ZUNvbHNwYW5zKCdjZWxsQ29uZmlncycsICdjZWxsQ29sc3Bhbm5lZCcpO1xuICAgIHRoaXMuX3VwZGF0ZUNvbHNwYW5zKCdmb290ZXJDb25maWdzJywgJ2Zvb3RlckNvbHNwYW5uZWQnKTtcblxuICAgIHRoaXMudXBkYXRlVmlzaWJsZUNvbHVtbnMoKTtcbiAgICB0aGlzLl9saXN0ZW5Db2x1bW5WaXNpYmlsaXR5VXBkYXRlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdmlzaWJsaXR5IGNvbmZpZyBmb3IgY29sdW1ucyBmcm9tIHJlbW90ZVxuICAgKi9cbiAgcHVibGljIGxvYWRSZW1vdGVDb2x1bW5Db25maWdzKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2FkRm4oKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRhcCgoY29sdW1uQ29uZmlncykgPT4ge1xuICAgICAgICAgIHRoaXMuX2NvbHVtbnNGZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZpc2liaWxpdHlGb3JDb2xzKGNvbHVtbkNvbmZpZ3MpO1xuICAgICAgICB9KVxuICAgICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB2aXNpYmxlIGNvbHVtbnMgYmFzZWQgb24gY3VycmVudCBjb2x1bW5zIHNob3cgc3RhdHVzXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlVmlzaWJsZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5fdmlzaWJsZUNvbHVtbnMkLm5leHQoXG4gICAgICB0aGlzLl9jb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4udmlzaWJsZSkgfHwgW11cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB2aXNpYmlsaXR5IGJhc2VkIG9uIHBhc3NlZCBjb25maWdcbiAgICogQHBhcmFtIGNvbHVtbnNDb25maWdcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVWaXNpYmlsaXR5Rm9yQ29scyhjb2x1bW5zQ29uZmlnKSB7XG4gICAgY29sdW1uc0NvbmZpZy5mb3JFYWNoKChjb2x1bW5Db25maWcpID0+IHtcbiAgICAgIGNvbnN0IGNvbCA9IHRoaXMuX2NvbHVtbnNcbiAgICAgICAgLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IGNvbHVtbkNvbmZpZy5uYW1lKTtcblxuICAgICAgaWYgKGNvbCkge1xuICAgICAgICBjb2wudXBkYXRlVmlzaWJpbGl0eShjb2x1bW5Db25maWcuc2hvdyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVDb2x1bW5zKCk7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9jb2x1bW5zVXBkYXRlZCQuY29tcGxldGUoKTtcblxuICAgIHRoaXMuX2NvbHVtbnMgPSB2b2lkIDA7XG4gICAgdGhpcy5fdmlzaWJsZUNvbHVtbnMkID0gdm9pZCAwO1xuICAgIHRoaXMuX2RlZmF1bHRDb25maWdzID0gdm9pZCAwO1xuXG4gICAgdGhpcy5fbG9hZEZuID0gdm9pZCAwO1xuICAgIHRoaXMuX2NoYW5nZUZuID0gdm9pZCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZXMoKSB7XG4gICAgdGhpcy5fY29sdW1uc1VwZGF0ZWQkLm5leHQoKTtcblxuICAgIGNvbnN0IGNvbHVtbnNWaXNpYmlsaXR5ID0gdGhpcy5fY29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgcmV0dXJuIGNvbHVtbi52aXNpYmxlJC5waXBlKHNraXAoMSkpXG4gICAgfSk7XG5cbiAgICBtZXJnZSguLi5jb2x1bW5zVmlzaWJpbGl0eSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fY29sdW1uc1VwZGF0ZWQkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVDb2x1bW5zKCk7XG4gICAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlQ29sc3BhbnMoY29uZmlnLCB1cGRhdGVGbGFnKSB7XG4gICAgdGhpcy5fY29sdW1ucy5mb3JFYWNoKChjb2wsIGluZGV4KSA9PiB7XG5cbiAgICAgIGlmIChjb2xbY29uZmlnXS5jb2xzcGFuICE9PSB2b2lkIDApIHtcbiAgICAgICAgY29uc3Qgc3BhblRvID0gaW5kZXggKyArY29sW2NvbmZpZ10uY29sc3BhbjtcblxuICAgICAgICBpZiAoIWlzTnVtYmVyKHNwYW5UbykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29sdW1uc1tpbmRleF1bdXBkYXRlRmxhZ10gPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXggKyAxOyBpIDwgc3BhblRvOyBpKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5fY29sdW1uc1tpXSkge1xuICAgICAgICAgICAgdGhpcy5fY29sdW1uc1tpXVt1cGRhdGVGbGFnXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG59XG4iXX0=
|