@one-paragon/angular-utilities 0.0.1 → 0.0.6
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/http-request-state/HttpRequestStateFactory.mjs +27 -0
- package/esm2020/http-request-state/HttpRequestStateStore.mjs +77 -0
- package/esm2020/http-request-state/directives/HttpStateDirectiveBase.mjs +34 -0
- package/esm2020/http-request-state/directives/http-error-state-directive.mjs +29 -0
- package/esm2020/http-request-state/directives/http-inProgress-state-directive.mjs +29 -0
- package/esm2020/http-request-state/directives/http-notStarted-state-directive.mjs +29 -0
- package/esm2020/http-request-state/directives/http-success-state-directive.mjs +29 -0
- package/esm2020/http-request-state/directives/index.mjs +6 -0
- package/esm2020/http-request-state/directives/request-state-directive.mjs +57 -0
- package/esm2020/http-request-state/helpers.mjs +19 -0
- package/esm2020/http-request-state/http-request-state.mjs +39 -0
- package/esm2020/http-request-state/http-state-module.mjs +41 -0
- package/esm2020/http-request-state/index.mjs +7 -0
- package/esm2020/http-request-state/rxjs/getRequestorBody.mjs +4 -0
- package/esm2020/http-request-state/rxjs/getRequestorState.mjs +3 -0
- package/esm2020/http-request-state/rxjs/index.mjs +5 -0
- package/esm2020/http-request-state/rxjs/tapError.mjs +12 -0
- package/esm2020/http-request-state/rxjs/tapSuccess.mjs +12 -0
- package/esm2020/http-request-state/types.mjs +15 -0
- package/esm2020/one-paragon-angular-utilities.mjs +5 -0
- package/esm2020/public-api.mjs +13 -4
- package/esm2020/rxjs/defaultShareReplay.mjs +7 -0
- package/esm2020/rxjs/index.mjs +4 -0
- package/esm2020/rxjs/mapError.mjs +8 -0
- package/esm2020/rxjs/rxjs-operators.mjs +77 -0
- package/esm2020/table-builder/classes/DefaultSettings.mjs +6 -0
- package/esm2020/table-builder/classes/GenericTableDataSource.mjs +13 -0
- package/esm2020/table-builder/classes/MatTableObservableDataSource.mjs +21 -0
- package/esm2020/table-builder/classes/TableBuilderConfig.mjs +3 -0
- package/esm2020/table-builder/classes/TableState.mjs +12 -0
- package/esm2020/table-builder/classes/data-filter.mjs +22 -0
- package/esm2020/table-builder/classes/display-col.mjs +2 -0
- package/esm2020/table-builder/classes/filter-info.mjs +60 -0
- package/esm2020/table-builder/classes/table-builder-general-settings.mjs +53 -0
- package/esm2020/table-builder/classes/table-builder.mjs +57 -0
- package/esm2020/table-builder/classes/table-store.mjs +230 -0
- package/esm2020/table-builder/components/array-column.component.mjs +57 -0
- package/esm2020/table-builder/components/column-builder/column-builder.component.mjs +92 -0
- package/esm2020/table-builder/components/date-filter/date-filter.component.mjs +25 -0
- package/esm2020/table-builder/components/filter/filter.component.mjs +53 -0
- package/esm2020/table-builder/components/filter/in-list/in-list-filter.component.mjs +91 -0
- package/esm2020/table-builder/components/gen-col-displayer/gen-col-displayer.component.mjs +45 -0
- package/esm2020/table-builder/components/generic-table/generic-table.component.mjs +153 -0
- package/esm2020/table-builder/components/generic-table/paginator.component.mjs +74 -0
- package/esm2020/table-builder/components/header-menu/header-menu.component.mjs +90 -0
- package/esm2020/table-builder/components/in-filter/in-filter.component.mjs +66 -0
- package/esm2020/table-builder/components/index.mjs +9 -0
- package/esm2020/table-builder/components/initialization-component/initialization-component.mjs +41 -0
- package/esm2020/table-builder/components/number-filter/number-filter.component.mjs +27 -0
- package/esm2020/table-builder/components/sort-menu/sort-menu.component-store.mjs +42 -0
- package/esm2020/table-builder/components/sort-menu/sort-menu.component.mjs +74 -0
- package/esm2020/table-builder/components/table-container/table-container.mjs +174 -0
- package/esm2020/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +39 -0
- package/esm2020/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.mjs +30 -0
- package/esm2020/table-builder/components/table-container-filter/table-wrapper-filter-store.mjs +25 -0
- package/esm2020/table-builder/directives/custom-cell-directive.mjs +59 -0
- package/esm2020/table-builder/directives/index.mjs +4 -0
- package/esm2020/table-builder/directives/multi-sort.directive.mjs +42 -0
- package/esm2020/table-builder/directives/resize-column.directive.mjs +85 -0
- package/esm2020/table-builder/enums/filterTypes.mjs +58 -0
- package/esm2020/table-builder/functions/boolean-filter-function.mjs +10 -0
- package/esm2020/table-builder/functions/date-filter-function.mjs +32 -0
- package/esm2020/table-builder/functions/download-data.mjs +12 -0
- package/esm2020/table-builder/functions/null-filter-function.mjs +8 -0
- package/esm2020/table-builder/functions/number-filter-function.mjs +32 -0
- package/esm2020/table-builder/functions/sort-data-function.mjs +5 -0
- package/esm2020/table-builder/functions/string-filter-function.mjs +41 -0
- package/esm2020/table-builder/interfaces/ColumnInfo.mjs +2 -0
- package/esm2020/table-builder/interfaces/dictionary.mjs +2 -0
- package/esm2020/table-builder/interfaces/report-def.mjs +34 -0
- package/esm2020/table-builder/material.module.mjs +223 -0
- package/esm2020/table-builder/ngrx/actions.mjs +5 -0
- package/esm2020/table-builder/ngrx/effects.mjs +48 -0
- package/esm2020/table-builder/ngrx/reducer.mjs +52 -0
- package/esm2020/table-builder/ngrx/selectors.mjs +24 -0
- package/esm2020/table-builder/pipes/column-total.pipe.mjs +21 -0
- package/esm2020/table-builder/pipes/format-filter-type.pipe.mjs +18 -0
- package/esm2020/table-builder/pipes/format-filter-value.pipe.mjs +46 -0
- package/esm2020/table-builder/pipes/key-display.mjs +20 -0
- package/esm2020/table-builder/services/export-to-csv.service.mjs +83 -0
- package/esm2020/table-builder/services/table-template-service.mjs +37 -0
- package/esm2020/table-builder/services/transform-creator.mjs +50 -0
- package/esm2020/table-builder/table-builder.module.mjs +167 -0
- package/esm2020/utilities/directives/auto-focus.directive.mjs +26 -0
- package/esm2020/utilities/directives/buttonSubject.mjs +18 -0
- package/esm2020/utilities/directives/dialog-service.mjs +25 -0
- package/esm2020/utilities/directives/dialog.mjs +120 -0
- package/esm2020/utilities/directives/prevent-enter.directive.mjs +19 -0
- package/esm2020/utilities/directives/stop-propagation.directive.mjs +25 -0
- package/esm2020/utilities/directives/styler.mjs +26 -0
- package/esm2020/utilities/index.mjs +11 -0
- package/esm2020/utilities/module.mjs +73 -0
- package/esm2020/utilities/pipes/function.pipe.mjs +14 -0
- package/esm2020/utilities/pipes/phone.pipe.mjs +20 -0
- package/esm2020/utilities/pipes/space-case.pipes.mjs +28 -0
- package/fesm2015/one-paragon-angular-utilities.mjs +3398 -0
- package/fesm2015/one-paragon-angular-utilities.mjs.map +1 -0
- package/fesm2020/one-paragon-angular-utilities.mjs +3377 -0
- package/fesm2020/one-paragon-angular-utilities.mjs.map +1 -0
- package/{lib → http-request-state}/HttpRequestStateFactory.d.ts +0 -0
- package/{lib → http-request-state}/HttpRequestStateStore.d.ts +1 -1
- package/{lib → http-request-state}/directives/HttpStateDirectiveBase.d.ts +0 -0
- package/{lib → http-request-state}/directives/http-error-state-directive.d.ts +0 -0
- package/{lib → http-request-state}/directives/http-inProgress-state-directive.d.ts +0 -0
- package/{lib → http-request-state}/directives/http-notStarted-state-directive.d.ts +0 -0
- package/{lib → http-request-state}/directives/http-success-state-directive.d.ts +0 -0
- package/{lib → http-request-state}/directives/index.d.ts +0 -0
- package/{lib → http-request-state}/directives/request-state-directive.d.ts +0 -0
- package/{lib → http-request-state}/helpers.d.ts +0 -0
- package/{lib → http-request-state}/http-request-state.d.ts +0 -0
- package/{lib → http-request-state}/http-state-module.d.ts +0 -0
- package/{lib → http-request-state}/index.d.ts +0 -0
- package/{lib → http-request-state}/rxjs/getRequestorBody.d.ts +0 -0
- package/{lib → http-request-state}/rxjs/getRequestorState.d.ts +1 -1
- package/{lib → http-request-state}/rxjs/index.d.ts +0 -2
- package/{lib → http-request-state}/rxjs/tapError.d.ts +0 -0
- package/{lib → http-request-state}/rxjs/tapSuccess.d.ts +0 -0
- package/{lib → http-request-state}/types.d.ts +2 -1
- package/{angular-utilities.d.ts → one-paragon-angular-utilities.d.ts} +1 -1
- package/package.json +21 -26
- package/public-api.d.ts +12 -3
- package/{lib/rxjs → rxjs}/defaultShareReplay.d.ts +0 -0
- package/rxjs/index.d.ts +3 -0
- package/{lib/rxjs → rxjs}/mapError.d.ts +0 -0
- package/rxjs/rxjs-operators.d.ts +9 -0
- package/table-builder/classes/DefaultSettings.d.ts +8 -0
- package/table-builder/classes/GenericTableDataSource.d.ts +8 -0
- package/table-builder/classes/MatTableObservableDataSource.d.ts +9 -0
- package/table-builder/classes/TableBuilderConfig.d.ts +18 -0
- package/table-builder/classes/TableState.d.ts +24 -0
- package/table-builder/classes/data-filter.d.ts +9 -0
- package/table-builder/classes/display-col.d.ts +5 -0
- package/table-builder/classes/filter-info.d.ts +29 -0
- package/table-builder/classes/table-builder-general-settings.d.ts +33 -0
- package/table-builder/classes/table-builder.d.ts +14 -0
- package/table-builder/classes/table-store.d.ts +81 -0
- package/table-builder/components/array-column.component.d.ts +14 -0
- package/table-builder/components/column-builder/column-builder.component.d.ts +46 -0
- package/table-builder/components/date-filter/date-filter.component.d.ts +10 -0
- package/table-builder/components/filter/filter.component.d.ts +281 -0
- package/table-builder/components/filter/in-list/in-list-filter.component.d.ts +27 -0
- package/table-builder/components/gen-col-displayer/gen-col-displayer.component.d.ts +16 -0
- package/table-builder/components/generic-table/generic-table.component.d.ts +57 -0
- package/table-builder/components/generic-table/paginator.component.d.ts +28 -0
- package/table-builder/components/header-menu/header-menu.component.d.ts +25 -0
- package/table-builder/components/in-filter/in-filter.component.d.ts +22 -0
- package/table-builder/components/index.d.ts +8 -0
- package/table-builder/components/initialization-component/initialization-component.d.ts +14 -0
- package/table-builder/components/number-filter/number-filter.component.d.ts +12 -0
- package/table-builder/components/sort-menu/sort-menu.component-store.d.ts +24 -0
- package/table-builder/components/sort-menu/sort-menu.component.d.ts +25 -0
- package/table-builder/components/table-container/table-container.d.ts +65 -0
- package/table-builder/components/table-container-filter/filter-list/filter-list.component.d.ts +17 -0
- package/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.d.ts +14 -0
- package/table-builder/components/table-container-filter/table-wrapper-filter-store.d.ts +14 -0
- package/table-builder/directives/custom-cell-directive.d.ts +19 -0
- package/table-builder/directives/index.d.ts +3 -0
- package/table-builder/directives/multi-sort.directive.d.ts +11 -0
- package/table-builder/directives/resize-column.directive.d.ts +43 -0
- package/table-builder/enums/filterTypes.d.ts +30 -0
- package/table-builder/functions/boolean-filter-function.d.ts +3 -0
- package/table-builder/functions/date-filter-function.d.ts +3 -0
- package/table-builder/functions/download-data.d.ts +1 -0
- package/table-builder/functions/null-filter-function.d.ts +2 -0
- package/table-builder/functions/number-filter-function.d.ts +4 -0
- package/table-builder/functions/sort-data-function.d.ts +3 -0
- package/table-builder/functions/string-filter-function.d.ts +7 -0
- package/table-builder/interfaces/ColumnInfo.d.ts +6 -0
- package/table-builder/interfaces/dictionary.d.ts +3 -0
- package/table-builder/interfaces/report-def.d.ts +86 -0
- package/table-builder/material.module.d.ts +34 -0
- package/table-builder/ngrx/actions.d.ts +23 -0
- package/table-builder/ngrx/effects.d.ts +19 -0
- package/table-builder/ngrx/reducer.d.ts +15 -0
- package/table-builder/ngrx/selectors.d.ts +22 -0
- package/table-builder/pipes/column-total.pipe.d.ts +9 -0
- package/table-builder/pipes/format-filter-type.pipe.d.ts +8 -0
- package/table-builder/pipes/format-filter-value.pipe.d.ts +14 -0
- package/table-builder/pipes/key-display.d.ts +11 -0
- package/table-builder/services/export-to-csv.service.d.ts +22 -0
- package/table-builder/services/table-template-service.d.ts +14 -0
- package/table-builder/services/transform-creator.d.ts +17 -0
- package/table-builder/table-builder.module.d.ts +41 -0
- package/utilities/directives/auto-focus.directive.d.ts +10 -0
- package/utilities/directives/buttonSubject.d.ts +6 -0
- package/utilities/directives/dialog-service.d.ts +10 -0
- package/utilities/directives/dialog.d.ts +42 -0
- package/utilities/directives/prevent-enter.directive.d.ts +6 -0
- package/utilities/directives/stop-propagation.directive.d.ts +7 -0
- package/utilities/directives/styler.d.ts +9 -0
- package/utilities/index.d.ts +10 -0
- package/utilities/module.d.ts +15 -0
- package/utilities/pipes/function.pipe.d.ts +7 -0
- package/utilities/pipes/phone.pipe.d.ts +7 -0
- package/utilities/pipes/space-case.pipes.d.ts +17 -0
- package/esm2020/angular-utilities.mjs +0 -5
- package/esm2020/lib/HttpRequestStateFactory.mjs +0 -27
- package/esm2020/lib/HttpRequestStateStore.mjs +0 -77
- package/esm2020/lib/directives/HttpStateDirectiveBase.mjs +0 -34
- package/esm2020/lib/directives/http-error-state-directive.mjs +0 -29
- package/esm2020/lib/directives/http-inProgress-state-directive.mjs +0 -29
- package/esm2020/lib/directives/http-notStarted-state-directive.mjs +0 -29
- package/esm2020/lib/directives/http-success-state-directive.mjs +0 -29
- package/esm2020/lib/directives/index.mjs +0 -6
- package/esm2020/lib/directives/request-state-directive.mjs +0 -57
- package/esm2020/lib/helpers.mjs +0 -19
- package/esm2020/lib/http-request-state.mjs +0 -39
- package/esm2020/lib/http-state-module.mjs +0 -41
- package/esm2020/lib/index.mjs +0 -7
- package/esm2020/lib/rxjs/defaultShareReplay.mjs +0 -7
- package/esm2020/lib/rxjs/getRequestorBody.mjs +0 -4
- package/esm2020/lib/rxjs/getRequestorState.mjs +0 -3
- package/esm2020/lib/rxjs/index.mjs +0 -7
- package/esm2020/lib/rxjs/mapError.mjs +0 -8
- package/esm2020/lib/rxjs/tapError.mjs +0 -12
- package/esm2020/lib/rxjs/tapSuccess.mjs +0 -12
- package/esm2020/lib/types.mjs +0 -14
- package/fesm2015/angular-utilities.mjs +0 -426
- package/fesm2015/angular-utilities.mjs.map +0 -1
- package/fesm2020/angular-utilities.mjs +0 -424
- package/fesm2020/angular-utilities.mjs.map +0 -1
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { Component, Input, EventEmitter, Output, ContentChildren, ChangeDetectionStrategy, Inject, } from '@angular/core';
|
|
2
|
+
import { combineLatest, ReplaySubject } from 'rxjs';
|
|
3
|
+
import { FieldType } from '../../interfaces/report-def';
|
|
4
|
+
import { distinctUntilChanged, first, last, map, shareReplay, switchMap, withLatestFrom } from 'rxjs/operators';
|
|
5
|
+
import { MatRowDef } from '@angular/material/table';
|
|
6
|
+
import { CustomCellDirective } from '../../directives';
|
|
7
|
+
import { TableStore } from '../../classes/table-store';
|
|
8
|
+
import { DataFilter } from '../../classes/data-filter';
|
|
9
|
+
import { mapArray, notNull, skipOneWhen } from '../../../rxjs/rxjs-operators';
|
|
10
|
+
import { ExportToCsvService } from '../../services/export-to-csv.service';
|
|
11
|
+
import { ArrayDefaults } from '../../classes/DefaultSettings';
|
|
12
|
+
import { TableBuilderConfigToken } from '../../classes/TableBuilderConfig';
|
|
13
|
+
import * as selectors from '../../ngrx/selectors';
|
|
14
|
+
import { select } from '@ngrx/store';
|
|
15
|
+
import { deleteLocalProfilesState, setLocalProfile, setLocalProfilesState } from '../../ngrx/actions';
|
|
16
|
+
import { sortData } from '../../functions/sort-data-function';
|
|
17
|
+
import { WrapperFilterStore } from '../table-container-filter/table-wrapper-filter-store';
|
|
18
|
+
import { cloneDeep } from 'lodash';
|
|
19
|
+
import * as i0 from "@angular/core";
|
|
20
|
+
import * as i1 from "../../classes/table-store";
|
|
21
|
+
import * as i2 from "../../services/export-to-csv.service";
|
|
22
|
+
import * as i3 from "@ngrx/store";
|
|
23
|
+
import * as i4 from "../table-container-filter/filter-list/filter-list.component";
|
|
24
|
+
import * as i5 from "@angular/material/button";
|
|
25
|
+
import * as i6 from "@angular/material/icon";
|
|
26
|
+
import * as i7 from "@angular/material/menu";
|
|
27
|
+
import * as i8 from "../generic-table/generic-table.component";
|
|
28
|
+
import * as i9 from "../table-container-filter/gen-filter-displayer/gen-filter-displayer.component";
|
|
29
|
+
import * as i10 from "../gen-col-displayer/gen-col-displayer.component";
|
|
30
|
+
import * as i11 from "../sort-menu/sort-menu.component";
|
|
31
|
+
import * as i12 from "@angular/material/form-field";
|
|
32
|
+
import * as i13 from "../../directives/multi-sort.directive";
|
|
33
|
+
import * as i14 from "@ngrx/component";
|
|
34
|
+
import * as i15 from "@angular/common";
|
|
35
|
+
import * as i16 from "@angular/material/tooltip";
|
|
36
|
+
import * as i17 from "../../../utilities/directives/buttonSubject";
|
|
37
|
+
import * as i18 from "../../../utilities/directives/stop-propagation.directive";
|
|
38
|
+
import * as i19 from "../../../utilities/directives/dialog";
|
|
39
|
+
import * as i20 from "@angular/material/input";
|
|
40
|
+
export class TableContainerComponent {
|
|
41
|
+
constructor(state, exportToCsvService, config, store) {
|
|
42
|
+
this.state = state;
|
|
43
|
+
this.exportToCsvService = exportToCsvService;
|
|
44
|
+
this.config = config;
|
|
45
|
+
this.store = store;
|
|
46
|
+
this.SaveState = false;
|
|
47
|
+
this.IndexColumn = false;
|
|
48
|
+
this.SelectionColumn = false;
|
|
49
|
+
this.isSticky = true;
|
|
50
|
+
this.selection$ = new EventEmitter();
|
|
51
|
+
this.dataSubject = new ReplaySubject(1);
|
|
52
|
+
this.data = this.dataSubject.pipe(switchMap(d => d), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
53
|
+
this.OnStateReset = new EventEmitter();
|
|
54
|
+
this.OnSaveState = new EventEmitter();
|
|
55
|
+
this.mapMetaDatas = (meta) => {
|
|
56
|
+
if (meta.fieldType === FieldType.Array) {
|
|
57
|
+
const additional = { ...meta.additional };
|
|
58
|
+
additional.arrayStyle = additional?.arrayStyle ?? ArrayDefaults.arrayStyle;
|
|
59
|
+
additional.limit = additional.limit ?? this.config.arrayInfo?.limit ?? ArrayDefaults.limit;
|
|
60
|
+
return { ...meta, additional };
|
|
61
|
+
}
|
|
62
|
+
return meta;
|
|
63
|
+
};
|
|
64
|
+
this.cleanStateOnInitialLoad = () => (obs) => combineLatest([obs.pipe(addTimeStamp()), this.tableBuilder.metaData$]).pipe(distinctUntilChanged(([state], [state2]) => state.index === state2.index), map(([{ value: state }, metas], index) => {
|
|
65
|
+
if (index === 0) {
|
|
66
|
+
const filters = Object.values(state.filters).filter(fltr => metas.some(m => m.key === fltr.key)).reduce((obj, filter) => {
|
|
67
|
+
obj[filter.filterId] = state.filters[filter.filterId];
|
|
68
|
+
return obj;
|
|
69
|
+
}, {});
|
|
70
|
+
const sorted = state.sorted.filter(s => metas.some(m => m.key === s.active));
|
|
71
|
+
return ({ ...state, filters, sorted });
|
|
72
|
+
}
|
|
73
|
+
return state;
|
|
74
|
+
}));
|
|
75
|
+
this.collapseHeader$ = this.state.state$.pipe(map(state => state.persistedTableSettings.collapseHeader));
|
|
76
|
+
this.state.on(this.state.getSavableState().pipe(last()), finalState => {
|
|
77
|
+
if (this.tableId) {
|
|
78
|
+
this.store.dispatch(setLocalProfile({ key: this.tableId, value: finalState }));
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
this.state$ = this.state.getSavableState().pipe(map(state => cloneDeep(state)), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
82
|
+
}
|
|
83
|
+
set pageSize(value) {
|
|
84
|
+
this.state.setPageSize(value);
|
|
85
|
+
}
|
|
86
|
+
ngOnInit() {
|
|
87
|
+
this.state.setTableSettings(this.tableBuilder.settings);
|
|
88
|
+
if (this.tableId) {
|
|
89
|
+
this.state.updateState(this.store.pipe(select(selectors.selectLocalProfileState(this.tableId)), notNull(), this.cleanStateOnInitialLoad(), skipOneWhen(this.OnSaveState)));
|
|
90
|
+
this.stateKeys$ = this.store.select(selectors.selectLocalProfileKeys(this.tableId));
|
|
91
|
+
this.currentStateKey$ = this.store.select(selectors.selectLocalProfileCurrentKey(this.tableId));
|
|
92
|
+
}
|
|
93
|
+
const filters$ = this.state.filters$.pipe(map(filters => Object.values(filters)));
|
|
94
|
+
const data = new DataFilter(this.inputFilters)
|
|
95
|
+
.appendFilters(filters$)
|
|
96
|
+
.filterData(this.tableBuilder.getData$());
|
|
97
|
+
this.dataSubject.next(data);
|
|
98
|
+
}
|
|
99
|
+
exportToCsv() {
|
|
100
|
+
const sorted = this.data.pipe(withLatestFrom(this.state.sorted$), map(([data, sorted]) => sortData(data, sorted)));
|
|
101
|
+
this.exportToCsvService.exportToCsv(sorted);
|
|
102
|
+
}
|
|
103
|
+
saveState() {
|
|
104
|
+
this.state.getSavableState().pipe(first()).subscribe(tableState => {
|
|
105
|
+
this.OnSaveState.next(null);
|
|
106
|
+
this.store.dispatch(setLocalProfile({ key: this.tableId, value: tableState, persist: true }));
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
setProfileState(val) {
|
|
110
|
+
this.store.dispatch(setLocalProfilesState({ key: this.tableId, current: val }));
|
|
111
|
+
}
|
|
112
|
+
deleteProfileState(stateKey) {
|
|
113
|
+
this.store.dispatch(deleteLocalProfilesState({ key: this.tableId, stateKey }));
|
|
114
|
+
}
|
|
115
|
+
ngAfterContentInit() {
|
|
116
|
+
this.InitializeColumns();
|
|
117
|
+
}
|
|
118
|
+
InitializeColumns() {
|
|
119
|
+
const customCellMap = new Map(this.customCells.map(cc => [cc.customCell, cc]));
|
|
120
|
+
this.state.setMetaData(this.tableBuilder.metaData$.pipe(first(), map((mds) => {
|
|
121
|
+
mds = mds.map(this.mapMetaDatas);
|
|
122
|
+
return [
|
|
123
|
+
...mds,
|
|
124
|
+
...this.customCells.map(cc => cc.getMetaData(mds.find(item => item.key === cc.customCell)))
|
|
125
|
+
];
|
|
126
|
+
})));
|
|
127
|
+
this.myColumns$ = this.state.metaDataArray$.pipe(mapArray(metaData => ({ metaData, customCell: customCellMap.get(metaData.key) })));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
TableContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TableContainerComponent, deps: [{ token: i1.TableStore }, { token: i2.ExportToCsvService }, { token: TableBuilderConfigToken }, { token: i3.Store }], target: i0.ɵɵFactoryTarget.Component });
|
|
131
|
+
TableContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: TableContainerComponent, selector: "tb-table-container", inputs: { tableId: "tableId", SaveState: "SaveState", tableBuilder: "tableBuilder", IndexColumn: "IndexColumn", SelectionColumn: "SelectionColumn", trackBy: "trackBy", isSticky: "isSticky", pageSize: "pageSize", inputFilters: "inputFilters" }, outputs: { selection$: "selection$", data: "data", OnStateReset: "OnStateReset", OnSaveState: "OnSaveState", state$: "state$" }, providers: [TableStore, ExportToCsvService, WrapperFilterStore], queries: [{ propertyName: "customRows", predicate: MatRowDef }, { propertyName: "customCells", predicate: CustomCellDirective }], ngImport: i0, template: "<ng-container multiSort>\n <ng-container *ngrxLet=\"state.tableSettings$ as tableSettings\">\n\n\n <div class=\"header-wrapper\">\n <div class=\"title\">\n <ng-content select=\".tb-header-title\"\n *ngIf=\"(!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed\">\n\n </ng-content>\n </div>\n <div class=\"flx-row-end\">\n <lib-filter-list></lib-filter-list>\n <ng-container *ngIf=\"!(collapseHeader$ | async); else allMenu\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-container>\n <ng-template #allMenu>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <div class=\"flex-column\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-template>\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\n (click)=\"state.toggleCollapseHeader()\">\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\n </mat-icon>\n </div>\n </div>\n\n <div style=\"clear: both;\">\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\n [isSticky]='isSticky' [columnInfos]='myColumns$'>\n </tb-generic-table>\n </div>\n\n\n\n <ng-template #headerMenu>\n <ng-container>\n <tb-filter-displayer *ngIf=\"!tableSettings.hideFilter\">\n </tb-filter-displayer>\n <tb-col-displayer *ngIf=\"!tableSettings.hideColumnSettings\"></tb-col-displayer>\n <tb-sort-menu *ngIf=\"!tableSettings.hideSort\"></tb-sort-menu>\n </ng-container>\n </ng-template>\n <ng-template #headerMenuExtra>\n <button mat-menu-item (click)=\"state.resetState();OnStateReset.next(null)\">\n <mat-icon color=\"primary\">autorenew</mat-icon>\n <span>Reset table</span>\n </button>\n <button mat-menu-item (click)=\"exportToCsv()\" *ngIf=\"!tableSettings.hideExport\">\n <mat-icon color=\"primary\">file_download</mat-icon>\n <span>Export Table</span>\n </button>\n <ng-container *ngIf=\"currentStateKey$ | async as currentKey\">\n <button mat-menu-item *ngIf=\"tableId\" (click)=\"saveState()\">\n <mat-icon color=\"primary\">save</mat-icon>\n <span>Save to {{currentKey}}</span>\n </button>\n <button *ngIf='tableId' mat-menu-item [matMenuTriggerFor]=\"savedNames\">\n <span>Choose Profile</span>\n </button>\n </ng-container>\n\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\n <button mat-menu-item clickSubject #add='clickSubject'>\n <mat-icon>add</mat-icon>\n <span>New</span>\n </button>\n <ng-container *ngFor='let key of stateKeys$ | async'>\n <button mat-menu-item (click)='setProfileState(key)'>\n <div style='display: flex; align-items: center; justify-content: space-between;'>\n <span style='display:flex;'>{{key}}</span>\n <span style='display:flex;'>\n <span style=\"width: 120px;\"></span>\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\n </span>\n </div>\n </button>\n </ng-container>\n </mat-menu>\n <div *opDialog='add'>\n <mat-form-field>\n <input style='width:90%' matInput #addedKey />\n </mat-form-field>\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);'\n [disabled]=\"!addedKey.value\">Add</button>\n </div>\n </ng-template>\n\n </ng-container>\n\n</ng-container>\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], components: [{ type: i4.FilterChipsComponent, selector: "lib-filter-list" }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8.GenericTableComponent, selector: "tb-generic-table", inputs: ["data$", "IndexColumn", "SelectionColumn", "trackBy", "rows", "isSticky", "columnBuilders", "columnInfos"], outputs: ["selection$"] }, { type: i9.GenFilterDisplayerComponent, selector: "tb-filter-displayer" }, { type: i10.GenColDisplayerComponent, selector: "tb-col-displayer" }, { type: i11.SortMenuComponent, selector: "tb-sort-menu" }, { type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i12.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }], directives: [{ type: i13.MultiSortDirective, selector: "[multiSort]", inputs: ["matSortDisabled"], exportAs: ["multiSort"] }, { type: i14.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet"] }, { type: i15.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i15.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i15.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i16.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i17.DialogOpenDirective, selector: "button[clickSubject]", exportAs: ["clickSubject"] }, { type: i15.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i18.StopPropagationDirective, selector: "[stop-propagation]" }, { type: i19.DialogDirective, selector: "[opDialog]", inputs: ["opDialogConfig", "opDialog", "opDialogOrigin"], outputs: ["opDialogClosed"] }, { type: i20.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }], pipes: { "async": i15.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
132
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TableContainerComponent, decorators: [{
|
|
133
|
+
type: Component,
|
|
134
|
+
args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore], template: "<ng-container multiSort>\n <ng-container *ngrxLet=\"state.tableSettings$ as tableSettings\">\n\n\n <div class=\"header-wrapper\">\n <div class=\"title\">\n <ng-content select=\".tb-header-title\"\n *ngIf=\"(!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed\">\n\n </ng-content>\n </div>\n <div class=\"flx-row-end\">\n <lib-filter-list></lib-filter-list>\n <ng-container *ngIf=\"!(collapseHeader$ | async); else allMenu\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-container>\n <ng-template #allMenu>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <div class=\"flex-column\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-template>\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\n (click)=\"state.toggleCollapseHeader()\">\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\n </mat-icon>\n </div>\n </div>\n\n <div style=\"clear: both;\">\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\n [isSticky]='isSticky' [columnInfos]='myColumns$'>\n </tb-generic-table>\n </div>\n\n\n\n <ng-template #headerMenu>\n <ng-container>\n <tb-filter-displayer *ngIf=\"!tableSettings.hideFilter\">\n </tb-filter-displayer>\n <tb-col-displayer *ngIf=\"!tableSettings.hideColumnSettings\"></tb-col-displayer>\n <tb-sort-menu *ngIf=\"!tableSettings.hideSort\"></tb-sort-menu>\n </ng-container>\n </ng-template>\n <ng-template #headerMenuExtra>\n <button mat-menu-item (click)=\"state.resetState();OnStateReset.next(null)\">\n <mat-icon color=\"primary\">autorenew</mat-icon>\n <span>Reset table</span>\n </button>\n <button mat-menu-item (click)=\"exportToCsv()\" *ngIf=\"!tableSettings.hideExport\">\n <mat-icon color=\"primary\">file_download</mat-icon>\n <span>Export Table</span>\n </button>\n <ng-container *ngIf=\"currentStateKey$ | async as currentKey\">\n <button mat-menu-item *ngIf=\"tableId\" (click)=\"saveState()\">\n <mat-icon color=\"primary\">save</mat-icon>\n <span>Save to {{currentKey}}</span>\n </button>\n <button *ngIf='tableId' mat-menu-item [matMenuTriggerFor]=\"savedNames\">\n <span>Choose Profile</span>\n </button>\n </ng-container>\n\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\n <button mat-menu-item clickSubject #add='clickSubject'>\n <mat-icon>add</mat-icon>\n <span>New</span>\n </button>\n <ng-container *ngFor='let key of stateKeys$ | async'>\n <button mat-menu-item (click)='setProfileState(key)'>\n <div style='display: flex; align-items: center; justify-content: space-between;'>\n <span style='display:flex;'>{{key}}</span>\n <span style='display:flex;'>\n <span style=\"width: 120px;\"></span>\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\n </span>\n </div>\n </button>\n </ng-container>\n </mat-menu>\n <div *opDialog='add'>\n <mat-form-field>\n <input style='width:90%' matInput #addedKey />\n </mat-form-field>\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);'\n [disabled]=\"!addedKey.value\">Add</button>\n </div>\n </ng-template>\n\n </ng-container>\n\n</ng-container>\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
|
|
135
|
+
}], ctorParameters: function () { return [{ type: i1.TableStore }, { type: i2.ExportToCsvService }, { type: undefined, decorators: [{
|
|
136
|
+
type: Inject,
|
|
137
|
+
args: [TableBuilderConfigToken]
|
|
138
|
+
}] }, { type: i3.Store }]; }, propDecorators: { tableId: [{
|
|
139
|
+
type: Input
|
|
140
|
+
}], SaveState: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], tableBuilder: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], IndexColumn: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], SelectionColumn: [{
|
|
147
|
+
type: Input
|
|
148
|
+
}], trackBy: [{
|
|
149
|
+
type: Input
|
|
150
|
+
}], isSticky: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], pageSize: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], inputFilters: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}], selection$: [{
|
|
157
|
+
type: Output
|
|
158
|
+
}], data: [{
|
|
159
|
+
type: Output
|
|
160
|
+
}], customRows: [{
|
|
161
|
+
type: ContentChildren,
|
|
162
|
+
args: [MatRowDef]
|
|
163
|
+
}], customCells: [{
|
|
164
|
+
type: ContentChildren,
|
|
165
|
+
args: [CustomCellDirective]
|
|
166
|
+
}], OnStateReset: [{
|
|
167
|
+
type: Output
|
|
168
|
+
}], OnSaveState: [{
|
|
169
|
+
type: Output
|
|
170
|
+
}], state$: [{
|
|
171
|
+
type: Output
|
|
172
|
+
}] } });
|
|
173
|
+
const addTimeStamp = () => (obs) => obs.pipe(map((t, i) => ({ value: t, index: i })));
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixlQUFlLEVBRWYsdUJBQXVCLEVBQ3ZCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFjLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQW1CLFNBQVMsRUFBWSxNQUFNLDZCQUE2QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxvQkFBb0IsRUFBVSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUcsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFD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ckMsZUFBZTt1QkFBQyxTQUFTO2dCQUNZLFdBQVc7c0JBQWhELGVBQWU7dUJBQUMsbUJBQW1CO2dCQUMxQixZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNOztBQXdIVCxNQUFNLFlBQVksR0FBRyxHQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQWlCLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgSW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFycmF5QWRkaXRpb25hbCwgRmllbGRUeXBlLCBNZXRhRGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZic7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaXJzdCwgbGFzdCwgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRhYmxlQnVpbGRlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdGFibGUtYnVpbGRlcic7XG5pbXBvcnQgeyBNYXRSb3dEZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBDdXN0b21DZWxsRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyAgVGFibGVTdG9yZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdGFibGUtc3RvcmUnO1xuaW1wb3J0IHsgRGF0YUZpbHRlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZGF0YS1maWx0ZXInO1xuaW1wb3J0IHsgbWFwQXJyYXksIG5vdE51bGwsIHNraXBPbmVXaGVuIH0gZnJvbSAnLi4vLi4vLi4vcnhqcy9yeGpzLW9wZXJhdG9ycyc7XG5pbXBvcnQgeyBFeHBvcnRUb0NzdlNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHBvcnQtdG8tY3N2LnNlcnZpY2UnO1xuaW1wb3J0IHsgQXJyYXlEZWZhdWx0cyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvRGVmYXVsdFNldHRpbmdzJztcbmltcG9ydCB7IFRhYmxlQnVpbGRlckNvbmZpZywgVGFibGVCdWlsZGVyQ29uZmlnVG9rZW4gfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlQnVpbGRlckNvbmZpZyc7XG5pbXBvcnQgKiBhcyBzZWxlY3RvcnMgZnJvbSAnLi4vLi4vbmdyeC9zZWxlY3RvcnMnO1xuaW1wb3J0IHsgc2VsZWN0LCBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGRlbGV0ZUxvY2FsUHJvZmlsZXNTdGF0ZSwgc2V0TG9jYWxQcm9maWxlLCBzZXRMb2NhbFByb2ZpbGVzU3RhdGUgfSBmcm9tICcuLi8uLi9uZ3J4L2FjdGlvbnMnO1xuaW1wb3J0IHsgUGVyc2lzdGVkVGFibGVTdGF0ZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGFibGVTdGF0ZSc7XG5pbXBvcnQgeyBzb3J0RGF0YSB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9zb3J0LWRhdGEtZnVuY3Rpb24nO1xuaW1wb3J0IHsgV3JhcHBlckZpbHRlclN0b3JlIH0gZnJvbSAnLi4vdGFibGUtY29udGFpbmVyLWZpbHRlci90YWJsZS13cmFwcGVyLWZpbHRlci1zdG9yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQ29sdW1uSW5mbyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvQ29sdW1uSW5mbyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RiLXRhYmxlLWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jb250YWluZXIuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWNvbnRhaW5lci5jc3MnLCcuLi8uLi9zdHlsZXMvY29sbGFwc2VyLnN0eWxlcy5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtUYWJsZVN0b3JlLEV4cG9ydFRvQ3N2U2VydmljZSxXcmFwcGVyRmlsdGVyU3RvcmVdXG59KSBleHBvcnQgY2xhc3MgVGFibGVDb250YWluZXJDb21wb25lbnQ8VCA9IGFueT4ge1xuICBASW5wdXQoKSB0YWJsZUlkITogc3RyaW5nO1xuICBASW5wdXQoKSBTYXZlU3RhdGUgPSBmYWxzZTtcbiAgQElucHV0KCkgdGFibGVCdWlsZGVyITogVGFibGVCdWlsZGVyO1xuICBASW5wdXQoKSBJbmRleENvbHVtbiA9IGZhbHNlO1xuICBASW5wdXQoKSBTZWxlY3Rpb25Db2x1bW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdHJhY2tCeSE6IHN0cmluZztcbiAgQElucHV0KCkgaXNTdGlja3kgPSB0cnVlO1xuICBASW5wdXQoKSBzZXQgcGFnZVNpemUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuc3RhdGUuc2V0UGFnZVNpemUodmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpIGlucHV0RmlsdGVycyE6IE9ic2VydmFibGU8QXJyYXk8KHZhbDogVCkgPT4gYm9vbGVhbj4+O1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uJCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgZGF0YVN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxPYnNlcnZhYmxlPFRbXT4+KDEpO1xuICBAT3V0cHV0KCkgZGF0YSA9IHRoaXMuZGF0YVN1YmplY3QucGlwZShcbiAgICBzd2l0Y2hNYXAoIGQgPT4gZCksXG4gICAgc2hhcmVSZXBsYXkoe3JlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pXG4gICk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihNYXRSb3dEZWYpIGN1c3RvbVJvd3MhOiBRdWVyeUxpc3Q8TWF0Um93RGVmPGFueT4+O1xuICBAQ29udGVudENoaWxkcmVuKEN1c3RvbUNlbGxEaXJlY3RpdmUpIGN1c3RvbUNlbGxzITogUXVlcnlMaXN0PEN1c3RvbUNlbGxEaXJlY3RpdmU+O1xuICBAT3V0cHV0KCkgT25TdGF0ZVJlc2V0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgT25TYXZlU3RhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzdGF0ZSQgOiBPYnNlcnZhYmxlPFBlcnNpc3RlZFRhYmxlU3RhdGU+O1xuXG4gIG15Q29sdW1ucyQhOiBPYnNlcnZhYmxlPENvbHVtbkluZm9bXT47XG5cbiAgc3RhdGVLZXlzJD86IE9ic2VydmFibGU8c3RyaW5nW10gfCBudWxsPjtcbiAgY3VycmVudFN0YXRlS2V5JD86IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3RhdGU6IFRhYmxlU3RvcmUsXG4gICAgcHVibGljIGV4cG9ydFRvQ3N2U2VydmljZTogRXhwb3J0VG9Dc3ZTZXJ2aWNlPFQ+LFxuICAgIEBJbmplY3QoVGFibGVCdWlsZGVyQ29uZmlnVG9rZW4pIHByaXZhdGUgY29uZmlnOiBUYWJsZUJ1aWxkZXJDb25maWcsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8YW55PlxuICApIHtcbiAgICAgdGhpcy5zdGF0ZS5vbiggdGhpcy5zdGF0ZS5nZXRTYXZhYmxlU3RhdGUoKS5waXBlKGxhc3QoKSksIGZpbmFsU3RhdGUgPT4ge1xuICAgICAgaWYodGhpcy50YWJsZUlkKSB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2V0TG9jYWxQcm9maWxlKHtrZXk6dGhpcy50YWJsZUlkLHZhbHVlOiBmaW5hbFN0YXRlfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc3RhdGUkID0gdGhpcy5zdGF0ZS5nZXRTYXZhYmxlU3RhdGUoKS5waXBlKG1hcChzdGF0ZSA9PlxuICAgICAgY2xvbmVEZWVwKHN0YXRlKSksc2hhcmVSZXBsYXkoe3JlZkNvdW50OnRydWUsYnVmZmVyU2l6ZToxfSkpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zdGF0ZS5zZXRUYWJsZVNldHRpbmdzKHRoaXMudGFibGVCdWlsZGVyLnNldHRpbmdzKTtcbiAgICBpZih0aGlzLnRhYmxlSWQpIHtcbiAgICAgIHRoaXMuc3RhdGUudXBkYXRlU3RhdGUoXG4gICAgICAgIHRoaXMuc3RvcmUucGlwZShcbiAgICAgICAgICBzZWxlY3Qoc2VsZWN0b3JzLnNlbGVjdExvY2FsUHJvZmlsZVN0YXRlPGFueT4odGhpcy50YWJsZUlkKSApLFxuICAgICAgICAgIG5vdE51bGwoKSxcbiAgICAgICAgICB0aGlzLmNsZWFuU3RhdGVPbkluaXRpYWxMb2FkKCksXG4gICAgICAgICAgc2tpcE9uZVdoZW4odGhpcy5PblNhdmVTdGF0ZSksXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICB0aGlzLnN0YXRlS2V5cyQgPSB0aGlzLnN0b3JlLnNlbGVjdChzZWxlY3RvcnMuc2VsZWN0TG9jYWxQcm9maWxlS2V5cyh0aGlzLnRhYmxlSWQpKTtcbiAgICAgIHRoaXMuY3VycmVudFN0YXRlS2V5JCA9IHRoaXMuc3RvcmUuc2VsZWN0KHNlbGVjdG9ycy5zZWxlY3RMb2NhbFByb2ZpbGVDdXJyZW50S2V5KHRoaXMudGFibGVJZCkpO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJzJCA9IHRoaXMuc3RhdGUuZmlsdGVycyQucGlwZShtYXAoIGZpbHRlcnMgPT4gT2JqZWN0LnZhbHVlcyhmaWx0ZXJzKSApKVxuICAgIGNvbnN0IGRhdGEgPSBuZXcgRGF0YUZpbHRlcih0aGlzLmlucHV0RmlsdGVycylcbiAgICAgIC5hcHBlbmRGaWx0ZXJzKGZpbHRlcnMkKVxuICAgICAgLmZpbHRlckRhdGEodGhpcy50YWJsZUJ1aWxkZXIuZ2V0RGF0YSQoKSk7XG4gICAgdGhpcy5kYXRhU3ViamVjdC5uZXh0KGRhdGEpO1xuICB9XG5cbiAgZXhwb3J0VG9Dc3YoKTogdm9pZCB7XG4gICAgY29uc3Qgc29ydGVkID0gdGhpcy5kYXRhLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnN0YXRlLnNvcnRlZCQpLFxuICAgICAgbWFwKChbZGF0YSwgc29ydGVkXSkgPT4gc29ydERhdGEoZGF0YSwgc29ydGVkKSlcbiAgICApO1xuICAgIHRoaXMuZXhwb3J0VG9Dc3ZTZXJ2aWNlLmV4cG9ydFRvQ3N2KHNvcnRlZCk7XG4gIH1cblxuICBzYXZlU3RhdGUoKSB7XG4gICAgdGhpcy5zdGF0ZS5nZXRTYXZhYmxlU3RhdGUoKS5waXBlKFxuICAgICAgZmlyc3QoKVxuICAgICkuc3Vic2NyaWJlKCB0YWJsZVN0YXRlID0+IHtcbiAgICAgIHRoaXMuT25TYXZlU3RhdGUubmV4dChudWxsKTtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2V0TG9jYWxQcm9maWxlKHsga2V5OiB0aGlzLnRhYmxlSWQsIHZhbHVlOnRhYmxlU3RhdGUsIHBlcnNpc3Q6IHRydWV9ICkpO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0UHJvZmlsZVN0YXRlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChzZXRMb2NhbFByb2ZpbGVzU3RhdGUoe2tleTp0aGlzLnRhYmxlSWQsIGN1cnJlbnQ6IHZhbH0pKTtcbiAgfVxuXG4gIGRlbGV0ZVByb2ZpbGVTdGF0ZShzdGF0ZUtleTogc3RyaW5nKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChkZWxldGVMb2NhbFByb2ZpbGVzU3RhdGUoe2tleTp0aGlzLnRhYmxlSWQsIHN0YXRlS2V5fSkpO1xuICB9XG5cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5Jbml0aWFsaXplQ29sdW1ucygpO1xuICB9XG5cblxuICBJbml0aWFsaXplQ29sdW1ucygpIHtcbiAgICBjb25zdCBjdXN0b21DZWxsTWFwID0gbmV3IE1hcCh0aGlzLmN1c3RvbUNlbGxzLm1hcChjYyA9PiBbY2MuY3VzdG9tQ2VsbCxjY10pKTtcbiAgICB0aGlzLnN0YXRlLnNldE1ldGFEYXRhKHRoaXMudGFibGVCdWlsZGVyLm1ldGFEYXRhJCEucGlwZShcbiAgICAgIGZpcnN0KCksXG4gICAgICBtYXAoKG1kcykgPT4ge1xuICAgICAgICBtZHMgPSBtZHMubWFwKHRoaXMubWFwTWV0YURhdGFzKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAuLi5tZHMsXG4gICAgICAgICAgLi4udGhpcy5jdXN0b21DZWxscy5tYXAoIGNjID0+IGNjLmdldE1ldGFEYXRhKG1kcy5maW5kKCBpdGVtID0+IGl0ZW0ua2V5ID09PSBjYy5jdXN0b21DZWxsICkpIClcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICApKTtcblxuICAgIHRoaXMubXlDb2x1bW5zJCA9IHRoaXMuc3RhdGUubWV0YURhdGFBcnJheSQucGlwZShcbiAgICAgIG1hcEFycmF5KCBtZXRhRGF0YSA9PiAoe21ldGFEYXRhLCBjdXN0b21DZWxsOiBjdXN0b21DZWxsTWFwLmdldChtZXRhRGF0YS5rZXkpIX0pKVxuICAgICk7XG4gIH1cbiAgbWFwTWV0YURhdGFzID0gKG1ldGEgOiBNZXRhRGF0YTxUPikgPT4ge1xuICAgIGlmKG1ldGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQXJyYXkpe1xuICAgICAgY29uc3QgYWRkaXRpb25hbCA9IHsuLi5tZXRhLmFkZGl0aW9uYWx9IGFzIEFycmF5QWRkaXRpb25hbDtcbiAgICAgIGFkZGl0aW9uYWwuYXJyYXlTdHlsZSA9IGFkZGl0aW9uYWw/LmFycmF5U3R5bGUgPz8gQXJyYXlEZWZhdWx0cy5hcnJheVN0eWxlO1xuICAgICAgYWRkaXRpb25hbC5saW1pdCA9IGFkZGl0aW9uYWwubGltaXQgPz8gdGhpcy5jb25maWcuYXJyYXlJbmZvPy5saW1pdCA/PyBBcnJheURlZmF1bHRzLmxpbWl0O1xuICAgICAgcmV0dXJuIHsuLi5tZXRhLGFkZGl0aW9uYWx9XG4gICAgfVxuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgY2xlYW5TdGF0ZU9uSW5pdGlhbExvYWQgPSAoKSA9PiAob2JzOk9ic2VydmFibGU8UGVyc2lzdGVkVGFibGVTdGF0ZT4pID0+XG4gICAgY29tYmluZUxhdGVzdChbb2JzLnBpcGUoYWRkVGltZVN0YW1wKCkpICwgdGhpcy50YWJsZUJ1aWxkZXIubWV0YURhdGEkIV0pLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKFtzdGF0ZV0sW3N0YXRlMl0pPT5zdGF0ZS5pbmRleCA9PT0gc3RhdGUyLmluZGV4KSxcbiAgICBtYXAoKFt7dmFsdWU6c3RhdGV9LG1ldGFzXSxpbmRleCk9PntcbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QudmFsdWVzKHN0YXRlLmZpbHRlcnMpLmZpbHRlcihmbHRyID0+IG1ldGFzLnNvbWUobSA9PiBtLmtleSA9PT0gZmx0ci5rZXkpKS5yZWR1Y2UoKG9iajogYW55LCBmaWx0ZXIpID0+IHtcbiAgICAgICAgICBvYmpbZmlsdGVyLmZpbHRlcklkIV0gPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlci5maWx0ZXJJZCFdO1xuICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgY29uc3Qgc29ydGVkID0gc3RhdGUuc29ydGVkLmZpbHRlcihzID0+IG1ldGFzLnNvbWUobSA9PiBtLmtleSA9PT0gcy5hY3RpdmUpKTtcbiAgICAgICAgcmV0dXJuICh7Li4uc3RhdGUsZmlsdGVycyxzb3J0ZWR9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfSlcbiAgKTtcbiAgY29sbGFwc2VIZWFkZXIkID0gdGhpcy5zdGF0ZS5zdGF0ZSQucGlwZShtYXAoc3RhdGUgPT4gc3RhdGUucGVyc2lzdGVkVGFibGVTZXR0aW5ncy5jb2xsYXBzZUhlYWRlcikpO1xuXG59XG5jb25zdCBhZGRUaW1lU3RhbXAgPSA8VD4oKSA9PiAob2JzOk9ic2VydmFibGU8VD4pID0+IG9icy5waXBlKG1hcCgodCxpKSA9PiAoe3ZhbHVlOnQsaW5kZXg6aX0pKSk7XG4iLCI8bmctY29udGFpbmVyIG11bHRpU29ydD5cbiAgPG5nLWNvbnRhaW5lciAqbmdyeExldD1cInN0YXRlLnRhYmxlU2V0dGluZ3MkIGFzIHRhYmxlU2V0dGluZ3NcIj5cblxuXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci13cmFwcGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnRiLWhlYWRlci10aXRsZVwiXG4gICAgICAgICAgKm5nSWY9XCIoIShjb2xsYXBzZUhlYWRlciQgfCBhc3luYykpIHx8IHRhYmxlU2V0dGluZ3Muc2hvd1RpdGxlV2hlbkhlYWRlckNvbGxhcHNlZFwiPlxuXG4gICAgICAgIDwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZseC1yb3ctZW5kXCI+XG4gICAgICAgIDxsaWItZmlsdGVyLWxpc3Q+PC9saWItZmlsdGVyLWxpc3Q+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKTsgZWxzZSBhbGxNZW51XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj0ncHJpbWFyeScgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1haW5NZW51XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZmxhdC1tZW51JzooY29sbGFwc2VIZWFkZXIkIHwgYXN5bmMpfVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPnt7KGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSA/ICdtb3JlX2hvcml6JyA6ICdtb3JlX3ZlcnQnfX08L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxtYXQtbWVudSAjbWFpbk1lbnU9J21hdE1lbnUnPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVFeHRyYVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2FsbE1lbnU+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9J3ByaW1hcnknIFttYXRNZW51VHJpZ2dlckZvcl09XCJtYWluTWVudVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ZsYXQtbWVudSc6KGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKX1cIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj57eyhjb2xsYXBzZUhlYWRlciQgfCBhc3luYykgPyAnbW9yZV9ob3JpeicgOiAnbW9yZV92ZXJ0J319PC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8bWF0LW1lbnUgI21haW5NZW51PSdtYXRNZW51Jz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyTWVudVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyTWVudUV4dHJhXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG1hdC1pY29uIFttYXRUb29sdGlwXT1cIihjb2xsYXBzZUhlYWRlciQgfCBhc3luYykgPyAnZXhwYW5kJyA6ICdjb2xsYXBzZSdcIiBjbGFzcz1cImNvbGxhcHNlLWljb24gaGVhZGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwic3RhdGUudG9nZ2xlQ29sbGFwc2VIZWFkZXIoKVwiPlxuICAgICAgICAgIHt7KGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnfX1cbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBzdHlsZT1cImNsZWFyOiBib3RoO1wiPlxuICAgICAgPHRiLWdlbmVyaWMtdGFibGUgW3Jvd3NdPSdjdXN0b21Sb3dzJyBbZGF0YSRdPVwiZGF0YVwiIFtJbmRleENvbHVtbl09J0luZGV4Q29sdW1uJ1xuICAgICAgICBbU2VsZWN0aW9uQ29sdW1uXT0nU2VsZWN0aW9uQ29sdW1uJyAoc2VsZWN0aW9uJCk9J3NlbGVjdGlvbiQuZW1pdCgkZXZlbnQpJyBbdHJhY2tCeV09J3RyYWNrQnknXG4gICAgICAgIFtpc1N0aWNreV09J2lzU3RpY2t5JyBbY29sdW1uSW5mb3NdPSdteUNvbHVtbnMkJz5cbiAgICAgIDwvdGItZ2VuZXJpYy10YWJsZT5cbiAgICA8L2Rpdj5cblxuXG5cbiAgICA8bmctdGVtcGxhdGUgI2hlYWRlck1lbnU+XG4gICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICA8dGItZmlsdGVyLWRpc3BsYXllciAqbmdJZj1cIiF0YWJsZVNldHRpbmdzLmhpZGVGaWx0ZXJcIj5cbiAgICAgICAgPC90Yi1maWx0ZXItZGlzcGxheWVyPlxuICAgICAgICA8dGItY29sLWRpc3BsYXllciAqbmdJZj1cIiF0YWJsZVNldHRpbmdzLmhpZGVDb2x1bW5TZXR0aW5nc1wiPjwvdGItY29sLWRpc3BsYXllcj5cbiAgICAgICAgPHRiLXNvcnQtbWVudSAqbmdJZj1cIiF0YWJsZVNldHRpbmdzLmhpZGVTb3J0XCI+PC90Yi1zb3J0LW1lbnU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyTWVudUV4dHJhPlxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJzdGF0ZS5yZXNldFN0YXRlKCk7T25TdGF0ZVJlc2V0Lm5leHQobnVsbClcIj5cbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDxzcGFuPlJlc2V0IHRhYmxlPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImV4cG9ydFRvQ3N2KClcIiAqbmdJZj1cIiF0YWJsZVNldHRpbmdzLmhpZGVFeHBvcnRcIj5cbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPmZpbGVfZG93bmxvYWQ8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj5FeHBvcnQgVGFibGU8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50U3RhdGVLZXkkIHwgYXN5bmMgYXMgY3VycmVudEtleVwiPlxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nSWY9XCJ0YWJsZUlkXCIgKGNsaWNrKT1cInNhdmVTdGF0ZSgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPnNhdmU8L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuPlNhdmUgdG8ge3tjdXJyZW50S2V5fX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPSd0YWJsZUlkJyBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJzYXZlZE5hbWVzXCI+XG4gICAgICAgICAgPHNwYW4+Q2hvb3NlIFByb2ZpbGU8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxtYXQtbWVudSAjc2F2ZWROYW1lcz0nbWF0TWVudScgcGFuZWxDbGFzcz0nd2lkZS1tZW51Jz5cbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsaWNrU3ViamVjdCAjYWRkPSdjbGlja1N1YmplY3QnPlxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuPk5ldzwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPSdsZXQga2V5IG9mIHN0YXRlS2V5cyQgfCBhc3luYyc+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9J3NldFByb2ZpbGVTdGF0ZShrZXkpJz5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9J2Rpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsnPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0nZGlzcGxheTpmbGV4Oyc+e3trZXl9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9J2Rpc3BsYXk6ZmxleDsnPlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwid2lkdGg6IDEyMHB4O1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY29sb3I9J3dhcm4nIChjbGljayk9J2RlbGV0ZVByb2ZpbGVTdGF0ZShrZXkpJyBzdG9wLXByb3BhZ2F0aW9uPmRlbGV0ZV9mb3JldmVyPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9tYXQtbWVudT5cbiAgICAgIDxkaXYgKm9wRGlhbG9nPSdhZGQnPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPGlucHV0IHN0eWxlPSd3aWR0aDo5MCUnIG1hdElucHV0ICNhZGRlZEtleSAvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT0nc2V0UHJvZmlsZVN0YXRlKGFkZGVkS2V5LnZhbHVlKTsgYWRkLm5leHQoZmFsc2UpOydcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWFkZGVkS2V5LnZhbHVlXCI+QWRkPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gIDwvbmctY29udGFpbmVyPlxuXG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { map } from 'rxjs/operators';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../../classes/table-store";
|
|
5
|
+
import * as i2 from "../table-wrapper-filter-store";
|
|
6
|
+
import * as i3 from "@angular/material/button";
|
|
7
|
+
import * as i4 from "@angular/material/icon";
|
|
8
|
+
import * as i5 from "../../filter/filter.component";
|
|
9
|
+
import * as i6 from "@angular/material/chips";
|
|
10
|
+
import * as i7 from "@ngrx/component";
|
|
11
|
+
import * as i8 from "@angular/common";
|
|
12
|
+
import * as i9 from "@angular/material/tooltip";
|
|
13
|
+
import * as i10 from "../../../pipes/key-display";
|
|
14
|
+
import * as i11 from "../../../pipes/format-filter-type.pipe";
|
|
15
|
+
import * as i12 from "../../../pipes/format-filter-value.pipe";
|
|
16
|
+
export class FilterChipsComponent {
|
|
17
|
+
constructor(tableState, filterStore) {
|
|
18
|
+
this.tableState = tableState;
|
|
19
|
+
this.filterStore = filterStore;
|
|
20
|
+
this.filters$ = this.tableState.filters$.pipe(map(filters => Object.values(filters)));
|
|
21
|
+
this.currentFilters$ = this.filterStore.currentFilters$;
|
|
22
|
+
}
|
|
23
|
+
deleteByIndex(index) {
|
|
24
|
+
this.filterStore.deleteByIndex(index);
|
|
25
|
+
}
|
|
26
|
+
addFilter(filter) {
|
|
27
|
+
this.filterStore.addFilter(filter);
|
|
28
|
+
}
|
|
29
|
+
clearAll() {
|
|
30
|
+
this.filterStore.clearAll();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
FilterChipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FilterChipsComponent, deps: [{ token: i1.TableStore }, { token: i2.WrapperFilterStore }], target: i0.ɵɵFactoryTarget.Component });
|
|
34
|
+
FilterChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: FilterChipsComponent, selector: "lib-filter-list", ngImport: i0, template: "<div style=\"display: flex; flex-direction: row;justify-content: flex-end;\" *ngrxLet=\"currentFilters$ as currentFilters\" >\n\n <button class=\"cancel-button pull-right\" *ngIf=\"currentFilters.length\" mat-icon-button (click)=\"clearAll()\"\n matTooltip=\"Close all Filters\">\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\n </button>\n\n\n <div *ngIf=\"currentFilters.length\" class=\"float\">\n <div class=\"filter\" *ngFor=\"let filter of (currentFilters$ | async); index as i;\">\n <tb-filter [filter]=\"filter\" (close)=\"deleteByIndex(i)\" > </tb-filter>\n </div>\n </div>\n\n <mat-chip-list *ngrxLet=\"filters$ as filters\">\n <mat-chip *ngFor=\"let filter of filters\" (dblclick)=\"addFilter(filter)\" (removed)=\"tableState.removeFilter(filter.filterId!)\">\n {{ filter.key | keyDisplay | async }} {{filter.filterType | formatFilterType : filter.filterValue}} {{ filter.filterValue | formatFilterValue: filter.key : filter.filterType | async }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <mat-chip *ngIf=\"filters.length >= 2\" (removed)=\"tableState.clearFilters()\">\n Clear All\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n </mat-chip-list>\n\n</div>\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{font-size:24px;font-weight:700;height:initial;line-height:initial}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:-moz-fit-content;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"], components: [{ type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.FilterComponent, selector: "tb-filter", inputs: ["filter"], outputs: ["close"] }, { type: i6.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }], directives: [{ type: i7.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i6.MatChipRemove, selector: "[matChipRemove]" }], pipes: { "async": i8.AsyncPipe, "keyDisplay": i10.KeyDisplayPipe, "formatFilterType": i11.FormatFilterTypePipe, "formatFilterValue": i12.FormatFilterValuePipe } });
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FilterChipsComponent, decorators: [{
|
|
36
|
+
type: Component,
|
|
37
|
+
args: [{ selector: 'lib-filter-list', template: "<div style=\"display: flex; flex-direction: row;justify-content: flex-end;\" *ngrxLet=\"currentFilters$ as currentFilters\" >\n\n <button class=\"cancel-button pull-right\" *ngIf=\"currentFilters.length\" mat-icon-button (click)=\"clearAll()\"\n matTooltip=\"Close all Filters\">\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\n </button>\n\n\n <div *ngIf=\"currentFilters.length\" class=\"float\">\n <div class=\"filter\" *ngFor=\"let filter of (currentFilters$ | async); index as i;\">\n <tb-filter [filter]=\"filter\" (close)=\"deleteByIndex(i)\" > </tb-filter>\n </div>\n </div>\n\n <mat-chip-list *ngrxLet=\"filters$ as filters\">\n <mat-chip *ngFor=\"let filter of filters\" (dblclick)=\"addFilter(filter)\" (removed)=\"tableState.removeFilter(filter.filterId!)\">\n {{ filter.key | keyDisplay | async }} {{filter.filterType | formatFilterType : filter.filterValue}} {{ filter.filterValue | formatFilterValue: filter.key : filter.filterType | async }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <mat-chip *ngIf=\"filters.length >= 2\" (removed)=\"tableState.clearFilters()\">\n Clear All\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n </mat-chip-list>\n\n</div>\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{font-size:24px;font-weight:700;height:initial;line-height:initial}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:-moz-fit-content;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"] }]
|
|
38
|
+
}], ctorParameters: function () { return [{ type: i1.TableStore }, { type: i2.WrapperFilterStore }]; } });
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXItZmlsdGVyL2ZpbHRlci1saXN0L2ZpbHRlci1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdXRpbGl0aWVzL3NyYy90YWJsZS1idWlsZGVyL2NvbXBvbmVudHMvdGFibGUtY29udGFpbmVyLWZpbHRlci9maWx0ZXItbGlzdC9maWx0ZXItbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFTckMsTUFBTSxPQUFPLG9CQUFvQjtJQUUvQixZQUFvQixVQUFzQixFQUFVLFdBQWdDO1FBQWhFLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7UUFHbEYsYUFBUSxHQUFrQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFjakgsb0JBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztJQWhCckQsQ0FBQztJQUlDLGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBc0I7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7O2lIQWpCUSxvQkFBb0I7cUdBQXBCLG9CQUFvQix1RENaakMsbXdDQTBCQTsyRkRkYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYWJsZVN0b3JlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy90YWJsZS1zdG9yZSc7XG5pbXBvcnQgeyBGaWx0ZXJJbmZvIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9maWx0ZXItaW5mbyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBXcmFwcGVyRmlsdGVyU3RvcmUgfSBmcm9tICcuLi90YWJsZS13cmFwcGVyLWZpbHRlci1zdG9yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1maWx0ZXItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuLi9nZW4tZmlsdGVyLWRpc3BsYXllci9nZW4tZmlsdGVyLWRpc3BsYXllci5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQ2hpcHNDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yKCBwdWJsaWMgdGFibGVTdGF0ZTogVGFibGVTdG9yZSwgcHJpdmF0ZSBmaWx0ZXJTdG9yZSA6IFdyYXBwZXJGaWx0ZXJTdG9yZSkge1xuICB9XG5cbiAgICBmaWx0ZXJzJDogT2JzZXJ2YWJsZTxGaWx0ZXJJbmZvPGFueT5bXT4gPSB0aGlzLnRhYmxlU3RhdGUuZmlsdGVycyQucGlwZShtYXAoIGZpbHRlcnMgPT4gT2JqZWN0LnZhbHVlcyhmaWx0ZXJzKSkpO1xuXG4gICAgZGVsZXRlQnlJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgICB0aGlzLmZpbHRlclN0b3JlLmRlbGV0ZUJ5SW5kZXgoaW5kZXgpO1xuICAgIH1cblxuICAgIGFkZEZpbHRlcihmaWx0ZXI6RmlsdGVySW5mbzxhbnk+KXtcbiAgICAgIHRoaXMuZmlsdGVyU3RvcmUuYWRkRmlsdGVyKGZpbHRlcik7XG4gICAgfVxuXG4gICAgY2xlYXJBbGwoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyU3RvcmUuY2xlYXJBbGwoKTtcbiAgICB9XG5cbiAgICBjdXJyZW50RmlsdGVycyQgPSB0aGlzLmZpbHRlclN0b3JlLmN1cnJlbnRGaWx0ZXJzJDtcbn1cbiIsIjxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93O2p1c3RpZnktY29udGVudDogZmxleC1lbmQ7XCIgKm5ncnhMZXQ9XCJjdXJyZW50RmlsdGVycyQgYXMgY3VycmVudEZpbHRlcnNcIiA+XG5cbiAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b24gcHVsbC1yaWdodFwiICpuZ0lmPVwiY3VycmVudEZpbHRlcnMubGVuZ3RoXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJjbGVhckFsbCgpXCJcbiAgICBtYXRUb29sdGlwPVwiQ2xvc2UgYWxsIEZpbHRlcnNcIj5cbiAgICA8bWF0LWljb24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCIgY29sb3I9XCJwcmltYXJ5XCI+Y2xvc2U8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cblxuXG4gIDxkaXYgKm5nSWY9XCJjdXJyZW50RmlsdGVycy5sZW5ndGhcIiBjbGFzcz1cImZsb2F0XCI+XG4gICAgPGRpdiBjbGFzcz1cImZpbHRlclwiICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgKGN1cnJlbnRGaWx0ZXJzJCB8IGFzeW5jKTsgaW5kZXggYXMgaTtcIj5cbiAgICAgIDx0Yi1maWx0ZXIgW2ZpbHRlcl09XCJmaWx0ZXJcIiAoY2xvc2UpPVwiZGVsZXRlQnlJbmRleChpKVwiID4gPC90Yi1maWx0ZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxtYXQtY2hpcC1saXN0ICpuZ3J4TGV0PVwiZmlsdGVycyQgYXMgZmlsdGVyc1wiPlxuICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGZpbHRlcnNcIiAoZGJsY2xpY2spPVwiYWRkRmlsdGVyKGZpbHRlcilcIiAgKHJlbW92ZWQpPVwidGFibGVTdGF0ZS5yZW1vdmVGaWx0ZXIoZmlsdGVyLmZpbHRlcklkISlcIj5cbiAgICAgIHt7IGZpbHRlci5rZXkgfCBrZXlEaXNwbGF5IHwgYXN5bmMgIH19IHt7ZmlsdGVyLmZpbHRlclR5cGUgfCBmb3JtYXRGaWx0ZXJUeXBlIDogZmlsdGVyLmZpbHRlclZhbHVlfX0ge3sgZmlsdGVyLmZpbHRlclZhbHVlIHwgZm9ybWF0RmlsdGVyVmFsdWU6IGZpbHRlci5rZXkgOiBmaWx0ZXIuZmlsdGVyVHlwZSAgfCBhc3luYyB9fVxuICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICA8L21hdC1jaGlwPlxuICAgIDxtYXQtY2hpcCAqbmdJZj1cImZpbHRlcnMubGVuZ3RoID49IDJcIiAocmVtb3ZlZCk9XCJ0YWJsZVN0YXRlLmNsZWFyRmlsdGVycygpXCI+XG4gICAgICBDbGVhciBBbGxcbiAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlPmNhbmNlbDwvbWF0LWljb24+XG4gICAgPC9tYXQtY2hpcD5cbiAgPC9tYXQtY2hpcC1saXN0PlxuXG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Component, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
+
import { FieldType } from '../../../interfaces/report-def';
|
|
3
|
+
import { map } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../../classes/table-store";
|
|
6
|
+
import * as i2 from "../table-wrapper-filter-store";
|
|
7
|
+
import * as i3 from "@angular/material/button";
|
|
8
|
+
import * as i4 from "@angular/material/icon";
|
|
9
|
+
import * as i5 from "@angular/material/menu";
|
|
10
|
+
import * as i6 from "../../../../utilities/directives/stop-propagation.directive";
|
|
11
|
+
import * as i7 from "@angular/material/tooltip";
|
|
12
|
+
import * as i8 from "@angular/common";
|
|
13
|
+
import * as i9 from "../../../../utilities/pipes/space-case.pipes";
|
|
14
|
+
export class GenFilterDisplayerComponent {
|
|
15
|
+
constructor(tableState, filterStore) {
|
|
16
|
+
this.tableState = tableState;
|
|
17
|
+
this.filterStore = filterStore;
|
|
18
|
+
this.filterCols$ = tableState.metaDataArray$.pipe(map(md => Object.values(md).filter(m => (m.fieldType !== FieldType.Hidden) && (!m.noFilter))));
|
|
19
|
+
}
|
|
20
|
+
addFilter(metaData) {
|
|
21
|
+
this.filterStore.addFilter({ key: metaData.key, fieldType: metaData.fieldType });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
GenFilterDisplayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: GenFilterDisplayerComponent, deps: [{ token: i1.TableStore }, { token: i2.WrapperFilterStore }], target: i0.ɵɵFactoryTarget.Component });
|
|
25
|
+
GenFilterDisplayerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: GenFilterDisplayerComponent, selector: "tb-filter-displayer", ngImport: i0, template: "<button stop-propagation class=\"filter-button\" mat-icon-button [matMenuTriggerFor]=\"menu\" matTooltip=\"Add Filter\">\n <mat-icon class=\"filter-icon\" color=\"primary\">filter_list</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\">\n <button class=\"filter-labels\" *ngFor=\"let md of filterCols$ | async\" (click)=\"addFilter(md)\" mat-menu-item>\n {{md.displayName || (md.key | spaceCase)}}\n </button>\n</mat-menu>\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{font-size:24px;font-weight:700;height:initial;line-height:initial}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:-moz-fit-content;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"], components: [{ type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i6.StopPropagationDirective, selector: "[stop-propagation]" }, { type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i8.AsyncPipe, "spaceCase": i9.SpaceCasePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: GenFilterDisplayerComponent, decorators: [{
|
|
27
|
+
type: Component,
|
|
28
|
+
args: [{ selector: 'tb-filter-displayer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button stop-propagation class=\"filter-button\" mat-icon-button [matMenuTriggerFor]=\"menu\" matTooltip=\"Add Filter\">\n <mat-icon class=\"filter-icon\" color=\"primary\">filter_list</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\">\n <button class=\"filter-labels\" *ngFor=\"let md of filterCols$ | async\" (click)=\"addFilter(md)\" mat-menu-item>\n {{md.displayName || (md.key | spaceCase)}}\n </button>\n</mat-menu>\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{font-size:24px;font-weight:700;height:initial;line-height:initial}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:-moz-fit-content;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"] }]
|
|
29
|
+
}], ctorParameters: function () { return [{ type: i1.TableStore }, { type: i2.WrapperFilterStore }]; } });
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuLWZpbHRlci1kaXNwbGF5ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXItZmlsdGVyL2dlbi1maWx0ZXItZGlzcGxheWVyL2dlbi1maWx0ZXItZGlzcGxheWVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdXRpbGl0aWVzL3NyYy90YWJsZS1idWlsZGVyL2NvbXBvbmVudHMvdGFibGUtY29udGFpbmVyLWZpbHRlci9nZW4tZmlsdGVyLWRpc3BsYXllci9nZW4tZmlsdGVyLWRpc3BsYXllci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBWSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdyRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBU3JDLE1BQU0sT0FBTywyQkFBMkI7SUFFdEMsWUFBb0IsVUFBc0IsRUFBUyxXQUFnQztRQUEvRCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVMsZ0JBQVcsR0FBWCxXQUFXLENBQXFCO1FBQ2pGLElBQUksQ0FBQyxXQUFXLEdBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ2hELEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUUsRUFBRSxDQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDaEcsQ0FBQztJQUNKLENBQUM7SUFJQyxTQUFTLENBQUMsUUFBa0I7UUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUM7SUFDakYsQ0FBQzs7d0hBWlEsMkJBQTJCOzRHQUEzQiwyQkFBMkIsMkRDYnhDLGdiQVFBOzJGREthLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDSSxxQkFBcUIsbUJBR2QsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1ldGFEYXRhLCBGaWVsZFR5cGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC1kZWYnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGFibGVTdG9yZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvdGFibGUtc3RvcmUnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgV3JhcHBlckZpbHRlclN0b3JlIH0gZnJvbSAnLi4vdGFibGUtd3JhcHBlci1maWx0ZXItc3RvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RiLWZpbHRlci1kaXNwbGF5ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9nZW4tZmlsdGVyLWRpc3BsYXllci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZ2VuLWZpbHRlci1kaXNwbGF5ZXIuY29tcG9uZW50LmNzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEdlbkZpbHRlckRpc3BsYXllckNvbXBvbmVudCB7XG5cbiAgY29uc3RydWN0b3IoIHB1YmxpYyB0YWJsZVN0YXRlOiBUYWJsZVN0b3JlLCBwdWJsaWMgZmlsdGVyU3RvcmUgOiBXcmFwcGVyRmlsdGVyU3RvcmUpIHtcbiAgICB0aGlzLmZpbHRlckNvbHMkID0gIHRhYmxlU3RhdGUubWV0YURhdGFBcnJheSQucGlwZShcbiAgICAgIG1hcChtZCA9PiBPYmplY3QudmFsdWVzKCBtZCApLmZpbHRlcihtID0+IChtLmZpZWxkVHlwZSAhPT0gRmllbGRUeXBlLkhpZGRlbikgJiYgKCFtLm5vRmlsdGVyKSkpLFxuICAgICk7XG4gIH1cblxuICAgIGZpbHRlckNvbHMkOiBPYnNlcnZhYmxlPE1ldGFEYXRhW10+O1xuXG4gICAgYWRkRmlsdGVyKG1ldGFEYXRhOiBNZXRhRGF0YSkge1xuICAgICAgdGhpcy5maWx0ZXJTdG9yZS5hZGRGaWx0ZXIoe2tleTogbWV0YURhdGEua2V5LCBmaWVsZFR5cGU6IG1ldGFEYXRhLmZpZWxkVHlwZX0pO1xuICAgIH1cbn1cbiIsIjxidXR0b24gc3RvcC1wcm9wYWdhdGlvbiBjbGFzcz1cImZpbHRlci1idXR0b25cIiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBtYXRUb29sdGlwPVwiQWRkIEZpbHRlclwiPlxuICA8bWF0LWljb24gY2xhc3M9XCJmaWx0ZXItaWNvblwiIGNvbG9yPVwicHJpbWFyeVwiPmZpbHRlcl9saXN0PC9tYXQtaWNvbj5cbjwvYnV0dG9uPlxuPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICA8YnV0dG9uIGNsYXNzPVwiZmlsdGVyLWxhYmVsc1wiICpuZ0Zvcj1cImxldCBtZCBvZiBmaWx0ZXJDb2xzJCB8IGFzeW5jXCIgKGNsaWNrKT1cImFkZEZpbHRlcihtZClcIiBtYXQtbWVudS1pdGVtPlxuICAgIHt7bWQuZGlzcGxheU5hbWUgfHwgKG1kLmtleSB8IHNwYWNlQ2FzZSl9fVxuICA8L2J1dHRvbj5cbjwvbWF0LW1lbnU+XG4iXX0=
|
package/esm2020/table-builder/components/table-container-filter/table-wrapper-filter-store.mjs
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import { ComponentStore } from "@ngrx/component-store";
|
|
3
|
+
import { map } from "rxjs/operators";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class WrapperFilterStore extends ComponentStore {
|
|
6
|
+
constructor() {
|
|
7
|
+
super({ filterInfo: [] });
|
|
8
|
+
this.clearAll = this.updater(() => ({ filterInfo: [] }));
|
|
9
|
+
this.deleteByIndex = this.updater((state, index) => {
|
|
10
|
+
const arr = [...state.filterInfo];
|
|
11
|
+
arr.splice(index, 1);
|
|
12
|
+
return { filterInfo: arr };
|
|
13
|
+
});
|
|
14
|
+
this.currentFilters$ = this.state$.pipe(map(state => state.filterInfo));
|
|
15
|
+
this.addFilter = this.updater((state, filter) => {
|
|
16
|
+
return ({ ...state, filterInfo: [...state.filterInfo, filter] });
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
WrapperFilterStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WrapperFilterStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
21
|
+
WrapperFilterStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WrapperFilterStore });
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WrapperFilterStore, decorators: [{
|
|
23
|
+
type: Injectable
|
|
24
|
+
}], ctorParameters: function () { return []; } });
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtd3JhcHBlci1maWx0ZXItc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL3RhYmxlLWNvbnRhaW5lci1maWx0ZXIvdGFibGUtd3JhcHBlci1maWx0ZXItc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUdyQyxNQUFNLE9BQU8sa0JBQW9CLFNBQVEsY0FBNEM7SUFDbkY7UUFDRSxLQUFLLENBQUMsRUFBQyxVQUFVLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQztRQUd6QixhQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFFLEVBQUUsQ0FBQSxDQUFDLEVBQUMsVUFBVSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxrQkFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUMsS0FBWSxFQUFDLEVBQUU7WUFDakQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNyQixPQUFPLEVBQUMsVUFBVSxFQUFDLEdBQUcsRUFBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0JBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUVuRSxjQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBQyxNQUFvQixFQUFDLEVBQUU7WUFDckQsT0FBTyxDQUFDLEVBQUMsR0FBRyxLQUFLLEVBQUMsVUFBVSxFQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQTtJQWJGLENBQUM7OytHQUhVLGtCQUFrQjttSEFBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSBcIkBuZ3J4L2NvbXBvbmVudC1zdG9yZVwiO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBQYXJ0aWFsRmlsdGVyIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvZmlsdGVyLWluZm9cIjtcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBXcmFwcGVyRmlsdGVyU3RvcmUgIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8e2ZpbHRlckluZm86UGFydGlhbEZpbHRlcltdfT57XG4gIGNvbnN0cnVjdG9yKCl7XG4gICAgc3VwZXIoe2ZpbHRlckluZm86W119KTtcbiAgfVxuXG4gIGNsZWFyQWxsID0gdGhpcy51cGRhdGVyKCgpPT4oe2ZpbHRlckluZm86W119KSk7XG4gIGRlbGV0ZUJ5SW5kZXggPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLGluZGV4Om51bWJlcik9PntcbiAgICBjb25zdCBhcnIgPSBbLi4uc3RhdGUuZmlsdGVySW5mb107XG4gICAgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuIHtmaWx0ZXJJbmZvOmFycn07XG4gIH0pO1xuXG4gIGN1cnJlbnRGaWx0ZXJzJCA9IHRoaXMuc3RhdGUkLnBpcGUobWFwKHN0YXRlID0+IHN0YXRlLmZpbHRlckluZm8pKTtcblxuICBhZGRGaWx0ZXIgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLGZpbHRlcjpQYXJ0aWFsRmlsdGVyKT0+e1xuICAgIHJldHVybiAoey4uLnN0YXRlLGZpbHRlckluZm86Wy4uLnN0YXRlLmZpbHRlckluZm8sZmlsdGVyXX0pO1xuICB9KVxufVxuIl19
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Directive, Input, Optional } from '@angular/core';
|
|
2
|
+
import { FieldType } from '../interfaces/report-def';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/cdk/table";
|
|
5
|
+
// here is how to use it
|
|
6
|
+
// <generic-table [report]="report">
|
|
7
|
+
// <p *customCell="'column1'; let element = element" [class.makeMeRed]="element?.port">If Port, i will be red</p>
|
|
8
|
+
// <p *customCell="'column2'">I am custom cell two </p>
|
|
9
|
+
// </generic-table>
|
|
10
|
+
export class CustomCellDirective {
|
|
11
|
+
constructor(templateRef, columnDef) {
|
|
12
|
+
this.templateRef = templateRef;
|
|
13
|
+
this.columnDef = columnDef;
|
|
14
|
+
this.TemplateRef = this.templateRef;
|
|
15
|
+
}
|
|
16
|
+
ngAfterContentInit() {
|
|
17
|
+
if (this.TemplateRef === null) {
|
|
18
|
+
this.TemplateRef = this.templateRef;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
getMetaData(metaData) {
|
|
22
|
+
return {
|
|
23
|
+
key: this.customCell,
|
|
24
|
+
displayName: this.displayName ?? metaData?.displayName,
|
|
25
|
+
preSort: this.preSort ?? metaData?.preSort,
|
|
26
|
+
fieldType: metaData?.fieldType ?? FieldType.Unknown,
|
|
27
|
+
order: this.customCellOrder ?? metaData?.order,
|
|
28
|
+
_internalNotUserDefined: !(!!metaData),
|
|
29
|
+
width: this.customCellWidth ?? metaData?.width,
|
|
30
|
+
customCell: true,
|
|
31
|
+
noExport: !metaData
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
CustomCellDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CustomCellDirective, deps: [{ token: i0.TemplateRef, optional: true }, { token: i1.CdkColumnDef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
36
|
+
CustomCellDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: CustomCellDirective, selector: "[customCell]", inputs: { customCell: "customCell", displayName: "displayName", preSort: "preSort", TemplateRef: "TemplateRef", customCellOrder: "customCellOrder", customCellWidth: "customCellWidth" }, ngImport: i0 });
|
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CustomCellDirective, decorators: [{
|
|
38
|
+
type: Directive,
|
|
39
|
+
args: [{
|
|
40
|
+
selector: '[customCell]',
|
|
41
|
+
}]
|
|
42
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
|
|
43
|
+
type: Optional
|
|
44
|
+
}] }, { type: i1.CdkColumnDef, decorators: [{
|
|
45
|
+
type: Optional
|
|
46
|
+
}] }]; }, propDecorators: { customCell: [{
|
|
47
|
+
type: Input
|
|
48
|
+
}], displayName: [{
|
|
49
|
+
type: Input
|
|
50
|
+
}], preSort: [{
|
|
51
|
+
type: Input
|
|
52
|
+
}], TemplateRef: [{
|
|
53
|
+
type: Input
|
|
54
|
+
}], customCellOrder: [{
|
|
55
|
+
type: Input
|
|
56
|
+
}], customCellWidth: [{
|
|
57
|
+
type: Input
|
|
58
|
+
}] } });
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNlbGwtZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvZGlyZWN0aXZlcy9jdXN0b20tY2VsbC1kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZSxLQUFLLEVBQW9CLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRixPQUFPLEVBQXFCLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFFeEUsd0JBQXdCO0FBQ3hCLG9DQUFvQztBQUNwQyxxSEFBcUg7QUFDckgsMkRBQTJEO0FBQzNELG1CQUFtQjtBQUluQixNQUFNLE9BQU8sbUJBQW1CO0lBTzVCLFlBQ3VCLFdBQTZCLEVBQy9CLFNBQXVCO1FBRHJCLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUMvQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBRXhDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN2QyxDQUFDO0lBQ0Qsa0JBQWtCO1FBQ2pCLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFvQjtRQUM5QixPQUFPO1lBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3BCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLFFBQVEsRUFBRSxXQUFXO1lBQ3RELE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxJQUFJLFFBQVEsRUFBRSxPQUFPO1lBQzFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxJQUFLLFNBQVMsQ0FBQyxPQUFPO1lBQ3BELEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxJQUFJLFFBQVEsRUFBRSxLQUFLO1lBQzlDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ3RDLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxJQUFJLFFBQVEsRUFBRSxLQUFLO1lBQzlDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxDQUFDLFFBQVE7U0FDcEIsQ0FBQztJQUNKLENBQUM7O2dIQS9CUSxtQkFBbUI7b0dBQW5CLG1CQUFtQjsyRkFBbkIsbUJBQW1CO2tCQUgvQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxjQUFjO2lCQUMzQjs7MEJBU00sUUFBUTs7MEJBQ1IsUUFBUTs0Q0FSRixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBUZW1wbGF0ZVJlZiwgSW5wdXQsIEFmdGVyQ29udGVudEluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtDb2x1bW5EZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvdGFibGUnO1xuaW1wb3J0IHsgU29ydERlZiwgTWV0YURhdGEsIEZpZWxkVHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZic7XG5cbi8vIGhlcmUgaXMgaG93IHRvIHVzZSBpdFxuLy8gPGdlbmVyaWMtdGFibGUgW3JlcG9ydF09XCJyZXBvcnRcIj5cbi8vICAgICA8cCAqY3VzdG9tQ2VsbD1cIidjb2x1bW4xJzsgbGV0IGVsZW1lbnQgPSBlbGVtZW50XCIgW2NsYXNzLm1ha2VNZVJlZF09XCJlbGVtZW50Py5wb3J0XCI+SWYgUG9ydCwgaSB3aWxsIGJlIHJlZDwvcD5cbi8vICAgICA8cCAqY3VzdG9tQ2VsbD1cIidjb2x1bW4yJ1wiPkkgYW0gY3VzdG9tIGNlbGwgdHdvIDwvcD5cbi8vIDwvZ2VuZXJpYy10YWJsZT5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2N1c3RvbUNlbGxdJyxcbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tQ2VsbERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICAgIEBJbnB1dCgpIGN1c3RvbUNlbGwhOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHJlU29ydD86IFNvcnREZWY7XG4gICAgQElucHV0KCkgVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgY3VzdG9tQ2VsbE9yZGVyPzogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGN1c3RvbUNlbGxXaWR0aD86IHN0cmluZztcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgIEBPcHRpb25hbCgpICBwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgICAgQE9wdGlvbmFsKCkgcHVibGljIGNvbHVtbkRlZjogQ2RrQ29sdW1uRGVmXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5UZW1wbGF0ZVJlZiA9IHRoaXMudGVtcGxhdGVSZWY7XG4gICAgIH1cbiAgICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgaWYgKHRoaXMuVGVtcGxhdGVSZWYgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5UZW1wbGF0ZVJlZiA9IHRoaXMudGVtcGxhdGVSZWY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TWV0YURhdGEobWV0YURhdGE/IDogTWV0YURhdGEpOiBNZXRhRGF0YSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IHRoaXMuY3VzdG9tQ2VsbCxcbiAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZGlzcGxheU5hbWUgPz8gbWV0YURhdGE/LmRpc3BsYXlOYW1lLFxuICAgICAgICBwcmVTb3J0OiB0aGlzLnByZVNvcnQgPz8gbWV0YURhdGE/LnByZVNvcnQsXG4gICAgICAgIGZpZWxkVHlwZTogbWV0YURhdGE/LmZpZWxkVHlwZSA/PyAgRmllbGRUeXBlLlVua25vd24sXG4gICAgICAgIG9yZGVyOiB0aGlzLmN1c3RvbUNlbGxPcmRlciA/PyBtZXRhRGF0YT8ub3JkZXIsXG4gICAgICAgIF9pbnRlcm5hbE5vdFVzZXJEZWZpbmVkOiAhKCEhbWV0YURhdGEpLFxuICAgICAgICB3aWR0aDogdGhpcy5jdXN0b21DZWxsV2lkdGggPz8gbWV0YURhdGE/LndpZHRoLFxuICAgICAgICBjdXN0b21DZWxsOiB0cnVlLFxuICAgICAgICBub0V4cG9ydDogIW1ldGFEYXRhXG4gICAgICB9O1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './custom-cell-directive';
|
|
2
|
+
export * from './multi-sort.directive';
|
|
3
|
+
export * from './resize-column.directive';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9kaXJlY3RpdmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jdXN0b20tY2VsbC1kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9tdWx0aS1zb3J0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3Jlc2l6ZS1jb2x1bW4uZGlyZWN0aXZlJztcbiJdfQ==
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import { MatSort } from '@angular/material/sort';
|
|
3
|
+
import { map } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../classes/table-store";
|
|
6
|
+
export class MultiSortDirective extends MatSort {
|
|
7
|
+
constructor(state) {
|
|
8
|
+
super();
|
|
9
|
+
this.state = state;
|
|
10
|
+
this.rules = [];
|
|
11
|
+
this.state.setSort(this.sortChange.pipe(map(sc => ({ key: sc.active, direction: sc.direction }))));
|
|
12
|
+
this.state.on(this.state.sorted$, rules => {
|
|
13
|
+
this.rules = rules;
|
|
14
|
+
if (this.active && rules.length === 0) {
|
|
15
|
+
this.active = '';
|
|
16
|
+
this.direction = '';
|
|
17
|
+
this.sortChange.emit({ active: '', direction: '' });
|
|
18
|
+
}
|
|
19
|
+
if (rules.length > 0 && (this.active !== rules[0].active || this.direction !== rules[0].direction)) {
|
|
20
|
+
this.active = rules[0].active;
|
|
21
|
+
this.direction = rules[0].direction;
|
|
22
|
+
this.sortChange.emit(rules[0]);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
MultiSortDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: MultiSortDirective, deps: [{ token: i1.TableStore }], target: i0.ɵɵFactoryTarget.Directive });
|
|
28
|
+
MultiSortDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: MultiSortDirective, selector: "[multiSort]", inputs: { disabled: ["matSortDisabled", "disabled"] }, providers: [
|
|
29
|
+
{ provide: MatSort, useExisting: MultiSortDirective }
|
|
30
|
+
], exportAs: ["multiSort"], usesInheritance: true, ngImport: i0 });
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: MultiSortDirective, decorators: [{
|
|
32
|
+
type: Directive,
|
|
33
|
+
args: [{
|
|
34
|
+
selector: '[multiSort]',
|
|
35
|
+
exportAs: 'multiSort',
|
|
36
|
+
inputs: ['disabled: matSortDisabled'],
|
|
37
|
+
providers: [
|
|
38
|
+
{ provide: MatSort, useExisting: MultiSortDirective }
|
|
39
|
+
]
|
|
40
|
+
}]
|
|
41
|
+
}], ctorParameters: function () { return [{ type: i1.TableStore }]; } });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc29ydC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9kaXJlY3RpdmVzL211bHRpLXNvcnQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQVEsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQVdyQyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsT0FBTztJQUc3QyxZQUFvQixLQUFpQjtRQUNuQyxLQUFLLEVBQUUsQ0FBQztRQURVLFVBQUssR0FBTCxLQUFLLENBQVk7UUFGckMsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUlqQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25HLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUNsQixLQUFLLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBRW5CLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDckQ7WUFFRCxJQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNqRyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEM7UUFFSCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7OytHQXpCVSxrQkFBa0I7bUdBQWxCLGtCQUFrQiw2RkFKbEI7UUFDVCxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFO0tBQ3REOzJGQUVVLGtCQUFrQjtrQkFSOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLE1BQU0sRUFBRSxDQUFDLDJCQUEyQixDQUFDO29CQUNyQyxTQUFTLEVBQUU7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsb0JBQW9CLEVBQUU7cUJBQ3REO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0U29ydCwgU29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGFibGVTdG9yZSB9IGZyb20gJy4uL2NsYXNzZXMvdGFibGUtc3RvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbXVsdGlTb3J0XScsXG4gIGV4cG9ydEFzOiAnbXVsdGlTb3J0JyxcbiAgaW5wdXRzOiBbJ2Rpc2FibGVkOiBtYXRTb3J0RGlzYWJsZWQnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBNYXRTb3J0LCB1c2VFeGlzdGluZzogTXVsdGlTb3J0RGlyZWN0aXZlIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBNdWx0aVNvcnREaXJlY3RpdmUgZXh0ZW5kcyBNYXRTb3J0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBydWxlczogU29ydFtdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGF0ZTogVGFibGVTdG9yZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zdGF0ZS5zZXRTb3J0KHRoaXMuc29ydENoYW5nZS5waXBlKG1hcChzYyA9PiAoeyBrZXk6IHNjLmFjdGl2ZSwgZGlyZWN0aW9uOiBzYy5kaXJlY3Rpb24gfSkpKSk7XG4gICAgdGhpcy5zdGF0ZS5vbihcbiAgICAgIHRoaXMuc3RhdGUuc29ydGVkJCxcbiAgICAgIHJ1bGVzID0+IHtcbiAgICAgICAgdGhpcy5ydWxlcyA9IHJ1bGVzO1xuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSAmJiBydWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZSA9ICcnO1xuICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gJyc7XG4gICAgICAgICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoeyBhY3RpdmU6ICcnLCBkaXJlY3Rpb246ICcnIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYocnVsZXMubGVuZ3RoID4gMCAmJiAodGhpcy5hY3RpdmUgIT09IHJ1bGVzWzBdLmFjdGl2ZSB8fCB0aGlzLmRpcmVjdGlvbiAhPT0gcnVsZXNbMF0uZGlyZWN0aW9uKSkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlID0gcnVsZXNbMF0uYWN0aXZlO1xuICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gcnVsZXNbMF0uZGlyZWN0aW9uO1xuICAgICAgICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KHJ1bGVzWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG59XG4iXX0=
|