@one-paragon/angular-utilities 2.8.4 → 2.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,85 +0,0 @@
1
- import { FilterFunc, FilterFuncs, FilterInfo, Range } from '../classes/filter-info';
2
- import { DateFilterTypes, DateTimeFilterTypes, FilterType } from '../enums/filterTypes';
3
- import { FieldType } from '../interfaces/meta-data';
4
- import { splitOutBlankFilter } from '../services/all-values-filter-creator.service';
5
- import { isNull } from './null-filter-function';
6
-
7
-
8
- const dateIsOnFunc: FilterFunc<Date> = (filterInfo:FilterInfo) => {
9
- const isOnVal = new Date( filterInfo.filterValue).getTime();
10
- const clean = filterInfo.fieldType === FieldType.Date ? (a, b) => b : cleanDateTime
11
- return ((val) => clean(filterInfo, val).getTime() === isOnVal);
12
- }
13
-
14
- const dateIsNotOnFunc: FilterFunc<Date> = (filterInfo:FilterInfo) => {
15
- const isNotOnVal = new Date( filterInfo.filterValue).getTime();
16
- const clean = filterInfo.fieldType === FieldType.Date ? (a, b) => b : cleanDateTime
17
- return ((val) => clean(filterInfo, val).getTime() !== isNotOnVal);
18
- }
19
-
20
- const dateIsOnOrAfterFunc: FilterFunc<Date> = (filterInfo:FilterInfo) => {
21
- const afterVal = new Date( filterInfo.filterValue).getTime();
22
- const clean = filterInfo.fieldType === FieldType.Date ? (a, b) => b : cleanDateTime
23
- return ((val) => clean(filterInfo, val).getTime() >= afterVal);
24
- }
25
-
26
- const dateIsOnOrBeforeFunc: FilterFunc<Date> = (filterInfo:FilterInfo) => {
27
- const beforeVal = new Date( filterInfo.filterValue).getTime();
28
- const clean = filterInfo.fieldType === FieldType.Date ? (a, b) => b : cleanDateTime
29
- return ((val) => clean(filterInfo, val).getTime() <= beforeVal);
30
- }
31
-
32
- const dateIsInFunc: FilterFunc<Date[], Date> = (filterInfo:FilterInfo) => {
33
- const { blankFilter, values } = splitOutBlankFilter(filterInfo.filterValue as Date[]);
34
- const filterVals = values.map(v => new Date(v).getTime());
35
- const clean = filterInfo.fieldType === FieldType.Date ? (a, b) => b : cleanDateTime;
36
-
37
- const basicFunc = (val) => filterVals.some((f) => f === val);
38
- const func = blankFilter ? ((val) => blankFilter(val) || basicFunc(val)) : basicFunc;
39
-
40
- return ((val) => {
41
- const d = clean(filterInfo, val)?.getTime();
42
- return func(d);
43
- });
44
- }
45
-
46
- const dateBetweenFunc: FilterFunc<Range<Date>, Date> = (filterInfo:FilterInfo) => {
47
- const startVal = new Date(filterInfo.filterValue.Start);
48
- const endVal = new Date(filterInfo.filterValue.End);
49
- const clean = filterInfo.fieldType === FieldType.Date ? (a, b) => b : cleanDateTime
50
- return (
51
- (val) => {
52
- const cleanedVal = clean(filterInfo, val);
53
- return cleanedVal >= startVal && cleanedVal <= endVal;
54
- });
55
- }
56
-
57
- const cleanDateTime = (filterInfo:FilterInfo, val: Date) => {
58
- if(!!DateFilterFuncs[filterInfo.filterType]){
59
- const d = new Date(val);
60
- d.setHours(0, 0, 0, 0);
61
- return d;
62
- }
63
- return val;
64
- }
65
-
66
- export const DateFilterFuncs: FilterFuncs<DateFilterTypes> = {
67
- [FilterType.DateIsOn]: dateIsOnFunc,
68
- [FilterType.DateIsNotOn]: dateIsNotOnFunc,
69
- [FilterType.DateOnOrAfter]: dateIsOnOrAfterFunc,
70
- [FilterType.DateOnOrBefore]: dateIsOnOrBeforeFunc,
71
- [FilterType.DateBetween]: dateBetweenFunc,
72
- [FilterType.In]: dateIsInFunc,
73
- [FilterType.IsNull]: isNull,
74
- };
75
-
76
- export const DateTimeFilterFuncs: FilterFuncs<DateTimeFilterTypes> = {
77
- ...DateFilterFuncs,
78
- [FilterType.DateTimeIsAt]: dateIsOnFunc,
79
- [FilterType.DateTimeIsNotAt]: dateIsNotOnFunc,
80
- [FilterType.DateTimeAtOrAfter]: dateIsOnOrAfterFunc,
81
- [FilterType.DateTimeAtOrBefore]: dateIsOnOrBeforeFunc,
82
- [FilterType.DateTimeBetween]: dateBetweenFunc,
83
- [FilterType.In]: dateIsInFunc,
84
- [FilterType.IsNull]: isNull,
85
- };
@@ -1,11 +0,0 @@
1
- export function downloadData(data: string, filename: string, mimeType: string) {
2
- const url = URL.createObjectURL(new Blob([data], { type: mimeType }));
3
- const downloadLink = document.createElement('a');
4
- downloadLink.download = filename;
5
- downloadLink.href = url;
6
- downloadLink.style.display = 'none';
7
- document.body.appendChild(downloadLink);
8
- downloadLink.click();
9
- document.body.removeChild(downloadLink);
10
- URL.revokeObjectURL(url);
11
- }
@@ -1,9 +0,0 @@
1
- import { FilterFunc, FilterInfo } from '../classes/filter-info';
2
-
3
- export const isNull:FilterFunc<boolean, any> = (filterInfo:FilterInfo) => {
4
- const func = filterInfo.filterValue ?
5
- (val: any) => val == null || val === ''
6
- :
7
- (val: any) => val != null && val !== '';
8
- return func;
9
- }
@@ -1,47 +0,0 @@
1
- import { Range, FilterFunc, FilterInfo, FilterFuncs } from '../classes/filter-info';
2
- import { FilterType, NumberFilterTypes } from '../enums/filterTypes';
3
- import { splitOutBlankFilter } from '../services/all-values-filter-creator.service';
4
- import { isNull } from './null-filter-function';
5
-
6
- type NumberFilterFunc = FilterFunc<number>
7
-
8
- const numberEqalsFunc:NumberFilterFunc = (filterInfo : FilterInfo<number>) => (val: number): boolean => {
9
- return val === filterInfo.filterValue;
10
- }
11
-
12
- const numberNotEqualFunc:NumberFilterFunc = (filterInfo : FilterInfo<number>) => (val: number): boolean => {
13
- return val !== filterInfo.filterValue;
14
- }
15
-
16
- const numberGreaterThanFunc:NumberFilterFunc = (filterInfo : FilterInfo<number>) => (val: number): boolean => {
17
- return val > filterInfo.filterValue;
18
- }
19
-
20
- const numberLessThanFunc:NumberFilterFunc = (filterInfo : FilterInfo<number>) => (val: number): boolean => {
21
- return val < filterInfo.filterValue;
22
- }
23
-
24
- const numberBetweenFunc:FilterFunc<Range<number>, number> = (filterInfo : FilterInfo) => {
25
- const startVal = Number(filterInfo.filterValue.Start);
26
- const endVal = Number(filterInfo.filterValue.End);
27
- return ((val) => (val > startVal) && (val < endVal));
28
- }
29
-
30
- export const multipleNumberValuesEqualsFunc:FilterFunc<number[], number> = (filterInfo:FilterInfo) => {
31
- const { blankFilter, values } = splitOutBlankFilter(filterInfo.filterValue as number[]);
32
-
33
- const basicFunc = (val: number) => values.some((s) => val === s);
34
- const func = blankFilter ? ((val) => blankFilter(val) || basicFunc(val)) : basicFunc;
35
-
36
- return func;
37
- }
38
-
39
- export const NumberFilterFuncs: FilterFuncs<NumberFilterTypes> = {
40
- [FilterType.NumberEquals]: numberEqalsFunc,
41
- [FilterType.NumberNotEqual]: numberNotEqualFunc,
42
- [FilterType.NumberGreaterThan]: numberGreaterThanFunc,
43
- [FilterType.NumberLessThan]: numberLessThanFunc,
44
- [FilterType.NumberBetween]: numberBetweenFunc,
45
- [FilterType.IsNull]: isNull,
46
- [FilterType.In]: multipleNumberValuesEqualsFunc,
47
- };
@@ -1,80 +0,0 @@
1
- import { Predicate } from "@angular/core";
2
- import { TableBuilderSort } from "../components/table-container/table-container.helpers/sort-state.helpers";
3
-
4
- export function sortData<T>(data: T[], sorted: TableBuilderSort[]): T[] {
5
- return data.sort(compareT(sorted));
6
- }
7
-
8
- export function filterData<T>(data: T[], filters: Predicate<T>[], resetAll = false){
9
- if(filters.length === 0){
10
- if(resetAll){
11
- for(let index = 0; index < data.length; index++) {
12
- const element = data[index];
13
- element[tbNoShowSymbol] = false;
14
- }
15
- }
16
- return data;
17
- }
18
- for(let index = 0; index < data.length; index++) {
19
- const element = data[index];
20
- const hide = !filters.every(filter => filter(element));
21
- if(hide || resetAll){
22
- element[tbNoShowSymbol] = hide;
23
- }
24
- }
25
- return data;
26
- }
27
-
28
- export const tbNoShowSymbol = Symbol('tb_no_show');
29
-
30
- function compareT<T>(criteria: TableBuilderSort[]) {
31
- const transforms = criteria.reduce((acc, c) => {
32
- acc[c.active] = {
33
- transform: c.sortBy ? c.sortBy : getFactory(c.active), nulls: c.nulls === 'first' ? -1 : 1 };
34
- return acc;
35
- }, {} as Record<string, { transform: (t: T) => any, nulls: 1 | -1}>);
36
-
37
- return function (a: T, b: T): number {
38
- for(let index = 0; index < criteria.length; index++) {
39
- const c = criteria[index];
40
- const d = transforms[c.active];
41
- const nullValue = d.nulls;
42
- if(a == null) {
43
- if(b == null) return 0;
44
- return nullValue;
45
- }
46
- if(b == null) return -nullValue;
47
- const transform = d.transform;
48
- const aVal = transform(a);
49
- const bVal = transform(b);
50
- if(aVal == null) {
51
- if(bVal == null) return 0;
52
- return nullValue;
53
- }
54
-
55
- if(bVal == null) return -nullValue;
56
- if(aVal < bVal) return c.direction === 'asc' ? -1 : 1;
57
- if(aVal > bVal) return c.direction === 'asc' ? 1 : -1;
58
- }
59
- return 0;
60
- }
61
- }
62
-
63
- export function getFactory(b: string){
64
- if(typeof b !== 'string') return (a) => a[b];
65
- if(!b.includes('.')) return (a) => {
66
- if(!a) return a;
67
- return a[b];
68
- };
69
- const arr = b.split('.');
70
- return (a) => {
71
- let val = a;
72
- if(!a) return a;
73
- for(let index = 0; index < arr.length; index++) {
74
- val = val[arr[index]];
75
- if(val == undefined) return undefined;
76
- if(typeof val !== 'object' && index + 1 < arr.length) return undefined;
77
- }
78
- return val;
79
- }
80
- }
@@ -1,59 +0,0 @@
1
- import { FilterFunc, FilterFuncs, FilterInfo } from '../classes/filter-info';
2
- import { EnumFilterTypes, FilterType, StringFilterTypes } from '../enums/filterTypes';
3
- import { splitOutBlankFilter } from '../services/all-values-filter-creator.service';
4
- import { isNull } from './null-filter-function';
5
-
6
-
7
- const stringEqualFunc:FilterFunc<string> = (filterInfo:FilterInfo) => {
8
- const equalsVal = prepareForStringCompare(filterInfo.filterValue);
9
- return ((val) => prepareForStringCompare(val) === equalsVal );
10
- }
11
-
12
- const stringContainsFunc:FilterFunc<string> = (filterInfo:FilterInfo) => {
13
- const containsVal = prepareForStringCompare(filterInfo.filterValue);
14
- return ((val) => prepareForStringCompare(val).includes(containsVal));
15
- }
16
-
17
- const stringDoesNotContainFunc:FilterFunc<string> = (filterInfo:FilterInfo) => {
18
- const doesNotContainVal = prepareForStringCompare(filterInfo.filterValue);
19
- return ((val) => !prepareForStringCompare(val)?.includes(doesNotContainVal));
20
- }
21
-
22
- const stringStartsWithFunc:FilterFunc<string> = (filterInfo:FilterInfo) => {
23
- const startsWith = prepareForStringCompare(filterInfo.filterValue);
24
- return ((val) => prepareForStringCompare(val).startsWith(startsWith));
25
- }
26
-
27
- const stringEndsWithFunc:FilterFunc<string> = (filterInfo:FilterInfo) => {
28
- const startsWith = prepareForStringCompare(filterInfo.filterValue);
29
- return ((val) => prepareForStringCompare(val).endsWith(startsWith));
30
- }
31
-
32
- const multipleStringValuesEqualsFunc:FilterFunc<string[], string> = (filterInfo:FilterInfo) => {
33
- const { blankFilter, values } = splitOutBlankFilter(filterInfo.filterValue as string[]);
34
-
35
- const filterVals = values.map((v) => prepareForStringCompare(v));
36
- const basicFunc = (val: string) => filterVals.some((s) => val === s);
37
- const func = blankFilter ? ((val) => blankFilter(val) || basicFunc(val)) : basicFunc;
38
- return ((val) => {
39
- const v = prepareForStringCompare(val);
40
- return func(v);
41
- });
42
- }
43
-
44
- export const StringFilterFuncs: FilterFuncs<StringFilterTypes> = {
45
- [FilterType.StringEquals]: stringEqualFunc,
46
- [FilterType.StringContains]: stringContainsFunc,
47
- [FilterType.StringDoesNotContain]: stringDoesNotContainFunc,
48
- [FilterType.StringStartWith]: stringStartsWithFunc,
49
- [FilterType.StringEndsWith]: stringEndsWithFunc,
50
- [FilterType.IsNull]: isNull,
51
- [FilterType.In]: multipleStringValuesEqualsFunc,
52
- };
53
-
54
- export const EnumFilterFuncs: FilterFuncs<EnumFilterTypes> = {
55
- [FilterType.IsNull]: isNull,
56
- [FilterType.In]: multipleStringValuesEqualsFunc,
57
- };
58
-
59
- export const prepareForStringCompare = (val: any): string => (val?.toString().trim().toLowerCase());
@@ -1,9 +0,0 @@
1
- import { CustomCellDirective } from "../directives/custom-cell-directive";
2
- import { CustomHeaderDirective } from "../directives/custom-header-directive";
3
- import { MetaData } from "./meta-data";
4
-
5
- export interface ColumnInfo {
6
- metaData: MetaData;
7
- customCell?: CustomCellDirective;
8
- customHeader?: CustomHeaderDirective;
9
- }
@@ -1,3 +0,0 @@
1
- export interface Dictionary<T> {
2
- [key: string]: T;
3
- }
@@ -1,279 +0,0 @@
1
- import { Dictionary } from './dictionary';
2
- import { Predicate, TemplateRef } from '@angular/core';
3
- import { TableBuilderExport } from '../classes/TableBuilderConfig';
4
- import { QueryParamsHandling } from '@angular/router';
5
- import { StylerStyle } from '../../utilities/directives/styler';
6
-
7
- export enum FieldType {
8
- Unknown = 0,
9
- Date = 1,
10
- ImageUrl = 3,
11
- Currency = 4,
12
- Array = 5,
13
- Hidden = 6,
14
- Number = 7,
15
- String = 8,
16
- Boolean = 9,
17
- PhoneNumber = 10,
18
- Enum = 12,
19
- DateTime = 13,
20
- NotMapped = 14,
21
- }
22
-
23
- export enum SortDirection {
24
- asc= 'asc',
25
- desc= 'desc'
26
- }
27
-
28
- export enum Target {
29
- Blank = '_blank',
30
- Self = '_self',
31
- Parent = '_parent',
32
- Top = '_top'
33
- }
34
-
35
- interface BaseMeta <T = any> {
36
- displayName?: string;
37
- order?: number;
38
- preSort?: SortDef;
39
- sortLogic?: {
40
- /**
41
- * defaults to last
42
- */
43
- nulls?: 'first' | 'last';
44
- sortBy?: ((t: T) => any) | 'use map';
45
- }
46
- noSort?: boolean;
47
- width?: string;
48
- noExport?: boolean;
49
- filterLogic?: {
50
- filterBy?: ((t: T) => any) | 'use map';
51
- /**
52
- * defaults to the MetaData's Field type
53
- */
54
- filterType?: FieldType;
55
- },
56
- noFilter?: boolean;
57
- groupByLogic?: {
58
- groupBy?: ((t:T) => any) | 'use map',
59
- /**
60
- * It will be called with the groupBy value. This will be the type of value table builder uses for the column unless groupBy is a function,
61
- * in which case groupByHeader will be called with the value returned by groupBy.
62
- */
63
- groupByHeader?: (groupByVal: any) => string,
64
- };
65
- click?: (element: T, key?: string, event?: MouseEvent ) => void;
66
- template?: TemplateRef<any>;
67
- classes?: Dictionary<Predicate<T> | true>;
68
- toolTip?: string | ((t:T) => string);
69
- useIcon?: boolean;
70
- map? : (t: T) => any;
71
- }
72
- export type Path<T, U = never, P = never> =
73
- (T extends P ? never : T extends object ?
74
- { [K in keyof T]: K extends string | number ? `${K}` | (T[K] extends (Array<any> | undefined) ? `${K}.${keyof Array<any> & (string | number)}` : `${K}.${Path<T[K], T[K], P | U >}`) : never; }[keyof T]
75
- : never);
76
-
77
- export interface BaseMappedMetaData<T = any, AdditionalFields extends string[] = []> extends BaseMeta<T> {
78
- key: (Path<T> | AdditionalFields[number]) & string;
79
- /**
80
- * if used with map, `mapItem` will only be used where the row is not available, ex. group header
81
- */
82
- mapItem?: (i: any) => any;
83
- }
84
-
85
- export interface MappedMetaData<T = any, AdditionalFields extends string[] = []> extends BaseMappedMetaData<T, AdditionalFields> {
86
- fieldType: FieldType.String | FieldType.PhoneNumber | FieldType.ImageUrl | FieldType.Hidden | FieldType.Unknown;
87
- additional?: Additional<T>;
88
- mapItem?: (i: string) => any;
89
- }
90
-
91
- export interface MappedNumberMetaData<T = any, AdditionalFields extends string[] = []> extends BaseMappedMetaData<T, AdditionalFields> {
92
- fieldType: FieldType.Number | FieldType.Currency;
93
- mapItem?: (i: number) => any;
94
- additional?: NumberAdditional<T>;
95
- }
96
-
97
- export interface MappedEnumMetaData<T = any, AdditionalFields extends string[] = []> extends BaseMappedMetaData<T, AdditionalFields> {
98
- fieldType: FieldType.Enum;
99
- mapItem?: (i: number) => any;
100
- additional?: EnumAdditional<T>;
101
- }
102
-
103
- export interface MappedDateMetaData<T = any, AdditionalFields extends string[] = []> extends BaseMappedMetaData<T, AdditionalFields> {
104
- fieldType: FieldType.Date;
105
- mapItem?: (i: Date) => any;
106
- additional?: DateAdditional<T>;
107
- }
108
-
109
- export interface MappedDateTimeMetaData<T = any, AdditionalFields extends string[] = []> extends BaseMappedMetaData<T, AdditionalFields> {
110
- fieldType: FieldType.DateTime;
111
- mapItem?: (i: Date) => any;
112
- additional?: DateTimeAdditional<T>;
113
- }
114
-
115
- export interface MappedBooleanMetaData<T = any, AdditionalFields extends string[] = []> extends BaseMappedMetaData<T, AdditionalFields> {
116
- fieldType: FieldType.Boolean;
117
- mapItem?: (i: boolean) => any;
118
- additional?: BooleanAdditional<T>;
119
- }
120
-
121
- export interface MappedArrayMetaData<T = any, AdditionalFields extends string[] = []> extends BaseMappedMetaData<T, AdditionalFields> {
122
- fieldType: FieldType.Array;
123
- mapItem?: (i: string) => any;
124
- additional?: ArrayAdditional<T>;
125
- }
126
-
127
- export type MetaData<T = any, AdditionalFields extends string[] = []> =
128
- MappedMetaData<T, AdditionalFields>
129
- | NotMappedMetaData<T>
130
- | MappedNumberMetaData<T, AdditionalFields>
131
- | MappedEnumMetaData<T, AdditionalFields>
132
- | MappedBooleanMetaData<T, AdditionalFields>
133
- | MappedDateMetaData<T, AdditionalFields>
134
- | MappedDateTimeMetaData<T, AdditionalFields>
135
- | MappedArrayMetaData<T, AdditionalFields>
136
- ;
137
-
138
- export interface NotMappedMetaData<T = any> extends BaseMeta<T> {
139
- key: string;
140
- fieldType: FieldType.NotMapped;
141
- additional?: Additional<T>;
142
- }
143
- export interface ReportDef<DataType = any> {
144
- data: DataType[];
145
- metaData: MetaData [];
146
- totalRecords?: number;
147
- count: number;
148
- }
149
-
150
- export interface SortDef {
151
- direction: SortDirection;
152
- precedence?: number;
153
- }
154
-
155
- export interface FilterOptions<T = string> {
156
- filterableValues : T[] | 'all values' | AllValueOptions;
157
- }
158
-
159
- export interface AllValueOptions {
160
- allValues: true;
161
- doNotTreatEmptyStringsAsBlanks?: boolean;
162
- doNotIncludeBlanks?: boolean;
163
- doNotUseFilterBy? : boolean;
164
- }
165
- export interface DateTimeOptions {
166
- format?: string;
167
- includeSeconds?: boolean;
168
- includeMilliseconds: boolean;
169
- }
170
- type interpolatedRoute = string;
171
- interface BaseAdditional<T = any> {
172
- link? : {
173
- base?: string;
174
- urlKey?: string;
175
- target?: Target;
176
- useRouterLink?: boolean;
177
- /**
178
- * If you want to use a route with interpolated params, you can use this. Wrap the property name in curly braces.
179
- * For example, if interpolatedRoute = /users/{id}/edit, {id} will be replaced with the value of the element's id property.
180
- */
181
- interpolatedRoute?: interpolatedRoute | ((t: T) => string);
182
- routerLinkOptions?:{
183
- queryParams?: [string, interpolatedRoute | ((t: T) => string)][];
184
- fragment?: string;
185
- preserveFragment?: boolean;
186
- queryParamsHandling?: QueryParamsHandling;
187
- }
188
- }
189
- export?: MetaDataExport<T>;
190
- dateTimeOptions?: DateTimeOptions;
191
- styles?: StylerStyle<T>;
192
- columnPartStyles?: {
193
- header?: Dictionary<string>,
194
- body?: StylerStyle<T>,
195
- innerBody?: StylerStyle<T>,
196
- footer?: Dictionary<string>,
197
- }
198
- columnPartClasses?: {
199
- header?: Dictionary<Predicate<T> | true>,
200
- footer?: Dictionary<Predicate<T> | true>,
201
- }
202
- footer?: { type: any };
203
- }
204
- export interface Additional<T = any, V = string> extends BaseAdditional<T> {
205
- filterOptions?: FilterOptions<V>;
206
- footer?: { type: never };
207
- }
208
-
209
- interface NumberAdditional<T = any> extends BaseAdditional<T> {
210
- filterOptions?: FilterOptions<number>;
211
- footer?: { type: 'sum' };
212
- }
213
-
214
- interface EnumAdditional<T = any> extends BaseAdditional<T> {
215
- filterOptions?: FilterOptions<number>;
216
- enumMap?: {[key:number]:string};
217
- footer?: { type: never };
218
- }
219
-
220
- interface BooleanAdditional<T = any> extends BaseAdditional<T> {
221
- filterOptions?: FilterOptions<never>;
222
- footer?: { type: never };
223
- boolean? : {
224
- showForFalse? : true | { icon : string },
225
- forTrue? : { icon : string }
226
- }
227
- }
228
-
229
- interface DateAdditional<T = any> extends BaseAdditional<T> {
230
- filterOptions?: FilterOptions<Date>;
231
- dateFormat?: string;
232
- footer?: { type: never };
233
- }
234
-
235
- export interface DateTimeAdditional<T = any> extends BaseAdditional<T> {
236
- filterOptions?: FilterOptions<Date>;
237
- dateTimeOptions?: DateTimeOptions;
238
- footer?: { type: never };
239
- }
240
-
241
-
242
- export enum ArrayStyle {
243
- CommaDelimited,
244
- NewLine
245
- }
246
-
247
- export interface ArrayAdditional<T = any> extends Additional<T> {
248
- limit?: number;
249
- arrayStyle?: ArrayStyle;
250
- }
251
-
252
- export interface MetaDataExport<T> extends TableBuilderExport {
253
- /**
254
- * This will supersede all other mappings when exporting.
255
- */
256
- mapForExport?: (t: T) => string;
257
-
258
- /**
259
- * used with `mapLink` = 'add link'
260
- */
261
- linkColumnName?: string;
262
- }
263
-
264
-
265
- export function metaDataArrToDict<T = MetaData>(arr: MetaData[], transform?: (m : MetaData) => T): Dictionary<T>{
266
- const dict = {};
267
- if(transform){
268
- arr.forEach(e => dict[e.key] = transform(e));
269
- } else {
270
- arr.forEach(e => dict[e.key] = e);
271
- }
272
- return dict;
273
- }
274
-
275
- export interface CustomCellMeta extends Pick<MetaData, 'key' | 'displayName' | 'preSort' | 'fieldType' | 'order' | 'width'>{
276
- customCell: true;
277
- noExport?: boolean;
278
- additional: { styles?: StylerStyle; }
279
- }