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