@one-paragon/angular-utilities 1.2.10 → 1.2.12

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 (406) hide show
  1. package/README.md +24 -24
  2. package/karma.conf.js +44 -0
  3. package/ng-package.json +7 -0
  4. package/package.json +16 -30
  5. package/src/action-state/action-state-spinner/action-state-spinner.component.css +16 -0
  6. package/src/action-state/action-state-spinner/action-state-spinner.component.html +6 -0
  7. package/src/action-state/action-state-spinner/action-state-spinner.component.spec.ts +25 -0
  8. package/src/action-state/action-state-spinner/action-state-spinner.component.ts +26 -0
  9. package/src/action-state/action-state-ui/action-state-ui.module.ts +13 -0
  10. package/{action-state/index.d.ts → src/action-state/index.ts} +8 -4
  11. package/src/action-state/ngrx-ext/ngrx-ext.module.ts +15 -0
  12. package/src/action-state/ngrx.ts +69 -0
  13. package/src/http-request-state/HttpRequestStateFactory.ts +66 -0
  14. package/src/http-request-state/HttpRequestStateStore.ts +173 -0
  15. package/src/http-request-state/directives/HttpStateDirectiveBase.ts +29 -0
  16. package/src/http-request-state/directives/http-error-state-directive.ts +21 -0
  17. package/src/http-request-state/directives/http-inProgress-state-directive.ts +19 -0
  18. package/src/http-request-state/directives/http-notStarted-state-directive.ts +19 -0
  19. package/src/http-request-state/directives/http-success-state-directive.ts +29 -0
  20. package/{http-request-state/directives/index.d.ts → src/http-request-state/directives/index.ts} +5 -5
  21. package/src/http-request-state/directives/request-state-directive.spec.ts +72 -0
  22. package/src/http-request-state/directives/request-state-directive.ts +78 -0
  23. package/src/http-request-state/helpers.ts +30 -0
  24. package/src/http-request-state/http-request-state.ts +69 -0
  25. package/src/http-request-state/http-state-module.ts +23 -0
  26. package/{http-request-state/index.d.ts → src/http-request-state/index.ts} +6 -6
  27. package/src/http-request-state/observable.spec.ts +43 -0
  28. package/src/http-request-state/rxjs/getRequestorBody.ts +10 -0
  29. package/src/http-request-state/rxjs/getRequestorState.ts +8 -0
  30. package/{http-request-state/rxjs/index.d.ts → src/http-request-state/rxjs/index.ts} +4 -4
  31. package/src/http-request-state/rxjs/tapError.ts +16 -0
  32. package/src/http-request-state/rxjs/tapSuccess.ts +16 -0
  33. package/src/http-request-state/strategies.spec.ts +42 -0
  34. package/src/http-request-state/types.ts +55 -0
  35. package/src/ngrx/actionable-selector.ts +95 -0
  36. package/src/ngrx/index.ts +1 -0
  37. package/{public-api.d.ts → src/public-api.ts} +35 -16
  38. package/src/rxjs/defaultShareReplay.ts +8 -0
  39. package/{rxjs/index.d.ts → src/rxjs/index.ts} +5 -5
  40. package/src/rxjs/mapError.ts +8 -0
  41. package/src/rxjs/rxjs-operators.ts +132 -0
  42. package/src/rxjs/subjectifier.ts +17 -0
  43. package/src/rxjs/subscriber.directive.ts +57 -0
  44. package/src/specs/clickSubject.spec.ts +95 -0
  45. package/src/specs/dialog.spec.ts +101 -0
  46. package/src/specs/toggleGroupDirective.spec.ts +229 -0
  47. package/src/table-builder/classes/DefaultSettings.ts +11 -0
  48. package/src/table-builder/classes/MatTableObservableDataSource.ts +23 -0
  49. package/src/table-builder/classes/TableBuilderConfig.ts +35 -0
  50. package/src/table-builder/classes/TableBuilderDataSource.ts +80 -0
  51. package/src/table-builder/classes/TableState.ts +96 -0
  52. package/src/table-builder/classes/data-store.ts +10 -0
  53. package/{table-builder/classes/display-col.d.ts → src/table-builder/classes/display-col.ts} +5 -5
  54. package/src/table-builder/classes/filter-info.ts +108 -0
  55. package/src/table-builder/classes/table-builder-general-settings.ts +129 -0
  56. package/src/table-builder/classes/table-builder.ts +94 -0
  57. package/src/table-builder/classes/table-store.ts +471 -0
  58. package/src/table-builder/components/array-column.component.ts +36 -0
  59. package/src/table-builder/components/column-builder/column-builder.component.html +61 -0
  60. package/src/table-builder/components/column-builder/column-builder.component.scss +43 -0
  61. package/src/table-builder/components/column-builder/column-builder.component.spec.ts +49 -0
  62. package/src/table-builder/components/column-builder/column-builder.component.ts +135 -0
  63. package/src/table-builder/components/column-builder/column-helpers.ts +53 -0
  64. package/src/table-builder/components/date-filter/date-filter.component.html +23 -0
  65. package/src/table-builder/components/date-filter/date-filter.component.ts +24 -0
  66. package/src/table-builder/components/date-time-filter/date-time-filter.component.html +9 -0
  67. package/src/table-builder/components/date-time-filter/date-time-filter.component.ts +22 -0
  68. package/src/table-builder/components/filter/filter.component.html +91 -0
  69. package/src/table-builder/components/filter/filter.component.scss +64 -0
  70. package/src/table-builder/components/filter/filter.component.spec.ts +87 -0
  71. package/src/table-builder/components/filter/filter.component.ts +60 -0
  72. package/src/table-builder/components/filter/in-list/in-list-filter.component.ts +93 -0
  73. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.html +55 -0
  74. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.scss +57 -0
  75. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.ts +59 -0
  76. package/src/table-builder/components/generic-table/generic-table.component.html +78 -0
  77. package/src/table-builder/components/generic-table/generic-table.component.scss +42 -0
  78. package/src/table-builder/components/generic-table/generic-table.component.ts +299 -0
  79. package/src/table-builder/components/generic-table/paginator.component.ts +99 -0
  80. package/src/table-builder/components/group-by-list/group-by-list.component.css +8 -0
  81. package/src/table-builder/components/group-by-list/group-by-list.component.html +12 -0
  82. package/src/table-builder/components/group-by-list/group-by-list.component.spec.ts +23 -0
  83. package/src/table-builder/components/group-by-list/group-by-list.component.ts +21 -0
  84. package/src/table-builder/components/header-menu/header-menu.component.html +104 -0
  85. package/src/table-builder/components/header-menu/header-menu.component.scss +96 -0
  86. package/src/table-builder/components/header-menu/header-menu.component.ts +99 -0
  87. package/src/table-builder/components/in-filter/in-filter.component.css +3 -0
  88. package/src/table-builder/components/in-filter/in-filter.component.html +20 -0
  89. package/src/table-builder/components/in-filter/in-filter.component.ts +66 -0
  90. package/{table-builder/components/index.d.ts → src/table-builder/components/index.ts} +9 -9
  91. package/src/table-builder/components/initialization-component/initialization-component.html +29 -0
  92. package/src/table-builder/components/initialization-component/initialization-component.ts +24 -0
  93. package/src/table-builder/components/link-column.component.ts +47 -0
  94. package/src/table-builder/components/number-filter/number-filter.component.css +10 -0
  95. package/src/table-builder/components/number-filter/number-filter.component.html +19 -0
  96. package/src/table-builder/components/number-filter/number-filter.component.spec.ts +30 -0
  97. package/src/table-builder/components/number-filter/number-filter.component.ts +25 -0
  98. package/src/table-builder/components/profiles-menu/profiles-menu.component.html +74 -0
  99. package/src/table-builder/components/profiles-menu/profiles-menu.component.scss +98 -0
  100. package/src/table-builder/components/profiles-menu/profiles-menu.component.spec.ts +23 -0
  101. package/src/table-builder/components/profiles-menu/profiles-menu.component.ts +65 -0
  102. package/src/table-builder/components/scroll-strategy.ts +76 -0
  103. package/src/table-builder/components/sort-menu/sort-menu.component-store.ts +66 -0
  104. package/src/table-builder/components/sort-menu/sort-menu.component.html +111 -0
  105. package/src/table-builder/components/sort-menu/sort-menu.component.scss +119 -0
  106. package/src/table-builder/components/sort-menu/sort-menu.component.ts +98 -0
  107. package/{table-builder/components/table-container/table-container-imports.d.ts → src/table-builder/components/table-container/table-container-imports.ts} +32 -14
  108. package/src/table-builder/components/table-container/table-container.css +54 -0
  109. package/src/table-builder/components/table-container/table-container.helpers/data-state.helpers.ts +141 -0
  110. package/src/table-builder/components/table-container/table-container.helpers/filter-state.helpers.ts +106 -0
  111. package/src/table-builder/components/table-container/table-container.helpers/groupBy.helpers.ts +86 -0
  112. package/src/table-builder/components/table-container/table-container.helpers/sort-state.helpers.ts +45 -0
  113. package/src/table-builder/components/table-container/table-container.html +95 -0
  114. package/src/table-builder/components/table-container/table-container.spec.ts +154 -0
  115. package/src/table-builder/components/table-container/table-container.ts +356 -0
  116. package/src/table-builder/components/table-container/tableProps.ts +20 -0
  117. package/src/table-builder/components/table-container/virtual-scroll-container.ts +145 -0
  118. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.html +31 -0
  119. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.ts +46 -0
  120. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.css +42 -0
  121. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.html +10 -0
  122. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.spec.ts +86 -0
  123. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.ts +34 -0
  124. package/src/table-builder/components/table-container-filter/table-wrapper-filter-store.ts +23 -0
  125. package/src/table-builder/directives/custom-cell-directive.ts +58 -0
  126. package/{table-builder/directives/index.d.ts → src/table-builder/directives/index.ts} +6 -5
  127. package/src/table-builder/directives/multi-sort.directive.spec.ts +124 -0
  128. package/src/table-builder/directives/multi-sort.directive.ts +51 -0
  129. package/src/table-builder/directives/resize-column.directive.ts +108 -0
  130. package/src/table-builder/directives/table-wrapper.directive.ts +14 -0
  131. package/src/table-builder/directives/tb-filter.directive.ts +396 -0
  132. package/src/table-builder/enums/filterTypes.ts +40 -0
  133. package/src/table-builder/functions/boolean-filter-function.ts +12 -0
  134. package/src/table-builder/functions/date-filter-function.ts +68 -0
  135. package/src/table-builder/functions/download-data.ts +11 -0
  136. package/src/table-builder/functions/null-filter-function.ts +9 -0
  137. package/src/table-builder/functions/number-filter-function.ts +41 -0
  138. package/src/table-builder/functions/sort-data-function.ts +23 -0
  139. package/src/table-builder/functions/string-filter-function.ts +51 -0
  140. package/{table-builder/interfaces/ColumnInfo.d.ts → src/table-builder/interfaces/ColumnInfo.ts} +7 -6
  141. package/src/table-builder/interfaces/column-template.ts +9 -0
  142. package/{table-builder/interfaces/dictionary.d.ts → src/table-builder/interfaces/dictionary.ts} +3 -3
  143. package/src/table-builder/interfaces/report-def.ts +155 -0
  144. package/src/table-builder/ngrx/tableBuilderStateStore.ts +199 -0
  145. package/src/table-builder/pipes/column-total.pipe.ts +17 -0
  146. package/src/table-builder/pipes/format-filter-type.pipe.ts +12 -0
  147. package/src/table-builder/pipes/format-filter-value.pipe.ts +42 -0
  148. package/src/table-builder/pipes/key-display.ts +16 -0
  149. package/src/table-builder/services/export-to-csv.service.ts +97 -0
  150. package/src/table-builder/services/link-creator.service.ts +67 -0
  151. package/src/table-builder/services/table-template-service.ts +59 -0
  152. package/src/table-builder/services/transform-creator.ts +95 -0
  153. package/src/table-builder/specs/table-custom-filters.spec.ts +262 -0
  154. package/src/table-builder/styles/collapser.styles.scss +16 -0
  155. package/src/table-builder/table-builder.module.ts +73 -0
  156. package/src/test.ts +17 -0
  157. package/src/utilities/array-helpers.ts +13 -0
  158. package/src/utilities/directives/auto-focus.directive.ts +21 -0
  159. package/src/utilities/directives/clickEmitterDirective.ts +16 -0
  160. package/src/utilities/directives/clickSubject.ts +20 -0
  161. package/src/utilities/directives/conditional-classes.directive.ts +36 -0
  162. package/src/utilities/directives/dialog-service.ts +19 -0
  163. package/src/utilities/directives/dialog.ts +144 -0
  164. package/src/utilities/directives/mat-toggle-group-directive.ts +61 -0
  165. package/src/utilities/directives/prevent-enter.directive.ts +13 -0
  166. package/src/utilities/directives/stop-propagation.directive.ts +20 -0
  167. package/src/utilities/directives/styler.ts +40 -0
  168. package/src/utilities/directives/trim-whitespace.directive.ts +21 -0
  169. package/{utilities/index.d.ts → src/utilities/index.ts} +22 -15
  170. package/src/utilities/module.ts +55 -0
  171. package/src/utilities/pipes/function.pipe.ts +16 -0
  172. package/src/utilities/pipes/phone.pipe.ts +15 -0
  173. package/src/utilities/pipes/space-case.pipes.spec.ts +47 -0
  174. package/src/utilities/pipes/space-case.pipes.ts +23 -0
  175. package/tsconfig.lib.json +19 -0
  176. package/tsconfig.lib.prod.json +10 -0
  177. package/tsconfig.spec.json +17 -0
  178. package/action-state/action-state-spinner/action-state-spinner.component.d.ts +0 -12
  179. package/action-state/action-state-ui/action-state-ui.module.d.ts +0 -7
  180. package/action-state/ngrx-ext/ngrx-ext.module.d.ts +0 -8
  181. package/action-state/ngrx.d.ts +0 -31
  182. package/esm2022/action-state/action-state-spinner/action-state-spinner.component.mjs +0 -24
  183. package/esm2022/action-state/action-state-ui/action-state-ui.module.mjs +0 -20
  184. package/esm2022/action-state/index.mjs +0 -8
  185. package/esm2022/action-state/ngrx-ext/ngrx-ext.module.mjs +0 -23
  186. package/esm2022/action-state/ngrx.mjs +0 -47
  187. package/esm2022/http-request-state/HttpRequestStateFactory.mjs +0 -51
  188. package/esm2022/http-request-state/HttpRequestStateStore.mjs +0 -121
  189. package/esm2022/http-request-state/directives/HttpStateDirectiveBase.mjs +0 -30
  190. package/esm2022/http-request-state/directives/http-error-state-directive.mjs +0 -23
  191. package/esm2022/http-request-state/directives/http-inProgress-state-directive.mjs +0 -23
  192. package/esm2022/http-request-state/directives/http-notStarted-state-directive.mjs +0 -23
  193. package/esm2022/http-request-state/directives/http-success-state-directive.mjs +0 -29
  194. package/esm2022/http-request-state/directives/index.mjs +0 -6
  195. package/esm2022/http-request-state/directives/request-state-directive.mjs +0 -61
  196. package/esm2022/http-request-state/helpers.mjs +0 -22
  197. package/esm2022/http-request-state/http-request-state.mjs +0 -39
  198. package/esm2022/http-request-state/http-state-module.mjs +0 -40
  199. package/esm2022/http-request-state/index.mjs +0 -7
  200. package/esm2022/http-request-state/rxjs/getRequestorBody.mjs +0 -4
  201. package/esm2022/http-request-state/rxjs/getRequestorState.mjs +0 -3
  202. package/esm2022/http-request-state/rxjs/index.mjs +0 -5
  203. package/esm2022/http-request-state/rxjs/tapError.mjs +0 -12
  204. package/esm2022/http-request-state/rxjs/tapSuccess.mjs +0 -12
  205. package/esm2022/http-request-state/types.mjs +0 -16
  206. package/esm2022/ngrx/actionable-selector.mjs +0 -71
  207. package/esm2022/ngrx/index.mjs +0 -2
  208. package/esm2022/one-paragon-angular-utilities.mjs +0 -5
  209. package/esm2022/public-api.mjs +0 -20
  210. package/esm2022/rxjs/defaultShareReplay.mjs +0 -7
  211. package/esm2022/rxjs/index.mjs +0 -6
  212. package/esm2022/rxjs/mapError.mjs +0 -8
  213. package/esm2022/rxjs/rxjs-operators.mjs +0 -92
  214. package/esm2022/rxjs/subjectifier.mjs +0 -15
  215. package/esm2022/rxjs/subscriber.directive.mjs +0 -50
  216. package/esm2022/table-builder/classes/DefaultSettings.mjs +0 -6
  217. package/esm2022/table-builder/classes/MatTableObservableDataSource.mjs +0 -23
  218. package/esm2022/table-builder/classes/TableBuilderConfig.mjs +0 -18
  219. package/esm2022/table-builder/classes/TableBuilderDataSource.mjs +0 -48
  220. package/esm2022/table-builder/classes/TableState.mjs +0 -47
  221. package/esm2022/table-builder/classes/display-col.mjs +0 -2
  222. package/esm2022/table-builder/classes/filter-info.mjs +0 -61
  223. package/esm2022/table-builder/classes/table-builder-general-settings.mjs +0 -102
  224. package/esm2022/table-builder/classes/table-builder.mjs +0 -77
  225. package/esm2022/table-builder/classes/table-store.mjs +0 -362
  226. package/esm2022/table-builder/components/array-column.component.mjs +0 -53
  227. package/esm2022/table-builder/components/column-builder/column-builder.component.mjs +0 -134
  228. package/esm2022/table-builder/components/column-builder/column-helpers.mjs +0 -47
  229. package/esm2022/table-builder/components/date-filter/date-filter.component.mjs +0 -29
  230. package/esm2022/table-builder/components/date-time-filter/date-time-filter.component.mjs +0 -24
  231. package/esm2022/table-builder/components/filter/filter.component.mjs +0 -64
  232. package/esm2022/table-builder/components/filter/in-list/in-list-filter.component.mjs +0 -102
  233. package/esm2022/table-builder/components/gen-col-displayer/gen-col-displayer.component.mjs +0 -53
  234. package/esm2022/table-builder/components/generic-table/generic-table.component.mjs +0 -261
  235. package/esm2022/table-builder/components/generic-table/paginator.component.mjs +0 -96
  236. package/esm2022/table-builder/components/group-by-list/group-by-list.component.mjs +0 -21
  237. package/esm2022/table-builder/components/header-menu/header-menu.component.mjs +0 -103
  238. package/esm2022/table-builder/components/in-filter/in-filter.component.mjs +0 -65
  239. package/esm2022/table-builder/components/index.mjs +0 -10
  240. package/esm2022/table-builder/components/initialization-component/initialization-component.mjs +0 -47
  241. package/esm2022/table-builder/components/link-column.component.mjs +0 -74
  242. package/esm2022/table-builder/components/number-filter/number-filter.component.mjs +0 -29
  243. package/esm2022/table-builder/components/profiles-menu/profiles-menu.component.mjs +0 -64
  244. package/esm2022/table-builder/components/scroll-strategy.mjs +0 -60
  245. package/esm2022/table-builder/components/sort-menu/sort-menu.component-store.mjs +0 -44
  246. package/esm2022/table-builder/components/sort-menu/sort-menu.component.mjs +0 -82
  247. package/esm2022/table-builder/components/table-container/table-container-imports.mjs +0 -26
  248. package/esm2022/table-builder/components/table-container/table-container.helpers/data-state.helpers.mjs +0 -135
  249. package/esm2022/table-builder/components/table-container/table-container.helpers/filter-state.helpers.mjs +0 -83
  250. package/esm2022/table-builder/components/table-container/table-container.helpers/groupBy.helpers.mjs +0 -71
  251. package/esm2022/table-builder/components/table-container/table-container.helpers/sort-state.helpers.mjs +0 -36
  252. package/esm2022/table-builder/components/table-container/table-container.mjs +0 -305
  253. package/esm2022/table-builder/components/table-container/tableProps.mjs +0 -8
  254. package/esm2022/table-builder/components/table-container/virtual-scroll-container.mjs +0 -126
  255. package/esm2022/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +0 -45
  256. package/esm2022/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.mjs +0 -38
  257. package/esm2022/table-builder/components/table-container-filter/table-wrapper-filter-store.mjs +0 -25
  258. package/esm2022/table-builder/directives/custom-cell-directive.mjs +0 -74
  259. package/esm2022/table-builder/directives/index.mjs +0 -6
  260. package/esm2022/table-builder/directives/multi-sort.directive.mjs +0 -50
  261. package/esm2022/table-builder/directives/resize-column.directive.mjs +0 -87
  262. package/esm2022/table-builder/directives/table-wrapper.directive.mjs +0 -18
  263. package/esm2022/table-builder/directives/tb-filter.directive.mjs +0 -405
  264. package/esm2022/table-builder/enums/filterTypes.mjs +0 -29
  265. package/esm2022/table-builder/functions/boolean-filter-function.mjs +0 -10
  266. package/esm2022/table-builder/functions/date-filter-function.mjs +0 -58
  267. package/esm2022/table-builder/functions/download-data.mjs +0 -12
  268. package/esm2022/table-builder/functions/null-filter-function.mjs +0 -8
  269. package/esm2022/table-builder/functions/number-filter-function.mjs +0 -32
  270. package/esm2022/table-builder/functions/sort-data-function.mjs +0 -17
  271. package/esm2022/table-builder/functions/string-filter-function.mjs +0 -41
  272. package/esm2022/table-builder/interfaces/ColumnInfo.mjs +0 -2
  273. package/esm2022/table-builder/interfaces/dictionary.mjs +0 -2
  274. package/esm2022/table-builder/interfaces/report-def.mjs +0 -50
  275. package/esm2022/table-builder/ngrx/tableBuilderStateStore.mjs +0 -154
  276. package/esm2022/table-builder/pipes/column-total.pipe.mjs +0 -22
  277. package/esm2022/table-builder/pipes/format-filter-type.pipe.mjs +0 -18
  278. package/esm2022/table-builder/pipes/format-filter-value.pipe.mjs +0 -43
  279. package/esm2022/table-builder/pipes/key-display.mjs +0 -18
  280. package/esm2022/table-builder/services/export-to-csv.service.mjs +0 -85
  281. package/esm2022/table-builder/services/link-creator.service.mjs +0 -50
  282. package/esm2022/table-builder/services/table-template-service.mjs +0 -60
  283. package/esm2022/table-builder/services/transform-creator.mjs +0 -100
  284. package/esm2022/table-builder/table-builder.module.mjs +0 -124
  285. package/esm2022/utilities/array-helpers.mjs +0 -14
  286. package/esm2022/utilities/directives/auto-focus.directive.mjs +0 -25
  287. package/esm2022/utilities/directives/clickEmitterDirective.mjs +0 -22
  288. package/esm2022/utilities/directives/clickSubject.mjs +0 -29
  289. package/esm2022/utilities/directives/conditional-classes.directive.mjs +0 -36
  290. package/esm2022/utilities/directives/dialog-service.mjs +0 -21
  291. package/esm2022/utilities/directives/dialog.mjs +0 -145
  292. package/esm2022/utilities/directives/mat-toggle-group-directive.mjs +0 -59
  293. package/esm2022/utilities/directives/prevent-enter.directive.mjs +0 -20
  294. package/esm2022/utilities/directives/stop-propagation.directive.mjs +0 -26
  295. package/esm2022/utilities/directives/styler.mjs +0 -41
  296. package/esm2022/utilities/directives/trim-whitespace.directive.mjs +0 -28
  297. package/esm2022/utilities/index.mjs +0 -16
  298. package/esm2022/utilities/module.mjs +0 -90
  299. package/esm2022/utilities/pipes/function.pipe.mjs +0 -22
  300. package/esm2022/utilities/pipes/phone.pipe.mjs +0 -20
  301. package/esm2022/utilities/pipes/space-case.pipes.mjs +0 -28
  302. package/fesm2022/one-paragon-angular-utilities.mjs +0 -5564
  303. package/fesm2022/one-paragon-angular-utilities.mjs.map +0 -1
  304. package/http-request-state/HttpRequestStateFactory.d.ts +0 -17
  305. package/http-request-state/HttpRequestStateStore.d.ts +0 -54
  306. package/http-request-state/directives/HttpStateDirectiveBase.d.ts +0 -14
  307. package/http-request-state/directives/http-error-state-directive.d.ts +0 -9
  308. package/http-request-state/directives/http-inProgress-state-directive.d.ts +0 -9
  309. package/http-request-state/directives/http-notStarted-state-directive.d.ts +0 -9
  310. package/http-request-state/directives/http-success-state-directive.d.ts +0 -16
  311. package/http-request-state/directives/request-state-directive.d.ts +0 -34
  312. package/http-request-state/helpers.d.ts +0 -9
  313. package/http-request-state/http-request-state.d.ts +0 -12
  314. package/http-request-state/http-state-module.d.ts +0 -11
  315. package/http-request-state/rxjs/getRequestorBody.d.ts +0 -3
  316. package/http-request-state/rxjs/getRequestorState.d.ts +0 -3
  317. package/http-request-state/rxjs/tapError.d.ts +0 -3
  318. package/http-request-state/rxjs/tapSuccess.d.ts +0 -3
  319. package/http-request-state/types.d.ts +0 -41
  320. package/index.d.ts +0 -5
  321. package/ngrx/actionable-selector.d.ts +0 -17
  322. package/ngrx/index.d.ts +0 -1
  323. package/rxjs/defaultShareReplay.d.ts +0 -2
  324. package/rxjs/mapError.d.ts +0 -2
  325. package/rxjs/rxjs-operators.d.ts +0 -13
  326. package/rxjs/subjectifier.d.ts +0 -8
  327. package/rxjs/subscriber.directive.d.ts +0 -14
  328. package/table-builder/classes/DefaultSettings.d.ts +0 -9
  329. package/table-builder/classes/MatTableObservableDataSource.d.ts +0 -9
  330. package/table-builder/classes/TableBuilderConfig.d.ts +0 -21
  331. package/table-builder/classes/TableBuilderDataSource.d.ts +0 -13
  332. package/table-builder/classes/TableState.d.ts +0 -57
  333. package/table-builder/classes/filter-info.d.ts +0 -35
  334. package/table-builder/classes/table-builder-general-settings.d.ts +0 -74
  335. package/table-builder/classes/table-builder.d.ts +0 -18
  336. package/table-builder/classes/table-store.d.ts +0 -148
  337. package/table-builder/components/array-column.component.d.ts +0 -15
  338. package/table-builder/components/column-builder/column-builder.component.d.ts +0 -47
  339. package/table-builder/components/column-builder/column-helpers.d.ts +0 -36
  340. package/table-builder/components/date-filter/date-filter.component.d.ts +0 -37
  341. package/table-builder/components/date-time-filter/date-time-filter.component.d.ts +0 -37
  342. package/table-builder/components/filter/filter.component.d.ts +0 -46
  343. package/table-builder/components/filter/in-list/in-list-filter.component.d.ts +0 -24
  344. package/table-builder/components/gen-col-displayer/gen-col-displayer.component.d.ts +0 -15
  345. package/table-builder/components/generic-table/generic-table.component.d.ts +0 -72
  346. package/table-builder/components/generic-table/paginator.component.d.ts +0 -28
  347. package/table-builder/components/group-by-list/group-by-list.component.d.ts +0 -7
  348. package/table-builder/components/header-menu/header-menu.component.d.ts +0 -51
  349. package/table-builder/components/in-filter/in-filter.component.d.ts +0 -20
  350. package/table-builder/components/initialization-component/initialization-component.d.ts +0 -13
  351. package/table-builder/components/link-column.component.d.ts +0 -25
  352. package/table-builder/components/number-filter/number-filter.component.d.ts +0 -39
  353. package/table-builder/components/profiles-menu/profiles-menu.component.d.ts +0 -32
  354. package/table-builder/components/scroll-strategy.d.ts +0 -22
  355. package/table-builder/components/sort-menu/sort-menu.component-store.d.ts +0 -23
  356. package/table-builder/components/sort-menu/sort-menu.component.d.ts +0 -24
  357. package/table-builder/components/table-container/table-container.d.ts +0 -77
  358. package/table-builder/components/table-container/table-container.helpers/data-state.helpers.d.ts +0 -6
  359. package/table-builder/components/table-container/table-container.helpers/filter-state.helpers.d.ts +0 -17
  360. package/table-builder/components/table-container/table-container.helpers/groupBy.helpers.d.ts +0 -17
  361. package/table-builder/components/table-container/table-container.helpers/sort-state.helpers.d.ts +0 -8
  362. package/table-builder/components/table-container/tableProps.d.ts +0 -12
  363. package/table-builder/components/table-container/virtual-scroll-container.d.ts +0 -21
  364. package/table-builder/components/table-container-filter/filter-list/filter-list.component.d.ts +0 -16
  365. package/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.d.ts +0 -14
  366. package/table-builder/components/table-container-filter/table-wrapper-filter-store.d.ts +0 -14
  367. package/table-builder/directives/custom-cell-directive.d.ts +0 -31
  368. package/table-builder/directives/multi-sort.directive.d.ts +0 -10
  369. package/table-builder/directives/resize-column.directive.d.ts +0 -43
  370. package/table-builder/directives/table-wrapper.directive.d.ts +0 -8
  371. package/table-builder/directives/tb-filter.directive.d.ts +0 -116
  372. package/table-builder/enums/filterTypes.d.ts +0 -36
  373. package/table-builder/functions/boolean-filter-function.d.ts +0 -3
  374. package/table-builder/functions/date-filter-function.d.ts +0 -4
  375. package/table-builder/functions/download-data.d.ts +0 -1
  376. package/table-builder/functions/null-filter-function.d.ts +0 -2
  377. package/table-builder/functions/number-filter-function.d.ts +0 -4
  378. package/table-builder/functions/sort-data-function.d.ts +0 -6
  379. package/table-builder/functions/string-filter-function.d.ts +0 -5
  380. package/table-builder/interfaces/report-def.d.ts +0 -147
  381. package/table-builder/ngrx/tableBuilderStateStore.d.ts +0 -70
  382. package/table-builder/pipes/column-total.pipe.d.ts +0 -8
  383. package/table-builder/pipes/format-filter-type.pipe.d.ts +0 -8
  384. package/table-builder/pipes/format-filter-value.pipe.d.ts +0 -12
  385. package/table-builder/pipes/key-display.d.ts +0 -10
  386. package/table-builder/services/export-to-csv.service.d.ts +0 -19
  387. package/table-builder/services/link-creator.service.d.ts +0 -16
  388. package/table-builder/services/table-template-service.d.ts +0 -14
  389. package/table-builder/services/transform-creator.d.ts +0 -16
  390. package/table-builder/table-builder.module.d.ts +0 -21
  391. package/utilities/array-helpers.d.ts +0 -1
  392. package/utilities/directives/auto-focus.directive.d.ts +0 -9
  393. package/utilities/directives/clickEmitterDirective.d.ts +0 -7
  394. package/utilities/directives/clickSubject.d.ts +0 -9
  395. package/utilities/directives/conditional-classes.directive.d.ts +0 -13
  396. package/utilities/directives/dialog-service.d.ts +0 -10
  397. package/utilities/directives/dialog.d.ts +0 -44
  398. package/utilities/directives/mat-toggle-group-directive.d.ts +0 -21
  399. package/utilities/directives/prevent-enter.directive.d.ts +0 -6
  400. package/utilities/directives/stop-propagation.directive.d.ts +0 -7
  401. package/utilities/directives/styler.d.ts +0 -15
  402. package/utilities/directives/trim-whitespace.directive.d.ts +0 -7
  403. package/utilities/module.d.ts +0 -19
  404. package/utilities/pipes/function.pipe.d.ts +0 -7
  405. package/utilities/pipes/phone.pipe.d.ts +0 -7
  406. package/utilities/pipes/space-case.pipes.d.ts +0 -17
