@one-paragon/angular-utilities 2.8.4 → 2.8.5

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.
Files changed (203) hide show
  1. package/fesm2022/one-paragon-angular-utilities.mjs +7350 -0
  2. package/fesm2022/one-paragon-angular-utilities.mjs.map +1 -0
  3. package/package.json +27 -15
  4. package/types/one-paragon-angular-utilities.d.ts +2211 -0
  5. package/karma.conf.js +0 -43
  6. package/ng-package.json +0 -7
  7. package/src/action-state/action-state-spinner/action-state-spinner.component.css +0 -16
  8. package/src/action-state/action-state-spinner/action-state-spinner.component.html +0 -7
  9. package/src/action-state/action-state-spinner/action-state-spinner.component.spec.ts +0 -25
  10. package/src/action-state/action-state-spinner/action-state-spinner.component.ts +0 -26
  11. package/src/action-state/action-state-ui/action-state-ui.module.ts +0 -13
  12. package/src/action-state/index.ts +0 -8
  13. package/src/action-state/ngrx-ext/ngrx-ext.module.ts +0 -14
  14. package/src/action-state/ngrx.ts +0 -69
  15. package/src/http-request-state/RequestStateFactory.ts +0 -56
  16. package/src/http-request-state/RequestStateStore.ts +0 -360
  17. package/src/http-request-state/deprecated.ts +0 -20
  18. package/src/http-request-state/directives/HttpStateDirectiveBase.ts +0 -29
  19. package/src/http-request-state/directives/http-error-state-directive.ts +0 -21
  20. package/src/http-request-state/directives/http-inProgress-state-directive.ts +0 -19
  21. package/src/http-request-state/directives/http-notStarted-state-directive.ts +0 -19
  22. package/src/http-request-state/directives/http-success-state-directive.ts +0 -29
  23. package/src/http-request-state/directives/index.ts +0 -5
  24. package/src/http-request-state/directives/request-state-directive.spec.ts +0 -73
  25. package/src/http-request-state/directives/request-state-directive.ts +0 -78
  26. package/src/http-request-state/documentation/CREATE-REQUESTOR.md +0 -667
  27. package/src/http-request-state/documentation/README.md +0 -191
  28. package/src/http-request-state/documentation/REQUEST-STATE-STORE-CONFIG.md +0 -648
  29. package/src/http-request-state/documentation/REQUESTOR.md +0 -616
  30. package/src/http-request-state/helpers.ts +0 -30
  31. package/src/http-request-state/http-state-module.ts +0 -23
  32. package/src/http-request-state/index.ts +0 -7
  33. package/src/http-request-state/models/view-context.ts +0 -18
  34. package/src/http-request-state/observable.spec.ts +0 -43
  35. package/src/http-request-state/request-state.ts +0 -66
  36. package/src/http-request-state/rxjs/getRequestorBody.ts +0 -10
  37. package/src/http-request-state/rxjs/getRequestorState.ts +0 -8
  38. package/src/http-request-state/rxjs/index.ts +0 -4
  39. package/src/http-request-state/rxjs/tapError.ts +0 -16
  40. package/src/http-request-state/rxjs/tapSuccess.ts +0 -16
  41. package/src/http-request-state/strategies.spec.ts +0 -42
  42. package/src/http-request-state/types.ts +0 -54
  43. package/src/ngrx/actionable-selector.ts +0 -189
  44. package/src/ngrx/index.ts +0 -1
  45. package/src/public-api.ts +0 -40
  46. package/src/rxjs/defaultShareReplay.ts +0 -8
  47. package/src/rxjs/index.ts +0 -5
  48. package/src/rxjs/mapError.ts +0 -8
  49. package/src/rxjs/rxjs-operators.ts +0 -130
  50. package/src/rxjs/subjectifier.ts +0 -17
  51. package/src/rxjs/subscriber.directive.ts +0 -57
  52. package/src/specs/clickSubject.spec.ts +0 -99
  53. package/src/specs/dialog.spec.ts +0 -101
  54. package/src/specs/toggleGroupDirective.spec.ts +0 -229
  55. package/src/table-builder/classes/DefaultSettings.ts +0 -11
  56. package/src/table-builder/classes/MatTableObservableDataSource.ts +0 -23
  57. package/src/table-builder/classes/TableBuilderConfig.ts +0 -49
  58. package/src/table-builder/classes/TableBuilderDataSource.ts +0 -64
  59. package/src/table-builder/classes/TableState.ts +0 -96
  60. package/src/table-builder/classes/data-store.ts +0 -10
  61. package/src/table-builder/classes/display-col.ts +0 -5
  62. package/src/table-builder/classes/filter-info.ts +0 -129
  63. package/src/table-builder/classes/table-builder-general-settings.ts +0 -233
  64. package/src/table-builder/classes/table-builder.ts +0 -105
  65. package/src/table-builder/classes/table-store.helpers.ts +0 -109
  66. package/src/table-builder/classes/table-store.ts +0 -540
  67. package/src/table-builder/components/array-column.component.ts +0 -34
  68. package/src/table-builder/components/column-builder/column-builder.component.html +0 -109
  69. package/src/table-builder/components/column-builder/column-builder.component.scss +0 -43
  70. package/src/table-builder/components/column-builder/column-builder.component.spec.ts +0 -49
  71. package/src/table-builder/components/column-builder/column-builder.component.ts +0 -130
  72. package/src/table-builder/components/column-builder/column-helpers.ts +0 -54
  73. package/src/table-builder/components/column-header-menu/column-header-menu.component.html +0 -128
  74. package/src/table-builder/components/column-header-menu/column-header-menu.component.scss +0 -97
  75. package/src/table-builder/components/column-header-menu/column-header-menu.component.ts +0 -113
  76. package/src/table-builder/components/date-filter/date-filter.component.html +0 -39
  77. package/src/table-builder/components/date-filter/date-filter.component.ts +0 -33
  78. package/src/table-builder/components/date-time-filter/date-time-filter.component.html +0 -25
  79. package/src/table-builder/components/date-time-filter/date-time-filter.component.ts +0 -33
  80. package/src/table-builder/components/filter/filter.component.html +0 -120
  81. package/src/table-builder/components/filter/filter.component.scss +0 -60
  82. package/src/table-builder/components/filter/filter.component.spec.ts +0 -86
  83. package/src/table-builder/components/filter/filter.component.ts +0 -73
  84. package/src/table-builder/components/filter/in-list/in-list-filter.component.ts +0 -171
  85. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.html +0 -60
  86. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.scss +0 -57
  87. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.ts +0 -44
  88. package/src/table-builder/components/generic-table/generic-table.component.html +0 -140
  89. package/src/table-builder/components/generic-table/generic-table.component.scss +0 -45
  90. package/src/table-builder/components/generic-table/generic-table.component.ts +0 -531
  91. package/src/table-builder/components/generic-table/paginator.component.ts +0 -125
  92. package/src/table-builder/components/group-by-list/group-by-list.component.css +0 -24
  93. package/src/table-builder/components/group-by-list/group-by-list.component.html +0 -21
  94. package/src/table-builder/components/group-by-list/group-by-list.component.spec.ts +0 -23
  95. package/src/table-builder/components/group-by-list/group-by-list.component.ts +0 -26
  96. package/src/table-builder/components/in-filter/in-filter.component.css +0 -22
  97. package/src/table-builder/components/in-filter/in-filter.component.html +0 -38
  98. package/src/table-builder/components/in-filter/in-filter.component.ts +0 -66
  99. package/src/table-builder/components/index.ts +0 -9
  100. package/src/table-builder/components/initialization-component/initialization.component.html +0 -78
  101. package/src/table-builder/components/initialization-component/initialization.component.ts +0 -28
  102. package/src/table-builder/components/link-column.component.ts +0 -42
  103. package/src/table-builder/components/number-filter/number-filter.component.css +0 -10
  104. package/src/table-builder/components/number-filter/number-filter.component.html +0 -32
  105. package/src/table-builder/components/number-filter/number-filter.component.spec.ts +0 -30
  106. package/src/table-builder/components/number-filter/number-filter.component.ts +0 -34
  107. package/src/table-builder/components/profiles-menu/profiles-menu.component.html +0 -77
  108. package/src/table-builder/components/profiles-menu/profiles-menu.component.scss +0 -126
  109. package/src/table-builder/components/profiles-menu/profiles-menu.component.spec.ts +0 -23
  110. package/src/table-builder/components/profiles-menu/profiles-menu.component.ts +0 -64
  111. package/src/table-builder/components/reset-menu/reset-menu.component.css +0 -3
  112. package/src/table-builder/components/reset-menu/reset-menu.component.html +0 -10
  113. package/src/table-builder/components/reset-menu/reset-menu.component.ts +0 -87
  114. package/src/table-builder/components/scroll-strategy.ts +0 -139
  115. package/src/table-builder/components/sort-menu/sort-menu.component-store.ts +0 -57
  116. package/src/table-builder/components/sort-menu/sort-menu.component.html +0 -115
  117. package/src/table-builder/components/sort-menu/sort-menu.component.scss +0 -119
  118. package/src/table-builder/components/sort-menu/sort-menu.component.ts +0 -88
  119. package/src/table-builder/components/table-container/table-container.component.html +0 -94
  120. package/src/table-builder/components/table-container/table-container.component.scss +0 -60
  121. package/src/table-builder/components/table-container/table-container.component.ts +0 -467
  122. package/src/table-builder/components/table-container/table-container.helpers/data-state.helpers.ts +0 -113
  123. package/src/table-builder/components/table-container/table-container.helpers/filter-state.helpers.ts +0 -125
  124. package/src/table-builder/components/table-container/table-container.helpers/groupBy.helpers.ts +0 -172
  125. package/src/table-builder/components/table-container/table-container.helpers/meta-data.helpers.ts +0 -19
  126. package/src/table-builder/components/table-container/table-container.helpers/sort-state.helpers.ts +0 -47
  127. package/src/table-builder/components/table-container/tableProps.ts +0 -21
  128. package/src/table-builder/components/table-container/virtual-scroll-container.ts +0 -216
  129. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.html +0 -42
  130. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.ts +0 -47
  131. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.css +0 -40
  132. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.html +0 -11
  133. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.spec.ts +0 -85
  134. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.ts +0 -35
  135. package/src/table-builder/components/table-container-filter/table-wrapper-filter-store.ts +0 -13
  136. package/src/table-builder/components/table-header-menu/table-header-menu.component.css +0 -21
  137. package/src/table-builder/components/table-header-menu/table-header-menu.component.html +0 -48
  138. package/src/table-builder/components/table-header-menu/table-header-menu.component.ts +0 -36
  139. package/src/table-builder/directives/custom-cell-directive.ts +0 -63
  140. package/src/table-builder/directives/custom-header-directive.ts +0 -16
  141. package/src/table-builder/directives/group-row-directive.ts +0 -91
  142. package/src/table-builder/directives/index.ts +0 -8
  143. package/src/table-builder/directives/multi-sort.directive.spec.ts +0 -124
  144. package/src/table-builder/directives/multi-sort.directive.ts +0 -58
  145. package/src/table-builder/directives/resize-column.directive.ts +0 -107
  146. package/src/table-builder/directives/table-wrapper.directive.ts +0 -13
  147. package/src/table-builder/directives/tb-filter.directive.ts +0 -376
  148. package/src/table-builder/documentation/table-builder/CUSTOM-CELL.md +0 -568
  149. package/src/table-builder/documentation/table-builder/CUSTOM-GROUP-ROW.md +0 -356
  150. package/src/table-builder/documentation/table-builder/METADATA-DOCUMENTATION.md +0 -517
  151. package/src/table-builder/documentation/table-builder/STYLER-STYLE.md +0 -228
  152. package/src/table-builder/documentation/table-builder/TABLE-BUILDER-CONFIG.md +0 -325
  153. package/src/table-builder/documentation/table-builder/TABLE-BUILDER-SETTINGS.md +0 -515
  154. package/src/table-builder/documentation/table-builder/TABLE-BUILDER.md +0 -430
  155. package/src/table-builder/documentation/table-builder/TABLE-CONTAINER.md +0 -628
  156. package/src/table-builder/enums/filterTypes.ts +0 -39
  157. package/src/table-builder/functions/boolean-filter-function.ts +0 -12
  158. package/src/table-builder/functions/date-filter-function.ts +0 -85
  159. package/src/table-builder/functions/download-data.ts +0 -11
  160. package/src/table-builder/functions/null-filter-function.ts +0 -9
  161. package/src/table-builder/functions/number-filter-function.ts +0 -47
  162. package/src/table-builder/functions/sort-data-function.ts +0 -80
  163. package/src/table-builder/functions/string-filter-function.ts +0 -59
  164. package/src/table-builder/interfaces/ColumnInfo.ts +0 -9
  165. package/src/table-builder/interfaces/dictionary.ts +0 -3
  166. package/src/table-builder/interfaces/meta-data.ts +0 -279
  167. package/src/table-builder/ngrx/tableBuilderStateStore.ts +0 -203
  168. package/src/table-builder/pipes/column-total.pipe.ts +0 -16
  169. package/src/table-builder/pipes/format-filter-type.pipe.ts +0 -12
  170. package/src/table-builder/pipes/format-filter-value.pipe.ts +0 -71
  171. package/src/table-builder/pipes/key-display.ts +0 -13
  172. package/src/table-builder/services/all-values-filter-creator.service.ts +0 -92
  173. package/src/table-builder/services/export-to-csv.service.ts +0 -117
  174. package/src/table-builder/services/link-creator.service.ts +0 -98
  175. package/src/table-builder/services/table-template-service.ts +0 -47
  176. package/src/table-builder/services/transform-creator.ts +0 -90
  177. package/src/table-builder/specs/table-custom-filters.spec.ts +0 -262
  178. package/src/table-builder/styles/collapser.styles.scss +0 -16
  179. package/src/table-builder/table-builder.module.ts +0 -42
  180. package/src/table-builder/types/group-types.ts +0 -42
  181. package/src/table-builder/types/index.ts +0 -1
  182. package/src/test.ts +0 -17
  183. package/src/utilities/array-helpers.ts +0 -13
  184. package/src/utilities/directives/auto-focus.directive.ts +0 -20
  185. package/src/utilities/directives/clickEmitterDirective.ts +0 -15
  186. package/src/utilities/directives/clickSubject.ts +0 -19
  187. package/src/utilities/directives/conditional-classes.directive.ts +0 -36
  188. package/src/utilities/directives/dialog-service.ts +0 -19
  189. package/src/utilities/directives/dialog.ts +0 -174
  190. package/src/utilities/directives/mat-toggle-group-directive.ts +0 -60
  191. package/src/utilities/directives/prevent-enter.directive.ts +0 -12
  192. package/src/utilities/directives/stop-propagation.directive.ts +0 -19
  193. package/src/utilities/directives/styler.ts +0 -45
  194. package/src/utilities/directives/trim-whitespace.directive.ts +0 -20
  195. package/src/utilities/index.ts +0 -22
  196. package/src/utilities/module.ts +0 -53
  197. package/src/utilities/pipes/function.pipe.ts +0 -21
  198. package/src/utilities/pipes/phone.pipe.ts +0 -20
  199. package/src/utilities/pipes/space-case.pipes.spec.ts +0 -47
  200. package/src/utilities/pipes/space-case.pipes.ts +0 -29
  201. package/tsconfig.lib.json +0 -20
  202. package/tsconfig.lib.prod.json +0 -10
  203. package/tsconfig.spec.json +0 -17
