@bravobit/bb-foundation 0.15.6 → 0.16.3

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 (388) hide show
  1. package/auth/lib/auth.interceptor.d.ts +1 -1
  2. package/auth/lib/auth.service.d.ts +1 -1
  3. package/auth/package.json +5 -5
  4. package/collections/lib/collection.d.ts +1 -1
  5. package/collections/package.json +5 -5
  6. package/controls/bravobit-bb-foundation-controls.d.ts +5 -0
  7. package/controls/lib/checkbox/checkbox/checkbox.component.d.ts +47 -0
  8. package/controls/lib/checkbox/checkbox-group/checkbox-group.component.d.ts +18 -0
  9. package/controls/lib/checkbox/checkbox.module.d.ts +9 -0
  10. package/controls/lib/controls.module.d.ts +7 -0
  11. package/controls/package.json +10 -0
  12. package/controls/public_api.d.ts +4 -0
  13. package/dashboard/package.json +5 -5
  14. package/dialog/package.json +5 -5
  15. package/elements/package.json +5 -5
  16. package/{esm2015/auth/bravobit-bb-foundation-auth.js → esm2020/auth/bravobit-bb-foundation-auth.mjs} +0 -0
  17. package/esm2020/auth/lib/auth.interceptor.mjs +94 -0
  18. package/{esm2015/auth/lib/auth.module.js → esm2020/auth/lib/auth.module.mjs} +5 -5
  19. package/esm2020/auth/lib/auth.service.mjs +276 -0
  20. package/esm2020/auth/lib/auth.session.mjs +131 -0
  21. package/{esm2015/auth/lib/directives/authenticated.directive.js → esm2020/auth/lib/directives/authenticated.directive.mjs} +5 -6
  22. package/esm2020/auth/lib/directives/permission.directive.mjs +80 -0
  23. package/esm2020/auth/lib/directives/role.directive.mjs +37 -0
  24. package/esm2020/auth/lib/guards/anonymous.guard.mjs +34 -0
  25. package/esm2020/auth/lib/guards/authenticated.guard.mjs +35 -0
  26. package/{esm2015/auth/lib/helpers/jwt.helper.js → esm2020/auth/lib/helpers/jwt.helper.mjs} +3 -3
  27. package/{esm2015/auth/lib/helpers/mapper.helper.js → esm2020/auth/lib/helpers/mapper.helper.mjs} +4 -4
  28. package/{esm2015/auth/lib/interfaces/config.interface.js → esm2020/auth/lib/interfaces/config.interface.mjs} +0 -0
  29. package/{esm2015/auth/lib/interfaces/mapper.interface.js → esm2020/auth/lib/interfaces/mapper.interface.mjs} +0 -0
  30. package/{esm2015/auth/lib/interfaces/provider.interface.js → esm2020/auth/lib/interfaces/provider.interface.mjs} +0 -0
  31. package/{esm2015/auth/lib/interfaces/token.interface.js → esm2020/auth/lib/interfaces/token.interface.mjs} +0 -0
  32. package/esm2020/auth/lib/permissions.service.mjs +56 -0
  33. package/esm2020/auth/lib/providers/email.provider.mjs +25 -0
  34. package/esm2020/auth/lib/providers/verify.provider.mjs +19 -0
  35. package/{esm2015/auth/lib/tokens/use-authorization.token.js → esm2020/auth/lib/tokens/use-authorization.token.mjs} +0 -0
  36. package/{esm2015/auth/public_api.js → esm2020/auth/public_api.mjs} +0 -0
  37. package/{esm2015/bravobit-bb-foundation.js → esm2020/bravobit-bb-foundation.mjs} +0 -0
  38. package/{esm2015/collections/bravobit-bb-foundation-collections.js → esm2020/collections/bravobit-bb-foundation-collections.mjs} +0 -0
  39. package/esm2020/collections/lib/collection.mjs +102 -0
  40. package/{esm2015/collections/lib/collections.module.js → esm2020/collections/lib/collections.module.mjs} +5 -5
  41. package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +123 -0
  42. package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +31 -0
  43. package/{esm2015/collections/lib/components/collections.directive.js → esm2020/collections/lib/components/collections.directive.mjs} +13 -13
  44. package/{esm2015/collections/lib/interfaces/collection.interface.js → esm2020/collections/lib/interfaces/collection.interface.mjs} +0 -0
  45. package/esm2020/collections/lib/providers/api-collection.provider.mjs +71 -0
  46. package/esm2020/collections/lib/providers/collection.provider.mjs +13 -0
  47. package/{esm2015/collections/lib/providers/local-collection.provider.js → esm2020/collections/lib/providers/local-collection.provider.mjs} +0 -0
  48. package/{esm2015/collections/public_api.js → esm2020/collections/public_api.mjs} +0 -0
  49. package/esm2020/controls/bravobit-bb-foundation-controls.mjs +5 -0
  50. package/esm2020/controls/lib/checkbox/checkbox/checkbox.component.mjs +153 -0
  51. package/esm2020/controls/lib/checkbox/checkbox-group/checkbox-group.component.mjs +48 -0
  52. package/esm2020/controls/lib/checkbox/checkbox.module.mjs +19 -0
  53. package/esm2020/controls/lib/controls.module.mjs +16 -0
  54. package/esm2020/controls/public_api.mjs +5 -0
  55. package/{esm2015/dashboard/bravobit-bb-foundation-dashboard.js → esm2020/dashboard/bravobit-bb-foundation-dashboard.mjs} +0 -0
  56. package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +56 -0
  57. package/esm2020/dashboard/lib/dashboard-header/dashboard-header.component.mjs +30 -0
  58. package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +31 -0
  59. package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +29 -0
  60. package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +75 -0
  61. package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +99 -0
  62. package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +62 -0
  63. package/{esm2015/dashboard/lib/dashboard.module.js → esm2020/dashboard/lib/dashboard.module.mjs} +5 -5
  64. package/{esm2015/dashboard/public_api.js → esm2020/dashboard/public_api.mjs} +0 -0
  65. package/{esm2015/dialog/bravobit-bb-foundation-dialog.js → esm2020/dialog/bravobit-bb-foundation-dialog.mjs} +0 -0
  66. package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +12 -0
  67. package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +37 -0
  68. package/{esm2015/dialog/lib/dialog-container/dialog-container.component.js → esm2020/dialog/lib/dialog-container/dialog-container.component.mjs} +6 -15
  69. package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +25 -0
  70. package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +11 -0
  71. package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +46 -0
  72. package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +134 -0
  73. package/{esm2015/dialog/lib/dialog.injector.js → esm2020/dialog/lib/dialog.injector.mjs} +0 -0
  74. package/{esm2015/dialog/lib/dialog.insertion.js → esm2020/dialog/lib/dialog.insertion.mjs} +4 -4
  75. package/{esm2015/dialog/lib/dialog.interfaces.js → esm2020/dialog/lib/dialog.interfaces.mjs} +0 -0
  76. package/{esm2015/dialog/lib/dialog.module.js → esm2020/dialog/lib/dialog.module.mjs} +5 -9
  77. package/{esm2015/dialog/lib/dialog.ref.js → esm2020/dialog/lib/dialog.ref.mjs} +0 -0
  78. package/{esm2015/dialog/lib/dialog.service.js → esm2020/dialog/lib/dialog.service.mjs} +5 -5
  79. package/{esm2015/dialog/public_api.js → esm2020/dialog/public_api.mjs} +0 -0
  80. package/{esm2015/elements/bravobit-bb-foundation-elements.js → esm2020/elements/bravobit-bb-foundation-elements.mjs} +0 -0
  81. package/esm2020/elements/lib/avatar/avatar.component.mjs +142 -0
  82. package/esm2020/elements/lib/button/button.component.mjs +61 -0
  83. package/esm2020/elements/lib/checkbox/checkbox.component.mjs +73 -0
  84. package/esm2020/elements/lib/date-picker/date-picker.component.mjs +304 -0
  85. package/{esm2015/elements/lib/directives/addon.directive.js → esm2020/elements/lib/directives/addon.directive.mjs} +7 -7
  86. package/esm2020/elements/lib/directives/autosize.directive.mjs +72 -0
  87. package/{esm2015/elements/lib/directives/focus-trap.directive.js → esm2020/elements/lib/directives/focus-trap.directive.mjs} +4 -4
  88. package/{esm2015/elements/lib/directives/focus.directive.js → esm2020/elements/lib/directives/focus.directive.mjs} +4 -4
  89. package/esm2020/elements/lib/directives/form-submit.directive.mjs +50 -0
  90. package/esm2020/elements/lib/directives/input.directive.mjs +136 -0
  91. package/{esm2015/elements/lib/directives/template.directive.js → esm2020/elements/lib/directives/template.directive.mjs} +4 -4
  92. package/esm2020/elements/lib/dropdown/dropdown.component.mjs +100 -0
  93. package/{esm2015/elements/lib/elements.interfaces.js → esm2020/elements/lib/elements.interfaces.mjs} +0 -0
  94. package/{esm2015/elements/lib/elements.module.js → esm2020/elements/lib/elements.module.mjs} +5 -5
  95. package/esm2020/elements/lib/file-picker/file-picker.component.mjs +236 -0
  96. package/esm2020/elements/lib/form-control/form-control.component.mjs +49 -0
  97. package/esm2020/elements/lib/form-error/form-error.component.mjs +108 -0
  98. package/esm2020/elements/lib/form-group/form-group.component.mjs +18 -0
  99. package/esm2020/elements/lib/icon/icon.component.mjs +102 -0
  100. package/esm2020/elements/lib/image-picker/image-picker.component.mjs +106 -0
  101. package/esm2020/elements/lib/pipes/file-image.pipe.mjs +42 -0
  102. package/{esm2015/elements/lib/pipes/file-size.pipe.js → esm2020/elements/lib/pipes/file-size.pipe.mjs} +4 -4
  103. package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +94 -0
  104. package/esm2020/elements/lib/spinner/spinner.component.mjs +25 -0
  105. package/esm2020/elements/lib/tag/tag.component.mjs +18 -0
  106. package/{esm2015/elements/public_api.js → esm2020/elements/public_api.mjs} +0 -0
  107. package/{esm2015/http/bravobit-bb-foundation-http.js → esm2020/http/bravobit-bb-foundation-http.mjs} +0 -0
  108. package/esm2020/http/lib/classes/http.config.mjs +29 -0
  109. package/esm2020/http/lib/classes/http.error.mjs +20 -0
  110. package/{esm2015/http/lib/http.interfaces.js → esm2020/http/lib/http.interfaces.mjs} +0 -0
  111. package/{esm2015/http/lib/http.module.js → esm2020/http/lib/http.module.mjs} +5 -5
  112. package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +50 -0
  113. package/esm2020/http/lib/interceptors/error.interceptor.mjs +32 -0
  114. package/{esm2015/http/public_api.js → esm2020/http/public_api.mjs} +0 -0
  115. package/{esm2015/lib/core/miscellaneous/regex.js → esm2020/lib/core/miscellaneous/regex.mjs} +0 -0
  116. package/esm2020/lib/core/miscellaneous/validator.mjs +85 -0
  117. package/esm2020/lib/core/mixins/can-disable.mjs +16 -0
  118. package/{esm2015/lib/core/mixins/can-hide-errors.js → esm2020/lib/core/mixins/can-hide-errors.mjs} +2 -2
  119. package/esm2020/lib/core/mixins/can-load.mjs +16 -0
  120. package/{esm2015/lib/core/mixins/constructor.js → esm2020/lib/core/mixins/constructor.mjs} +0 -0
  121. package/esm2020/lib/core/mixins/has-error.mjs +16 -0
  122. package/esm2020/lib/core/mixins/is-focused.mjs +16 -0
  123. package/esm2020/lib/core/mixins/is-grouped.mjs +16 -0
  124. package/esm2020/lib/core/mixins/is-readonly.mjs +16 -0
  125. package/esm2020/lib/core/mixins/is-required.mjs +16 -0
  126. package/esm2020/lib/core/services/clipboard.service.mjs +70 -0
  127. package/esm2020/lib/core/services/exif.service.mjs +163 -0
  128. package/esm2020/lib/core/services/file-loader.service.mjs +87 -0
  129. package/esm2020/lib/core/services/image-converter.service.mjs +123 -0
  130. package/{esm2015/lib/core/services/languages.service.js → esm2020/lib/core/services/languages.service.mjs} +4 -4
  131. package/{esm2015/lib/core/services/network.service.js → esm2020/lib/core/services/network.service.mjs} +5 -6
  132. package/esm2020/lib/core/services/patch.service.mjs +63 -0
  133. package/{esm2015/lib/core/services/platform.service.js → esm2020/lib/core/services/platform.service.mjs} +5 -5
  134. package/{esm2015/lib/core/tokens/accept-language.token.js → esm2020/lib/core/tokens/accept-language.token.mjs} +0 -0
  135. package/{esm2015/lib/core/tokens/base-url.token.js → esm2020/lib/core/tokens/base-url.token.mjs} +0 -0
  136. package/{esm2015/lib/core/tokens/cookie.token.js → esm2020/lib/core/tokens/cookie.token.mjs} +0 -0
  137. package/{esm2015/lib/core/tokens/location.token.js → esm2020/lib/core/tokens/location.token.mjs} +0 -0
  138. package/{esm2015/lib/core/tokens/navigator.token.js → esm2020/lib/core/tokens/navigator.token.mjs} +0 -0
  139. package/{esm2015/lib/core/tokens/window.token.js → esm2020/lib/core/tokens/window.token.mjs} +0 -0
  140. package/{esm2015/localize/bravobit-bb-foundation-localize.js → esm2020/localize/bravobit-bb-foundation-localize.mjs} +0 -0
  141. package/{esm2015/localize/lib/functions/date.function.js → esm2020/localize/lib/functions/date.function.mjs} +0 -0
  142. package/{esm2015/localize/lib/functions/lowercase.function.js → esm2020/localize/lib/functions/lowercase.function.mjs} +0 -0
  143. package/{esm2015/localize/lib/functions/uppercase.function.js → esm2020/localize/lib/functions/uppercase.function.mjs} +0 -0
  144. package/{esm2015/localize/lib/handlers/missing.handler.js → esm2020/localize/lib/handlers/missing.handler.mjs} +0 -0
  145. package/{esm2015/localize/lib/interfaces/config.interfaces.js → esm2020/localize/lib/interfaces/config.interfaces.mjs} +0 -0
  146. package/{esm2015/localize/lib/interfaces/dictionary.interfaces.js → esm2020/localize/lib/interfaces/dictionary.interfaces.mjs} +0 -0
  147. package/{esm2015/localize/lib/interfaces/functions.interfaces.js → esm2020/localize/lib/interfaces/functions.interfaces.mjs} +0 -0
  148. package/{esm2015/localize/lib/interfaces/handlers.interfaces.js → esm2020/localize/lib/interfaces/handlers.interfaces.mjs} +0 -0
  149. package/{esm2015/localize/lib/interfaces/options.interfaces.js → esm2020/localize/lib/interfaces/options.interfaces.mjs} +0 -0
  150. package/{esm2015/localize/lib/localizations/dutch.localization.js → esm2020/localize/lib/localizations/dutch.localization.mjs} +0 -0
  151. package/{esm2015/localize/lib/localizations/english.localization.js → esm2020/localize/lib/localizations/english.localization.mjs} +0 -0
  152. package/esm2020/localize/lib/localize.dictionary.mjs +135 -0
  153. package/{esm2015/localize/lib/localize.module.js → esm2020/localize/lib/localize.module.mjs} +5 -5
  154. package/{esm2015/localize/lib/localize.pipe.js → esm2020/localize/lib/localize.pipe.mjs} +5 -5
  155. package/esm2020/localize/lib/localize.service.mjs +277 -0
  156. package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +88 -0
  157. package/{esm2015/localize/lib/views/localize-template-or-string.directive.js → esm2020/localize/lib/views/localize-template-or-string.directive.mjs} +4 -4
  158. package/{esm2015/localize/lib/views/localize-template.directive.js → esm2020/localize/lib/views/localize-template.directive.mjs} +4 -4
  159. package/{esm2015/localize/public_api.js → esm2020/localize/public_api.mjs} +0 -0
  160. package/{esm2015/notifications/bravobit-bb-foundation-notifications.js → esm2020/notifications/bravobit-bb-foundation-notifications.mjs} +0 -0
  161. package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +100 -0
  162. package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +47 -0
  163. package/{esm2015/notifications/lib/notifications.animations.js → esm2020/notifications/lib/notifications.animations.mjs} +0 -0
  164. package/{esm2015/notifications/lib/notifications.injector.js → esm2020/notifications/lib/notifications.injector.mjs} +0 -0
  165. package/{esm2015/notifications/lib/notifications.interfaces.js → esm2020/notifications/lib/notifications.interfaces.mjs} +0 -0
  166. package/{esm2015/notifications/lib/notifications.module.js → esm2020/notifications/lib/notifications.module.mjs} +6 -7
  167. package/{esm2015/notifications/lib/notifications.service.js → esm2020/notifications/lib/notifications.service.mjs} +5 -5
  168. package/{esm2015/notifications/public_api.js → esm2020/notifications/public_api.mjs} +0 -0
  169. package/{esm2015/public_api.js → esm2020/public_api.mjs} +1 -2
  170. package/{esm2015/recaptcha/bravobit-bb-foundation-recaptcha.js → esm2020/recaptcha/bravobit-bb-foundation-recaptcha.mjs} +0 -0
  171. package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +185 -0
  172. package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +90 -0
  173. package/{esm2015/recaptcha/lib/recaptcha.interface.js → esm2020/recaptcha/lib/recaptcha.interface.mjs} +0 -0
  174. package/{esm2015/recaptcha/lib/recaptcha.module.js → esm2020/recaptcha/lib/recaptcha.module.mjs} +5 -5
  175. package/{esm2015/recaptcha/public_api.js → esm2020/recaptcha/public_api.mjs} +0 -0
  176. package/{esm2015/rxjs/bravobit-bb-foundation-rxjs.js → esm2020/rxjs/bravobit-bb-foundation-rxjs.mjs} +0 -0
  177. package/esm2020/rxjs/lib/operators/combine-latest-map.operator.mjs +10 -0
  178. package/{esm2015/rxjs/lib/operators/filter-nil.operator.js → esm2020/rxjs/lib/operators/filter-nil.operator.mjs} +0 -0
  179. package/{esm2015/rxjs/public_api.js → esm2020/rxjs/public_api.mjs} +0 -0
  180. package/{esm2015/storage/bravobit-bb-foundation-storage.js → esm2020/storage/bravobit-bb-foundation-storage.mjs} +0 -0
  181. package/{esm2015/storage/lib/interfaces/attributes.interface.js → esm2020/storage/lib/interfaces/attributes.interface.mjs} +0 -0
  182. package/{esm2015/storage/lib/interfaces/memory.interface.js → esm2020/storage/lib/interfaces/memory.interface.mjs} +0 -0
  183. package/{esm2015/storage/lib/interfaces/strategy.interface.js → esm2020/storage/lib/interfaces/strategy.interface.mjs} +0 -0
  184. package/esm2020/storage/lib/storage.service.mjs +109 -0
  185. package/esm2020/storage/lib/strategies/cookie-storage.strategy.mjs +142 -0
  186. package/{esm2015/storage/lib/strategies/memory-storage.strategy.js → esm2020/storage/lib/strategies/memory-storage.strategy.mjs} +2 -2
  187. package/esm2020/storage/lib/strategies/polyfill-storage.strategy.mjs +102 -0
  188. package/{esm2015/storage/public_api.js → esm2020/storage/public_api.mjs} +0 -0
  189. package/{esm2015/table/bravobit-bb-foundation-table.js → esm2020/table/bravobit-bb-foundation-table.mjs} +0 -0
  190. package/esm2020/table/lib/components/table/table.component.mjs +191 -0
  191. package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +11 -0
  192. package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +131 -0
  193. package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +136 -0
  194. package/esm2020/table/lib/data/datasource.data.mjs +32 -0
  195. package/esm2020/table/lib/data/generic.data.mjs +72 -0
  196. package/{esm2015/table/lib/interfaces/datasource.interface.js → esm2020/table/lib/interfaces/datasource.interface.mjs} +0 -0
  197. package/{esm2015/table/lib/interfaces/table.interfaces.js → esm2020/table/lib/interfaces/table.interfaces.mjs} +0 -0
  198. package/{esm2015/table/lib/table.module.js → esm2020/table/lib/table.module.mjs} +5 -5
  199. package/{esm2015/table/public_api.js → esm2020/table/public_api.mjs} +0 -0
  200. package/fesm2015/{bravobit-bb-foundation-auth.js → bravobit-bb-foundation-auth.mjs} +79 -68
  201. package/fesm2015/bravobit-bb-foundation-auth.mjs.map +1 -0
  202. package/fesm2015/{bravobit-bb-foundation-collections.js → bravobit-bb-foundation-collections.mjs} +45 -57
  203. package/fesm2015/bravobit-bb-foundation-collections.mjs.map +1 -0
  204. package/fesm2015/bravobit-bb-foundation-controls.mjs +235 -0
  205. package/fesm2015/bravobit-bb-foundation-controls.mjs.map +1 -0
  206. package/fesm2015/bravobit-bb-foundation-dashboard.mjs +416 -0
  207. package/fesm2015/bravobit-bb-foundation-dashboard.mjs.map +1 -0
  208. package/fesm2015/{bravobit-bb-foundation-dialog.js → bravobit-bb-foundation-dialog.mjs} +45 -106
  209. package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +1 -0
  210. package/fesm2015/{bravobit-bb-foundation-elements.js → bravobit-bb-foundation-elements.mjs} +195 -303
  211. package/fesm2015/bravobit-bb-foundation-elements.mjs.map +1 -0
  212. package/fesm2015/{bravobit-bb-foundation-http.js → bravobit-bb-foundation-http.mjs} +18 -16
  213. package/fesm2015/bravobit-bb-foundation-http.mjs.map +1 -0
  214. package/fesm2015/{bravobit-bb-foundation-localize.js → bravobit-bb-foundation-localize.mjs} +63 -69
  215. package/fesm2015/bravobit-bb-foundation-localize.mjs.map +1 -0
  216. package/fesm2015/bravobit-bb-foundation-notifications.mjs +377 -0
  217. package/fesm2015/bravobit-bb-foundation-notifications.mjs.map +1 -0
  218. package/fesm2015/{bravobit-bb-foundation-recaptcha.js → bravobit-bb-foundation-recaptcha.mjs} +40 -47
  219. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs.map +1 -0
  220. package/fesm2015/{bravobit-bb-foundation-rxjs.js → bravobit-bb-foundation-rxjs.mjs} +1 -1
  221. package/fesm2015/bravobit-bb-foundation-rxjs.mjs.map +1 -0
  222. package/fesm2015/{bravobit-bb-foundation-storage.js → bravobit-bb-foundation-storage.mjs} +12 -10
  223. package/fesm2015/bravobit-bb-foundation-storage.mjs.map +1 -0
  224. package/fesm2015/bravobit-bb-foundation-table.mjs +603 -0
  225. package/fesm2015/bravobit-bb-foundation-table.mjs.map +1 -0
  226. package/fesm2015/{bravobit-bb-foundation.js → bravobit-bb-foundation.mjs} +76 -69
  227. package/fesm2015/bravobit-bb-foundation.mjs.map +1 -0
  228. package/fesm2020/bravobit-bb-foundation-auth.mjs +928 -0
  229. package/fesm2020/bravobit-bb-foundation-auth.mjs.map +1 -0
  230. package/fesm2020/bravobit-bb-foundation-collections.mjs +441 -0
  231. package/fesm2020/bravobit-bb-foundation-collections.mjs.map +1 -0
  232. package/fesm2020/bravobit-bb-foundation-controls.mjs +233 -0
  233. package/fesm2020/bravobit-bb-foundation-controls.mjs.map +1 -0
  234. package/fesm2020/bravobit-bb-foundation-dashboard.mjs +404 -0
  235. package/fesm2020/bravobit-bb-foundation-dashboard.mjs.map +1 -0
  236. package/fesm2020/bravobit-bb-foundation-dialog.mjs +584 -0
  237. package/fesm2020/bravobit-bb-foundation-dialog.mjs.map +1 -0
  238. package/fesm2020/bravobit-bb-foundation-elements.mjs +1994 -0
  239. package/fesm2020/bravobit-bb-foundation-elements.mjs.map +1 -0
  240. package/fesm2020/bravobit-bb-foundation-http.mjs +168 -0
  241. package/fesm2020/bravobit-bb-foundation-http.mjs.map +1 -0
  242. package/fesm2020/bravobit-bb-foundation-localize.mjs +832 -0
  243. package/fesm2020/bravobit-bb-foundation-localize.mjs.map +1 -0
  244. package/fesm2020/bravobit-bb-foundation-notifications.mjs +375 -0
  245. package/fesm2020/bravobit-bb-foundation-notifications.mjs.map +1 -0
  246. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs +300 -0
  247. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs.map +1 -0
  248. package/fesm2020/bravobit-bb-foundation-rxjs.mjs +21 -0
  249. package/fesm2020/bravobit-bb-foundation-rxjs.mjs.map +1 -0
  250. package/fesm2020/bravobit-bb-foundation-storage.mjs +413 -0
  251. package/fesm2020/bravobit-bb-foundation-storage.mjs.map +1 -0
  252. package/fesm2020/bravobit-bb-foundation-table.mjs +592 -0
  253. package/fesm2020/bravobit-bb-foundation-table.mjs.map +1 -0
  254. package/fesm2020/bravobit-bb-foundation.mjs +892 -0
  255. package/fesm2020/bravobit-bb-foundation.mjs.map +1 -0
  256. package/http/package.json +5 -5
  257. package/localize/package.json +5 -5
  258. package/notifications/package.json +5 -5
  259. package/package.json +126 -8
  260. package/public_api.d.ts +0 -1
  261. package/recaptcha/package.json +5 -5
  262. package/rxjs/package.json +5 -5
  263. package/storage/package.json +5 -5
  264. package/table/package.json +5 -5
  265. package/bundles/bravobit-bb-foundation-auth.umd.js +0 -1483
  266. package/bundles/bravobit-bb-foundation-auth.umd.js.map +0 -1
  267. package/bundles/bravobit-bb-foundation-collections.umd.js +0 -868
  268. package/bundles/bravobit-bb-foundation-collections.umd.js.map +0 -1
  269. package/bundles/bravobit-bb-foundation-dashboard.umd.js +0 -876
  270. package/bundles/bravobit-bb-foundation-dashboard.umd.js.map +0 -1
  271. package/bundles/bravobit-bb-foundation-dialog.umd.js +0 -716
  272. package/bundles/bravobit-bb-foundation-dialog.umd.js.map +0 -1
  273. package/bundles/bravobit-bb-foundation-elements.umd.js +0 -2768
  274. package/bundles/bravobit-bb-foundation-elements.umd.js.map +0 -1
  275. package/bundles/bravobit-bb-foundation-http.umd.js +0 -535
  276. package/bundles/bravobit-bb-foundation-http.umd.js.map +0 -1
  277. package/bundles/bravobit-bb-foundation-localize.umd.js +0 -1292
  278. package/bundles/bravobit-bb-foundation-localize.umd.js.map +0 -1
  279. package/bundles/bravobit-bb-foundation-notifications.umd.js +0 -794
  280. package/bundles/bravobit-bb-foundation-notifications.umd.js.map +0 -1
  281. package/bundles/bravobit-bb-foundation-recaptcha.umd.js +0 -683
  282. package/bundles/bravobit-bb-foundation-recaptcha.umd.js.map +0 -1
  283. package/bundles/bravobit-bb-foundation-rxjs.umd.js +0 -29
  284. package/bundles/bravobit-bb-foundation-rxjs.umd.js.map +0 -1
  285. package/bundles/bravobit-bb-foundation-storage.umd.js +0 -799
  286. package/bundles/bravobit-bb-foundation-storage.umd.js.map +0 -1
  287. package/bundles/bravobit-bb-foundation-table.umd.js +0 -1084
  288. package/bundles/bravobit-bb-foundation-table.umd.js.map +0 -1
  289. package/bundles/bravobit-bb-foundation.umd.js +0 -1440
  290. package/bundles/bravobit-bb-foundation.umd.js.map +0 -1
  291. package/esm2015/auth/lib/auth.interceptor.js +0 -95
  292. package/esm2015/auth/lib/auth.service.js +0 -299
  293. package/esm2015/auth/lib/auth.session.js +0 -136
  294. package/esm2015/auth/lib/directives/permission.directive.js +0 -81
  295. package/esm2015/auth/lib/directives/role.directive.js +0 -38
  296. package/esm2015/auth/lib/guards/anonymous.guard.js +0 -35
  297. package/esm2015/auth/lib/guards/authenticated.guard.js +0 -36
  298. package/esm2015/auth/lib/permissions.service.js +0 -58
  299. package/esm2015/auth/lib/providers/email.provider.js +0 -26
  300. package/esm2015/auth/lib/providers/verify.provider.js +0 -20
  301. package/esm2015/collections/lib/collection.js +0 -104
  302. package/esm2015/collections/lib/components/collections-pager/collections-pager.component.js +0 -136
  303. package/esm2015/collections/lib/components/collections-viewer/collections-viewer.component.js +0 -39
  304. package/esm2015/collections/lib/providers/api-collection.provider.js +0 -69
  305. package/esm2015/collections/lib/providers/collection.provider.js +0 -14
  306. package/esm2015/dashboard/lib/dashboard/dashboard.component.js +0 -64
  307. package/esm2015/dashboard/lib/dashboard-header/dashboard-header.component.js +0 -41
  308. package/esm2015/dashboard/lib/dashboard-menu/dashboard-menu.component.js +0 -39
  309. package/esm2015/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.js +0 -38
  310. package/esm2015/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.js +0 -83
  311. package/esm2015/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.js +0 -110
  312. package/esm2015/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.js +0 -71
  313. package/esm2015/dialog/lib/dialog-actions/dialog-actions.component.js +0 -20
  314. package/esm2015/dialog/lib/dialog-confirm/dialog-confirm.component.js +0 -45
  315. package/esm2015/dialog/lib/dialog-header/dialog-header.component.js +0 -33
  316. package/esm2015/dialog/lib/dialog-link/dialog-link.component.js +0 -19
  317. package/esm2015/dialog/lib/dialog-modal/dialog-modal.component.js +0 -54
  318. package/esm2015/dialog/lib/dialog-overlay/dialog-overlay.component.js +0 -143
  319. package/esm2015/elements/lib/avatar/avatar.component.js +0 -151
  320. package/esm2015/elements/lib/button/button.component.js +0 -79
  321. package/esm2015/elements/lib/checkbox/checkbox.component.js +0 -83
  322. package/esm2015/elements/lib/date-picker/date-picker.component.js +0 -322
  323. package/esm2015/elements/lib/directives/autosize.directive.js +0 -74
  324. package/esm2015/elements/lib/directives/form-submit.directive.js +0 -53
  325. package/esm2015/elements/lib/directives/input.directive.js +0 -139
  326. package/esm2015/elements/lib/dropdown/dropdown.component.js +0 -111
  327. package/esm2015/elements/lib/file-picker/file-picker.component.js +0 -247
  328. package/esm2015/elements/lib/form-control/form-control.component.js +0 -58
  329. package/esm2015/elements/lib/form-error/form-error.component.js +0 -116
  330. package/esm2015/elements/lib/form-group/form-group.component.js +0 -27
  331. package/esm2015/elements/lib/icon/icon.component.js +0 -110
  332. package/esm2015/elements/lib/image-picker/image-picker.component.js +0 -119
  333. package/esm2015/elements/lib/pipes/file-image.pipe.js +0 -45
  334. package/esm2015/elements/lib/pipes/relative-time.pipe.js +0 -96
  335. package/esm2015/elements/lib/spinner/spinner.component.js +0 -34
  336. package/esm2015/elements/lib/tag/tag.component.js +0 -26
  337. package/esm2015/http/lib/classes/http.config.js +0 -31
  338. package/esm2015/http/lib/classes/http.error.js +0 -21
  339. package/esm2015/http/lib/interceptors/base-url.interceptor.js +0 -52
  340. package/esm2015/http/lib/interceptors/error.interceptor.js +0 -33
  341. package/esm2015/lib/core/coercions/boolean-coercion.js +0 -4
  342. package/esm2015/lib/core/miscellaneous/validator.js +0 -86
  343. package/esm2015/lib/core/mixins/can-disable.js +0 -16
  344. package/esm2015/lib/core/mixins/can-load.js +0 -16
  345. package/esm2015/lib/core/mixins/has-error.js +0 -16
  346. package/esm2015/lib/core/mixins/is-focused.js +0 -16
  347. package/esm2015/lib/core/mixins/is-grouped.js +0 -16
  348. package/esm2015/lib/core/mixins/is-readonly.js +0 -16
  349. package/esm2015/lib/core/mixins/is-required.js +0 -16
  350. package/esm2015/lib/core/services/clipboard.service.js +0 -72
  351. package/esm2015/lib/core/services/exif.service.js +0 -168
  352. package/esm2015/lib/core/services/file-loader.service.js +0 -90
  353. package/esm2015/lib/core/services/image-converter.service.js +0 -130
  354. package/esm2015/lib/core/services/patch.service.js +0 -65
  355. package/esm2015/localize/lib/localize.dictionary.js +0 -137
  356. package/esm2015/localize/lib/localize.service.js +0 -282
  357. package/esm2015/localize/lib/views/localize-string/localize-string.component.js +0 -99
  358. package/esm2015/notifications/lib/notifications-item/notifications-item.component.js +0 -108
  359. package/esm2015/notifications/lib/notifications-list/notifications-list.component.js +0 -56
  360. package/esm2015/recaptcha/lib/recaptcha/recaptcha.component.js +0 -199
  361. package/esm2015/recaptcha/lib/recaptcha-loader.service.js +0 -93
  362. package/esm2015/rxjs/lib/operators/combine-latest-map.operator.js +0 -7
  363. package/esm2015/storage/lib/storage.service.js +0 -111
  364. package/esm2015/storage/lib/strategies/cookie-storage.strategy.js +0 -143
  365. package/esm2015/storage/lib/strategies/polyfill-storage.strategy.js +0 -102
  366. package/esm2015/table/lib/components/table/table.component.js +0 -204
  367. package/esm2015/table/lib/components/table-cell/table-cell.component.js +0 -19
  368. package/esm2015/table/lib/components/table-header-cell/table-header-cell.component.js +0 -143
  369. package/esm2015/table/lib/components/table-pager/table-pager.component.js +0 -146
  370. package/esm2015/table/lib/data/datasource.data.js +0 -32
  371. package/esm2015/table/lib/data/generic.data.js +0 -73
  372. package/fesm2015/bravobit-bb-foundation-auth.js.map +0 -1
  373. package/fesm2015/bravobit-bb-foundation-collections.js.map +0 -1
  374. package/fesm2015/bravobit-bb-foundation-dashboard.js +0 -468
  375. package/fesm2015/bravobit-bb-foundation-dashboard.js.map +0 -1
  376. package/fesm2015/bravobit-bb-foundation-dialog.js.map +0 -1
  377. package/fesm2015/bravobit-bb-foundation-elements.js.map +0 -1
  378. package/fesm2015/bravobit-bb-foundation-http.js.map +0 -1
  379. package/fesm2015/bravobit-bb-foundation-localize.js.map +0 -1
  380. package/fesm2015/bravobit-bb-foundation-notifications.js +0 -393
  381. package/fesm2015/bravobit-bb-foundation-notifications.js.map +0 -1
  382. package/fesm2015/bravobit-bb-foundation-recaptcha.js.map +0 -1
  383. package/fesm2015/bravobit-bb-foundation-rxjs.js.map +0 -1
  384. package/fesm2015/bravobit-bb-foundation-storage.js.map +0 -1
  385. package/fesm2015/bravobit-bb-foundation-table.js +0 -636
  386. package/fesm2015/bravobit-bb-foundation-table.js.map +0 -1
  387. package/fesm2015/bravobit-bb-foundation.js.map +0 -1
  388. package/lib/core/coercions/boolean-coercion.d.ts +0 -1
