@firestitch/list 9.9.7 → 9.9.11
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 +65 -65
- package/app/classes/data-controller.d.ts +89 -89
- 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 +166 -166
- package/app/classes/pagination-controller.d.ts +185 -185
- package/app/classes/persistance-controller.d.ts +7 -7
- package/app/classes/reorder-controller.d.ts +56 -56
- package/app/classes/selection-controller.d.ts +141 -141
- package/app/classes/sorting-controller.d.ts +64 -63
- package/app/components/body/body.component.d.ts +29 -29
- package/app/components/body/row/actions/actions.component.d.ts +32 -32
- package/app/components/body/row/cell/cell.component.d.ts +20 -20
- package/app/components/body/row/inline-action/inline-action.component.d.ts +10 -10
- package/app/components/body/row/row.component.d.ts +66 -66
- package/app/components/customize-cols/customize-cols.component.d.ts +14 -14
- package/app/components/footer/footer-row/footer-cell/footer-cell.component.d.ts +4 -4
- package/app/components/footer/footer-row/footer-row.component.d.ts +8 -8
- package/app/components/footer/footer.component.d.ts +8 -8
- package/app/components/head/head-cell/head-cell.component.d.ts +11 -11
- package/app/components/head/head.component.d.ts +40 -40
- package/app/components/list/list.component.d.ts +108 -108
- package/app/components/loader/loader.component.d.ts +11 -11
- package/app/components/manage-saved-filters/manage-saved-filters.component.d.ts +10 -10
- package/app/components/pagination/pagination.component.d.ts +11 -11
- package/app/components/saved-filters/saved-filters.component.d.ts +12 -12
- package/app/components/status/status.component.d.ts +18 -18
- package/app/directives/cell/cell.directive.d.ts +5 -5
- package/app/directives/column/column.directive.d.ts +24 -23
- package/app/directives/draggable-list/draggable-list.directive.d.ts +77 -77
- package/app/directives/draggable-row/draggable-row.directive.d.ts +18 -18
- package/app/directives/empty-state/empty-state.directive.d.ts +2 -2
- package/app/directives/footer/footer.directive.d.ts +5 -5
- package/app/directives/group-cell/group-cell.directive.d.ts +3 -3
- package/app/directives/group-expand-trigger/group-expand-trigger.directive.d.ts +7 -7
- package/app/directives/header/header.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 +5 -5
- package/app/enums/state.enum.d.ts +9 -9
- package/app/fs-list.module.d.ts +6 -6
- package/app/fs-list.providers.d.ts +3 -3
- package/app/interfaces/cellconfig.interface.d.ts +5 -5
- 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 +220 -220
- package/app/interfaces/pagination.interface.d.ts +13 -13
- package/app/models/column.model.d.ts +48 -46
- 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-row.d.ts +14 -14
- 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 +28 -28
- package/app/models/styleConfig.model.d.ts +31 -31
- package/app/services/group-expand-notifier.service.d.ts +8 -8
- package/bundles/firestitch-list.umd.js +5814 -5784
- package/bundles/firestitch-list.umd.js.map +1 -1
- package/bundles/firestitch-list.umd.min.js +1 -1
- package/bundles/firestitch-list.umd.min.js.map +1 -1
- package/esm2015/app/classes/actions-controller.js +55 -55
- package/esm2015/app/classes/columns-controller.js +185 -185
- package/esm2015/app/classes/data-controller.js +317 -311
- package/esm2015/app/classes/external-params-controller.js +155 -155
- package/esm2015/app/classes/index.js +3 -3
- package/esm2015/app/classes/list-controller.js +730 -730
- package/esm2015/app/classes/pagination-controller.js +461 -461
- package/esm2015/app/classes/persistance-controller.js +22 -22
- package/esm2015/app/classes/reorder-controller.js +161 -161
- package/esm2015/app/classes/selection-controller.js +444 -444
- package/esm2015/app/classes/sorting-controller.js +181 -172
- package/esm2015/app/components/body/body.component.js +103 -103
- package/esm2015/app/components/body/row/actions/actions.component.js +110 -110
- package/esm2015/app/components/body/row/cell/cell.component.js +93 -93
- package/esm2015/app/components/body/row/inline-action/inline-action.component.js +34 -34
- package/esm2015/app/components/body/row/row.component.js +267 -267
- package/esm2015/app/components/customize-cols/customize-cols.component.js +67 -67
- package/esm2015/app/components/footer/footer-row/footer-cell/footer-cell.component.js +18 -18
- package/esm2015/app/components/footer/footer-row/footer-row.component.js +35 -35
- package/esm2015/app/components/footer/footer.component.js +30 -30
- package/esm2015/app/components/head/head-cell/head-cell.component.js +35 -35
- package/esm2015/app/components/head/head.component.js +99 -99
- package/esm2015/app/components/list/list.component.js +357 -357
- package/esm2015/app/components/loader/loader.component.js +46 -46
- package/esm2015/app/components/manage-saved-filters/manage-saved-filters.component.js +75 -75
- package/esm2015/app/components/pagination/pagination.component.js +44 -44
- package/esm2015/app/components/saved-filters/saved-filters.component.js +36 -36
- package/esm2015/app/components/status/status.component.js +77 -77
- package/esm2015/app/directives/cell/cell.directive.js +21 -21
- package/esm2015/app/directives/column/column.directive.js +97 -93
- package/esm2015/app/directives/draggable-list/draggable-list.directive.js +264 -264
- package/esm2015/app/directives/draggable-row/draggable-row.directive.js +81 -81
- package/esm2015/app/directives/empty-state/empty-state.directive.js +11 -11
- package/esm2015/app/directives/footer/footer.directive.js +21 -21
- package/esm2015/app/directives/group-cell/group-cell.directive.js +12 -12
- package/esm2015/app/directives/group-expand-trigger/group-expand-trigger.directive.js +32 -32
- package/esm2015/app/directives/header/header.directive.js +21 -21
- 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 +140 -140
- package/esm2015/app/fs-list.providers.js +4 -4
- package/esm2015/app/interfaces/cellconfig.interface.js +1 -1
- package/esm2015/app/interfaces/draggable-list.interface.js +1 -1
- package/esm2015/app/interfaces/external-params.interface.js +1 -1
- package/esm2015/app/interfaces/index.js +1 -1
- package/esm2015/app/interfaces/listconfig.interface.js +1 -1
- package/esm2015/app/interfaces/pagination.interface.js +1 -1
- package/esm2015/app/models/column.model.js +185 -175
- 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-row.js +41 -41
- package/esm2015/app/models/row/simple-row.js +10 -10
- package/esm2015/app/models/row-action.model.js +115 -115
- package/esm2015/app/models/row.js +77 -77
- package/esm2015/app/models/styleConfig.model.js +86 -86
- package/esm2015/app/services/group-expand-notifier.service.js +25 -25
- package/esm2015/firestitch-list.js +17 -17
- package/esm2015/public_api.js +40 -40
- package/esm5/app/classes/actions-controller.js +71 -71
- package/esm5/app/classes/columns-controller.js +236 -236
- package/esm5/app/classes/data-controller.js +373 -365
- package/esm5/app/classes/external-params-controller.js +185 -185
- package/esm5/app/classes/index.js +3 -3
- package/esm5/app/classes/list-controller.js +749 -749
- package/esm5/app/classes/pagination-controller.js +568 -568
- package/esm5/app/classes/persistance-controller.js +25 -25
- package/esm5/app/classes/reorder-controller.js +195 -195
- package/esm5/app/classes/selection-controller.js +465 -465
- package/esm5/app/classes/sorting-controller.js +204 -195
- package/esm5/app/components/body/body.component.js +104 -104
- package/esm5/app/components/body/row/actions/actions.component.js +113 -113
- package/esm5/app/components/body/row/cell/cell.component.js +95 -95
- package/esm5/app/components/body/row/inline-action/inline-action.component.js +35 -35
- package/esm5/app/components/body/row/row.component.js +295 -295
- package/esm5/app/components/customize-cols/customize-cols.component.js +69 -69
- package/esm5/app/components/footer/footer-row/footer-cell/footer-cell.component.js +20 -20
- package/esm5/app/components/footer/footer-row/footer-row.component.js +38 -38
- package/esm5/app/components/footer/footer.component.js +31 -31
- package/esm5/app/components/head/head-cell/head-cell.component.js +38 -38
- package/esm5/app/components/head/head.component.js +106 -106
- package/esm5/app/components/list/list.component.js +391 -391
- package/esm5/app/components/loader/loader.component.js +47 -47
- package/esm5/app/components/manage-saved-filters/manage-saved-filters.component.js +81 -81
- package/esm5/app/components/pagination/pagination.component.js +46 -46
- package/esm5/app/components/saved-filters/saved-filters.component.js +41 -41
- package/esm5/app/components/status/status.component.js +79 -79
- package/esm5/app/directives/cell/cell.directive.js +24 -24
- package/esm5/app/directives/column/column.directive.js +98 -94
- package/esm5/app/directives/draggable-list/draggable-list.directive.js +281 -281
- package/esm5/app/directives/draggable-row/draggable-row.directive.js +83 -83
- package/esm5/app/directives/empty-state/empty-state.directive.js +14 -14
- package/esm5/app/directives/footer/footer.directive.js +24 -24
- package/esm5/app/directives/group-cell/group-cell.directive.js +17 -17
- package/esm5/app/directives/group-expand-trigger/group-expand-trigger.directive.js +33 -33
- package/esm5/app/directives/header/header.directive.js +24 -24
- package/esm5/app/enums/button-type.enum.js +9 -9
- package/esm5/app/enums/page-change-type.enum.js +6 -6
- package/esm5/app/enums/pagination-strategy.enum.js +7 -7
- package/esm5/app/enums/row-type.enum.js +7 -7
- package/esm5/app/enums/state.enum.js +11 -11
- package/esm5/app/fs-list.module.js +145 -145
- package/esm5/app/fs-list.providers.js +4 -4
- package/esm5/app/interfaces/cellconfig.interface.js +1 -1
- package/esm5/app/interfaces/draggable-list.interface.js +1 -1
- package/esm5/app/interfaces/external-params.interface.js +1 -1
- package/esm5/app/interfaces/index.js +1 -1
- package/esm5/app/interfaces/listconfig.interface.js +1 -1
- package/esm5/app/interfaces/pagination.interface.js +1 -1
- package/esm5/app/models/column.model.js +204 -194
- package/esm5/app/models/row/base-row.js +35 -35
- package/esm5/app/models/row/child-row.js +43 -43
- package/esm5/app/models/row/group-row.js +61 -61
- package/esm5/app/models/row/simple-row.js +15 -15
- package/esm5/app/models/row-action.model.js +126 -126
- package/esm5/app/models/row.js +126 -126
- package/esm5/app/models/styleConfig.model.js +91 -91
- package/esm5/app/services/group-expand-notifier.service.js +30 -30
- package/esm5/firestitch-list.js +17 -17
- package/esm5/public_api.js +40 -40
- package/fesm2015/firestitch-list.js +5174 -5146
- package/fesm2015/firestitch-list.js.map +1 -1
- package/fesm5/firestitch-list.js +5799 -5769
- package/fesm5/firestitch-list.js.map +1 -1
- package/firestitch-list.d.ts +18 -18
- package/firestitch-list.metadata.json +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +33 -33
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpcmVzdGl0Y2gvbGlzdC8iLCJzb3VyY2VzIjpbImFwcC9jbGFzc2VzL2FjdGlvbnMtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTTNDLE1BQU0sT0FBTyxpQkFBaUI7SUFVNUI7UUFOUSxhQUFRLEdBQW1CLEVBQUUsQ0FBQztRQUk5QixjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV6QixDQUFDO0lBRWhCLElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sWUFBWSxDQUFDLEdBQW9CO1FBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxVQUFVLENBQUMsT0FBdUI7UUFDdkMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsTUFBb0I7UUFDMUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5QixNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRTtZQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2pDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUE7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztJQUMvQixDQUFDO0lBRU0sb0JBQW9CLENBQUMsTUFBb0I7UUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFDMUIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUVuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2pDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUE7SUFDSCxDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ3hDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnQGZpcmVzdGl0Y2gvZmlsdGVyJztcbmltcG9ydCB7IEZzTGlzdEFjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvbGlzdGNvbmZpZy5pbnRlcmZhY2UnO1xuXG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25zQ29udHJvbGxlciB7XG5cbiAgcHJpdmF0ZSBfZmlsdGVyUmVmOiBGaWx0ZXJDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfYWN0aW9uczogRnNMaXN0QWN0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBfcmVvcmRlckFjdGlvbjogRnNMaXN0QWN0aW9uO1xuICBwcml2YXRlIF9kb25lQWN0aW9uOiBGc0xpc3RBY3Rpb247XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgZ2V0IGRlc3Ryb3kkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9kZXN0cm95JC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aW9ucygpOiBGc0xpc3RBY3Rpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0FjdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRGaWx0ZXJSZWYocmVmOiBGaWx0ZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLl9maWx0ZXJSZWYgPSByZWY7XG4gIH1cblxuICBwdWJsaWMgc2V0QWN0aW9ucyhhY3Rpb25zOiBGc0xpc3RBY3Rpb25bXSkge1xuICAgIHRoaXMuY2xlYXJBY3Rpb25zKCk7XG4gICAgdGhpcy5fYWN0aW9ucyA9IGFjdGlvbnM7XG5cbiAgICBpZiAodGhpcy5fcmVvcmRlckFjdGlvbikge1xuICAgICAgdGhpcy5fYWN0aW9ucy51bnNoaWZ0KHRoaXMuX3Jlb3JkZXJBY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRSZW9yZGVyQWN0aW9uKGFjdGlvbjogRnNMaXN0QWN0aW9uKSB7XG4gICAgY29uc3QgYWN0aW9uQ2xpY2tGbiA9IGFjdGlvbi5jbGljaztcbiAgICB0aGlzLl9hY3Rpb25zLnVuc2hpZnQoYWN0aW9uKTtcblxuICAgIGFjdGlvbi5jbGljayA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2ZpbHRlclJlZi51cGRhdGVBY3Rpb25zKFt0aGlzLl9kb25lQWN0aW9uXSk7XG4gICAgICB0aGlzLl9maWx0ZXJSZWYuaGlkZUtleXdvcmRGaWVsZCgpO1xuICAgICAgdGhpcy5fZmlsdGVyUmVmLmhpZGVGaWx0ZXJzQnRuKCk7XG4gICAgICBhY3Rpb25DbGlja0ZuKG51bGwpO1xuICAgIH1cblxuICAgIHRoaXMuX3Jlb3JkZXJBY3Rpb24gPSBhY3Rpb247XG4gIH1cblxuICBwdWJsaWMgYWRkUmVvcmRlckRvbmVBY3Rpb24oYWN0aW9uOiBGc0xpc3RBY3Rpb24pIHtcbiAgICB0aGlzLl9kb25lQWN0aW9uID0gYWN0aW9uO1xuICAgIGNvbnN0IGFjdGlvbkNsaWNrRm4gPSBhY3Rpb24uY2xpY2s7XG5cbiAgICB0aGlzLl9kb25lQWN0aW9uLmNsaWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZmlsdGVyUmVmLnVwZGF0ZUFjdGlvbnModGhpcy5fYWN0aW9ucyk7XG4gICAgICB0aGlzLl9maWx0ZXJSZWYuc2hvd0tleXdvcmRGaWVsZCgpO1xuICAgICAgdGhpcy5fZmlsdGVyUmVmLnNob3dGaWx0ZXJzQnRuKCk7XG4gICAgICBhY3Rpb25DbGlja0ZuKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbGVhckFjdGlvbnMoKSB7XG4gICAgdGhpcy5fYWN0aW9ucyA9IFtdO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVEaXNhYmxlZFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZpbHRlclJlZi51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,185 +1,185 @@
|
|
|
1
|
-
import { isNumber } from 'lodash-es';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
-
import { takeUntil, tap } from 'rxjs/operators';
|
|
4
|
-
import { Column } from '../models/column.model';
|
|
5
|
-
export class ColumnsController {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.visibleColumns = [];
|
|
8
|
-
this._theadClass = '';
|
|
9
|
-
this._isConfigured = false;
|
|
10
|
-
this._loadFnConfigured = false;
|
|
11
|
-
this._changeFnConfigured = false;
|
|
12
|
-
this._columnsFetched = false;
|
|
13
|
-
this._hasHeader = false;
|
|
14
|
-
this._hasFooter = false;
|
|
15
|
-
this._columns = [];
|
|
16
|
-
this._destroy$ = new Subject();
|
|
17
|
-
}
|
|
18
|
-
get columns() {
|
|
19
|
-
return this._columns.slice();
|
|
20
|
-
}
|
|
21
|
-
get columnsForDialog() {
|
|
22
|
-
const hasCustomTitle = !!this._customizeFieldTitleFn;
|
|
23
|
-
const hasCustomDisabledStatus = !!this._customizeFieldDisabledFn;
|
|
24
|
-
const hasCustomTooltip = !!this._columnTooltipFn;
|
|
25
|
-
return this._columns
|
|
26
|
-
.filter((column) => column.customize && !!column.name)
|
|
27
|
-
.map((column) => {
|
|
28
|
-
const title = hasCustomTitle
|
|
29
|
-
? this._customizeFieldTitleFn(column.name, column.title)
|
|
30
|
-
: column.name;
|
|
31
|
-
const disabled = hasCustomDisabledStatus
|
|
32
|
-
? this._customizeFieldDisabledFn(column.name)
|
|
33
|
-
: false;
|
|
34
|
-
const tooltip = hasCustomTooltip
|
|
35
|
-
? this._columnTooltipFn(column.name, column.show, disabled)
|
|
36
|
-
: void 0;
|
|
37
|
-
return {
|
|
38
|
-
template: column.headerTemplate,
|
|
39
|
-
name: column.name,
|
|
40
|
-
show: column.show,
|
|
41
|
-
title: title,
|
|
42
|
-
disabled: disabled,
|
|
43
|
-
tooltip: tooltip,
|
|
44
|
-
};
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
get columnsFetched() {
|
|
48
|
-
return this._columnsFetched;
|
|
49
|
-
}
|
|
50
|
-
get hasHeader() {
|
|
51
|
-
return this._hasHeader;
|
|
52
|
-
}
|
|
53
|
-
get hasFooter() {
|
|
54
|
-
return this._hasFooter;
|
|
55
|
-
}
|
|
56
|
-
get theadClass() {
|
|
57
|
-
return this._theadClass;
|
|
58
|
-
}
|
|
59
|
-
get configured() {
|
|
60
|
-
return this._isConfigured;
|
|
61
|
-
}
|
|
62
|
-
get loadFnConfigured() {
|
|
63
|
-
return this._loadFnConfigured;
|
|
64
|
-
}
|
|
65
|
-
get changeFnConfigured() {
|
|
66
|
-
return this._changeFnConfigured;
|
|
67
|
-
}
|
|
68
|
-
get changeFn() {
|
|
69
|
-
return this._changeFn;
|
|
70
|
-
}
|
|
71
|
-
get visibleColumnsNames() {
|
|
72
|
-
return this.visibleColumns
|
|
73
|
-
.map((column) => column.name)
|
|
74
|
-
.filter((name) => !!name);
|
|
75
|
-
}
|
|
76
|
-
setDefaults(defaults) {
|
|
77
|
-
this._defaultConfigs = defaults;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Set data from list config
|
|
81
|
-
* @param config
|
|
82
|
-
*/
|
|
83
|
-
initConfig(config) {
|
|
84
|
-
if (config) {
|
|
85
|
-
if (config.load) {
|
|
86
|
-
this._loadFn = config.load;
|
|
87
|
-
this._loadFnConfigured = true;
|
|
88
|
-
}
|
|
89
|
-
if (config.change) {
|
|
90
|
-
this._changeFn = config.change;
|
|
91
|
-
this._changeFnConfigured = true;
|
|
92
|
-
}
|
|
93
|
-
if (config.title) {
|
|
94
|
-
this._customizeFieldTitleFn = config.title;
|
|
95
|
-
}
|
|
96
|
-
if (config.disabled) {
|
|
97
|
-
this._customizeFieldDisabledFn = config.disabled;
|
|
98
|
-
}
|
|
99
|
-
if (config.tooltip) {
|
|
100
|
-
this._columnTooltipFn = config.tooltip;
|
|
101
|
-
}
|
|
102
|
-
this._isConfigured = true;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Base initialization for columns
|
|
107
|
-
* @param templates
|
|
108
|
-
*/
|
|
109
|
-
initializeColumns(templates) {
|
|
110
|
-
this._columns = [];
|
|
111
|
-
templates.forEach((column) => {
|
|
112
|
-
const col = new Column(column, this._defaultConfigs);
|
|
113
|
-
if (col.headerTemplate || col.title) {
|
|
114
|
-
this._hasHeader = true;
|
|
115
|
-
}
|
|
116
|
-
if (col.footerTemplate) {
|
|
117
|
-
this._hasFooter = true;
|
|
118
|
-
}
|
|
119
|
-
this._columns.push(col);
|
|
120
|
-
});
|
|
121
|
-
this._theadClass = this.hasHeader ? 'has-header' : '';
|
|
122
|
-
this._updateColspans('headerConfigs', 'headerColspanned');
|
|
123
|
-
this._updateColspans('groupCellConfigs', 'groupCellColspanned');
|
|
124
|
-
this._updateColspans('cellConfigs', 'cellColspanned');
|
|
125
|
-
this._updateColspans('footerConfigs', 'footerColspanned');
|
|
126
|
-
this.updateVisibleColumns();
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Load visiblity config for columns from remote
|
|
130
|
-
*/
|
|
131
|
-
loadRemoteColumnConfigs() {
|
|
132
|
-
return this._loadFn()
|
|
133
|
-
.pipe(takeUntil(this._destroy$), tap((columnConfigs) => {
|
|
134
|
-
this._columnsFetched = true;
|
|
135
|
-
this.updateVisibilityForCols(columnConfigs);
|
|
136
|
-
}));
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Set visible columns based on current columns show status
|
|
140
|
-
*/
|
|
141
|
-
updateVisibleColumns() {
|
|
142
|
-
this.visibleColumns =
|
|
143
|
-
this._columns.filter((column) => column.show) || [];
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Update visibility based on passed config
|
|
147
|
-
* @param columnsConfig
|
|
148
|
-
*/
|
|
149
|
-
updateVisibilityForCols(columnsConfig) {
|
|
150
|
-
columnsConfig.forEach((columnConfig) => {
|
|
151
|
-
const col = this._columns
|
|
152
|
-
.find((column) => column.name === columnConfig.name);
|
|
153
|
-
if (col) {
|
|
154
|
-
col.show = columnConfig.show;
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
this.updateVisibleColumns();
|
|
158
|
-
}
|
|
159
|
-
destroy() {
|
|
160
|
-
this._destroy$.next();
|
|
161
|
-
this._destroy$.complete();
|
|
162
|
-
this._columns = void 0;
|
|
163
|
-
this.visibleColumns = void 0;
|
|
164
|
-
this._defaultConfigs = void 0;
|
|
165
|
-
this._loadFn = void 0;
|
|
166
|
-
this._changeFn = void 0;
|
|
167
|
-
}
|
|
168
|
-
_updateColspans(config, updateFlag) {
|
|
169
|
-
this._columns.forEach((col, index) => {
|
|
170
|
-
if (col[config].colspan !== void 0) {
|
|
171
|
-
const spanTo = index + +col[config].colspan;
|
|
172
|
-
if (!isNumber(spanTo)) {
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
this._columns[index][updateFlag] = false;
|
|
176
|
-
for (let i = index + 1; i < spanTo; i++) {
|
|
177
|
-
if (this._columns[i]) {
|
|
178
|
-
this._columns[i][updateFlag] = true;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpcmVzdGl0Y2gvbGlzdC8iLCJzb3VyY2VzIjpbImFwcC9jbGFzc2VzL2NvbHVtbnMtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFXaEQsTUFBTSxPQUFPLGlCQUFpQjtJQXNCNUI7UUFwQk8sbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFFN0IsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFPakIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsYUFBUSxHQUFhLEVBQUUsQ0FBQztRQUd4QixjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV6QixDQUFDO0lBRWhCLElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsZ0JBQWdCO1FBQ3pCLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDckQsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1FBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FB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QUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICdsb2Rhc2gtZXMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ29sdW1uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgRnNMaXN0Q29sdW1uQ2hhbmdlRm4sXHJcbiAgRnNMaXN0Q29sdW1uQ29uZmlnLFxyXG4gIEZzTGlzdENvbHVtbkRpc2FibGVkRm4sXHJcbiAgRnNMaXN0Q29sdW1uTG9hZEZuLFxyXG4gIEZzTGlzdENvbHVtblRpdGxlRm4sXHJcbiAgRnNMaXN0Q29sdW1uVG9vbHRpcEZuLFxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvbGlzdGNvbmZpZy5pbnRlcmZhY2UnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5zQ29udHJvbGxlciB7XHJcblxyXG4gIHB1YmxpYyB2aXNpYmxlQ29sdW1uczogQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfdGhlYWRDbGFzcyA9ICcnO1xyXG4gIHByaXZhdGUgX2xvYWRGbjogRnNMaXN0Q29sdW1uTG9hZEZuO1xyXG4gIHByaXZhdGUgX2NoYW5nZUZuOiBGc0xpc3RDb2x1bW5DaGFuZ2VGbjtcclxuICBwcml2YXRlIF9jdXN0b21pemVGaWVsZFRpdGxlRm46IEZzTGlzdENvbHVtblRpdGxlRm47XHJcbiAgcHJpdmF0ZSBfY3VzdG9taXplRmllbGREaXNhYmxlZEZuOiBGc0xpc3RDb2x1bW5EaXNhYmxlZEZuO1xyXG4gIHByaXZhdGUgX2NvbHVtblRvb2x0aXBGbjogRnNMaXN0Q29sdW1uVG9vbHRpcEZuO1xyXG5cclxuICBwcml2YXRlIF9pc0NvbmZpZ3VyZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9sb2FkRm5Db25maWd1cmVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfY2hhbmdlRm5Db25maWd1cmVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfY29sdW1uc0ZldGNoZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9oYXNIZWFkZXIgPSBmYWxzZTtcclxuICBwcml2YXRlIF9oYXNGb290ZXIgPSBmYWxzZTtcclxuICBwcml2YXRlIF9jb2x1bW5zOiBDb2x1bW5bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2RlZmF1bHRDb25maWdzO1xyXG5cclxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgcHVibGljIGdldCBjb2x1bW5zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnMuc2xpY2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY29sdW1uc0ZvckRpYWxvZygpIHtcclxuICAgIGNvbnN0IGhhc0N1c3RvbVRpdGxlID0gISF0aGlzLl9jdXN0b21pemVGaWVsZFRpdGxlRm47XHJcbiAgICBjb25zdCBoYXNDdXN0b21EaXNhYmxlZFN0YXR1cyA9ICEhdGhpcy5fY3VzdG9taXplRmllbGREaXNhYmxlZEZuO1xyXG4gICAgY29uc3QgaGFzQ3VzdG9tVG9vbHRpcCA9ICEhdGhpcy5fY29sdW1uVG9vbHRpcEZuO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLmN1c3RvbWl6ZSAmJiAhIWNvbHVtbi5uYW1lKVxyXG4gICAgICAubWFwKChjb2x1bW4pID0+IHtcclxuICAgICAgICBjb25zdCB0aXRsZSA9IGhhc0N1c3RvbVRpdGxlXHJcbiAgICAgICAgICA/IHRoaXMuX2N1c3RvbWl6ZUZpZWxkVGl0bGVGbihjb2x1bW4ubmFtZSwgY29sdW1uLnRpdGxlKVxyXG4gICAgICAgICAgOiBjb2x1bW4ubmFtZTtcclxuXHJcbiAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBoYXNDdXN0b21EaXNhYmxlZFN0YXR1c1xyXG4gICAgICAgICAgPyB0aGlzLl9jdXN0b21pemVGaWVsZERpc2FibGVkRm4oY29sdW1uLm5hbWUpXHJcbiAgICAgICAgICA6IGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCB0b29sdGlwID0gaGFzQ3VzdG9tVG9vbHRpcFxyXG4gICAgICAgICAgPyB0aGlzLl9jb2x1bW5Ub29sdGlwRm4oY29sdW1uLm5hbWUsIGNvbHVtbi5zaG93LCBkaXNhYmxlZClcclxuICAgICAgICAgIDogdm9pZCAwO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgdGVtcGxhdGU6IGNvbHVtbi5oZWFkZXJUZW1wbGF0ZSxcclxuICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxyXG4gICAgICAgICAgc2hvdzogY29sdW1uLnNob3csXHJcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXHJcbiAgICAgICAgICB0b29sdGlwOiB0b29sdGlwLFxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNvbHVtbnNGZXRjaGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnNGZXRjaGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBoYXNIZWFkZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faGFzSGVhZGVyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBoYXNGb290ZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faGFzRm9vdGVyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0aGVhZENsYXNzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RoZWFkQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNvbmZpZ3VyZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNDb25maWd1cmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBsb2FkRm5Db25maWd1cmVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvYWRGbkNvbmZpZ3VyZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNoYW5nZUZuQ29uZmlndXJlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VGbkNvbmZpZ3VyZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNoYW5nZUZuKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoYW5nZUZuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB2aXNpYmxlQ29sdW1uc05hbWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnNcclxuICAgICAgLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSlcclxuICAgICAgLmZpbHRlcigobmFtZSkgPT4gISFuYW1lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREZWZhdWx0cyhkZWZhdWx0cykge1xyXG4gICAgdGhpcy5fZGVmYXVsdENvbmZpZ3MgPSBkZWZhdWx0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBkYXRhIGZyb20gbGlzdCBjb25maWdcclxuICAgKiBAcGFyYW0gY29uZmlnXHJcbiAgICovXHJcbiAgcHVibGljIGluaXRDb25maWcoY29uZmlnOiBGc0xpc3RDb2x1bW5Db25maWcpIHtcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgaWYgKGNvbmZpZy5sb2FkKSB7XHJcbiAgICAgICAgdGhpcy5fbG9hZEZuID0gY29uZmlnLmxvYWQ7XHJcbiAgICAgICAgdGhpcy5fbG9hZEZuQ29uZmlndXJlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb25maWcuY2hhbmdlKSB7XHJcbiAgICAgICAgdGhpcy5fY2hhbmdlRm4gPSBjb25maWcuY2hhbmdlO1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZUZuQ29uZmlndXJlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb25maWcudGl0bGUpIHtcclxuICAgICAgICB0aGlzLl9jdXN0b21pemVGaWVsZFRpdGxlRm4gPSBjb25maWcudGl0bGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb25maWcuZGlzYWJsZWQpIHtcclxuICAgICAgICB0aGlzLl9jdXN0b21pemVGaWVsZERpc2FibGVkRm4gPSBjb25maWcuZGlzYWJsZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb25maWcudG9vbHRpcCkge1xyXG4gICAgICAgIHRoaXMuX2NvbHVtblRvb2x0aXBGbiA9IGNvbmZpZy50b29sdGlwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9pc0NvbmZpZ3VyZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZSBpbml0aWFsaXphdGlvbiBmb3IgY29sdW1uc1xyXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZXNcclxuICAgKi9cclxuICBwdWJsaWMgaW5pdGlhbGl6ZUNvbHVtbnModGVtcGxhdGVzKSB7XHJcbiAgICB0aGlzLl9jb2x1bW5zID0gW107XHJcblxyXG4gICAgdGVtcGxhdGVzLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICBjb25zdCBjb2wgPSBuZXcgQ29sdW1uKGNvbHVtbiwgdGhpcy5fZGVmYXVsdENvbmZpZ3MpO1xyXG5cclxuXHJcbiAgICAgIGlmIChjb2wuaGVhZGVyVGVtcGxhdGUgfHwgY29sLnRpdGxlKSB7XHJcbiAgICAgICAgdGhpcy5faGFzSGVhZGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sLmZvb3RlclRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5faGFzRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl90aGVhZENsYXNzID0gdGhpcy5oYXNIZWFkZXIgPyAnaGFzLWhlYWRlcicgOiAnJztcclxuXHJcbiAgICB0aGlzLl91cGRhdGVDb2xzcGFucygnaGVhZGVyQ29uZmlncycsICdoZWFkZXJDb2xzcGFubmVkJyk7XHJcbiAgICB0aGlzLl91cGRhdGVDb2xzcGFucygnZ3JvdXBDZWxsQ29uZmlncycsICdncm91cENlbGxDb2xzcGFubmVkJyk7XHJcbiAgICB0aGlzLl91cGRhdGVDb2xzcGFucygnY2VsbENvbmZpZ3MnLCAnY2VsbENvbHNwYW5uZWQnKTtcclxuICAgIHRoaXMuX3VwZGF0ZUNvbHNwYW5zKCdmb290ZXJDb25maWdzJywgJ2Zvb3RlckNvbHNwYW5uZWQnKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVDb2x1bW5zKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIHZpc2libGl0eSBjb25maWcgZm9yIGNvbHVtbnMgZnJvbSByZW1vdGVcclxuICAgKi9cclxuICBwdWJsaWMgbG9hZFJlbW90ZUNvbHVtbkNvbmZpZ3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbG9hZEZuKClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcclxuICAgICAgICB0YXAoKGNvbHVtbkNvbmZpZ3MpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2NvbHVtbnNGZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eUZvckNvbHMoY29sdW1uQ29uZmlncyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHZpc2libGUgY29sdW1ucyBiYXNlZCBvbiBjdXJyZW50IGNvbHVtbnMgc2hvdyBzdGF0dXNcclxuICAgKi9cclxuICBwdWJsaWMgdXBkYXRlVmlzaWJsZUNvbHVtbnMoKSB7XHJcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zID1cclxuICAgICAgdGhpcy5fY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLnNob3cpIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHZpc2liaWxpdHkgYmFzZWQgb24gcGFzc2VkIGNvbmZpZ1xyXG4gICAqIEBwYXJhbSBjb2x1bW5zQ29uZmlnXHJcbiAgICovXHJcbiAgcHVibGljIHVwZGF0ZVZpc2liaWxpdHlGb3JDb2xzKGNvbHVtbnNDb25maWcpIHtcclxuICAgIGNvbHVtbnNDb25maWcuZm9yRWFjaCgoY29sdW1uQ29uZmlnKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbCA9IHRoaXMuX2NvbHVtbnNcclxuICAgICAgICAuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gY29sdW1uQ29uZmlnLm5hbWUpO1xyXG5cclxuICAgICAgaWYgKGNvbCkge1xyXG4gICAgICAgIGNvbC5zaG93ID0gY29sdW1uQ29uZmlnLnNob3c7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlVmlzaWJsZUNvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZXN0cm95KCkge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuXHJcbiAgICB0aGlzLl9jb2x1bW5zID0gdm9pZCAwO1xyXG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHZvaWQgMDtcclxuICAgIHRoaXMuX2RlZmF1bHRDb25maWdzID0gdm9pZCAwO1xyXG5cclxuICAgIHRoaXMuX2xvYWRGbiA9IHZvaWQgMDtcclxuICAgIHRoaXMuX2NoYW5nZUZuID0gdm9pZCAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlQ29sc3BhbnMoY29uZmlnLCB1cGRhdGVGbGFnKSB7XHJcbiAgICB0aGlzLl9jb2x1bW5zLmZvckVhY2goKGNvbCwgaW5kZXgpID0+IHtcclxuXHJcbiAgICAgIGlmIChjb2xbY29uZmlnXS5jb2xzcGFuICE9PSB2b2lkIDApIHtcclxuICAgICAgICBjb25zdCBzcGFuVG8gPSBpbmRleCArICtjb2xbY29uZmlnXS5jb2xzcGFuO1xyXG5cclxuICAgICAgICBpZiAoIWlzTnVtYmVyKHNwYW5UbykpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29sdW1uc1tpbmRleF1bdXBkYXRlRmxhZ10gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IHNwYW5UbzsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fY29sdW1uc1tpXSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5zW2ldW3VwZGF0ZUZsYWddID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
1
|
+
import { isNumber } from 'lodash-es';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { takeUntil, tap } from 'rxjs/operators';
|
|
4
|
+
import { Column } from '../models/column.model';
|
|
5
|
+
export class ColumnsController {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.visibleColumns = [];
|
|
8
|
+
this._theadClass = '';
|
|
9
|
+
this._isConfigured = false;
|
|
10
|
+
this._loadFnConfigured = false;
|
|
11
|
+
this._changeFnConfigured = false;
|
|
12
|
+
this._columnsFetched = false;
|
|
13
|
+
this._hasHeader = false;
|
|
14
|
+
this._hasFooter = false;
|
|
15
|
+
this._columns = [];
|
|
16
|
+
this._destroy$ = new Subject();
|
|
17
|
+
}
|
|
18
|
+
get columns() {
|
|
19
|
+
return this._columns.slice();
|
|
20
|
+
}
|
|
21
|
+
get columnsForDialog() {
|
|
22
|
+
const hasCustomTitle = !!this._customizeFieldTitleFn;
|
|
23
|
+
const hasCustomDisabledStatus = !!this._customizeFieldDisabledFn;
|
|
24
|
+
const hasCustomTooltip = !!this._columnTooltipFn;
|
|
25
|
+
return this._columns
|
|
26
|
+
.filter((column) => column.customize && !!column.name)
|
|
27
|
+
.map((column) => {
|
|
28
|
+
const title = hasCustomTitle
|
|
29
|
+
? this._customizeFieldTitleFn(column.name, column.title)
|
|
30
|
+
: column.name;
|
|
31
|
+
const disabled = hasCustomDisabledStatus
|
|
32
|
+
? this._customizeFieldDisabledFn(column.name)
|
|
33
|
+
: false;
|
|
34
|
+
const tooltip = hasCustomTooltip
|
|
35
|
+
? this._columnTooltipFn(column.name, column.show, disabled)
|
|
36
|
+
: void 0;
|
|
37
|
+
return {
|
|
38
|
+
template: column.headerTemplate,
|
|
39
|
+
name: column.name,
|
|
40
|
+
show: column.show,
|
|
41
|
+
title: title,
|
|
42
|
+
disabled: disabled,
|
|
43
|
+
tooltip: tooltip,
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
get columnsFetched() {
|
|
48
|
+
return this._columnsFetched;
|
|
49
|
+
}
|
|
50
|
+
get hasHeader() {
|
|
51
|
+
return this._hasHeader;
|
|
52
|
+
}
|
|
53
|
+
get hasFooter() {
|
|
54
|
+
return this._hasFooter;
|
|
55
|
+
}
|
|
56
|
+
get theadClass() {
|
|
57
|
+
return this._theadClass;
|
|
58
|
+
}
|
|
59
|
+
get configured() {
|
|
60
|
+
return this._isConfigured;
|
|
61
|
+
}
|
|
62
|
+
get loadFnConfigured() {
|
|
63
|
+
return this._loadFnConfigured;
|
|
64
|
+
}
|
|
65
|
+
get changeFnConfigured() {
|
|
66
|
+
return this._changeFnConfigured;
|
|
67
|
+
}
|
|
68
|
+
get changeFn() {
|
|
69
|
+
return this._changeFn;
|
|
70
|
+
}
|
|
71
|
+
get visibleColumnsNames() {
|
|
72
|
+
return this.visibleColumns
|
|
73
|
+
.map((column) => column.name)
|
|
74
|
+
.filter((name) => !!name);
|
|
75
|
+
}
|
|
76
|
+
setDefaults(defaults) {
|
|
77
|
+
this._defaultConfigs = defaults;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Set data from list config
|
|
81
|
+
* @param config
|
|
82
|
+
*/
|
|
83
|
+
initConfig(config) {
|
|
84
|
+
if (config) {
|
|
85
|
+
if (config.load) {
|
|
86
|
+
this._loadFn = config.load;
|
|
87
|
+
this._loadFnConfigured = true;
|
|
88
|
+
}
|
|
89
|
+
if (config.change) {
|
|
90
|
+
this._changeFn = config.change;
|
|
91
|
+
this._changeFnConfigured = true;
|
|
92
|
+
}
|
|
93
|
+
if (config.title) {
|
|
94
|
+
this._customizeFieldTitleFn = config.title;
|
|
95
|
+
}
|
|
96
|
+
if (config.disabled) {
|
|
97
|
+
this._customizeFieldDisabledFn = config.disabled;
|
|
98
|
+
}
|
|
99
|
+
if (config.tooltip) {
|
|
100
|
+
this._columnTooltipFn = config.tooltip;
|
|
101
|
+
}
|
|
102
|
+
this._isConfigured = true;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Base initialization for columns
|
|
107
|
+
* @param templates
|
|
108
|
+
*/
|
|
109
|
+
initializeColumns(templates) {
|
|
110
|
+
this._columns = [];
|
|
111
|
+
templates.forEach((column) => {
|
|
112
|
+
const col = new Column(column, this._defaultConfigs);
|
|
113
|
+
if (col.headerTemplate || col.title) {
|
|
114
|
+
this._hasHeader = true;
|
|
115
|
+
}
|
|
116
|
+
if (col.footerTemplate) {
|
|
117
|
+
this._hasFooter = true;
|
|
118
|
+
}
|
|
119
|
+
this._columns.push(col);
|
|
120
|
+
});
|
|
121
|
+
this._theadClass = this.hasHeader ? 'has-header' : '';
|
|
122
|
+
this._updateColspans('headerConfigs', 'headerColspanned');
|
|
123
|
+
this._updateColspans('groupCellConfigs', 'groupCellColspanned');
|
|
124
|
+
this._updateColspans('cellConfigs', 'cellColspanned');
|
|
125
|
+
this._updateColspans('footerConfigs', 'footerColspanned');
|
|
126
|
+
this.updateVisibleColumns();
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Load visiblity config for columns from remote
|
|
130
|
+
*/
|
|
131
|
+
loadRemoteColumnConfigs() {
|
|
132
|
+
return this._loadFn()
|
|
133
|
+
.pipe(takeUntil(this._destroy$), tap((columnConfigs) => {
|
|
134
|
+
this._columnsFetched = true;
|
|
135
|
+
this.updateVisibilityForCols(columnConfigs);
|
|
136
|
+
}));
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Set visible columns based on current columns show status
|
|
140
|
+
*/
|
|
141
|
+
updateVisibleColumns() {
|
|
142
|
+
this.visibleColumns =
|
|
143
|
+
this._columns.filter((column) => column.show) || [];
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Update visibility based on passed config
|
|
147
|
+
* @param columnsConfig
|
|
148
|
+
*/
|
|
149
|
+
updateVisibilityForCols(columnsConfig) {
|
|
150
|
+
columnsConfig.forEach((columnConfig) => {
|
|
151
|
+
const col = this._columns
|
|
152
|
+
.find((column) => column.name === columnConfig.name);
|
|
153
|
+
if (col) {
|
|
154
|
+
col.show = columnConfig.show;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
this.updateVisibleColumns();
|
|
158
|
+
}
|
|
159
|
+
destroy() {
|
|
160
|
+
this._destroy$.next();
|
|
161
|
+
this._destroy$.complete();
|
|
162
|
+
this._columns = void 0;
|
|
163
|
+
this.visibleColumns = void 0;
|
|
164
|
+
this._defaultConfigs = void 0;
|
|
165
|
+
this._loadFn = void 0;
|
|
166
|
+
this._changeFn = void 0;
|
|
167
|
+
}
|
|
168
|
+
_updateColspans(config, updateFlag) {
|
|
169
|
+
this._columns.forEach((col, index) => {
|
|
170
|
+
if (col[config].colspan !== void 0) {
|
|
171
|
+
const spanTo = index + +col[config].colspan;
|
|
172
|
+
if (!isNumber(spanTo)) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
this._columns[index][updateFlag] = false;
|
|
176
|
+
for (let i = index + 1; i < spanTo; i++) {
|
|
177
|
+
if (this._columns[i]) {
|
|
178
|
+
this._columns[i][updateFlag] = true;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpcmVzdGl0Y2gvbGlzdC8iLCJzb3VyY2VzIjpbImFwcC9jbGFzc2VzL2NvbHVtbnMtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFXaEQsTUFBTSxPQUFPLGlCQUFpQjtJQXNCNUI7UUFwQk8sbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFFN0IsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFPakIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsYUFBUSxHQUFhLEVBQUUsQ0FBQztRQUd4QixjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV6QixDQUFDO0lBRWhCLElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsZ0JBQWdCO1FBQ3pCLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDckQsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1FBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FB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QUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IENvbHVtbiB9IGZyb20gJy4uL21vZGVscy9jb2x1bW4ubW9kZWwnO1xuaW1wb3J0IHtcbiAgRnNMaXN0Q29sdW1uQ2hhbmdlRm4sXG4gIEZzTGlzdENvbHVtbkNvbmZpZyxcbiAgRnNMaXN0Q29sdW1uRGlzYWJsZWRGbixcbiAgRnNMaXN0Q29sdW1uTG9hZEZuLFxuICBGc0xpc3RDb2x1bW5UaXRsZUZuLFxuICBGc0xpc3RDb2x1bW5Ub29sdGlwRm4sXG59IGZyb20gJy4uL2ludGVyZmFjZXMvbGlzdGNvbmZpZy5pbnRlcmZhY2UnO1xuXG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5zQ29udHJvbGxlciB7XG5cbiAgcHVibGljIHZpc2libGVDb2x1bW5zOiBDb2x1bW5bXSA9IFtdO1xuXG4gIHByaXZhdGUgX3RoZWFkQ2xhc3MgPSAnJztcbiAgcHJpdmF0ZSBfbG9hZEZuOiBGc0xpc3RDb2x1bW5Mb2FkRm47XG4gIHByaXZhdGUgX2NoYW5nZUZuOiBGc0xpc3RDb2x1bW5DaGFuZ2VGbjtcbiAgcHJpdmF0ZSBfY3VzdG9taXplRmllbGRUaXRsZUZuOiBGc0xpc3RDb2x1bW5UaXRsZUZuO1xuICBwcml2YXRlIF9jdXN0b21pemVGaWVsZERpc2FibGVkRm46IEZzTGlzdENvbHVtbkRpc2FibGVkRm47XG4gIHByaXZhdGUgX2NvbHVtblRvb2x0aXBGbjogRnNMaXN0Q29sdW1uVG9vbHRpcEZuO1xuXG4gIHByaXZhdGUgX2lzQ29uZmlndXJlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9sb2FkRm5Db25maWd1cmVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2NoYW5nZUZuQ29uZmlndXJlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9jb2x1bW5zRmV0Y2hlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9oYXNIZWFkZXIgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaGFzRm9vdGVyID0gZmFsc2U7XG4gIHByaXZhdGUgX2NvbHVtbnM6IENvbHVtbltdID0gW107XG4gIHByaXZhdGUgX2RlZmF1bHRDb25maWdzO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcHVibGljIGdldCBjb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zLnNsaWNlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbHVtbnNGb3JEaWFsb2coKSB7XG4gICAgY29uc3QgaGFzQ3VzdG9tVGl0bGUgPSAhIXRoaXMuX2N1c3RvbWl6ZUZpZWxkVGl0bGVGbjtcbiAgICBjb25zdCBoYXNDdXN0b21EaXNhYmxlZFN0YXR1cyA9ICEhdGhpcy5fY3VzdG9taXplRmllbGREaXNhYmxlZEZuO1xuICAgIGNvbnN0IGhhc0N1c3RvbVRvb2x0aXAgPSAhIXRoaXMuX2NvbHVtblRvb2x0aXBGbjtcblxuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zXG4gICAgICAuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5jdXN0b21pemUgJiYgISFjb2x1bW4ubmFtZSlcbiAgICAgIC5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCB0aXRsZSA9IGhhc0N1c3RvbVRpdGxlXG4gICAgICAgICAgPyB0aGlzLl9jdXN0b21pemVGaWVsZFRpdGxlRm4oY29sdW1uLm5hbWUsIGNvbHVtbi50aXRsZSlcbiAgICAgICAgICA6IGNvbHVtbi5uYW1lO1xuXG4gICAgICAgIGNvbnN0IGRpc2FibGVkID0gaGFzQ3VzdG9tRGlzYWJsZWRTdGF0dXNcbiAgICAgICAgICA/IHRoaXMuX2N1c3RvbWl6ZUZpZWxkRGlzYWJsZWRGbihjb2x1bW4ubmFtZSlcbiAgICAgICAgICA6IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSBoYXNDdXN0b21Ub29sdGlwXG4gICAgICAgICAgPyB0aGlzLl9jb2x1bW5Ub29sdGlwRm4oY29sdW1uLm5hbWUsIGNvbHVtbi5zaG93LCBkaXNhYmxlZClcbiAgICAgICAgICA6IHZvaWQgMDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRlbXBsYXRlOiBjb2x1bW4uaGVhZGVyVGVtcGxhdGUsXG4gICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgc2hvdzogY29sdW1uLnNob3csXG4gICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICB0b29sdGlwOiB0b29sdGlwLFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29sdW1uc0ZldGNoZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnNGZXRjaGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNIZWFkZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0hlYWRlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzRm9vdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9oYXNGb290ZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRoZWFkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RoZWFkQ2xhc3M7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbmZpZ3VyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQ29uZmlndXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9hZEZuQ29uZmlndXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZEZuQ29uZmlndXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hhbmdlRm5Db25maWd1cmVkKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VGbkNvbmZpZ3VyZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNoYW5nZUZuKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VGbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUNvbHVtbnNOYW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1uc1xuICAgICAgLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSlcbiAgICAgIC5maWx0ZXIoKG5hbWUpID0+ICEhbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0RGVmYXVsdHMoZGVmYXVsdHMpIHtcbiAgICB0aGlzLl9kZWZhdWx0Q29uZmlncyA9IGRlZmF1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkYXRhIGZyb20gbGlzdCBjb25maWdcbiAgICogQHBhcmFtIGNvbmZpZ1xuICAgKi9cbiAgcHVibGljIGluaXRDb25maWcoY29uZmlnOiBGc0xpc3RDb2x1bW5Db25maWcpIHtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBpZiAoY29uZmlnLmxvYWQpIHtcbiAgICAgICAgdGhpcy5fbG9hZEZuID0gY29uZmlnLmxvYWQ7XG4gICAgICAgIHRoaXMuX2xvYWRGbkNvbmZpZ3VyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLmNoYW5nZSkge1xuICAgICAgICB0aGlzLl9jaGFuZ2VGbiA9IGNvbmZpZy5jaGFuZ2U7XG4gICAgICAgIHRoaXMuX2NoYW5nZUZuQ29uZmlndXJlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcudGl0bGUpIHtcbiAgICAgICAgdGhpcy5fY3VzdG9taXplRmllbGRUaXRsZUZuID0gY29uZmlnLnRpdGxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuX2N1c3RvbWl6ZUZpZWxkRGlzYWJsZWRGbiA9IGNvbmZpZy5kaXNhYmxlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy50b29sdGlwKSB7XG4gICAgICAgIHRoaXMuX2NvbHVtblRvb2x0aXBGbiA9IGNvbmZpZy50b29sdGlwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc0NvbmZpZ3VyZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCYXNlIGluaXRpYWxpemF0aW9uIGZvciBjb2x1bW5zXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZXNcbiAgICovXG4gIHB1YmxpYyBpbml0aWFsaXplQ29sdW1ucyh0ZW1wbGF0ZXMpIHtcbiAgICB0aGlzLl9jb2x1bW5zID0gW107XG5cbiAgICB0ZW1wbGF0ZXMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBjb25zdCBjb2wgPSBuZXcgQ29sdW1uKGNvbHVtbiwgdGhpcy5fZGVmYXVsdENvbmZpZ3MpO1xuXG5cbiAgICAgIGlmIChjb2wuaGVhZGVyVGVtcGxhdGUgfHwgY29sLnRpdGxlKSB7XG4gICAgICAgIHRoaXMuX2hhc0hlYWRlciA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoY29sLmZvb3RlclRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMuX2hhc0Zvb3RlciA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2wpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fdGhlYWRDbGFzcyA9IHRoaXMuaGFzSGVhZGVyID8gJ2hhcy1oZWFkZXInIDogJyc7XG5cbiAgICB0aGlzLl91cGRhdGVDb2xzcGFucygnaGVhZGVyQ29uZmlncycsICdoZWFkZXJDb2xzcGFubmVkJyk7XG4gICAgdGhpcy5fdXBkYXRlQ29sc3BhbnMoJ2dyb3VwQ2VsbENvbmZpZ3MnLCAnZ3JvdXBDZWxsQ29sc3Bhbm5lZCcpO1xuICAgIHRoaXMuX3VwZGF0ZUNvbHNwYW5zKCdjZWxsQ29uZmlncycsICdjZWxsQ29sc3Bhbm5lZCcpO1xuICAgIHRoaXMuX3VwZGF0ZUNvbHNwYW5zKCdmb290ZXJDb25maWdzJywgJ2Zvb3RlckNvbHNwYW5uZWQnKTtcblxuICAgIHRoaXMudXBkYXRlVmlzaWJsZUNvbHVtbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHZpc2libGl0eSBjb25maWcgZm9yIGNvbHVtbnMgZnJvbSByZW1vdGVcbiAgICovXG4gIHB1YmxpYyBsb2FkUmVtb3RlQ29sdW1uQ29uZmlncygpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZEZuKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YXAoKGNvbHVtbkNvbmZpZ3MpID0+IHtcbiAgICAgICAgICB0aGlzLl9jb2x1bW5zRmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5Rm9yQ29scyhjb2x1bW5Db25maWdzKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdmlzaWJsZSBjb2x1bW5zIGJhc2VkIG9uIGN1cnJlbnQgY29sdW1ucyBzaG93IHN0YXR1c1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZVZpc2libGVDb2x1bW5zKCkge1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPVxuICAgICAgdGhpcy5fY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLnNob3cpIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB2aXNpYmlsaXR5IGJhc2VkIG9uIHBhc3NlZCBjb25maWdcbiAgICogQHBhcmFtIGNvbHVtbnNDb25maWdcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVWaXNpYmlsaXR5Rm9yQ29scyhjb2x1bW5zQ29uZmlnKSB7XG4gICAgY29sdW1uc0NvbmZpZy5mb3JFYWNoKChjb2x1bW5Db25maWcpID0+IHtcbiAgICAgIGNvbnN0IGNvbCA9IHRoaXMuX2NvbHVtbnNcbiAgICAgICAgLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IGNvbHVtbkNvbmZpZy5uYW1lKTtcblxuICAgICAgaWYgKGNvbCkge1xuICAgICAgICBjb2wuc2hvdyA9IGNvbHVtbkNvbmZpZy5zaG93O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVWaXNpYmxlQ29sdW1ucygpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLl9jb2x1bW5zID0gdm9pZCAwO1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSB2b2lkIDA7XG4gICAgdGhpcy5fZGVmYXVsdENvbmZpZ3MgPSB2b2lkIDA7XG5cbiAgICB0aGlzLl9sb2FkRm4gPSB2b2lkIDA7XG4gICAgdGhpcy5fY2hhbmdlRm4gPSB2b2lkIDA7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVDb2xzcGFucyhjb25maWcsIHVwZGF0ZUZsYWcpIHtcbiAgICB0aGlzLl9jb2x1bW5zLmZvckVhY2goKGNvbCwgaW5kZXgpID0+IHtcblxuICAgICAgaWYgKGNvbFtjb25maWddLmNvbHNwYW4gIT09IHZvaWQgMCkge1xuICAgICAgICBjb25zdCBzcGFuVG8gPSBpbmRleCArICtjb2xbY29uZmlnXS5jb2xzcGFuO1xuXG4gICAgICAgIGlmICghaXNOdW1iZXIoc3BhblRvKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb2x1bW5zW2luZGV4XVt1cGRhdGVGbGFnXSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBzcGFuVG87IGkrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jb2x1bW5zW2ldKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5zW2ldW3VwZGF0ZUZsYWddID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbn1cbiJdfQ==
|