@one-paragon/angular-utilities 0.0.26 → 0.0.29
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/rxjs/rxjs-operators.mjs +5 -2
- package/esm2020/table-builder/classes/TableState.mjs +9 -1
- package/esm2020/table-builder/classes/data-filter.mjs +3 -3
- package/esm2020/table-builder/classes/filter-info.mjs +12 -2
- package/esm2020/table-builder/classes/table-store.mjs +45 -5
- package/esm2020/table-builder/components/filter/filter.component.mjs +1 -1
- package/esm2020/table-builder/components/filter/in-list/in-list-filter.component.mjs +4 -4
- package/esm2020/table-builder/components/header-menu/header-menu.component.mjs +3 -3
- package/esm2020/table-builder/components/table-container/table-container.mjs +119 -49
- package/esm2020/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +5 -2
- package/esm2020/table-builder/directives/index.mjs +3 -1
- package/esm2020/table-builder/directives/table-wrapper.directive.mjs +20 -0
- package/esm2020/table-builder/directives/tb-filter.directive.mjs +380 -0
- package/esm2020/table-builder/enums/filterTypes.mjs +2 -1
- package/esm2020/table-builder/services/table-template-service.mjs +1 -1
- package/esm2020/table-builder/table-builder.module.mjs +37 -3
- package/fesm2015/one-paragon-angular-utilities.mjs +857 -304
- package/fesm2015/one-paragon-angular-utilities.mjs.map +1 -1
- package/fesm2020/one-paragon-angular-utilities.mjs +857 -309
- package/fesm2020/one-paragon-angular-utilities.mjs.map +1 -1
- package/package.json +1 -1
- package/rxjs/rxjs-operators.d.ts +2 -0
- package/table-builder/classes/TableState.d.ts +9 -2
- package/table-builder/classes/data-filter.d.ts +2 -2
- package/table-builder/classes/filter-info.d.ts +14 -3
- package/table-builder/classes/table-store.d.ts +26 -6
- package/table-builder/components/filter/filter.component.d.ts +13 -0
- package/table-builder/components/filter/in-list/in-list-filter.component.d.ts +1 -1
- package/table-builder/components/table-container/table-container.d.ts +15 -21
- package/table-builder/directives/index.d.ts +2 -0
- package/table-builder/directives/table-wrapper.directive.d.ts +9 -0
- package/table-builder/directives/tb-filter.directive.d.ts +119 -0
- package/table-builder/enums/filterTypes.d.ts +2 -1
- package/table-builder/table-builder.module.d.ts +12 -10
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Directive, Input, NgModule, Injectable, InjectionToken, Pipe, Inject, Component, ChangeDetectionStrategy, ViewChild, HostListener, Injector, ElementRef, Output, Optional, EventEmitter, ContentChildren } from '@angular/core';
|
|
3
|
-
import { shareReplay, switchAll, map, filter, tap, catchError, startWith, switchMap, mergeMap, pluck, pairwise, last, takeUntil, distinctUntilKeyChanged, delay, distinct,
|
|
4
|
-
import
|
|
3
|
+
import { shareReplay, switchAll, map, filter, tap, catchError, startWith, switchMap, mergeMap, pluck, first, pairwise, last, takeUntil, distinctUntilKeyChanged, delay, distinct, distinctUntilChanged, withLatestFrom, mergeAll, scan } from 'rxjs/operators';
|
|
4
|
+
import * as i2$2 from 'rxjs';
|
|
5
|
+
import { Subject, isObservable, of, ReplaySubject, Observable, combineLatest, Subscription, fromEvent, merge as merge$1, asyncScheduler, tap as tap$1, BehaviorSubject, takeUntil as takeUntil$1, from, switchMap as switchMap$1, scan as scan$1, startWith as startWith$1 } from 'rxjs';
|
|
5
6
|
import { ComponentStore } from '@ngrx/component-store';
|
|
6
|
-
import * as i3$
|
|
7
|
+
import * as i3$2 from '@angular/material/table';
|
|
7
8
|
import { MatColumnDef, MatTableDataSource, MatTable, MatTableModule, MatRowDef } from '@angular/material/table';
|
|
8
9
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
9
10
|
import * as _ from 'lodash';
|
|
@@ -22,11 +23,11 @@ import * as i1$1 from '@angular/material/sort';
|
|
|
22
23
|
import { MatSortModule, MatSort } from '@angular/material/sort';
|
|
23
24
|
import * as i4$2 from '@angular/material/menu';
|
|
24
25
|
import { MatMenuTrigger, MatMenuModule } from '@angular/material/menu';
|
|
25
|
-
import * as i3 from '@angular/material/button';
|
|
26
|
+
import * as i3$1 from '@angular/material/button';
|
|
26
27
|
import { MatButtonModule } from '@angular/material/button';
|
|
27
28
|
import * as i5 from '@angular/forms';
|
|
28
29
|
import { NG_VALUE_ACCESSOR, ControlContainer, NgForm, FormsModule } from '@angular/forms';
|
|
29
|
-
import * as
|
|
30
|
+
import * as i3 from '@angular/material/checkbox';
|
|
30
31
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
31
32
|
import * as i6 from '@angular/material/form-field';
|
|
32
33
|
import * as i7 from '@angular/material/radio';
|
|
@@ -39,14 +40,14 @@ import * as i13 from '@angular/material/tooltip';
|
|
|
39
40
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
40
41
|
import * as i7$1 from '@ngrx/component';
|
|
41
42
|
import { ReactiveComponentModule } from '@ngrx/component';
|
|
42
|
-
import * as i2
|
|
43
|
+
import * as i2 from '@angular/material/paginator';
|
|
43
44
|
import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
|
|
44
45
|
import * as i1$2 from '@angular/cdk/table';
|
|
45
|
-
import * as i2$
|
|
46
|
+
import * as i2$1 from '@angular/material/card';
|
|
46
47
|
import { MatCardModule } from '@angular/material/card';
|
|
47
48
|
import * as i6$1 from '@angular/material/select';
|
|
48
49
|
import { MatSelectModule } from '@angular/material/select';
|
|
49
|
-
import * as
|
|
50
|
+
import * as i6$2 from '@angular/material/core';
|
|
50
51
|
import { MatNativeDateModule } from '@angular/material/core';
|
|
51
52
|
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
52
53
|
import { MatBadgeModule } from '@angular/material/badge';
|
|
@@ -57,14 +58,16 @@ import { MatGridListModule } from '@angular/material/grid-list';
|
|
|
57
58
|
import { MatListModule } from '@angular/material/list';
|
|
58
59
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
59
60
|
import { MatSidenavModule } from '@angular/material/sidenav';
|
|
61
|
+
import * as i4$4 from '@angular/material/slide-toggle';
|
|
60
62
|
import { MatSlideToggleModule, MatSlideToggle } from '@angular/material/slide-toggle';
|
|
61
63
|
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
|
62
64
|
import { MatStepperModule } from '@angular/material/stepper';
|
|
63
65
|
import { MatTabsModule } from '@angular/material/tabs';
|
|
64
66
|
import { MatToolbarModule } from '@angular/material/toolbar';
|
|
65
|
-
import * as i6$
|
|
67
|
+
import * as i6$3 from '@angular/material/chips';
|
|
66
68
|
import { MatChipsModule } from '@angular/material/chips';
|
|
67
|
-
import * as
|
|
69
|
+
import * as i7$2 from '@angular/material/button-toggle';
|
|
70
|
+
import * as i3$3 from '@ngrx/store';
|
|
68
71
|
import { createSelector, createAction, props, select, createReducer, on, StoreModule } from '@ngrx/store';
|
|
69
72
|
import * as i1$4 from '@ngrx/effects';
|
|
70
73
|
import { createEffect, ofType, concatLatestFrom, EffectsModule } from '@ngrx/effects';
|
|
@@ -513,6 +516,9 @@ var ArrayStyle;
|
|
|
513
516
|
ArrayStyle[ArrayStyle["NewLine"] = 1] = "NewLine";
|
|
514
517
|
})(ArrayStyle || (ArrayStyle = {}));
|
|
515
518
|
|
|
519
|
+
const onceWhen = (predicate) => (src) => {
|
|
520
|
+
return src.pipe(filter(predicate), first());
|
|
521
|
+
};
|
|
516
522
|
const mapArray = (mapFunc) => (source) => source.pipe(map(src => src.map(mapFunc)));
|
|
517
523
|
const filterArray = (filterFunc) => (source) => source.pipe(map(src => src.filter(filterFunc)));
|
|
518
524
|
function onWait(val) {
|
|
@@ -718,7 +724,15 @@ class NotPersisitedTableSettings {
|
|
|
718
724
|
}
|
|
719
725
|
}
|
|
720
726
|
|
|
727
|
+
var InitializationState;
|
|
728
|
+
(function (InitializationState) {
|
|
729
|
+
InitializationState[InitializationState["Created"] = 0] = "Created";
|
|
730
|
+
InitializationState[InitializationState["MetaDataLoaded"] = 1] = "MetaDataLoaded";
|
|
731
|
+
InitializationState[InitializationState["LoadedFromStore"] = 2] = "LoadedFromStore";
|
|
732
|
+
InitializationState[InitializationState["Ready"] = 3] = "Ready";
|
|
733
|
+
})(InitializationState || (InitializationState = {}));
|
|
721
734
|
const defaultTableState = {
|
|
735
|
+
initializationState: InitializationState.Created,
|
|
722
736
|
metaData: {},
|
|
723
737
|
filters: {},
|
|
724
738
|
hiddenKeys: [],
|
|
@@ -729,6 +743,247 @@ const defaultTableState = {
|
|
|
729
743
|
pageSize: 10,
|
|
730
744
|
};
|
|
731
745
|
|
|
746
|
+
var FilterType;
|
|
747
|
+
(function (FilterType) {
|
|
748
|
+
FilterType["NumberEquals"] = "Equals";
|
|
749
|
+
FilterType["NumberNotEqual"] = "Does Not Equal";
|
|
750
|
+
FilterType["NumberGreaterThan"] = "Greater Than";
|
|
751
|
+
FilterType["NumberLessThan"] = "Less Than";
|
|
752
|
+
FilterType["NumberBetween"] = "Between";
|
|
753
|
+
FilterType["StringEquals"] = "Equals";
|
|
754
|
+
FilterType["StringContains"] = "Contains";
|
|
755
|
+
FilterType["StringDoesNotContain"] = "Does Not Contain";
|
|
756
|
+
FilterType["StringStartWith"] = "Start With";
|
|
757
|
+
FilterType["StringEndsWith"] = "Ends With";
|
|
758
|
+
FilterType["DateIsOn"] = "Is on";
|
|
759
|
+
FilterType["DateIsNotOn"] = "Is Not On";
|
|
760
|
+
FilterType["DateOnOrAfter"] = "On or After";
|
|
761
|
+
FilterType["DateOnOrBefore"] = "On or Before";
|
|
762
|
+
FilterType["DateBetween"] = "Between";
|
|
763
|
+
FilterType["BooleanEquals"] = "Is";
|
|
764
|
+
FilterType["IsNull"] = "Is Blank";
|
|
765
|
+
FilterType["Or"] = "Or";
|
|
766
|
+
FilterType["And"] = "And";
|
|
767
|
+
FilterType["In"] = "In";
|
|
768
|
+
FilterType["Custom"] = "Custom";
|
|
769
|
+
})(FilterType || (FilterType = {}));
|
|
770
|
+
const NumberFilterMap = {
|
|
771
|
+
[FilterType.NumberEquals]: [FilterType.NumberEquals],
|
|
772
|
+
[FilterType.NumberNotEqual]: [FilterType.NumberNotEqual],
|
|
773
|
+
[FilterType.NumberGreaterThan]: [FilterType.NumberGreaterThan],
|
|
774
|
+
[FilterType.NumberLessThan]: [FilterType.NumberLessThan],
|
|
775
|
+
[FilterType.NumberBetween]: [FilterType.NumberBetween],
|
|
776
|
+
[FilterType.IsNull]: [FilterType.IsNull],
|
|
777
|
+
[FilterType.In]: [FilterType.In],
|
|
778
|
+
};
|
|
779
|
+
const StringFilterMap = {
|
|
780
|
+
[FilterType.StringEquals]: [FilterType.StringEquals],
|
|
781
|
+
[FilterType.StringContains]: [FilterType.StringContains],
|
|
782
|
+
[FilterType.StringDoesNotContain]: [FilterType.StringDoesNotContain],
|
|
783
|
+
[FilterType.StringStartWith]: [FilterType.StringStartWith],
|
|
784
|
+
[FilterType.StringEndsWith]: [FilterType.StringEndsWith],
|
|
785
|
+
[FilterType.IsNull]: [FilterType.IsNull],
|
|
786
|
+
[FilterType.In]: [FilterType.In],
|
|
787
|
+
};
|
|
788
|
+
const DateFilterMap = {
|
|
789
|
+
[FilterType.DateIsOn]: [FilterType.DateIsOn],
|
|
790
|
+
[FilterType.DateIsNotOn]: [FilterType.DateIsNotOn],
|
|
791
|
+
[FilterType.DateOnOrAfter]: [FilterType.DateOnOrAfter],
|
|
792
|
+
[FilterType.DateOnOrBefore]: [FilterType.DateOnOrBefore],
|
|
793
|
+
[FilterType.DateBetween]: [FilterType.DateBetween],
|
|
794
|
+
[FilterType.IsNull]: [FilterType.IsNull],
|
|
795
|
+
};
|
|
796
|
+
const BooleanFilterMap = {
|
|
797
|
+
[FilterType.BooleanEquals]: [FilterType.BooleanEquals],
|
|
798
|
+
[FilterType.IsNull]: [FilterType.IsNull],
|
|
799
|
+
};
|
|
800
|
+
const EnumFilterMap = {
|
|
801
|
+
[FilterType.IsNull]: [FilterType.IsNull],
|
|
802
|
+
[FilterType.In]: [FilterType.In]
|
|
803
|
+
};
|
|
804
|
+
|
|
805
|
+
const isNull = (filterInfo) => {
|
|
806
|
+
const func = filterInfo.filterValue ?
|
|
807
|
+
(val) => val == null || val === ''
|
|
808
|
+
:
|
|
809
|
+
(val) => val != null && val !== '';
|
|
810
|
+
return func;
|
|
811
|
+
};
|
|
812
|
+
|
|
813
|
+
const stringEqualFunc = (filterInfo) => {
|
|
814
|
+
const equelsVal = prepareForStringCompare(filterInfo.filterValue);
|
|
815
|
+
return ((val) => prepareForStringCompare(val) === equelsVal);
|
|
816
|
+
};
|
|
817
|
+
const stringContainsFunc = (filterInfo) => {
|
|
818
|
+
const containsVal = prepareForStringCompare(filterInfo.filterValue);
|
|
819
|
+
return ((val) => prepareForStringCompare(val).includes(containsVal));
|
|
820
|
+
};
|
|
821
|
+
const stringDoesNotContainFunc = (filterInfo) => {
|
|
822
|
+
const doesNotContainVal = prepareForStringCompare(filterInfo.filterValue);
|
|
823
|
+
return ((val) => !prepareForStringCompare(val)?.includes(doesNotContainVal));
|
|
824
|
+
};
|
|
825
|
+
const stringStartsWithFunc = (filterInfo) => {
|
|
826
|
+
const startsWith = prepareForStringCompare(filterInfo.filterValue);
|
|
827
|
+
return ((val) => prepareForStringCompare(val).startsWith(startsWith));
|
|
828
|
+
};
|
|
829
|
+
const stringEndsWithFunc = (filterInfo) => {
|
|
830
|
+
const startsWith = prepareForStringCompare(filterInfo.filterValue);
|
|
831
|
+
return ((val) => prepareForStringCompare(val).endsWith(startsWith));
|
|
832
|
+
};
|
|
833
|
+
const multipleStringValuesEqualsFunc = (filterInfo) => {
|
|
834
|
+
const filterVals = filterInfo.filterValue.map((v) => prepareForStringCompare(v));
|
|
835
|
+
return ((val) => filterVals.some((s) => prepareForStringCompare(val) === s));
|
|
836
|
+
};
|
|
837
|
+
const StringFilterFuncs = {
|
|
838
|
+
[FilterType.StringEquals]: stringEqualFunc,
|
|
839
|
+
[FilterType.StringContains]: stringContainsFunc,
|
|
840
|
+
[FilterType.StringDoesNotContain]: stringDoesNotContainFunc,
|
|
841
|
+
[FilterType.StringStartWith]: stringStartsWithFunc,
|
|
842
|
+
[FilterType.StringEndsWith]: stringEndsWithFunc,
|
|
843
|
+
[FilterType.IsNull]: isNull,
|
|
844
|
+
[FilterType.In]: multipleStringValuesEqualsFunc,
|
|
845
|
+
};
|
|
846
|
+
const EnumFilterFuncs = {
|
|
847
|
+
[FilterType.IsNull]: isNull,
|
|
848
|
+
[FilterType.In]: multipleStringValuesEqualsFunc,
|
|
849
|
+
};
|
|
850
|
+
const prepareForStringCompare = (val) => val?.toString().trim().toLowerCase();
|
|
851
|
+
|
|
852
|
+
const numberEqalsFunc = (filterInfo) => (val) => {
|
|
853
|
+
return val === filterInfo.filterValue;
|
|
854
|
+
};
|
|
855
|
+
const numberNotEqualFunc = (filterInfo) => (val) => {
|
|
856
|
+
return val !== filterInfo.filterValue;
|
|
857
|
+
};
|
|
858
|
+
const numberGreaterThanFunc = (filterInfo) => (val) => {
|
|
859
|
+
return val > filterInfo.filterValue;
|
|
860
|
+
};
|
|
861
|
+
const numberLessThanFunc = (filterInfo) => (val) => {
|
|
862
|
+
return val < filterInfo.filterValue;
|
|
863
|
+
};
|
|
864
|
+
const numberBetweenFunc = (filterInfo) => {
|
|
865
|
+
const startVal = Number(filterInfo.filterValue.Start);
|
|
866
|
+
const endVal = Number(filterInfo.filterValue.End);
|
|
867
|
+
return ((val) => (val > startVal) && (val < endVal));
|
|
868
|
+
};
|
|
869
|
+
const multipleNumberValuesEqualsFunc = (filterInfo) => {
|
|
870
|
+
return ((val) => filterInfo.filterValue.some((value) => val === value));
|
|
871
|
+
};
|
|
872
|
+
const NumberFilterFuncs = {
|
|
873
|
+
[FilterType.NumberEquals]: numberEqalsFunc,
|
|
874
|
+
[FilterType.NumberNotEqual]: numberNotEqualFunc,
|
|
875
|
+
[FilterType.NumberGreaterThan]: numberGreaterThanFunc,
|
|
876
|
+
[FilterType.NumberLessThan]: numberLessThanFunc,
|
|
877
|
+
[FilterType.NumberBetween]: numberBetweenFunc,
|
|
878
|
+
[FilterType.IsNull]: isNull,
|
|
879
|
+
[FilterType.In]: multipleNumberValuesEqualsFunc,
|
|
880
|
+
};
|
|
881
|
+
|
|
882
|
+
const dateIsOnFunc = (filterInfo) => {
|
|
883
|
+
const isOnVal = new Date(filterInfo.filterValue).getTime();
|
|
884
|
+
return ((val) => val.getTime() === isOnVal);
|
|
885
|
+
};
|
|
886
|
+
const dateIsNotOnFunc = (filterInfo) => {
|
|
887
|
+
const isNotOnVal = new Date(filterInfo.filterValue).getTime();
|
|
888
|
+
return ((val) => val?.getTime() !== isNotOnVal);
|
|
889
|
+
};
|
|
890
|
+
const dateIsOnOrAfterFunc = (filterInfo) => {
|
|
891
|
+
const afterVal = new Date(filterInfo.filterValue).getTime();
|
|
892
|
+
return ((val) => val.getTime() >= afterVal);
|
|
893
|
+
};
|
|
894
|
+
const dateIsOnOrBeforeFunc = (filterInfo) => {
|
|
895
|
+
const beforeVal = new Date(filterInfo.filterValue).getTime();
|
|
896
|
+
return ((val) => val.getTime() <= beforeVal);
|
|
897
|
+
};
|
|
898
|
+
const dateBetweenFunc = (filterInfo) => {
|
|
899
|
+
const startVal = new Date(filterInfo.filterValue.Start);
|
|
900
|
+
const endVal = new Date(filterInfo.filterValue.End);
|
|
901
|
+
return ((val) => val >= startVal && val <= endVal);
|
|
902
|
+
};
|
|
903
|
+
const DateFilterFuncs = {
|
|
904
|
+
[FilterType.DateIsOn]: dateIsOnFunc,
|
|
905
|
+
[FilterType.DateIsNotOn]: dateIsNotOnFunc,
|
|
906
|
+
[FilterType.DateOnOrAfter]: dateIsOnOrAfterFunc,
|
|
907
|
+
[FilterType.DateOnOrBefore]: dateIsOnOrBeforeFunc,
|
|
908
|
+
[FilterType.DateBetween]: dateBetweenFunc,
|
|
909
|
+
[FilterType.IsNull]: isNull,
|
|
910
|
+
};
|
|
911
|
+
|
|
912
|
+
const booleanEqualsFunc = (filterInfo) => (val) => {
|
|
913
|
+
return filterInfo.filterValue === val;
|
|
914
|
+
};
|
|
915
|
+
const BooleanFilterFuncs = {
|
|
916
|
+
[FilterType.BooleanEquals]: booleanEqualsFunc,
|
|
917
|
+
[FilterType.IsNull]: isNull,
|
|
918
|
+
};
|
|
919
|
+
|
|
920
|
+
const filterTypeMap = {
|
|
921
|
+
[FieldType.Unknown]: StringFilterMap,
|
|
922
|
+
[FieldType.Date]: DateFilterMap,
|
|
923
|
+
[FieldType.Currency]: NumberFilterMap,
|
|
924
|
+
[FieldType.Array]: StringFilterMap,
|
|
925
|
+
[FieldType.Number]: NumberFilterMap,
|
|
926
|
+
[FieldType.String]: StringFilterMap,
|
|
927
|
+
[FieldType.Boolean]: BooleanFilterMap,
|
|
928
|
+
[FieldType.PhoneNumber]: StringFilterMap,
|
|
929
|
+
[FieldType.Link]: StringFilterMap,
|
|
930
|
+
[FieldType.Enum]: EnumFilterMap,
|
|
931
|
+
};
|
|
932
|
+
const filterFactoryMap = {
|
|
933
|
+
[FilterType.And]: (filter) => {
|
|
934
|
+
const filters = filter.filterValue.map(createFilterFunc);
|
|
935
|
+
return (obj) => filters.every(f => f(obj));
|
|
936
|
+
},
|
|
937
|
+
[FilterType.In]: (filter) => {
|
|
938
|
+
const filters = filter.filterValue.map(createFilterFunc);
|
|
939
|
+
return (obj) => filters.some(f => f(obj));
|
|
940
|
+
},
|
|
941
|
+
};
|
|
942
|
+
const filterTypeFuncMap = {
|
|
943
|
+
[FieldType.String]: StringFilterFuncs,
|
|
944
|
+
[FieldType.Array]: StringFilterFuncs,
|
|
945
|
+
[FieldType.Currency]: NumberFilterFuncs,
|
|
946
|
+
[FieldType.PhoneNumber]: StringFilterFuncs,
|
|
947
|
+
[FieldType.Date]: DateFilterFuncs,
|
|
948
|
+
[FieldType.Number]: NumberFilterFuncs,
|
|
949
|
+
[FieldType.Boolean]: BooleanFilterFuncs,
|
|
950
|
+
[FieldType.Unknown]: StringFilterFuncs,
|
|
951
|
+
[FieldType.Enum]: EnumFilterFuncs,
|
|
952
|
+
[FieldType.Link]: StringFilterFuncs,
|
|
953
|
+
};
|
|
954
|
+
function isCustomFilter(filter) {
|
|
955
|
+
return filter && filter.filterType === FilterType.Custom;
|
|
956
|
+
}
|
|
957
|
+
function isFilterInfo(filter) {
|
|
958
|
+
return filter && typeof filter.key === 'string' && filter.filterType !== FilterType.Custom;
|
|
959
|
+
}
|
|
960
|
+
const defaultPredicate = () => true;
|
|
961
|
+
function createFilterFunc(filter) {
|
|
962
|
+
if (isCustomFilter(filter)) {
|
|
963
|
+
return filter.active ? filter.predicate : defaultPredicate;
|
|
964
|
+
}
|
|
965
|
+
if (filter.filterValue === undefined) {
|
|
966
|
+
return defaultPredicate;
|
|
967
|
+
}
|
|
968
|
+
const func = filterTypeFuncMap[filter.fieldType][filter.filterType](filter);
|
|
969
|
+
if (!func) {
|
|
970
|
+
if (filterFactoryMap[filter.filterType]) {
|
|
971
|
+
return filterFactoryMap[filter.filterType](filter);
|
|
972
|
+
}
|
|
973
|
+
}
|
|
974
|
+
const cannotBeTrueForNull = !FalseyValueCanBeIncludedFilterTypes.includes(filter.filterType);
|
|
975
|
+
return (rowObj) => {
|
|
976
|
+
const value = rowObj[filter.key];
|
|
977
|
+
return ((value == undefined) && cannotBeTrueForNull)
|
|
978
|
+
? false
|
|
979
|
+
: func(value);
|
|
980
|
+
};
|
|
981
|
+
}
|
|
982
|
+
const FalseyValueCanBeIncludedFilterTypes = [FilterType.IsNull, FilterType.NumberNotEqual, FilterType.DateIsNotOn, FilterType.StringDoesNotContain];
|
|
983
|
+
|
|
984
|
+
function stateIs(initializationState) {
|
|
985
|
+
return (state) => state.initializationState === initializationState;
|
|
986
|
+
}
|
|
732
987
|
class TableStore extends ComponentStore {
|
|
733
988
|
constructor(config) {
|
|
734
989
|
super({ ...defaultTableState, ...config.defaultTableState });
|
|
@@ -801,7 +1056,9 @@ class TableStore extends ComponentStore {
|
|
|
801
1056
|
return this.addFiltersToState(state, filters);
|
|
802
1057
|
});
|
|
803
1058
|
this.addFiltersToState = (state, filters) => {
|
|
804
|
-
|
|
1059
|
+
var customFilters = filters.filter(isCustomFilter);
|
|
1060
|
+
var filterInfos = filters.filter(isFilterInfo);
|
|
1061
|
+
const filtersObj = filterInfos
|
|
805
1062
|
.filter(fltr => Object.keys(state.metaData).some(key => key === fltr.key) || console.warn(`Meta data with key ${fltr.key} not found`))
|
|
806
1063
|
.reduce((filtersObj, filter) => {
|
|
807
1064
|
if (!filter.filterId) {
|
|
@@ -810,6 +1067,12 @@ class TableStore extends ComponentStore {
|
|
|
810
1067
|
filtersObj[filter.filterId] = filter;
|
|
811
1068
|
return filtersObj;
|
|
812
1069
|
}, {});
|
|
1070
|
+
customFilters.forEach(fltr => {
|
|
1071
|
+
if (!fltr.filterId) {
|
|
1072
|
+
fltr.filterId = v4();
|
|
1073
|
+
}
|
|
1074
|
+
filtersObj[fltr.filterId] = fltr;
|
|
1075
|
+
});
|
|
813
1076
|
return {
|
|
814
1077
|
...state,
|
|
815
1078
|
filters: { ...state.filters, ...filtersObj }
|
|
@@ -847,6 +1110,12 @@ class TableStore extends ComponentStore {
|
|
|
847
1110
|
};
|
|
848
1111
|
this.setPageSize = this.updater((state, pageSize) => ({ ...state, pageSize }));
|
|
849
1112
|
this.updateState = this.updater(this.updateStateFunc);
|
|
1113
|
+
this.updateStateFromPersistedState = this.updater((state, persistedState) => {
|
|
1114
|
+
const incomingTableState = this.cleanPersistedState(state, persistedState);
|
|
1115
|
+
const newState = this.updateStateFunc(state, incomingTableState);
|
|
1116
|
+
newState.initializationState = state.initializationState === InitializationState.MetaDataLoaded ? InitializationState.LoadedFromStore : state.initializationState;
|
|
1117
|
+
return newState;
|
|
1118
|
+
});
|
|
850
1119
|
this.getUserDefinedTableSize$ = this.select(state => state.userDefined.table.width);
|
|
851
1120
|
this.setTableWidth = this.updater((state, widthInpixels) => ({ ...state, userDefined: { ...state.userDefined, table: { width: widthInpixels } } }));
|
|
852
1121
|
this.mergeMeta = (orig, merge) => {
|
|
@@ -866,6 +1135,9 @@ class TableStore extends ComponentStore {
|
|
|
866
1135
|
click: merge.click ?? orig.click,
|
|
867
1136
|
};
|
|
868
1137
|
};
|
|
1138
|
+
this.setIntializationState = this.updater((state, initializationState) => {
|
|
1139
|
+
return { ...state, initializationState };
|
|
1140
|
+
});
|
|
869
1141
|
this.setMetaData = this.updater((state, md) => {
|
|
870
1142
|
const metaData = (Array.isArray(md) ? [...md] : [md])
|
|
871
1143
|
.reduce((prev, curr) => {
|
|
@@ -882,7 +1154,8 @@ class TableStore extends ComponentStore {
|
|
|
882
1154
|
sorted = this.createPreSort(metaData);
|
|
883
1155
|
}
|
|
884
1156
|
const order = this.initializeOrder(state, metaData);
|
|
885
|
-
|
|
1157
|
+
const initializationState = state.initializationState == InitializationState.Created ? InitializationState.MetaDataLoaded : state.initializationState;
|
|
1158
|
+
return { ...state, initializationState, metaData, sorted, userDefined: { ...state.userDefined, order: order } };
|
|
886
1159
|
});
|
|
887
1160
|
this.initializeOrder = (state, mds) => {
|
|
888
1161
|
const viewableMetaDataArr = Object.values(mds).filter(a => a.fieldType !== FieldType.Hidden);
|
|
@@ -926,6 +1199,24 @@ class TableStore extends ComponentStore {
|
|
|
926
1199
|
onLast(callback) {
|
|
927
1200
|
this.on(this.state$.pipe(last()), callback);
|
|
928
1201
|
}
|
|
1202
|
+
cleanPersistedState(state, pState) {
|
|
1203
|
+
const metas = Object.values(state.metaData);
|
|
1204
|
+
const filters = Object.values(pState.filters).filter(fltr => isCustomFilter(fltr) || metas.some(m => m.key === fltr.key)).reduce((obj, filter) => {
|
|
1205
|
+
obj[filter.filterId] = pState.filters[filter.filterId];
|
|
1206
|
+
return obj;
|
|
1207
|
+
}, {});
|
|
1208
|
+
const sorted = pState.sorted.filter(s => metas.some(m => m.key === s.active));
|
|
1209
|
+
return ({ ...pState, filters, sorted });
|
|
1210
|
+
}
|
|
1211
|
+
runOnceWhen(predicate, func) {
|
|
1212
|
+
const obs = this.state$.pipe(onceWhen(predicate));
|
|
1213
|
+
this.on(obs, (state) => {
|
|
1214
|
+
func(state);
|
|
1215
|
+
});
|
|
1216
|
+
}
|
|
1217
|
+
onReady(func) {
|
|
1218
|
+
this.runOnceWhen(stateIs(InitializationState.Ready), func);
|
|
1219
|
+
}
|
|
929
1220
|
}
|
|
930
1221
|
TableStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableStore, deps: [{ token: TableBuilderConfigToken }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
931
1222
|
TableStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableStore, providedIn: 'root' });
|
|
@@ -1120,64 +1411,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImpor
|
|
|
1120
1411
|
args: [{ providedIn: 'root' }]
|
|
1121
1412
|
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.Injector }]; } });
|
|
1122
1413
|
|
|
1123
|
-
var FilterType;
|
|
1124
|
-
(function (FilterType) {
|
|
1125
|
-
FilterType["NumberEquals"] = "Equals";
|
|
1126
|
-
FilterType["NumberNotEqual"] = "Does Not Equal";
|
|
1127
|
-
FilterType["NumberGreaterThan"] = "Greater Than";
|
|
1128
|
-
FilterType["NumberLessThan"] = "Less Than";
|
|
1129
|
-
FilterType["NumberBetween"] = "Between";
|
|
1130
|
-
FilterType["StringEquals"] = "Equals";
|
|
1131
|
-
FilterType["StringContains"] = "Contains";
|
|
1132
|
-
FilterType["StringDoesNotContain"] = "Does Not Contain";
|
|
1133
|
-
FilterType["StringStartWith"] = "Start With";
|
|
1134
|
-
FilterType["StringEndsWith"] = "Ends With";
|
|
1135
|
-
FilterType["DateIsOn"] = "Is on";
|
|
1136
|
-
FilterType["DateIsNotOn"] = "Is Not On";
|
|
1137
|
-
FilterType["DateOnOrAfter"] = "On or After";
|
|
1138
|
-
FilterType["DateOnOrBefore"] = "On or Before";
|
|
1139
|
-
FilterType["DateBetween"] = "Between";
|
|
1140
|
-
FilterType["BooleanEquals"] = "Is";
|
|
1141
|
-
FilterType["IsNull"] = "Is Blank";
|
|
1142
|
-
FilterType["Or"] = "Or";
|
|
1143
|
-
FilterType["And"] = "And";
|
|
1144
|
-
FilterType["In"] = "In";
|
|
1145
|
-
})(FilterType || (FilterType = {}));
|
|
1146
|
-
const NumberFilterMap = {
|
|
1147
|
-
[FilterType.NumberEquals]: [FilterType.NumberEquals],
|
|
1148
|
-
[FilterType.NumberNotEqual]: [FilterType.NumberNotEqual],
|
|
1149
|
-
[FilterType.NumberGreaterThan]: [FilterType.NumberGreaterThan],
|
|
1150
|
-
[FilterType.NumberLessThan]: [FilterType.NumberLessThan],
|
|
1151
|
-
[FilterType.NumberBetween]: [FilterType.NumberBetween],
|
|
1152
|
-
[FilterType.IsNull]: [FilterType.IsNull],
|
|
1153
|
-
[FilterType.In]: [FilterType.In],
|
|
1154
|
-
};
|
|
1155
|
-
const StringFilterMap = {
|
|
1156
|
-
[FilterType.StringEquals]: [FilterType.StringEquals],
|
|
1157
|
-
[FilterType.StringContains]: [FilterType.StringContains],
|
|
1158
|
-
[FilterType.StringDoesNotContain]: [FilterType.StringDoesNotContain],
|
|
1159
|
-
[FilterType.StringStartWith]: [FilterType.StringStartWith],
|
|
1160
|
-
[FilterType.StringEndsWith]: [FilterType.StringEndsWith],
|
|
1161
|
-
[FilterType.IsNull]: [FilterType.IsNull],
|
|
1162
|
-
[FilterType.In]: [FilterType.In],
|
|
1163
|
-
};
|
|
1164
|
-
const DateFilterMap = {
|
|
1165
|
-
[FilterType.DateIsOn]: [FilterType.DateIsOn],
|
|
1166
|
-
[FilterType.DateIsNotOn]: [FilterType.DateIsNotOn],
|
|
1167
|
-
[FilterType.DateOnOrAfter]: [FilterType.DateOnOrAfter],
|
|
1168
|
-
[FilterType.DateOnOrBefore]: [FilterType.DateOnOrBefore],
|
|
1169
|
-
[FilterType.DateBetween]: [FilterType.DateBetween],
|
|
1170
|
-
[FilterType.IsNull]: [FilterType.IsNull],
|
|
1171
|
-
};
|
|
1172
|
-
const BooleanFilterMap = {
|
|
1173
|
-
[FilterType.BooleanEquals]: [FilterType.BooleanEquals],
|
|
1174
|
-
[FilterType.IsNull]: [FilterType.IsNull],
|
|
1175
|
-
};
|
|
1176
|
-
const EnumFilterMap = {
|
|
1177
|
-
[FilterType.IsNull]: [FilterType.IsNull],
|
|
1178
|
-
[FilterType.In]: [FilterType.In]
|
|
1179
|
-
};
|
|
1180
|
-
|
|
1181
1414
|
class StopPropagationDirective {
|
|
1182
1415
|
onClick(event) {
|
|
1183
1416
|
event.stopPropagation();
|
|
@@ -1249,7 +1482,7 @@ class InListFilterComponent {
|
|
|
1249
1482
|
}
|
|
1250
1483
|
}
|
|
1251
1484
|
InListFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: InListFilterComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: TableStore }], target: i0.ɵɵFactoryTarget.Component });
|
|
1252
|
-
InListFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: InListFilterComponent, selector: "tb-in-list-filter", inputs: { key: "key" }, providers: [{
|
|
1485
|
+
InListFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: InListFilterComponent, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: { key: "key" }, providers: [{
|
|
1253
1486
|
provide: NG_VALUE_ACCESSOR,
|
|
1254
1487
|
useExisting: InListFilterComponent,
|
|
1255
1488
|
multi: true
|
|
@@ -1259,11 +1492,11 @@ InListFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
|
|
|
1259
1492
|
{{metaData.fieldType === FieldType.Enum ? (item.value | spaceCase) : item.value}}
|
|
1260
1493
|
</mat-checkbox>
|
|
1261
1494
|
</div>
|
|
1262
|
-
`, isInline: true, components: [{ type:
|
|
1495
|
+
`, isInline: true, components: [{ type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: StopPropagationDirective, selector: "[stop-propagation]" }], pipes: { "keyvalue": i1.KeyValuePipe, "async": i1.AsyncPipe, "spaceCase": SpaceCasePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1263
1496
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: InListFilterComponent, decorators: [{
|
|
1264
1497
|
type: Component,
|
|
1265
1498
|
args: [{
|
|
1266
|
-
selector: 'tb-in-list-filter',
|
|
1499
|
+
selector: 'tb-in-list-filter , [tb-in-list-filter]',
|
|
1267
1500
|
template: `
|
|
1268
1501
|
<div *ngFor="let item of keyValues$ | async| keyvalue" >
|
|
1269
1502
|
<mat-checkbox [checked]='selectedKeys.includes(item.key)' stop-propagation (change)='selectFilterChanged($event, item.key)' >
|
|
@@ -1276,7 +1509,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImpor
|
|
|
1276
1509
|
provide: NG_VALUE_ACCESSOR,
|
|
1277
1510
|
useExisting: InListFilterComponent,
|
|
1278
1511
|
multi: true
|
|
1279
|
-
}]
|
|
1512
|
+
}]
|
|
1280
1513
|
}]
|
|
1281
1514
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: TableStore }]; }, propDecorators: { key: [{
|
|
1282
1515
|
type: Input
|
|
@@ -1341,10 +1574,10 @@ class HeaderMenuComponent {
|
|
|
1341
1574
|
}
|
|
1342
1575
|
}
|
|
1343
1576
|
HeaderMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: HeaderMenuComponent, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Component });
|
|
1344
|
-
HeaderMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: HeaderMenuComponent, selector: "tb-header-menu", inputs: { filter: "filter", metaData: "metaData" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<button mat-icon-button disableRipple [matMenuTriggerFor]=\"menu\" style=\"height:16px;\" [matMenuTriggerRestoreFocus]=\"false\">\r\n <mat-icon class=\"menu-icon\">more_vert</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=hideField(metaData.key)>\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n <span>Hide Column</span>\r\n </button>\r\n <ng-form #myForm=\"ngForm\" [ngSwitch]=\"true\" (keydown.enter)=\"onEnter(myForm.value)\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"'header-column-' + metaData.key\" />\r\n <input type=\"hidden\" name=\"filterType\" [ngModel]=\"myFilterType\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"metaData.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"metaData.fieldType\" />\r\n\r\n <ng-container *ngIf=\"(myFilterType === FilterType.Or || myFilterType === FilterType.In); else defaultFilter\">\r\n <tb-in-list-filter name='filterValue' [key]='metaData.key' [(ngModel)]='myFilterValue' ></tb-in-list-filter>\r\n </ng-container>\r\n\r\n\r\n <ng-template #defaultFilter>\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Link || metaData.fieldType === FieldType.String || metaData.fieldType === FieldType.Array || metaData.fieldType === FieldType.Unknown || metaData.fieldType === FieldType.PhoneNumber\">\r\n <mat-form-field stop-propagation class=\"example-full-width font\" style=\"padding: 0 16px\">\r\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\r\n <mat-label>{{myFilterType === FilterType.StringDoesNotContain ? 'Does Not Contain...' : 'Contains...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matSuffix [matTooltip]=\"myFilterType === FilterType.StringDoesNotContain ? 'Contains' : 'Does Not Contain'\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setStringFilterType()\">\r\n <mat-icon [ngClass]=\"{'chosen-icon': myFilterType === FilterType.StringDoesNotContain }\">\r\n block\r\n </mat-icon>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Number || metaData.fieldType === FieldType.Currency\">\r\n <mat-form-field class=\"auto-width\" stop-propagation style=\"padding: 0 16px\">\r\n <mat-label>{{myFilterType === FilterType.NumberEquals ? 'Equals...' : myFilterType === FilterType.NumberLessThan ? 'Less Than...' : 'More Than...'}}</mat-label>\r\n <input matInput type='number' name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberLessThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberLessThan }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberGreaterThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberGreaterThan }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.NumberEquals)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberEquals }\">\r\n =</span>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Boolean\">\r\n <div style=\"padding: 0 16px\">\r\n <label>\r\n <mat-icon class=\"search-icon\">filter_list</mat-icon>\r\n </label>\r\n <mat-radio-group stop-propagation #ctrl=\"matRadioGroup\" #boolField='ngModel' class=\"font\" name=\"filterValue\" [ngModel]=\"myFilterValue\" >\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = true;\" [value]=\"true\">True</mat-radio-button><br/>\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = false\" [value]=\"false\">False</mat-radio-button><br/>\r\n </mat-radio-group>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Date\">\r\n <mat-form-field style=\"padding: 0 16px\" class=\"font auto-width\" stop-propagation >\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrAfter)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrAfter }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrBefore)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrBefore }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.DateIsOn)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateIsOn }\">\r\n =</span>\r\n </button>\r\n </span>\r\n <mat-label>{{myFilterType === FilterType.DateIsOn ? 'On...' : \r\n myFilterType === FilterType.DateOnOrBefore ? 'On or Before...' : 'On or After...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" [matDatepicker]=\"calendar\"\r\n (click)=\"calendar.open()\"/>\r\n <mat-datepicker-toggle matSuffix [for]=\"calendar\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #calendar></mat-datepicker>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <button mat-button (click)=\"onEnter(myForm.value)\" [disabled]=\"myForm.value.filterValue == undefined\" disableRipple>\r\n Apply\r\n </button>\r\n </ng-form>\r\n</mat-menu>\r\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}::ng-deep .form-field .mat-form-field-wrapper{padding-bottom:4px!important;padding-top:4px!important;margin-bottom:5px!important}.menu-icon{font-size:16px;line-height:16px!important;vertical-align:top!important}.search-icon{margin-right:16px;vertical-align:middle;height:24px;color:#0000008a;font-size:21px;line-height:1.125}.font{font-size:14px}.filter-radio-button:first-of-type{padding-left:0}.filter-radio-button{padding:10px 40px;min-width:110px}::ng-deep .form-field.mat-form-field-appearance-outline .mat-form-field-infix{padding:5px 0;width:auto}::ng-deep .auto-width .mat-form-field-infix{width:auto}.suffix-icons{font-size:14px;margin-left:6px}mat-icon.chosen-icon.mat-icon.suffix-icons,.chosen-icon{font-size:20px;color:green}mat-icon.mat-icon.suffix-icons.underline{-webkit-text-decoration:underline .1px solid;text-decoration:underline .1px solid;transform:scaleX(.7)}\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: i4$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: InListFilterComponent, selector: "tb-in-list-filter", inputs: ["key"] }, { type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i7.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { type: i8.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i8.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }], directives: [{ type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: StopPropagationDirective, selector: "[stop-propagation]" }, { type: i6.MatPrefix, selector: "[matPrefix]" }, { type: i6.MatLabel, selector: "mat-label" }, { type: i4$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i6.MatSuffix, selector: "[matSuffix]" }, { type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i7.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { type: i8.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1577
|
+
HeaderMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: HeaderMenuComponent, selector: "tb-header-menu", inputs: { filter: "filter", metaData: "metaData" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<button mat-icon-button disableRipple [matMenuTriggerFor]=\"menu\" style=\"height:16px;\" [matMenuTriggerRestoreFocus]=\"false\">\r\n <mat-icon class=\"menu-icon\">more_vert</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=hideField(metaData.key)>\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n <span>Hide Column</span>\r\n </button>\r\n <ng-form #myForm=\"ngForm\" [ngSwitch]=\"true\" (keydown.enter)=\"onEnter(myForm.value)\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"'header-column-' + metaData.key\" />\r\n <input type=\"hidden\" name=\"filterType\" [ngModel]=\"myFilterType\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"metaData.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"metaData.fieldType\" />\r\n\r\n <ng-container *ngIf=\"(myFilterType === FilterType.Or || myFilterType === FilterType.In); else defaultFilter\">\r\n <tb-in-list-filter style=\"display:block;padding: 0 16px\" name='filterValue' [key]='metaData.key' [(ngModel)]='myFilterValue' >\r\n </tb-in-list-filter>\r\n </ng-container>\r\n\r\n\r\n <ng-template #defaultFilter>\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Link || metaData.fieldType === FieldType.String || metaData.fieldType === FieldType.Array || metaData.fieldType === FieldType.Unknown || metaData.fieldType === FieldType.PhoneNumber\">\r\n <mat-form-field stop-propagation class=\"font\" style=\"padding: 0 16px\">\r\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\r\n <mat-label>{{myFilterType === FilterType.StringDoesNotContain ? 'Does Not Contain...' : 'Contains...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matSuffix [matTooltip]=\"myFilterType === FilterType.StringDoesNotContain ? 'Contains' : 'Does Not Contain'\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setStringFilterType()\">\r\n <mat-icon [ngClass]=\"{'chosen-icon': myFilterType === FilterType.StringDoesNotContain }\">\r\n block\r\n </mat-icon>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Number || metaData.fieldType === FieldType.Currency\">\r\n <mat-form-field class=\"auto-width\" stop-propagation style=\"padding: 0 16px\">\r\n <mat-label>{{myFilterType === FilterType.NumberEquals ? 'Equals...' : myFilterType === FilterType.NumberLessThan ? 'Less Than...' : 'More Than...'}}</mat-label>\r\n <input matInput type='number' name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberLessThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberLessThan }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberGreaterThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberGreaterThan }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.NumberEquals)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberEquals }\">\r\n =</span>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Boolean\">\r\n <div style=\"padding: 0 16px\">\r\n <label>\r\n <mat-icon class=\"search-icon\">filter_list</mat-icon>\r\n </label>\r\n <mat-radio-group stop-propagation #ctrl=\"matRadioGroup\" #boolField='ngModel' class=\"font\" name=\"filterValue\" [ngModel]=\"myFilterValue\" >\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = true;\" [value]=\"true\">True</mat-radio-button><br/>\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = false\" [value]=\"false\">False</mat-radio-button><br/>\r\n </mat-radio-group>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Date\">\r\n <mat-form-field style=\"padding: 0 16px\" class=\"font auto-width\" stop-propagation >\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrAfter)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrAfter }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrBefore)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrBefore }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.DateIsOn)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateIsOn }\">\r\n =</span>\r\n </button>\r\n </span>\r\n <mat-label>{{myFilterType === FilterType.DateIsOn ? 'On...' :\r\n myFilterType === FilterType.DateOnOrBefore ? 'On or Before...' : 'On or After...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" [matDatepicker]=\"calendar\"\r\n (click)=\"calendar.open()\"/>\r\n <mat-datepicker-toggle matSuffix [for]=\"calendar\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #calendar></mat-datepicker>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <button mat-button (click)=\"onEnter(myForm.value)\" [disabled]=\"myForm.value.filterValue == undefined\" disableRipple>\r\n Apply\r\n </button>\r\n </ng-form>\r\n</mat-menu>\r\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}::ng-deep .form-field .mat-form-field-wrapper{padding-bottom:4px!important;padding-top:4px!important;margin-bottom:5px!important}.menu-icon{font-size:16px;line-height:16px!important;vertical-align:top!important}.search-icon{margin-right:16px;vertical-align:middle;height:24px;color:#0000008a;font-size:21px;line-height:1.125}.font{font-size:14px}.filter-radio-button:first-of-type{padding-left:0}.filter-radio-button{padding:10px 40px;min-width:110px}::ng-deep .form-field.mat-form-field-appearance-outline .mat-form-field-infix{padding:5px 0;width:auto}::ng-deep .auto-width .mat-form-field-infix{width:auto}.suffix-icons{font-size:14px;margin-left:6px}mat-icon.chosen-icon.mat-icon.suffix-icons,.chosen-icon{font-size:20px;color:green}mat-icon.mat-icon.suffix-icons.underline{-webkit-text-decoration:underline .1px solid;text-decoration:underline .1px solid;transform:scaleX(.7)}\n"], components: [{ type: i3$1.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: i4$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: InListFilterComponent, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: ["key"] }, { type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i7.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { type: i8.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i8.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }], directives: [{ type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: StopPropagationDirective, selector: "[stop-propagation]" }, { type: i6.MatPrefix, selector: "[matPrefix]" }, { type: i6.MatLabel, selector: "mat-label" }, { type: i4$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i6.MatSuffix, selector: "[matSuffix]" }, { type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i7.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { type: i8.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1345
1578
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: HeaderMenuComponent, decorators: [{
|
|
1346
1579
|
type: Component,
|
|
1347
|
-
args: [{ selector: 'tb-header-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button mat-icon-button disableRipple [matMenuTriggerFor]=\"menu\" style=\"height:16px;\" [matMenuTriggerRestoreFocus]=\"false\">\r\n <mat-icon class=\"menu-icon\">more_vert</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=hideField(metaData.key)>\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n <span>Hide Column</span>\r\n </button>\r\n <ng-form #myForm=\"ngForm\" [ngSwitch]=\"true\" (keydown.enter)=\"onEnter(myForm.value)\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"'header-column-' + metaData.key\" />\r\n <input type=\"hidden\" name=\"filterType\" [ngModel]=\"myFilterType\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"metaData.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"metaData.fieldType\" />\r\n\r\n <ng-container *ngIf=\"(myFilterType === FilterType.Or || myFilterType === FilterType.In); else defaultFilter\">\r\n
|
|
1580
|
+
args: [{ selector: 'tb-header-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button mat-icon-button disableRipple [matMenuTriggerFor]=\"menu\" style=\"height:16px;\" [matMenuTriggerRestoreFocus]=\"false\">\r\n <mat-icon class=\"menu-icon\">more_vert</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=hideField(metaData.key)>\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n <span>Hide Column</span>\r\n </button>\r\n <ng-form #myForm=\"ngForm\" [ngSwitch]=\"true\" (keydown.enter)=\"onEnter(myForm.value)\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"'header-column-' + metaData.key\" />\r\n <input type=\"hidden\" name=\"filterType\" [ngModel]=\"myFilterType\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"metaData.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"metaData.fieldType\" />\r\n\r\n <ng-container *ngIf=\"(myFilterType === FilterType.Or || myFilterType === FilterType.In); else defaultFilter\">\r\n <tb-in-list-filter style=\"display:block;padding: 0 16px\" name='filterValue' [key]='metaData.key' [(ngModel)]='myFilterValue' >\r\n </tb-in-list-filter>\r\n </ng-container>\r\n\r\n\r\n <ng-template #defaultFilter>\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Link || metaData.fieldType === FieldType.String || metaData.fieldType === FieldType.Array || metaData.fieldType === FieldType.Unknown || metaData.fieldType === FieldType.PhoneNumber\">\r\n <mat-form-field stop-propagation class=\"font\" style=\"padding: 0 16px\">\r\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\r\n <mat-label>{{myFilterType === FilterType.StringDoesNotContain ? 'Does Not Contain...' : 'Contains...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matSuffix [matTooltip]=\"myFilterType === FilterType.StringDoesNotContain ? 'Contains' : 'Does Not Contain'\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setStringFilterType()\">\r\n <mat-icon [ngClass]=\"{'chosen-icon': myFilterType === FilterType.StringDoesNotContain }\">\r\n block\r\n </mat-icon>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Number || metaData.fieldType === FieldType.Currency\">\r\n <mat-form-field class=\"auto-width\" stop-propagation style=\"padding: 0 16px\">\r\n <mat-label>{{myFilterType === FilterType.NumberEquals ? 'Equals...' : myFilterType === FilterType.NumberLessThan ? 'Less Than...' : 'More Than...'}}</mat-label>\r\n <input matInput type='number' name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberLessThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberLessThan }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberGreaterThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberGreaterThan }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.NumberEquals)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberEquals }\">\r\n =</span>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Boolean\">\r\n <div style=\"padding: 0 16px\">\r\n <label>\r\n <mat-icon class=\"search-icon\">filter_list</mat-icon>\r\n </label>\r\n <mat-radio-group stop-propagation #ctrl=\"matRadioGroup\" #boolField='ngModel' class=\"font\" name=\"filterValue\" [ngModel]=\"myFilterValue\" >\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = true;\" [value]=\"true\">True</mat-radio-button><br/>\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = false\" [value]=\"false\">False</mat-radio-button><br/>\r\n </mat-radio-group>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Date\">\r\n <mat-form-field style=\"padding: 0 16px\" class=\"font auto-width\" stop-propagation >\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrAfter)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrAfter }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrBefore)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrBefore }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.DateIsOn)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateIsOn }\">\r\n =</span>\r\n </button>\r\n </span>\r\n <mat-label>{{myFilterType === FilterType.DateIsOn ? 'On...' :\r\n myFilterType === FilterType.DateOnOrBefore ? 'On or Before...' : 'On or After...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" [matDatepicker]=\"calendar\"\r\n (click)=\"calendar.open()\"/>\r\n <mat-datepicker-toggle matSuffix [for]=\"calendar\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #calendar></mat-datepicker>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <button mat-button (click)=\"onEnter(myForm.value)\" [disabled]=\"myForm.value.filterValue == undefined\" disableRipple>\r\n Apply\r\n </button>\r\n </ng-form>\r\n</mat-menu>\r\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}::ng-deep .form-field .mat-form-field-wrapper{padding-bottom:4px!important;padding-top:4px!important;margin-bottom:5px!important}.menu-icon{font-size:16px;line-height:16px!important;vertical-align:top!important}.search-icon{margin-right:16px;vertical-align:middle;height:24px;color:#0000008a;font-size:21px;line-height:1.125}.font{font-size:14px}.filter-radio-button:first-of-type{padding-left:0}.filter-radio-button{padding:10px 40px;min-width:110px}::ng-deep .form-field.mat-form-field-appearance-outline .mat-form-field-infix{padding:5px 0;width:auto}::ng-deep .auto-width .mat-form-field-infix{width:auto}.suffix-icons{font-size:14px;margin-left:6px}mat-icon.chosen-icon.mat-icon.suffix-icons,.chosen-icon{font-size:20px;color:green}mat-icon.mat-icon.suffix-icons.underline{-webkit-text-decoration:underline .1px solid;text-decoration:underline .1px solid;transform:scaleX(.7)}\n"] }]
|
|
1348
1581
|
}], ctorParameters: function () { return [{ type: TableStore }]; }, propDecorators: { filter: [{
|
|
1349
1582
|
type: Input
|
|
1350
1583
|
}], metaData: [{
|
|
@@ -1531,8 +1764,8 @@ class ColumnBuilderComponent {
|
|
|
1531
1764
|
}
|
|
1532
1765
|
}
|
|
1533
1766
|
}
|
|
1534
|
-
ColumnBuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: ColumnBuilderComponent, deps: [{ token: TransformCreator }, { token: i3$
|
|
1535
|
-
ColumnBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: ColumnBuilderComponent, selector: "tb-column-builder", inputs: { metaData: "metaData", customCell: "customCell", data$: "data$" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "bodyTemplate", first: true, predicate: ["body"], descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"metaData.key\" *ngrxLet=\"styles$ as styles\">\n\n <ng-template #body let-element='element' >\n\n <mat-cell [styler]='styles.body' [class.group-footer]=\"element.isGroupFooter\" (click)='cellClicked(element, metaData.key)'>\n <ng-container *ngTemplateOutlet=\"innerTemplate;context: {metaData: metaData, element: element, transform: transform }\">\n </ng-container>\n <span class=\"no-val\" *ngIf=\"\n !element.isGroupFooter &&\n metaData.fieldType !== FieldType.Expression &&\n (element[metaData.key] == null) &&\n !((customCell && customCell.TemplateRef) || metaData.template)\n \"> - </span>\n </mat-cell>\n\n </ng-template>\n\n <ng-template matHeaderCellDef #myHeader>\n\n <ng-container *ngIf=\"customCell?.columnDef?.headerCell;else header;\">\n <ng-container *ngTemplateOutlet=\"customCell.columnDef.headerCell.template; context: {metaData: metaData, styles: styles.header} \">\n </ng-container>\n </ng-container>\n\n <ng-template #header>\n\n <mat-header-cell cdkDrag [styler]='styles.header' [resizeColumn]=\"true\" [key]=\"metaData.key\" class=\"column-head drag-header\" #headref >\n <div class=\"header-container\" cdkDragHandle>\n <div *ngIf=\"!metaData._internalNotUserDefined || !customCell?.columnDef?.cell ; else headerWithoutMenu\" mat-sort-header style=\"width: 100%\">\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\n </div>\n <ng-template #headerWithoutMenu >\n <div *ngIf=\"metaData._internalNotUserDefined;\" style=\"width: 100%\">\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\n </div>\n </ng-template>\n <tb-header-menu \n *ngIf=\"(!metaData._internalNotUserDefined || !customCell?.columnDef?.cell) && (showfilters$ | async);\" #menu [metaData]='metaData' [filter]='filter' >\n </tb-header-menu>\n </div>\n </mat-header-cell>\n\n </ng-template>\n\n </ng-template>\n\n\n <ng-container *matCellDef=\"let element;\">\n <ng-container *ngTemplateOutlet=\"outerTemplate; context: {metaData: metaData, element: element , styles: styles.body }\">\n </ng-container>\n </ng-container>\n\n <ng-template matFooterCellDef>\n <ng-container *ngIf=\"customCell?.columnDef?.footerCell;else footer\">\n <ng-container\n *ngTemplateOutlet=\"customCell.columnDef.footerCell.template;context: {metaData: metaData, data: data$, styles : styles.footer }\">\n </ng-container>\n </ng-container>\n\n <ng-template #footer>\n <mat-footer-cell [styler]='styles.footer' *ngrxLet=\"data$ as data\">\n <span *ngIf=\"data?.length && metaData.additional?.footer\" [ngSwitch]=\"metaData.fieldType\" class=\"bold\">\n <span *ngSwitchCase=\"FieldType.Currency\">\n {{ data | columnTotal: metaData | currency }}\n </span>\n <span *ngSwitchCase=\"FieldType.Number\">\n {{ data | columnTotal: metaData | number }}\n </span>\n </span>\n </mat-footer-cell>\n </ng-template>\n </ng-template>\n</ng-container>", styles: [".header-container{display:flex;flex-direction:row;width:100%;align-items:center}.negative-currency{color:red}.column-head{position:relative}.bold,.group-footer{font-weight:900}.cdk-drag-preview{background:white;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:33%;border-right-width:0px}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.drag-handle{color:#add8e6;cursor:move;margin-right:9px}\n"], components: [{ type: i1$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { type: HeaderMenuComponent, selector: "tb-header-menu", inputs: ["filter", "metaData"] }], directives: [{ type: i7$1.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet"] }, { type: i3$
|
|
1767
|
+
ColumnBuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: ColumnBuilderComponent, deps: [{ token: TransformCreator }, { token: i3$2.MatTable }, { token: TableStore }, { token: TableTemplateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1768
|
+
ColumnBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: ColumnBuilderComponent, selector: "tb-column-builder", inputs: { metaData: "metaData", customCell: "customCell", data$: "data$" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "bodyTemplate", first: true, predicate: ["body"], descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"metaData.key\" *ngrxLet=\"styles$ as styles\">\n\n <ng-template #body let-element='element' >\n\n <mat-cell [styler]='styles.body' [class.group-footer]=\"element.isGroupFooter\" (click)='cellClicked(element, metaData.key)'>\n <ng-container *ngTemplateOutlet=\"innerTemplate;context: {metaData: metaData, element: element, transform: transform }\">\n </ng-container>\n <span class=\"no-val\" *ngIf=\"\n !element.isGroupFooter &&\n metaData.fieldType !== FieldType.Expression &&\n (element[metaData.key] == null) &&\n !((customCell && customCell.TemplateRef) || metaData.template)\n \"> - </span>\n </mat-cell>\n\n </ng-template>\n\n <ng-template matHeaderCellDef #myHeader>\n\n <ng-container *ngIf=\"customCell?.columnDef?.headerCell;else header;\">\n <ng-container *ngTemplateOutlet=\"customCell.columnDef.headerCell.template; context: {metaData: metaData, styles: styles.header} \">\n </ng-container>\n </ng-container>\n\n <ng-template #header>\n\n <mat-header-cell cdkDrag [styler]='styles.header' [resizeColumn]=\"true\" [key]=\"metaData.key\" class=\"column-head drag-header\" #headref >\n <div class=\"header-container\" cdkDragHandle>\n <div *ngIf=\"!metaData._internalNotUserDefined || !customCell?.columnDef?.cell ; else headerWithoutMenu\" mat-sort-header style=\"width: 100%\">\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\n </div>\n <ng-template #headerWithoutMenu >\n <div *ngIf=\"metaData._internalNotUserDefined;\" style=\"width: 100%\">\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\n </div>\n </ng-template>\n <tb-header-menu \n *ngIf=\"(!metaData._internalNotUserDefined || !customCell?.columnDef?.cell) && (showfilters$ | async);\" #menu [metaData]='metaData' [filter]='filter' >\n </tb-header-menu>\n </div>\n </mat-header-cell>\n\n </ng-template>\n\n </ng-template>\n\n\n <ng-container *matCellDef=\"let element;\">\n <ng-container *ngTemplateOutlet=\"outerTemplate; context: {metaData: metaData, element: element , styles: styles.body }\">\n </ng-container>\n </ng-container>\n\n <ng-template matFooterCellDef>\n <ng-container *ngIf=\"customCell?.columnDef?.footerCell;else footer\">\n <ng-container\n *ngTemplateOutlet=\"customCell.columnDef.footerCell.template;context: {metaData: metaData, data: data$, styles : styles.footer }\">\n </ng-container>\n </ng-container>\n\n <ng-template #footer>\n <mat-footer-cell [styler]='styles.footer' *ngrxLet=\"data$ as data\">\n <span *ngIf=\"data?.length && metaData.additional?.footer\" [ngSwitch]=\"metaData.fieldType\" class=\"bold\">\n <span *ngSwitchCase=\"FieldType.Currency\">\n {{ data | columnTotal: metaData | currency }}\n </span>\n <span *ngSwitchCase=\"FieldType.Number\">\n {{ data | columnTotal: metaData | number }}\n </span>\n </span>\n </mat-footer-cell>\n </ng-template>\n </ng-template>\n</ng-container>", styles: [".header-container{display:flex;flex-direction:row;width:100%;align-items:center}.negative-currency{color:red}.column-head{position:relative}.bold,.group-footer{font-weight:900}.cdk-drag-preview{background:white;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:33%;border-right-width:0px}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.drag-handle{color:#add8e6;cursor:move;margin-right:9px}\n"], components: [{ type: i1$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { type: HeaderMenuComponent, selector: "tb-header-menu", inputs: ["filter", "metaData"] }], directives: [{ type: i7$1.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet"] }, { type: i3$2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i3$2.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: StylerDirective, selector: "[styler]", inputs: ["styler"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i3$2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: ResizeColumnDirective, selector: "[resizeColumn]", inputs: ["resizeColumn", "key"] }, { type: i10.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { type: i3$2.MatCellDef, selector: "[matCellDef]" }, { type: i3$2.MatFooterCellDef, selector: "[matFooterCellDef]" }, { type: i3$2.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], pipes: { "spaceCase": SpaceCasePipe, "async": i1.AsyncPipe, "currency": i1.CurrencyPipe, "columnTotal": ColumnTotalPipe, "number": i1.DecimalPipe }, viewProviders: [
|
|
1536
1769
|
{ provide: CDK_DROP_LIST, useExisting: CdkDropList },
|
|
1537
1770
|
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1538
1771
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: ColumnBuilderComponent, decorators: [{
|
|
@@ -1540,7 +1773,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImpor
|
|
|
1540
1773
|
args: [{ selector: 'tb-column-builder', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [
|
|
1541
1774
|
{ provide: CDK_DROP_LIST, useExisting: CdkDropList },
|
|
1542
1775
|
], template: "<ng-container [matColumnDef]=\"metaData.key\" *ngrxLet=\"styles$ as styles\">\n\n <ng-template #body let-element='element' >\n\n <mat-cell [styler]='styles.body' [class.group-footer]=\"element.isGroupFooter\" (click)='cellClicked(element, metaData.key)'>\n <ng-container *ngTemplateOutlet=\"innerTemplate;context: {metaData: metaData, element: element, transform: transform }\">\n </ng-container>\n <span class=\"no-val\" *ngIf=\"\n !element.isGroupFooter &&\n metaData.fieldType !== FieldType.Expression &&\n (element[metaData.key] == null) &&\n !((customCell && customCell.TemplateRef) || metaData.template)\n \"> - </span>\n </mat-cell>\n\n </ng-template>\n\n <ng-template matHeaderCellDef #myHeader>\n\n <ng-container *ngIf=\"customCell?.columnDef?.headerCell;else header;\">\n <ng-container *ngTemplateOutlet=\"customCell.columnDef.headerCell.template; context: {metaData: metaData, styles: styles.header} \">\n </ng-container>\n </ng-container>\n\n <ng-template #header>\n\n <mat-header-cell cdkDrag [styler]='styles.header' [resizeColumn]=\"true\" [key]=\"metaData.key\" class=\"column-head drag-header\" #headref >\n <div class=\"header-container\" cdkDragHandle>\n <div *ngIf=\"!metaData._internalNotUserDefined || !customCell?.columnDef?.cell ; else headerWithoutMenu\" mat-sort-header style=\"width: 100%\">\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\n </div>\n <ng-template #headerWithoutMenu >\n <div *ngIf=\"metaData._internalNotUserDefined;\" style=\"width: 100%\">\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\n </div>\n </ng-template>\n <tb-header-menu \n *ngIf=\"(!metaData._internalNotUserDefined || !customCell?.columnDef?.cell) && (showfilters$ | async);\" #menu [metaData]='metaData' [filter]='filter' >\n </tb-header-menu>\n </div>\n </mat-header-cell>\n\n </ng-template>\n\n </ng-template>\n\n\n <ng-container *matCellDef=\"let element;\">\n <ng-container *ngTemplateOutlet=\"outerTemplate; context: {metaData: metaData, element: element , styles: styles.body }\">\n </ng-container>\n </ng-container>\n\n <ng-template matFooterCellDef>\n <ng-container *ngIf=\"customCell?.columnDef?.footerCell;else footer\">\n <ng-container\n *ngTemplateOutlet=\"customCell.columnDef.footerCell.template;context: {metaData: metaData, data: data$, styles : styles.footer }\">\n </ng-container>\n </ng-container>\n\n <ng-template #footer>\n <mat-footer-cell [styler]='styles.footer' *ngrxLet=\"data$ as data\">\n <span *ngIf=\"data?.length && metaData.additional?.footer\" [ngSwitch]=\"metaData.fieldType\" class=\"bold\">\n <span *ngSwitchCase=\"FieldType.Currency\">\n {{ data | columnTotal: metaData | currency }}\n </span>\n <span *ngSwitchCase=\"FieldType.Number\">\n {{ data | columnTotal: metaData | number }}\n </span>\n </span>\n </mat-footer-cell>\n </ng-template>\n </ng-template>\n</ng-container>", styles: [".header-container{display:flex;flex-direction:row;width:100%;align-items:center}.negative-currency{color:red}.column-head{position:relative}.bold,.group-footer{font-weight:900}.cdk-drag-preview{background:white;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:33%;border-right-width:0px}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.drag-handle{color:#add8e6;cursor:move;margin-right:9px}\n"] }]
|
|
1543
|
-
}], ctorParameters: function () { return [{ type: TransformCreator }, { type: i3$
|
|
1776
|
+
}], ctorParameters: function () { return [{ type: TransformCreator }, { type: i3$2.MatTable }, { type: TableStore }, { type: TableTemplateService }]; }, propDecorators: { metaData: [{
|
|
1544
1777
|
type: Input
|
|
1545
1778
|
}], customCell: [{
|
|
1546
1779
|
type: Input
|
|
@@ -1621,7 +1854,7 @@ PaginatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
|
|
|
1621
1854
|
<mat-paginator [pageSizeOptions]="[5, 10, 20, 50, 100, 500]" showFirstLastButtons (page)="paginatorChange()"
|
|
1622
1855
|
[ngClass]="{'hide' : (collapseFooter$ | async)}">
|
|
1623
1856
|
</mat-paginator>
|
|
1624
|
-
`, isInline: true, styles: [".mat-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0px;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-paginator-container{min-height:initial!important}:host::ng-deep .mat-paginator-container .mat-form-field-infix{padding:0!important}.group-header{font-weight:700;font-size:20px}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\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: i2
|
|
1857
|
+
`, isInline: true, styles: [".mat-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0px;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-paginator-container{min-height:initial!important}:host::ng-deep .mat-paginator-container .mat-form-field-infix{padding:0!important}.group-header{font-weight:700;font-size:20px}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\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: i2.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "async": i1.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1625
1858
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: PaginatorComponent, decorators: [{
|
|
1626
1859
|
type: Component,
|
|
1627
1860
|
args: [{ selector: 'tb-paginator', template: `
|
|
@@ -1789,7 +2022,7 @@ class GenericTableComponent {
|
|
|
1789
2022
|
}
|
|
1790
2023
|
}
|
|
1791
2024
|
GenericTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: GenericTableComponent, deps: [{ token: i1$1.MatSort }, { token: TableStore }, { token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
1792
|
-
GenericTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: GenericTableComponent, selector: "tb-generic-table", inputs: { data$: "data$", IndexColumn: "IndexColumn", SelectionColumn: "SelectionColumn", trackBy: "trackBy", rows: "rows", isSticky: "isSticky", columnBuilders: "columnBuilders", columnInfos: "columnInfos", disableSort: "disableSort" }, outputs: { selection$: "selection$" }, viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, static: true }, { propertyName: "dropList", first: true, predicate: CdkDropList, descendants: true, static: true }, { propertyName: "tableElRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<mat-table\n cdkDropList\n cdkDropListLockAxis='x'\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n class=\"table-drag-list\"\n #table\n [dataSource]=\"dataSource\"\n [trackBy]='trackByFunction'\n [styler]=\"tableWidth | async\"\n>\n\n <ng-container matColumnDef=\"select\">\n\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" style=\"flex: 0 0 30px;\" >\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"!!(masterToggleChecked$ | async)\"\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\n </mat-checkbox>\n </mat-header-cell>\n\n <mat-cell *matCellDef=\"let row\" style=\"flex: 0 0 30px;\">\n <mat-checkbox *ngIf=\"!row.isGroupFooter\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef style=\"flex: 0 0 30px;\">\n {{ selection.selected.length }}\n </mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"index\">\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\n\n </ng-container>\n\n <ng-container matColumnDef=\"groupHeader\">\n <mat-cell *matCellDef=\"let row\" class=\"group-header\">\n {{row.groupHeaderName}}\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"showHeader$ | async\">\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\n </ng-container>\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: lightgray;\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\n\n</mat-table>\n\n<div class=\"flx-row-end sticky\">\n <tb-paginator #tbPaginator\n [dataSource]=\"dataSource\"\n [tableElRef]=\"tableElRef\"\n [data$]=\"data$\">\n </tb-paginator>\n\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\n </mat-icon>\n</div>\n", styles: [".mat-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0px;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-paginator-container{min-height:initial!important}:host::ng-deep .mat-paginator-container .mat-form-field-infix{padding:0!important}.group-header{font-weight:700;font-size:20px}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\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: i3$
|
|
2025
|
+
GenericTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: GenericTableComponent, selector: "tb-generic-table", inputs: { data$: "data$", IndexColumn: "IndexColumn", SelectionColumn: "SelectionColumn", trackBy: "trackBy", rows: "rows", isSticky: "isSticky", columnBuilders: "columnBuilders", columnInfos: "columnInfos", disableSort: "disableSort" }, outputs: { selection$: "selection$" }, viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, static: true }, { propertyName: "dropList", first: true, predicate: CdkDropList, descendants: true, static: true }, { propertyName: "tableElRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<mat-table\n cdkDropList\n cdkDropListLockAxis='x'\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n class=\"table-drag-list\"\n #table\n [dataSource]=\"dataSource\"\n [trackBy]='trackByFunction'\n [styler]=\"tableWidth | async\"\n>\n\n <ng-container matColumnDef=\"select\">\n\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" style=\"flex: 0 0 30px;\" >\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"!!(masterToggleChecked$ | async)\"\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\n </mat-checkbox>\n </mat-header-cell>\n\n <mat-cell *matCellDef=\"let row\" style=\"flex: 0 0 30px;\">\n <mat-checkbox *ngIf=\"!row.isGroupFooter\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef style=\"flex: 0 0 30px;\">\n {{ selection.selected.length }}\n </mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"index\">\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\n\n </ng-container>\n\n <ng-container matColumnDef=\"groupHeader\">\n <mat-cell *matCellDef=\"let row\" class=\"group-header\">\n {{row.groupHeaderName}}\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"showHeader$ | async\">\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\n </ng-container>\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: lightgray;\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\n\n</mat-table>\n\n<div class=\"flx-row-end sticky\">\n <tb-paginator #tbPaginator\n [dataSource]=\"dataSource\"\n [tableElRef]=\"tableElRef\"\n [data$]=\"data$\">\n </tb-paginator>\n\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\n </mat-icon>\n</div>\n", styles: [".mat-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0px;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-paginator-container{min-height:initial!important}:host::ng-deep .mat-paginator-container .mat-form-field-infix{padding:0!important}.group-header{font-weight:700;font-size:20px}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\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: i3$2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i3$2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i3$2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i3$2.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { type: PaginatorComponent, selector: "tb-paginator", inputs: ["dataSource", "tableElRef", "data$"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: StylerDirective, selector: "[styler]", inputs: ["styler"] }, { type: i3$2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i3$2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i3$2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i3$2.MatCellDef, selector: "[matCellDef]" }, { type: i3$2.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$2.MatFooterCellDef, selector: "[matFooterCellDef]" }, { type: i3$2.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { type: i3$2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i3$2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i3$2.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], pipes: { "async": i1.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1793
2026
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: GenericTableComponent, decorators: [{
|
|
1794
2027
|
type: Component,
|
|
1795
2028
|
args: [{ selector: 'tb-generic-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-table\n cdkDropList\n cdkDropListLockAxis='x'\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n class=\"table-drag-list\"\n #table\n [dataSource]=\"dataSource\"\n [trackBy]='trackByFunction'\n [styler]=\"tableWidth | async\"\n>\n\n <ng-container matColumnDef=\"select\">\n\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" style=\"flex: 0 0 30px;\" >\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"!!(masterToggleChecked$ | async)\"\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\n </mat-checkbox>\n </mat-header-cell>\n\n <mat-cell *matCellDef=\"let row\" style=\"flex: 0 0 30px;\">\n <mat-checkbox *ngIf=\"!row.isGroupFooter\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef style=\"flex: 0 0 30px;\">\n {{ selection.selected.length }}\n </mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"index\">\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\n\n </ng-container>\n\n <ng-container matColumnDef=\"groupHeader\">\n <mat-cell *matCellDef=\"let row\" class=\"group-header\">\n {{row.groupHeaderName}}\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"showHeader$ | async\">\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\n </ng-container>\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: lightgray;\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\n\n</mat-table>\n\n<div class=\"flx-row-end sticky\">\n <tb-paginator #tbPaginator\n [dataSource]=\"dataSource\"\n [tableElRef]=\"tableElRef\"\n [data$]=\"data$\">\n </tb-paginator>\n\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\n </mat-icon>\n</div>\n", styles: [".mat-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0px;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-paginator-container{min-height:initial!important}:host::ng-deep .mat-paginator-container .mat-form-field-infix{padding:0!important}.group-header{font-weight:700;font-size:20px}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\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"] }]
|
|
@@ -1905,7 +2138,7 @@ class GenColDisplayerComponent {
|
|
|
1905
2138
|
}
|
|
1906
2139
|
}
|
|
1907
2140
|
GenColDisplayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: GenColDisplayerComponent, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Component });
|
|
1908
|
-
GenColDisplayerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: GenColDisplayerComponent, selector: "tb-col-displayer", ngImport: i0, template: "<ng-container *ngIf=\"columns$ | async as displayCols\">\n <span matTooltip=\"Show/hide columns\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon color=\"primary\">visibility_off</mat-icon>\n </button>\n </span>\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\n\n <button mat-menu-item>\n <div style=\"display: flex; flex-direction: row-reverse;\">\n <span matTooltip=\"Close\">\n <button class=\"filter-button\" mat-icon-button>\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </div>\n </button>\n <button mat-menu-item stop-propagation>\n <div style=\"display: flex; justify-content: space-between;\">\n <span matTooltip=\"Show all columns\">\n <button mat-icon-button (click)=\"reset(displayCols)\">\n <mat-icon color=\"primary\">done_all</mat-icon>\n </button>\n </span>\n\n <span matTooltip=\"Hide all columns\">\n <button mat-icon-button (click)=\"unset(displayCols)\">\n <mat-icon color=\"primary\">cancel</mat-icon>\n </button>\n </span>\n </div>\n </button>\n\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation cdkDropListLockAxis='y' >\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\"\n *ngFor=\"let col of displayCols\">\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; justify-content: space-between; align-items: center;\">\n <p class=\"label\" style=\"display: flex;\">\n {{col.displayName || (col.key | spaceCase) }}\n </p>\n <span matTooltip=\"Hide Column\" class=\"show-hide\" *ngIf=\"col.isVisible; else hidden\">\n <button mat-icon-button>\n <mat-icon color=\"primary\">check_box</mat-icon>\n </button>\n </span>\n\n <ng-template #hidden >\n <span matTooltip=\"Show Column\" class=\"show-hide\">\n <button mat-icon-button>\n <mat-icon>indeterminate_check_box</mat-icon>\n </button>\n </span>\n </ng-template>\n\n </div>\n </button>\n </div>\n </mat-menu>\n</ng-container>\n", styles: [".show-hide{margin-left:15px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}\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: i4$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: StopPropagationDirective, selector: "[stop-propagation]" }, { type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }], pipes: { "async": i1.AsyncPipe, "spaceCase": SpaceCasePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2141
|
+
GenColDisplayerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: GenColDisplayerComponent, selector: "tb-col-displayer", ngImport: i0, template: "<ng-container *ngIf=\"columns$ | async as displayCols\">\n <span matTooltip=\"Show/hide columns\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon color=\"primary\">visibility_off</mat-icon>\n </button>\n </span>\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\n\n <button mat-menu-item>\n <div style=\"display: flex; flex-direction: row-reverse;\">\n <span matTooltip=\"Close\">\n <button class=\"filter-button\" mat-icon-button>\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </div>\n </button>\n <button mat-menu-item stop-propagation>\n <div style=\"display: flex; justify-content: space-between;\">\n <span matTooltip=\"Show all columns\">\n <button mat-icon-button (click)=\"reset(displayCols)\">\n <mat-icon color=\"primary\">done_all</mat-icon>\n </button>\n </span>\n\n <span matTooltip=\"Hide all columns\">\n <button mat-icon-button (click)=\"unset(displayCols)\">\n <mat-icon color=\"primary\">cancel</mat-icon>\n </button>\n </span>\n </div>\n </button>\n\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation cdkDropListLockAxis='y' >\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\"\n *ngFor=\"let col of displayCols\">\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; justify-content: space-between; align-items: center;\">\n <p class=\"label\" style=\"display: flex;\">\n {{col.displayName || (col.key | spaceCase) }}\n </p>\n <span matTooltip=\"Hide Column\" class=\"show-hide\" *ngIf=\"col.isVisible; else hidden\">\n <button mat-icon-button>\n <mat-icon color=\"primary\">check_box</mat-icon>\n </button>\n </span>\n\n <ng-template #hidden >\n <span matTooltip=\"Show Column\" class=\"show-hide\">\n <button mat-icon-button>\n <mat-icon>indeterminate_check_box</mat-icon>\n </button>\n </span>\n </ng-template>\n\n </div>\n </button>\n </div>\n </mat-menu>\n</ng-container>\n", styles: [".show-hide{margin-left:15px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], components: [{ type: i3$1.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: i4$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: StopPropagationDirective, selector: "[stop-propagation]" }, { type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }], pipes: { "async": i1.AsyncPipe, "spaceCase": SpaceCasePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1909
2142
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: GenColDisplayerComponent, decorators: [{
|
|
1910
2143
|
type: Component,
|
|
1911
2144
|
args: [{ selector: 'tb-col-displayer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"columns$ | async as displayCols\">\n <span matTooltip=\"Show/hide columns\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon color=\"primary\">visibility_off</mat-icon>\n </button>\n </span>\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\n\n <button mat-menu-item>\n <div style=\"display: flex; flex-direction: row-reverse;\">\n <span matTooltip=\"Close\">\n <button class=\"filter-button\" mat-icon-button>\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </div>\n </button>\n <button mat-menu-item stop-propagation>\n <div style=\"display: flex; justify-content: space-between;\">\n <span matTooltip=\"Show all columns\">\n <button mat-icon-button (click)=\"reset(displayCols)\">\n <mat-icon color=\"primary\">done_all</mat-icon>\n </button>\n </span>\n\n <span matTooltip=\"Hide all columns\">\n <button mat-icon-button (click)=\"unset(displayCols)\">\n <mat-icon color=\"primary\">cancel</mat-icon>\n </button>\n </span>\n </div>\n </button>\n\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation cdkDropListLockAxis='y' >\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\"\n *ngFor=\"let col of displayCols\">\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; justify-content: space-between; align-items: center;\">\n <p class=\"label\" style=\"display: flex;\">\n {{col.displayName || (col.key | spaceCase) }}\n </p>\n <span matTooltip=\"Hide Column\" class=\"show-hide\" *ngIf=\"col.isVisible; else hidden\">\n <button mat-icon-button>\n <mat-icon color=\"primary\">check_box</mat-icon>\n </button>\n </span>\n\n <ng-template #hidden >\n <span matTooltip=\"Show Column\" class=\"show-hide\">\n <button mat-icon-button>\n <mat-icon>indeterminate_check_box</mat-icon>\n </button>\n </span>\n </ng-template>\n\n </div>\n </button>\n </div>\n </mat-menu>\n</ng-container>\n", styles: [".show-hide{margin-left:15px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
|
|
@@ -1923,200 +2156,31 @@ class WrapperFilterStore extends ComponentStore {
|
|
|
1923
2156
|
this.currentFilters$ = this.state$.pipe(map(state => state.filterInfo));
|
|
1924
2157
|
this.addFilter = this.updater((state, filter) => {
|
|
1925
2158
|
return ({ ...state, filterInfo: [...state.filterInfo, filter] });
|
|
1926
|
-
});
|
|
1927
|
-
}
|
|
1928
|
-
}
|
|
1929
|
-
WrapperFilterStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: WrapperFilterStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1930
|
-
WrapperFilterStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: WrapperFilterStore });
|
|
1931
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: WrapperFilterStore, decorators: [{
|
|
1932
|
-
type: Injectable
|
|
1933
|
-
}], ctorParameters: function () { return []; } });
|
|
1934
|
-
|
|
1935
|
-
class GenFilterDisplayerComponent {
|
|
1936
|
-
constructor(tableState, filterStore) {
|
|
1937
|
-
this.tableState = tableState;
|
|
1938
|
-
this.filterStore = filterStore;
|
|
1939
|
-
this.filterCols$ = tableState.metaDataArray$.pipe(map(md => Object.values(md).filter(m => (m.fieldType !== FieldType.Hidden) && (!m.noFilter))));
|
|
1940
|
-
}
|
|
1941
|
-
addFilter(metaData) {
|
|
1942
|
-
this.filterStore.addFilter({ key: metaData.key, fieldType: metaData.fieldType });
|
|
1943
|
-
}
|
|
1944
|
-
}
|
|
1945
|
-
GenFilterDisplayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: GenFilterDisplayerComponent, deps: [{ token: TableStore }, { token: WrapperFilterStore }], target: i0.ɵɵFactoryTarget.Component });
|
|
1946
|
-
GenFilterDisplayerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", 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: i4$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: StopPropagationDirective, selector: "[stop-propagation]" }, { type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i1.AsyncPipe, "spaceCase": SpaceCasePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1947
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: GenFilterDisplayerComponent, decorators: [{
|
|
1948
|
-
type: Component,
|
|
1949
|
-
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"] }]
|
|
1950
|
-
}], ctorParameters: function () { return [{ type: TableStore }, { type: WrapperFilterStore }]; } });
|
|
1951
|
-
|
|
1952
|
-
const isNull = (filterInfo) => {
|
|
1953
|
-
const func = filterInfo.filterValue ?
|
|
1954
|
-
(val) => val == null || val === ''
|
|
1955
|
-
:
|
|
1956
|
-
(val) => val != null && val !== '';
|
|
1957
|
-
return func;
|
|
1958
|
-
};
|
|
1959
|
-
|
|
1960
|
-
const stringEqualFunc = (filterInfo) => {
|
|
1961
|
-
const equelsVal = prepareForStringCompare(filterInfo.filterValue);
|
|
1962
|
-
return ((val) => prepareForStringCompare(val) === equelsVal);
|
|
1963
|
-
};
|
|
1964
|
-
const stringContainsFunc = (filterInfo) => {
|
|
1965
|
-
const containsVal = prepareForStringCompare(filterInfo.filterValue);
|
|
1966
|
-
return ((val) => prepareForStringCompare(val).includes(containsVal));
|
|
1967
|
-
};
|
|
1968
|
-
const stringDoesNotContainFunc = (filterInfo) => {
|
|
1969
|
-
const doesNotContainVal = prepareForStringCompare(filterInfo.filterValue);
|
|
1970
|
-
return ((val) => !prepareForStringCompare(val)?.includes(doesNotContainVal));
|
|
1971
|
-
};
|
|
1972
|
-
const stringStartsWithFunc = (filterInfo) => {
|
|
1973
|
-
const startsWith = prepareForStringCompare(filterInfo.filterValue);
|
|
1974
|
-
return ((val) => prepareForStringCompare(val).startsWith(startsWith));
|
|
1975
|
-
};
|
|
1976
|
-
const stringEndsWithFunc = (filterInfo) => {
|
|
1977
|
-
const startsWith = prepareForStringCompare(filterInfo.filterValue);
|
|
1978
|
-
return ((val) => prepareForStringCompare(val).endsWith(startsWith));
|
|
1979
|
-
};
|
|
1980
|
-
const multipleStringValuesEqualsFunc = (filterInfo) => {
|
|
1981
|
-
const filterVals = filterInfo.filterValue.map((v) => prepareForStringCompare(v));
|
|
1982
|
-
return ((val) => filterVals.some((s) => prepareForStringCompare(val) === s));
|
|
1983
|
-
};
|
|
1984
|
-
const StringFilterFuncs = {
|
|
1985
|
-
[FilterType.StringEquals]: stringEqualFunc,
|
|
1986
|
-
[FilterType.StringContains]: stringContainsFunc,
|
|
1987
|
-
[FilterType.StringDoesNotContain]: stringDoesNotContainFunc,
|
|
1988
|
-
[FilterType.StringStartWith]: stringStartsWithFunc,
|
|
1989
|
-
[FilterType.StringEndsWith]: stringEndsWithFunc,
|
|
1990
|
-
[FilterType.IsNull]: isNull,
|
|
1991
|
-
[FilterType.In]: multipleStringValuesEqualsFunc,
|
|
1992
|
-
};
|
|
1993
|
-
const EnumFilterFuncs = {
|
|
1994
|
-
[FilterType.IsNull]: isNull,
|
|
1995
|
-
[FilterType.In]: multipleStringValuesEqualsFunc,
|
|
1996
|
-
};
|
|
1997
|
-
const prepareForStringCompare = (val) => val?.toString().trim().toLowerCase();
|
|
1998
|
-
|
|
1999
|
-
const numberEqalsFunc = (filterInfo) => (val) => {
|
|
2000
|
-
return val === filterInfo.filterValue;
|
|
2001
|
-
};
|
|
2002
|
-
const numberNotEqualFunc = (filterInfo) => (val) => {
|
|
2003
|
-
return val !== filterInfo.filterValue;
|
|
2004
|
-
};
|
|
2005
|
-
const numberGreaterThanFunc = (filterInfo) => (val) => {
|
|
2006
|
-
return val > filterInfo.filterValue;
|
|
2007
|
-
};
|
|
2008
|
-
const numberLessThanFunc = (filterInfo) => (val) => {
|
|
2009
|
-
return val < filterInfo.filterValue;
|
|
2010
|
-
};
|
|
2011
|
-
const numberBetweenFunc = (filterInfo) => {
|
|
2012
|
-
const startVal = Number(filterInfo.filterValue.Start);
|
|
2013
|
-
const endVal = Number(filterInfo.filterValue.End);
|
|
2014
|
-
return ((val) => (val > startVal) && (val < endVal));
|
|
2015
|
-
};
|
|
2016
|
-
const multipleNumberValuesEqualsFunc = (filterInfo) => {
|
|
2017
|
-
return ((val) => filterInfo.filterValue.some((value) => val === value));
|
|
2018
|
-
};
|
|
2019
|
-
const NumberFilterFuncs = {
|
|
2020
|
-
[FilterType.NumberEquals]: numberEqalsFunc,
|
|
2021
|
-
[FilterType.NumberNotEqual]: numberNotEqualFunc,
|
|
2022
|
-
[FilterType.NumberGreaterThan]: numberGreaterThanFunc,
|
|
2023
|
-
[FilterType.NumberLessThan]: numberLessThanFunc,
|
|
2024
|
-
[FilterType.NumberBetween]: numberBetweenFunc,
|
|
2025
|
-
[FilterType.IsNull]: isNull,
|
|
2026
|
-
[FilterType.In]: multipleNumberValuesEqualsFunc,
|
|
2027
|
-
};
|
|
2028
|
-
|
|
2029
|
-
const dateIsOnFunc = (filterInfo) => {
|
|
2030
|
-
const isOnVal = new Date(filterInfo.filterValue).getTime();
|
|
2031
|
-
return ((val) => val.getTime() === isOnVal);
|
|
2032
|
-
};
|
|
2033
|
-
const dateIsNotOnFunc = (filterInfo) => {
|
|
2034
|
-
const isNotOnVal = new Date(filterInfo.filterValue).getTime();
|
|
2035
|
-
return ((val) => val?.getTime() !== isNotOnVal);
|
|
2036
|
-
};
|
|
2037
|
-
const dateIsOnOrAfterFunc = (filterInfo) => {
|
|
2038
|
-
const afterVal = new Date(filterInfo.filterValue).getTime();
|
|
2039
|
-
return ((val) => val.getTime() >= afterVal);
|
|
2040
|
-
};
|
|
2041
|
-
const dateIsOnOrBeforeFunc = (filterInfo) => {
|
|
2042
|
-
const beforeVal = new Date(filterInfo.filterValue).getTime();
|
|
2043
|
-
return ((val) => val.getTime() <= beforeVal);
|
|
2044
|
-
};
|
|
2045
|
-
const dateBetweenFunc = (filterInfo) => {
|
|
2046
|
-
const startVal = new Date(filterInfo.filterValue.Start);
|
|
2047
|
-
const endVal = new Date(filterInfo.filterValue.End);
|
|
2048
|
-
return ((val) => val >= startVal && val <= endVal);
|
|
2049
|
-
};
|
|
2050
|
-
const DateFilterFuncs = {
|
|
2051
|
-
[FilterType.DateIsOn]: dateIsOnFunc,
|
|
2052
|
-
[FilterType.DateIsNotOn]: dateIsNotOnFunc,
|
|
2053
|
-
[FilterType.DateOnOrAfter]: dateIsOnOrAfterFunc,
|
|
2054
|
-
[FilterType.DateOnOrBefore]: dateIsOnOrBeforeFunc,
|
|
2055
|
-
[FilterType.DateBetween]: dateBetweenFunc,
|
|
2056
|
-
[FilterType.IsNull]: isNull,
|
|
2057
|
-
};
|
|
2058
|
-
|
|
2059
|
-
const booleanEqualsFunc = (filterInfo) => (val) => {
|
|
2060
|
-
return filterInfo.filterValue === val;
|
|
2061
|
-
};
|
|
2062
|
-
const BooleanFilterFuncs = {
|
|
2063
|
-
[FilterType.BooleanEquals]: booleanEqualsFunc,
|
|
2064
|
-
[FilterType.IsNull]: isNull,
|
|
2065
|
-
};
|
|
2159
|
+
});
|
|
2160
|
+
}
|
|
2161
|
+
}
|
|
2162
|
+
WrapperFilterStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: WrapperFilterStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2163
|
+
WrapperFilterStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: WrapperFilterStore });
|
|
2164
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: WrapperFilterStore, decorators: [{
|
|
2165
|
+
type: Injectable
|
|
2166
|
+
}], ctorParameters: function () { return []; } });
|
|
2066
2167
|
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
[FieldType.Number]: NumberFilterMap,
|
|
2073
|
-
[FieldType.String]: StringFilterMap,
|
|
2074
|
-
[FieldType.Boolean]: BooleanFilterMap,
|
|
2075
|
-
[FieldType.PhoneNumber]: StringFilterMap,
|
|
2076
|
-
[FieldType.Link]: StringFilterMap,
|
|
2077
|
-
[FieldType.Enum]: EnumFilterMap,
|
|
2078
|
-
};
|
|
2079
|
-
const filterFactoryMap = {
|
|
2080
|
-
[FilterType.And]: (filter) => {
|
|
2081
|
-
const filters = filter.filterValue.map(createFilterFunc);
|
|
2082
|
-
return (obj) => filters.every(f => f(obj));
|
|
2083
|
-
},
|
|
2084
|
-
[FilterType.In]: (filter) => {
|
|
2085
|
-
const filters = filter.filterValue.map(createFilterFunc);
|
|
2086
|
-
return (obj) => filters.some(f => f(obj));
|
|
2087
|
-
},
|
|
2088
|
-
};
|
|
2089
|
-
const filterTypeFuncMap = {
|
|
2090
|
-
[FieldType.String]: StringFilterFuncs,
|
|
2091
|
-
[FieldType.Array]: StringFilterFuncs,
|
|
2092
|
-
[FieldType.Currency]: NumberFilterFuncs,
|
|
2093
|
-
[FieldType.PhoneNumber]: StringFilterFuncs,
|
|
2094
|
-
[FieldType.Date]: DateFilterFuncs,
|
|
2095
|
-
[FieldType.Number]: NumberFilterFuncs,
|
|
2096
|
-
[FieldType.Boolean]: BooleanFilterFuncs,
|
|
2097
|
-
[FieldType.Unknown]: StringFilterFuncs,
|
|
2098
|
-
[FieldType.Enum]: EnumFilterFuncs,
|
|
2099
|
-
[FieldType.Link]: StringFilterFuncs,
|
|
2100
|
-
};
|
|
2101
|
-
function createFilterFunc(filter) {
|
|
2102
|
-
if (filter.filterValue === undefined) {
|
|
2103
|
-
return () => true;
|
|
2168
|
+
class GenFilterDisplayerComponent {
|
|
2169
|
+
constructor(tableState, filterStore) {
|
|
2170
|
+
this.tableState = tableState;
|
|
2171
|
+
this.filterStore = filterStore;
|
|
2172
|
+
this.filterCols$ = tableState.metaDataArray$.pipe(map(md => Object.values(md).filter(m => (m.fieldType !== FieldType.Hidden) && (!m.noFilter))));
|
|
2104
2173
|
}
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
if (filterFactoryMap[filter.filterType]) {
|
|
2108
|
-
return filterFactoryMap[filter.filterType](filter);
|
|
2109
|
-
}
|
|
2174
|
+
addFilter(metaData) {
|
|
2175
|
+
this.filterStore.addFilter({ key: metaData.key, fieldType: metaData.fieldType });
|
|
2110
2176
|
}
|
|
2111
|
-
const cannotBeTrueForNull = !FalseyValueCanBeIncludedFilterTypes.includes(filter.filterType);
|
|
2112
|
-
return (rowObj) => {
|
|
2113
|
-
const value = rowObj[filter.key];
|
|
2114
|
-
return ((value == undefined) && cannotBeTrueForNull)
|
|
2115
|
-
? false
|
|
2116
|
-
: func(value);
|
|
2117
|
-
};
|
|
2118
2177
|
}
|
|
2119
|
-
|
|
2178
|
+
GenFilterDisplayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: GenFilterDisplayerComponent, deps: [{ token: TableStore }, { token: WrapperFilterStore }], target: i0.ɵɵFactoryTarget.Component });
|
|
2179
|
+
GenFilterDisplayerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", 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$1.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: i4$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: StopPropagationDirective, selector: "[stop-propagation]" }, { type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i1.AsyncPipe, "spaceCase": SpaceCasePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2180
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: GenFilterDisplayerComponent, decorators: [{
|
|
2181
|
+
type: Component,
|
|
2182
|
+
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"] }]
|
|
2183
|
+
}], ctorParameters: function () { return [{ type: TableStore }, { type: WrapperFilterStore }]; } });
|
|
2120
2184
|
|
|
2121
2185
|
class AutoFocusDirective {
|
|
2122
2186
|
constructor(elementRef) {
|
|
@@ -2255,7 +2319,7 @@ class FilterComponent {
|
|
|
2255
2319
|
}
|
|
2256
2320
|
}
|
|
2257
2321
|
FilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: FilterComponent, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Component });
|
|
2258
|
-
FilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: FilterComponent, selector: "tb-filter", inputs: { filter: "filter" }, outputs: { close: "close" }, ngImport: i0, template: "<mat-card class=\"mat-elevation-z5\" *ngIf=\"filter\">\n <form #form=\"ngForm\" (keydown.enter)=\"onEnter(form.value,$event)\" (keydown.escape)=\"close.emit()\">\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"filter.filterId\" />\n <input type=\"hidden\" name=\"key\" [ngModel]=\"filter.key\" />\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"filter.fieldType\" />\n <div class=\"row\" >\n <h4 class=\"filter-name\">{{(filter.key | spaceCase)}} Filter</h4>\n <button class=\"cancel-button\" color=\"primary\" mat-icon-button (click)=\"close.emit();\" type=\"button\"\n matTooltip=\"Close\">\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\n </button>\n </div>\n <div class=\"row\">\n <mat-form-field class=\"my-filter\" >\n <mat-select placeholder=\"Select Filter Type\" name=\"filterType\" [(ngModel)]=\"currentFilterType\" >\n <mat-option *ngFor=\"let kvp of filterTypes[filter.fieldType] | keyvalue \" [value]=\"$any(kvp.value)[0]\">\n {{ kvp.key }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.String || filter.fieldType === FieldType.Array || filter.fieldType === FieldType.Link ||\n filter.fieldType === FieldType.Unknown || filter.fieldType === FieldType.PhoneNumber\" >\n <ng-container *ngTemplateOutlet=\"String\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Number || filter.fieldType === FieldType.Currency\">\n <tb-number-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" ></tb-number-filter>\n </ng-container>\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Boolean\">\n <ng-container *ngTemplateOutlet=\"Boolean\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Date\">\n <tb-date-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\"></tb-date-filter>\n </ng-container>\n <ng-container *ngSwitchCase='filter.fieldType === FieldType.Enum' >\n <ng-container *ngTemplateOutlet=\"Enum\"></ng-container>\n </ng-container>\n </ng-container>\n\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" *ngIf=\"currentFilterType === FilterType.IsNull\">\n <mat-radio-button [value]=\"true\">True</mat-radio-button>\n <mat-radio-button [value]=\"false\">False</mat-radio-button>\n </mat-radio-group>\n\n </div>\n <button mat-button (click)=\"state.addFilter(form.value)\" disableRipple [disabled]=\"form.value.filterValue==undefined || !form.value.filterType\">\n Apply\n </button>\n\n\n<ng-template #String>\n <mat-form-field class=\"my-filter\" *ngIf=\"currentFilterType !== FilterType.IsNull && currentFilterType !== FilterType.In\">\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\n </mat-form-field>\n <ng-container *ngIf=\"currentFilterType === FilterType.In\">\n <lib-in-filter [type]=\"FieldType.String\" name='filterValue' [(ngModel)]=\"filter.filterValue\" ></lib-in-filter>\n </ng-container>\n</ng-template>\n\n<ng-template #Boolean >\n <div class=\"switch\" [ngSwitch]=\"currentFilterType\">\n <div class=\"switch\" *ngSwitchCase=\"FilterType.BooleanEquals\">\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" >\n <mat-radio-button [value]=\"true\" preventEnter>True</mat-radio-button>\n <mat-radio-button [value]=\"false\" preventEnter>False</mat-radio-button>\n </mat-radio-group>\n </div>\n </div>\n</ng-template>\n\n <ng-template #Enum>\n <ng-container *ngIf='currentFilterType === FilterType.In' >\n <tb-in-list-filter [key]='filter.key' name='filterValue' [(ngModel)]='filter.filterValue' ></tb-in-list-filter>\n </ng-container>\n </ng-template>\n\n </form>\n</mat-card>\n", styles: [".filter-name{color:#6495ed;margin-right:30px;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.row{margin:0}.cancel-button{font-size:18px;font-weight:700}mat-radio-button{margin:5px}\n"], components: [{ type: i2$
|
|
2322
|
+
FilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: FilterComponent, selector: "tb-filter", inputs: { filter: "filter" }, outputs: { close: "close" }, ngImport: i0, template: "<mat-card class=\"mat-elevation-z5\" *ngIf=\"filter\">\n <form #form=\"ngForm\" (keydown.enter)=\"onEnter(form.value,$event)\" (keydown.escape)=\"close.emit()\">\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"filter.filterId\" />\n <input type=\"hidden\" name=\"key\" [ngModel]=\"filter.key\" />\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"filter.fieldType\" />\n <div class=\"row\" >\n <h4 class=\"filter-name\">{{(filter.key | spaceCase)}} Filter</h4>\n <button class=\"cancel-button\" color=\"primary\" mat-icon-button (click)=\"close.emit();\" type=\"button\"\n matTooltip=\"Close\">\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\n </button>\n </div>\n <div class=\"row\">\n <mat-form-field class=\"my-filter\" >\n <mat-select placeholder=\"Select Filter Type\" name=\"filterType\" [(ngModel)]=\"currentFilterType\" >\n <mat-option *ngFor=\"let kvp of filterTypes[filter.fieldType] | keyvalue \" [value]=\"$any(kvp.value)[0]\">\n {{ kvp.key }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.String || filter.fieldType === FieldType.Array || filter.fieldType === FieldType.Link ||\n filter.fieldType === FieldType.Unknown || filter.fieldType === FieldType.PhoneNumber\" >\n <ng-container *ngTemplateOutlet=\"String\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Number || filter.fieldType === FieldType.Currency\">\n <tb-number-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" ></tb-number-filter>\n </ng-container>\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Boolean\">\n <ng-container *ngTemplateOutlet=\"Boolean\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Date\">\n <tb-date-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\"></tb-date-filter>\n </ng-container>\n <ng-container *ngSwitchCase='filter.fieldType === FieldType.Enum' >\n <ng-container *ngTemplateOutlet=\"Enum\"></ng-container>\n </ng-container>\n </ng-container>\n\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" *ngIf=\"currentFilterType === FilterType.IsNull\">\n <mat-radio-button [value]=\"true\">True</mat-radio-button>\n <mat-radio-button [value]=\"false\">False</mat-radio-button>\n </mat-radio-group>\n\n </div>\n <button mat-button (click)=\"state.addFilter(form.value)\" disableRipple [disabled]=\"form.value.filterValue==undefined || !form.value.filterType\">\n Apply\n </button>\n\n\n<ng-template #String>\n <mat-form-field class=\"my-filter\" *ngIf=\"currentFilterType !== FilterType.IsNull && currentFilterType !== FilterType.In\">\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\n </mat-form-field>\n <ng-container *ngIf=\"currentFilterType === FilterType.In\">\n <lib-in-filter [type]=\"FieldType.String\" name='filterValue' [(ngModel)]=\"filter.filterValue\" ></lib-in-filter>\n </ng-container>\n</ng-template>\n\n<ng-template #Boolean >\n <div class=\"switch\" [ngSwitch]=\"currentFilterType\">\n <div class=\"switch\" *ngSwitchCase=\"FilterType.BooleanEquals\">\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" >\n <mat-radio-button [value]=\"true\" preventEnter>True</mat-radio-button>\n <mat-radio-button [value]=\"false\" preventEnter>False</mat-radio-button>\n </mat-radio-group>\n </div>\n </div>\n</ng-template>\n\n <ng-template #Enum>\n <ng-container *ngIf='currentFilterType === FilterType.In' >\n <tb-in-list-filter [key]='filter.key' name='filterValue' [(ngModel)]='filter.filterValue' ></tb-in-list-filter>\n </ng-container>\n </ng-template>\n\n </form>\n</mat-card>\n", styles: [".filter-name{color:#6495ed;margin-right:30px;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.row{margin:0}.cancel-button{font-size:18px;font-weight:700}mat-radio-button{margin:5px}\n"], components: [{ type: i2$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i3$1.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: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i6$1.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i6$2.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: NumberFilterComponent, selector: "tb-number-filter", inputs: ["CurrentFilterType", "info"] }, { type: DateFilterComponent, selector: "tb-date-filter", inputs: ["info", "CurrentFilterType"] }, { type: i7.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { type: InFilterComponent, selector: "lib-in-filter", inputs: ["type"] }, { type: InListFilterComponent, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: ["key"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { type: i4$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }], pipes: { "spaceCase": SpaceCasePipe, "keyvalue": i1.KeyValuePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2259
2323
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: FilterComponent, decorators: [{
|
|
2260
2324
|
type: Component,
|
|
2261
2325
|
args: [{ selector: 'tb-filter', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card class=\"mat-elevation-z5\" *ngIf=\"filter\">\n <form #form=\"ngForm\" (keydown.enter)=\"onEnter(form.value,$event)\" (keydown.escape)=\"close.emit()\">\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"filter.filterId\" />\n <input type=\"hidden\" name=\"key\" [ngModel]=\"filter.key\" />\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"filter.fieldType\" />\n <div class=\"row\" >\n <h4 class=\"filter-name\">{{(filter.key | spaceCase)}} Filter</h4>\n <button class=\"cancel-button\" color=\"primary\" mat-icon-button (click)=\"close.emit();\" type=\"button\"\n matTooltip=\"Close\">\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\n </button>\n </div>\n <div class=\"row\">\n <mat-form-field class=\"my-filter\" >\n <mat-select placeholder=\"Select Filter Type\" name=\"filterType\" [(ngModel)]=\"currentFilterType\" >\n <mat-option *ngFor=\"let kvp of filterTypes[filter.fieldType] | keyvalue \" [value]=\"$any(kvp.value)[0]\">\n {{ kvp.key }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.String || filter.fieldType === FieldType.Array || filter.fieldType === FieldType.Link ||\n filter.fieldType === FieldType.Unknown || filter.fieldType === FieldType.PhoneNumber\" >\n <ng-container *ngTemplateOutlet=\"String\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Number || filter.fieldType === FieldType.Currency\">\n <tb-number-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" ></tb-number-filter>\n </ng-container>\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Boolean\">\n <ng-container *ngTemplateOutlet=\"Boolean\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Date\">\n <tb-date-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\"></tb-date-filter>\n </ng-container>\n <ng-container *ngSwitchCase='filter.fieldType === FieldType.Enum' >\n <ng-container *ngTemplateOutlet=\"Enum\"></ng-container>\n </ng-container>\n </ng-container>\n\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" *ngIf=\"currentFilterType === FilterType.IsNull\">\n <mat-radio-button [value]=\"true\">True</mat-radio-button>\n <mat-radio-button [value]=\"false\">False</mat-radio-button>\n </mat-radio-group>\n\n </div>\n <button mat-button (click)=\"state.addFilter(form.value)\" disableRipple [disabled]=\"form.value.filterValue==undefined || !form.value.filterType\">\n Apply\n </button>\n\n\n<ng-template #String>\n <mat-form-field class=\"my-filter\" *ngIf=\"currentFilterType !== FilterType.IsNull && currentFilterType !== FilterType.In\">\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\n </mat-form-field>\n <ng-container *ngIf=\"currentFilterType === FilterType.In\">\n <lib-in-filter [type]=\"FieldType.String\" name='filterValue' [(ngModel)]=\"filter.filterValue\" ></lib-in-filter>\n </ng-container>\n</ng-template>\n\n<ng-template #Boolean >\n <div class=\"switch\" [ngSwitch]=\"currentFilterType\">\n <div class=\"switch\" *ngSwitchCase=\"FilterType.BooleanEquals\">\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" >\n <mat-radio-button [value]=\"true\" preventEnter>True</mat-radio-button>\n <mat-radio-button [value]=\"false\" preventEnter>False</mat-radio-button>\n </mat-radio-group>\n </div>\n </div>\n</ng-template>\n\n <ng-template #Enum>\n <ng-container *ngIf='currentFilterType === FilterType.In' >\n <tb-in-list-filter [key]='filter.key' name='filterValue' [(ngModel)]='filter.filterValue' ></tb-in-list-filter>\n </ng-container>\n </ng-template>\n\n </form>\n</mat-card>\n", styles: [".filter-name{color:#6495ed;margin-right:30px;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.row{margin:0}.cancel-button{font-size:18px;font-weight:700}mat-radio-button{margin:5px}\n"] }]
|
|
@@ -2495,6 +2559,389 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImpor
|
|
|
2495
2559
|
}]
|
|
2496
2560
|
}], ctorParameters: function () { return [{ type: TableStore }]; } });
|
|
2497
2561
|
|
|
2562
|
+
const inputs = [
|
|
2563
|
+
'predicate: tbCustomFilter',
|
|
2564
|
+
'filterId: filterId',
|
|
2565
|
+
];
|
|
2566
|
+
class TableCustomFilterDirective {
|
|
2567
|
+
constructor() {
|
|
2568
|
+
this.savable = false;
|
|
2569
|
+
this.used = false;
|
|
2570
|
+
}
|
|
2571
|
+
}
|
|
2572
|
+
TableCustomFilterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableCustomFilterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
2573
|
+
TableCustomFilterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.1", type: TableCustomFilterDirective, selector: " ", ngImport: i0 });
|
|
2574
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableCustomFilterDirective, decorators: [{
|
|
2575
|
+
type: Directive,
|
|
2576
|
+
args: [{
|
|
2577
|
+
selector: ' '
|
|
2578
|
+
}]
|
|
2579
|
+
}] });
|
|
2580
|
+
class TableFilterDirective extends ComponentStore {
|
|
2581
|
+
constructor(model) {
|
|
2582
|
+
super();
|
|
2583
|
+
this.model = model;
|
|
2584
|
+
this.filter$ = this.state$;
|
|
2585
|
+
this.active = true;
|
|
2586
|
+
this.filterValue = null;
|
|
2587
|
+
this.used = false;
|
|
2588
|
+
this.savable = false;
|
|
2589
|
+
this.ready = false;
|
|
2590
|
+
this._userActive = true;
|
|
2591
|
+
if (model) {
|
|
2592
|
+
this.effect(() => {
|
|
2593
|
+
return model.valueChanges.pipe(tap$1(val => {
|
|
2594
|
+
this.filterValue = val;
|
|
2595
|
+
this.update();
|
|
2596
|
+
}));
|
|
2597
|
+
});
|
|
2598
|
+
}
|
|
2599
|
+
}
|
|
2600
|
+
reset() {
|
|
2601
|
+
this.filterValue = undefined;
|
|
2602
|
+
}
|
|
2603
|
+
setFilterValue(value) {
|
|
2604
|
+
if (this.model) {
|
|
2605
|
+
setTimeout(() => {
|
|
2606
|
+
this.model.reset(value);
|
|
2607
|
+
}, 0);
|
|
2608
|
+
}
|
|
2609
|
+
else {
|
|
2610
|
+
this.filterValue = value;
|
|
2611
|
+
}
|
|
2612
|
+
}
|
|
2613
|
+
ngOnChanges(changes) {
|
|
2614
|
+
this.update();
|
|
2615
|
+
}
|
|
2616
|
+
ngOnInit() {
|
|
2617
|
+
if (!this.filterId) {
|
|
2618
|
+
this.filterId = v4();
|
|
2619
|
+
}
|
|
2620
|
+
else {
|
|
2621
|
+
this.savable = true;
|
|
2622
|
+
}
|
|
2623
|
+
this.ready = true;
|
|
2624
|
+
this.update();
|
|
2625
|
+
}
|
|
2626
|
+
setFilter(filter) {
|
|
2627
|
+
this.setState(filter);
|
|
2628
|
+
}
|
|
2629
|
+
update() {
|
|
2630
|
+
if (this.ready) {
|
|
2631
|
+
this.setFilter({
|
|
2632
|
+
filterId: this.filterId,
|
|
2633
|
+
key: this.key,
|
|
2634
|
+
filterType: this.filterType,
|
|
2635
|
+
fieldType: this.fieldType,
|
|
2636
|
+
filterValue: this.filterValue,
|
|
2637
|
+
active: this.active && this.filterValue !== undefined,
|
|
2638
|
+
_isExternalyManaged: true,
|
|
2639
|
+
});
|
|
2640
|
+
}
|
|
2641
|
+
}
|
|
2642
|
+
}
|
|
2643
|
+
TableFilterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableFilterDirective, deps: [{ token: i5.NgControl, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2644
|
+
TableFilterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.1", type: TableFilterDirective, selector: "[tbFilter]", inputs: { filterType: "filterType", key: "key", fieldType: "fieldType", filterId: "filterId", active: "active", filterValue: "filterValue" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
2645
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableFilterDirective, decorators: [{
|
|
2646
|
+
type: Directive,
|
|
2647
|
+
args: [{
|
|
2648
|
+
selector: "[tbFilter]"
|
|
2649
|
+
}]
|
|
2650
|
+
}], ctorParameters: function () { return [{ type: i5.NgControl, decorators: [{
|
|
2651
|
+
type: Optional
|
|
2652
|
+
}] }]; }, propDecorators: { filterType: [{
|
|
2653
|
+
type: Input
|
|
2654
|
+
}], key: [{
|
|
2655
|
+
type: Input
|
|
2656
|
+
}], fieldType: [{
|
|
2657
|
+
type: Input
|
|
2658
|
+
}], filterId: [{
|
|
2659
|
+
type: Input
|
|
2660
|
+
}], active: [{
|
|
2661
|
+
type: Input
|
|
2662
|
+
}], filterValue: [{
|
|
2663
|
+
type: Input
|
|
2664
|
+
}] } });
|
|
2665
|
+
class TableFilterStringContainsDirective extends TableFilterDirective {
|
|
2666
|
+
constructor(model) {
|
|
2667
|
+
super(model);
|
|
2668
|
+
this.filterType = FilterType.StringContains;
|
|
2669
|
+
this.fieldType = FieldType.String;
|
|
2670
|
+
this.effect(() => {
|
|
2671
|
+
return model.valueChanges.pipe(tap$1(val => {
|
|
2672
|
+
this.filterValue = val;
|
|
2673
|
+
this.update();
|
|
2674
|
+
}));
|
|
2675
|
+
});
|
|
2676
|
+
}
|
|
2677
|
+
reset() {
|
|
2678
|
+
if (this.model) {
|
|
2679
|
+
this.model.reset();
|
|
2680
|
+
}
|
|
2681
|
+
super.reset();
|
|
2682
|
+
}
|
|
2683
|
+
setFilter(filter) {
|
|
2684
|
+
filter.active = filter.filterValue && this._userActive;
|
|
2685
|
+
super.setFilter(filter);
|
|
2686
|
+
}
|
|
2687
|
+
ngOnChanges(changes) {
|
|
2688
|
+
if (changes['active']) {
|
|
2689
|
+
this._userActive = changes['active'].currentValue;
|
|
2690
|
+
}
|
|
2691
|
+
super.ngOnChanges(changes);
|
|
2692
|
+
}
|
|
2693
|
+
}
|
|
2694
|
+
TableFilterStringContainsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableFilterStringContainsDirective, deps: [{ token: i5.NgControl, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2695
|
+
TableFilterStringContainsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.1", type: TableFilterStringContainsDirective, selector: "[tbFilterStringContains]", inputs: { key: ["tbFilterStringContains", "key"], filterValue: "filterValue", filterId: "filterId", active: "active" }, providers: [{ provide: TableFilterDirective, useExisting: TableFilterStringContainsDirective }], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
2696
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableFilterStringContainsDirective, decorators: [{
|
|
2697
|
+
type: Directive,
|
|
2698
|
+
args: [{
|
|
2699
|
+
selector: '[tbFilterStringContains]',
|
|
2700
|
+
providers: [{ provide: TableFilterDirective, useExisting: TableFilterStringContainsDirective }],
|
|
2701
|
+
inputs: [
|
|
2702
|
+
'key:tbFilterStringContains',
|
|
2703
|
+
'filterValue:filterValue',
|
|
2704
|
+
'filterId: filterId',
|
|
2705
|
+
'active: active',
|
|
2706
|
+
]
|
|
2707
|
+
}]
|
|
2708
|
+
}], ctorParameters: function () { return [{ type: i5.NgControl, decorators: [{
|
|
2709
|
+
type: Optional
|
|
2710
|
+
}] }]; } });
|
|
2711
|
+
class TableCustomFilterDirectiveBase extends TableCustomFilterDirective {
|
|
2712
|
+
constructor() {
|
|
2713
|
+
super(...arguments);
|
|
2714
|
+
this._active = false;
|
|
2715
|
+
this.ready = false;
|
|
2716
|
+
}
|
|
2717
|
+
set predicate(val) {
|
|
2718
|
+
this._predicate = val;
|
|
2719
|
+
this.update({ predicate: val });
|
|
2720
|
+
}
|
|
2721
|
+
update(val) {
|
|
2722
|
+
if (this.ready) {
|
|
2723
|
+
this.filter = { ...this.filter, ...val };
|
|
2724
|
+
this.filter$.next(this.filter);
|
|
2725
|
+
}
|
|
2726
|
+
}
|
|
2727
|
+
set active(val) {
|
|
2728
|
+
if (this._active !== val) {
|
|
2729
|
+
this._active = val;
|
|
2730
|
+
this.update({ active: val });
|
|
2731
|
+
}
|
|
2732
|
+
}
|
|
2733
|
+
get active() {
|
|
2734
|
+
return this._active;
|
|
2735
|
+
}
|
|
2736
|
+
ngOnInit() {
|
|
2737
|
+
if (!this.filterId) {
|
|
2738
|
+
this.filterId = v4();
|
|
2739
|
+
}
|
|
2740
|
+
else {
|
|
2741
|
+
this.savable = true;
|
|
2742
|
+
}
|
|
2743
|
+
this.filter = {
|
|
2744
|
+
filterType: FilterType.Custom,
|
|
2745
|
+
filterId: this.filterId,
|
|
2746
|
+
active: this._active,
|
|
2747
|
+
predicate: this._predicate,
|
|
2748
|
+
};
|
|
2749
|
+
this.ready = true;
|
|
2750
|
+
this.filter$ = new BehaviorSubject(this.filter);
|
|
2751
|
+
}
|
|
2752
|
+
}
|
|
2753
|
+
TableCustomFilterDirectiveBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableCustomFilterDirectiveBase, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
2754
|
+
TableCustomFilterDirectiveBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.1", type: TableCustomFilterDirectiveBase, selector: "[tbCustomFilter]", inputs: { filterId: "filterId", predicate: ["tbCustomFilter", "predicate"], active: "active" }, usesInheritance: true, ngImport: i0 });
|
|
2755
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableCustomFilterDirectiveBase, decorators: [{
|
|
2756
|
+
type: Directive,
|
|
2757
|
+
args: [{
|
|
2758
|
+
selector: "[tbCustomFilter]",
|
|
2759
|
+
}]
|
|
2760
|
+
}], propDecorators: { filterId: [{
|
|
2761
|
+
type: Input
|
|
2762
|
+
}], predicate: [{
|
|
2763
|
+
type: Input,
|
|
2764
|
+
args: ['tbCustomFilter']
|
|
2765
|
+
}], active: [{
|
|
2766
|
+
type: Input
|
|
2767
|
+
}] } });
|
|
2768
|
+
class TbSelectedFilterDirective extends TableCustomFilterDirectiveBase {
|
|
2769
|
+
constructor(change, isActive) {
|
|
2770
|
+
super();
|
|
2771
|
+
this.change = change;
|
|
2772
|
+
this.isActive = isActive;
|
|
2773
|
+
this.destroySubject$ = new ReplaySubject(1);
|
|
2774
|
+
}
|
|
2775
|
+
reset() {
|
|
2776
|
+
this.active = false;
|
|
2777
|
+
}
|
|
2778
|
+
ngOnDestroy() {
|
|
2779
|
+
this.destroySubject$.next();
|
|
2780
|
+
}
|
|
2781
|
+
ngOnInit() {
|
|
2782
|
+
this._active = this.isActive();
|
|
2783
|
+
super.ngOnInit();
|
|
2784
|
+
this.change.pipe(takeUntil$1(this.destroySubject$)).subscribe(() => {
|
|
2785
|
+
this.active = this.isActive();
|
|
2786
|
+
});
|
|
2787
|
+
}
|
|
2788
|
+
}
|
|
2789
|
+
TbSelectedFilterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TbSelectedFilterDirective, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
|
|
2790
|
+
TbSelectedFilterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.1", type: TbSelectedFilterDirective, usesInheritance: true, ngImport: i0 });
|
|
2791
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TbSelectedFilterDirective, decorators: [{
|
|
2792
|
+
type: Directive
|
|
2793
|
+
}], ctorParameters: function () { return [{ type: i2$2.Observable }, { type: undefined }]; } });
|
|
2794
|
+
// Checkbox
|
|
2795
|
+
class MatCheckboxTbFilterDirective extends TbSelectedFilterDirective {
|
|
2796
|
+
constructor(matCheckbox) {
|
|
2797
|
+
super(matCheckbox.change, () => matCheckbox.checked);
|
|
2798
|
+
this.matCheckbox = matCheckbox;
|
|
2799
|
+
}
|
|
2800
|
+
set active(val) {
|
|
2801
|
+
this.matCheckbox.checked = val;
|
|
2802
|
+
super.active = val;
|
|
2803
|
+
}
|
|
2804
|
+
}
|
|
2805
|
+
MatCheckboxTbFilterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: MatCheckboxTbFilterDirective, deps: [{ token: i3.MatCheckbox }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2806
|
+
MatCheckboxTbFilterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.1", type: MatCheckboxTbFilterDirective, selector: "mat-checkbox[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatCheckboxTbFilterDirective }], usesInheritance: true, ngImport: i0 });
|
|
2807
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: MatCheckboxTbFilterDirective, decorators: [{
|
|
2808
|
+
type: Directive,
|
|
2809
|
+
args: [{
|
|
2810
|
+
selector: 'mat-checkbox[tbCustomFilter]',
|
|
2811
|
+
inputs: [
|
|
2812
|
+
...inputs
|
|
2813
|
+
],
|
|
2814
|
+
providers: [{ provide: TableCustomFilterDirective, useExisting: MatCheckboxTbFilterDirective }]
|
|
2815
|
+
}]
|
|
2816
|
+
}], ctorParameters: function () { return [{ type: i3.MatCheckbox }]; } });
|
|
2817
|
+
class MatSlideToggleTbFilterDirective extends TbSelectedFilterDirective {
|
|
2818
|
+
constructor(matSlideToggle) {
|
|
2819
|
+
super(matSlideToggle.change, () => matSlideToggle.checked);
|
|
2820
|
+
this.matSlideToggle = matSlideToggle;
|
|
2821
|
+
}
|
|
2822
|
+
set active(val) {
|
|
2823
|
+
this.matSlideToggle.checked = val;
|
|
2824
|
+
super.active = val;
|
|
2825
|
+
}
|
|
2826
|
+
ngOnInit() {
|
|
2827
|
+
super.ngOnInit();
|
|
2828
|
+
}
|
|
2829
|
+
}
|
|
2830
|
+
MatSlideToggleTbFilterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: MatSlideToggleTbFilterDirective, deps: [{ token: i4$4.MatSlideToggle }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2831
|
+
MatSlideToggleTbFilterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.1", type: MatSlideToggleTbFilterDirective, selector: "mat-slide-toggle[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatSlideToggleTbFilterDirective }], usesInheritance: true, ngImport: i0 });
|
|
2832
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: MatSlideToggleTbFilterDirective, decorators: [{
|
|
2833
|
+
type: Directive,
|
|
2834
|
+
args: [{
|
|
2835
|
+
selector: 'mat-slide-toggle[tbCustomFilter]',
|
|
2836
|
+
inputs: [
|
|
2837
|
+
...inputs
|
|
2838
|
+
],
|
|
2839
|
+
providers: [{ provide: TableCustomFilterDirective, useExisting: MatSlideToggleTbFilterDirective }]
|
|
2840
|
+
}]
|
|
2841
|
+
}], ctorParameters: function () { return [{ type: i4$4.MatSlideToggle }]; } });
|
|
2842
|
+
// Radio button
|
|
2843
|
+
class MatRadioButtonTbFilterDirective extends TbSelectedFilterDirective {
|
|
2844
|
+
constructor(matRadioButton) {
|
|
2845
|
+
super(matRadioButton.change, () => matRadioButton.checked);
|
|
2846
|
+
this.matRadioButton = matRadioButton;
|
|
2847
|
+
}
|
|
2848
|
+
set active(val) {
|
|
2849
|
+
this.matRadioButton.checked = val;
|
|
2850
|
+
super.active = val;
|
|
2851
|
+
}
|
|
2852
|
+
ngOnInit() {
|
|
2853
|
+
super.ngOnInit();
|
|
2854
|
+
}
|
|
2855
|
+
}
|
|
2856
|
+
MatRadioButtonTbFilterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: MatRadioButtonTbFilterDirective, deps: [{ token: i7.MatRadioButton }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2857
|
+
MatRadioButtonTbFilterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.1", type: MatRadioButtonTbFilterDirective, selector: "mat-radio-button[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"] }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatRadioButtonTbFilterDirective }], usesInheritance: true, ngImport: i0 });
|
|
2858
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: MatRadioButtonTbFilterDirective, decorators: [{
|
|
2859
|
+
type: Directive,
|
|
2860
|
+
args: [{
|
|
2861
|
+
selector: 'mat-radio-button[tbCustomFilter]',
|
|
2862
|
+
inputs: ['predicate: tbCustomFilter'],
|
|
2863
|
+
providers: [{ provide: TableCustomFilterDirective, useExisting: MatRadioButtonTbFilterDirective }]
|
|
2864
|
+
}]
|
|
2865
|
+
}], ctorParameters: function () { return [{ type: i7.MatRadioButton }]; } });
|
|
2866
|
+
// Option (select)
|
|
2867
|
+
class MatOptionTbFilterDirective extends TbSelectedFilterDirective {
|
|
2868
|
+
constructor(matOption) {
|
|
2869
|
+
super(matOption.onSelectionChange.pipe(tap$1(d => {
|
|
2870
|
+
if (!matOption.value) {
|
|
2871
|
+
matOption.value = v4();
|
|
2872
|
+
}
|
|
2873
|
+
})), () => matOption.selected);
|
|
2874
|
+
this.matOption = matOption;
|
|
2875
|
+
}
|
|
2876
|
+
set active(val) {
|
|
2877
|
+
if (val) {
|
|
2878
|
+
this.matOption.select();
|
|
2879
|
+
}
|
|
2880
|
+
else {
|
|
2881
|
+
this.matOption.deselect();
|
|
2882
|
+
}
|
|
2883
|
+
super.active = val;
|
|
2884
|
+
}
|
|
2885
|
+
ngOnInit() {
|
|
2886
|
+
super.ngOnInit();
|
|
2887
|
+
}
|
|
2888
|
+
}
|
|
2889
|
+
MatOptionTbFilterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: MatOptionTbFilterDirective, deps: [{ token: i6$2.MatOption }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2890
|
+
MatOptionTbFilterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.1", type: MatOptionTbFilterDirective, selector: "mat-option[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatOptionTbFilterDirective }], usesInheritance: true, ngImport: i0 });
|
|
2891
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: MatOptionTbFilterDirective, decorators: [{
|
|
2892
|
+
type: Directive,
|
|
2893
|
+
args: [{
|
|
2894
|
+
selector: 'mat-option[tbCustomFilter]',
|
|
2895
|
+
inputs: [
|
|
2896
|
+
...inputs
|
|
2897
|
+
],
|
|
2898
|
+
providers: [{ provide: TableCustomFilterDirective, useExisting: MatOptionTbFilterDirective }]
|
|
2899
|
+
}]
|
|
2900
|
+
}], ctorParameters: function () { return [{ type: i6$2.MatOption }]; } });
|
|
2901
|
+
// Button toggle
|
|
2902
|
+
class MatButtonToggleFilterDirective extends TbSelectedFilterDirective {
|
|
2903
|
+
constructor(matButtonToggle) {
|
|
2904
|
+
super(matButtonToggle.change, () => matButtonToggle.checked);
|
|
2905
|
+
this.matButtonToggle = matButtonToggle;
|
|
2906
|
+
}
|
|
2907
|
+
set active(val) {
|
|
2908
|
+
this.matButtonToggle.checked = val;
|
|
2909
|
+
super.active = val;
|
|
2910
|
+
}
|
|
2911
|
+
ngOnInit() {
|
|
2912
|
+
super.ngOnInit();
|
|
2913
|
+
}
|
|
2914
|
+
}
|
|
2915
|
+
MatButtonToggleFilterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: MatButtonToggleFilterDirective, deps: [{ token: i7$2.MatButtonToggle }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2916
|
+
MatButtonToggleFilterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.1", type: MatButtonToggleFilterDirective, selector: "mat-button-toggle[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatButtonToggleFilterDirective }], usesInheritance: true, ngImport: i0 });
|
|
2917
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: MatButtonToggleFilterDirective, decorators: [{
|
|
2918
|
+
type: Directive,
|
|
2919
|
+
args: [{
|
|
2920
|
+
selector: 'mat-button-toggle[tbCustomFilter]',
|
|
2921
|
+
inputs: [
|
|
2922
|
+
...inputs
|
|
2923
|
+
],
|
|
2924
|
+
providers: [{ provide: TableCustomFilterDirective, useExisting: MatButtonToggleFilterDirective }]
|
|
2925
|
+
}]
|
|
2926
|
+
}], ctorParameters: function () { return [{ type: i7$2.MatButtonToggle }]; } });
|
|
2927
|
+
|
|
2928
|
+
class TableWrapperDirective {
|
|
2929
|
+
}
|
|
2930
|
+
TableWrapperDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableWrapperDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
2931
|
+
TableWrapperDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.1", type: TableWrapperDirective, selector: "[tbWrapper]", queries: [{ propertyName: "customFilters", predicate: TableCustomFilterDirective, descendants: true }, { propertyName: "filters", predicate: TableFilterDirective, descendants: true }], ngImport: i0 });
|
|
2932
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableWrapperDirective, decorators: [{
|
|
2933
|
+
type: Directive,
|
|
2934
|
+
args: [{
|
|
2935
|
+
selector: '[tbWrapper]'
|
|
2936
|
+
}]
|
|
2937
|
+
}], propDecorators: { customFilters: [{
|
|
2938
|
+
type: ContentChildren,
|
|
2939
|
+
args: [TableCustomFilterDirective, { descendants: true }]
|
|
2940
|
+
}], filters: [{
|
|
2941
|
+
type: ContentChildren,
|
|
2942
|
+
args: [TableFilterDirective, { descendants: true }]
|
|
2943
|
+
}] } });
|
|
2944
|
+
|
|
2498
2945
|
class DataFilter {
|
|
2499
2946
|
constructor(filters$) {
|
|
2500
2947
|
this.filters$ = filters$;
|
|
@@ -2508,7 +2955,7 @@ class DataFilter {
|
|
|
2508
2955
|
appendFilters(filters$) {
|
|
2509
2956
|
return new DataFilter(combineArrays([
|
|
2510
2957
|
this.filters$ ?? of([]),
|
|
2511
|
-
filters$.pipe(map(fltrs => fltrs.map(filter => createFilterFunc(filter))))
|
|
2958
|
+
filters$.pipe(map(fltrs => fltrs.filter(f => (isFilterInfo(f) && (f.active || f.active === undefined)) || f.active).map(filter => createFilterFunc(filter))))
|
|
2512
2959
|
]));
|
|
2513
2960
|
}
|
|
2514
2961
|
}
|
|
@@ -2701,7 +3148,9 @@ class FilterChipsComponent {
|
|
|
2701
3148
|
constructor(tableState, filterStore) {
|
|
2702
3149
|
this.tableState = tableState;
|
|
2703
3150
|
this.filterStore = filterStore;
|
|
2704
|
-
this.filters$ = this.tableState.filters$.pipe(map(filters => Object.values(filters)
|
|
3151
|
+
this.filters$ = this.tableState.filters$.pipe(map(filters => Object.values(filters)
|
|
3152
|
+
.filter(isFilterInfo)
|
|
3153
|
+
.filter(f => !f._isExternalyManaged)));
|
|
2705
3154
|
this.currentFilters$ = this.filterStore.currentFilters$;
|
|
2706
3155
|
}
|
|
2707
3156
|
deleteByIndex(index) {
|
|
@@ -2715,7 +3164,7 @@ class FilterChipsComponent {
|
|
|
2715
3164
|
}
|
|
2716
3165
|
}
|
|
2717
3166
|
FilterChipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: FilterChipsComponent, deps: [{ token: TableStore }, { token: WrapperFilterStore }], target: i0.ɵɵFactoryTarget.Component });
|
|
2718
|
-
FilterChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", 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\" *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: FilterComponent, selector: "tb-filter", inputs: ["filter"], outputs: ["close"] }, { type: i6$
|
|
3167
|
+
FilterChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", 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\" *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$1.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: FilterComponent, selector: "tb-filter", inputs: ["filter"], outputs: ["close"] }, { type: i6$3.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$1.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6$3.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$3.MatChipRemove, selector: "[matChipRemove]" }], pipes: { "async": i1.AsyncPipe, "keyDisplay": KeyDisplayPipe, "formatFilterType": FormatFilterTypePipe, "formatFilterValue": FormatFilterValuePipe } });
|
|
2719
3168
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: FilterChipsComponent, decorators: [{
|
|
2720
3169
|
type: Component,
|
|
2721
3170
|
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\" *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"] }]
|
|
@@ -2806,7 +3255,7 @@ class SortMenuComponent {
|
|
|
2806
3255
|
}
|
|
2807
3256
|
}
|
|
2808
3257
|
SortMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: SortMenuComponent, deps: [{ token: TableStore }, { token: SortMenuComponentStore }], target: i0.ɵɵFactoryTarget.Component });
|
|
2809
|
-
SortMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: SortMenuComponent, selector: "tb-sort-menu", providers: [SortMenuComponentStore], ngImport: i0, template: "<ng-container *ngrxLet=\"dirty$ as dirty\">\n<ng-container *ngIf=\"sorted$ | async as sorted\">\n <ng-container *ngIf=\"notSorted$ | async as notSorted\">\n <!-- Menu Trigger -->\n <span matTooltip=\"Sort\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon color=\"primary\">swap_vert</mat-icon>\n </button>\n </span>\n\n <!-- Menu -->\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\" (closed)=\"reset()\">\n <div mat-menu-item class=\"menu-button\">\n <div class=\"close-button-wrapper\">\n <span matTooltip=\"Close\">\n <mat-icon>close</mat-icon>\n </span>\n <span *ngIf=\"dirty\" matTooltip=\"Undo\" stop-propagation (click)=\"reset()\">\n <mat-icon>undo</mat-icon>\n </span>\n </div>\n </div>\n\n <!-- Apply Button -->\n <div class=\"apply-button-wrapper\">\n <button mat-button color=\"primary\" (click)=\"apply(null)\"\n stop-propagation [class.apply-border]=\"dirty\"\n [disabled]=\"!dirty\">\n Apply\n <ng-container *ngIf=\"dirty\">Unsaved Changes</ng-container>\n </button>\n </div>\n\n <!-- Default Sorting Text -->\n <div *ngIf=\"!sorted.length\" class=\"tip\" >\n Sorting List\n </div>\n\n <!-- Sorted Menu List -->\n <div class=\"list\"\n cdkDropList\n #sortedGroup=\"cdkDropList\"\n [cdkDropListConnectedTo]=\"[notSortedGroup]\"\n [cdkDropListData]=\"sorted\"\n (cdkDropListDropped)=\"dropIntoSorted($event)\">\n\n <!-- Menu Item Wrapper -->\n <ng-container *ngFor=\"let sort of sorted;let i=index\">\n\n <!-- Menu Item Headers -->\n <span *ngIf=\"sorted.length > 1 && i === 0 \" class=\"description\" class=\"sort-header\">First By</span>\n <span *ngIf=\"sorted.length > 1 && i !== 0 \" class=\"description\" class=\"sort-header\">Then By</span>\n\n <!-- Menu Item -->\n <div mat-menu-item cdkDrag class=\"menu-item\">\n <div class=\"sort-item\">\n <span class=\"sorted-name\">\n {{sort.displayName || (sort.active | spaceCase)}}\n <span class=\"direction-text\">{{sort.direction}}</span>\n </span>\n\n <!-- Sort Direction Buttons -->\n <div class=\"up-down-buttons-wrapper\">\n <button class=\"up-down-button up-button\" stop-propagation\n (click)=\"setDirection({active:sort.active,direction:SortDirection.asc,displayName:sort.displayName})\">\n <mat-icon [ngClass]=\"sort.direction !== SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\n arrow_upward\n </mat-icon>\n </button>\n\n <button class=\"up-down-button\" stop-propagation\n (click)=\"setDirection({active:sort.active,direction:SortDirection.desc,displayName:sort.displayName})\">\n <mat-icon [ngClass]=\"sort.direction === SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\n arrow_downward\n </mat-icon>\n </button>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- Default Not Sorted Text -->\n <div *ngIf=\"!notSorted.length\" class=\"tip\" >\n Not Sorted List\n </div>\n <!-- Not Sorted Menu List -->\n <div class=\"list\"\n cdkDropList\n #notSortedGroup=\"cdkDropList\"\n [cdkDropListConnectedTo]=\"[sortedGroup]\"\n [cdkDropListData]=\"notSorted\"\n (cdkDropListDropped)=\"dropIntoNotSorted($event)\">\n <div mat-menu-item *ngFor=\"let sort of notSorted\" class=\"menu-item\" cdkDrag>\n <span class=\"not-sorted-name\">{{sort.displayName || (sort.active | spaceCase)}}</span>\n </div>\n </div>\n </mat-menu>\n </ng-container>\n</ng-container>\n</ng-container>\n", styles: [".cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.list{padding:5px 2px;border-bottom:solid 1px #ccc;color:#000000de;background:white}.light-arrow{color:#93b1ea78}.dark-arrow{color:#224e9c}.up-down-button{background-color:#fff;border-radius:30%;border-color:#0ff;padding:1px 1px 0;border-width:.5px;cursor:pointer}.mat-icon.up-down-icon{margin-right:0;font-size:20px;font-weight:lighter}.sort-item{display:flex;align-items:center;justify-content:space-between}.up-down-buttons-wrapper{margin-left:2rem}.up-button{margin-right:.3rem}.mat-menu-item.menu-item,.mat-menu-item.menu-button{padding:0 3px;font-size:17px;font-weight:700;line-height:25px;height:30px}.mat-menu-item.menu-item{cursor:move}.sorted-name{color:#224e9c}.not-sorted-name{color:#93b1ea}.apply-border{border:#224e9c solid .5px}.apply-border:hover{background-color:#faebd7}.apply-button-wrapper{display:grid;justify-content:center}.sort-header{font-size:10px;font-style:italic}.tip{padding:0 3px;color:#d3d3d3}.direction-text{font-size:small;font-weight:400}.close-button-wrapper{display:flex;flex-direction:row-reverse}\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: i4$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i7$1.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: StopPropagationDirective, selector: "[stop-propagation]" }, { type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "async": i1.AsyncPipe, "spaceCase": SpaceCasePipe } });
|
|
3258
|
+
SortMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: SortMenuComponent, selector: "tb-sort-menu", providers: [SortMenuComponentStore], ngImport: i0, template: "<ng-container *ngrxLet=\"dirty$ as dirty\">\n<ng-container *ngIf=\"sorted$ | async as sorted\">\n <ng-container *ngIf=\"notSorted$ | async as notSorted\">\n <!-- Menu Trigger -->\n <span matTooltip=\"Sort\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon color=\"primary\">swap_vert</mat-icon>\n </button>\n </span>\n\n <!-- Menu -->\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\" (closed)=\"reset()\">\n <div mat-menu-item class=\"menu-button\">\n <div class=\"close-button-wrapper\">\n <span matTooltip=\"Close\">\n <mat-icon>close</mat-icon>\n </span>\n <span *ngIf=\"dirty\" matTooltip=\"Undo\" stop-propagation (click)=\"reset()\">\n <mat-icon>undo</mat-icon>\n </span>\n </div>\n </div>\n\n <!-- Apply Button -->\n <div class=\"apply-button-wrapper\">\n <button mat-button color=\"primary\" (click)=\"apply(null)\"\n stop-propagation [class.apply-border]=\"dirty\"\n [disabled]=\"!dirty\">\n Apply\n <ng-container *ngIf=\"dirty\">Unsaved Changes</ng-container>\n </button>\n </div>\n\n <!-- Default Sorting Text -->\n <div *ngIf=\"!sorted.length\" class=\"tip\" >\n Sorting List\n </div>\n\n <!-- Sorted Menu List -->\n <div class=\"list\"\n cdkDropList\n #sortedGroup=\"cdkDropList\"\n [cdkDropListConnectedTo]=\"[notSortedGroup]\"\n [cdkDropListData]=\"sorted\"\n (cdkDropListDropped)=\"dropIntoSorted($event)\">\n\n <!-- Menu Item Wrapper -->\n <ng-container *ngFor=\"let sort of sorted;let i=index\">\n\n <!-- Menu Item Headers -->\n <span *ngIf=\"sorted.length > 1 && i === 0 \" class=\"description\" class=\"sort-header\">First By</span>\n <span *ngIf=\"sorted.length > 1 && i !== 0 \" class=\"description\" class=\"sort-header\">Then By</span>\n\n <!-- Menu Item -->\n <div mat-menu-item cdkDrag class=\"menu-item\">\n <div class=\"sort-item\">\n <span class=\"sorted-name\">\n {{sort.displayName || (sort.active | spaceCase)}}\n <span class=\"direction-text\">{{sort.direction}}</span>\n </span>\n\n <!-- Sort Direction Buttons -->\n <div class=\"up-down-buttons-wrapper\">\n <button class=\"up-down-button up-button\" stop-propagation\n (click)=\"setDirection({active:sort.active,direction:SortDirection.asc,displayName:sort.displayName})\">\n <mat-icon [ngClass]=\"sort.direction !== SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\n arrow_upward\n </mat-icon>\n </button>\n\n <button class=\"up-down-button\" stop-propagation\n (click)=\"setDirection({active:sort.active,direction:SortDirection.desc,displayName:sort.displayName})\">\n <mat-icon [ngClass]=\"sort.direction === SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\n arrow_downward\n </mat-icon>\n </button>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- Default Not Sorted Text -->\n <div *ngIf=\"!notSorted.length\" class=\"tip\" >\n Not Sorted List\n </div>\n <!-- Not Sorted Menu List -->\n <div class=\"list\"\n cdkDropList\n #notSortedGroup=\"cdkDropList\"\n [cdkDropListConnectedTo]=\"[sortedGroup]\"\n [cdkDropListData]=\"notSorted\"\n (cdkDropListDropped)=\"dropIntoNotSorted($event)\">\n <div mat-menu-item *ngFor=\"let sort of notSorted\" class=\"menu-item\" cdkDrag>\n <span class=\"not-sorted-name\">{{sort.displayName || (sort.active | spaceCase)}}</span>\n </div>\n </div>\n </mat-menu>\n </ng-container>\n</ng-container>\n</ng-container>\n", styles: [".cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.list{padding:5px 2px;border-bottom:solid 1px #ccc;color:#000000de;background:white}.light-arrow{color:#93b1ea78}.dark-arrow{color:#224e9c}.up-down-button{background-color:#fff;border-radius:30%;border-color:#0ff;padding:1px 1px 0;border-width:.5px;cursor:pointer}.mat-icon.up-down-icon{margin-right:0;font-size:20px;font-weight:lighter}.sort-item{display:flex;align-items:center;justify-content:space-between}.up-down-buttons-wrapper{margin-left:2rem}.up-button{margin-right:.3rem}.mat-menu-item.menu-item,.mat-menu-item.menu-button{padding:0 3px;font-size:17px;font-weight:700;line-height:25px;height:30px}.mat-menu-item.menu-item{cursor:move}.sorted-name{color:#224e9c}.not-sorted-name{color:#93b1ea}.apply-border{border:#224e9c solid .5px}.apply-border:hover{background-color:#faebd7}.apply-button-wrapper{display:grid;justify-content:center}.sort-header{font-size:10px;font-style:italic}.tip{padding:0 3px;color:#d3d3d3}.direction-text{font-size:small;font-weight:400}.close-button-wrapper{display:flex;flex-direction:row-reverse}\n"], components: [{ type: i3$1.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: i4$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i7$1.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: StopPropagationDirective, selector: "[stop-propagation]" }, { type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "async": i1.AsyncPipe, "spaceCase": SpaceCasePipe } });
|
|
2810
3259
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: SortMenuComponent, decorators: [{
|
|
2811
3260
|
type: Component,
|
|
2812
3261
|
args: [{ selector: 'tb-sort-menu', providers: [SortMenuComponentStore], template: "<ng-container *ngrxLet=\"dirty$ as dirty\">\n<ng-container *ngIf=\"sorted$ | async as sorted\">\n <ng-container *ngIf=\"notSorted$ | async as notSorted\">\n <!-- Menu Trigger -->\n <span matTooltip=\"Sort\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon color=\"primary\">swap_vert</mat-icon>\n </button>\n </span>\n\n <!-- Menu -->\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\" (closed)=\"reset()\">\n <div mat-menu-item class=\"menu-button\">\n <div class=\"close-button-wrapper\">\n <span matTooltip=\"Close\">\n <mat-icon>close</mat-icon>\n </span>\n <span *ngIf=\"dirty\" matTooltip=\"Undo\" stop-propagation (click)=\"reset()\">\n <mat-icon>undo</mat-icon>\n </span>\n </div>\n </div>\n\n <!-- Apply Button -->\n <div class=\"apply-button-wrapper\">\n <button mat-button color=\"primary\" (click)=\"apply(null)\"\n stop-propagation [class.apply-border]=\"dirty\"\n [disabled]=\"!dirty\">\n Apply\n <ng-container *ngIf=\"dirty\">Unsaved Changes</ng-container>\n </button>\n </div>\n\n <!-- Default Sorting Text -->\n <div *ngIf=\"!sorted.length\" class=\"tip\" >\n Sorting List\n </div>\n\n <!-- Sorted Menu List -->\n <div class=\"list\"\n cdkDropList\n #sortedGroup=\"cdkDropList\"\n [cdkDropListConnectedTo]=\"[notSortedGroup]\"\n [cdkDropListData]=\"sorted\"\n (cdkDropListDropped)=\"dropIntoSorted($event)\">\n\n <!-- Menu Item Wrapper -->\n <ng-container *ngFor=\"let sort of sorted;let i=index\">\n\n <!-- Menu Item Headers -->\n <span *ngIf=\"sorted.length > 1 && i === 0 \" class=\"description\" class=\"sort-header\">First By</span>\n <span *ngIf=\"sorted.length > 1 && i !== 0 \" class=\"description\" class=\"sort-header\">Then By</span>\n\n <!-- Menu Item -->\n <div mat-menu-item cdkDrag class=\"menu-item\">\n <div class=\"sort-item\">\n <span class=\"sorted-name\">\n {{sort.displayName || (sort.active | spaceCase)}}\n <span class=\"direction-text\">{{sort.direction}}</span>\n </span>\n\n <!-- Sort Direction Buttons -->\n <div class=\"up-down-buttons-wrapper\">\n <button class=\"up-down-button up-button\" stop-propagation\n (click)=\"setDirection({active:sort.active,direction:SortDirection.asc,displayName:sort.displayName})\">\n <mat-icon [ngClass]=\"sort.direction !== SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\n arrow_upward\n </mat-icon>\n </button>\n\n <button class=\"up-down-button\" stop-propagation\n (click)=\"setDirection({active:sort.active,direction:SortDirection.desc,displayName:sort.displayName})\">\n <mat-icon [ngClass]=\"sort.direction === SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\n arrow_downward\n </mat-icon>\n </button>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- Default Not Sorted Text -->\n <div *ngIf=\"!notSorted.length\" class=\"tip\" >\n Not Sorted List\n </div>\n <!-- Not Sorted Menu List -->\n <div class=\"list\"\n cdkDropList\n #notSortedGroup=\"cdkDropList\"\n [cdkDropListConnectedTo]=\"[sortedGroup]\"\n [cdkDropListData]=\"notSorted\"\n (cdkDropListDropped)=\"dropIntoNotSorted($event)\">\n <div mat-menu-item *ngFor=\"let sort of notSorted\" class=\"menu-item\" cdkDrag>\n <span class=\"not-sorted-name\">{{sort.displayName || (sort.active | spaceCase)}}</span>\n </div>\n </div>\n </mat-menu>\n </ng-container>\n</ng-container>\n</ng-container>\n", styles: [".cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.list{padding:5px 2px;border-bottom:solid 1px #ccc;color:#000000de;background:white}.light-arrow{color:#93b1ea78}.dark-arrow{color:#224e9c}.up-down-button{background-color:#fff;border-radius:30%;border-color:#0ff;padding:1px 1px 0;border-width:.5px;cursor:pointer}.mat-icon.up-down-icon{margin-right:0;font-size:20px;font-weight:lighter}.sort-item{display:flex;align-items:center;justify-content:space-between}.up-down-buttons-wrapper{margin-left:2rem}.up-button{margin-right:.3rem}.mat-menu-item.menu-item,.mat-menu-item.menu-button{padding:0 3px;font-size:17px;font-weight:700;line-height:25px;height:30px}.mat-menu-item.menu-item{cursor:move}.sorted-name{color:#224e9c}.not-sorted-name{color:#93b1ea}.apply-border{border:#224e9c solid .5px}.apply-border:hover{background-color:#faebd7}.apply-button-wrapper{display:grid;justify-content:center}.sort-header{font-size:10px;font-style:italic}.tip{padding:0 3px;color:#d3d3d3}.direction-text{font-size:small;font-weight:400}.close-button-wrapper{display:flex;flex-direction:row-reverse}\n"] }]
|
|
@@ -2979,19 +3428,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImpor
|
|
|
2979
3428
|
}] } });
|
|
2980
3429
|
|
|
2981
3430
|
class TableContainerComponent {
|
|
2982
|
-
constructor(state, exportToCsvService, config, store) {
|
|
3431
|
+
constructor(state, exportToCsvService, config, store, wrapper) {
|
|
2983
3432
|
this.state = state;
|
|
2984
3433
|
this.exportToCsvService = exportToCsvService;
|
|
2985
3434
|
this.config = config;
|
|
2986
3435
|
this.store = store;
|
|
3436
|
+
this.wrapper = wrapper;
|
|
2987
3437
|
this.IndexColumn = false;
|
|
2988
3438
|
this.SelectionColumn = false;
|
|
2989
3439
|
this.isSticky = true;
|
|
2990
3440
|
this.selection$ = new EventEmitter();
|
|
2991
3441
|
this.dataSubject = new ReplaySubject(1);
|
|
2992
|
-
this.data = this.dataSubject.pipe(switchMap(d => d),
|
|
3442
|
+
this.data = this.dataSubject.pipe(switchMap(d => d), defaultShareReplay());
|
|
2993
3443
|
this.OnStateReset = new EventEmitter();
|
|
2994
3444
|
this.OnSaveState = new EventEmitter();
|
|
3445
|
+
this.customFilters$ = new BehaviorSubject([]);
|
|
2995
3446
|
this.mapMetaDatas = (meta) => {
|
|
2996
3447
|
if (meta.fieldType === FieldType.Array) {
|
|
2997
3448
|
const additional = { ...meta.additional };
|
|
@@ -3001,17 +3452,6 @@ class TableContainerComponent {
|
|
|
3001
3452
|
}
|
|
3002
3453
|
return meta;
|
|
3003
3454
|
};
|
|
3004
|
-
this.cleanStateOnInitialLoad = () => (obs) => combineLatest([obs.pipe(addTimeStamp()), this.tableBuilder.metaData$]).pipe(distinctUntilChanged(([state], [state2]) => state.index === state2.index), map(([{ value: state }, metas], index) => {
|
|
3005
|
-
if (index === 0) {
|
|
3006
|
-
const filters = Object.values(state.filters).filter(fltr => metas.some(m => m.key === fltr.key)).reduce((obj, filter) => {
|
|
3007
|
-
obj[filter.filterId] = state.filters[filter.filterId];
|
|
3008
|
-
return obj;
|
|
3009
|
-
}, {});
|
|
3010
|
-
const sorted = state.sorted.filter(s => metas.some(m => m.key === s.active));
|
|
3011
|
-
return ({ ...state, filters, sorted });
|
|
3012
|
-
}
|
|
3013
|
-
return state;
|
|
3014
|
-
}));
|
|
3015
3455
|
this.collapseHeader$ = this.state.state$.pipe(map(state => state.persistedTableSettings.collapseHeader));
|
|
3016
3456
|
this.state.on(this.state.getSavableState().pipe(last()), finalState => {
|
|
3017
3457
|
if (this.tableId) {
|
|
@@ -3023,19 +3463,47 @@ class TableContainerComponent {
|
|
|
3023
3463
|
set pageSize(value) {
|
|
3024
3464
|
this.state.setPageSize(value);
|
|
3025
3465
|
}
|
|
3026
|
-
|
|
3466
|
+
resetState() {
|
|
3467
|
+
this.customFilters.forEach(cf => cf.reset());
|
|
3468
|
+
this.filters.forEach(cf => cf.reset());
|
|
3469
|
+
this.state.resetState();
|
|
3470
|
+
this.OnStateReset.next(null);
|
|
3471
|
+
}
|
|
3472
|
+
initializeState() {
|
|
3027
3473
|
this.state.setTableSettings(this.tableBuilder.settings);
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
|
-
|
|
3474
|
+
this.state.runOnceWhen(stateIs(InitializationState.MetaDataLoaded), state => {
|
|
3475
|
+
if (this.tableId) {
|
|
3476
|
+
const persistedState$ = this.store.pipe(select(selectLocalProfileState(this.tableId)), first(), tap(persistedState => {
|
|
3477
|
+
if (!persistedState) {
|
|
3478
|
+
this.state.setIntializationState(InitializationState.LoadedFromStore);
|
|
3479
|
+
}
|
|
3480
|
+
}), notNull());
|
|
3481
|
+
this.state.updateStateFromPersistedState(persistedState$);
|
|
3482
|
+
}
|
|
3483
|
+
else {
|
|
3484
|
+
this.state.setIntializationState(InitializationState.LoadedFromStore);
|
|
3485
|
+
}
|
|
3486
|
+
});
|
|
3487
|
+
}
|
|
3488
|
+
initializeData() {
|
|
3489
|
+
var allFilters = this.inputFilters ? combineArrays([
|
|
3490
|
+
this.customFilters$,
|
|
3491
|
+
this.inputFilters
|
|
3492
|
+
]) : this.customFilters$;
|
|
3033
3493
|
const filters$ = this.state.filters$.pipe(map(filters => Object.values(filters)));
|
|
3034
|
-
const data = new DataFilter(
|
|
3494
|
+
const data = new DataFilter(allFilters)
|
|
3035
3495
|
.appendFilters(filters$)
|
|
3036
3496
|
.filterData(this.tableBuilder.getData$().pipe(switchMap(data => this.state.metaDataArray$.pipe(map(metaData => this.getData(data, metaData))))));
|
|
3037
3497
|
this.dataSubject.next(data);
|
|
3038
3498
|
}
|
|
3499
|
+
ngOnInit() {
|
|
3500
|
+
this.initializeState();
|
|
3501
|
+
this.initializeData();
|
|
3502
|
+
if (this.tableId) {
|
|
3503
|
+
this.stateKeys$ = this.store.select(selectLocalProfileKeys(this.tableId));
|
|
3504
|
+
this.currentStateKey$ = this.store.select(selectLocalProfileCurrentKey(this.tableId));
|
|
3505
|
+
}
|
|
3506
|
+
}
|
|
3039
3507
|
exportToCsv() {
|
|
3040
3508
|
const sorted = this.data.pipe(withLatestFrom(this.state.sorted$), map(([data, sorted]) => sortData(data, sorted)));
|
|
3041
3509
|
this.exportToCsvService.exportToCsv(sorted);
|
|
@@ -3054,6 +3522,47 @@ class TableContainerComponent {
|
|
|
3054
3522
|
}
|
|
3055
3523
|
ngAfterContentInit() {
|
|
3056
3524
|
this.InitializeColumns();
|
|
3525
|
+
this.state.runOnceWhen(stateIs(InitializationState.LoadedFromStore), state => {
|
|
3526
|
+
var allFilters = [...this.filters, ...this.customFilters];
|
|
3527
|
+
if (this.wrapper) {
|
|
3528
|
+
allFilters = [...allFilters, ...this.wrapper.customFilters, ...this.wrapper.filters];
|
|
3529
|
+
}
|
|
3530
|
+
var customFilters = [];
|
|
3531
|
+
allFilters.filter(f => !f.used).forEach(f => {
|
|
3532
|
+
f.used = true;
|
|
3533
|
+
if (f.savable) {
|
|
3534
|
+
var filter = state.filters[f.filterId];
|
|
3535
|
+
if (isFilterInfo(filter)) {
|
|
3536
|
+
const filterDirective = f;
|
|
3537
|
+
filterDirective.fieldType = filter.fieldType;
|
|
3538
|
+
filterDirective.filterType = filter.filterType;
|
|
3539
|
+
filterDirective.setFilterValue(filter.filterValue);
|
|
3540
|
+
filterDirective.key = filter.key;
|
|
3541
|
+
filterDirective.update();
|
|
3542
|
+
}
|
|
3543
|
+
if (isCustomFilter(filter)) {
|
|
3544
|
+
f.active = filter.active ?? false;
|
|
3545
|
+
}
|
|
3546
|
+
this.state.addFilter(f.filter$);
|
|
3547
|
+
}
|
|
3548
|
+
else {
|
|
3549
|
+
customFilters.push(f);
|
|
3550
|
+
}
|
|
3551
|
+
});
|
|
3552
|
+
const filters$ = from(customFilters.map(cf => cf.filter$)).pipe(mergeAll(), scan((a, b) => {
|
|
3553
|
+
if (b.active) {
|
|
3554
|
+
a[b.filterId] = isCustomFilter(b) ? b.predicate : createFilterFunc(b);
|
|
3555
|
+
}
|
|
3556
|
+
else {
|
|
3557
|
+
delete a[b.filterId];
|
|
3558
|
+
}
|
|
3559
|
+
return a;
|
|
3560
|
+
}, {}), map(f => Object.values(f)));
|
|
3561
|
+
this.state.on(filters$, (f) => {
|
|
3562
|
+
this.customFilters$.next(f);
|
|
3563
|
+
});
|
|
3564
|
+
this.state.updateState({ initializationState: InitializationState.Ready });
|
|
3565
|
+
});
|
|
3057
3566
|
}
|
|
3058
3567
|
InitializeColumns() {
|
|
3059
3568
|
const customCellMap = new Map(this.customCells.map(cc => [cc.customCell, cc]));
|
|
@@ -3093,15 +3602,23 @@ class TableContainerComponent {
|
|
|
3093
3602
|
return _.flattenDeep(withHeadersAndFooters);
|
|
3094
3603
|
}
|
|
3095
3604
|
}
|
|
3096
|
-
TableContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableContainerComponent, deps: [{ token: TableStore }, { token: ExportToCsvService }, { token: TableBuilderConfigToken }, { token: i3$
|
|
3097
|
-
TableContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: TableContainerComponent, selector: "tb-table-container", inputs: { tableId: "tableId", 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 [matSortDisabled]=\"disableSort\">\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=\"!tableSettings.hideHeader\">\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 </ng-container>\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$' [disableSort]=\"disableSort\">\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)=\"
|
|
3605
|
+
TableContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableContainerComponent, deps: [{ token: TableStore }, { token: ExportToCsvService }, { token: TableBuilderConfigToken }, { token: i3$3.Store }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
3606
|
+
TableContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: TableContainerComponent, selector: "tb-table-container", inputs: { tableId: "tableId", 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: "customFilters", predicate: TableCustomFilterDirective, descendants: true }, { propertyName: "filters", predicate: TableFilterDirective, descendants: true }, { propertyName: "customRows", predicate: MatRowDef }, { propertyName: "customCells", predicate: CustomCellDirective }], ngImport: i0, template: "<ng-content select=\"[before]\" >\n</ng-content>\n\n<ng-container multiSort [matSortDisabled]=\"disableSort\">\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=\"!tableSettings.hideHeader\">\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 </ng-container>\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$' [disableSort]=\"disableSort\">\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)=\"resetState()\">\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 clickEmitter #add='clickEmitter'>\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: FilterChipsComponent, selector: "lib-filter-list" }, { type: i3$1.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: i4$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: GenericTableComponent, selector: "tb-generic-table", inputs: ["data$", "IndexColumn", "SelectionColumn", "trackBy", "rows", "isSticky", "columnBuilders", "columnInfos", "disableSort"], outputs: ["selection$"] }, { type: GenFilterDisplayerComponent, selector: "tb-filter-displayer" }, { type: GenColDisplayerComponent, selector: "tb-col-displayer" }, { type: SortMenuComponent, selector: "tb-sort-menu" }, { type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }], directives: [{ type: MultiSortDirective, selector: "[multiSort]", inputs: ["matSortDisabled"], exportAs: ["multiSort"] }, { type: i7$1.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: ClickEmitterDirective, selector: "[clickEmitter]", exportAs: ["clickEmitter"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: StopPropagationDirective, selector: "[stop-propagation]" }, { type: DialogDirective, selector: "[opDialog]", inputs: ["opDialogConfig", "opDialog", "opDialogOrigin"], outputs: ["opDialogClosed"] }, { type: i4$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }], pipes: { "async": i1.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3098
3607
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableContainerComponent, decorators: [{
|
|
3099
3608
|
type: Component,
|
|
3100
|
-
args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore], template: "<ng-container multiSort [matSortDisabled]=\"disableSort\">\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=\"!tableSettings.hideHeader\">\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 </ng-container>\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$' [disableSort]=\"disableSort\">\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)=\"
|
|
3609
|
+
args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore], template: "<ng-content select=\"[before]\" >\n</ng-content>\n\n<ng-container multiSort [matSortDisabled]=\"disableSort\">\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=\"!tableSettings.hideHeader\">\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 </ng-container>\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$' [disableSort]=\"disableSort\">\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)=\"resetState()\">\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 clickEmitter #add='clickEmitter'>\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"] }]
|
|
3101
3610
|
}], ctorParameters: function () { return [{ type: TableStore }, { type: ExportToCsvService }, { type: undefined, decorators: [{
|
|
3102
3611
|
type: Inject,
|
|
3103
3612
|
args: [TableBuilderConfigToken]
|
|
3104
|
-
}] }, { type: i3$
|
|
3613
|
+
}] }, { type: i3$3.Store }, { type: TableWrapperDirective, decorators: [{
|
|
3614
|
+
type: Optional
|
|
3615
|
+
}] }]; }, propDecorators: { customFilters: [{
|
|
3616
|
+
type: ContentChildren,
|
|
3617
|
+
args: [TableCustomFilterDirective, { descendants: true }]
|
|
3618
|
+
}], filters: [{
|
|
3619
|
+
type: ContentChildren,
|
|
3620
|
+
args: [TableFilterDirective, { descendants: true }]
|
|
3621
|
+
}], tableId: [{
|
|
3105
3622
|
type: Input
|
|
3106
3623
|
}], tableBuilder: [{
|
|
3107
3624
|
type: Input
|
|
@@ -3134,7 +3651,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImpor
|
|
|
3134
3651
|
}], state$: [{
|
|
3135
3652
|
type: Output
|
|
3136
3653
|
}] } });
|
|
3137
|
-
const addTimeStamp = () => (obs) => obs.pipe(map((t, i) => ({ value: t, index: i })));
|
|
3138
3654
|
|
|
3139
3655
|
const defaultStorageState = {
|
|
3140
3656
|
globalProfileKeys: ['Default'],
|
|
@@ -3218,11 +3734,11 @@ class SaveTableEffects {
|
|
|
3218
3734
|
})), { dispatch: false });
|
|
3219
3735
|
}
|
|
3220
3736
|
}
|
|
3221
|
-
SaveTableEffects.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: SaveTableEffects, deps: [{ token: i1$4.Actions }, { token: i3$
|
|
3737
|
+
SaveTableEffects.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: SaveTableEffects, deps: [{ token: i1$4.Actions }, { token: i3$3.Store }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3222
3738
|
SaveTableEffects.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: SaveTableEffects });
|
|
3223
3739
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: SaveTableEffects, decorators: [{
|
|
3224
3740
|
type: Injectable
|
|
3225
|
-
}], ctorParameters: function () { return [{ type: i1$4.Actions }, { type: i3$
|
|
3741
|
+
}], ctorParameters: function () { return [{ type: i1$4.Actions }, { type: i3$3.Store }]; } });
|
|
3226
3742
|
|
|
3227
3743
|
class PreventEnterDirective {
|
|
3228
3744
|
onKeyDown() {
|
|
@@ -3290,7 +3806,7 @@ class MatSlideToggleGroupDirective {
|
|
|
3290
3806
|
getObs() {
|
|
3291
3807
|
var toggleChanges = merge$1(...this._toggles.map(toggle => toggle.change));
|
|
3292
3808
|
const startValue = this.getInitValue();
|
|
3293
|
-
return toggleChanges.pipe(scan((prev, cur) => {
|
|
3809
|
+
return toggleChanges.pipe(scan$1((prev, cur) => {
|
|
3294
3810
|
const toggleName = cur.source.name;
|
|
3295
3811
|
const newVal = { ...prev, [toggleName]: cur.checked };
|
|
3296
3812
|
if (cur.checked && !this.allowMultiple) {
|
|
@@ -3420,8 +3936,16 @@ TableBuilderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", vers
|
|
|
3420
3936
|
InitializationComponent,
|
|
3421
3937
|
InListFilterComponent,
|
|
3422
3938
|
SortMenuComponent,
|
|
3423
|
-
FilterChipsComponent
|
|
3424
|
-
|
|
3939
|
+
FilterChipsComponent,
|
|
3940
|
+
MatSlideToggleTbFilterDirective,
|
|
3941
|
+
MatRadioButtonTbFilterDirective,
|
|
3942
|
+
MatOptionTbFilterDirective,
|
|
3943
|
+
MatCheckboxTbFilterDirective,
|
|
3944
|
+
MatButtonToggleFilterDirective,
|
|
3945
|
+
TableFilterDirective,
|
|
3946
|
+
TableFilterStringContainsDirective,
|
|
3947
|
+
TableWrapperDirective], imports: [CommonModule,
|
|
3948
|
+
MaterialModule, i3$3.StoreFeatureModule, i1$4.EffectsFeatureModule, FormsModule,
|
|
3425
3949
|
RouterModule,
|
|
3426
3950
|
ReactiveComponentModule,
|
|
3427
3951
|
DragDropModule,
|
|
@@ -3433,7 +3957,15 @@ TableBuilderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", vers
|
|
|
3433
3957
|
GenFilterDisplayerComponent,
|
|
3434
3958
|
FilterComponent,
|
|
3435
3959
|
MultiSortDirective,
|
|
3436
|
-
ResizeColumnDirective
|
|
3960
|
+
ResizeColumnDirective,
|
|
3961
|
+
MatSlideToggleTbFilterDirective,
|
|
3962
|
+
MatRadioButtonTbFilterDirective,
|
|
3963
|
+
MatOptionTbFilterDirective,
|
|
3964
|
+
MatCheckboxTbFilterDirective,
|
|
3965
|
+
MatButtonToggleFilterDirective,
|
|
3966
|
+
TableFilterDirective,
|
|
3967
|
+
TableFilterStringContainsDirective,
|
|
3968
|
+
TableWrapperDirective] });
|
|
3437
3969
|
TableBuilderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: TableBuilderModule, providers: [
|
|
3438
3970
|
SpaceCasePipe,
|
|
3439
3971
|
DatePipe,
|
|
@@ -3475,6 +4007,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImpor
|
|
|
3475
4007
|
FilterComponent,
|
|
3476
4008
|
MultiSortDirective,
|
|
3477
4009
|
ResizeColumnDirective,
|
|
4010
|
+
MatSlideToggleTbFilterDirective,
|
|
4011
|
+
MatRadioButtonTbFilterDirective,
|
|
4012
|
+
MatOptionTbFilterDirective,
|
|
4013
|
+
MatCheckboxTbFilterDirective,
|
|
4014
|
+
MatButtonToggleFilterDirective,
|
|
4015
|
+
TableFilterDirective,
|
|
4016
|
+
TableFilterStringContainsDirective,
|
|
4017
|
+
TableWrapperDirective,
|
|
3478
4018
|
],
|
|
3479
4019
|
declarations: [
|
|
3480
4020
|
ColumnTotalPipe,
|
|
@@ -3500,6 +4040,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImpor
|
|
|
3500
4040
|
InListFilterComponent,
|
|
3501
4041
|
SortMenuComponent,
|
|
3502
4042
|
FilterChipsComponent,
|
|
4043
|
+
MatSlideToggleTbFilterDirective,
|
|
4044
|
+
MatRadioButtonTbFilterDirective,
|
|
4045
|
+
MatOptionTbFilterDirective,
|
|
4046
|
+
MatCheckboxTbFilterDirective,
|
|
4047
|
+
MatButtonToggleFilterDirective,
|
|
4048
|
+
TableFilterDirective,
|
|
4049
|
+
TableFilterStringContainsDirective,
|
|
4050
|
+
TableWrapperDirective,
|
|
3503
4051
|
],
|
|
3504
4052
|
providers: [
|
|
3505
4053
|
SpaceCasePipe,
|
|
@@ -3570,5 +4118,5 @@ const CreateTableBuilder = (reportDef$) => {
|
|
|
3570
4118
|
* Generated bundle index. Do not edit.
|
|
3571
4119
|
*/
|
|
3572
4120
|
|
|
3573
|
-
export { ArrayStyle, AutoFocusDirective, ClickEmitterDirective, ClickSubjectDirective, CreateTableBuilder, CustomCellDirective, DateFilterComponent, DialogDirective, DialogService, DialogWrapper, FieldType, FilterChipsComponent, FilterComponent, FilterType, FunctionPipe, GenColDisplayerComponent, GenFilterDisplayerComponent, GeneralTableSettings, GenericTableComponent, HttpErrorStateDirective, HttpInProgressStateDirective, HttpNotStartedStateDirective, HttpRequestModule, HttpRequestStateDirective, HttpRequestStateFactory, HttpRequestStateStore, HttpRequestStatus, HttpRequestStrategy, HttpSuccessStateDirective, MatSlideToggleGroupDirective, MatTableObservableDataSource, MultiSortDirective, NotPersisitedTableSettings, PaginatorComponent, PesrsistedTableSettings, PhoneNumberPipe, PreventEnterDirective, ResizeColumnDirective, SortDirection, SpaceCasePipe, StopPropagationDirective, StylerDirective, TableBuilder, TableBuilderModule, TableColumnHeaderSettings, TableContainerComponent, TableWrapperFooterSettings, TableWrapperHeaderSettings, Target, UtilitiesModule, chainRequest, combineArrays, createFailure, createSuccess, defaultShareReplay, filterArray, getRequestorBody, getRequestorStatus, httpRequest, httpRequestor, inProgress, isErrorState, isSuccessState, mapArray, mapError, notNull, notStarted, onWait, previousAndCurrent, skipOneWhen, spaceCase, statusIsSuccessOrInProgress, switchOff, tapError, tapSuccess };
|
|
4121
|
+
export { ArrayStyle, AutoFocusDirective, ClickEmitterDirective, ClickSubjectDirective, CreateTableBuilder, CustomCellDirective, DateFilterComponent, DialogDirective, DialogService, DialogWrapper, FieldType, FilterChipsComponent, FilterComponent, FilterType, FunctionPipe, GenColDisplayerComponent, GenFilterDisplayerComponent, GeneralTableSettings, GenericTableComponent, HttpErrorStateDirective, HttpInProgressStateDirective, HttpNotStartedStateDirective, HttpRequestModule, HttpRequestStateDirective, HttpRequestStateFactory, HttpRequestStateStore, HttpRequestStatus, HttpRequestStrategy, HttpSuccessStateDirective, MatButtonToggleFilterDirective, MatCheckboxTbFilterDirective, MatOptionTbFilterDirective, MatRadioButtonTbFilterDirective, MatSlideToggleGroupDirective, MatSlideToggleTbFilterDirective, MatTableObservableDataSource, MultiSortDirective, NotPersisitedTableSettings, PaginatorComponent, PesrsistedTableSettings, PhoneNumberPipe, PreventEnterDirective, ResizeColumnDirective, SortDirection, SpaceCasePipe, StopPropagationDirective, StylerDirective, TableBuilder, TableBuilderModule, TableColumnHeaderSettings, TableContainerComponent, TableCustomFilterDirective, TableCustomFilterDirectiveBase, TableFilterDirective, TableFilterStringContainsDirective, TableWrapperDirective, TableWrapperFooterSettings, TableWrapperHeaderSettings, Target, TbSelectedFilterDirective, UtilitiesModule, chainRequest, combineArrays, createFailure, createSuccess, defaultShareReplay, filterArray, getRequestorBody, getRequestorStatus, httpRequest, httpRequestor, inProgress, isErrorState, isSuccessState, mapArray, mapError, notNull, notStarted, onWait, onceWhen, previousAndCurrent, skipOneWhen, spaceCase, statusIsSuccessOrInProgress, switchOff, tapError, tapSuccess };
|
|
3574
4122
|
//# sourceMappingURL=one-paragon-angular-utilities.mjs.map
|