@@ -1,146 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, forwardRef, Input, ViewEncapsulation } from '@angular/core';
2
- import { mixinDisabled } from '@bravobit/bb-foundation';
3
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
- import { BehaviorSubject, combineLatest } from 'rxjs';
5
- import { map, share } from 'rxjs/operators';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@bravobit/bb-foundation/elements";
8
- import * as i2 from "@angular/common";
9
- class BbTablePagerBase {
10
- }
11
- const BbTablePagerMixinBase = mixinDisabled(BbTablePagerBase);
12
- export class BbTablePager extends BbTablePagerMixinBase {
13
- constructor() {
14
- super(...arguments);
15
- // Inputs.
16
- this.amountOfButtons = 5;
17
- this.showArrowButtons = true;
18
- // Methods.
19
- this.onChange = () => ({});
20
- this.onTouched = () => ({});
21
- this.trackByIndex = (_, item) => item.page;
22
- // Data.
23
- this._totalPages$ = new BehaviorSubject(1);
24
- this._pageNumber$ = new BehaviorSubject(1);
25
- }
26
- ngOnInit() {
27
- // Validate the previous button is disabled.
28
- this.isPreviousDisabled$ = this._pageNumber$.pipe(map(pageNumber => pageNumber === 1));
29
- // Validate the next button is disabled.
30
- this.isNextDisabled$ = combineLatest([this._pageNumber$, this._totalPages$]).pipe(map(([pageNumber, totalPages]) => pageNumber === totalPages));
31
- // Create the list with page numbers.
32
- this.list$ = combineLatest([this._pageNumber$, this._totalPages$]).pipe(map(([pageNumber, totalPages]) => this.filterActivePages(pageNumber, totalPages)), share());
33
- }
34
- get pageNumber() {
35
- return this._pageNumber$.getValue();
36
- }
37
- set pageNumber(newValue) {
38
- this.update(newValue);
39
- }
40
- get totalPages() {
41
- return this._totalPages$.getValue();
42
- }
43
- set totalPages(newValue) {
44
- const newTotalPages = Math.max(1, newValue);
45
- this._totalPages$.next(newTotalPages);
46
- }
47
- registerOnChange(fn) {
48
- this.onChange = fn;
49
- }
50
- registerOnTouched(fn) {
51
- this.onTouched = fn;
52
- }
53
- setDisabledState(isDisabled) {
54
- this.disabled = isDisabled;
55
- }
56
- writeValue(newValue) {
57
- this.update(newValue, false);
58
- }
59
- goToPrevious() {
60
- const newValue = this._pageNumber$.getValue() - 1;
61
- return this.update(newValue);
62
- }
63
- goToNext() {
64
- const newValue = this._pageNumber$.getValue() + 1;
65
- return this.update(newValue);
66
- }
67
- goToIndex(index) {
68
- return this.update(index);
69
- }
70
- update(pageNumber, notify = true) {
71
- // You can only update when not disabled.
72
- if (this.disabled) {
73
- return;
74
- }
75
- // Calculate the new value.
76
- const newValue = Math.min(this.totalPages, Math.max(1, pageNumber));
77
- // Don't do anything if the page number is the same.
78
- if (this._pageNumber$.getValue() === newValue) {
79
- return;
80
- }
81
- // Push the new value.
82
- this._pageNumber$.next(newValue);
83
- if (notify) {
84
- return this.onChange(pageNumber);
85
- }
86
- }
87
- calculatePages(pageNumber) {
88
- const min = 1;
89
- const max = this.totalPages;
90
- const amount = Math.max(1, this.amountOfButtons);
91
- const data = Array(amount)
92
- .fill(0)
93
- .map((_, index) => pageNumber + (index - 1));
94
- // Validate if the minimum value less than
95
- // the first value.
96
- if (data[0] < min) {
97
- return data.map(item => item + 1);
98
- }
99
- // Calculate the difference with the max
100
- // if this value is higher than 0 we should minus it.
101
- const lastValueInArray = data[data.length - 1];
102
- const differenceWithMax = lastValueInArray - max;
103
- if (differenceWithMax > 0) {
104
- return data.map(item => item - differenceWithMax);
105
- }
106
- // Just return the default data.
107
- return data;
108
- }
109
- filterActivePages(pageNumber, totalPages) {
110
- return this.calculatePages(pageNumber)
111
- .filter(page => page > 0 && page <= totalPages)
112
- .map(page => ({ page, active: pageNumber === page }));
113
- }
114
- }
115
- BbTablePager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: BbTablePager, deps: null, target: i0.ɵɵFactoryTarget.Component });
116
- BbTablePager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.11", type: BbTablePager, selector: "bb-table-pager", inputs: { disabled: "disabled", amountOfButtons: "amountOfButtons", showArrowButtons: "showArrowButtons", pageNumber: "pageNumber", totalPages: "totalPages" }, host: { properties: { "class.disabled": "disabled" }, classAttribute: "bb-table-pager" }, providers: [
117
- { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbTablePager), multi: true }
118
- ], usesInheritance: true, ngImport: i0, template: "<ul class=\"bb-pager-list\">\n <!-- The previous page arrow button. -->\n <li *ngIf=\"showArrowButtons\"\n class=\"bb-pager-list-item\"\n title=\"Previous page\">\n <button [disabled]=\"isPreviousDisabled$ | async\"\n (click)=\"goToPrevious()\"\n class=\"bb-pager-list-button\"\n type=\"button\">\n <bb-icon src=\"material:keyboard_arrow_left\"></bb-icon>\n </button>\n </li>\n\n <!-- The list of number buttons to navigate through the list. -->\n <ng-container *ngIf=\"list$ | async as list\">\n <li *ngFor=\"let item of list; trackBy: trackByIndex\"\n [title]=\"'Page ' + item?.page\"\n class=\"bb-pager-list-item\">\n <button (click)=\"goToIndex(item?.page)\"\n [class.active]=\"item?.active\"\n class=\"bb-pager-list-button\"\n type=\"button\">\n {{ item?.page }}\n </button>\n </li>\n </ng-container>\n\n <!-- The next page arrow button. -->\n <li *ngIf=\"showArrowButtons\"\n class=\"bb-pager-list-item\"\n title=\"Next page\">\n <button [disabled]=\"isNextDisabled$ | async\"\n (click)=\"goToNext()\"\n class=\"bb-pager-list-button\"\n type=\"button\">\n <bb-icon src=\"material:keyboard_arrow_right\"></bb-icon>\n </button>\n </li>\n</ul>\n", styles: [".bb-table-pager{flex:1;display:flex;align-items:center;justify-content:flex-end}.bb-table-pager.disabled{opacity:.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.bb-pager-list{display:flex}.bb-pager-list-item{margin-left:8px}.bb-pager-list-button{padding:0;color:#3d464d;line-height:1;min-width:32px;font-size:16px;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-weight:500;min-height:32px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:4px;align-items:center;display:inline-flex;justify-content:center;border:1px solid #b6bbc1;transition-duration:.2s;background-color:transparent;transition-timing-function:cubic-bezier(0,0,.2,1);transition-property:color,border-color,opacity,background-color;box-shadow:inset 0 3px #b7bcc233,0 6px 6px -6px #0000001a}.bb-pager-list-button:hover,.bb-pager-list-button:focus{background-color:#0000000a}.bb-pager-list-button.active,.bb-pager-list-button.active:hover{color:#2196f3;cursor:default;border-color:#2196f3;background-color:transparent}.bb-pager-list-button:disabled{opacity:.35;cursor:default;pointer-events:none}\n"], components: [{ type: i1.BbIcon, selector: "bb-icon", inputs: ["alt", "size", "src", "ariaHidden"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i2.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
119
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: BbTablePager, decorators: [{
120
- type: Component,
121
- args: [{
122
- selector: 'bb-table-pager',
123
- templateUrl: './table-pager.component.html',
124
- styleUrls: ['./table-pager.component.scss'],
125
- changeDetection: ChangeDetectionStrategy.OnPush,
126
- host: {
127
- 'class': 'bb-table-pager',
128
- '[class.disabled]': 'disabled'
129
- },
130
- inputs: ['disabled'],
131
- encapsulation: ViewEncapsulation.None,
132
- preserveWhitespaces: false,
133
- providers: [
134
- { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbTablePager), multi: true }
135
- ]
136
- }]
137
- }], propDecorators: { amountOfButtons: [{
138
- type: Input
139
- }], showArrowButtons: [{
140
- type: Input
141
- }], pageNumber: [{
142
- type: Input
143
- }], totalPages: [{
144
- type: Input
145
- }] } });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcGFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi90YWJsZS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUtcGFnZXIvdGFibGUtcGFnZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi90YWJsZS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUtcGFnZXIvdGFibGUtcGFnZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBd0IsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDN0UsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFFMUMsTUFBTSxnQkFBZ0I7Q0FDckI7QUFFRCxNQUFNLHFCQUFxQixHQUVyQixhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQWtCdEMsTUFBTSxPQUFPLFlBQWEsU0FBUSxxQkFBcUI7SUFoQnZEOztRQWtCSSxVQUFVO1FBQ0Qsb0JBQWUsR0FBVyxDQUFDLENBQUM7UUFDNUIscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBTzFDLFdBQVc7UUFDWCxhQUFRLEdBQStCLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEQsY0FBUyxHQUFlLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkMsaUJB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QUUsZ0JBQWdCO3dCQUN6QixrQkFBa0IsRUFBRSxVQUFVO3FCQUNqQztvQkFDRCxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUM7b0JBQ3BCLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxtQkFBbUIsRUFBRSxLQUFLO29CQUMxQixTQUFTLEVBQUU7d0JBQ1AsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQztxQkFDekY7aUJBQ0o7OEJBSVksZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBdUNGLFVBQVU7c0JBRGIsS0FBSztnQkFVRixVQUFVO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q2FuRGlzYWJsZUNvbnN0cnVjdG9yLCBtaXhpbkRpc2FibGVkfSBmcm9tICdAYnJhdm9iaXQvYmItZm91bmRhdGlvbic7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHNoYXJlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmNsYXNzIEJiVGFibGVQYWdlckJhc2Uge1xufVxuXG5jb25zdCBCYlRhYmxlUGFnZXJNaXhpbkJhc2U6IENhbkRpc2FibGVDb25zdHJ1Y3RvclxuICAgICYgdHlwZW9mIEJiVGFibGVQYWdlckJhc2VcbiAgICA9IG1peGluRGlzYWJsZWQoQmJUYWJsZVBhZ2VyQmFzZSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYmItdGFibGUtcGFnZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1wYWdlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUtcGFnZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgICdjbGFzcyc6ICdiYi10YWJsZS1wYWdlcicsXG4gICAgICAgICdbY2xhc3MuZGlzYWJsZWRdJzogJ2Rpc2FibGVkJ1xuICAgIH0sXG4gICAgaW5wdXRzOiBbJ2Rpc2FibGVkJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge3Byb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBCYlRhYmxlUGFnZXIpLCBtdWx0aTogdHJ1ZX1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEJiVGFibGVQYWdlciBleHRlbmRzIEJiVGFibGVQYWdlck1peGluQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gICAgLy8gSW5wdXRzLlxuICAgIEBJbnB1dCgpIGFtb3VudE9mQnV0dG9uczogbnVtYmVyID0gNTtcbiAgICBASW5wdXQoKSBzaG93QXJyb3dCdXR0b25zOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8vIE9ic2VydmFibGVzLlxuICAgIGlzUHJldmlvdXNEaXNhYmxlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgaXNOZXh0RGlzYWJsZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGxpc3QkOiBPYnNlcnZhYmxlPHsgcGFnZTogbnVtYmVyLCBhY3RpdmU6IGJvb2xlYW4gfVtdPjtcblxuICAgIC8vIE1ldGhvZHMuXG4gICAgb25DaGFuZ2U6IChuZXdWYWx1ZTogbnVtYmVyKSA9PiB2b2lkID0gKCkgPT4gKHt9KTtcbiAgICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiAoe30pO1xuICAgIHRyYWNrQnlJbmRleCA9IChfLCBpdGVtKSA9PiBpdGVtLnBhZ2U7XG5cbiAgICAvLyBEYXRhLlxuICAgIHByaXZhdGUgX3RvdGFsUGFnZXMkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxKTtcbiAgICBwcml2YXRlIF9wYWdlTnVtYmVyJDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMSk7XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgdGhlIHByZXZpb3VzIGJ1dHRvbiBpcyBkaXNhYmxlZC5cbiAgICAgICAgdGhpcy5pc1ByZXZpb3VzRGlzYWJsZWQkID0gdGhpcy5fcGFnZU51bWJlciQucGlwZShcbiAgICAgICAgICAgIG1hcChwYWdlTnVtYmVyID0+IHBhZ2VOdW1iZXIgPT09IDEpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgdGhlIG5leHQgYnV0dG9uIGlzIGRpc2FibGVkLlxuICAgICAgICB0aGlzLmlzTmV4dERpc2FibGVkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX3BhZ2VOdW1iZXIkLCB0aGlzLl90b3RhbFBhZ2VzJF0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKFtwYWdlTnVtYmVyLCB0b3RhbFBhZ2VzXSkgPT4gcGFnZU51bWJlciA9PT0gdG90YWxQYWdlcylcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBDcmVhdGUgdGhlIGxpc3Qgd2l0aCBwYWdlIG51bWJlcnMuXG4gICAgICAgIHRoaXMubGlzdCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9wYWdlTnVtYmVyJCwgdGhpcy5fdG90YWxQYWdlcyRdKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbcGFnZU51bWJlciwgdG90YWxQYWdlc10pID0+IHRoaXMuZmlsdGVyQWN0aXZlUGFnZXMocGFnZU51bWJlciwgdG90YWxQYWdlcykpLFxuICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBwYWdlTnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnZU51bWJlciQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBwYWdlTnVtYmVyKG5ld1ZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy51cGRhdGUobmV3VmFsdWUpO1xuICAgIH1cblxuICAgIGdldCB0b3RhbFBhZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG90YWxQYWdlcyQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCB0b3RhbFBhZ2VzKG5ld1ZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbmV3VG90YWxQYWdlcyA9IE1hdGgubWF4KDEsIG5ld1ZhbHVlKTtcbiAgICAgICAgdGhpcy5fdG90YWxQYWdlcyQubmV4dChuZXdUb3RhbFBhZ2VzKTtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZShuZXdWYWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudXBkYXRlKG5ld1ZhbHVlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgZ29Ub1ByZXZpb3VzKCkge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuX3BhZ2VOdW1iZXIkLmdldFZhbHVlKCkgLSAxO1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUobmV3VmFsdWUpO1xuICAgIH1cblxuICAgIGdvVG9OZXh0KCkge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuX3BhZ2VOdW1iZXIkLmdldFZhbHVlKCkgKyAxO1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUobmV3VmFsdWUpO1xuICAgIH1cblxuICAgIGdvVG9JbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShpbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGUocGFnZU51bWJlcjogbnVtYmVyLCBub3RpZnk6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIC8vIFlvdSBjYW4gb25seSB1cGRhdGUgd2hlbiBub3QgZGlzYWJsZWQuXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG5ldyB2YWx1ZS5cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBNYXRoLm1pbihcbiAgICAgICAgICAgIHRoaXMudG90YWxQYWdlcyxcbiAgICAgICAgICAgIE1hdGgubWF4KDEsIHBhZ2VOdW1iZXIpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIHBhZ2UgbnVtYmVyIGlzIHRoZSBzYW1lLlxuICAgICAgICBpZiAodGhpcy5fcGFnZU51bWJlciQuZ2V0VmFsdWUoKSA9PT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFB1c2ggdGhlIG5ldyB2YWx1ZS5cbiAgICAgICAgdGhpcy5fcGFnZU51bWJlciQubmV4dChuZXdWYWx1ZSk7XG5cbiAgICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub25DaGFuZ2UocGFnZU51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZVBhZ2VzKHBhZ2VOdW1iZXI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBtaW4gPSAxO1xuICAgICAgICBjb25zdCBtYXggPSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgICAgIGNvbnN0IGFtb3VudCA9IE1hdGgubWF4KDEsIHRoaXMuYW1vdW50T2ZCdXR0b25zKTtcblxuICAgICAgICBjb25zdCBkYXRhID0gQXJyYXkoYW1vdW50KVxuICAgICAgICAgICAgLmZpbGwoMClcbiAgICAgICAgICAgIC5tYXAoKF8sIGluZGV4KSA9PiBwYWdlTnVtYmVyICsgKGluZGV4IC0gMSkpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIGlmIHRoZSBtaW5pbXVtIHZhbHVlIGxlc3MgdGhhblxuICAgICAgICAvLyB0aGUgZmlyc3QgdmFsdWUuXG4gICAgICAgIGlmIChkYXRhWzBdIDwgbWluKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5tYXAoaXRlbSA9PiBpdGVtICsgMSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2Ugd2l0aCB0aGUgbWF4XG4gICAgICAgIC8vIGlmIHRoaXMgdmFsdWUgaXMgaGlnaGVyIHRoYW4gMCB3ZSBzaG91bGQgbWludXMgaXQuXG4gICAgICAgIGNvbnN0IGxhc3RWYWx1ZUluQXJyYXkgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IGRpZmZlcmVuY2VXaXRoTWF4ID0gbGFzdFZhbHVlSW5BcnJheSAtIG1heDtcbiAgICAgICAgaWYgKGRpZmZlcmVuY2VXaXRoTWF4ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEubWFwKGl0ZW0gPT4gaXRlbSAtIGRpZmZlcmVuY2VXaXRoTWF4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEp1c3QgcmV0dXJuIHRoZSBkZWZhdWx0IGRhdGEuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsdGVyQWN0aXZlUGFnZXMocGFnZU51bWJlcjogbnVtYmVyLCB0b3RhbFBhZ2VzOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlUGFnZXMocGFnZU51bWJlcilcbiAgICAgICAgICAgIC5maWx0ZXIocGFnZSA9PiBwYWdlID4gMCAmJiBwYWdlIDw9IHRvdGFsUGFnZXMpXG4gICAgICAgICAgICAubWFwKHBhZ2UgPT4gKHtwYWdlLCBhY3RpdmU6IHBhZ2VOdW1iZXIgPT09IHBhZ2V9KSk7XG4gICAgfVxuXG59XG4iLCI8dWwgY2xhc3M9XCJiYi1wYWdlci1saXN0XCI+XG4gICAgPCEtLSBUaGUgcHJldmlvdXMgcGFnZSBhcnJvdyBidXR0b24uIC0tPlxuICAgIDxsaSAqbmdJZj1cInNob3dBcnJvd0J1dHRvbnNcIlxuICAgICAgICBjbGFzcz1cImJiLXBhZ2VyLWxpc3QtaXRlbVwiXG4gICAgICAgIHRpdGxlPVwiUHJldmlvdXMgcGFnZVwiPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1ByZXZpb3VzRGlzYWJsZWQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvUHJldmlvdXMoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJiYi1wYWdlci1saXN0LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgPGJiLWljb24gc3JjPVwibWF0ZXJpYWw6a2V5Ym9hcmRfYXJyb3dfbGVmdFwiPjwvYmItaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cblxuICAgIDwhLS0gVGhlIGxpc3Qgb2YgbnVtYmVyIGJ1dHRvbnMgdG8gbmF2aWdhdGUgdGhyb3VnaCB0aGUgbGlzdC4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxpc3QkIHwgYXN5bmMgYXMgbGlzdFwiPlxuICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGlzdDsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInUGFnZSAnICsgaXRlbT8ucGFnZVwiXG4gICAgICAgICAgICBjbGFzcz1cImJiLXBhZ2VyLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZ29Ub0luZGV4KGl0ZW0/LnBhZ2UpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpdGVtPy5hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJiLXBhZ2VyLWxpc3QtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0/LnBhZ2UgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBUaGUgbmV4dCBwYWdlIGFycm93IGJ1dHRvbi4gLS0+XG4gICAgPGxpICpuZ0lmPVwic2hvd0Fycm93QnV0dG9uc1wiXG4gICAgICAgIGNsYXNzPVwiYmItcGFnZXItbGlzdC1pdGVtXCJcbiAgICAgICAgdGl0bGU9XCJOZXh0IHBhZ2VcIj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNOZXh0RGlzYWJsZWQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvTmV4dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJiLXBhZ2VyLWxpc3QtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICA8YmItaWNvbiBzcmM9XCJtYXRlcmlhbDprZXlib2FyZF9hcnJvd19yaWdodFwiPjwvYmItaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cbjwvdWw+XG4iXX0=
@@ -1,32 +0,0 @@
1
- import { BehaviorSubject } from 'rxjs';
2
- import { filter } from 'rxjs/operators';
3
- export class DataSourceRequest {
4
- constructor() {
5
- // Data.
6
- this._request$ = new BehaviorSubject(null);
7
- this._loading$ = new BehaviorSubject(true);
8
- }
9
- get loading() {
10
- return this._loading$.asObservable();
11
- }
12
- get when() {
13
- return this._request$.pipe(filter(data => !!data));
14
- }
15
- startLoading() {
16
- this._loading$.next(true);
17
- }
18
- stopLoading() {
19
- this._loading$.next(false);
20
- }
21
- update(params = {}) {
22
- const currentValue = this._request$.getValue();
23
- // Set the page number to 1 if the query or page size was changed.
24
- if (currentValue && params && ((currentValue === null || currentValue === void 0 ? void 0 : currentValue.query) !== (params === null || params === void 0 ? void 0 : params.query) || (currentValue === null || currentValue === void 0 ? void 0 : currentValue.pageSize) !== (params === null || params === void 0 ? void 0 : params.pageSize))) {
25
- params.pageNumber = 1;
26
- }
27
- this._request$.next(Object.assign(Object.assign({}, currentValue), params));
28
- }
29
- }
30
- export class DataSource {
31
- }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS5kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi90YWJsZS9zcmMvbGliL2RhdGEvZGF0YXNvdXJjZS5kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxlQUFlLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE1BQU0sT0FBTyxpQkFBaUI7SUFBOUI7UUFFSSxRQUFRO1FBQ0EsY0FBUyxHQUFHLElBQUksZUFBZSxDQUErQixJQUFJLENBQUMsQ0FBQztRQUNwRSxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7SUErQjNELENBQUM7SUE3QkcsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQ3pCLENBQUM7SUFDTixDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUF5QyxFQUFFO1FBQzlDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFL0Msa0VBQWtFO1FBQ2xFLElBQUksWUFBWSxJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUEsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLEtBQUssT0FBSyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSyxDQUFBLElBQUksQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsUUFBUSxPQUFLLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxRQUFRLENBQUEsQ0FBQyxFQUFFO1lBQ2xILE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLGlDQUFLLFlBQVksR0FBSyxNQUFNLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0NBRUo7QUFFRCxNQUFNLE9BQWdCLFVBQVU7Q0FJL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RhdGFTb3VyY2VQYWdlUmVxdWVzdCwgRGF0YVNvdXJjZVBhZ2VSZXNwb25zZX0gZnJvbSAnLi4vaW50ZXJmYWNlcy9kYXRhc291cmNlLmludGVyZmFjZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZVJlcXVlc3Qge1xuXG4gICAgLy8gRGF0YS5cbiAgICBwcml2YXRlIF9yZXF1ZXN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YVNvdXJjZVBhZ2VSZXF1ZXN0IHwgbnVsbD4obnVsbCk7XG4gICAgcHJpdmF0ZSBfbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gICAgZ2V0IGxvYWRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkaW5nJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBnZXQgd2hlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3QkLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoZGF0YSA9PiAhIWRhdGEpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc3RhcnRMb2FkaW5nKCkge1xuICAgICAgICB0aGlzLl9sb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIHN0b3BMb2FkaW5nKCkge1xuICAgICAgICB0aGlzLl9sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICB1cGRhdGUocGFyYW1zOiBQYXJ0aWFsPERhdGFTb3VyY2VQYWdlUmVxdWVzdD4gPSB7fSkge1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLl9yZXF1ZXN0JC5nZXRWYWx1ZSgpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgcGFnZSBudW1iZXIgdG8gMSBpZiB0aGUgcXVlcnkgb3IgcGFnZSBzaXplIHdhcyBjaGFuZ2VkLlxuICAgICAgICBpZiAoY3VycmVudFZhbHVlICYmIHBhcmFtcyAmJiAoY3VycmVudFZhbHVlPy5xdWVyeSAhPT0gcGFyYW1zPy5xdWVyeSB8fCBjdXJyZW50VmFsdWU/LnBhZ2VTaXplICE9PSBwYXJhbXM/LnBhZ2VTaXplKSkge1xuICAgICAgICAgICAgcGFyYW1zLnBhZ2VOdW1iZXIgPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVxdWVzdCQubmV4dCh7Li4uY3VycmVudFZhbHVlLCAuLi5wYXJhbXN9KTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFTb3VyY2U8VCA9IGFueT4ge1xuXG4gICAgYWJzdHJhY3QgaGFuZGxlKHJlcXVlc3Q6IERhdGFTb3VyY2VSZXF1ZXN0KTogT2JzZXJ2YWJsZTxEYXRhU291cmNlUGFnZVJlc3BvbnNlPFQ+PjtcblxufVxuIl19
@@ -1,73 +0,0 @@
1
- import { BehaviorSubject, combineLatest, of } from 'rxjs';
2
- import { DataSource } from './datasource.data';
3
- import { map, share, switchMap } from 'rxjs/operators';
4
- export class GenericDataSource extends DataSource {
5
- constructor(httpClient, endpoint) {
6
- super();
7
- // Data.
8
- this._items$ = new BehaviorSubject([]);
9
- this._fn = data => data;
10
- this.formatResponse = (data) => {
11
- return {
12
- pageSize: data === null || data === void 0 ? void 0 : data['page_size'],
13
- pageNumber: data === null || data === void 0 ? void 0 : data['page_number'],
14
- totalPages: data === null || data === void 0 ? void 0 : data['total_pages'],
15
- totalEntries: data === null || data === void 0 ? void 0 : data['total_entries'],
16
- data: data === null || data === void 0 ? void 0 : data['data']
17
- };
18
- };
19
- this.formatParams = (data) => {
20
- var _a, _b, _c, _d, _e, _f, _g;
21
- const params = {};
22
- params['page'] = `${(_a = data === null || data === void 0 ? void 0 : data.pageNumber) !== null && _a !== void 0 ? _a : 1}`;
23
- params['page_size'] = `${(_b = data === null || data === void 0 ? void 0 : data.pageSize) !== null && _b !== void 0 ? _b : 25}`;
24
- const sort = ((_c = data === null || data === void 0 ? void 0 : data.sort) !== null && _c !== void 0 ? _c : [])
25
- .map(({ name }) => name)
26
- .filter(name => !!name)
27
- .join(',');
28
- const sortDirection = ((_d = data === null || data === void 0 ? void 0 : data.sort) !== null && _d !== void 0 ? _d : [])
29
- .map(({ direction }) => direction)
30
- .filter(direction => !!direction)
31
- .join(',');
32
- if ((sort === null || sort === void 0 ? void 0 : sort.length) > 0 && (sortDirection === null || sortDirection === void 0 ? void 0 : sortDirection.length) > 0) {
33
- params['sort'] = sort;
34
- params['sort_direction'] = sortDirection;
35
- }
36
- if ((data === null || data === void 0 ? void 0 : data.query) && ((_e = data === null || data === void 0 ? void 0 : data.query) === null || _e === void 0 ? void 0 : _e.length) > 0 && (data === null || data === void 0 ? void 0 : data.queryFields) && ((_f = data === null || data === void 0 ? void 0 : data.queryFields) === null || _f === void 0 ? void 0 : _f.length) > 0) {
37
- params['query'] = data === null || data === void 0 ? void 0 : data.query;
38
- params['query_fields'] = (_g = data === null || data === void 0 ? void 0 : data.queryFields) === null || _g === void 0 ? void 0 : _g.join(',');
39
- }
40
- return params;
41
- };
42
- this._httpClient = httpClient;
43
- this._endpoint$ = typeof endpoint === 'string'
44
- ? of(endpoint)
45
- : endpoint;
46
- }
47
- append(item) {
48
- const currentValue = this._items$.getValue();
49
- const newValue = [...currentValue, item];
50
- this._items$.next(newValue);
51
- return this;
52
- }
53
- data(fn) {
54
- this._fn = fn;
55
- return this;
56
- }
57
- handle(request) {
58
- const extraParams$ = this._items$.pipe(switchMap(items => (items === null || items === void 0 ? void 0 : items.length) <= 0 ? of([]) : combineLatest(items)), map(items => items.reduce((previous, current) => (Object.assign(Object.assign({}, previous), (current !== null && current !== void 0 ? current : {}))), {})));
59
- return combineLatest([request.when, this._endpoint$, extraParams$]).pipe(switchMap(([params, endpoint, extraParams]) => {
60
- // Start the loading.
61
- request.startLoading();
62
- const formattedParams = this.formatParams(params);
63
- const combinedParams = Object.assign(Object.assign({}, formattedParams), extraParams);
64
- return this._httpClient.get(endpoint, {
65
- params: combinedParams
66
- }).pipe(map(data => this.formatResponse(data)), map(result => {
67
- var _a;
68
- return (Object.assign(Object.assign({}, result), { data: this._fn((_a = result === null || result === void 0 ? void 0 : result.data) !== null && _a !== void 0 ? _a : []) }));
69
- }));
70
- }), share());
71
- }
72
- }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy5kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi90YWJsZS9zcmMvbGliL2RhdGEvZ2VuZXJpYy5kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFjLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUMsVUFBVSxFQUFvQixNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR3JELE1BQU0sT0FBTyxpQkFBMkIsU0FBUSxVQUFhO0lBU3pELFlBQVksVUFBc0IsRUFDdEIsUUFBcUM7UUFDN0MsS0FBSyxFQUFFLENBQUM7UUFOWixRQUFRO1FBQ0EsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFpRCxFQUFFLENBQUMsQ0FBQztRQUNsRixRQUFHLEdBQXVCLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBc0R2QyxtQkFBYyxHQUFHLENBQVUsSUFBYSxFQUFFLEVBQUU7WUFDaEQsT0FBTztnQkFDSCxRQUFRLEVBQUUsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFHLFdBQVcsQ0FBVztnQkFDdkMsVUFBVSxFQUFFLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRyxhQUFhLENBQVc7Z0JBQzNDLFVBQVUsRUFBRSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUcsYUFBYSxDQUFXO2dCQUMzQyxZQUFZLEVBQUUsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFHLGVBQWUsQ0FBVztnQkFDL0MsSUFBSSxFQUFFLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRyxNQUFNLENBQVE7YUFDOUIsQ0FBQztRQUNOLENBQUMsQ0FBQztRQUVNLGlCQUFZLEdBQUcs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QUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUN0QyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7O2dCQUFDLE9BQUEsaUNBQ1AsTUFBTSxLQUNULElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLElBQUksbUNBQUksRUFBRSxDQUFDLElBQ3BDLENBQUE7YUFBQSxDQUFDLENBQ04sQ0FBQztRQUNOLENBQUMsQ0FBQyxFQUNGLEtBQUssRUFBRSxDQUNWLENBQUM7SUFDTixDQUFDO0NBeUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEYXRhU291cmNlUGFnZVJlcXVlc3R9IGZyb20gJy4uL2ludGVyZmFjZXMvZGF0YXNvdXJjZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7RGF0YVNvdXJjZSwgRGF0YVNvdXJjZVJlcXVlc3R9IGZyb20gJy4vZGF0YXNvdXJjZS5kYXRhJztcbmltcG9ydCB7bWFwLCBzaGFyZSwgc3dpdGNoTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuZXhwb3J0IGNsYXNzIEdlbmVyaWNEYXRhU291cmNlPFQgPSBhbnk+IGV4dGVuZHMgRGF0YVNvdXJjZTxUPiB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VuZHBvaW50JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gICAgLy8gRGF0YS5cbiAgICBwcml2YXRlIF9pdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9ic2VydmFibGU8eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IG51bGw+W10+KFtdKTtcbiAgICBwcml2YXRlIF9mbjogKGRhdGE6IFRbXSkgPT4gVFtdID0gZGF0YSA9PiBkYXRhO1xuXG4gICAgY29uc3RydWN0b3IoaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgICBlbmRwb2ludDogT2JzZXJ2YWJsZTxzdHJpbmc+IHwgc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5faHR0cENsaWVudCA9IGh0dHBDbGllbnQ7XG4gICAgICAgIHRoaXMuX2VuZHBvaW50JCA9IHR5cGVvZiBlbmRwb2ludCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gb2Y8c3RyaW5nPihlbmRwb2ludClcbiAgICAgICAgICAgIDogZW5kcG9pbnQ7XG5cbiAgICB9XG5cbiAgICBhcHBlbmQoaXRlbTogT2JzZXJ2YWJsZTx7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgbnVsbD4pIHtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5faXRlbXMkLmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gWy4uLmN1cnJlbnRWYWx1ZSwgaXRlbV07XG4gICAgICAgIHRoaXMuX2l0ZW1zJC5uZXh0KG5ld1ZhbHVlKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBkYXRhKGZuOiAoZGF0YTogVFtdKSA9PiBUW10pIHtcbiAgICAgICAgdGhpcy5fZm4gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaGFuZGxlKHJlcXVlc3Q6IERhdGFTb3VyY2VSZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGV4dHJhUGFyYW1zJCA9IHRoaXMuX2l0ZW1zJC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKGl0ZW1zID0+IGl0ZW1zPy5sZW5ndGggPD0gMCA/IG9mKFtdKSA6IGNvbWJpbmVMYXRlc3QoaXRlbXMpKSxcbiAgICAgICAgICAgIG1hcChpdGVtcyA9PiBpdGVtcy5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiAoey4uLnByZXZpb3VzLCAuLi4oY3VycmVudCA/PyB7fSl9KSwge30pKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtyZXF1ZXN0LndoZW4sIHRoaXMuX2VuZHBvaW50JCwgZXh0cmFQYXJhbXMkXSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoW3BhcmFtcywgZW5kcG9pbnQsIGV4dHJhUGFyYW1zXSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBsb2FkaW5nLlxuICAgICAgICAgICAgICAgIHJlcXVlc3Quc3RhcnRMb2FkaW5nKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRQYXJhbXMgPSB0aGlzLmZvcm1hdFBhcmFtcyhwYXJhbXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbWJpbmVkUGFyYW1zID0gey4uLmZvcm1hdHRlZFBhcmFtcywgLi4uZXh0cmFQYXJhbXN9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnQuZ2V0KGVuZHBvaW50LCB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogY29tYmluZWRQYXJhbXNcbiAgICAgICAgICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoZGF0YSA9PiB0aGlzLmZvcm1hdFJlc3BvbnNlKGRhdGEpKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdGhpcy5fZm4ocmVzdWx0Py5kYXRhID8/IFtdKVxuICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRSZXNwb25zZSA9IDxUID0gYW55PihkYXRhOiB1bmtub3duKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYWdlU2l6ZTogZGF0YT8uWydwYWdlX3NpemUnXSBhcyBudW1iZXIsXG4gICAgICAgICAgICBwYWdlTnVtYmVyOiBkYXRhPy5bJ3BhZ2VfbnVtYmVyJ10gYXMgbnVtYmVyLFxuICAgICAgICAgICAgdG90YWxQYWdlczogZGF0YT8uWyd0b3RhbF9wYWdlcyddIGFzIG51bWJlcixcbiAgICAgICAgICAgIHRvdGFsRW50cmllczogZGF0YT8uWyd0b3RhbF9lbnRyaWVzJ10gYXMgbnVtYmVyLFxuICAgICAgICAgICAgZGF0YTogZGF0YT8uWydkYXRhJ10gYXMgVFtdXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHByaXZhdGUgZm9ybWF0UGFyYW1zID0gKGRhdGE6IFBhcnRpYWw8RGF0YVNvdXJjZVBhZ2VSZXF1ZXN0PikgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcblxuICAgICAgICBwYXJhbXNbJ3BhZ2UnXSA9IGAke2RhdGE/LnBhZ2VOdW1iZXIgPz8gMX1gO1xuICAgICAgICBwYXJhbXNbJ3BhZ2Vfc2l6ZSddID0gYCR7ZGF0YT8ucGFnZVNpemUgPz8gMjV9YDtcblxuICAgICAgICBjb25zdCBzb3J0ID0gKGRhdGE/LnNvcnQgPz8gW10pXG4gICAgICAgICAgICAubWFwKCh7bmFtZX0pID0+IG5hbWUpXG4gICAgICAgICAgICAuZmlsdGVyKG5hbWUgPT4gISFuYW1lKVxuICAgICAgICAgICAgLmpvaW4oJywnKTtcblxuICAgICAgICBjb25zdCBzb3J0RGlyZWN0aW9uID0gKGRhdGE/LnNvcnQgPz8gW10pXG4gICAgICAgICAgICAubWFwKCh7ZGlyZWN0aW9ufSkgPT4gZGlyZWN0aW9uKVxuICAgICAgICAgICAgLmZpbHRlcihkaXJlY3Rpb24gPT4gISFkaXJlY3Rpb24pXG4gICAgICAgICAgICAuam9pbignLCcpO1xuXG4gICAgICAgIGlmIChzb3J0Py5sZW5ndGggPiAwICYmIHNvcnREaXJlY3Rpb24/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHBhcmFtc1snc29ydCddID0gc29ydDtcbiAgICAgICAgICAgIHBhcmFtc1snc29ydF9kaXJlY3Rpb24nXSA9IHNvcnREaXJlY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YT8ucXVlcnkgJiYgZGF0YT8ucXVlcnk/Lmxlbmd0aCA+IDAgJiYgZGF0YT8ucXVlcnlGaWVsZHMgJiYgZGF0YT8ucXVlcnlGaWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHBhcmFtc1sncXVlcnknXSA9IGRhdGE/LnF1ZXJ5O1xuICAgICAgICAgICAgcGFyYW1zWydxdWVyeV9maWVsZHMnXSA9IGRhdGE/LnF1ZXJ5RmllbGRzPy5qb2luKCcsJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH07XG5cbn1cbiJdfQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"bravobit-bb-foundation-auth.js","sources":["../../../projects/bb-foundation/auth/src/lib/interfaces/config.interface.ts","../../../projects/bb-foundation/auth/src/lib/tokens/use-authorization.token.ts","../../../projects/bb-foundation/auth/src/lib/helpers/jwt.helper.ts","../../../projects/bb-foundation/auth/src/lib/helpers/mapper.helper.ts","../../../projects/bb-foundation/auth/src/lib/providers/verify.provider.ts","../../../projects/bb-foundation/auth/src/lib/providers/email.provider.ts","../../../projects/bb-foundation/auth/src/lib/auth.session.ts","../../../projects/bb-foundation/auth/src/lib/auth.service.ts","../../../projects/bb-foundation/auth/src/lib/directives/authenticated.directive.ts","../../../projects/bb-foundation/auth/src/lib/directives/role.directive.ts","../../../projects/bb-foundation/auth/src/lib/permissions.service.ts","../../../projects/bb-foundation/auth/src/lib/directives/permission.directive.ts","../../../projects/bb-foundation/auth/src/lib/guards/anonymous.guard.ts","../../../projects/bb-foundation/auth/src/lib/guards/authenticated.guard.ts","../../../projects/bb-foundation/auth/src/lib/auth.interceptor.ts","../../../projects/bb-foundation/auth/src/lib/auth.module.ts","../../../projects/bb-foundation/auth/src/bravobit-bb-foundation-auth.ts"],"sourcesContent":["export class AuthConfig {\n scheme?: string;\n redirectUrl?: string;\n loggedInUrl?: string;\n applicationId?: string;\n bootstrap?: boolean;\n autoRefresh?: boolean;\n setRedirectOnFailedAuth?: boolean;\n permissions?: {\n [permission: string]: string[];\n };\n}\n","import {HttpContextToken} from '@angular/common/http';\n\nexport const USE_AUTHORIZATION = new HttpContextToken(() => true);","import {AuthToken} from '../interfaces/token.interface';\n\nexport class JwtHelper {\n\n decode(token: string) {\n try {\n if (token === null || token === undefined) {\n return null;\n }\n\n const json = JSON.parse(\n this.urlDecode(token.split('.')[1])\n );\n\n return this.parse(json);\n } catch {\n return null;\n }\n }\n\n private urlDecode(token: string | null) {\n const value = token || '';\n let output = value\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += '==';\n break;\n case 3:\n output += '=';\n break;\n default:\n throw 'Illegal base64url string!';\n }\n\n try {\n return this.baseDecodeUnicode(output);\n } catch {\n return atob(output);\n }\n }\n\n private baseDecodeUnicode = (value: string) => {\n return decodeURIComponent(atob(value).replace(/(.)/g, (_, p) => {\n let code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = '0' + code;\n }\n return '%' + code;\n }));\n };\n\n private parse = (data: object) => {\n return {\n id: data['iss'] || null,\n type: data['typ'] || null,\n audience: data['aud'] || null,\n issuer: data['iss'] || null,\n subject: data['sub'] || null,\n role: data['role'] || null,\n notValidBefore: this.parseDate(data['nbf']),\n expiresAt: this.parseDate(data['exp']),\n issuedAt: this.parseDate(data['iat'])\n } as AuthToken;\n };\n\n private parseDate = (epochInSeconds: number) => {\n if (!epochInSeconds || epochInSeconds <= 0) {\n return null;\n }\n\n return new Date(epochInSeconds * 1000);\n };\n\n}\n","import {AuthMapperProtocol} from '../interfaces/mapper.interface';\nimport {Injectable} from '@angular/core';\n\n@Injectable()\nexport class AuthMapper implements AuthMapperProtocol {\n\n // Routes.\n me: string = 'auth/me';\n register: string = 'auth/register';\n resendCode: string = 'auth/resend';\n logout: string = 'auth/logout';\n refresh: string = 'auth/refresh';\n requestPassword: string = 'auth/reset';\n resetPassword: string = 'auth/reset-password';\n\n role(data: any) {\n return (data && data.role) || null;\n }\n\n toRegister(data: any) {\n // Retrieve the params.\n const {token, refresh_token, user} = data;\n\n // Map the data to the correct format.\n return {accessToken: token, refreshToken: refresh_token, user: user};\n }\n\n toRefresh(data: any) {\n // Retrieve the params.\n const {token, refresh_token} = data;\n\n // Map the data to the correct format.\n return {accessToken: token, refreshToken: refresh_token};\n }\n\n}\n","import {AuthProvider} from '../interfaces/provider.interface';\nimport {HttpClient} from '@angular/common/http';\n\nexport class AuthVerifyProvider implements AuthProvider {\n\n constructor(private _code: string,\n private _verifyToken: string,\n private _endpoint: string) {\n }\n\n async authenticate(httpClient: HttpClient) {\n // Execute API call.\n const {token, refresh_token, user} = await httpClient.post<any>(this._endpoint, {\n token: this._code,\n verify_token: this._verifyToken\n }).toPromise();\n\n // Map the data to the correct format.\n return {accessToken: token, refreshToken: refresh_token, user: user};\n }\n\n}\n","import {AuthProvider} from '../interfaces/provider.interface';\nimport {HttpClient} from '@angular/common/http';\n\nexport class AuthEmailProvider implements AuthProvider {\n\n constructor(private _email: string,\n private _password: string,\n private _endpoint: string) {\n }\n\n async authenticate(httpClient: HttpClient) {\n // Execute API call.\n const {token, refresh_token, user, provider, verify_token} = await httpClient.post<any>(this._endpoint, {\n email: this._email,\n password: this._password\n }).toPromise();\n\n // Map the data to the correct format.\n return {\n accessToken: token,\n refreshToken: refresh_token,\n user: user,\n provider: provider,\n verifyToken: verify_token\n };\n }\n\n}\n","import {StorageStrategy} from '@bravobit/bb-foundation/storage';\nimport {AuthToken} from './interfaces/token.interface';\nimport {JwtHelper} from './helpers/jwt.helper';\nimport {shareReplay} from 'rxjs/operators';\nimport {BehaviorSubject} from 'rxjs';\n\nexport class AuthSession {\n\n // Readonly data.\n private readonly _jwt = new JwtHelper();\n private readonly _storage: StorageStrategy | null;\n private readonly _accessTokenStorageKey: string;\n private readonly _refreshTokenStorageKey: string;\n private readonly _userStorageKey: string;\n\n // Token strings.\n private _accessTokenString: string | null = null;\n private _refreshTokenString: string | null = null;\n\n // Token payloads.\n private _accessTokenPayload: AuthToken | null = null;\n private _refreshTokenPayload: AuthToken | null = null;\n\n // Private user data.\n private _user$ = new BehaviorSubject<any | null>(null);\n\n // Public user data.\n user = this._user$.pipe(\n shareReplay(1)\n );\n\n constructor(options?: { id?: string, storage?: StorageStrategy }) {\n const applicationId = options?.id ?? 'ng';\n\n // Setting up the readonly storage keys.\n this._accessTokenStorageKey = this.generateKey(applicationId, 'au_act');\n this._refreshTokenStorageKey = this.generateKey(applicationId, 'au_rft');\n this._userStorageKey = this.generateKey(applicationId, 'au_usr');\n\n // Setting up the storage.\n this._storage = options?.storage ?? null;\n\n // Init methods.\n this.restoreFromStorage();\n }\n\n get accessToken() {\n return this.isTokenValid(this._accessTokenPayload)\n ? this._accessTokenString\n : null;\n }\n\n get refreshToken() {\n return this.isTokenValid(this.refreshTokenPayload)\n ? this._refreshTokenString\n : null;\n }\n\n get accessTokenPayload() {\n return this._accessTokenPayload ?? null;\n }\n\n get refreshTokenPayload() {\n return this._refreshTokenPayload ?? null;\n }\n\n authenticated() {\n return this.isTokenValid(this._accessTokenPayload) || this.isTokenValid(this._refreshTokenPayload);\n }\n\n setTokens(accessToken: string | null, refreshToken: string | null) {\n this.setAccessToken(accessToken);\n this.setRefreshToken(refreshToken);\n this.syncTokensInStorage();\n }\n\n setUser(user: unknown) {\n this._user$.next(user ?? null);\n this.syncUserInStorage();\n }\n\n clear() {\n this.setTokens(null, null);\n this.setUser(null);\n }\n\n private restoreFromStorage() {\n if (!this._storage) {\n return;\n }\n\n // Set the access token.\n const accessToken = this._storage.get<string>(this._accessTokenStorageKey);\n this.setAccessToken(accessToken);\n\n // Set the refresh token.\n const refreshToken = this._storage.get<string>(this._refreshTokenStorageKey);\n this.setRefreshToken(refreshToken);\n\n // Set the user if we have any correct token payloads.\n if (this._accessTokenPayload || this._refreshTokenPayload) {\n const user = this._storage.get<unknown>(this._userStorageKey);\n this._user$.next(user ?? null); // Note: just settings here instead of setUser() because of syncing to the storage.\n }\n }\n\n private syncTokensInStorage() {\n if (!this._storage) {\n return;\n }\n\n // Set the access token if completely valid.\n if (!!this.accessToken) {\n this._storage.set<string>(this._accessTokenStorageKey, this._accessTokenString, {\n expires: this._accessTokenPayload?.expiresAt\n });\n } else {\n this._storage.remove(this._accessTokenStorageKey);\n }\n\n // Set the refresh token if completely valid.\n if (!!this.refreshToken) {\n this._storage.set<string>(this._refreshTokenStorageKey, this._refreshTokenString, {\n expires: this._refreshTokenPayload?.expiresAt\n });\n } else {\n this._storage.remove(this._refreshTokenStorageKey);\n }\n }\n\n private syncUserInStorage() {\n if (!this._storage) {\n return;\n }\n\n const user = this._user$.getValue();\n if (!user) {\n return this._storage.remove(this._userStorageKey);\n }\n\n const date = new Date();\n date.setFullYear(date.getFullYear() + 1);\n this._storage.set<unknown>(this._userStorageKey, user, {\n expires: new Date(date.getTime())\n });\n }\n\n private setAccessToken(value: string | null) {\n this._accessTokenString = value ?? null;\n this._accessTokenPayload = this._jwt.decode(this._accessTokenString);\n }\n\n private setRefreshToken(value: string | null) {\n this._refreshTokenString = value ?? null;\n this._refreshTokenPayload = this._jwt.decode(this._refreshTokenString);\n }\n\n private generateKey = (applicationId: string, key: string) => {\n return [applicationId, key].join('_');\n };\n\n private isTokenValid = (token: AuthToken) => {\n if (!token) {\n return false;\n }\n\n return token?.expiresAt?.getTime() > Date.now();\n };\n\n}\n","import {HttpClient, HttpContext, HttpHeaders, HttpParams} from '@angular/common/http';\nimport {AuthProvider, AuthSignInResponse} from './interfaces/provider.interface';\nimport {makeStateKey, StateKey, TransferState} from '@angular/platform-browser';\nimport {Storage, StorageOption} from '@bravobit/bb-foundation/storage';\nimport {USE_AUTHORIZATION} from './tokens/use-authorization.token';\nimport {AuthVerifyProvider} from './providers/verify.provider';\nimport {Injectable, Injector, Optional} from '@angular/core';\nimport {AuthEmailProvider} from './providers/email.provider';\nimport {AuthConfig} from './interfaces/config.interface';\nimport {HttpConfig} from '@bravobit/bb-foundation/http';\nimport {AuthMapper} from './helpers/mapper.helper';\nimport {Platform} from '@bravobit/bb-foundation';\nimport {map, take, tap} from 'rxjs/operators';\nimport {AuthSession} from './auth.session';\nimport {Router} from '@angular/router';\nimport {Observable, of} from 'rxjs';\n\n@Injectable()\nexport class Auth {\n\n // Readonly data.\n private readonly _authStateKey: StateKey<any | null> = makeStateKey(`bbAuthStateKey`);\n private readonly _httpAlias: string | null = this._httpConfig?.defaultAlias ?? null;\n\n readonly session: AuthSession;\n readonly user: Observable<any | null>;\n\n private _refreshHandler: number | null = null;\n\n constructor(private _storage: Storage,\n private _mapper: AuthMapper,\n private _injector: Injector,\n private _platform: Platform,\n private _httpClient: HttpClient,\n @Optional() private _config?: AuthConfig,\n @Optional() private _state?: TransferState,\n @Optional() private _httpConfig?: HttpConfig) {\n // Starting the new session.\n this.session = new AuthSession({\n id: this._config?.applicationId,\n storage: this._storage.select([StorageOption.Cookie, StorageOption.Local])\n });\n this.user = this.session.user;\n }\n\n initialize() {\n return async () => {\n // Check if the app should bootstrap the authentication.\n const shouldBootstrap = this._config?.bootstrap ?? true;\n if (!shouldBootstrap) {\n return this.handleAutoRefreshing();\n }\n\n // Only retrieve from the server when we are actually authenticated.\n if (!this.session.authenticated()) {\n return;\n }\n\n // Get the key from the server state.\n if (this._state && this._state?.hasKey(this._authStateKey)) {\n const user = this._state?.get(this._authStateKey, null) ?? null;\n return this.session.setUser(user);\n }\n\n // Try to fetch the user from the server.\n const user = await this.me().pipe(\n take(1)\n ).toPromise();\n\n // Set the state if exists.\n if (this._state) {\n this._state?.set<any>(this._authStateKey, user ?? null);\n }\n\n // Save the user in the storage and handle auto refreshing.\n this.session.setUser(user);\n this.handleAutoRefreshing();\n };\n }\n\n me<T = any>() {\n const url = this.getUrl('auth/me');\n return this._httpClient.get<T>(url);\n }\n\n async signIn(provider: AuthProvider, as?: string[]) {\n const {accessToken, refreshToken, user, ...result} = await provider.authenticate(this._httpClient);\n\n // Check if the role matches.\n if (as && !as.includes(this._mapper.role(user))) {\n throw new Error('Invalid role.');\n }\n\n // Validate if the provider is one of the available\n // providers then return the user object and the provider.\n const apiProvider = result?.provider ?? null;\n const apiVerifyToken = result?.verifyToken ?? null;\n const availableProviders = ['email', 'sms', 'totp'];\n if (availableProviders.includes(apiProvider)) {\n return <AuthSignInResponse>{user, provider: apiProvider, verifyToken: apiVerifyToken};\n }\n\n // Set the tokens in storage.\n this.setTokens(accessToken, refreshToken);\n\n // Set the user in storage.\n this.session.setUser(user);\n\n // Return the user.\n return <AuthSignInResponse>{user};\n }\n\n async signInWithEmail(email: string, password: string, as?: string[]) {\n const url = this.getUrl('auth/login');\n return this.signIn(new AuthEmailProvider(email, password, url), as);\n }\n\n async signInWithVerifyCode(code: string, verifyToken: string) {\n const url = this.getUrl('auth/verify');\n return this.signIn(new AuthVerifyProvider(code, verifyToken, url));\n }\n\n async resendVerifyCode(verifyToken: string) {\n const url = this.getUrl('auth/resend');\n return await this._httpClient.post(url, {\n verify_token: verifyToken\n }).toPromise();\n }\n\n async register<T = any>(data: any, options?: {\n headers?: HttpHeaders | {\n [header: string]: string | string[];\n };\n params?: HttpParams | {\n [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean>;\n };\n }) {\n // Execute API call.\n const url = this.getUrl('auth/register');\n const result = await this._httpClient\n .post(url, data, options)\n .toPromise();\n\n // Map to the correct response.\n const {accessToken, refreshToken, user} = this._mapper.toRegister(result);\n\n // Set the tokens in storage.\n this.setTokens(accessToken, refreshToken);\n\n // Set the user in storage.\n this.session.setUser(user);\n\n // Return the user.\n return <T>user;\n }\n\n logout() {\n // If we don't have a refresh token just clear the session.\n // Note: We do this because else we try to invalidate\n // an \"undefined\" refresh token.\n const refreshToken = this.session.refreshToken;\n if (!refreshToken) {\n return this.session.clear();\n }\n\n // We do have a refresh token, so try to\n // invalidate it in the backend.\n try {\n const url = this.getUrl('auth/logout');\n this._httpClient.get(url, {\n headers: {Authorization: refreshToken}\n }).toPromise().then(_ => _);\n } catch {\n // Do nothing because the tokens will be deleted anyways from the session.\n }\n\n // Delete the tokens from the session.\n return this.session.clear();\n }\n\n refresh() {\n // If the refresh token does\n // not exist just return an observable of null.\n const refreshToken = this.session.refreshToken;\n if (!refreshToken) {\n return of<string>(null);\n }\n\n // Perform the refresh call.\n const scheme = this._config?.scheme ?? 'Bearer';\n\n const url = this.getUrl('auth/refresh');\n const context = new HttpContext()\n .set(USE_AUTHORIZATION, false);\n\n return this._httpClient.get(url, {\n headers: {Authorization: `${scheme} ${refreshToken}`},\n context: context\n }).pipe(\n map(data => this._mapper.toRefresh(data)),\n tap(({accessToken, refreshToken}) => this.setTokens(accessToken, refreshToken)),\n map(({accessToken}) => accessToken)\n );\n }\n\n async requestPassword(email: string, extraParams: { [key: string]: any } = {}) {\n const url = this.getUrl('auth/reset');\n return await this._httpClient\n .post(url, {...extraParams, email})\n .toPromise();\n }\n\n async resetPassword(token: string, newPassword: string, extraParams: { [key: string]: any } = {}) {\n const url = this.getUrl('auth/reset-password');\n return await this._httpClient\n .post(url, {...extraParams, token, password: newPassword})\n .toPromise();\n }\n\n guard(type: string, redirectUrl?: string) {\n let newUrl: string = null;\n\n // Get the correct new url.\n switch (type) {\n case 'authenticated':\n newUrl = this._config?.loggedInUrl ?? null;\n break;\n case 'unauthenticated':\n newUrl = this._config?.redirectUrl ?? null;\n break;\n }\n\n // Append a redirect url if the user is deemed\n // unauthenticated.\n if (type === 'unauthenticated') {\n const setRedirectOnFailedAuth = this._config?.setRedirectOnFailedAuth ?? true;\n if (setRedirectOnFailedAuth && redirectUrl && newUrl) {\n newUrl += `?redirectUrl=${redirectUrl}`;\n }\n }\n\n // Parse the url if it exists.\n if (this.router && newUrl) {\n return this.router.parseUrl(newUrl);\n }\n\n // Return false if the user is not allowed.\n return false;\n }\n\n clearAndRedirect() {\n // 1. Delete the tokens from the session.\n this.session.clear();\n\n // 2. Compose the route url.\n const redirectUrl = this._config?.redirectUrl ?? null;\n\n // 3. Route back if the user provided a redirect url.\n if (this.router && redirectUrl) {\n this.router.navigate([redirectUrl]).then(_ => _);\n }\n }\n\n private setTokens(accessToken: string, refreshToken: string) {\n // Set the tokens in our session.\n this.session.setTokens(accessToken, refreshToken);\n\n // We need to update the auto refresh of the refresh token.\n this.handleAutoRefreshing();\n }\n\n private handleAutoRefreshing() {\n const shouldAutoRefresh = this._config?.autoRefresh ?? false;\n if (!shouldAutoRefresh) {\n return;\n }\n\n const expiresAt = this.session.refreshTokenPayload?.expiresAt ?? null;\n if (expiresAt === null || !this._platform.isBrowser) {\n return;\n }\n\n const differenceInMilliseconds = expiresAt.getTime() - Date.now();\n const offsetInMilliseconds = 10_000; // 10 seconds.\n\n // We want to start the refresh 10 seconds before it expires.\n const actualTiming = differenceInMilliseconds - offsetInMilliseconds;\n if (actualTiming <= 0) {\n return;\n }\n\n // We need to cap the timings because if\n // we get large numbers it might cause unwanted results.\n const maxTiming = 1000 * 60 * 60 * 24; // 24 hours.\n const cappedTiming = Math.max(1, Math.min(actualTiming, maxTiming));\n try {\n if (this._refreshHandler !== null) {\n clearTimeout?.(this._refreshHandler);\n this._refreshHandler = null;\n }\n this._refreshHandler = setTimeout?.(() => this.autoRefresh(), cappedTiming);\n } catch {\n // Just ignore it.\n }\n }\n\n private async autoRefresh() {\n try {\n // We just need to wait for it to refresh.\n await this.refresh().toPromise();\n } catch {\n // Something went wrong refreshing, we need to clear.\n this.clearAndRedirect();\n }\n }\n\n private get router() {\n return this._injector.get(Router);\n }\n\n private getUrl(endpoint: string) {\n return [this._httpAlias, endpoint]\n .filter(item => !!item)\n .join('/');\n }\n\n}\n","import {Directive, OnDestroy, OnInit, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {distinctUntilChanged, map} from 'rxjs/operators';\nimport {Auth} from '../auth.service';\nimport {Subscription} from 'rxjs';\n\n@Directive({\n selector: '[bbAuthenticated]'\n})\nexport class BbAuthenticated implements OnInit, OnDestroy {\n\n // Subscriptions.\n private _subscription: Subscription;\n\n constructor(private _auth: Auth,\n private _template: TemplateRef<any>,\n private _viewContainerRef: ViewContainerRef) {\n }\n\n ngOnInit() {\n this._subscription = this._auth.user.pipe(\n map(user => !!user),\n distinctUntilChanged()\n ).subscribe(isAuthenticated => {\n if (!isAuthenticated) {\n return this._viewContainerRef.clear();\n }\n\n this._viewContainerRef.createEmbeddedView(this._template);\n });\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n}\n","import {Directive, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {distinctUntilChanged, map} from 'rxjs/operators';\nimport {Auth} from '../auth.service';\nimport {Subscription} from 'rxjs';\n\n@Directive({\n selector: '[bbRole]'\n})\nexport class BbRole implements OnInit, OnDestroy {\n\n // Inputs.\n @Input() bbRole: string | string[];\n\n // Subscriptions.\n private _subscription: Subscription;\n\n constructor(private _auth: Auth,\n private _template: TemplateRef<any>,\n private _viewContainerRef: ViewContainerRef) {\n }\n\n ngOnInit() {\n this._subscription = this._auth.user.pipe(\n map(user => user?.role ?? null),\n distinctUntilChanged()\n ).subscribe(role => {\n const allowedRoles = this.getAllowedRoles(this.bbRole);\n\n if (!allowedRoles.includes(role)) {\n return this._viewContainerRef.clear();\n }\n\n this._viewContainerRef.createEmbeddedView(this._template);\n });\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n private getAllowedRoles = (value: string | string[]) => {\n return Array.isArray(value) ? value : [value];\n };\n\n}\n","import {distinctUntilChanged, map} from 'rxjs/operators';\nimport {AuthConfig} from './interfaces/config.interface';\nimport {Injectable, Optional} from '@angular/core';\nimport {Auth} from './auth.service';\n\n@Injectable()\nexport class Permissions {\n\n // Data.\n private readonly _permissions: { [permission: string]: string[] } = this._config?.permissions ?? {};\n private readonly _role$ = this._auth.user.pipe(\n map(user => user?.role as string ?? null),\n distinctUntilChanged()\n );\n\n constructor(private _auth: Auth,\n @Optional() private _config?: AuthConfig) {\n }\n\n has(value: string | string[]) {\n const requiredPermissions = Array.isArray(value)\n ? value\n : [value];\n\n return this._role$.pipe(\n map(role => {\n if (role === null || role === undefined) {\n return false;\n }\n\n for (const requiredPermission of requiredPermissions) {\n const result = this.validatePermission(requiredPermission, role);\n if (!result) {\n return false;\n }\n }\n\n return true;\n })\n );\n }\n\n private validatePermission(type: string, role: string) {\n const permission = this._permissions?.[type] ?? null;\n if (!permission) {\n console?.warn?.(`Permissions: Invalid permission requested \"${type}\".`);\n return false;\n }\n if (permission?.length <= 0) {\n console?.warn?.(`Permissions: No roles were set, please add some roles to this permission.`);\n return false;\n }\n\n // If the permission includes a \"*\" we allow everyone.\n if (permission.includes('*')) {\n return true;\n }\n\n // Validate the role against the permissions.\n return permission?.includes(role) ?? false;\n }\n\n}\n","import {Directive, EmbeddedViewRef, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {Permissions} from '../permissions.service';\nimport {BehaviorSubject, Subscription} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\n\n@Directive({\n selector: '[bbPermission]'\n})\nexport class BbPermission implements OnInit, OnDestroy {\n\n // Data.\n private _permission$ = new BehaviorSubject<string[]>([]);\n private _valid: boolean = false;\n\n private _elseTemplateRef: TemplateRef<any> | null = null;\n\n private _thenViewRef: EmbeddedViewRef<any> | null = null;\n private _elseViewRef: EmbeddedViewRef<any> | null = null;\n\n @Input()\n set bbPermission(value: string | string[]) {\n const permissions = this.getAllowedPermissions(value);\n this._permission$.next(permissions);\n this.updateView();\n }\n\n @Input()\n set bbPermissionElse(templateRef: TemplateRef<any> | null) {\n this.assertTemplate('bbPermissionElse', templateRef);\n this._elseTemplateRef = templateRef;\n this.updateView();\n }\n\n // Subscriptions.\n private _subscription: Subscription;\n\n constructor(private _permissions: Permissions,\n private _templateRef: TemplateRef<any>,\n private _viewContainerRef: ViewContainerRef) {\n }\n\n ngOnInit() {\n const check$ = this._permission$.pipe(\n switchMap(permissions => this._permissions.has(permissions))\n );\n\n this._subscription = check$.subscribe(valid => {\n this._valid = valid;\n this.updateView();\n });\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n private updateView() {\n if (this._valid) {\n if (!this._thenViewRef) {\n this._viewContainerRef.clear();\n this._elseViewRef = null;\n if (this._templateRef) {\n this._thenViewRef = this._viewContainerRef.createEmbeddedView(this._templateRef);\n }\n }\n } else {\n if (!this._elseViewRef) {\n this._viewContainerRef.clear();\n this._thenViewRef = null;\n if (this._elseTemplateRef) {\n this._elseViewRef = this._viewContainerRef.createEmbeddedView(this._elseTemplateRef);\n }\n }\n }\n }\n\n private getAllowedPermissions = (value: string | string[]) => {\n return Array.isArray(value) ? value : [value];\n };\n\n private assertTemplate = (property: string, templateRef: TemplateRef<any> | null) => {\n const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);\n if (!isTemplateRefOrNull) {\n throw new Error(`${property} must be a TemplateRef.`);\n }\n };\n\n}\n","import {ActivatedRouteSnapshot, CanActivate, CanActivateChild, RouterStateSnapshot} from '@angular/router';\nimport {first, map} from 'rxjs/operators';\nimport {Injectable} from '@angular/core';\nimport {Auth} from '../auth.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BbAnonymousGuard implements CanActivate, CanActivateChild {\n\n constructor(private _auth: Auth) {\n }\n\n async canActivate(_: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n // Check if the user is authenticated.\n const isAuthenticated = await this._auth.user.pipe(\n map(user => !!user),\n first()\n ).toPromise();\n\n // If the user is not authenticated it can\n // access the anonymous page.\n if (!isAuthenticated) {\n return true;\n }\n\n // Return the user back to the authenticated page.\n return this._auth.guard('authenticated', state.url);\n }\n\n canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n return this.canActivate(childRoute, state);\n }\n\n}\n","import {ActivatedRouteSnapshot, CanActivate, CanActivateChild, RouterStateSnapshot} from '@angular/router';\nimport {first, map} from 'rxjs/operators';\nimport {Injectable} from '@angular/core';\nimport {Auth} from '../auth.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BbAuthenticatedGuard implements CanActivate, CanActivateChild {\n\n constructor(private _auth: Auth) {\n }\n\n async canActivate(_: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n // Check if the user is authenticated.\n const isAuthenticated = await this._auth.user.pipe(\n map(user => !!user),\n first()\n ).toPromise();\n\n // If the user is authenticated it can\n // access the authenticated page.\n if (isAuthenticated) {\n return true;\n }\n\n // The user is not authorized to see that\n // page so un-authorize him.\n return this._auth.guard('unauthenticated', state.url);\n }\n\n canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n return this.canActivate(childRoute, state);\n }\n\n}\n","import {HttpErrorResponse, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {catchError, filter, finalize, switchMap, take} from 'rxjs/operators';\nimport {USE_AUTHORIZATION} from './tokens/use-authorization.token';\nimport {AuthConfig} from './interfaces/config.interface';\nimport {HttpError} from '@bravobit/bb-foundation/http';\nimport {BehaviorSubject, of, throwError} from 'rxjs';\nimport {Injectable, Optional} from '@angular/core';\nimport {Auth} from './auth.service';\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n // Readonly data.\n private readonly _authHeaderString: string = 'Authorization';\n\n // Data.\n isRefreshing: boolean = false;\n refreshingAccessToken$ = new BehaviorSubject<string | null>(null);\n\n constructor(private _auth: Auth,\n @Optional() private _config: AuthConfig) {\n }\n\n intercept(request: HttpRequest<unknown>, next: HttpHandler) {\n // 1. Check if the user wants to use the authorization for this request.\n if (!request.context.get(USE_AUTHORIZATION)) {\n return next.handle(request);\n }\n\n // 2. Compose the new request.\n const accessToken = this.getAccessToken(request);\n const newRequest = this.addAuthorizationHeader(request, accessToken);\n\n // 3. Handle all errors.\n return next.handle(newRequest).pipe(\n catchError(error => {\n // Handle the HTTP401 error.\n if ((error instanceof HttpErrorResponse || error instanceof HttpError) && error?.status === 401) {\n return this.handle401Error(request, next);\n }\n\n // Just re-throw the parsed error.\n return throwError(error);\n })\n );\n }\n\n private handle401Error(request: HttpRequest<unknown>, next: HttpHandler) {\n // If already refreshing wait for the refresh token to complete.\n if (this.isRefreshing) {\n return this.refreshingAccessToken$.pipe(\n filter(accessToken => accessToken !== null),\n take(1),\n switchMap(accessToken => next.handle(this.addAuthorizationHeader(request, accessToken)))\n );\n }\n\n // Set the refreshing to true.\n this.isRefreshing = true;\n this.refreshingAccessToken$.next(null);\n\n return this._auth.refresh().pipe(\n switchMap(newAccessToken => {\n if (!newAccessToken) {\n const error = new Error('No refresh token was available.');\n return throwError(error);\n }\n\n this.refreshingAccessToken$.next(newAccessToken);\n return next.handle(this.addAuthorizationHeader(request, newAccessToken));\n }),\n catchError(() => this.logoutUser()),\n finalize(() => this.isRefreshing = false)\n );\n }\n\n private logoutUser() {\n // Handle the refresh error.\n this._auth.clearAndRedirect();\n\n // Return null as data.\n return of(null);\n }\n\n private getAccessToken = (request: HttpRequest<unknown>) => {\n // Get the token based on header.\n if (request.headers.has('Authorization')) {\n return request.headers.get('Authorization');\n }\n\n // Return the default access token.\n return this._auth.session.accessToken;\n };\n\n private addAuthorizationHeader = (request: HttpRequest<unknown>, accessToken: string | null = null) => {\n // Remove auth header when we do not have\n // an access token.\n if (!accessToken) {\n return request.clone({\n headers: request.headers.delete(this._authHeaderString)\n });\n }\n\n // Add the auth header to the request.\n return request.clone({\n setHeaders: {[this._authHeaderString]: this.getFullAuthorizationHeader(accessToken)}\n });\n };\n\n private getFullAuthorizationHeader = (token: string) => {\n const authScheme = this._config?.scheme ?? 'Bearer';\n return [authScheme, token].join(' ');\n };\n\n}\n","import {APP_INITIALIZER, ModuleWithProviders, NgModule} from '@angular/core';\nimport {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';\nimport {BbAuthenticated} from './directives/authenticated.directive';\nimport {BbPermission} from './directives/permission.directive';\nimport {AuthConfig} from './interfaces/config.interface';\nimport {AuthInterceptor} from './auth.interceptor';\nimport {AuthMapper} from './helpers/mapper.helper';\nimport {BbRole} from './directives/role.directive';\nimport {Permissions} from './permissions.service';\nimport {Auth} from './auth.service';\n\nconst DECLARATIONS_EXPORTS = [\n BbAuthenticated,\n BbRole,\n BbPermission\n];\n\n@NgModule({\n imports: [HttpClientModule],\n declarations: [...DECLARATIONS_EXPORTS],\n exports: [...DECLARATIONS_EXPORTS],\n providers: [\n {provide: AuthMapper, useClass: AuthMapper}\n ]\n})\nexport class AuthModule {\n\n static forRoot(config?: AuthConfig): ModuleWithProviders<AuthModule> {\n return {\n ngModule: AuthModule,\n providers: [\n Auth,\n Permissions,\n {provide: AuthConfig, useValue: config},\n {provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true},\n {useFactory: initializeAuth, provide: APP_INITIALIZER, deps: [Auth], multi: true}\n ]\n };\n }\n\n}\n\nexport function initializeAuth(auth: Auth) {\n return auth.initialize();\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bravobit-bb-foundation-collections.js","sources":["../../../projects/bb-foundation/collections/src/lib/providers/collection.provider.ts","../../../projects/bb-foundation/collections/src/lib/providers/api-collection.provider.ts","../../../projects/bb-foundation/collections/src/lib/providers/local-collection.provider.ts","../../../projects/bb-foundation/collections/src/lib/components/collections.directive.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-viewer/collections-viewer.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-viewer/collections-viewer.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-pager/collections-pager.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-pager/collections-pager.component.html","../../../projects/bb-foundation/collections/src/lib/collection.ts","../../../projects/bb-foundation/collections/src/lib/collections.module.ts","../../../projects/bb-foundation/collections/src/bravobit-bb-foundation-collections.ts"],"sourcesContent":["import {CollectionData, CollectionRequest} from '../interfaces/collection.interface';\nimport {Observable} from 'rxjs';\n\nexport abstract class CollectionProvider<T> {\n\n abstract transform(request: CollectionRequest): Observable<CollectionData<T>>;\n\n protected formatArrayToCollectionData(items: T[]) {\n const count = items?.length ?? 1;\n return <CollectionData<T>>{\n pageSize: count,\n totalEntries: count,\n pageNumber: 1,\n totalPages: 1,\n data: items\n };\n }\n\n}\n","import {CollectionApiResponse, CollectionData, CollectionRequest} from '../interfaces/collection.interface';\nimport {combineLatest, isObservable, Observable, of} from 'rxjs';\nimport {CollectionProvider} from './collection.provider';\nimport {HttpClient} from '@angular/common/http';\nimport {map, switchMap} from 'rxjs/operators';\n\nexport class ApiCollectionProvider<T> extends CollectionProvider<T> {\n\n // State.\n private _extraParams: { [name: string]: Observable<string | number | boolean | ReadonlyArray<string | number | boolean>> } = {};\n\n constructor(private readonly _endpoint: string | Observable<string>,\n private readonly _httpClient: HttpClient) {\n super();\n }\n\n append(name: string, value: string | number | boolean | ReadonlyArray<string | number | boolean> | Observable<string | number | boolean | ReadonlyArray<string | number | boolean>>) {\n this._extraParams[name] = isObservable(value) ? value : of(value);\n return this;\n }\n\n transform(request: CollectionRequest) {\n const endpoint$ = isObservable(this._endpoint) ? this._endpoint : of(this._endpoint);\n const params = this.getBackendFormat(request);\n const extraParams$ = this.getExtraParams(this._extraParams);\n\n return combineLatest([endpoint$, extraParams$]).pipe(\n switchMap(([endpoint, extraParams]) => {\n return this._httpClient.get<CollectionApiResponse<T> | T[]>(endpoint, {\n params: {...params, ...extraParams}\n });\n }),\n map(response => this.formatToCollectionData(response))\n );\n }\n\n private getExtraParams(params: { [name: string]: Observable<string | number | boolean | ReadonlyArray<string | number | boolean>> }) {\n const keys = Object.keys(params ?? {});\n if (keys.length <= 0) {\n return of({});\n }\n\n const observables$ = keys.map(key => params?.[key]);\n return combineLatest(observables$).pipe(\n map(data => {\n return data.reduce((previous, current, index) => {\n const key = keys?.[index];\n return {...previous, [key]: current};\n }, {});\n })\n );\n }\n\n private formatToCollectionData(response: CollectionApiResponse<T> | T[]) {\n if (Array.isArray(response)) {\n return this.formatArrayToCollectionData(response);\n }\n\n return <CollectionData<T>>{\n pageSize: response?.['page_size'] as number,\n pageNumber: response?.['page_number'] as number,\n totalPages: response?.['total_pages'] as number,\n totalEntries: response?.['total_entries'] as number,\n data: response?.['data'] as T[]\n };\n }\n\n private getBackendFormat = (request: CollectionRequest) => {\n const params = {};\n\n params['page'] = request?.pageNumber ?? 1;\n params['page_size'] = request?.pageSize ?? 25;\n\n if (request?.sort) {\n const sort = Array.isArray(request?.sort) ? request?.sort : [request?.sort];\n const filteredSort = sort?.filter(item => !!item?.name && !!item?.direction);\n\n params['sort'] = filteredSort?.map(item => item?.name)?.join(',');\n params['sort_direction'] = filteredSort?.map(item => item?.direction)?.join(',');\n }\n\n if (request?.query && request?.query?.length > 0 && request?.queryFields && request?.queryFields?.length > 0) {\n params['query'] = request?.query;\n params['query_fields'] = request?.queryFields?.join(',');\n }\n\n return params;\n };\n\n}\n","import {CollectionRequest} from '../interfaces/collection.interface';\nimport {CollectionProvider} from './collection.provider';\nimport {Observable, of} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nexport class LocalCollectionProvider<T> extends CollectionProvider<T> {\n\n constructor(private readonly _items: T[] | Observable<T[]>) {\n super();\n }\n\n transform(request: CollectionRequest) {\n const items$ = Array.isArray(this._items)\n ? of(this._items)\n : this._items;\n\n return items$.pipe(\n map(items => this.formatArrayToCollectionData(items))\n );\n }\n\n}\n","import {Directive} from '@angular/core';\n\n@Directive({\n selector: '[bbCollectionsData]'\n})\nexport class BbCollectionsData<T> {\n}\n\n@Directive({\n selector: '[bbCollectionsEmpty]'\n})\nexport class BbCollectionsEmpty {\n}\n\n@Directive({\n selector: '[bbCollectionsError]'\n})\nexport class BbCollectionsError {\n}\n\n@Directive({\n selector: '[bbCollectionsInitial]'\n})\nexport class BbCollectionsInitial {\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Input,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BbCollectionsData,\n BbCollectionsEmpty,\n BbCollectionsError,\n BbCollectionsInitial\n} from '../collections.directive';\nimport {Collection} from '../../collection';\n\n@Component({\n selector: '[bb-collections-viewer]',\n templateUrl: './collections-viewer.component.html',\n styleUrls: ['./collections-viewer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'class': 'bb-collections-viewer'},\n preserveWhitespaces: false\n})\nexport class BbCollectionsViewer<T = unknown> {\n\n // Content.\n @ContentChild(BbCollectionsData, {read: TemplateRef, static: false}) dataTemplate?: TemplateRef<any>;\n @ContentChild(BbCollectionsEmpty, {read: TemplateRef, static: false}) emptyTemplate?: TemplateRef<any>;\n @ContentChild(BbCollectionsError, {read: TemplateRef, static: false}) errorTemplate?: TemplateRef<any>;\n @ContentChild(BbCollectionsInitial, {read: TemplateRef, static: false}) initialTemplate?: TemplateRef<any>;\n\n // Inputs.\n @Input() collection: Collection<T> | null = null;\n\n}\n","<ng-container *ngIf=\"collection?.data$ | async as data\"\n [ngSwitch]=\"data?.state\">\n <ng-container *ngSwitchDefault>\n <ng-container *ngTemplateOutlet=\"dataTemplate; context: {items: data?.response?.data}\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'initial'\">\n <ng-container *ngTemplateOutlet=\"initialTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'empty'\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate; context: {query: data?.request?.query}\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'error'\">\n <ng-container *ngTemplateOutlet=\"errorTemplate; context: {error: data?.error}\"></ng-container>\n </ng-container>\n</ng-container>\n","import {ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit, ViewEncapsulation} from '@angular/core';\nimport {CollectionData} from '../../interfaces/collection.interface';\nimport {BehaviorSubject, Observable, Subscription} from 'rxjs';\nimport {Collection} from '../../collection';\nimport {map} from 'rxjs/operators';\n\n@Component({\n selector: 'bb-collections-pager',\n templateUrl: './collections-pager.component.html',\n styleUrls: ['./collections-pager.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'class': 'bb-collections-pager'},\n preserveWhitespaces: false\n})\nexport class BbCollectionsPager implements OnInit, OnDestroy {\n\n // Readonly data.\n readonly maxAmountOfButtons: number = 5;\n\n // Inputs.\n @Input()\n set label(value: string) {\n this._label = value;\n this.cache$.next(this.cache$.getValue());\n }\n\n @Input()\n set collection(collection: Collection<unknown> | null) {\n this._collection = collection;\n this.observeCollectionChanges();\n }\n\n // Data.\n data$: Observable<{\n totalPages: number,\n pageNumber: number,\n pages: { page: number, active: boolean }[],\n allowNext: boolean\n allowPrevious: boolean,\n label: string\n }>;\n cache$ = new BehaviorSubject<Partial<CollectionData<unknown>>>({});\n\n // State and subscriptions.\n private _label: string | null = null;\n private _collection: Collection<unknown> | null = null;\n private _subscription: Subscription | null = null;\n\n ngOnInit() {\n this.data$ = this.cache$.pipe(\n map(cache => {\n const pageSize = cache?.pageSize ?? 1;\n const pageNumber = cache?.pageNumber ?? 1;\n\n const totalPages = cache?.totalPages ?? 1;\n const totalEntries = cache?.totalEntries ?? 0;\n const fromStart = Math.min((pageSize * (pageNumber - 1)) + 1, totalEntries);\n const fromEnd = Math.min((fromStart - 1) + pageSize, totalEntries);\n\n const pages = this.filterActivePages(pageNumber, totalPages);\n\n const allowNext = pageNumber < totalPages;\n const allowPrevious = pageNumber > 1;\n\n return {\n totalPages,\n pages,\n pageNumber,\n allowNext,\n allowPrevious,\n label: this.calculateLabel(fromStart, fromEnd, totalEntries)\n };\n })\n );\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n setPage(pageNumber: number, totalPages: number) {\n // Calculate the new value.\n const newValue = Math.min(\n totalPages,\n Math.max(1, pageNumber)\n );\n\n // Validate the value is actually different.\n const currentValue = this._collection?.pageNumberControl?.value;\n if (currentValue === newValue) {\n return;\n }\n\n this._collection?.pageNumberControl?.setValue(pageNumber);\n }\n\n private observeCollectionChanges() {\n if (!this._collection) {\n return;\n }\n\n if (this._subscription) {\n this._subscription?.unsubscribe();\n }\n\n const pageNumber = this._collection?.pageNumberControl?.value;\n const pageSize = this._collection?.pageSizeControl?.value;\n\n this.cache$.next({pageNumber, pageSize});\n\n this._subscription = this._collection.raw$.subscribe(data => {\n if (data) {\n this.cache$.next(data);\n }\n });\n }\n\n private calculateLabel(start: number, end: number, total: number) {\n const startPoint = '[start]';\n const endPoint = '[end]';\n const totalPoint = '[total]';\n const label = this._label ?? `Showing ${startPoint} to ${endPoint} of ${totalPoint} results`;\n\n return label\n .replace(startPoint, `<strong>${start}</strong>`)\n .replace(endPoint, `<strong>${end}</strong>`)\n .replace(totalPoint, `<strong>${total}</strong>`);\n }\n\n private calculatePages(pageNumber: number, totalPages: number) {\n const min = 1;\n const max = totalPages;\n const amount = Math.max(1, this.maxAmountOfButtons);\n\n const data = Array(amount)\n .fill(0)\n .map((_, index) => pageNumber + (index - 1));\n\n // Validate if the minimum value less than\n // the first value.\n if (data[0] < min) {\n return data.map(item => item + 1);\n }\n\n // Calculate the difference with the max\n // if this value is higher than 0 we should minus it.\n const lastValueInArray = data[data.length - 1];\n const differenceWithMax = lastValueInArray - max;\n if (differenceWithMax > 0) {\n return data.map(item => item - differenceWithMax);\n }\n\n // Just return the default data.\n return data;\n }\n\n private filterActivePages(pageNumber: number, totalPages: number) {\n return this.calculatePages(pageNumber, totalPages)\n .filter(page => page > 0 && page <= totalPages)\n .map(page => ({page, active: pageNumber === page}));\n }\n\n}\n","<ng-container *ngIf=\"data$ | async as data\">\n <div [innerHTML]=\"data?.label\"\n class=\"bb-collections-pager-text\">\n </div>\n\n <div class=\"bb-collections-pager-container\">\n <ul class=\"bb-collections-pager-list\">\n <li class=\"bb-collections-pager-item\"\n title=\"Previous page\">\n <button [disabled]=\"!data?.allowPrevious\"\n (click)=\"setPage(data?.pageNumber - 1, data?.totalPages)\"\n class=\"bb-collections-pager-button arrow first\"\n type=\"button\">\n &#8592;\n </button>\n </li>\n <li *ngFor=\"let item of data?.pages\"\n [title]=\"'Page ' + item?.page\"\n class=\"bb-collections-pager-item\">\n <button [class.active]=\"item?.active\"\n (click)=\"setPage(item?.page, data?.totalPages)\"\n class=\"bb-collections-pager-button\"\n type=\"button\">\n {{ item?.page }}\n </button>\n </li>\n <li class=\"bb-collections-pager-item\"\n title=\"Next page\">\n <button [disabled]=\"!data?.allowNext\"\n (click)=\"setPage(data?.pageNumber + 1, data?.totalPages)\"\n class=\"bb-collections-pager-button arrow last\"\n type=\"button\">\n &#8594;\n </button>\n </li>\n </ul>\n </div>\n</ng-container>\n","import {catchError, debounceTime, distinctUntilChanged, map, startWith, switchMap, tap} from 'rxjs/operators';\nimport {CollectionData, CollectionRequest, CollectionRequestSort} from './interfaces/collection.interface';\nimport {BehaviorSubject, combineLatest, Observable, of} from 'rxjs';\nimport {CollectionProvider} from './providers/collection.provider';\nimport {AbstractControl, FormControl} from '@angular/forms';\n\nexport const enum CollectionState {\n Initial = 'initial',\n Error = 'error',\n Empty = 'empty',\n Data = 'data'\n}\n\nexport class Collection<T> {\n\n // Controls.\n readonly queryControl: FormControl;\n readonly queryFieldsControl: FormControl;\n readonly pageNumberControl: FormControl;\n readonly pageSizeControl: FormControl;\n readonly sortControl: FormControl;\n\n // Request.\n readonly data$: Observable<{\n response?: CollectionData<T>,\n request?: CollectionRequest,\n error?: Error\n state: CollectionState,\n loading: boolean,\n initial: boolean\n }>;\n\n readonly raw$ = new BehaviorSubject<CollectionData<T> | null>(null);\n readonly loading$ = new BehaviorSubject<boolean>(true);\n\n // State.\n private _formatter: (item: T) => T | null = null;\n private _refresh$ = new BehaviorSubject<number>(0);\n private _requestCache: CollectionRequest | null = null;\n\n constructor(private readonly _provider: CollectionProvider<T>,\n private readonly _initialValues: Partial<CollectionRequest> = {}) {\n this.queryControl = new FormControl(_initialValues?.query ?? null);\n this.queryFieldsControl = new FormControl(_initialValues?.queryFields ?? []);\n this.pageNumberControl = new FormControl(_initialValues?.pageNumber ?? 1);\n this.pageSizeControl = new FormControl(_initialValues?.pageSize ?? 25);\n this.sortControl = new FormControl(_initialValues?.sort ?? null);\n\n this.data$ = this.getData();\n }\n\n refresh() {\n this._refresh$.next(0);\n }\n\n setFormatter(callback: (items: T) => T) {\n this._formatter = callback;\n return this;\n }\n\n private getData() {\n const data$ = this.request.pipe(\n tap(() => this.loading$.next(true)),\n map(request => this.validateRequest(request)),\n switchMap(request => {\n return this._provider.transform(request).pipe(\n tap(response => this.cacheCollectionData(response)),\n map(response => ({response, request, initial: false})),\n catchError(error => of<{ error: Error, response: null, request: CollectionRequest, initial: boolean }>({\n error,\n request,\n response: null,\n initial: false\n }))\n );\n }),\n startWith({initial: true, response: null})\n );\n\n return combineLatest([data$, this.loading$.asObservable()]).pipe(\n map(([data, loading]) => {\n const combined = {...data, loading};\n return {...combined, response: this.formatResponse(data?.response), state: this.getState(combined)};\n })\n );\n }\n\n private formatResponse(response: CollectionData<T>) {\n if (!response) {\n return response;\n }\n\n const data = (response?.data ?? []).map(item => {\n return !!this._formatter ? this._formatter?.(item) : item;\n });\n return {...response, data};\n }\n\n private validateRequest(request: CollectionRequest) {\n // We should reset the page number whenever we change the query or the page size.\n if (this._requestCache && request && (this._requestCache?.query !== request?.query || this._requestCache?.pageSize !== request?.pageSize)) {\n this.pageNumberControl?.setValue(1, {emitEvent: false});\n request.pageNumber = this.pageNumberControl?.value;\n }\n\n this._requestCache = {...request};\n\n return request;\n }\n\n private getState(data: { response?: CollectionData<T>, request?: CollectionRequest, error?: Error, loading: boolean, initial: boolean }) {\n if (!!data?.error) {\n return CollectionState.Error;\n }\n\n if (!!data?.initial) {\n return CollectionState.Initial;\n }\n\n const count = data?.response?.data?.length ?? 0;\n if (count <= 0) {\n return CollectionState.Empty;\n }\n\n return CollectionState.Data;\n }\n\n private cacheCollectionData(data: CollectionData<T>) {\n this.raw$.next(data);\n this.loading$.next(false);\n }\n\n private get request() {\n const pageNumber$ = this.controlToObservable<number>(this.pageNumberControl);\n const pageSize$ = this.controlToObservable<number>(this.pageSizeControl);\n const query$ = this.getQueryObservable();\n const queryFields$ = this.controlToObservable<string[]>(this.queryFieldsControl);\n const sort$ = this.controlToObservable<CollectionRequestSort | CollectionRequestSort[]>(this.sortControl);\n\n return combineLatest([pageNumber$, pageSize$, query$, queryFields$, sort$, this._refresh$.asObservable()]).pipe(\n map(([pageNumber, pageSize, query, queryFields, sort]) => ({\n pageNumber,\n pageSize,\n query,\n queryFields,\n sort\n }))\n );\n }\n\n private getQueryObservable() {\n return this.queryControl.valueChanges.pipe(\n debounceTime<string>(400),\n distinctUntilChanged<string>(),\n startWith(this.queryControl?.value as string | null)\n );\n }\n\n private controlToObservable = <T = unknown>(control: AbstractControl) => {\n return control.valueChanges.pipe(\n distinctUntilChanged<T>(),\n startWith(control?.value as T)\n );\n };\n\n}\n\n","import {\n BbCollectionsData,\n BbCollectionsEmpty,\n BbCollectionsError,\n BbCollectionsInitial\n} from './components/collections.directive';\nimport {BbCollectionsViewer} from './components/collections-viewer/collections-viewer.component';\nimport {BbCollectionsPager} from './components/collections-pager/collections-pager.component';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [\n // Components.\n BbCollectionsViewer,\n BbCollectionsPager,\n // Directives.\n BbCollectionsData,\n BbCollectionsEmpty,\n BbCollectionsError,\n BbCollectionsInitial\n ],\n exports: [\n // Components.\n BbCollectionsViewer,\n BbCollectionsPager,\n // Directives.\n BbCollectionsData,\n BbCollectionsEmpty,\n BbCollectionsError,\n BbCollectionsInitial\n ]\n})\nexport class CollectionsModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}