package/README.md CHANGED
@@ -1,24 +1,24 @@
1
- # Angular Utilities
2
-
3
- This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.0.5.
4
-
5
- ## Code scaffolding
6
-
7
- Run `ng generate component component-name --project AngularUtilities` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project AngularUtilities`.
8
- > Note: Don't forget to add `--project AngularUtilities` or else it will be added to the default project in your `angular.json` file.
9
-
10
- ## Build
11
-
12
- Run `ng build AngularUtilities` to build the project. The build artifacts will be stored in the `dist/` directory.
13
-
14
- ## Publishing
15
-
16
- After building your library with `ng build AngularUtilities`, go to the dist folder `cd dist/http-request-state` and run `npm publish`.
17
-
18
- ## Running unit tests
19
-
20
- Run `ng test AngularUtilities` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
-
22
- ## Further help
23
-
24
- To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
1
+ # Angular Utilities
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.0.5.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project AngularUtilities` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project AngularUtilities`.
8
+ > Note: Don't forget to add `--project AngularUtilities` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build AngularUtilities` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build AngularUtilities`, go to the dist folder `cd dist/http-request-state` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test AngularUtilities` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
package/karma.conf.js ADDED
@@ -0,0 +1,44 @@
1
+ // Karma configuration file, see link for more information
2
+ // https://karma-runner.github.io/1.0/config/configuration-file.html
3
+
4
+ module.exports = function (config) {
5
+ config.set({
6
+ basePath: '',
7
+ frameworks: ['jasmine', '@angular-devkit/build-angular'],
8
+ plugins: [
9
+ require('karma-jasmine'),
10
+ require('karma-chrome-launcher'),
11
+ require('karma-jasmine-html-reporter'),
12
+ require('karma-coverage'),
13
+ require('@angular-devkit/build-angular/plugins/karma')
14
+ ],
15
+ client: {
16
+ jasmine: {
17
+ // you can add configuration options for Jasmine here
18
+ // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
19
+ // for example, you can disable the random execution with `random: false`
20
+ // or set a specific seed with `seed: 4321`
21
+ },
22
+ clearContext: false // leave Jasmine Spec Runner output visible in browser
23
+ },
24
+ jasmineHtmlReporter: {
25
+ suppressAll: true // removes the duplicated traces
26
+ },
27
+ coverageReporter: {
28
+ dir: require('path').join(__dirname, '../../coverage/http-request-state'),
29
+ subdir: '.',
30
+ reporters: [
31
+ { type: 'html' },
32
+ { type: 'text-summary' }
33
+ ]
34
+ },
35
+ reporters: ['progress', 'kjhtml'],
36
+ port: 9876,
37
+ colors: true,
38
+ logLevel: config.LOG_INFO,
39
+ autoWatch: true,
40
+ browsers: ['Chrome'],
41
+ singleRun: false,
42
+ restartOnFileChange: true
43
+ });
44
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3
+ "dest": "../../dist/angular-utilities",
4
+ "lib": {
5
+ "entryFile": "src/public-api.ts"
6
+ }
7
+ }
package/package.json CHANGED
@@ -1,30 +1,16 @@
1
- {
2
- "name": "@one-paragon/angular-utilities",
3
- "version": "1.2.10",
4
- "peerDependencies": {
5
- "@angular/common": "18.2.2",
6
- "@angular/core": "18.2.2",
7
- "@angular/material": "18.2.2",
8
- "@ngrx/component": "18.0.2",
9
- "@ngrx/component-store": "18.0.2",
10
- "@ngrx/effects": "18.0.2",
11
- "@ngrx/store": "18.0.2"
12
- },
13
- "dependencies": {
14
- "tslib": "^2.6.2"
15
- },
16
- "module": "fesm2022/one-paragon-angular-utilities.mjs",
17
- "typings": "index.d.ts",
18
- "exports": {
19
- "./package.json": {
20
- "default": "./package.json"
21
- },
22
- ".": {
23
- "types": "./index.d.ts",
24
- "esm2022": "./esm2022/one-paragon-angular-utilities.mjs",
25
- "esm": "./esm2022/one-paragon-angular-utilities.mjs",
26
- "default": "./fesm2022/one-paragon-angular-utilities.mjs"
27
- }
28
- },
29
- "sideEffects": false
30
- }
1
+ {
2
+ "name": "@one-paragon/angular-utilities",
3
+ "version": "1.2.12",
4
+ "peerDependencies": {
5
+ "@angular/common": "18.2.2",
6
+ "@angular/core": "18.2.2",
7
+ "@angular/material": "18.2.2",
8
+ "@ngrx/component": "18.0.2",
9
+ "@ngrx/component-store": "18.0.2",
10
+ "@ngrx/effects": "18.0.2",
11
+ "@ngrx/store": "18.0.2"
12
+ },
13
+ "dependencies": {
14
+ "tslib": "^2.6.2"
15
+ }
16
+ }
@@ -0,0 +1,16 @@
1
+ #blocker {
2
+ position:fixed;
3
+ top: 0px;
4
+ left: 0px;
5
+ width:100%;
6
+ height:100%;
7
+ background-color:rgba(14, 13, 13, 0.411);
8
+ z-index:999999;
9
+ }
10
+
11
+ .spinner{
12
+ position: absolute;
13
+ top:50%;
14
+ left:40%;
15
+ transform: translate(-50%, -50%);
16
+ }
@@ -0,0 +1,6 @@
1
+ @if((serverActionStatus$ | async)?.status === serverStatusTypes.inProgress){
2
+ <div id="blocker">
3
+ <mat-spinner class="spinner" [diameter]="200" />
4
+ </div>
5
+ }
6
+
@@ -0,0 +1,25 @@
1
+ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { ActionStateSpinnerComponent } from './action-state-spinner.component';
4
+
5
+ describe('ActionStateSpinnerComponent', () => {
6
+ let component: ActionStateSpinnerComponent;
7
+ let fixture: ComponentFixture<ActionStateSpinnerComponent>;
8
+
9
+ beforeEach(async(() => {
10
+ TestBed.configureTestingModule({
11
+ declarations: [ ActionStateSpinnerComponent ]
12
+ })
13
+ .compileComponents();
14
+ }));
15
+
16
+ beforeEach(() => {
17
+ fixture = TestBed.createComponent(ActionStateSpinnerComponent);
18
+ component = fixture.componentInstance;
19
+ fixture.detectChanges();
20
+ });
21
+
22
+ it('should create', () => {
23
+ expect(component).toBeTruthy();
24
+ });
25
+ });
@@ -0,0 +1,26 @@
1
+ import { Component, OnInit, Input } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { ActionStatus, serverStatusTypes } from '../ngrx';
4
+ import { delayOn } from '../../rxjs';
5
+ import { AsyncPipe } from '@angular/common';
6
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
7
+
8
+ @Component({
9
+ selector: 'lib-action-state-spinner',
10
+ templateUrl: './action-state-spinner.component.html',
11
+ styleUrls: ['./action-state-spinner.component.css'],
12
+ standalone: true,
13
+ imports: [AsyncPipe, MatProgressSpinnerModule]
14
+ })
15
+ export class ActionStateSpinnerComponent implements OnInit {
16
+
17
+ @Input() status$!: Observable<ActionStatus>;
18
+ serverActionStatus$!: Observable<ActionStatus>;
19
+ serverStatusTypes = serverStatusTypes;
20
+
21
+ ngOnInit() {
22
+ this.serverActionStatus$ = this.status$.pipe(
23
+ delayOn( a => a.status === serverStatusTypes.inProgress , 500)
24
+ );
25
+ }
26
+ }
@@ -0,0 +1,13 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { ActionStateSpinnerComponent } from '../action-state-spinner/action-state-spinner.component';
3
+
4
+
5
+ @NgModule({
6
+ imports: [
7
+ ActionStateSpinnerComponent,
8
+ ],
9
+ exports: [
10
+ ActionStateSpinnerComponent,
11
+ ]
12
+ })
13
+ export class ActionStateUiModule { }
@@ -1,4 +1,8 @@
1
- export * from './ngrx';
2
- export * from './ngrx-ext/ngrx-ext.module';
3
- export * from './action-state-ui/action-state-ui.module';
4
- export * from './action-state-spinner/action-state-spinner.component';
1
+ /*
2
+ * Public API Surface of action-state
3
+ */
4
+
5
+ export * from './ngrx';
6
+ export * from './ngrx-ext/ngrx-ext.module';
7
+ export * from './action-state-ui/action-state-ui.module';
8
+ export * from './action-state-spinner/action-state-spinner.component';
@@ -0,0 +1,15 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { actionStatusReducer } from '../ngrx';
4
+ import { StoreModule } from '@ngrx/store';
5
+
6
+
7
+
8
+ @NgModule({
9
+ declarations: [],
10
+ imports: [
11
+ CommonModule,
12
+ StoreModule.forFeature('ActionStatus', actionStatusReducer),
13
+ ]
14
+ })
15
+ export class NgrxExtModule { }
@@ -0,0 +1,69 @@
1
+ import { Action, createFeatureSelector, createSelector } from '@ngrx/store';
2
+ import { createEntityAdapter, EntityState } from '@ngrx/entity';
3
+ import { get } from 'lodash';
4
+
5
+ // State
6
+ export class AppStatusState {
7
+ readonly ActionStatusBar!: ActionStatus[];
8
+ }
9
+
10
+ export interface StatusState {
11
+ ids: string[];
12
+ entities: {[id: string]: ActionStatus};
13
+ }
14
+
15
+ export class ActionStatus {
16
+ id!: string;
17
+ displayName?: string;
18
+ status!: serverStatusTypes;
19
+ responsePayload?: any;
20
+ }
21
+
22
+ const InitialState: StatusState = {
23
+ ids: [],
24
+ entities: {}
25
+ };
26
+
27
+ export enum serverStatusTypes {
28
+ notStarted = 0,
29
+ inProgress = 1,
30
+ success = 2,
31
+ error = 3
32
+ }
33
+
34
+ // Entity and Selectors
35
+ export const statusAdapter = createEntityAdapter<ActionStatus>();
36
+ export interface State extends EntityState<ActionStatus> {}
37
+ export const initialState: StatusState = statusAdapter.getInitialState(InitialState);
38
+
39
+ export const getStatusState = createFeatureSelector<State>('ActionStatus');
40
+ export const {
41
+ selectIds,
42
+ selectEntities,
43
+ selectAll,
44
+ selectTotal
45
+ } = statusAdapter.getSelectors(getStatusState);
46
+
47
+ export const selectEntity = (id: string) => createSelector(
48
+ selectEntities,
49
+ (entities: any) => entities[id]
50
+ );
51
+
52
+ // Reducers
53
+ export function actionStatusReducer(state: StatusState = initialState, action: Action) {
54
+
55
+ const actionStatus: ActionStatus = get(action, 'payload.actionStatus' ) as any;
56
+
57
+ if ( actionStatus ) {
58
+ if ( state.ids.find(id => id === actionStatus.id) ) {
59
+ const modifiedObj = {...state.entities[actionStatus.id] };
60
+ modifiedObj.status = actionStatus.status;
61
+ modifiedObj.responsePayload = actionStatus.responsePayload;
62
+ return statusAdapter.upsertOne( modifiedObj, state);
63
+ } else {
64
+ return statusAdapter.addOne(actionStatus , state);
65
+ }
66
+
67
+ }
68
+ return state;
69
+ }
@@ -0,0 +1,66 @@
1
+ import { DestroyRef, Injectable, OnDestroy, assertInInjectionContext, inject } from "@angular/core";
2
+ import { HttpRequestFactory, RequestStateOptions, RequestCreatorOptions } from "./types";
3
+ import { HttpRequestStateStore } from './HttpRequestStateStore';
4
+ import { Observable } from "rxjs";
5
+
6
+ @Injectable()
7
+ export class HttpRequestStateFactory implements OnDestroy {
8
+
9
+ constructor() {}
10
+ ngOnDestroy(): void {
11
+ this.requestors.forEach( request => request.ngOnDestroy());
12
+ }
13
+ private requestors: OnDestroy[] = [];
14
+
15
+ create<TParam extends any[], V>( req: HttpRequestFactory<TParam, V>, options?: RequestStateOptions<TParam>) : HttpRequestStateStore<TParam, V>
16
+ create<TParam extends any[], V, R, T = R>( req: HttpRequestFactory<TParam, V>, project: (v: V) => R , options?: RequestStateOptions<TParam>) : HttpRequestStateStore<TParam, V, T>
17
+ create<TParam extends any[], V, R = null, T = R extends null ? V : R>( req: HttpRequestFactory<TParam, V>, optionsOrProject?: RequestStateOptions<TParam> | ((v: V) => R), options?: RequestStateOptions<TParam> ) : HttpRequestStateStore<TParam, V, R, T> {
18
+ const requestor = (typeof(optionsOrProject) === 'function' ? new HttpRequestStateStore<TParam, V, R, T>(req, options, optionsOrProject) : new HttpRequestStateStore<TParam, V, R, T>(req, options));
19
+ this.requestors.push(requestor);
20
+ return requestor;
21
+ }
22
+
23
+ createHttpClient<T>( r: (o: Observable<T> ) => Observable<T> , options?: RequestStateOptions<any> ) {
24
+ const requestor = new HttpRequestStateStore(r, options);
25
+ this.requestors.push(requestor);
26
+ return requestor;
27
+ }
28
+
29
+ }
30
+
31
+ export function createRequestor<TParam extends any[], V>( req: HttpRequestFactory<TParam, V>, options?: RequestCreatorOptions<TParam>) : HttpRequestStateStore<TParam, V>
32
+ export function createRequestor<TParam extends any[], V, R, T = R>( req: HttpRequestFactory<TParam, V>, project: (v: V) => R , options?: RequestCreatorOptions<TParam>) : HttpRequestStateStore<TParam, V, T>
33
+ export function createRequestor<TParam extends any[], V, R = null, T = R extends null ? V : R>( req: HttpRequestFactory<TParam, V>, optionsOrProject?: RequestCreatorOptions<TParam> | ((v: V) => R), options?: RequestCreatorOptions<TParam> ) : HttpRequestStateStore<TParam, V, R, T>{
34
+
35
+ const ops = isFunction(optionsOrProject) ? options : optionsOrProject;
36
+
37
+ const destroyRef = getDestroyRef(ops);
38
+
39
+ const requestStore = typeof(optionsOrProject) === 'function' ?
40
+ new HttpRequestStateStore<TParam, V, R, T>(req, options, optionsOrProject)
41
+ : new HttpRequestStateStore<TParam, V, R, T>(req, optionsOrProject);
42
+
43
+ destroyRef.onDestroy(() => requestStore?.ngOnDestroy());
44
+
45
+ return requestStore;
46
+ }
47
+
48
+ function isFunction(value: any): value is Function {
49
+ return typeof value === 'function';
50
+ }
51
+
52
+ function getDestroyRef(options?: RequestCreatorOptions<any>){
53
+ const providedInjector = options?.injector;
54
+
55
+ if(!providedInjector){
56
+ try {
57
+ assertInInjectionContext(createRequestor);
58
+ } catch (error) {
59
+ throw new Error('createRequestor() must be used in an Injection Context or you must provide an injector to createRequestor()');
60
+ }
61
+ }
62
+
63
+ const destroyRef = providedInjector?.get(DestroyRef) || inject(DestroyRef);
64
+
65
+ return destroyRef;
66
+ }
@@ -0,0 +1,173 @@
1
+ import { Observable, of, Subscription } from 'rxjs';
2
+ import { ComponentStore } from '@ngrx/component-store';
3
+ import { HttpRequestFactory, HttpRequestStrategy, HttpRequestStatus, HttpRequestState, RequestStateOptions, HttpRequestStateCancelled } from './types';
4
+ import { createFailure, createSuccess, inProgress, isErrorState, isSuccessOrErrorState, isSuccessState, notStarted } from './helpers';
5
+ import { concatMap, filter, map, mergeMap, startWith, switchMap, takeUntil, tap } from 'rxjs/operators';
6
+ import { HttpErrorResponse } from '@angular/common/http';
7
+ import { mapError } from '../rxjs/mapError';
8
+ import { defaultShareReplay } from '../rxjs/defaultShareReplay';
9
+ import { computed, Directive, Injector, isSignal, Signal } from '@angular/core';
10
+ import { toObservable } from '@angular/core/rxjs-interop';
11
+ import { notNull } from '../rxjs';
12
+
13
+ export interface RequestResponse<TParam extends any[], T> {
14
+ requestParams: [...TParam];
15
+ response: HttpRequestState<T>;
16
+ }
17
+
18
+ @Directive()
19
+ export class HttpRequestStateStore<TParam extends any[], V, R = null, T = R extends null ? V : R> extends ComponentStore<RequestResponse<TParam, T>> {
20
+ private options?: RequestStateOptions;
21
+ private project?: (v: V) => R;
22
+ private req: HttpRequestFactory<TParam, V>;
23
+ private injector?: Injector;
24
+ constructor(req: HttpRequestFactory<TParam, V> ,options?: RequestStateOptions<TParam>, project?: (v: V) => R) {
25
+ super({ requestParams: null as any, response: notStarted });
26
+ this.project = project;
27
+ this.options = options;
28
+ this.injector = options?.injector;
29
+ this.req = req;
30
+ this.request = (this.options?.strategy === HttpRequestStrategy.singleUse) ? this.singleUseRequest : this.flattenedRequest;
31
+
32
+ if(options?.autoRequestWith){
33
+ this.request(...options.autoRequestWith);
34
+ }
35
+ }
36
+
37
+ reset() {
38
+ this.setState({ requestParams:null as any, response: notStarted });
39
+ }
40
+
41
+ private flatteningStrategy = () => {
42
+ if(this.options?.strategy === HttpRequestStrategy.concurrent)
43
+ return mergeMap( (params: [...TParam]) => this.createRequest(...params));
44
+ if(this.options?.strategy === HttpRequestStrategy.sequential)
45
+ return concatMap( (params: [...TParam]) => this.createRequest(...params));
46
+ return switchMap( (params: [...TParam]) => ((params[0] as any) instanceof CancellationToken) ?
47
+ of({ requestParams: params[0], response: { status: HttpRequestStatus.cancelled } as HttpRequestStateCancelled } ) : this.createRequest(...params) );
48
+ }
49
+
50
+ private requestEffect: (value: [...TParam] ) => Subscription = this.effect((obs: Observable<[...TParam]>) => {
51
+ return (obs).pipe(
52
+ this.flatteningStrategy(),
53
+ tap<RequestResponse<TParam, T>>(state => this.setState(state)),
54
+ );
55
+ });
56
+
57
+ private flattenedRequest = (...value: [...TParam]) => {
58
+ return this.requestEffect(value) as Subscription;
59
+ }
60
+ private singleUseRequest = (...value: [...TParam]) => {
61
+ if (this.get().response.status !== HttpRequestStatus.notStarted) {
62
+ throw new Error("state can not be reused. either reset the state by calling reset() or use a state requester that allows concurrent requests.");
63
+ }
64
+ return this.requestEffect(value) as Subscription;
65
+ }
66
+
67
+ selectHttpState$ = this.state$.pipe(map(a => a.response));
68
+
69
+ selectStatus$ = this.selectHttpState$.pipe(map(a => a.status));
70
+
71
+ selectError$ = this.state$.pipe(
72
+ map(r => r.response),
73
+ filter(isErrorState),
74
+ map( state => state.error)
75
+ );
76
+
77
+ selectResponse$: Observable<T> = this.state$.pipe(
78
+ map(r => r.response),
79
+ filter(isSuccessState),
80
+ map( state => state.body)
81
+ );
82
+ selectSuccessOrError$ = this.state$.pipe(
83
+ map(r => r.response),
84
+ filter(isSuccessOrErrorState),
85
+ map( () => null)
86
+ );
87
+
88
+ errorHandled = false;
89
+ onError( cb: (error: HttpErrorResponse) => void) {
90
+ this.errorHandled = true;
91
+ this.on(this.selectError$, cb);
92
+ return this;
93
+ }
94
+
95
+ onSuccess( cb: (body?: T) => void) {
96
+ this.on(this.selectResponse$, cb);
97
+ return this;
98
+ }
99
+
100
+ onSuccessOrError(cb: () => void){
101
+ this.on(this.selectSuccessOrError$, cb);
102
+ return this;
103
+ }
104
+
105
+ onSuccessWithRequest(func: (state: {
106
+ requestParams: [...TParam];
107
+ body: T;
108
+ }) => void) {
109
+ this.onUpdate(({ requestParams, response }) => {
110
+ if(isSuccessState(response)){
111
+ func({requestParams,body: response.body});
112
+ }
113
+ });
114
+ return this;
115
+ }
116
+
117
+ onErrorWithRequest(func: (state: {
118
+ error: HttpErrorResponse;
119
+ requestParams: [...TParam];
120
+ }) => void) {
121
+ this.onUpdate( ({ requestParams, response }) => {
122
+ if(isErrorState(response)){
123
+ func({ requestParams, error: response.error });
124
+ }
125
+ });
126
+ return this;
127
+ }
128
+
129
+ private createRequest(...params: [...TParam]): Observable<RequestResponse<TParam, T>> {
130
+ return this.req(...params).pipe(
131
+ map(re => createSuccess((this.project ? this.project(re) : re) as T)),
132
+ mapError(createFailure),
133
+ startWith(inProgress),
134
+ map( state => ({ requestParams: params, response: state })),
135
+ defaultShareReplay()
136
+ );
137
+ }
138
+
139
+ onUpdate(func: (state: {
140
+ requestParams: [...TParam];
141
+ response: HttpRequestState<T>;
142
+ }) => void) {
143
+ this.on(this.state$, func);
144
+ }
145
+
146
+ on = <V>(srcObservable: Observable<V>, func: (obj: V) => void): Subscription => {
147
+ return this.effect((src: Observable<V>) => {
148
+ return src.pipe(tap(func));
149
+ })(srcObservable) as Subscription;
150
+ }
151
+
152
+ request: (...value: [...TParam] ) => Subscription;
153
+
154
+ ngOnDestroy() {
155
+ super.ngOnDestroy();
156
+ }
157
+
158
+ requestWith = (params: Observable<[...TParam]> | Signal<[...TParam]>) => {
159
+ if(isSignal(params)){
160
+ params = toObservable(params, { injector: this.injector }).pipe(notNull());
161
+ }
162
+ params.pipe(takeUntil(this.destroy$)).subscribe((p) => this.request(...p));
163
+ return this;
164
+ }
165
+ }
166
+ export class CancellationToken {}
167
+ export function wrapInArr<T>(sig: Signal<T>) : Signal<[T]>;
168
+ export function wrapInArr<T>(obs: Observable<T>): Observable<[T]>;
169
+ export function wrapInArr<T>(sigOrObs: Signal<T> | Observable<T>){
170
+ return isSignal(sigOrObs) ?
171
+ computed(() => [sigOrObs()])
172
+ : sigOrObs.pipe(map(a => [a]));
173
+ }
@@ -0,0 +1,29 @@
1
+ import { Directive, inject, Injector, TemplateRef, ViewContainerRef } from '@angular/core';
2
+ import { HttpRequestState } from '../types';
3
+ import { HttpRequestStateDirective } from './request-state-directive';
4
+
5
+ @Directive()
6
+ export abstract class HttpStateDirectiveBase<V, R = null> {
7
+ hasView = false;
8
+ private injector = inject(Injector);
9
+ protected templateRef = inject(TemplateRef<{ $implicit: R extends null ? V : R }>);
10
+ protected viewContainer = inject(ViewContainerRef);
11
+ ngOnInit() {
12
+ const parent = this.injector.get(HttpRequestStateDirective);
13
+ if (parent == null) {
14
+ throw new Error('You can only use an http state directive as a child of the httpRequestState directive.');
15
+ }
16
+ parent.hooks.push(this.baseRender);
17
+ this.baseRender(parent.ViewContext.state);
18
+ }
19
+
20
+ private baseRender = (state: HttpRequestState): void => {
21
+ if (this.hasView) {
22
+ this.viewContainer.clear();
23
+ this.hasView = false;
24
+ }
25
+ this.hasView = this.render(state);
26
+ }
27
+
28
+ abstract render: (state: HttpRequestState) => boolean;
29
+ }
@@ -0,0 +1,21 @@
1
+ import { Directive } from '@angular/core';
2
+ import { isErrorState } from '../helpers';
3
+ import { HttpRequestState } from '../types';
4
+ import { HttpStateDirectiveBase } from './HttpStateDirectiveBase';
5
+
6
+ @Directive({ selector: '[httpErrorState]', standalone: true })
7
+ export class HttpErrorStateDirective<V, R = null> extends HttpStateDirectiveBase<V, R> {
8
+
9
+
10
+ render = (state: HttpRequestState<any>) => {
11
+ if (isErrorState(state)) {
12
+ this.viewContainer.createEmbeddedView(this.templateRef, { $implicit: state.error });
13
+ return true;
14
+ }
15
+ return false;
16
+ };
17
+
18
+ ngOnInit() {
19
+ super.ngOnInit();
20
+ }
21
+ }
@@ -0,0 +1,19 @@
1
+ import { Directive } from '@angular/core';
2
+ import { HttpStateDirectiveBase } from './HttpStateDirectiveBase';
3
+ import { HttpRequestState, HttpRequestStatus } from '../types'
4
+
5
+
6
+ @Directive({ selector: '[httpInProgressState]', standalone: true })
7
+ export class HttpInProgressStateDirective<V, R = null> extends HttpStateDirectiveBase<V, R> {
8
+ render = (state: HttpRequestState<any>) => {
9
+ if(state.status === HttpRequestStatus.inProgress){
10
+ this.viewContainer.createEmbeddedView(this.templateRef );
11
+ return true;
12
+ }
13
+ return false;
14
+ };
15
+
16
+ ngOnInit() {
17
+ super.ngOnInit();
18
+ }
19
+ }