@@ -1,96 +0,0 @@
1
- import { CustomFilter, FilterInfo } from './filter-info';
2
- import { Dictionary } from '../interfaces/dictionary';
3
- import { Sort } from '@angular/material/sort';
4
- import { MetaData } from '../interfaces/meta-data';
5
- import { NotPersistedTableSettings, PersistedTableSettings } from './table-builder-general-settings';
6
- import { LinkInfo } from '../services/link-creator.service';
7
- import { TableProps } from '../components/table-container/tableProps';
8
- import { GroupedData } from '../types/group-types';
9
-
10
- export interface PersistedTableState {
11
- hiddenKeys?: string [];
12
- filters: Dictionary<FilterInfo | CustomFilter>;
13
- sorted : Sort [];
14
- userDefined : {
15
- order:Dictionary<number>,
16
- widths:Dictionary<number>,
17
- table:{ width?:number },
18
- pageSize?: number,
19
- showAll?: boolean,
20
- rowHeight?: number,
21
- headerHeight?: number,
22
- noGroups?: boolean;
23
- };
24
- persistedTableSettings : PersistedTableSettings;
25
- groupBy: GroupedData[];
26
- }
27
-
28
- export interface TableState extends Required<PersistedTableState> {
29
- initializationState: InitializationState;
30
- metaData: Dictionary<MetaData>;
31
- notPersistedTableSettings : NotPersistedTableSettings;
32
- pageSize: number;
33
- currentPage: number;
34
- linkMaps: Dictionary<LinkInfo>;
35
- allFilters: Dictionary<any[]>;
36
- props: TableProps;
37
- showAll: boolean;
38
- }
39
- export interface DataState {
40
- virtualScrollOffset: number;
41
- virtualEnds: {start: number, end: number};
42
- sortedFilteredDataLength: number;
43
- sortedFilteredGroupedDataLength: number;
44
- }
45
- type RequireNull<T> = { [K in keyof T]: null };
46
- class KeysToDelete implements RequireNull<Omit<TableState, keyof PersistedTableState>> {
47
- initializationState = null;
48
- metaData = null;
49
- notPersistedTableSettings = null;
50
- linkMaps = null;
51
- pageSize = null;
52
- currentPage = null;
53
- virtualScrollOffset = null;
54
- dataLen = null;
55
- virtualEnds = null;
56
- virtualEnd = null;
57
- props = null;
58
- showAll = null;
59
- minColumnWidth = null;
60
- allFilters = null;
61
- }
62
- export const keysToDelete = Object.keys(new KeysToDelete());
63
-
64
- export enum InitializationState {
65
- Created,
66
- MetaDataLoaded,
67
- TableSettingsLoaded,
68
- Ready,
69
- }
70
-
71
- export const defaultTableState: TableState = {
72
- initializationState: InitializationState.Created,
73
- metaData: {},
74
- filters: {},
75
- hiddenKeys: [],
76
- sorted: [],
77
- userDefined: { order: {}, widths: {}, table: {} },
78
- persistedTableSettings: new PersistedTableSettings(),
79
- notPersistedTableSettings: new NotPersistedTableSettings(),
80
- pageSize: 10,
81
- linkMaps: {},
82
- allFilters: {},
83
- groupBy: [],
84
- currentPage: 0,
85
-
86
- props: {} as TableProps,
87
- showAll: false,
88
- };
89
- export const defaultDataState: DataState = {
90
- virtualScrollOffset: 0,
91
- sortedFilteredDataLength: 0,
92
- sortedFilteredGroupedDataLength: 0,
93
- virtualEnds: {
94
- start: 0, end: 20
95
- },
96
- }
@@ -1,10 +0,0 @@
1
- import { Injectable } from "@angular/core";
2
- import { ComponentStore } from "@ngrx/component-store";
3
- import { DataState, defaultDataState } from "./TableState";
4
-
5
- @Injectable()
6
- export class DataStore extends ComponentStore<DataState> {
7
- constructor() {
8
- super({ ...defaultDataState });
9
- }
10
- }
@@ -1,5 +0,0 @@
1
- export interface DisplayCol {
2
- key: string;
3
- displayName?: string;
4
- isVisible: boolean;
5
- }
@@ -1,129 +0,0 @@
1
- import { FilterType } from '../enums/filterTypes';
2
- import { EnumFilterFuncs, StringFilterFuncs } from '../functions/string-filter-function';
3
- import { NumberFilterFuncs } from '../functions/number-filter-function';
4
- import { DateFilterFuncs, DateTimeFilterFuncs } from '../functions/date-filter-function';
5
- import { BooleanFilterFuncs } from '../functions/boolean-filter-function';
6
- import { FieldType } from '../interfaces/meta-data';
7
- import { Dictionary } from '../interfaces/dictionary';
8
- import { Predicate } from '@angular/core';
9
- import { getFactory } from '../functions/sort-data-function';
10
- import { isBlankValueFilter } from '../services/all-values-filter-creator.service';
11
-
12
- const filterFactoryMap: Dictionary<FilterFunc<any, any>> = {
13
- [FilterType.And]: (filter: FilterInfo ): ((obj: any) => boolean) => {
14
- const filters = createFilterFuncs(filter.filterValue as FilterInfo[]);
15
- return (obj: any) : boolean => filters.every( f => f(obj));
16
- },
17
- [FilterType.In]: (filter: FilterInfo ): (obj: any) => boolean => {
18
- const filters = createFilterFuncs(filter.filterValue as FilterInfo[]);
19
- return (obj: any) : boolean => filters.some( f => f(obj));
20
- },
21
- };
22
-
23
- const filterTypeFuncMap : Record<FieldType, FilterFuncs<any>> = {
24
- [FieldType.Array]: StringFilterFuncs,
25
- [FieldType.Boolean]: BooleanFilterFuncs,
26
- [FieldType.Currency]: NumberFilterFuncs,
27
- [FieldType.Date]: DateFilterFuncs,
28
- [FieldType.DateTime]: DateTimeFilterFuncs,
29
- [FieldType.Enum]: EnumFilterFuncs,
30
- [FieldType.Number]: NumberFilterFuncs,
31
- [FieldType.PhoneNumber]: StringFilterFuncs,
32
- [FieldType.String]: StringFilterFuncs,
33
- [FieldType.Unknown]: StringFilterFuncs,
34
- } as Record<FieldType, FilterFuncs<any>>;
35
-
36
- export const filterTypeMap = Object.entries(filterTypeFuncMap).reduce(
37
- (acc, [key, value]) => ({ ...acc, [key]: Object.keys(value) }), {} as Record<FieldType, FilterType[]>
38
- )
39
-
40
- export interface FilterState {
41
- filterId: string;
42
- filterType: FilterType;
43
- filterValue?: any;
44
- active?: boolean;
45
- filterBy?: (t: any) => any
46
- }
47
-
48
- export interface FilterInfo<T extends FieldType = any, U = any> extends FilterState {
49
- key: string & keyof U;
50
- fieldType: T;
51
- _isExternallyManaged?: boolean;
52
- }
53
-
54
- export interface PartialFilter {
55
- filterId?: string;
56
- key: string;
57
- fieldType: FieldType;
58
- filterType?: FilterType;
59
- filterValue?: any;
60
- filterBy?: (t: any) => any
61
- }
62
-
63
-
64
- export interface CustomFilter<T = any> extends FilterState {
65
- predicate: Predicate<T>;
66
- filterType: typeof FilterType.Custom;
67
- chipLabel?: string;
68
- notSavable?: boolean;
69
- }
70
-
71
- export function isCustomFilter(filter : FilterInfo | CustomFilter) : filter is CustomFilter {
72
- return filter && filter.filterType === FilterType.Custom;
73
- }
74
-
75
- export function isFilterInfo(filter : FilterInfo | CustomFilter) : filter is FilterInfo {
76
- return filter && typeof (filter as FilterInfo).key === 'string' && filter.filterType !== FilterType.Custom;
77
- }
78
-
79
- const defaultPredicate: Predicate<any> = () => true;
80
-
81
- export function createFilterFuncs(filters: (FilterInfo | CustomFilter)[]){
82
- return filters.filter(needsFilterCreation).map(createFilterFunc);
83
- }
84
-
85
- export function needsFilterCreation(filter: FilterInfo | CustomFilter): boolean {
86
- if(isCustomFilter(filter)) {
87
- return filter.active !== false;
88
- }
89
- return filter.filterValue != undefined && filter.active !== false;
90
- }
91
-
92
- export function createFilterFunc(filter: FilterInfo | CustomFilter): Predicate<any> {
93
- if(isCustomFilter(filter)) {
94
- return filter.active ? filter.predicate : defaultPredicate;
95
- }
96
- if(filter.filterValue == undefined) {
97
- return defaultPredicate;
98
- }
99
-
100
- const func = filterTypeFuncMap[filter.fieldType][filter.filterType](filter);
101
- if(!func) {
102
- if(filterFactoryMap[filter.filterType]){
103
- return filterFactoryMap[filter.filterType!](filter);
104
- }
105
- }
106
-
107
- const canBeTrueForNull = FalseyValueCanBeIncludedFilterTypes.includes(filter.filterType!)
108
- || (filter.filterType === FilterType.In && filter.filterValue?.some(isBlankValueFilter));
109
-
110
- const getter = filter.filterBy || getFactory(filter.key);
111
- return (rowObj) => {
112
- const value = getter(rowObj);
113
- return ((value == undefined) && !canBeTrueForNull)
114
- ? false
115
- : func(value);
116
- };
117
- }
118
-
119
- export type FilterFunc<T, V = T> = (filterInfo:FilterInfo) => (val:V) => boolean;
120
- export type Range<T> = { Start:T, End:T };
121
-
122
- const FalseyValueCanBeIncludedFilterTypes = [
123
- FilterType.IsNull,
124
- FilterType.NumberNotEqual,
125
- FilterType.DateIsNotOn,
126
- FilterType.StringDoesNotContain,
127
- ] as FilterType[];
128
-
129
- export type FilterFuncs<T extends FilterType > = Partial<Record<T, FilterFunc<any, any>>>;
@@ -1,233 +0,0 @@
1
- import { Predicate } from "@angular/core";
2
- import { merge } from "lodash";
3
- import { Dictionary } from "../interfaces/dictionary";
4
- import { StylerStyle } from "../../utilities/directives/styler";
5
- import { TableBuilderExport } from "./TableBuilderConfig";
6
- import { Path } from "../interfaces/meta-data";
7
-
8
- export interface TableBuilderSettings<T = any> {
9
- headerSettings? : Partial<TableWrapperHeaderSettings>;
10
- footerSettings? : Partial<TableWrapperFooterSettings>;
11
- columnHeaderSettings? : Partial<TableColumnHeaderSettings>;
12
- columnFooterSettings? : Partial<TableColumnFooterSettings>;
13
- tableSettings? : Partial<TableSettings<T>>;
14
- }
15
-
16
- export class GeneralTableSettings<T = any> implements TableBuilderSettings<T> {
17
- headerSettings = new TableWrapperHeaderSettings();
18
- footerSettings = new TableWrapperFooterSettings();
19
- columnHeaderSettings = new TableColumnHeaderSettings();
20
- columnFooterSettings = new TableColumnFooterSettings();
21
- tableSettings = new TableSettings<T>();
22
- }
23
-
24
- export class TableWrapperHeaderSettings {
25
- hideExport = false
26
- hideFilter = false
27
- hideColumnSettings = false
28
- hideHeader = false
29
- hideSort = false
30
- collapse = false
31
- showTitleWhenCollapsed = true;
32
- title: TbTitle | undefined = undefined;
33
- headerHeight: TbSize | undefined = undefined;
34
- }
35
-
36
- export class TableWrapperFooterSettings {
37
- collapse = false
38
- }
39
-
40
- export class TableColumnHeaderSettings {
41
- stickyHeaderRow = true;
42
- noFilters = false;
43
- noHeader = false;
44
- }
45
-
46
- export class TableColumnFooterSettings {
47
- stickyFooterRow?: boolean = undefined;
48
- }
49
-
50
- export class TableSettings<T = any> {
51
- tableId?: string | undefined = undefined;
52
- trackBy?: string | undefined | ((item: T) => any) = undefined;
53
- includeIndexColumn = false;
54
- indexColumnWidth?: TbSize | undefined = undefined;
55
- includeSelectionColumn = false;
56
- selectionColumnWidth?: TbSize | undefined = undefined;
57
- usePaginator: boolean | undefined = undefined;
58
- useVirtualScroll: boolean | undefined = undefined;
59
- paginatorSettings: Partial<PaginatorOptions> | undefined = undefined;
60
- virtualScrollSettings: Partial<VirtualScrollOptions> | undefined = undefined;
61
- rowHeight: TbSize | undefined = undefined;
62
- groupHeaderHeight?: TbSize = undefined;
63
- minColumnWidth: TbSize | undefined;
64
- rowClasses: Dictionary<Predicate<T> | true> | undefined;
65
- rowStyles: StylerStyle<T> | undefined;
66
- rowClick: ((row: T, event?: MouseEvent) => void) | undefined = undefined;
67
- exportSettings: TableBuilderExport | undefined = undefined;
68
- groupBySettings?: {
69
- key: Path<T>
70
- expanded?: boolean;
71
- }[] = [];
72
- }
73
-
74
- export class PersistedTableSettings {
75
- constructor(tableSettings?: NonFunctionProperties<PersistedTableSettings>){
76
- if(tableSettings){
77
- this.collapseHeader = tableSettings.collapseHeader;
78
- this.collapseFooter = tableSettings.collapseFooter;
79
- }
80
- }
81
-
82
- merge(tableSettings?: TableBuilderSettings){
83
- const newPts = new PersistedTableSettings(this);
84
- if(tableSettings){
85
- newPts.collapseHeader = tableSettings.headerSettings?.collapse ?? newPts.collapseHeader;
86
- newPts.collapseFooter = tableSettings.footerSettings?.collapse ?? newPts.collapseFooter;
87
- }
88
- return newPts;
89
- }
90
-
91
- collapseHeader = false;
92
- collapseFooter = false;
93
- }
94
-
95
- export class NotPersistedTableSettings {
96
- merge(tableSettings?: TableBuilderSettings){
97
- const newNpts = merge(this, new NotPersistedTableSettings());
98
- if(tableSettings){
99
- newNpts.hideExport = tableSettings.headerSettings?.hideExport ?? newNpts.hideExport;
100
- newNpts.hideColumnSettings = tableSettings.headerSettings?.hideColumnSettings ?? newNpts.hideColumnSettings;
101
- newNpts.hideFilter = tableSettings.headerSettings?.hideFilter ?? newNpts.hideFilter;
102
- newNpts.hideSort = tableSettings.headerSettings?.hideSort ?? newNpts.hideSort;
103
- newNpts.showTitleWhenHeaderCollapsed = tableSettings.headerSettings?.showTitleWhenCollapsed ?? newNpts.showTitleWhenHeaderCollapsed;
104
- newNpts.title = tableSettings.headerSettings?.title ?? newNpts.title;
105
- newNpts.hideHeader = tableSettings.headerSettings?.hideHeader ?? newNpts.hideHeader;
106
- newNpts.hideColumnHeaderFilters = tableSettings.columnHeaderSettings?.noFilters ?? newNpts.hideColumnHeaderFilters;
107
- newNpts.hideColumnHeader = tableSettings.columnHeaderSettings?.noHeader ?? newNpts.hideColumnHeader;
108
- newNpts.usePaginator = tableSettings.tableSettings?.usePaginator ?? newNpts.usePaginator;
109
- newNpts.useVirtualScroll = tableSettings.tableSettings?.useVirtualScroll != undefined ? tableSettings.tableSettings?.useVirtualScroll :
110
- tableSettings.tableSettings?.virtualScrollSettings ? true
111
- : newNpts.useVirtualScroll;
112
- newNpts.rowHeight = tableSettings.tableSettings?.rowHeight ?? newNpts.rowHeight;
113
- newNpts.headerHeight = tableSettings.headerSettings?.headerHeight ?? newNpts.headerHeight;
114
- newNpts.groupHeaderHeight = tableSettings.tableSettings?.groupHeaderHeight ?? newNpts.groupHeaderHeight;
115
- newNpts.minColumnWidth = tableSettings.tableSettings?.minColumnWidth ?? newNpts.minColumnWidth;
116
- newNpts.rowClasses = tableSettings.tableSettings?.rowClasses ?? newNpts.rowClasses;
117
- newNpts.rowStyles = tableSettings.tableSettings?.rowStyles ?? newNpts.rowStyles;
118
- newNpts.rowClick = tableSettings.tableSettings?.rowClick ?? newNpts.rowClick;
119
- newNpts.exportSettings = tableSettings.tableSettings?.exportSettings ?? newNpts.exportSettings;
120
- newNpts.groupBySettings = tableSettings.tableSettings?.groupBySettings ?? newNpts.groupBySettings ?? [];
121
- newNpts.includeIndexColumn = tableSettings.tableSettings?.includeIndexColumn ?? newNpts.includeIndexColumn;
122
- newNpts.indexColumnWidth = tableSettings.tableSettings?.indexColumnWidth ?? newNpts.indexColumnWidth;
123
- newNpts.includeSelectionColumn = tableSettings.tableSettings?.includeSelectionColumn ?? newNpts.includeSelectionColumn;
124
- newNpts.selectionColumnWidth = tableSettings.tableSettings?.selectionColumnWidth ?? newNpts.selectionColumnWidth;
125
-
126
- if(tableSettings.tableSettings?.virtualScrollSettings){
127
- const currVirt = tableSettings.tableSettings?.virtualScrollSettings || newNpts.virtualSettings;
128
- if(!currVirt.headerHeight){
129
- currVirt.headerHeight = tableSettings.headerSettings?.headerHeight || DefaultVirtualScrollOptions.headerHeight;
130
- }
131
- if(!currVirt.rowHeight){
132
- currVirt.rowHeight = tableSettings.tableSettings?.rowHeight || DefaultVirtualScrollOptions.rowHeight;
133
- }
134
- newNpts.virtualSettings = { ...new VirtualScrollOptions(), ...currVirt }
135
- } else newNpts.virtualSettings ??= new VirtualScrollOptions();
136
- if(tableSettings.tableSettings?.paginatorSettings){
137
- const currPag = tableSettings.tableSettings?.paginatorSettings ? merge(newNpts.paginatorSettings, tableSettings.tableSettings?.paginatorSettings) : (newNpts.paginatorSettings ?? new PaginatorOptions());
138
- currPag.includeAllInOptions = (currPag.defaultAll && currPag.includeAllInOptions !== false) || currPag.includeAllInOptions;
139
- newNpts.paginatorSettings = { ...new PaginatorOptions(), ...currPag };
140
- } else newNpts.paginatorSettings ??= new PaginatorOptions();
141
- }
142
- return newNpts;
143
- }
144
- hideExport = false
145
- hideFilter = false
146
- hideColumnSettings = false
147
- hideSort = false
148
- showTitleWhenHeaderCollapsed = true;
149
- title: TbTitle | undefined = undefined;
150
- hideHeader = false
151
- hideColumnHeaderFilters = false;
152
- hideColumnHeader = false;
153
- usePaginator: boolean = true;
154
- useVirtualScroll: boolean = false;
155
- paginatorSettings: PaginatorOptions | undefined = undefined;
156
- virtualSettings: VirtualScrollOptions | undefined = undefined;
157
- groupHeaderHeight?: TbSize = undefined;
158
- rowHeight?: TbSize | undefined;
159
- headerHeight?: TbSize = undefined;
160
- minColumnWidth?: TbSize | undefined;
161
- rowClasses?: Dictionary<Predicate<any> | true> | undefined;
162
- rowStyles?: StylerStyle | undefined;
163
- rowClick?: ((row: any, event?: MouseEvent) => void) | undefined = undefined;
164
- exportSettings: TableBuilderExport | undefined = undefined;
165
- groupBySettings?: {
166
- key: Path<any>
167
- expanded?: boolean;
168
- }[] = [];
169
- includeIndexColumn = false;
170
- indexColumnWidth?: TbSize | undefined = undefined;
171
- includeSelectionColumn = false;
172
- selectionColumnWidth?: TbSize | undefined = undefined;
173
- }
174
-
175
- export class VirtualScrollOptions {
176
- rowHeight: TbSize = 48;
177
- enforceRowHeight = true;
178
- headerHeight: TbSize = 56;
179
- enforceHeaderHeight = true;
180
- amountOfVisibleItems = 10;
181
- /**
182
- * This will win over `amountOfVisibleItems`
183
- */
184
- maxViewPortHeight: TbSize | undefined = undefined;
185
- /**
186
- * Will try to bring the table to the bottom of the screen
187
- * If `amountOfVisibleItems` is set that will be the minimum number of rows
188
- * If `maxViewPortHeight` is set that will be the max table size
189
- */
190
- dynamicHeight = false;
191
-
192
- /**
193
- * If `dynamicHeight` is set to true, we will try to add this amount of space from the bottom of view port
194
- */
195
- dynamicalHeightBuffer: TbSize = 0;
196
- }
197
-
198
- export class PaginatorOptions {
199
- pageSize: number | undefined = undefined;
200
- defaultAll = false;
201
- includeAllInOptions = false;
202
- }
203
-
204
- export const DefaultVirtualScrollOptions = {
205
- rowHeight: 48,
206
- headerHeight: 56,
207
- };
208
-
209
- type NonFunctionPropertyNames<T> = {
210
- [K in keyof T]: T[K] extends Function ? never : K
211
- }[keyof T];
212
-
213
- export type NonFunctionProperties<T> = Pick<T, NonFunctionPropertyNames<T>>;
214
- export type TbSize = number | `${number}${'px' | 'rem' }`;
215
- export type TbTitle = {
216
- text: string;
217
- level?: 1 | 2 | 3 | 4 | 5 | 6;
218
- styles?: Dictionary<string>;
219
- }
220
-
221
- export function parseTbSizeToPixels(size?: TbSize) {
222
- if(!size) return undefined;
223
- if(typeof size === 'number') return size;
224
- if(size.endsWith('px')) return Number(size.replace('px', ''));
225
- if(size.endsWith('rem')) {
226
- const htmlElement = document.documentElement;
227
- const remSize = window.getComputedStyle(htmlElement).getPropertyValue('font-size');
228
- const remSizeNum = Number(remSize.replace('px', ''));
229
- const num = Number(size.replace('rem', ''));
230
- return num * remSizeNum;
231
- }
232
- return undefined;
233
- }
@@ -1,105 +0,0 @@
1
- import { isObservable, Observable } from 'rxjs';
2
- import { MetaData, FieldType, ReportDef } from '../interfaces/meta-data';
3
- import { map } from 'rxjs/operators';
4
- import { GeneralTableSettings, TableBuilderSettings } from './table-builder-general-settings';
5
- import { defaultShareReplay } from '../../rxjs';
6
- import { initIndexSymbol } from '../components/table-container/table-container.helpers/sort-state.helpers';
7
- import { createDataCleaners } from '../components/table-container/table-container.helpers/data-state.helpers';
8
- import { assertInInjectionContext, computed, inject, Injector, isSignal, signal, Signal } from '@angular/core';
9
- import { toSignal } from '@angular/core/rxjs-interop';
10
- import { TableContainerComponent } from '../components/table-container/table-container.component';
11
-
12
- export class TableBuilder<T = any> {
13
- #$metaData!: Signal<MetaData<T>[]>;
14
- #$data!: Signal<T[]>;
15
- #$settings! : Signal<TableBuilderSettings>;
16
-
17
- _container = signal<TableContainerComponent | undefined>(undefined);
18
- container = this._container.asReadonly();
19
- $metaData = computed(() => this.$initialized() ? this.#$metaData() : undefined);
20
- $settings = computed(() => this.$initialized() ? this.#$settings() : undefined);
21
- #$metaNeedsPrep = signal(false);
22
- #$dataIsObservable = signal(false);
23
- #$settingsIsObservable = signal(false);
24
- #$needsPrep = computed(() => this.#$dataIsObservable() || this.#$metaNeedsPrep() || this.#$settingsIsObservable());
25
- $initialized = signal(false);
26
-
27
- constructor(
28
- private data: TableBuilderArgs<T[]>,
29
- private metaData?: TableBuilderArgs<MetaData<T, any>[]>,
30
- private settings: TableBuilderArgs<TableBuilderSettings<T>> = new GeneralTableSettings()
31
- ) {
32
- if(isObservable(data)){
33
- this.#$dataIsObservable.set(true);
34
- } else {
35
- this.#$data = isSignal( data ) ? data : signal(data);
36
- }
37
- if(isObservable(metaData) || !metaData){
38
- this.#$metaNeedsPrep.set(true);
39
- } else {
40
- this.#$metaData = isSignal( metaData ) ? metaData : signal(metaData);
41
- }
42
- if(isObservable(settings)){
43
- this.#$settingsIsObservable.set(true);
44
- } else {
45
- this.#$settings = isSignal( settings ) ? settings : signal(settings);
46
- }
47
- if(!this.#$needsPrep()){
48
- this.$initialized.set(true);
49
- } else {
50
- try {
51
- assertInInjectionContext(TableBuilder);
52
- const injector = inject(Injector);
53
- this.prep(injector);
54
- } catch { }
55
- }
56
- }
57
- prep(injector: Injector){
58
- if(this.#$settingsIsObservable()){
59
- this.#$settings = toSignal(this.settings as any, { injector, requireSync: true });
60
- }
61
- if(this.#$dataIsObservable()){
62
- this.#$data = toSignal(this.data as any, { injector, initialValue: [] });
63
- }
64
- if(this.#$metaNeedsPrep()){
65
- if(this.metaData){
66
- this.#$metaData = toSignal(this.metaData as any, { injector, initialValue: [] });
67
- } else {
68
- this.#$metaData = computed(() => this.createMetaData(this.#$data()[0]))
69
- }
70
- }
71
- this.$initialized.set(true);
72
- }
73
- #dataCleaners = computed(() => {
74
- const metaData = this.$metaData();
75
- if(!metaData) return undefined;
76
- return createDataCleaners(metaData);
77
- });
78
- $data = computed(() => {
79
- const data = this.#$data();
80
- const cleaners = this.#dataCleaners();
81
- if(!data || !cleaners) return [];
82
- const cleanedData = data.map((data, i) => {
83
- const cleaned = cleaners(data);
84
- cleaned[initIndexSymbol] = i;
85
- return cleaned;
86
- })
87
- return cleanedData;
88
- });
89
-
90
- createMetaData(obj: any): MetaData [] {
91
- return Object.keys(obj ?? {})
92
- .map( key => ({
93
- key,
94
- fieldType: FieldType.Unknown,
95
- order: -1
96
- }));
97
- }
98
- }
99
-
100
- export const CreateTableBuilder = (reportDef$: Observable<ReportDef> ): TableBuilder => {
101
- reportDef$ = reportDef$.pipe(defaultShareReplay());
102
- return new TableBuilder(reportDef$.pipe(map( r => r.data) ), reportDef$.pipe( map( r => r.metaData) ));
103
- };
104
-
105
- type TableBuilderArgs<T> = T | Observable<T> | Signal<T>;
@@ -1,109 +0,0 @@
1
- import { Dictionary } from "../interfaces/dictionary";
2
- import { FieldType, MetaData, SortDef } from "../interfaces/meta-data";
3
- import { isCustomFilter, isFilterInfo } from "./filter-info";
4
- import { keysToDelete, PersistedTableState, TableState } from "./TableState";
5
- import { TableBuilderSort } from "../components/table-container/table-container.helpers/sort-state.helpers";
6
-
7
- export const orderedStateVisibleMetaData = (state: TableState) => {
8
- const ordered = orderStateMetaData(state);
9
- const orderedVisible = ordered
10
- .filter(metaData => !state.hiddenKeys.includes(metaData.key) && state.metaData[metaData.key].fieldType !== FieldType.Hidden);
11
- return orderedVisible;
12
- }
13
-
14
- export const orderedCodeVisibleMetaData = (state: TableState) =>
15
- orderStateMetaData(state).filter(md => md.fieldType !== FieldType.Hidden);
16
-
17
- export const orderStateMetaData = (state:TableState) => {
18
- return orderMetaData(state.metaData, state.userDefined.order);
19
- }
20
-
21
- export const orderMetaData = (metaData: Dictionary<MetaData>, userDefined: Dictionary<number>) => {
22
- const userOrderArr = Object.entries(userDefined);
23
- return userOrderArr.length ?
24
- Object.values(metaData).sort((a, b) => {
25
- const orderA = userDefined[a.key];
26
- const orderB = userDefined[b.key];
27
- return order(orderA, orderB);
28
- })
29
- :
30
- Object.values(metaData).sort((a, b) => {
31
- const orderA = a.order;
32
- const orderB = b.order;
33
- return order(orderA, orderB);
34
- })
35
- }
36
-
37
- export function order(orderA: number | undefined, orderB: number | undefined){
38
- if(orderA == null && orderB == null) {
39
- return 0;
40
- }
41
- if(orderA == null) {
42
- return 1;
43
- }
44
- if(orderB == null) {
45
- return -1;
46
- }
47
- return orderA - orderB;
48
- }
49
-
50
- export function cleanPersistedState(state: TableState, pState: PersistedTableState) {
51
- const metas = Object.values(state.metaData);
52
- const filters = Object.values(pState.filters).filter(fltr => isCustomFilter(fltr) || metas.some(m => m.key === fltr.key)).reduce((obj: any, filter) => {
53
- obj[filter.filterId!] = pState.filters[filter.filterId!];
54
- if(isFilterInfo(filter)){
55
- const metaData = state.metaData[filter.key];
56
- if(metaData) {
57
- filter.filterBy = metaData.filterLogic?.filterBy === 'use map' ? metaData.map : metaData.filterLogic?.filterBy;
58
- }
59
- }
60
- return obj;
61
- }, {});
62
- const sorted = pState.sorted.filter(s => metas.some(m => m.key === s.active));
63
- return ({ ...pState, filters, sorted })
64
- }
65
-
66
- export const mapSaveableState = (s: PersistedTableState) => {
67
- const savableState = { ...s } as Partial<TableState>;
68
- keysToDelete.forEach(key => delete savableState[key]);
69
- return savableState as PersistedTableState;
70
- }
71
-
72
- export const createPreSort = (metaDatas: Dictionary<MetaData>): TableBuilderSort[] => {
73
- return Object.values(metaDatas).filter(( metaData ) : metaData is MetaData & {preSort: SortDef} => !!metaData.preSort)
74
- .sort(({ preSort: ps1 }, { preSort: ps2 } ) => (ps1.precedence || Number.MAX_VALUE) - ( ps2.precedence || Number.MAX_VALUE))
75
- .map(( { key, preSort: { direction } } ) => ({ active: key, direction }))
76
- }
77
-
78
- export const mergeMeta = (orig: MetaData, merge: MetaData): MetaData => {
79
- return {
80
- key: orig.key,
81
- displayName: merge.displayName ?? orig.displayName,
82
- fieldType: merge.fieldType || orig.fieldType,
83
- additional: { ...orig.additional, ...merge.additional },
84
- order: merge.order ?? orig.order,
85
- preSort: merge.preSort ?? orig.preSort,
86
- width: merge.width ?? orig.width,
87
- noExport: merge.noExport || orig.noExport,
88
- noFilter: merge.noFilter || orig.noFilter,
89
- map: merge.map ?? orig.map,
90
- click: merge.click ?? orig.click,
91
- classes: merge.classes ?? orig.classes,
92
- noSort: merge.noSort ?? orig.noSort,
93
- template: merge.template ?? orig.template,
94
- toolTip: merge.toolTip ?? orig.toolTip,
95
- useIcon: merge.useIcon ?? orig.useIcon,
96
- filterLogic: merge.filterLogic ?? orig.filterLogic,
97
- sortLogic: merge.sortLogic ?? orig.sortLogic,
98
- groupByLogic: merge.groupByLogic ?? orig.groupByLogic,
99
- } as MetaData;
100
- }
101
-
102
- export const initializeOrder = (state:TableState, mds: Dictionary<MetaData>) : Dictionary<number> => {
103
- const viewableMetaDataArr = Object.values(mds).filter(a => a.fieldType !== FieldType.Hidden);
104
- let userDefinedOrder = state.userDefined.order;
105
- if(viewableMetaDataArr.some(meta => userDefinedOrder[meta.key] == null)){
106
- return {}
107
- }
108
- return userDefinedOrder;
109
- }