@universis/ngx-tables 0.8.5 → 15.0.2
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/esm2020/lib/actions/table.actions.mjs +27 -0
- package/esm2020/lib/advanced-aggregator.mjs +2 -0
- package/esm2020/lib/components/add-items/add-items.component.mjs +138 -0
- package/esm2020/lib/components/advanced-aggregator/advanced-aggregator.component.mjs +126 -0
- package/esm2020/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.mjs +53 -0
- package/esm2020/lib/components/advanced-list/advanced-list.component.mjs +184 -0
- package/esm2020/lib/components/advanced-row-action/advanced-row-action.component.mjs +178 -0
- package/esm2020/lib/components/advanced-search-form/advanced-search-form.component.mjs +154 -0
- package/esm2020/lib/components/advanced-select/advanced-select.component.mjs +42 -0
- package/esm2020/lib/components/advanced-select/advanced-select.service.mjs +38 -0
- package/esm2020/lib/components/advanced-table/advanced-filter-value-provider.service.mjs +31 -0
- package/esm2020/lib/components/advanced-table/advanced-table-resolvers.mjs +40 -0
- package/esm2020/lib/components/advanced-table/advanced-table-search-base.mjs +31 -0
- package/esm2020/lib/components/advanced-table/advanced-table-search.component.mjs +525 -0
- package/esm2020/lib/components/advanced-table/advanced-table-settings.component.mjs +108 -0
- package/esm2020/lib/components/advanced-table/advanced-table.component.mjs +1599 -0
- package/esm2020/lib/components/advanced-table/advanced-table.formatters.interface.mjs +17 -0
- package/esm2020/lib/components/advanced-table/advanced-table.formatters.mjs +429 -0
- package/esm2020/lib/components/advanced-table/advanced-table.interfaces.mjs +2 -0
- package/esm2020/lib/components/advanced-table-modal/advanced-table-modal-base.component.mjs +420 -0
- package/esm2020/lib/components/column-selector/column-selector.component.mjs +205 -0
- package/esm2020/lib/components/column-selector/column-selector.service.mjs +45 -0
- package/esm2020/lib/components/table-simple-header/table-simple-header.component.mjs +52 -0
- package/esm2020/lib/directives/advance-search-state.directive.mjs +111 -0
- package/esm2020/lib/directives/advance-table-state.directive.mjs +63 -0
- package/esm2020/lib/directives/advanced-search-router-state.directive.mjs +64 -0
- package/esm2020/lib/directives/advanced-table-editor.directive.mjs +154 -0
- package/esm2020/lib/directives/btnexp.directive.mjs +222 -0
- package/esm2020/lib/i18n/tables.el.mjs +129 -0
- package/esm2020/lib/i18n/tables.en.mjs +128 -0
- package/esm2020/lib/pipes/advanced-aggregator.pipe.mjs +38 -0
- package/esm2020/lib/pipes/advansed-aggregator-list-title-parse.pipe.mjs +45 -0
- package/esm2020/lib/reducers/index.mjs +37 -0
- package/esm2020/lib/services/advanced-aggregator/advanced-aggregator.service.mjs +119 -0
- package/esm2020/lib/tables.activated-table.service.mjs +46 -0
- package/esm2020/lib/tables.module.mjs +218 -0
- package/esm2020/public_api.mjs +37 -0
- package/esm2020/universis-ngx-tables.mjs +5 -0
- package/fesm2015/{universis-ngx-tables.js → universis-ngx-tables.mjs} +2927 -2729
- package/fesm2015/universis-ngx-tables.mjs.map +1 -0
- package/fesm2020/universis-ngx-tables.mjs +5609 -0
- package/fesm2020/universis-ngx-tables.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/actions/table.actions.d.ts +4 -4
- package/lib/components/add-items/add-items.component.d.ts +14 -21
- package/lib/components/advanced-aggregator/advanced-aggregator.component.d.ts +15 -9
- package/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.d.ts +4 -1
- package/lib/components/advanced-list/advanced-list.component.d.ts +17 -14
- package/lib/components/advanced-row-action/advanced-row-action.component.d.ts +20 -23
- package/lib/components/advanced-search-form/advanced-search-form.component.d.ts +7 -4
- package/lib/components/advanced-select/advanced-select.component.d.ts +3 -1
- package/lib/components/advanced-select/advanced-select.service.d.ts +3 -0
- package/lib/components/advanced-table/advanced-filter-value-provider.service.d.ts +3 -0
- package/lib/components/advanced-table/advanced-table-resolvers.d.ts +5 -0
- package/lib/components/advanced-table/advanced-table-search-base.d.ts +6 -2
- package/lib/components/advanced-table/advanced-table-search.component.d.ts +11 -7
- package/lib/components/advanced-table/advanced-table-settings.component.d.ts +8 -6
- package/lib/components/advanced-table/advanced-table.component.d.ts +33 -25
- package/lib/components/advanced-table/advanced-table.formatters.d.ts +11 -11
- package/lib/components/advanced-table-modal/advanced-table-modal-base.component.d.ts +15 -12
- package/lib/components/column-selector/column-selector.component.d.ts +9 -6
- package/lib/components/column-selector/column-selector.service.d.ts +3 -0
- package/lib/components/table-simple-header/table-simple-header.component.d.ts +8 -3
- package/lib/directives/advance-search-state.directive.d.ts +6 -3
- package/lib/directives/advance-table-state.directive.d.ts +4 -1
- package/lib/directives/advanced-search-router-state.directive.d.ts +9 -6
- package/lib/directives/advanced-table-editor.directive.d.ts +4 -1
- package/lib/directives/btnexp.directive.d.ts +12 -9
- package/lib/i18n/tables.el.d.ts +107 -107
- package/lib/i18n/tables.en.d.ts +106 -106
- package/lib/pipes/advanced-aggregator.pipe.d.ts +7 -4
- package/lib/pipes/advansed-aggregator-list-title-parse.pipe.d.ts +9 -6
- package/lib/reducers/index.d.ts +5 -3
- package/lib/services/advanced-aggregator/advanced-aggregator.service.d.ts +11 -8
- package/lib/tables.activated-table.service.d.ts +10 -6
- package/lib/tables.module.d.ts +36 -0
- package/package.json +44 -36
- package/public_api.d.ts +3 -0
- package/bundles/universis-ngx-tables.umd.js +0 -6101
- package/bundles/universis-ngx-tables.umd.js.map +0 -1
- package/bundles/universis-ngx-tables.umd.min.js +0 -2
- package/bundles/universis-ngx-tables.umd.min.js.map +0 -1
- package/esm2015/lib/actions/table.actions.js +0 -28
- package/esm2015/lib/advanced-aggregator.js +0 -2
- package/esm2015/lib/components/add-items/add-items.component.js +0 -142
- package/esm2015/lib/components/advanced-aggregator/advanced-aggregator.component.js +0 -120
- package/esm2015/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.js +0 -53
- package/esm2015/lib/components/advanced-list/advanced-list.component.js +0 -173
- package/esm2015/lib/components/advanced-row-action/advanced-row-action.component.js +0 -184
- package/esm2015/lib/components/advanced-search-form/advanced-search-form.component.js +0 -142
- package/esm2015/lib/components/advanced-select/advanced-select.component.js +0 -65
- package/esm2015/lib/components/advanced-select/advanced-select.service.js +0 -40
- package/esm2015/lib/components/advanced-table/advanced-filter-value-provider.service.js +0 -37
- package/esm2015/lib/components/advanced-table/advanced-table-resolvers.js +0 -44
- package/esm2015/lib/components/advanced-table/advanced-table-search-base.js +0 -28
- package/esm2015/lib/components/advanced-table/advanced-table-search.component.js +0 -526
- package/esm2015/lib/components/advanced-table/advanced-table-settings.component.js +0 -109
- package/esm2015/lib/components/advanced-table/advanced-table.component.js +0 -1523
- package/esm2015/lib/components/advanced-table/advanced-table.formatters.interface.js +0 -18
- package/esm2015/lib/components/advanced-table/advanced-table.formatters.js +0 -429
- package/esm2015/lib/components/advanced-table/advanced-table.interfaces.js +0 -2
- package/esm2015/lib/components/advanced-table-modal/advanced-table-modal-base.component.js +0 -397
- package/esm2015/lib/components/column-selector/column-selector.component.js +0 -202
- package/esm2015/lib/components/column-selector/column-selector.service.js +0 -47
- package/esm2015/lib/components/table-simple-header/table-simple-header.component.js +0 -52
- package/esm2015/lib/directives/advance-search-state.directive.js +0 -108
- package/esm2015/lib/directives/advance-table-state.directive.js +0 -63
- package/esm2015/lib/directives/advanced-search-router-state.directive.js +0 -63
- package/esm2015/lib/directives/advanced-table-editor.directive.js +0 -156
- package/esm2015/lib/directives/btnexp.directive.js +0 -229
- package/esm2015/lib/i18n/tables.el.js +0 -130
- package/esm2015/lib/i18n/tables.en.js +0 -129
- package/esm2015/lib/pipes/advanced-aggregator.pipe.js +0 -35
- package/esm2015/lib/pipes/advansed-aggregator-list-title-parse.pipe.js +0 -46
- package/esm2015/lib/reducers/index.js +0 -32
- package/esm2015/lib/services/advanced-aggregator/advanced-aggregator.service.js +0 -120
- package/esm2015/lib/tables.activated-table.service.js +0 -50
- package/esm2015/lib/tables.module.js +0 -149
- package/esm2015/public_api.js +0 -33
- package/esm2015/universis-ngx-tables.js +0 -9
- package/esm5/lib/actions/table.actions.js +0 -34
- package/esm5/lib/advanced-aggregator.js +0 -2
- package/esm5/lib/components/add-items/add-items.component.js +0 -153
- package/esm5/lib/components/advanced-aggregator/advanced-aggregator.component.js +0 -169
- package/esm5/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.js +0 -56
- package/esm5/lib/components/advanced-list/advanced-list.component.js +0 -185
- package/esm5/lib/components/advanced-row-action/advanced-row-action.component.js +0 -188
- package/esm5/lib/components/advanced-search-form/advanced-search-form.component.js +0 -145
- package/esm5/lib/components/advanced-select/advanced-select.component.js +0 -71
- package/esm5/lib/components/advanced-select/advanced-select.service.js +0 -43
- package/esm5/lib/components/advanced-table/advanced-filter-value-provider.service.js +0 -50
- package/esm5/lib/components/advanced-table/advanced-table-resolvers.js +0 -48
- package/esm5/lib/components/advanced-table/advanced-table-search-base.js +0 -34
- package/esm5/lib/components/advanced-table/advanced-table-search.component.js +0 -563
- package/esm5/lib/components/advanced-table/advanced-table-settings.component.js +0 -115
- package/esm5/lib/components/advanced-table/advanced-table.component.js +0 -1548
- package/esm5/lib/components/advanced-table/advanced-table.formatters.interface.js +0 -18
- package/esm5/lib/components/advanced-table/advanced-table.formatters.js +0 -480
- package/esm5/lib/components/advanced-table/advanced-table.interfaces.js +0 -2
- package/esm5/lib/components/advanced-table-modal/advanced-table-modal-base.component.js +0 -314
- package/esm5/lib/components/column-selector/column-selector.component.js +0 -270
- package/esm5/lib/components/column-selector/column-selector.service.js +0 -50
- package/esm5/lib/components/table-simple-header/table-simple-header.component.js +0 -58
- package/esm5/lib/directives/advance-search-state.directive.js +0 -116
- package/esm5/lib/directives/advance-table-state.directive.js +0 -65
- package/esm5/lib/directives/advanced-search-router-state.directive.js +0 -71
- package/esm5/lib/directives/advanced-table-editor.directive.js +0 -196
- package/esm5/lib/directives/btnexp.directive.js +0 -257
- package/esm5/lib/i18n/tables.el.js +0 -130
- package/esm5/lib/i18n/tables.en.js +0 -129
- package/esm5/lib/pipes/advanced-aggregator.pipe.js +0 -39
- package/esm5/lib/pipes/advansed-aggregator-list-title-parse.pipe.js +0 -49
- package/esm5/lib/reducers/index.js +0 -34
- package/esm5/lib/services/advanced-aggregator/advanced-aggregator.service.js +0 -134
- package/esm5/lib/tables.activated-table.service.js +0 -57
- package/esm5/lib/tables.module.js +0 -154
- package/esm5/public_api.js +0 -33
- package/esm5/universis-ngx-tables.js +0 -9
- package/fesm2015/universis-ngx-tables.js.map +0 -1
- package/fesm5/universis-ngx-tables.js +0 -5737
- package/fesm5/universis-ngx-tables.js.map +0 -1
- package/universis-ngx-tables.d.ts +0 -8
- package/universis-ngx-tables.metadata.json +0 -1
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import * as tslib_1 from "tslib";
|
|
2
|
-
import { Directive, Optional } from "@angular/core";
|
|
3
|
-
import { NavigationEnd, NavigationStart, Router } from "@angular/router";
|
|
4
|
-
import { Store } from "@ngrx/store";
|
|
5
|
-
import { filter } from "rxjs/operators";
|
|
6
|
-
import { AdvancedTableSearchComponent } from "../components/advanced-table/advanced-table-search.component";
|
|
7
|
-
import { AdvancedSearchState } from "./advance-search-state.directive";
|
|
8
|
-
var AdvancedSearchRouterState = /** @class */ (function (_super) {
|
|
9
|
-
tslib_1.__extends(AdvancedSearchRouterState, _super);
|
|
10
|
-
function AdvancedSearchRouterState(search, store, _router) {
|
|
11
|
-
var _this =
|
|
12
|
-
// call super constructor
|
|
13
|
-
_super.call(this, search, store) || this;
|
|
14
|
-
_this.search = search;
|
|
15
|
-
_this.store = store;
|
|
16
|
-
_this._router = _router;
|
|
17
|
-
_this._enteringState = true;
|
|
18
|
-
_this._applyState = false;
|
|
19
|
-
// set search state dynamically according to route
|
|
20
|
-
_this._routerSubscription = _this._router.events
|
|
21
|
-
.pipe(filter(function (event) {
|
|
22
|
-
return event instanceof NavigationStart || event instanceof NavigationEnd;
|
|
23
|
-
}))
|
|
24
|
-
.subscribe(function (event) {
|
|
25
|
-
// capture urls regarding tab changing while the component is active
|
|
26
|
-
if (event instanceof NavigationStart && !_this._enteringState) {
|
|
27
|
-
// set search state
|
|
28
|
-
_this.searchState = event.url;
|
|
29
|
-
// toogle applyState
|
|
30
|
-
_this._applyState = true;
|
|
31
|
-
}
|
|
32
|
-
// capture url of the first activation of the component (e.g. coming from another route)
|
|
33
|
-
if (event instanceof NavigationEnd && _this._enteringState) {
|
|
34
|
-
// set search state
|
|
35
|
-
_this.searchState = event.urlAfterRedirects;
|
|
36
|
-
// toggle enteringState
|
|
37
|
-
_this._enteringState = false;
|
|
38
|
-
}
|
|
39
|
-
if (_this._applyState) {
|
|
40
|
-
// apply new table state
|
|
41
|
-
_super.prototype.applyTableState.call(_this);
|
|
42
|
-
_this._applyState = false;
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
return _this;
|
|
46
|
-
}
|
|
47
|
-
AdvancedSearchRouterState.prototype.ngOnDestroy = function () {
|
|
48
|
-
// destroy own subscriptions
|
|
49
|
-
if (this._routerSubscription) {
|
|
50
|
-
this._routerSubscription.unsubscribe();
|
|
51
|
-
}
|
|
52
|
-
// destroy parent subscriptions
|
|
53
|
-
return _super.prototype.ngOnDestroy.call(this);
|
|
54
|
-
};
|
|
55
|
-
AdvancedSearchRouterState.decorators = [
|
|
56
|
-
{ type: Directive, args: [{
|
|
57
|
-
// tslint:disable-next-line: directive-selector
|
|
58
|
-
selector: "[routerSearchState]",
|
|
59
|
-
},] }
|
|
60
|
-
];
|
|
61
|
-
/** @nocollapse */
|
|
62
|
-
AdvancedSearchRouterState.ctorParameters = function () { return [
|
|
63
|
-
{ type: AdvancedTableSearchComponent },
|
|
64
|
-
{ type: Store, decorators: [{ type: Optional }] },
|
|
65
|
-
{ type: Router }
|
|
66
|
-
]; };
|
|
67
|
-
return AdvancedSearchRouterState;
|
|
68
|
-
}(AdvancedSearchState));
|
|
69
|
-
export { AdvancedSearchRouterState };
|
|
70
|
-
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtc2VhcmNoLXJvdXRlci1zdGF0ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvIiwic291cmNlcyI6WyJsaWIvZGlyZWN0aXZlcy9hZHZhbmNlZC1zZWFyY2gtcm91dGVyLXN0YXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBRTVHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXZFO0lBS1MscURBQW1CO0lBTzNCLG1DQUNXLE1BQW9DLEVBQ3hCLEtBQTRCLEVBQ2pDLE9BQWU7UUFIakM7UUFLQyx5QkFBeUI7UUFDekIsa0JBQU0sTUFBTSxFQUFFLEtBQUssQ0FBQyxTQThCcEI7UUFuQ1UsWUFBTSxHQUFOLE1BQU0sQ0FBOEI7UUFDeEIsV0FBSyxHQUFMLEtBQUssQ0FBdUI7UUFDakMsYUFBTyxHQUFQLE9BQU8sQ0FBUTtRQU56QixvQkFBYyxHQUFZLElBQUksQ0FBQztRQUMvQixpQkFBVyxHQUFZLEtBQUssQ0FBQztRQVNwQyxrREFBa0Q7UUFDbEQsS0FBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTthQUM1QyxJQUFJLENBQ0osTUFBTSxDQUNMLFVBQUMsS0FBSztZQUNMLE9BQUEsS0FBSyxZQUFZLGVBQWUsSUFBSSxLQUFLLFlBQVksYUFBYTtRQUFsRSxDQUFrRSxDQUNuRSxDQUNEO2FBQ0EsU0FBUyxDQUFDLFVBQUMsS0FBc0M7WUFDakQsb0VBQW9FO1lBQ3BFLElBQUksS0FBSyxZQUFZLGVBQWUsSUFBSSxDQUFDLEtBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQzdELG1CQUFtQjtnQkFDbkIsS0FBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUM3QixvQkFBb0I7Z0JBQ3BCLEtBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ3hCO1lBQ0Qsd0ZBQXdGO1lBQ3hGLElBQUksS0FBSyxZQUFZLGFBQWEsSUFBSSxLQUFJLENBQUMsY0FBYyxFQUFFO2dCQUMxRCxtQkFBbUI7Z0JBQ25CLEtBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO2dCQUMzQyx1QkFBdUI7Z0JBQ3ZCLEtBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO2FBQzVCO1lBQ0QsSUFBSSxLQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNyQix3QkFBd0I7Z0JBQ3hCLGlCQUFNLGVBQWUsWUFBRSxDQUFDO2dCQUN4QixLQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQzthQUN6QjtRQUNGLENBQUMsQ0FBQyxDQUFDOztJQUNMLENBQUM7SUFFRCwrQ0FBVyxHQUFYO1FBQ0MsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN2QztRQUNELCtCQUErQjtRQUMvQixPQUFPLGlCQUFNLFdBQVcsV0FBRSxDQUFDO0lBQzVCLENBQUM7O2dCQXpERCxTQUFTLFNBQUM7b0JBQ1YsK0NBQStDO29CQUMvQyxRQUFRLEVBQUUscUJBQXFCO2lCQUMvQjs7OztnQkFQUSw0QkFBNEI7Z0JBSDVCLEtBQUssdUJBcUJYLFFBQVE7Z0JBdEI4QixNQUFNOztJQWtFL0MsZ0NBQUM7Q0FBQSxBQTFERCxDQUtTLG1CQUFtQixHQXFEM0I7U0F0RFkseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gXCJAbmdyeC9zdG9yZVwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC5jb21wb25lbnRcIjtcbmltcG9ydCB7IE5neFRhYmxlc1N0YXRlIH0gZnJvbSBcIi4uL3JlZHVjZXJzXCI7XG5pbXBvcnQgeyBBZHZhbmNlZFNlYXJjaFN0YXRlIH0gZnJvbSBcIi4vYWR2YW5jZS1zZWFyY2gtc3RhdGUuZGlyZWN0aXZlXCI7XG5cbkBEaXJlY3RpdmUoe1xuXHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRpcmVjdGl2ZS1zZWxlY3RvclxuXHRzZWxlY3RvcjogXCJbcm91dGVyU2VhcmNoU3RhdGVdXCIsXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VhcmNoUm91dGVyU3RhdGVcblx0ZXh0ZW5kcyBBZHZhbmNlZFNlYXJjaFN0YXRlXG5cdGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXRcbntcblx0cHJpdmF0ZSBfcm91dGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cdHByaXZhdGUgX2VudGVyaW5nU3RhdGU6IGJvb2xlYW4gPSB0cnVlO1xuXHRwcml2YXRlIF9hcHBseVN0YXRlOiBib29sZWFuID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJvdGVjdGVkIHNlYXJjaDogQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCxcblx0XHRAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgc3RvcmU6IFN0b3JlPE5neFRhYmxlc1N0YXRlPixcblx0XHRwcml2YXRlIHJlYWRvbmx5IF9yb3V0ZXI6IFJvdXRlclxuXHQpIHtcblx0XHQvLyBjYWxsIHN1cGVyIGNvbnN0cnVjdG9yXG5cdFx0c3VwZXIoc2VhcmNoLCBzdG9yZSk7XG5cdFx0Ly8gc2V0IHNlYXJjaCBzdGF0ZSBkeW5hbWljYWxseSBhY2NvcmRpbmcgdG8gcm91dGVcblx0XHR0aGlzLl9yb3V0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLl9yb3V0ZXIuZXZlbnRzXG5cdFx0XHQucGlwZShcblx0XHRcdFx0ZmlsdGVyKFxuXHRcdFx0XHRcdChldmVudCkgPT5cblx0XHRcdFx0XHRcdGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0IHx8IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZFxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKChldmVudDogTmF2aWdhdGlvblN0YXJ0IHwgTmF2aWdhdGlvbkVuZCkgPT4ge1xuXHRcdFx0XHQvLyBjYXB0dXJlIHVybHMgcmVnYXJkaW5nIHRhYiBjaGFuZ2luZyB3aGlsZSB0aGUgY29tcG9uZW50IGlzIGFjdGl2ZVxuXHRcdFx0XHRpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQgJiYgIXRoaXMuX2VudGVyaW5nU3RhdGUpIHtcblx0XHRcdFx0XHQvLyBzZXQgc2VhcmNoIHN0YXRlXG5cdFx0XHRcdFx0dGhpcy5zZWFyY2hTdGF0ZSA9IGV2ZW50LnVybDtcblx0XHRcdFx0XHQvLyB0b29nbGUgYXBwbHlTdGF0ZVxuXHRcdFx0XHRcdHRoaXMuX2FwcGx5U3RhdGUgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGNhcHR1cmUgdXJsIG9mIHRoZSBmaXJzdCBhY3RpdmF0aW9uIG9mIHRoZSBjb21wb25lbnQgKGUuZy4gY29taW5nIGZyb20gYW5vdGhlciByb3V0ZSlcblx0XHRcdFx0aWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCAmJiB0aGlzLl9lbnRlcmluZ1N0YXRlKSB7XG5cdFx0XHRcdFx0Ly8gc2V0IHNlYXJjaCBzdGF0ZVxuXHRcdFx0XHRcdHRoaXMuc2VhcmNoU3RhdGUgPSBldmVudC51cmxBZnRlclJlZGlyZWN0cztcblx0XHRcdFx0XHQvLyB0b2dnbGUgZW50ZXJpbmdTdGF0ZVxuXHRcdFx0XHRcdHRoaXMuX2VudGVyaW5nU3RhdGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fYXBwbHlTdGF0ZSkge1xuXHRcdFx0XHRcdC8vIGFwcGx5IG5ldyB0YWJsZSBzdGF0ZVxuXHRcdFx0XHRcdHN1cGVyLmFwcGx5VGFibGVTdGF0ZSgpO1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5U3RhdGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHQvLyBkZXN0cm95IG93biBzdWJzY3JpcHRpb25zXG5cdFx0aWYgKHRoaXMuX3JvdXRlclN1YnNjcmlwdGlvbikge1xuXHRcdFx0dGhpcy5fcm91dGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cdFx0fVxuXHRcdC8vIGRlc3Ryb3kgcGFyZW50IHN1YnNjcmlwdGlvbnNcblx0XHRyZXR1cm4gc3VwZXIubmdPbkRlc3Ryb3koKTtcblx0fVxufVxuIl19
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import * as tslib_1 from "tslib";
|
|
2
|
-
import { Directive, Output, EventEmitter, } from '@angular/core';
|
|
3
|
-
import { AdvancedTableComponent } from '../components/advanced-table/advanced-table.component';
|
|
4
|
-
var AdvancedTableNotNullError = /** @class */ (function (_super) {
|
|
5
|
-
tslib_1.__extends(AdvancedTableNotNullError, _super);
|
|
6
|
-
function AdvancedTableNotNullError() {
|
|
7
|
-
return _super.call(this, 'Advanced table component cannot be empty at this context.') || this;
|
|
8
|
-
}
|
|
9
|
-
return AdvancedTableNotNullError;
|
|
10
|
-
}(Error));
|
|
11
|
-
export { AdvancedTableNotNullError };
|
|
12
|
-
var AdvancedTableEditorDirective = /** @class */ (function () {
|
|
13
|
-
function AdvancedTableEditorDirective(table) {
|
|
14
|
-
this.table = table;
|
|
15
|
-
this.dirty = false;
|
|
16
|
-
this.dirtyChange = new EventEmitter(false);
|
|
17
|
-
//
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Add rows to table and mark them as added rows
|
|
21
|
-
*/
|
|
22
|
-
AdvancedTableEditorDirective.prototype.add = function () {
|
|
23
|
-
var addItems = [];
|
|
24
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
25
|
-
addItems[_i] = arguments[_i];
|
|
26
|
-
}
|
|
27
|
-
var e_1, _a;
|
|
28
|
-
if (this.table == null) {
|
|
29
|
-
throw new AdvancedTableNotNullError();
|
|
30
|
-
}
|
|
31
|
-
// decorate items
|
|
32
|
-
var key = this.table.config.columns[0].property || this.table.config.columns[0].name;
|
|
33
|
-
try {
|
|
34
|
-
for (var addItems_1 = tslib_1.__values(addItems), addItems_1_1 = addItems_1.next(); !addItems_1_1.done; addItems_1_1 = addItems_1.next()) {
|
|
35
|
-
var element = addItems_1_1.value;
|
|
36
|
-
var tr = this.table.dataTable.rows(':has(input[data-id="' + element[key] + '"])').nodes().to$();
|
|
37
|
-
if (tr.hasClass('removed')) {
|
|
38
|
-
tr.toggleClass('removed text-gray-400 text-decoration-line-through');
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
this.table.dataTable.rows.add([element]);
|
|
42
|
-
tr = this.table.dataTable.rows(':has(input[data-id="' + element[key] + '"])').nodes().to$();
|
|
43
|
-
tr.toggleClass('added font-weight-bold text-success');
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
48
|
-
finally {
|
|
49
|
-
try {
|
|
50
|
-
if (addItems_1_1 && !addItems_1_1.done && (_a = addItems_1.return)) _a.call(addItems_1);
|
|
51
|
-
}
|
|
52
|
-
finally { if (e_1) throw e_1.error; }
|
|
53
|
-
}
|
|
54
|
-
this.table.dataTable.draw();
|
|
55
|
-
// find removed
|
|
56
|
-
var removedLength = this.table.dataTable.rows('.removed')[0].length;
|
|
57
|
-
// find added
|
|
58
|
-
var addedLength = this.table.dataTable.rows('.added')[0].length;
|
|
59
|
-
// and emit event
|
|
60
|
-
var items = this.table.dataTable.rows().data();
|
|
61
|
-
this.table.load.emit({
|
|
62
|
-
data: items,
|
|
63
|
-
recordsFiltered: items.length - removedLength,
|
|
64
|
-
recordsTotal: items.length - removedLength,
|
|
65
|
-
});
|
|
66
|
-
this.dirty = (removedLength > 0 || addedLength > 0);
|
|
67
|
-
this.dirtyChange.emit(this.dirty);
|
|
68
|
-
};
|
|
69
|
-
/**
|
|
70
|
-
* Marks rows as removed rows
|
|
71
|
-
*/
|
|
72
|
-
AdvancedTableEditorDirective.prototype.remove = function () {
|
|
73
|
-
var removeItems = [];
|
|
74
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
75
|
-
removeItems[_i] = arguments[_i];
|
|
76
|
-
}
|
|
77
|
-
var e_2, _a;
|
|
78
|
-
if (this.table == null) {
|
|
79
|
-
throw new AdvancedTableNotNullError();
|
|
80
|
-
}
|
|
81
|
-
// get key
|
|
82
|
-
var key = this.table.config.columns[0].property || this.table.config.columns[0].name;
|
|
83
|
-
var _loop_1 = function (element) {
|
|
84
|
-
var tr = this_1.table.dataTable.rows(':has(input[data-id="' + element[key] + '"])').nodes().to$();
|
|
85
|
-
// if row is marked as added
|
|
86
|
-
if (tr.hasClass('added')) {
|
|
87
|
-
// remove this dirty row
|
|
88
|
-
this_1.table.dataTable.rows(tr).remove();
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
// otherwise unmarked row
|
|
92
|
-
tr.toggleClass('removed text-gray-400 text-decoration-line-through');
|
|
93
|
-
}
|
|
94
|
-
// check if item is selected
|
|
95
|
-
var selectedIndex = this_1.table.selected.findIndex(function (item) {
|
|
96
|
-
return item[key] === element[key];
|
|
97
|
-
});
|
|
98
|
-
// and remove it from selected collection
|
|
99
|
-
if (selectedIndex >= 0) {
|
|
100
|
-
this_1.table.selected.splice(selectedIndex, 1);
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
var this_1 = this;
|
|
104
|
-
try {
|
|
105
|
-
// loop items
|
|
106
|
-
for (var removeItems_1 = tslib_1.__values(removeItems), removeItems_1_1 = removeItems_1.next(); !removeItems_1_1.done; removeItems_1_1 = removeItems_1.next()) {
|
|
107
|
-
var element = removeItems_1_1.value;
|
|
108
|
-
_loop_1(element);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
112
|
-
finally {
|
|
113
|
-
try {
|
|
114
|
-
if (removeItems_1_1 && !removeItems_1_1.done && (_a = removeItems_1.return)) _a.call(removeItems_1);
|
|
115
|
-
}
|
|
116
|
-
finally { if (e_2) throw e_2.error; }
|
|
117
|
-
}
|
|
118
|
-
// re-draw table
|
|
119
|
-
this.table.dataTable.draw();
|
|
120
|
-
// get number of table items
|
|
121
|
-
var items = this.table.dataTable.rows().data();
|
|
122
|
-
// get number of removed items
|
|
123
|
-
var removedLength = this.table.dataTable.rows('.removed')[0].length;
|
|
124
|
-
// get number of added items
|
|
125
|
-
var addedLength = this.table.dataTable.rows('.added')[0].length;
|
|
126
|
-
// refresh
|
|
127
|
-
this.table.load.emit({
|
|
128
|
-
data: items,
|
|
129
|
-
recordsFiltered: items.length - removedLength,
|
|
130
|
-
recordsTotal: items.length - removedLength,
|
|
131
|
-
});
|
|
132
|
-
this.dirty = (removedLength > 0 || addedLength > 0);
|
|
133
|
-
this.dirtyChange.emit(this.dirty);
|
|
134
|
-
};
|
|
135
|
-
AdvancedTableEditorDirective.prototype.set = function (items) {
|
|
136
|
-
if (this.table == null) {
|
|
137
|
-
throw new AdvancedTableNotNullError();
|
|
138
|
-
}
|
|
139
|
-
// clear rows
|
|
140
|
-
this.table.selected = [];
|
|
141
|
-
this.table.dataTable.clear();
|
|
142
|
-
// set items
|
|
143
|
-
this.table.dataTable.rows.add(items).draw();
|
|
144
|
-
this.table.load.emit({
|
|
145
|
-
data: items,
|
|
146
|
-
recordsFiltered: items.length,
|
|
147
|
-
recordsTotal: items.length,
|
|
148
|
-
});
|
|
149
|
-
};
|
|
150
|
-
/**
|
|
151
|
-
* Undo changes
|
|
152
|
-
*/
|
|
153
|
-
AdvancedTableEditorDirective.prototype.undo = function () {
|
|
154
|
-
if (this.table == null) {
|
|
155
|
-
throw new AdvancedTableNotNullError();
|
|
156
|
-
}
|
|
157
|
-
// reset removed rows
|
|
158
|
-
this.table.dataTable.rows('.removed').nodes().to$().toggleClass('removed text-gray-400 text-decoration-line-through');
|
|
159
|
-
// remove added rows
|
|
160
|
-
this.table.dataTable.rows('.added').remove();
|
|
161
|
-
// clear selected items
|
|
162
|
-
this.table.selected = [];
|
|
163
|
-
var items = this.table.dataTable.rows().data();
|
|
164
|
-
this.table.dataTable.draw();
|
|
165
|
-
this.table.load.emit({
|
|
166
|
-
data: items,
|
|
167
|
-
recordsFiltered: items.length,
|
|
168
|
-
recordsTotal: items.length,
|
|
169
|
-
});
|
|
170
|
-
this.dirty = false;
|
|
171
|
-
this.dirtyChange.emit(this.dirty);
|
|
172
|
-
};
|
|
173
|
-
AdvancedTableEditorDirective.prototype.rows = function () {
|
|
174
|
-
if (this.table == null) {
|
|
175
|
-
throw new AdvancedTableNotNullError();
|
|
176
|
-
}
|
|
177
|
-
return Array.from(this.table.dataTable.rows(':not(.removed)').data());
|
|
178
|
-
};
|
|
179
|
-
AdvancedTableEditorDirective.decorators = [
|
|
180
|
-
{ type: Directive, args: [{
|
|
181
|
-
// tslint:disable-next-line: directive-selector
|
|
182
|
-
selector: '[tableEditor]',
|
|
183
|
-
},] }
|
|
184
|
-
];
|
|
185
|
-
/** @nocollapse */
|
|
186
|
-
AdvancedTableEditorDirective.ctorParameters = function () { return [
|
|
187
|
-
{ type: AdvancedTableComponent }
|
|
188
|
-
]; };
|
|
189
|
-
AdvancedTableEditorDirective.propDecorators = {
|
|
190
|
-
dirtyChange: [{ type: Output }]
|
|
191
|
-
};
|
|
192
|
-
return AdvancedTableEditorDirective;
|
|
193
|
-
}());
|
|
194
|
-
export { AdvancedTableEditorDirective };
|
|
195
|
-
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUtZWRpdG9yLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmVzL2FkdmFuY2VkLXRhYmxlLWVkaXRvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksR0FDaEMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFFL0Y7SUFBK0MscURBQUs7SUFDbEQ7ZUFDRSxrQkFBTSwyREFBMkQsQ0FBQztJQUNwRSxDQUFDO0lBQ0gsZ0NBQUM7QUFBRCxDQUFDLEFBSkQsQ0FBK0MsS0FBSyxHQUluRDs7QUFFRDtJQVdFLHNDQUFvQixLQUE2QjtRQUE3QixVQUFLLEdBQUwsS0FBSyxDQUF3QjtRQUgxQyxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ0osZ0JBQVcsR0FBMEIsSUFBSSxZQUFZLENBQVUsS0FBSyxDQUFDLENBQUM7UUFHckYsRUFBRTtJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLDBDQUFHLEdBQVY7UUFBVyxrQkFBa0I7YUFBbEIsVUFBa0IsRUFBbEIscUJBQWtCLEVBQWxCLElBQWtCO1lBQWxCLDZCQUFrQjs7O1FBQzNCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDdEIsTUFBTSxJQUFJLHlCQUF5QixFQUFFLENBQUM7U0FDdkM7UUFDRCxpQkFBaUI7UUFDakIsSUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOztZQUN2RixLQUFzQixJQUFBLGFBQUEsaUJB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QTlJRixTQUFTLFNBQ1Q7b0JBQ0UsK0NBQStDO29CQUMvQyxRQUFRLEVBQUUsZUFBZTtpQkFDMUI7Ozs7Z0JBWk8sc0JBQXNCOzs7OEJBaUI1QixNQUFNOztJQXVJVCxtQ0FBQztDQUFBLEFBaEpELElBZ0pDO1NBMUlZLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdBZHZhbmNlZCB0YWJsZSBjb21wb25lbnQgY2Fubm90IGJlIGVtcHR5IGF0IHRoaXMgY29udGV4dC4nKTtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKFxuIHtcbiAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLXNlbGVjdG9yXG4gICBzZWxlY3RvcjogJ1t0YWJsZUVkaXRvcl0nLFxuIH0sXG4pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUVkaXRvckRpcmVjdGl2ZSB7XG5cbiAgcHVibGljIGRpcnR5ID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBwdWJsaWMgZGlydHlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFibGU6IEFkdmFuY2VkVGFibGVDb21wb25lbnQpIHtcbiAgICAvL1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCByb3dzIHRvIHRhYmxlIGFuZCBtYXJrIHRoZW0gYXMgYWRkZWQgcm93c1xuICAgKi9cbiAgcHVibGljIGFkZCguLi5hZGRJdGVtczogYW55W10pIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICAvLyBkZWNvcmF0ZSBpdGVtc1xuICAgIGNvbnN0IGtleSA9IHRoaXMudGFibGUuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy50YWJsZS5jb25maWcuY29sdW1uc1swXS5uYW1lO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBhZGRJdGVtcykge1xuICAgICAgbGV0IHRyID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnOmhhcyhpbnB1dFtkYXRhLWlkPVwiJyArIGVsZW1lbnRba2V5XSArICdcIl0pJykubm9kZXMoKS50byQoKTtcbiAgICAgIGlmICh0ci5oYXNDbGFzcygncmVtb3ZlZCcpKSB7XG4gICAgICAgIHRyLnRvZ2dsZUNsYXNzKCdyZW1vdmVkIHRleHQtZ3JheS00MDAgdGV4dC1kZWNvcmF0aW9uLWxpbmUtdGhyb3VnaCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cy5hZGQoW2VsZW1lbnRdKTtcbiAgICAgICAgdHIgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCc6aGFzKGlucHV0W2RhdGEtaWQ9XCInICsgZWxlbWVudFtrZXldICsgJ1wiXSknKS5ub2RlcygpLnRvJCgpO1xuICAgICAgICB0ci50b2dnbGVDbGFzcygnYWRkZWQgZm9udC13ZWlnaHQtYm9sZCB0ZXh0LXN1Y2Nlc3MnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUuZHJhdygpO1xuICAgIC8vIGZpbmQgcmVtb3ZlZFxuICAgIGNvbnN0IHJlbW92ZWRMZW5ndGggPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcucmVtb3ZlZCcpWzBdLmxlbmd0aDtcbiAgICAvLyBmaW5kIGFkZGVkXG4gICAgY29uc3QgYWRkZWRMZW5ndGggPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcuYWRkZWQnKVswXS5sZW5ndGg7XG4gICAgLy8gYW5kIGVtaXQgZXZlbnRcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCk7XG4gICAgdGhpcy50YWJsZS5sb2FkLmVtaXQoe1xuICAgICAgZGF0YTogaXRlbXMsXG4gICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLmxlbmd0aCAtIHJlbW92ZWRMZW5ndGgsXG4gICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLmxlbmd0aCAtIHJlbW92ZWRMZW5ndGgsXG4gICAgfSk7XG4gICAgdGhpcy5kaXJ0eSA9IChyZW1vdmVkTGVuZ3RoID4gMCB8fCBhZGRlZExlbmd0aCA+IDApO1xuICAgIHRoaXMuZGlydHlDaGFuZ2UuZW1pdCh0aGlzLmRpcnR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrcyByb3dzIGFzIHJlbW92ZWQgcm93c1xuICAgKi9cbiAgcHVibGljIHJlbW92ZSguLi5yZW1vdmVJdGVtczogYW55W10pIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICAvLyBnZXQga2V5XG4gICAgY29uc3Qga2V5ID0gdGhpcy50YWJsZS5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLnRhYmxlLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWU7XG4gICAgLy8gbG9vcCBpdGVtc1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiByZW1vdmVJdGVtcykge1xuICAgICAgICBjb25zdCB0ciA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJzpoYXMoaW5wdXRbZGF0YS1pZD1cIicgKyBlbGVtZW50W2tleV0gKyAnXCJdKScpLm5vZGVzKCkudG8kKCk7XG4gICAgICAgIC8vIGlmIHJvdyBpcyBtYXJrZWQgYXMgYWRkZWRcbiAgICAgICAgaWYgKHRyLmhhc0NsYXNzKCdhZGRlZCcpKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRoaXMgZGlydHkgcm93XG4gICAgICAgICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cyh0cikucmVtb3ZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHVubWFya2VkIHJvd1xuICAgICAgICAgIHRyLnRvZ2dsZUNsYXNzKCdyZW1vdmVkIHRleHQtZ3JheS00MDAgdGV4dC1kZWNvcmF0aW9uLWxpbmUtdGhyb3VnaCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNrIGlmIGl0ZW0gaXMgc2VsZWN0ZWRcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMudGFibGUuc2VsZWN0ZWQuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gZWxlbWVudFtrZXldO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW5kIHJlbW92ZSBpdCBmcm9tIHNlbGVjdGVkIGNvbGxlY3Rpb25cbiAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPj0gMCkge1xuICAgICAgICAgIHRoaXMudGFibGUuc2VsZWN0ZWQuc3BsaWNlKHNlbGVjdGVkSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyByZS1kcmF3IHRhYmxlXG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUuZHJhdygpO1xuICAgICAgLy8gZ2V0IG51bWJlciBvZiB0YWJsZSBpdGVtc1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygpLmRhdGEoKTtcbiAgICAgIC8vIGdldCBudW1iZXIgb2YgcmVtb3ZlZCBpdGVtc1xuICAgIGNvbnN0IHJlbW92ZWRMZW5ndGggPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcucmVtb3ZlZCcpWzBdLmxlbmd0aDtcbiAgICAgIC8vIGdldCBudW1iZXIgb2YgYWRkZWQgaXRlbXNcbiAgICBjb25zdCBhZGRlZExlbmd0aCA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5hZGRlZCcpWzBdLmxlbmd0aDtcbiAgICAgIC8vIHJlZnJlc2hcbiAgICB0aGlzLnRhYmxlLmxvYWQuZW1pdCh7XG4gICAgICAgIGRhdGE6IGl0ZW1zLFxuICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLmxlbmd0aCAtIHJlbW92ZWRMZW5ndGgsXG4gICAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMubGVuZ3RoIC0gcmVtb3ZlZExlbmd0aCxcbiAgICAgIH0pO1xuICAgIHRoaXMuZGlydHkgPSAocmVtb3ZlZExlbmd0aCA+IDAgfHwgYWRkZWRMZW5ndGggPiAwKTtcbiAgICB0aGlzLmRpcnR5Q2hhbmdlLmVtaXQodGhpcy5kaXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgc2V0KGl0ZW1zOiBhbnlbXSkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIC8vIGNsZWFyIHJvd3NcbiAgICB0aGlzLnRhYmxlLnNlbGVjdGVkID0gW107XG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUuY2xlYXIoKTtcbiAgICAvLyBzZXQgaXRlbXNcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzLmFkZChpdGVtcykuZHJhdygpO1xuICAgIHRoaXMudGFibGUubG9hZC5lbWl0KHtcbiAgICAgIGRhdGE6IGl0ZW1zLFxuICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy5sZW5ndGgsXG4gICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLmxlbmd0aCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmRvIGNoYW5nZXNcbiAgICovXG4gIHB1YmxpYyB1bmRvKCkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIC8vIHJlc2V0IHJlbW92ZWQgcm93c1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5yZW1vdmVkJykubm9kZXMoKS50byQoKS50b2dnbGVDbGFzcygncmVtb3ZlZCB0ZXh0LWdyYXktNDAwIHRleHQtZGVjb3JhdGlvbi1saW5lLXRocm91Z2gnKTtcbiAgICAvLyByZW1vdmUgYWRkZWQgcm93c1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5hZGRlZCcpLnJlbW92ZSgpO1xuICAgIC8vIGNsZWFyIHNlbGVjdGVkIGl0ZW1zXG4gICAgdGhpcy50YWJsZS5zZWxlY3RlZCA9IFtdO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygpLmRhdGEoKTtcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgdGhpcy50YWJsZS5sb2FkLmVtaXQoe1xuICAgICAgZGF0YTogaXRlbXMsXG4gICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMubGVuZ3RoLFxuICAgIH0pO1xuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB0aGlzLmRpcnR5Q2hhbmdlLmVtaXQodGhpcy5kaXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgcm93cygpIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCc6bm90KC5yZW1vdmVkKScpLmRhdGEoKSk7XG4gIH1cblxufVxuIl19
|
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
import * as tslib_1 from "tslib";
|
|
2
|
-
import { Directive, HostListener } from '@angular/core';
|
|
3
|
-
import { ActivatedTableService } from '../tables.activated-table.service';
|
|
4
|
-
import { AngularDataContext } from '@themost/angular';
|
|
5
|
-
import { ConfigurationService, ErrorService, LoadingService } from '@universis/common';
|
|
6
|
-
import { TranslateService } from '@ngx-translate/core';
|
|
7
|
-
import { ResponseError } from '@themost/client';
|
|
8
|
-
export var MAX_EXPORT_ITEMS = 500;
|
|
9
|
-
var BtnExpDirective = /** @class */ (function () {
|
|
10
|
-
function BtnExpDirective(_activatedTable, _context, _config, _translate, _loadingService, _errorService) {
|
|
11
|
-
this._activatedTable = _activatedTable;
|
|
12
|
-
this._context = _context;
|
|
13
|
-
this._config = _config;
|
|
14
|
-
this._translate = _translate;
|
|
15
|
-
this._loadingService = _loadingService;
|
|
16
|
-
this._errorService = _errorService;
|
|
17
|
-
}
|
|
18
|
-
BtnExpDirective.prototype.clickEvent = function (event) {
|
|
19
|
-
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
20
|
-
return tslib_1.__generator(this, function (_a) {
|
|
21
|
-
event.preventDefault();
|
|
22
|
-
event.stopPropagation();
|
|
23
|
-
if (this._activatedTable.activeTable) {
|
|
24
|
-
return [2 /*return*/, this._activatedTable.activeTable.exportView()];
|
|
25
|
-
/*
|
|
26
|
-
const lastQuery = this._activatedTable.activeTable.lastQuery;
|
|
27
|
-
const tableConfig = this._activatedTable.activeTable.config;
|
|
28
|
-
const serviceHeaders = this._context.getService().getHeaders();
|
|
29
|
-
const queryModel = lastQuery.getModel();
|
|
30
|
-
let query = this._context.model(queryModel).asQueryable();
|
|
31
|
-
const queryParams = lastQuery.getParams();
|
|
32
|
-
query = this.constructQuery(query, queryParams, tableConfig, serviceHeaders);
|
|
33
|
-
// get export settings
|
|
34
|
-
const exportSettings = this._config.settings as ExportLimitConfiguration;
|
|
35
|
-
// get export limit
|
|
36
|
-
const maxExportItems = exportSettings && exportSettings.tables && exportSettings.tables.exportLimit;
|
|
37
|
-
if (maxExportItems && typeof maxExportItems === 'number' && maxExportItems > 0) {
|
|
38
|
-
query.skip(0).take(maxExportItems);
|
|
39
|
-
} else {
|
|
40
|
-
query.skip(0).take(MAX_EXPORT_ITEMS);
|
|
41
|
-
}
|
|
42
|
-
// This constructs the URI based on the way @themost does
|
|
43
|
-
const url = this.constructURL(query);
|
|
44
|
-
this.downloadFile(url, query.getService().getHeaders(), query.getModel()); */
|
|
45
|
-
}
|
|
46
|
-
return [2 /*return*/];
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
};
|
|
50
|
-
/**
|
|
51
|
-
* Sets the parameters to the query based on
|
|
52
|
-
* the active filters of the activated table
|
|
53
|
-
* @param {ClientDataQueryable} query
|
|
54
|
-
* @param params: The filters of the last query of the activated table
|
|
55
|
-
* @return ClientDataQueryable
|
|
56
|
-
*/
|
|
57
|
-
BtnExpDirective.prototype.setParams = function (query, params) {
|
|
58
|
-
if (params && typeof params === 'object') {
|
|
59
|
-
Object.keys(params).forEach(function (key) {
|
|
60
|
-
query.setParam(key, params[key]);
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
return query;
|
|
64
|
-
};
|
|
65
|
-
/**
|
|
66
|
-
* Sets the headers to the query based on
|
|
67
|
-
* the default headers of the DataContext
|
|
68
|
-
* and appending the accept header to get
|
|
69
|
-
* an xlsx file from the API
|
|
70
|
-
* @param {ClientDataQueryable} query
|
|
71
|
-
* @param {Headers} headers: The headers to append to the query
|
|
72
|
-
* @return ClientDataQueryable
|
|
73
|
-
*/
|
|
74
|
-
BtnExpDirective.prototype.setHeaders = function (query, headers) {
|
|
75
|
-
Object.keys(headers).forEach(function (key) {
|
|
76
|
-
if (headers.hasOwnProperty(key)) {
|
|
77
|
-
query.getService().setHeader(key, headers[key]);
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
// sets a header to accept xlsx files
|
|
81
|
-
query.getService().setHeader('Accept', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
|
82
|
-
return query;
|
|
83
|
-
};
|
|
84
|
-
/**
|
|
85
|
-
* Constructs the select parameter of the
|
|
86
|
-
* ClientDataQuery by replacing the target name
|
|
87
|
-
* of the field based on the localized translation
|
|
88
|
-
* of that property on the advanced tabled
|
|
89
|
-
* @param {ClientDataQueryable} query
|
|
90
|
-
* @param tableConfig: The configuration of the activated table
|
|
91
|
-
* @return ClientDataQueryable
|
|
92
|
-
*/
|
|
93
|
-
BtnExpDirective.prototype.constructQueryParam = function (query, tableConfig) {
|
|
94
|
-
var _this = this;
|
|
95
|
-
var selectQuery = query.getParams().$select;
|
|
96
|
-
var selectQueryArray = selectQuery.split(',');
|
|
97
|
-
selectQueryArray = selectQueryArray.map(function (select) {
|
|
98
|
-
var e_1, _a, e_2, _b;
|
|
99
|
-
var words = select.split(' ');
|
|
100
|
-
if (words.length === 3) {
|
|
101
|
-
if (tableConfig && tableConfig.columns) {
|
|
102
|
-
try {
|
|
103
|
-
for (var _c = tslib_1.__values(tableConfig.columns), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
104
|
-
var column = _d.value;
|
|
105
|
-
if (column.property === words[2] && column.title) {
|
|
106
|
-
words[2] = "\"" + _this._translate.instant(column.title) + "\"";
|
|
107
|
-
}
|
|
108
|
-
else if (column.property === words[2]) {
|
|
109
|
-
words[2] = "\"" + _this._translate.instant(words[2]) + "\"";
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
114
|
-
finally {
|
|
115
|
-
try {
|
|
116
|
-
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
117
|
-
}
|
|
118
|
-
finally { if (e_1) throw e_1.error; }
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
if (words.length === 1) {
|
|
123
|
-
if (tableConfig && tableConfig.columns) {
|
|
124
|
-
try {
|
|
125
|
-
for (var _e = tslib_1.__values(tableConfig.columns), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
126
|
-
var column = _f.value;
|
|
127
|
-
if (column.name === words[0] && column.title) {
|
|
128
|
-
words[0] = words[0] + " as \"" + _this._translate.instant(column.title) + "\"";
|
|
129
|
-
break;
|
|
130
|
-
}
|
|
131
|
-
else if (column.name === words[0] && column.property) {
|
|
132
|
-
words[0] = words[0] + " as \"" + _this._translate.instant(column.property) + "\"";
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
else if (words[0] === column.name && words[0] === "id" && column.hidden) {
|
|
136
|
-
break;
|
|
137
|
-
}
|
|
138
|
-
else if (words[0] == column.name || words[0] === column.property) {
|
|
139
|
-
words[0] = words[0] + " as \"" + _this._translate.instant(words[0]) + "\"";
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
144
|
-
finally {
|
|
145
|
-
try {
|
|
146
|
-
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
147
|
-
}
|
|
148
|
-
finally { if (e_2) throw e_2.error; }
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
return words[0];
|
|
152
|
-
}
|
|
153
|
-
return words.join(' ');
|
|
154
|
-
});
|
|
155
|
-
selectQuery = selectQueryArray.join(',');
|
|
156
|
-
query.setParam('$select', selectQuery);
|
|
157
|
-
return query;
|
|
158
|
-
};
|
|
159
|
-
/**
|
|
160
|
-
* Constructs the fetch URL based the query parameters
|
|
161
|
-
* @param {ClientDataQueryable} query
|
|
162
|
-
* @return String
|
|
163
|
-
*/
|
|
164
|
-
BtnExpDirective.prototype.constructURL = function (query) {
|
|
165
|
-
var baseURL = query.getService().getBase();
|
|
166
|
-
var url = baseURL.endsWith('/') ? (baseURL + query.getModel() + '?') : (baseURL + '/' + query.getModel() + '?');
|
|
167
|
-
Object.keys(query.getParams()).forEach(function (key, index) {
|
|
168
|
-
if (index === 0) {
|
|
169
|
-
url += key + '=' + query.getParams()[key];
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
url += '&' + key + '=' + query.getParams()[key];
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
return url;
|
|
176
|
-
};
|
|
177
|
-
/**
|
|
178
|
-
* Constructs the query by setting the parameters of the
|
|
179
|
-
* advanced table's active filters, sets the necessary headers
|
|
180
|
-
* and build the select parameter of the query
|
|
181
|
-
* @param {ClientDataQueryable} query
|
|
182
|
-
* @param params: The filters of the last query of the activated table
|
|
183
|
-
* @param tableConfig: The configuration of the activated table
|
|
184
|
-
* @param {Headers} headers: The headers to append to the query
|
|
185
|
-
* @return ClientDataQueryable
|
|
186
|
-
*/
|
|
187
|
-
BtnExpDirective.prototype.constructQuery = function (query, params, tableConfig, headers) {
|
|
188
|
-
var _query = this.setParams(query, params);
|
|
189
|
-
_query = this.setHeaders(_query, headers);
|
|
190
|
-
_query = this.constructQueryParam(_query, tableConfig);
|
|
191
|
-
return _query;
|
|
192
|
-
};
|
|
193
|
-
/**
|
|
194
|
-
* Fetches and saves the xlsx file
|
|
195
|
-
* @param {String} url
|
|
196
|
-
* @param {Headers} serviceHeaders: The headers to append to the query
|
|
197
|
-
* @param modelName: The model name of the advanced table
|
|
198
|
-
*/
|
|
199
|
-
BtnExpDirective.prototype.downloadFile = function (url, serviceHeaders, modelName) {
|
|
200
|
-
var _this = this;
|
|
201
|
-
this._loadingService.showLoading();
|
|
202
|
-
fetch(encodeURI(url), {
|
|
203
|
-
headers: serviceHeaders,
|
|
204
|
-
credentials: 'include'
|
|
205
|
-
}).then(function (response) {
|
|
206
|
-
if (response && !response.ok) {
|
|
207
|
-
throw new ResponseError(response.statusText, response.status);
|
|
208
|
-
}
|
|
209
|
-
return response.blob();
|
|
210
|
-
}).then(function (blob) {
|
|
211
|
-
var objectUrl = window.URL.createObjectURL(blob);
|
|
212
|
-
var a = document.createElement('a');
|
|
213
|
-
document.body.appendChild(a);
|
|
214
|
-
a.setAttribute('style', 'display: none');
|
|
215
|
-
a.href = objectUrl;
|
|
216
|
-
var downloadName = modelName + ".xlsx";
|
|
217
|
-
a.download = downloadName;
|
|
218
|
-
// this adds support for IE and MS Edge (up to version 44.19041)
|
|
219
|
-
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
|
|
220
|
-
window.navigator.msSaveOrOpenBlob(blob, downloadName);
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
// for all other browsers
|
|
224
|
-
a.click();
|
|
225
|
-
}
|
|
226
|
-
window.URL.revokeObjectURL(objectUrl);
|
|
227
|
-
a.remove();
|
|
228
|
-
_this._loadingService.hideLoading();
|
|
229
|
-
}).catch(function (err) {
|
|
230
|
-
_this._loadingService.hideLoading();
|
|
231
|
-
_this._errorService.showError(err, {
|
|
232
|
-
continueLink: '.'
|
|
233
|
-
});
|
|
234
|
-
});
|
|
235
|
-
};
|
|
236
|
-
BtnExpDirective.decorators = [
|
|
237
|
-
{ type: Directive, args: [{
|
|
238
|
-
selector: '.universis-btn-export'
|
|
239
|
-
},] }
|
|
240
|
-
];
|
|
241
|
-
/** @nocollapse */
|
|
242
|
-
BtnExpDirective.ctorParameters = function () { return [
|
|
243
|
-
{ type: ActivatedTableService },
|
|
244
|
-
{ type: AngularDataContext },
|
|
245
|
-
{ type: ConfigurationService },
|
|
246
|
-
{ type: TranslateService },
|
|
247
|
-
{ type: LoadingService },
|
|
248
|
-
{ type: ErrorService }
|
|
249
|
-
]; };
|
|
250
|
-
BtnExpDirective.propDecorators = {
|
|
251
|
-
clickEvent: [{ type: HostListener, args: ['click', ['$event'],] }]
|
|
252
|
-
};
|
|
253
|
-
return BtnExpDirective;
|
|
254
|
-
}());
|
|
255
|
-
export { BtnExpDirective };
|
|
256
|
-
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnRuZXhwLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmVzL2J0bmV4cC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDckYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFzQixhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRSxNQUFNLENBQUMsSUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7QUFRcEM7SUFJRSx5QkFBb0IsZUFBc0MsRUFDdEMsUUFBNEIsRUFDNUIsT0FBNkIsRUFDN0IsVUFBNEIsRUFDNUIsZUFBK0IsRUFDL0IsYUFBMkI7UUFMM0Isb0JBQWUsR0FBZixlQUFlLENBQXVCO1FBQ3RDLGFBQVEsR0FBUixRQUFRLENBQW9CO1FBQzVCLFlBQU8sR0FBUCxPQUFPLENBQXNCO1FBQzdCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQixrQkFBYSxHQUFiLGFBQWEsQ0FBYztJQUMvQyxDQUFDO0lBR0ssb0NBQVUsR0FEaEIsVUFDaUIsS0FBSzs7O2dCQUNwQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRTtvQkFDcEMsc0JB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O1lBQzFCLGdFQUFnRTtZQUNoRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDekQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDdkQ7aUJBQU07Z0JBQ0wseUJBQXlCO2dCQUN6QixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDWDtZQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNYLEtBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQUEsR0FBRztZQUNWLEtBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkMsS0FBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNoQyxZQUFZLEVBQUUsR0FBRzthQUNsQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O2dCQTFNRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtpQkFDbEM7Ozs7Z0JBakJPLHFCQUFxQjtnQkFDckIsa0JBQWtCO2dCQUNsQixvQkFBb0I7Z0JBQ3BCLGdCQUFnQjtnQkFEb0IsY0FBYztnQkFBNUIsWUFBWTs7OzZCQXlCdkMsWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7SUFnTW5DLHNCQUFDO0NBQUEsQUE1TUQsSUE0TUM7U0F6TVksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBIb3N0TGlzdGVuZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRUYWJsZVNlcnZpY2V9IGZyb20gJy4uL3RhYmxlcy5hY3RpdmF0ZWQtdGFibGUuc2VydmljZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlLCBFcnJvclNlcnZpY2UsIExvYWRpbmdTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDbGllbnREYXRhUXVlcnlhYmxlLCBSZXNwb25zZUVycm9yfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHsgVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IE1BWF9FWFBPUlRfSVRFTVMgPSA1MDA7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFeHBvcnRMaW1pdENvbmZpZ3VyYXRpb24ge1xuICB0YWJsZXM/OiB7XG4gICAgZXhwb3J0TGltaXQ/OiBudW1iZXJcbiAgfTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnLnVuaXZlcnNpcy1idG4tZXhwb3J0J1xufSlcbmV4cG9ydCBjbGFzcyBCdG5FeHBEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hY3RpdmF0ZWRUYWJsZTogQWN0aXZhdGVkVGFibGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbmZpZzogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9hZGluZ1NlcnZpY2U6IExvYWRpbmdTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSkge1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBhc3luYyBjbGlja0V2ZW50KGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5fYWN0aXZhdGVkVGFibGUuYWN0aXZlVGFibGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5leHBvcnRWaWV3KCk7XG4gICAgICAvKlxuICAgICAgY29uc3QgbGFzdFF1ZXJ5ID0gdGhpcy5fYWN0aXZhdGVkVGFibGUuYWN0aXZlVGFibGUubGFzdFF1ZXJ5O1xuICAgICAgY29uc3QgdGFibGVDb25maWcgPSB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5jb25maWc7XG4gICAgICBjb25zdCBzZXJ2aWNlSGVhZGVycyA9IHRoaXMuX2NvbnRleHQuZ2V0U2VydmljZSgpLmdldEhlYWRlcnMoKTtcbiAgICAgIGNvbnN0IHF1ZXJ5TW9kZWwgPSBsYXN0UXVlcnkuZ2V0TW9kZWwoKTtcbiAgICAgIGxldCBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwocXVlcnlNb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbGFzdFF1ZXJ5LmdldFBhcmFtcygpO1xuICAgICAgcXVlcnkgPSB0aGlzLmNvbnN0cnVjdFF1ZXJ5KHF1ZXJ5LCBxdWVyeVBhcmFtcywgdGFibGVDb25maWcsIHNlcnZpY2VIZWFkZXJzKTtcbiAgICAgIC8vIGdldCBleHBvcnQgc2V0dGluZ3NcbiAgICAgIGNvbnN0IGV4cG9ydFNldHRpbmdzID0gdGhpcy5fY29uZmlnLnNldHRpbmdzIGFzIEV4cG9ydExpbWl0Q29uZmlndXJhdGlvbjtcbiAgICAgIC8vIGdldCBleHBvcnQgbGltaXRcbiAgICAgIGNvbnN0IG1heEV4cG9ydEl0ZW1zID0gZXhwb3J0U2V0dGluZ3MgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzICYmIGV4cG9ydFNldHRpbmdzLnRhYmxlcy5leHBvcnRMaW1pdDtcbiAgICAgIGlmIChtYXhFeHBvcnRJdGVtcyAmJiB0eXBlb2YgbWF4RXhwb3J0SXRlbXMgPT09ICdudW1iZXInICYmIG1heEV4cG9ydEl0ZW1zID4gMCkge1xuICAgICAgICBxdWVyeS5za2lwKDApLnRha2UobWF4RXhwb3J0SXRlbXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnkuc2tpcCgwKS50YWtlKE1BWF9FWFBPUlRfSVRFTVMpO1xuICAgICAgfVxuICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RzIHRoZSBVUkkgYmFzZWQgb24gdGhlIHdheSBAdGhlbW9zdCBkb2VzXG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmNvbnN0cnVjdFVSTChxdWVyeSk7XG4gICAgICB0aGlzLmRvd25sb2FkRmlsZSh1cmwsIHF1ZXJ5LmdldFNlcnZpY2UoKS5nZXRIZWFkZXJzKCksIHF1ZXJ5LmdldE1vZGVsKCkpOyAqL1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBxdWVyeSBiYXNlZCBvblxuICAgKiB0aGUgYWN0aXZlIGZpbHRlcnMgb2YgdGhlIGFjdGl2YXRlZCB0YWJsZVxuICAgKiBAcGFyYW0ge0NsaWVudERhdGFRdWVyeWFibGV9IHF1ZXJ5XG4gICAqIEBwYXJhbSBwYXJhbXM6IFRoZSBmaWx0ZXJzIG9mIHRoZSBsYXN0IHF1ZXJ5IG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBzZXRQYXJhbXMocXVlcnk6IENsaWVudERhdGFRdWVyeWFibGUsIHBhcmFtcyk6IENsaWVudERhdGFRdWVyeWFibGUge1xuICAgIGlmIChwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIE9iamVjdC5rZXlzKHBhcmFtcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHF1ZXJ5LnNldFBhcmFtKGtleSwgcGFyYW1zW2tleV0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBoZWFkZXJzIHRvIHRoZSBxdWVyeSBiYXNlZCBvblxuICAgKiB0aGUgZGVmYXVsdCBoZWFkZXJzIG9mIHRoZSBEYXRhQ29udGV4dFxuICAgKiBhbmQgYXBwZW5kaW5nIHRoZSBhY2NlcHQgaGVhZGVyIHRvIGdldFxuICAgKiBhbiB4bHN4IGZpbGUgZnJvbSB0aGUgQVBJXG4gICAqIEBwYXJhbSB7Q2xpZW50RGF0YVF1ZXJ5YWJsZX0gcXVlcnlcbiAgICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzOiBUaGUgaGVhZGVycyB0byBhcHBlbmQgdG8gdGhlIHF1ZXJ5XG4gICAqIEByZXR1cm4gQ2xpZW50RGF0YVF1ZXJ5YWJsZVxuICAgKi9cbiAgc2V0SGVhZGVycyhxdWVyeTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSwgaGVhZGVyczogSGVhZGVycyk6IENsaWVudERhdGFRdWVyeWFibGUge1xuICAgIE9iamVjdC5rZXlzKGhlYWRlcnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBxdWVyeS5nZXRTZXJ2aWNlKCkuc2V0SGVhZGVyKGtleSwgaGVhZGVyc1trZXldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBzZXRzIGEgaGVhZGVyIHRvIGFjY2VwdCB4bHN4IGZpbGVzXG4gICAgcXVlcnkuZ2V0U2VydmljZSgpLnNldEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Jyk7XG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdGhlIHNlbGVjdCBwYXJhbWV0ZXIgb2YgdGhlXG4gICAqIENsaWVudERhdGFRdWVyeSBieSByZXBsYWNpbmcgdGhlIHRhcmdldCBuYW1lXG4gICAqIG9mIHRoZSBmaWVsZCBiYXNlZCBvbiB0aGUgbG9jYWxpemVkIHRyYW5zbGF0aW9uXG4gICAqIG9mIHRoYXQgcHJvcGVydHkgb24gdGhlIGFkdmFuY2VkIHRhYmxlZFxuICAgKiBAcGFyYW0ge0NsaWVudERhdGFRdWVyeWFibGV9IHF1ZXJ5XG4gICAqIEBwYXJhbSB0YWJsZUNvbmZpZzogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFjdGl2YXRlZCB0YWJsZVxuICAgKiBAcmV0dXJuIENsaWVudERhdGFRdWVyeWFibGVcbiAgICovXG4gIGNvbnN0cnVjdFF1ZXJ5UGFyYW0ocXVlcnk6IENsaWVudERhdGFRdWVyeWFibGUsIHRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZ3VyYXRpb24pOiBDbGllbnREYXRhUXVlcnlhYmxlIHtcbiAgICBsZXQgc2VsZWN0UXVlcnkgPSBxdWVyeS5nZXRQYXJhbXMoKS4kc2VsZWN0O1xuICAgIGxldCBzZWxlY3RRdWVyeUFycmF5ID0gc2VsZWN0UXVlcnkuc3BsaXQoJywnKTtcbiAgICBzZWxlY3RRdWVyeUFycmF5ID0gc2VsZWN0UXVlcnlBcnJheS5tYXAoKHNlbGVjdCkgPT4ge1xuICAgICAgY29uc3Qgd29yZHMgPSBzZWxlY3Quc3BsaXQoJyAnKTtcbiAgICAgIGlmICh3b3Jkcy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgaWYgKHRhYmxlQ29uZmlnICYmIHRhYmxlQ29uZmlnLmNvbHVtbnMpIHtcbiAgICAgICAgICBmb3IoY29uc3QgY29sdW1uIG9mIHRhYmxlQ29uZmlnLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4ucHJvcGVydHkgPT09IHdvcmRzWzJdICYmIGNvbHVtbi50aXRsZSkge1xuICAgICAgICAgICAgICB3b3Jkc1syXSA9IGBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoY29sdW1uLnRpdGxlKX1cImA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5wcm9wZXJ0eSA9PT0gd29yZHNbMl0pIHtcbiAgICAgICAgICAgICAgd29yZHNbMl0gPSBgXCIke3RoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHdvcmRzWzJdKX1cImBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh3b3Jkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYgKHRhYmxlQ29uZmlnICYmIHRhYmxlQ29uZmlnLmNvbHVtbnMpIHtcbiAgICAgICAgICBmb3IoY29uc3QgY29sdW1uIG9mIHRhYmxlQ29uZmlnLmNvbHVtbnMpe1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5uYW1lID09PSB3b3Jkc1swXSAmJiBjb2x1bW4udGl0bGUpIHtcbiAgICAgICAgICAgICAgd29yZHNbMF0gPSBgJHt3b3Jkc1swXX0gYXMgXCIke3RoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KGNvbHVtbi50aXRsZSl9XCJgO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLm5hbWUgPT09IHdvcmRzWzBdICYmIGNvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoY29sdW1uLnByb3BlcnR5KX1cImA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3b3Jkc1swXSA9PT0gY29sdW1uLm5hbWUgJiYgd29yZHNbMF09PT0gXCJpZFwiICYmIGNvbHVtbi5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYod29yZHNbMF0gPT0gY29sdW1uLm5hbWUgfHwgd29yZHNbMF09PT0gY29sdW1uLnByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIHdvcmRzWzBdID0gYCR7d29yZHNbMF19IGFzIFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh3b3Jkc1swXSl9XCJgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd29yZHNbMF07XG4gICAgICB9XG4gICAgICByZXR1cm4gd29yZHMuam9pbignICcpO1xuICAgIH0pO1xuICAgIHNlbGVjdFF1ZXJ5ID0gc2VsZWN0UXVlcnlBcnJheS5qb2luKCcsJyk7XG4gICAgcXVlcnkuc2V0UGFyYW0oJyRzZWxlY3QnLCBzZWxlY3RRdWVyeSApO1xuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHRoZSBmZXRjaCBVUkwgYmFzZWQgdGhlIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtDbGllbnREYXRhUXVlcnlhYmxlfSBxdWVyeVxuICAgKiBAcmV0dXJuIFN0cmluZ1xuICAgKi9cbiAgY29uc3RydWN0VVJMKHF1ZXJ5KTogU3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVVJMID0gcXVlcnkuZ2V0U2VydmljZSgpLmdldEJhc2UoKTtcbiAgICBsZXQgdXJsID0gYmFzZVVSTC5lbmRzV2l0aCgnLycpID8gKGJhc2VVUkwgKyBxdWVyeS5nZXRNb2RlbCgpICsgJz8nKSA6IChiYXNlVVJMICsgJy8nICsgcXVlcnkuZ2V0TW9kZWwoKSArICc/Jyk7XG4gICAgT2JqZWN0LmtleXMocXVlcnkuZ2V0UGFyYW1zKCkpLmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICB1cmwgKz0ga2V5ICsgJz0nICsgcXVlcnkuZ2V0UGFyYW1zKClba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCArPSAnJicgKyBrZXkgKyAnPScgKyBxdWVyeS5nZXRQYXJhbXMoKVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgcXVlcnkgYnkgc2V0dGluZyB0aGUgcGFyYW1ldGVycyBvZiB0aGVcbiAgICogYWR2YW5jZWQgdGFibGUncyBhY3RpdmUgZmlsdGVycywgc2V0cyB0aGUgbmVjZXNzYXJ5IGhlYWRlcnNcbiAgICogYW5kIGJ1aWxkIHRoZSBzZWxlY3QgcGFyYW1ldGVyIG9mIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge0NsaWVudERhdGFRdWVyeWFibGV9IHF1ZXJ5XG4gICAqIEBwYXJhbSBwYXJhbXM6IFRoZSBmaWx0ZXJzIG9mIHRoZSBsYXN0IHF1ZXJ5IG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHBhcmFtIHRhYmxlQ29uZmlnOiBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyczogVGhlIGhlYWRlcnMgdG8gYXBwZW5kIHRvIHRoZSBxdWVyeVxuICAgKiBAcmV0dXJuIENsaWVudERhdGFRdWVyeWFibGVcbiAgICovXG4gIGNvbnN0cnVjdFF1ZXJ5KHF1ZXJ5LCBwYXJhbXMsIHRhYmxlQ29uZmlnLCBoZWFkZXJzOiBIZWFkZXJzKSB7XG4gICAgbGV0IF9xdWVyeSA9IHRoaXMuc2V0UGFyYW1zKHF1ZXJ5LCBwYXJhbXMpO1xuICAgIF9xdWVyeSA9IHRoaXMuc2V0SGVhZGVycyhfcXVlcnksIGhlYWRlcnMpO1xuICAgIF9xdWVyeSA9IHRoaXMuY29uc3RydWN0UXVlcnlQYXJhbShfcXVlcnksIHRhYmxlQ29uZmlnKTtcbiAgICByZXR1cm4gX3F1ZXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgYW5kIHNhdmVzIHRoZSB4bHN4IGZpbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge0hlYWRlcnN9IHNlcnZpY2VIZWFkZXJzOiBUaGUgaGVhZGVycyB0byBhcHBlbmQgdG8gdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSBtb2RlbE5hbWU6IFRoZSBtb2RlbCBuYW1lIG9mIHRoZSBhZHZhbmNlZCB0YWJsZVxuICAgKi9cbiAgZG93bmxvYWRGaWxlKHVybCwgc2VydmljZUhlYWRlcnM6IEhlYWRlcnMsIG1vZGVsTmFtZSkge1xuICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLnNob3dMb2FkaW5nKCk7XG4gICAgZmV0Y2goZW5jb2RlVVJJKHVybCksIHtcbiAgICAgIGhlYWRlcnM6IHNlcnZpY2VIZWFkZXJzLFxuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJ1xuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlICYmICFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgUmVzcG9uc2VFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0LCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmJsb2IoKTtcbiAgICB9KS50aGVuKGJsb2IgPT4ge1xuICAgICAgY29uc3Qgb2JqZWN0VXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgIGEuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBub25lJyk7XG4gICAgICBhLmhyZWYgPSBvYmplY3RVcmw7XG4gICAgICBjb25zdCBkb3dubG9hZE5hbWUgPSBgJHttb2RlbE5hbWV9Lnhsc3hgO1xuICAgICAgYS5kb3dubG9hZCA9IGRvd25sb2FkTmFtZTtcbiAgICAgIC8vIHRoaXMgYWRkcyBzdXBwb3J0IGZvciBJRSBhbmQgTVMgRWRnZSAodXAgdG8gdmVyc2lvbiA0NC4xOTA0MSlcbiAgICAgIGlmICh3aW5kb3cubmF2aWdhdG9yICYmIHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYikge1xuICAgICAgICB3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoYmxvYiwgZG93bmxvYWROYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZvciBhbGwgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgfVxuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKTtcbiAgICAgIGEucmVtb3ZlKCk7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgY29udGludWVMaW5rOiAnLidcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==
|