@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,43 +0,0 @@
1
- import { MockHttpRequestState } from "./directives/request-state-directive.spec";
2
- import { createSuccess, inProgress, notStarted, createFailure } from "./helpers";
3
-
4
- describe('HttpRequestStateStore', () => {
5
-
6
- it('should begin with the state of not started', (done) => {
7
- const requestState = new MockHttpRequestState<string>();
8
- requestState.state$.subscribe( state => {
9
- expect(state).toEqual({ requestParams: null as any, response: notStarted });
10
- done();
11
- });
12
- });
13
-
14
- it('should be in progress when request is made', (done) => {
15
- const requestState = new MockHttpRequestState<string>();
16
- requestState.request();
17
- requestState.state$.subscribe( state => {
18
- expect(state).toEqual({ requestParams: [], response: inProgress });
19
- done();
20
- });
21
- });
22
-
23
- it('should be in success when request completes successfully', (done) => {
24
- const requestState = new MockHttpRequestState<string>();
25
- requestState.request();
26
- requestState.subject.next('hi');
27
- requestState.state$.subscribe( state => {
28
- expect(state).toEqual({ requestParams: [], response: createSuccess('hi') });
29
- done();
30
- });
31
- });
32
-
33
- it('should be in error when request errors', (done) => {
34
- const requestState = new MockHttpRequestState<string>();
35
- requestState.request();
36
- requestState.subject.error('error');
37
- requestState.state$.subscribe( state => {
38
- expect(state).toEqual({ requestParams: [], response: createFailure('error') });
39
- done();
40
- });
41
- });
42
-
43
- });
@@ -1,66 +0,0 @@
1
- import { map, startWith, switchMap } from 'rxjs/operators';
2
- import { getRequestorBody } from './rxjs/getRequestorBody';
3
- import { getRequestorStatus } from './rxjs/getRequestorState';
4
- import { mapError } from '../rxjs/mapError';
5
- import { defaultShareReplay } from '../rxjs/defaultShareReplay';
6
- import { Observable, of, ReplaySubject } from 'rxjs';
7
- import { RequestFactory, RequestState, RequestStatus } from './types';
8
- import { createFailure, createSuccess, inProgress, notStarted } from './helpers';
9
-
10
- export type HttpRequestState$ <T> = Observable<RequestState<T>>;
11
-
12
- export interface HttpRequestor <Res, Req> {
13
- httpState$: Observable<RequestState<Res>>;
14
- status$: Observable<RequestStatus>;
15
- body$: Observable<Res>;
16
- request: Req;
17
- }
18
-
19
- export function httpRequest<T = any>(req: Observable<T>): HttpRequestState$<T> {
20
- return req.pipe(
21
- map(createSuccess),
22
- mapError(createFailure),
23
- startWith(inProgress),
24
- defaultShareReplay()
25
- );
26
- }
27
-
28
- export function httpRequestor<TParam extends any[], T>(req: RequestFactory<TParam, T> ): HttpRequestor<T, (...params: [...TParam]) => Observable<RequestState<T>>> {
29
- const request$ = new ReplaySubject<[...TParam]>(1);
30
- const httpState$ : HttpRequestState$<T> = request$.pipe(
31
- switchMap( (params) => httpRequest<T>(req(...params)) ),
32
- startWith(notStarted),
33
- defaultShareReplay(),
34
- );
35
- const request = (...params: [...TParam]) => {
36
- request$.next(params);
37
- return httpState$;
38
- };
39
- return ({
40
- request,
41
- httpState$,
42
- body$: httpState$.pipe(getRequestorBody),
43
- status$: httpState$.pipe(getRequestorStatus)
44
- });
45
- }
46
-
47
- export function chainRequest<TParam extends any[], T, TT>(
48
- httpState$: Observable<RequestState<T>>,
49
- request:RequestFactory<TParam, TT>,
50
- requestParams: ((responseFromPrevious: T) => [...TParam]) | (() => [...TParam])
51
- ): Observable<RequestState<TT>> {
52
- return httpState$.pipe(
53
- switchMap( res => {
54
- if(res.status === RequestStatus.success) {
55
- const secondReq = httpRequestor<[...TParam], TT>(request);
56
- const param = requestParams(res.body);
57
- secondReq.request(...param );
58
- return secondReq.httpState$;
59
- } else {
60
- return of(res);
61
- }
62
- }),
63
- );
64
- }
65
-
66
-
@@ -1,10 +0,0 @@
1
- import { isSuccessState } from '../helpers';
2
- import { RequestState } from '../types';
3
- import { Observable } from 'rxjs';
4
- import { filter, map } from 'rxjs/operators';
5
-
6
- export const getRequestorBody = <T>(source: Observable<RequestState<T>>) =>
7
- source.pipe(
8
- filter(isSuccessState),
9
- map( res => res.body)
10
- );
@@ -1,8 +0,0 @@
1
- import { RequestState } from '../types';
2
- import { Observable } from 'rxjs';
3
- import { map } from 'rxjs/operators';
4
-
5
- export const getRequestorStatus = <T>(source: Observable<RequestState<T>>) =>
6
- source.pipe(
7
- map( res => res.status)
8
- );
@@ -1,4 +0,0 @@
1
- export * from './getRequestorBody';
2
- export * from './getRequestorState';
3
- export * from './tapError';
4
- export * from './tapSuccess';
@@ -1,16 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { tap } from 'rxjs/operators';
3
- import { RequestState } from '../types';
4
- import { isErrorState } from '../helpers';
5
-
6
- export function tapError(onError: (error: any) => void) {
7
- return function (src: Observable<RequestState>): Observable<RequestState> {
8
- return src.pipe(
9
- tap( result => {
10
- if(isErrorState(result)) {
11
- onError(result.error);
12
- }
13
- })
14
- );
15
- };
16
- }
@@ -1,16 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { tap } from 'rxjs/operators';
3
- import { RequestState } from '../types';
4
- import { isSuccessState } from '../helpers';
5
-
6
- export function tapSuccess<T>(onSuccess: (body: T) => void) {
7
- return function (src: Observable<RequestState<T>>): Observable<RequestState<T>> {
8
- return src.pipe(
9
- tap( result => {
10
- if(isSuccessState(result)) {
11
- onSuccess(result.body);
12
- }
13
- })
14
- );
15
- };
16
- }
@@ -1,42 +0,0 @@
1
- import { toArray } from "rxjs/operators";
2
- import { MockHttpRequestState } from "./directives/request-state-directive.spec";
3
- import { RequestStrategy } from "./types";
4
-
5
- describe('HttpRequestStateStore', () => {
6
-
7
- it('should throw when strategy is use once and it was reused', () => {
8
- const requestState = new MockHttpRequestState<string>({ strategy: RequestStrategy.singleUse });
9
- requestState.request();
10
- expect( () => {
11
- requestState.request();
12
- } ).toThrow();
13
- });
14
-
15
-
16
- it('should emit both when strategy is concurrent', (done) => {
17
- const requestState = new MockHttpRequestState<string>({ strategy: RequestStrategy.concurrent });
18
- requestState.request();
19
- requestState.request();
20
- requestState.selectResponse$.pipe( toArray()
21
- ).subscribe( d => {
22
- expect(d.length).toBe(2);
23
- done();
24
- });
25
- requestState.subject.next('hi');
26
- requestState.ngOnDestroy();
27
- });
28
-
29
- it('should emit only one when strategy is cancel previous', (done) => {
30
- const requestState = new MockHttpRequestState<string>({ strategy: RequestStrategy.cancelPrevious });
31
- requestState.request();
32
- requestState.request();
33
- requestState.selectResponse$.pipe( toArray()
34
- ).subscribe( d => {
35
- expect(d.length).toBe(1);
36
- done();
37
- });
38
- requestState.subject.next('hi');
39
- requestState.ngOnDestroy();
40
-
41
- });
42
- });
@@ -1,54 +0,0 @@
1
- import { Injector } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- export enum RequestStatus {
4
- notStarted,
5
- inProgress,
6
- success,
7
- fail,
8
- cancelled,
9
- }
10
-
11
- export type RequestStateCancelled = {
12
- status: RequestStatus.cancelled
13
- }
14
-
15
- export type RequestStateNotStarted = {
16
- status: RequestStatus.notStarted
17
- }
18
-
19
- export type RequestStateInProgress = {
20
- status: RequestStatus.inProgress
21
- }
22
-
23
- export type RequestStateSuccess<T> = {
24
- status: RequestStatus.success;
25
- body: T;
26
- }
27
-
28
- export type RequestStateError = {
29
- status: RequestStatus.fail;
30
- error: any;
31
- }
32
-
33
-
34
- export type RequestState<T = any> =
35
- RequestStateCancelled |
36
- RequestStateNotStarted |
37
- RequestStateInProgress |
38
- RequestStateSuccess<T> |
39
- RequestStateError ;
40
-
41
- export enum RequestStrategy {
42
- concurrent = 1,
43
- singleUse = 2,
44
- cancelPrevious = 3,
45
- sequential = 4,
46
- }
47
- export interface RequestStateOptions<TParam extends any[] = any> {
48
- strategy?: RequestStrategy;
49
- autoRequest?: TParam extends never[] ? true : never;
50
- }
51
-
52
- export interface RequestCreatorOptions<TParam extends any[] = any> extends RequestStateOptions<TParam> { injector?: Injector }
53
-
54
- export type RequestFactory<TParam extends any[], T> = (...params: [...TParam]) => Observable<T>
@@ -1,189 +0,0 @@
1
- import { EnvironmentInjector, inject, Injector, makeEnvironmentProviders, provideAppInitializer, runInInjectionContext } from "@angular/core";
2
- import { Action, createSelector, MemoizedSelector, Store } from "@ngrx/store";
3
-
4
- let _store: Store<any>;
5
- let _cache: AppStoreCache;
6
- let _ei : EnvironmentInjector;
7
-
8
- /**
9
- * Creates a selector that can dispatch an action if conditions are met.
10
- * Note: The props of the selector factory must include the props of the action.
11
- * @param selectorFactory A method that returns a selector.
12
- * @param action A method that returns the action that will be dispatched when conditions are met. The method will be passed the args of the
13
- * selector factory and the result of the selector.
14
- * @param [dispatchIf = defaultFilter] Optional. A method that takes the result of the selector and returns a boolean. The actions gets dispatched
15
- * if true is returned. If no method is passed in than the action will be dispatched if the selector returns undefined or null.
16
- */
17
- export const createActionableSelector = <State, Result, Props extends any[]>(
18
- selectorFactory: ((...props: Props) => MemoizedSelector<State, Result>),
19
- action: ActionReturner<Props, Result>,
20
- dispatchIf: (data: Result) => boolean = defaultFilter,
21
- defaultValue?: Result
22
- ) => {
23
- const options = {
24
- selectorFactory,
25
- action: (...props: [...Props, Result]) => () => _store.dispatch(action(...props)),
26
- dispatchIf,
27
- defaultValue
28
- }
29
- const actionable = createActionResultSelector(options);
30
- return (...props: Props) => createSelector(actionable(...props), b => b.result);
31
- }
32
-
33
- /**
34
- * Creates a selector that can run an action if conditions are met.
35
- * The action will run in the environment injector context if no injector is added to the options
36
- * Note: The props of the selector factory must include the props of the action.
37
- */
38
- export const createActionSelector = <State, Result, Props extends any[] = any[]>(options: CreateActionResultsOptions<State, Result, Props>) => {
39
- const actionable = createActionResultSelector(options);
40
- return ((...props: [...Props]) => createSelector(actionable(...props), b => b.result));
41
- }
42
-
43
- export const createActionableResultSelector = <State, Result, Props extends any[]>(
44
- selectorFactory: ((...props: Props) => MemoizedSelector<State, Result>),
45
- action: ActionReturner<Props, Result>,
46
- dispatchIf: (data: Result) => boolean = defaultFilter,
47
- defaultValue?: Result
48
- ) => {
49
- const options: CreateActionResultsOptions<State, Result, Props> = {
50
- selectorFactory,
51
- action: (...props: [...Props, Result]) => () => _store.dispatch(action(...props)),
52
- dispatchIf,
53
- defaultValue
54
- };
55
-
56
- return createActionResultSelector(options);
57
- }
58
-
59
- export const createActionResultSelector = <State, Result, Props extends any[] = any[]>(options: CreateActionResultsOptions<State, Result, Props>) => {
60
- const id = crypto.randomUUID();
61
- const dispatchCheck = options.dispatchIf || defaultFilter;
62
- const slctr = (...props: Props) => createSelector(
63
- options.selectorFactory(...props),
64
- (selected: Result) => {
65
- const needsDispatch = dispatchCheck(selected);
66
- if(needsDispatch && !_cache.isInCache(id, ...props)){
67
- queueMicrotask(() =>
68
- runInInjectionContext(options.injector || _ei, () => {
69
- options.action(...[...props, selected])()
70
- }));
71
- }
72
- return ({
73
- loading: needsDispatch,
74
- result: needsDispatch && options.defaultValue !== undefined ? options.defaultValue : selected
75
- });
76
- }
77
- ) as ActionableMemoizedSelector<State, LoadingState<Result>>;
78
- return slctr;
79
- }
80
-
81
- class AppStoreCache {
82
- cache: Cache = {};
83
- isInCache = (actionableSelectorId: string, ...p: any[]): boolean => {
84
- const props = p.reduce((a, b) => {
85
- if(typeof b != 'object') b = { b };
86
- return ({ ...a, ...b })
87
- }, {});
88
-
89
- const itemsInCache = this.cache[actionableSelectorId] = (this.cache[actionableSelectorId] || []);
90
-
91
- if(itemsInCache.some(itemInCache => shallowEquals(itemInCache, props))){
92
- return true;
93
- }
94
-
95
- itemsInCache.push(props);
96
- return false;
97
- }
98
- }
99
-
100
- export const clearActionableSelectorRequestCache = () => _cache.cache = {};
101
-
102
- const shallowEquals = (cachedItem: object, newItem: object): boolean => {
103
- const cachedItemKeys = Object.keys(cachedItem);
104
- const secondKeys = Object.keys(newItem);
105
- if(cachedItemKeys.length !== secondKeys.length) {
106
- return false;
107
- }
108
- for(let index = 0; index < cachedItemKeys.length; index++) {
109
- const currentKey = cachedItemKeys[index];
110
- if(cachedItem[currentKey] !== newItem[currentKey]){
111
- return false;
112
- }
113
- }
114
- return true;
115
- }
116
-
117
- export function defaultFilter(data: any) {
118
- return data == null || data == undefined;
119
- }
120
-
121
- const setStore = (store: Store) => {
122
- if(store instanceof Store) _store ??= store;
123
- };
124
-
125
- const setEnvironmentInjector = (ei: EnvironmentInjector) => {
126
- if(ei instanceof EnvironmentInjector) _ei ??= ei;
127
- };
128
-
129
- export function provideActionableSelector(){
130
- return makeEnvironmentProviders([
131
- provideAppInitializer(setUpStoreFactory)
132
- ])
133
- }
134
-
135
- export const setUpStoreFactory = () => {
136
- const store = inject(Store);
137
- const env = inject(EnvironmentInjector);
138
- _cache ??= new AppStoreCache();
139
- setStore(store);
140
- setEnvironmentInjector(env)
141
- }
142
-
143
- export function setUpStoreFactoryOld(store: Store, env: EnvironmentInjector){
144
- _cache ??= new AppStoreCache();
145
- return () => new Promise((resolve, reject) => {
146
- setStore(store);
147
- setEnvironmentInjector(env)
148
- resolve(null);
149
- })
150
- }
151
-
152
- export interface CreateActionResultsOptions<State, Result, Props extends any[]>{
153
- /**
154
- * A method that returns a selector.
155
- */
156
- selectorFactory: (...props: Props) => MemoizedSelector<State, Result>,
157
- /**
158
- * The action to run when conditions are met.
159
- * The method will be passed the args of the selector factory and the result of the selector.
160
- * @param props args of the selector factory and the result of the selector.
161
- */
162
- action: (...props: [...Props, Result]) => () => void,
163
- /**
164
- * Optional. A method that takes the result of the selector and returns a boolean. The actions gets dispatched
165
- * if true is returned. If no method is passed in than the action will be dispatched if the selector returns undefined or null.
166
- * @param data The result of the selector.
167
- * @returns boolean
168
- */
169
- dispatchIf?: (data: Result) => boolean,
170
- injector?: Injector,
171
-
172
- /**
173
- * The default value to use if the selector returns undefined or null.
174
- */
175
- defaultValue?: Result
176
- }
177
-
178
- interface LoadingState<T> {
179
- loading: boolean;
180
- result?: T;
181
- }
182
-
183
- type ActionableMemoizedSelector<State, Result> = MemoizedSelector<State, Result>;
184
-
185
- export type ActionReturner<Props extends any[], Result = any> = (...props: [...Props, Result]) => Action;
186
-
187
- type Cache = {
188
- [key: string]: { [key: string]: any }[];
189
- }
package/src/ngrx/index.ts DELETED
@@ -1 +0,0 @@
1
- export * from './actionable-selector';
package/src/public-api.ts DELETED
@@ -1,40 +0,0 @@
1
- /*
2
- * Public API Surface of http-request-state
3
- */
4
-
5
- export * from './http-request-state/directives';
6
- export * from './http-request-state/rxjs';
7
- export * from './http-request-state';
8
-
9
-
10
- export * from './table-builder/table-builder.module';
11
-
12
- export * from './table-builder/classes/TableBuilderConfig';
13
-
14
- export * from './table-builder/interfaces/meta-data';
15
-
16
- export * from './table-builder/classes/MatTableObservableDataSource';
17
-
18
- export * from './table-builder/classes/table-builder';
19
-
20
- export * from './table-builder/classes/table-builder-general-settings';
21
- export * from './table-builder/classes/filter-info';
22
- export * from './table-builder/types/group-types';
23
-
24
- export * from './table-builder/components';
25
-
26
- export * from './table-builder/components/table-container/table-container.helpers/groupBy.helpers';
27
-
28
- export * from './table-builder/directives';
29
-
30
- export * from './table-builder/enums/filterTypes';
31
-
32
-
33
- export * from './rxjs'
34
-
35
- export * from './utilities'
36
-
37
- export * from './action-state';
38
-
39
- export * from './ngrx';
40
-
@@ -1,8 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { shareReplay } from 'rxjs/operators';
3
-
4
- export function defaultShareReplay<T>() {
5
- return function (src: Observable<T>): Observable<T> {
6
- return src.pipe(shareReplay({ refCount: true, bufferSize: 1 }));
7
- };
8
- }
package/src/rxjs/index.ts DELETED
@@ -1,5 +0,0 @@
1
- export * from './defaultShareReplay'
2
- export * from './mapError';
3
- export * from './rxjs-operators';
4
- export * from './subjectifier';
5
- export * from './subscriber.directive';
@@ -1,8 +0,0 @@
1
- import { Observable, of } from 'rxjs';
2
- import { catchError } from 'rxjs/operators';
3
-
4
- export function mapError<T, TResult>(projection: (error: any) => TResult) {
5
- return function (src: Observable<T>): Observable<T | TResult> {
6
- return src.pipe(catchError(e => of(projection(e))),);
7
- };
8
- }
@@ -1,130 +0,0 @@
1
- import { Predicate } from '@angular/core';
2
- import {
3
- filter,
4
- first,
5
- map,
6
- pairwise,
7
- startWith,
8
- Observable,
9
- combineLatest,
10
- Subscription,
11
- MonoTypeOperatorFunction,
12
- OperatorFunction,
13
- concatMap,
14
- merge,
15
- of,
16
- delay,
17
- pipe
18
- } from 'rxjs';
19
-
20
-
21
- export const onceWhen = <T>(predicate: Predicate<T>) => (src: Observable<T>) : Observable<T> => {
22
- return src.pipe(filter(predicate), first());
23
- }
24
-
25
- export const mapArray = <T, U>(mapFunc: (src: T, index?: number) => U ) => (source: Observable<T[]>) =>
26
- source.pipe( map( src => src.map(mapFunc) ) );
27
-
28
- export const filterArray = <T>(filterFunc: (src: T) => boolean ) => (source: Observable<T[]>) =>
29
- source.pipe( map( src => src.filter(filterFunc) ) );
30
-
31
- export const onWait = startWithIfEmpty;
32
- export function startWithIfEmpty<T, V extends T>(val: V, wait = 0) : MonoTypeOperatorFunction<T> {
33
- return (source: Observable<T>) => {
34
- return new Observable<T>(subscriber => {
35
- let emitted = false;
36
- setTimeout(() => {
37
- if(!emitted) {
38
- subscriber.next(val);
39
- }
40
- }, wait);
41
- const sub = source.subscribe({
42
- next(x) { emitted = true; subscriber.next(x) },
43
- error(err) { emitted = true; subscriber.error(err) },
44
- complete() { emitted = true; subscriber.complete(); }
45
- });
46
- return () => sub.unsubscribe();
47
- });
48
- }
49
-
50
- }
51
-
52
- export const combineArrays = <T>(sources: Observable<T[]>[]): Observable<T[]> => {
53
- return combineLatest(
54
- sources.map( src => src.pipe(startWithIfEmpty([] as T [])))
55
- ).pipe(
56
- map( res => res.flat() )
57
- );
58
- };
59
-
60
- export function switchOff( switchSource: Observable<boolean>, defaultState: boolean = true) {
61
- return <T>(source: Observable<T>) : Observable<T> => {
62
- return new Observable(subsciber => {
63
- let isOn = defaultState;
64
- const subscription = new Subscription();
65
- subscription.add( switchSource.subscribe( on => isOn = on ));
66
- subscription.add(source.subscribe({
67
- next(value) {
68
- if(isOn) {
69
- subsciber.next(value);
70
- }
71
- },
72
- error: error => subsciber.error(error),
73
- complete: () => subsciber.complete()
74
- }));
75
- return subscription;
76
- });
77
- }
78
- }
79
-
80
- export function skipOneWhen( skipper: Observable<any> ) {
81
- return <T>(source: Observable<T>) : Observable<T> => {
82
- return new Observable(subsriber => {
83
- const subscription = new Subscription();
84
- let skipNext = false;
85
- subscription.add(skipper.subscribe( _ => skipNext = true));
86
- subscription.add(source.subscribe({
87
- next(value) {
88
- if(skipNext) {
89
- skipNext = false;
90
- } else {
91
- subsriber.next(value);
92
- }
93
- },
94
- error: error => subsriber.error(error),
95
- complete: () => subsriber.complete()
96
- }));
97
- return subscription;
98
- });
99
- }
100
- }
101
-
102
- export function previousAndCurrent<T>(startingValue : T) : OperatorFunction<T, [T, T]> {
103
- return (source: Observable<T>) => {
104
- return source.pipe(startWith(startingValue), pairwise());
105
- }
106
- }
107
-
108
- export function notNull<T>() {
109
- return pipe(filter<T, NonNullable<T>>((o): o is NonNullable<T> => o != null))
110
- }
111
-
112
- export function delayOn<T>(predicate: (t: T) => boolean, delayTime: number) {
113
- return (src: Observable<T>) => {
114
- return src.pipe(
115
- concatMap(r => {
116
- if(predicate(r)) {
117
- return merge(
118
- of({ r }),
119
- of(null).pipe(delay(delayTime))
120
- ).pipe(
121
- notNull(),
122
- map(d => d.r)
123
- );
124
- } else {
125
- return of(r);
126
- }
127
- })
128
- );
129
- };
130
- }
@@ -1,17 +0,0 @@
1
- import { merge, Observable, Observer, Subject } from 'rxjs';
2
- type PipeLike<T> = Observable<T>['pipe'];
3
- export class Subjectifier<T> extends Observable<T>{
4
- private _subj = new Subject<T>();
5
- private merged: Observable<T>;
6
- constructor(_source: Observable<T>){
7
- super((obs: Observer<T>) => {
8
- const s = merge( _source, this._subj ).subscribe(obs);
9
- return s;
10
- });
11
-
12
- this.merged = merge(_source, this._subj);
13
- }
14
- next: Subject<T>['next'] = this._subj.next.bind(this._subj);
15
- newSubj = (...operations: Parameters<PipeLike<T>>) =>
16
- new Subjectifier(this.merged.pipe(...operations));
17
- }