@ecodev/natural 41.3.0 → 42.0.0

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 (348) hide show
  1. package/ecodev-natural.d.ts +1 -9
  2. package/esm2020/ecodev-natural.mjs +5 -0
  3. package/esm2020/lib/classes/abstract-controller.mjs +30 -0
  4. package/esm2020/lib/classes/abstract-detail.mjs +152 -0
  5. package/esm2020/lib/classes/abstract-editable-list.mjs +96 -0
  6. package/esm2020/lib/classes/abstract-list.mjs +406 -0
  7. package/esm2020/lib/classes/abstract-navigable-list.mjs +126 -0
  8. package/{esm2015/lib/classes/apollo-utils.js → esm2020/lib/classes/apollo-utils.mjs} +0 -0
  9. package/esm2020/lib/classes/data-source.mjs +76 -0
  10. package/{esm2015/lib/classes/query-variable-manager-utils.js → esm2020/lib/classes/query-variable-manager-utils.mjs} +0 -0
  11. package/esm2020/lib/classes/query-variable-manager.mjs +161 -0
  12. package/{esm2015/lib/classes/rxjs.js → esm2020/lib/classes/rxjs.mjs} +0 -0
  13. package/{esm2015/lib/classes/tld.js → esm2020/lib/classes/tld.mjs} +0 -0
  14. package/{esm2015/lib/classes/utility.js → esm2020/lib/classes/utility.mjs} +0 -0
  15. package/esm2020/lib/classes/validators.mjs +179 -0
  16. package/esm2020/lib/directives/http-prefix.directive.mjs +50 -0
  17. package/esm2020/lib/modules/alert/alert.module.mjs +20 -0
  18. package/esm2020/lib/modules/alert/alert.service.mjs +55 -0
  19. package/esm2020/lib/modules/alert/confirm.component.mjs +20 -0
  20. package/{esm2015/lib/modules/alert/public-api.js → esm2020/lib/modules/alert/public-api.mjs} +0 -0
  21. package/esm2020/lib/modules/avatar/avatar.module.mjs +19 -0
  22. package/esm2020/lib/modules/avatar/component/avatar.component.mjs +187 -0
  23. package/{esm2015/lib/modules/avatar/public-api.js → esm2020/lib/modules/avatar/public-api.mjs} +0 -0
  24. package/esm2020/lib/modules/avatar/service/avatar.service.mjs +66 -0
  25. package/esm2020/lib/modules/avatar/sources/gravatar.mjs +29 -0
  26. package/{esm2015/lib/modules/avatar/sources/image.js → esm2020/lib/modules/avatar/sources/image.mjs} +0 -0
  27. package/{esm2015/lib/modules/avatar/sources/initials.js → esm2020/lib/modules/avatar/sources/initials.mjs} +0 -0
  28. package/{esm2015/lib/modules/avatar/sources/source.js → esm2020/lib/modules/avatar/sources/source.mjs} +1 -1
  29. package/esm2020/lib/modules/columns-picker/columns-picker-column.directive.mjs +43 -0
  30. package/esm2020/lib/modules/columns-picker/columns-picker.component.mjs +84 -0
  31. package/esm2020/lib/modules/columns-picker/columns-picker.module.mjs +47 -0
  32. package/{esm2015/lib/modules/columns-picker/public-api.js → esm2020/lib/modules/columns-picker/public-api.mjs} +0 -0
  33. package/esm2020/lib/modules/common/common-module.mjs +54 -0
  34. package/esm2020/lib/modules/common/directives/linkable-tab.directive.mjs +79 -0
  35. package/esm2020/lib/modules/common/directives/reactive-asterisk.directive.mjs +33 -0
  36. package/esm2020/lib/modules/common/directives/src-density.directive.mjs +62 -0
  37. package/esm2020/lib/modules/common/pipes/capitalize.pipe.mjs +18 -0
  38. package/esm2020/lib/modules/common/pipes/ellipsis.pipe.mjs +14 -0
  39. package/esm2020/lib/modules/common/pipes/enum.pipe.mjs +25 -0
  40. package/esm2020/lib/modules/common/pipes/swiss-date.pipe.mjs +20 -0
  41. package/{esm2015/lib/modules/common/public-api.js → esm2020/lib/modules/common/public-api.mjs} +0 -0
  42. package/esm2020/lib/modules/common/services/memory-storage.mjs +112 -0
  43. package/esm2020/lib/modules/common/services/seo.service.mjs +114 -0
  44. package/esm2020/lib/modules/detail-header/detail-header.component.mjs +76 -0
  45. package/esm2020/lib/modules/detail-header/detail-header.module.mjs +21 -0
  46. package/{esm2015/lib/modules/detail-header/public-api.js → esm2020/lib/modules/detail-header/public-api.mjs} +0 -0
  47. package/esm2020/lib/modules/dialog-trigger/dialog-trigger.component.mjs +69 -0
  48. package/esm2020/lib/modules/dialog-trigger/dialog-trigger.module.mjs +19 -0
  49. package/{esm2015/lib/modules/dialog-trigger/public-api.js → esm2020/lib/modules/dialog-trigger/public-api.mjs} +0 -0
  50. package/esm2020/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +98 -0
  51. package/esm2020/lib/modules/dropdown-components/natural-dropdown-components.module.mjs +92 -0
  52. package/{esm2015/lib/modules/dropdown-components/public-api.js → esm2020/lib/modules/dropdown-components/public-api.mjs} +0 -0
  53. package/esm2020/lib/modules/dropdown-components/type-date/type-date.component.mjs +133 -0
  54. package/esm2020/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +137 -0
  55. package/esm2020/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +69 -0
  56. package/esm2020/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +38 -0
  57. package/esm2020/lib/modules/dropdown-components/type-number/type-number.component.mjs +104 -0
  58. package/esm2020/lib/modules/dropdown-components/type-select/type-select.component.mjs +169 -0
  59. package/esm2020/lib/modules/dropdown-components/type-text/type-text.component.mjs +57 -0
  60. package/{esm2015/lib/modules/dropdown-components/types.js → esm2020/lib/modules/dropdown-components/types.mjs} +0 -0
  61. package/{esm2015/lib/modules/dropdown-components/utils.js → esm2020/lib/modules/dropdown-components/utils.mjs} +0 -0
  62. package/esm2020/lib/modules/file/abstract-file.mjs +231 -0
  63. package/esm2020/lib/modules/file/component/file.component.mjs +143 -0
  64. package/esm2020/lib/modules/file/file-drop.directive.mjs +110 -0
  65. package/esm2020/lib/modules/file/file-select.directive.mjs +28 -0
  66. package/esm2020/lib/modules/file/file.module.mjs +24 -0
  67. package/esm2020/lib/modules/file/file.service.mjs +48 -0
  68. package/{esm2015/lib/modules/file/public-api.js → esm2020/lib/modules/file/public-api.mjs} +0 -0
  69. package/{esm2015/lib/modules/file/types.js → esm2020/lib/modules/file/types.mjs} +0 -0
  70. package/{esm2015/lib/modules/file/utils.js → esm2020/lib/modules/file/utils.mjs} +3 -4
  71. package/esm2020/lib/modules/fixed-button/fixed-button.component.mjs +27 -0
  72. package/esm2020/lib/modules/fixed-button/fixed-button.module.mjs +21 -0
  73. package/{esm2015/lib/modules/fixed-button/public-api.js → esm2020/lib/modules/fixed-button/public-api.mjs} +0 -0
  74. package/esm2020/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +36 -0
  75. package/esm2020/lib/modules/fixed-button-detail/fixed-button-detail.module.mjs +20 -0
  76. package/{esm2015/lib/modules/fixed-button-detail/public-api.js → esm2020/lib/modules/fixed-button-detail/public-api.mjs} +0 -0
  77. package/{esm2015/lib/modules/hierarchic-selector/classes/flat-node.js → esm2020/lib/modules/hierarchic-selector/classes/flat-node.mjs} +1 -1
  78. package/{esm2015/lib/modules/hierarchic-selector/classes/hierarchic-configuration.js → esm2020/lib/modules/hierarchic-selector/classes/hierarchic-configuration.mjs} +0 -0
  79. package/{esm2015/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.js → esm2020/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.mjs} +0 -0
  80. package/{esm2015/lib/modules/hierarchic-selector/classes/model-node.js → esm2020/lib/modules/hierarchic-selector/classes/model-node.mjs} +1 -1
  81. package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +364 -0
  82. package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +258 -0
  83. package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +31 -0
  84. package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +23 -0
  85. package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector.module.mjs +81 -0
  86. package/{esm2015/lib/modules/hierarchic-selector/public-api.js → esm2020/lib/modules/hierarchic-selector/public-api.mjs} +0 -0
  87. package/esm2020/lib/modules/icon/icon.component.mjs +92 -0
  88. package/esm2020/lib/modules/icon/icon.module.mjs +30 -0
  89. package/{esm2015/lib/modules/icon/public-api.js → esm2020/lib/modules/icon/public-api.mjs} +0 -0
  90. package/esm2020/lib/modules/matomo/matomo-module.module.mjs +12 -0
  91. package/esm2020/lib/modules/matomo/matomo.service.mjs +105 -0
  92. package/{esm2015/lib/modules/matomo/public-api.js → esm2020/lib/modules/matomo/public-api.mjs} +0 -0
  93. package/esm2020/lib/modules/panels/abstract-panel.mjs +56 -0
  94. package/{esm2015/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.js → esm2020/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.mjs} +0 -0
  95. package/esm2020/lib/modules/panels/panels.component.mjs +26 -0
  96. package/esm2020/lib/modules/panels/panels.module.mjs +33 -0
  97. package/esm2020/lib/modules/panels/panels.service.mjs +325 -0
  98. package/{esm2015/lib/modules/panels/panels.urlmatcher.js → esm2020/lib/modules/panels/panels.urlmatcher.mjs} +0 -0
  99. package/{esm2015/lib/modules/panels/public-api.js → esm2020/lib/modules/panels/public-api.mjs} +0 -0
  100. package/{esm2015/lib/modules/panels/types.js → esm2020/lib/modules/panels/types.mjs} +0 -0
  101. package/{esm2015/lib/modules/relations/public-api.js → esm2020/lib/modules/relations/public-api.mjs} +0 -0
  102. package/esm2020/lib/modules/relations/relations.component.mjs +198 -0
  103. package/esm2020/lib/modules/relations/relations.module.mjs +58 -0
  104. package/{esm2015/lib/modules/search/classes/graphql-doctrine.js → esm2020/lib/modules/search/classes/graphql-doctrine.mjs} +0 -0
  105. package/{esm2015/lib/modules/search/classes/graphql-doctrine.types.js → esm2020/lib/modules/search/classes/graphql-doctrine.types.mjs} +0 -0
  106. package/{esm2015/lib/modules/search/classes/transformers.js → esm2020/lib/modules/search/classes/transformers.mjs} +0 -0
  107. package/{esm2015/lib/modules/search/classes/url.js → esm2020/lib/modules/search/classes/url.mjs} +0 -0
  108. package/{esm2015/lib/modules/search/classes/utils.js → esm2020/lib/modules/search/classes/utils.mjs} +0 -0
  109. package/{esm2015/lib/modules/search/dropdown-container/dropdown-container-animations.js → esm2020/lib/modules/search/dropdown-container/dropdown-container-animations.mjs} +0 -0
  110. package/esm2020/lib/modules/search/dropdown-container/dropdown-container.component.mjs +88 -0
  111. package/{esm2015/lib/modules/search/dropdown-container/dropdown-ref.js → esm2020/lib/modules/search/dropdown-container/dropdown-ref.mjs} +1 -1
  112. package/esm2020/lib/modules/search/dropdown-container/dropdown.service.mjs +93 -0
  113. package/esm2020/lib/modules/search/facet-selector/facet-selector.component.mjs +50 -0
  114. package/esm2020/lib/modules/search/group/group.component.mjs +45 -0
  115. package/esm2020/lib/modules/search/input/input.component.mjs +328 -0
  116. package/{esm2015/lib/modules/search/public-api.js → esm2020/lib/modules/search/public-api.mjs} +0 -0
  117. package/esm2020/lib/modules/search/search/search.component.mjs +78 -0
  118. package/esm2020/lib/modules/search/search.module.mjs +84 -0
  119. package/{esm2015/lib/modules/search/types/dropdown-component.js → esm2020/lib/modules/search/types/dropdown-component.mjs} +0 -0
  120. package/{esm2015/lib/modules/search/types/facet.js → esm2020/lib/modules/search/types/facet.mjs} +0 -0
  121. package/{esm2015/lib/modules/search/types/values.js → esm2020/lib/modules/search/types/values.mjs} +0 -0
  122. package/esm2020/lib/modules/select/abstract-select.component.mjs +186 -0
  123. package/{esm2015/lib/modules/select/public-api.js → esm2020/lib/modules/select/public-api.mjs} +0 -0
  124. package/esm2020/lib/modules/select/select/select.component.mjs +208 -0
  125. package/esm2020/lib/modules/select/select-enum/select-enum.component.mjs +42 -0
  126. package/esm2020/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +128 -0
  127. package/esm2020/lib/modules/select/select.module.mjs +68 -0
  128. package/{esm2015/lib/modules/sidenav/public-api.js → esm2020/lib/modules/sidenav/public-api.mjs} +0 -0
  129. package/esm2020/lib/modules/sidenav/sidenav/sidenav.component.mjs +15 -0
  130. package/esm2020/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +87 -0
  131. package/esm2020/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +12 -0
  132. package/esm2020/lib/modules/sidenav/sidenav-stack.service.mjs +52 -0
  133. package/esm2020/lib/modules/sidenav/sidenav.module.mjs +25 -0
  134. package/esm2020/lib/modules/sidenav/sidenav.service.mjs +195 -0
  135. package/{esm2015/lib/modules/stamp/public-api.js → esm2020/lib/modules/stamp/public-api.mjs} +0 -0
  136. package/esm2020/lib/modules/stamp/stamp-module.module.mjs +18 -0
  137. package/esm2020/lib/modules/stamp/stamp.component.mjs +14 -0
  138. package/{esm2015/lib/modules/table-button/public-api.js → esm2020/lib/modules/table-button/public-api.mjs} +0 -0
  139. package/esm2020/lib/modules/table-button/table-button.component.mjs +48 -0
  140. package/esm2020/lib/modules/table-button/table-button.module.mjs +21 -0
  141. package/esm2020/lib/services/abstract-model.service.mjs +509 -0
  142. package/esm2020/lib/services/enum.service.mjs +67 -0
  143. package/esm2020/lib/services/link-mutation.service.mjs +153 -0
  144. package/esm2020/lib/services/persistence.service.mjs +113 -0
  145. package/esm2020/lib/services/swiss-parsing-date-adapter.service.mjs +55 -0
  146. package/{esm2015/lib/types/types.js → esm2020/lib/types/types.mjs} +0 -0
  147. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  148. package/fesm2015/{ecodev-natural.js → ecodev-natural.mjs} +2791 -2361
  149. package/fesm2015/ecodev-natural.mjs.map +1 -0
  150. package/fesm2020/ecodev-natural.mjs +10506 -0
  151. package/fesm2020/ecodev-natural.mjs.map +1 -0
  152. package/lib/classes/abstract-controller.d.ts +3 -0
  153. package/lib/classes/abstract-detail.d.ts +3 -0
  154. package/lib/classes/abstract-editable-list.d.ts +3 -0
  155. package/lib/classes/abstract-list.d.ts +3 -0
  156. package/lib/classes/abstract-navigable-list.d.ts +3 -0
  157. package/lib/directives/http-prefix.directive.d.ts +3 -0
  158. package/lib/modules/alert/alert.module.d.ts +9 -0
  159. package/lib/modules/alert/alert.service.d.ts +3 -0
  160. package/lib/modules/alert/confirm.component.d.ts +3 -0
  161. package/lib/modules/avatar/avatar.module.d.ts +6 -0
  162. package/lib/modules/avatar/component/avatar.component.d.ts +3 -0
  163. package/lib/modules/avatar/service/avatar.service.d.ts +3 -0
  164. package/lib/modules/columns-picker/columns-picker-column.directive.d.ts +3 -0
  165. package/lib/modules/columns-picker/columns-picker.component.d.ts +3 -0
  166. package/lib/modules/columns-picker/columns-picker.module.d.ts +13 -0
  167. package/lib/modules/common/common-module.d.ts +16 -0
  168. package/lib/modules/common/directives/linkable-tab.directive.d.ts +3 -0
  169. package/lib/modules/common/directives/reactive-asterisk.directive.d.ts +3 -0
  170. package/lib/modules/common/directives/src-density.directive.d.ts +3 -0
  171. package/lib/modules/common/pipes/capitalize.pipe.d.ts +3 -0
  172. package/lib/modules/common/pipes/ellipsis.pipe.d.ts +3 -0
  173. package/lib/modules/common/pipes/enum.pipe.d.ts +3 -0
  174. package/lib/modules/common/pipes/swiss-date.pipe.d.ts +3 -0
  175. package/lib/modules/common/services/memory-storage.d.ts +3 -0
  176. package/lib/modules/common/services/seo.service.d.ts +3 -0
  177. package/lib/modules/detail-header/detail-header.component.d.ts +3 -0
  178. package/lib/modules/detail-header/detail-header.module.d.ts +9 -0
  179. package/lib/modules/dialog-trigger/dialog-trigger.component.d.ts +3 -0
  180. package/lib/modules/dialog-trigger/dialog-trigger.module.d.ts +7 -0
  181. package/lib/modules/dropdown-components/abstract-association-select-component.directive.d.ts +3 -0
  182. package/lib/modules/dropdown-components/natural-dropdown-components.module.d.ts +22 -0
  183. package/lib/modules/dropdown-components/type-date/type-date.component.d.ts +3 -0
  184. package/lib/modules/dropdown-components/type-date-range/type-date-range.component.d.ts +3 -0
  185. package/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.d.ts +3 -0
  186. package/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.d.ts +3 -0
  187. package/lib/modules/dropdown-components/type-number/type-number.component.d.ts +3 -0
  188. package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +3 -0
  189. package/lib/modules/dropdown-components/type-text/type-text.component.d.ts +3 -0
  190. package/lib/modules/file/abstract-file.d.ts +3 -0
  191. package/lib/modules/file/component/file.component.d.ts +3 -0
  192. package/lib/modules/file/file-drop.directive.d.ts +3 -0
  193. package/lib/modules/file/file-select.directive.d.ts +3 -0
  194. package/lib/modules/file/file.module.d.ts +11 -0
  195. package/lib/modules/file/file.service.d.ts +3 -0
  196. package/lib/modules/fixed-button/fixed-button.component.d.ts +3 -0
  197. package/lib/modules/fixed-button/fixed-button.module.d.ts +9 -0
  198. package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +3 -0
  199. package/lib/modules/fixed-button-detail/fixed-button-detail.module.d.ts +8 -0
  200. package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +3 -0
  201. package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.d.ts +3 -0
  202. package/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.d.ts +3 -0
  203. package/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.d.ts +3 -0
  204. package/lib/modules/hierarchic-selector/hierarchic-selector.module.d.ts +21 -0
  205. package/lib/modules/icon/icon.component.d.ts +3 -0
  206. package/lib/modules/icon/icon.module.d.ts +7 -0
  207. package/lib/modules/matomo/matomo-module.module.d.ts +4 -0
  208. package/lib/modules/matomo/matomo.service.d.ts +3 -0
  209. package/lib/modules/panels/abstract-panel.d.ts +3 -0
  210. package/lib/modules/panels/panels.component.d.ts +3 -0
  211. package/lib/modules/panels/panels.module.d.ts +8 -0
  212. package/lib/modules/panels/panels.service.d.ts +3 -0
  213. package/lib/modules/relations/relations.component.d.ts +3 -0
  214. package/lib/modules/relations/relations.module.d.ts +15 -0
  215. package/lib/modules/search/dropdown-container/dropdown-container.component.d.ts +3 -0
  216. package/lib/modules/search/dropdown-container/dropdown-ref.d.ts +1 -1
  217. package/lib/modules/search/dropdown-container/dropdown.service.d.ts +3 -0
  218. package/lib/modules/search/facet-selector/facet-selector.component.d.ts +3 -0
  219. package/lib/modules/search/group/group.component.d.ts +3 -0
  220. package/lib/modules/search/input/input.component.d.ts +3 -0
  221. package/lib/modules/search/search/search.component.d.ts +3 -0
  222. package/lib/modules/search/search.module.d.ts +19 -0
  223. package/lib/modules/select/abstract-select.component.d.ts +4 -1
  224. package/lib/modules/select/select/select.component.d.ts +3 -0
  225. package/lib/modules/select/select-enum/select-enum.component.d.ts +3 -0
  226. package/lib/modules/select/select-hierarchic/select-hierarchic.component.d.ts +3 -0
  227. package/lib/modules/select/select.module.d.ts +19 -0
  228. package/lib/modules/sidenav/sidenav/sidenav.component.d.ts +3 -0
  229. package/lib/modules/sidenav/sidenav-container/sidenav-container.component.d.ts +3 -0
  230. package/lib/modules/sidenav/sidenav-content/sidenav-content.component.d.ts +3 -0
  231. package/lib/modules/sidenav/sidenav-stack.service.d.ts +4 -1
  232. package/lib/modules/sidenav/sidenav.module.d.ts +11 -0
  233. package/lib/modules/sidenav/sidenav.service.d.ts +3 -0
  234. package/lib/modules/stamp/stamp-module.module.d.ts +6 -0
  235. package/lib/modules/stamp/stamp.component.d.ts +3 -0
  236. package/lib/modules/table-button/table-button.component.d.ts +3 -0
  237. package/lib/modules/table-button/table-button.module.d.ts +9 -0
  238. package/lib/services/enum.service.d.ts +3 -0
  239. package/lib/services/link-mutation.service.d.ts +3 -0
  240. package/lib/services/persistence.service.d.ts +3 -0
  241. package/lib/services/swiss-parsing-date-adapter.service.d.ts +4 -1
  242. package/package.json +25 -12
  243. package/src/lib/modules/alert/_alert.theme.scss +1 -1
  244. package/src/lib/modules/file/component/_file.theme.scss +1 -1
  245. package/src/lib/modules/icon/_icon.theme.scss +1 -1
  246. package/src/lib/modules/search/dropdown-container/_dropdown-container.theme.scss +1 -1
  247. package/src/lib/modules/table-button/_table-button.theme.scss +1 -1
  248. package/src/lib/styles/_table.scss +1 -1
  249. package/theming/_natural.theme.scss +1 -1
  250. package/bundles/ecodev-natural.umd.js +0 -11318
  251. package/bundles/ecodev-natural.umd.js.map +0 -1
  252. package/ecodev-natural.metadata.json +0 -1
  253. package/esm2015/ecodev-natural.js +0 -14
  254. package/esm2015/lib/classes/abstract-controller.js +0 -29
  255. package/esm2015/lib/classes/abstract-detail.js +0 -157
  256. package/esm2015/lib/classes/abstract-editable-list.js +0 -97
  257. package/esm2015/lib/classes/abstract-list.js +0 -409
  258. package/esm2015/lib/classes/abstract-navigable-list.js +0 -126
  259. package/esm2015/lib/classes/data-source.js +0 -76
  260. package/esm2015/lib/classes/query-variable-manager.js +0 -161
  261. package/esm2015/lib/classes/validators.js +0 -176
  262. package/esm2015/lib/directives/http-prefix.directive.js +0 -46
  263. package/esm2015/lib/modules/alert/alert.module.js +0 -15
  264. package/esm2015/lib/modules/alert/alert.service.js +0 -59
  265. package/esm2015/lib/modules/alert/confirm.component.js +0 -17
  266. package/esm2015/lib/modules/avatar/avatar.module.js +0 -14
  267. package/esm2015/lib/modules/avatar/component/avatar.component.js +0 -158
  268. package/esm2015/lib/modules/avatar/service/avatar.service.js +0 -65
  269. package/esm2015/lib/modules/avatar/sources/gravatar.js +0 -29
  270. package/esm2015/lib/modules/columns-picker/columns-picker-column.directive.js +0 -41
  271. package/esm2015/lib/modules/columns-picker/columns-picker.component.js +0 -82
  272. package/esm2015/lib/modules/columns-picker/columns-picker.module.js +0 -28
  273. package/esm2015/lib/modules/common/common-module.js +0 -35
  274. package/esm2015/lib/modules/common/directives/linkable-tab.directive.js +0 -82
  275. package/esm2015/lib/modules/common/directives/reactive-asterisk.directive.js +0 -31
  276. package/esm2015/lib/modules/common/directives/src-density.directive.js +0 -63
  277. package/esm2015/lib/modules/common/pipes/capitalize.pipe.js +0 -14
  278. package/esm2015/lib/modules/common/pipes/ellipsis.pipe.js +0 -10
  279. package/esm2015/lib/modules/common/pipes/enum.pipe.js +0 -24
  280. package/esm2015/lib/modules/common/pipes/swiss-date.pipe.js +0 -16
  281. package/esm2015/lib/modules/common/services/memory-storage.js +0 -110
  282. package/esm2015/lib/modules/common/services/seo.service.js +0 -120
  283. package/esm2015/lib/modules/detail-header/detail-header.component.js +0 -63
  284. package/esm2015/lib/modules/detail-header/detail-header.module.js +0 -16
  285. package/esm2015/lib/modules/dialog-trigger/dialog-trigger.component.js +0 -68
  286. package/esm2015/lib/modules/dialog-trigger/dialog-trigger.module.js +0 -14
  287. package/esm2015/lib/modules/dropdown-components/abstract-association-select-component.directive.js +0 -96
  288. package/esm2015/lib/modules/dropdown-components/natural-dropdown-components.module.js +0 -51
  289. package/esm2015/lib/modules/dropdown-components/type-date/type-date.component.js +0 -123
  290. package/esm2015/lib/modules/dropdown-components/type-date-range/type-date-range.component.js +0 -128
  291. package/esm2015/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.js +0 -63
  292. package/esm2015/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.js +0 -31
  293. package/esm2015/lib/modules/dropdown-components/type-number/type-number.component.js +0 -99
  294. package/esm2015/lib/modules/dropdown-components/type-select/type-select.component.js +0 -161
  295. package/esm2015/lib/modules/dropdown-components/type-text/type-text.component.js +0 -53
  296. package/esm2015/lib/modules/file/abstract-file.js +0 -223
  297. package/esm2015/lib/modules/file/component/file.component.js +0 -133
  298. package/esm2015/lib/modules/file/file-drop.directive.js +0 -99
  299. package/esm2015/lib/modules/file/file-select.directive.js +0 -25
  300. package/esm2015/lib/modules/file/file.module.js +0 -19
  301. package/esm2015/lib/modules/file/file.service.js +0 -47
  302. package/esm2015/lib/modules/fixed-button/fixed-button.component.js +0 -23
  303. package/esm2015/lib/modules/fixed-button/fixed-button.module.js +0 -16
  304. package/esm2015/lib/modules/fixed-button-detail/fixed-button-detail.component.js +0 -31
  305. package/esm2015/lib/modules/fixed-button-detail/fixed-button-detail.module.js +0 -15
  306. package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.js +0 -351
  307. package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.js +0 -258
  308. package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.js +0 -28
  309. package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.js +0 -23
  310. package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector.module.js +0 -46
  311. package/esm2015/lib/modules/icon/icon.component.js +0 -78
  312. package/esm2015/lib/modules/icon/icon.module.js +0 -25
  313. package/esm2015/lib/modules/matomo/matomo-module.module.js +0 -7
  314. package/esm2015/lib/modules/matomo/matomo.service.js +0 -106
  315. package/esm2015/lib/modules/panels/abstract-panel.js +0 -50
  316. package/esm2015/lib/modules/panels/panels.component.js +0 -26
  317. package/esm2015/lib/modules/panels/panels.module.js +0 -28
  318. package/esm2015/lib/modules/panels/panels.service.js +0 -331
  319. package/esm2015/lib/modules/relations/relations.component.js +0 -181
  320. package/esm2015/lib/modules/relations/relations.module.js +0 -33
  321. package/esm2015/lib/modules/search/dropdown-container/dropdown-container.component.js +0 -87
  322. package/esm2015/lib/modules/search/dropdown-container/dropdown.service.js +0 -95
  323. package/esm2015/lib/modules/search/facet-selector/facet-selector.component.js +0 -47
  324. package/esm2015/lib/modules/search/group/group.component.js +0 -39
  325. package/esm2015/lib/modules/search/input/input.component.js +0 -316
  326. package/esm2015/lib/modules/search/search/search.component.js +0 -71
  327. package/esm2015/lib/modules/search/search.module.js +0 -52
  328. package/esm2015/lib/modules/select/abstract-select.component.js +0 -176
  329. package/esm2015/lib/modules/select/select/select.component.js +0 -190
  330. package/esm2015/lib/modules/select/select-enum/select-enum.component.js +0 -34
  331. package/esm2015/lib/modules/select/select-hierarchic/select-hierarchic.component.js +0 -120
  332. package/esm2015/lib/modules/select/select.module.js +0 -39
  333. package/esm2015/lib/modules/sidenav/sidenav/sidenav.component.js +0 -12
  334. package/esm2015/lib/modules/sidenav/sidenav-container/sidenav-container.component.js +0 -79
  335. package/esm2015/lib/modules/sidenav/sidenav-content/sidenav-content.component.js +0 -13
  336. package/esm2015/lib/modules/sidenav/sidenav-stack.service.js +0 -50
  337. package/esm2015/lib/modules/sidenav/sidenav.module.js +0 -20
  338. package/esm2015/lib/modules/sidenav/sidenav.service.js +0 -199
  339. package/esm2015/lib/modules/stamp/stamp-module.module.js +0 -13
  340. package/esm2015/lib/modules/stamp/stamp.component.js +0 -13
  341. package/esm2015/lib/modules/table-button/table-button.component.js +0 -38
  342. package/esm2015/lib/modules/table-button/table-button.module.js +0 -16
  343. package/esm2015/lib/services/abstract-model.service.js +0 -509
  344. package/esm2015/lib/services/enum.service.js +0 -68
  345. package/esm2015/lib/services/link-mutation.service.js +0 -155
  346. package/esm2015/lib/services/persistence.service.js +0 -114
  347. package/esm2015/lib/services/swiss-parsing-date-adapter.service.js +0 -55
  348. package/fesm2015/ecodev-natural.js.map +0 -1
@@ -0,0 +1,67 @@
1
+ import { gql } from 'apollo-angular';
2
+ import { Injectable } from '@angular/core';
3
+ import { map } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "apollo-angular";
6
+ const enumTypeQuery = gql `
7
+ query EnumType($name: String!) {
8
+ __type(name: $name) {
9
+ __typename
10
+ enumValues {
11
+ name
12
+ description
13
+ }
14
+ }
15
+ }
16
+ `;
17
+ export class NaturalEnumService {
18
+ constructor(apollo) {
19
+ this.apollo = apollo;
20
+ }
21
+ /**
22
+ * Return a list of observable enumerables considering the given name
23
+ */
24
+ get(name) {
25
+ // Load possible action statuses
26
+ return this.apollo
27
+ .query({
28
+ query: enumTypeQuery,
29
+ variables: { name: name },
30
+ fetchPolicy: 'cache-first',
31
+ })
32
+ .pipe(map(result => {
33
+ const values = [];
34
+ if (result.data.__type && result.data.__type.enumValues) {
35
+ for (const enumValue of result.data.__type.enumValues) {
36
+ values.push({
37
+ value: enumValue.name,
38
+ name: enumValue.description || '',
39
+ });
40
+ }
41
+ }
42
+ return values;
43
+ }));
44
+ }
45
+ /**
46
+ * Returns the enum user-friendly name, instead of its value.
47
+ */
48
+ getValueName(value, enumName) {
49
+ return this.get(enumName).pipe(map(values => {
50
+ for (const v of values) {
51
+ if (v.value === value) {
52
+ return v.name;
53
+ }
54
+ }
55
+ return '';
56
+ }));
57
+ }
58
+ }
59
+ NaturalEnumService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NaturalEnumService, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
60
+ NaturalEnumService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NaturalEnumService, providedIn: 'root' });
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NaturalEnumService, decorators: [{
62
+ type: Injectable,
63
+ args: [{
64
+ providedIn: 'root',
65
+ }]
66
+ }], ctorParameters: function () { return [{ type: i1.Apollo }]; } });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL3NlcnZpY2VzL2VudW0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUd6QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7OztBQUVuQyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUE7Ozs7Ozs7Ozs7Q0FVeEIsQ0FBQztBQW9CRixNQUFNLE9BQU8sa0JBQWtCO0lBQzNCLFlBQW9DLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQUV0RDs7T0FFRztJQUNJLEdBQUcsQ0FBQyxJQUFZO1FBQ25CLGdDQUFnQztRQUNoQyxPQUFPLElBQUksQ0FBQyxNQUFNO2FBQ2IsS0FBSyxDQUFXO1lBQ2IsS0FBSyxFQUFFLGFBQWE7WUFDcEIsU0FBUyxFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQztZQUN2QixXQUFXLEVBQUUsYUFBYTtTQUM3QixDQUFDO2FBQ0QsSUFBSSxDQUNELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNULE1BQU0sTUFBTSxHQUFZLEVBQUUsQ0FBQztZQUMzQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtnQkFDckQsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7b0JBQ25ELE1BQU0sQ0FBQyxJQUFJLENBQUM7d0JBQ1IsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJO3dCQUNyQixJQUFJLEVBQUUsU0FBUyxDQUFDLFdBQVcsSUFBSSxFQUFFO3FCQUNwQyxDQUFDLENBQUM7aUJBQ047YUFDSjtZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDVixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZLENBQUMsS0FBYSxFQUFFLFFBQWdCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQzFCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNULEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxFQUFFO2dCQUNwQixJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFO29CQUNuQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7aUJBQ2pCO2FBQ0o7WUFFRCxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOzsrR0E5Q1Esa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGZixNQUFNOzJGQUVULGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Fwb2xsbywgZ3FsfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuY29uc3QgZW51bVR5cGVRdWVyeSA9IGdxbGBcbiAgICBxdWVyeSBFbnVtVHlwZSgkbmFtZTogU3RyaW5nISkge1xuICAgICAgICBfX3R5cGUobmFtZTogJG5hbWUpIHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWVcbiAgICAgICAgICAgIGVudW1WYWx1ZXMge1xuICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuYDtcblxuaW50ZXJmYWNlIEVudW1UeXBlIHtcbiAgICBfX3R5cGU6IG51bGwgfCB7XG4gICAgICAgIF9fdHlwZW5hbWU6IHN0cmluZztcbiAgICAgICAgZW51bVZhbHVlczogbnVsbCB8IEFycmF5PHtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBudWxsIHwgc3RyaW5nO1xuICAgICAgICB9PjtcbiAgICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFbnVtIHtcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEVudW1TZXJ2aWNlIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhcG9sbG86IEFwb2xsbykge31cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGxpc3Qgb2Ygb2JzZXJ2YWJsZSBlbnVtZXJhYmxlcyBjb25zaWRlcmluZyB0aGUgZ2l2ZW4gbmFtZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQobmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJRW51bVtdPiB7XG4gICAgICAgIC8vIExvYWQgcG9zc2libGUgYWN0aW9uIHN0YXR1c2VzXG4gICAgICAgIHJldHVybiB0aGlzLmFwb2xsb1xuICAgICAgICAgICAgLnF1ZXJ5PEVudW1UeXBlPih7XG4gICAgICAgICAgICAgICAgcXVlcnk6IGVudW1UeXBlUXVlcnksXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzOiB7bmFtZTogbmFtZX0sXG4gICAgICAgICAgICAgICAgZmV0Y2hQb2xpY3k6ICdjYWNoZS1maXJzdCcsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlczogSUVudW1bXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRhdGEuX190eXBlICYmIHJlc3VsdC5kYXRhLl9fdHlwZS5lbnVtVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVudW1WYWx1ZSBvZiByZXN1bHQuZGF0YS5fX3R5cGUuZW51bVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVudW1WYWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbnVtVmFsdWUuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBlbnVtIHVzZXItZnJpZW5kbHkgbmFtZSwgaW5zdGVhZCBvZiBpdHMgdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIGdldFZhbHVlTmFtZSh2YWx1ZTogc3RyaW5nLCBlbnVtTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGVudW1OYW1lKS5waXBlKFxuICAgICAgICAgICAgbWFwKHZhbHVlcyA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodi52YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2Lm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,153 @@
1
+ import { gql } from 'apollo-angular';
2
+ import { Injectable } from '@angular/core';
3
+ import { clone } from 'lodash-es';
4
+ import { forkJoin, of } from 'rxjs';
5
+ import { map, switchMap } from 'rxjs/operators';
6
+ import { upperCaseFirstLetter } from '../classes/utility';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "apollo-angular";
9
+ /**
10
+ * Query to get list of mutations
11
+ */
12
+ const queriesQuery = gql `
13
+ query Mutations {
14
+ __type(name: "Mutation") {
15
+ fields {
16
+ name
17
+ args {
18
+ name
19
+ type {
20
+ ofType {
21
+ name
22
+ }
23
+ }
24
+ }
25
+ }
26
+ }
27
+ }
28
+ `;
29
+ export class NaturalLinkMutationService {
30
+ constructor(apollo) {
31
+ this.apollo = apollo;
32
+ }
33
+ /**
34
+ * Link two objects together
35
+ */
36
+ link(obj1, obj2, otherName = null, variables = {}) {
37
+ // clone prevents to affect the original reference
38
+ const clonedVariables = clone(variables);
39
+ return this.getMutation('link', obj1, obj2, otherName, clonedVariables).pipe(switchMap(mutation => this.execute(mutation)));
40
+ }
41
+ /**
42
+ * Link many objects
43
+ */
44
+ linkMany(obj1, objects, otherName = null, variables = {}) {
45
+ return forkJoin(objects.map(obj2 => this.link(obj1, obj2, otherName, variables)));
46
+ }
47
+ /**
48
+ * Unlink two objects
49
+ */
50
+ unlink(obj1, obj2, otherName = null) {
51
+ return this.getMutation('unlink', obj1, obj2, otherName).pipe(switchMap(mutation => this.execute(mutation)));
52
+ }
53
+ /**
54
+ * Return the list of all available mutation names
55
+ */
56
+ getAllMutationNames() {
57
+ if (this.allMutations) {
58
+ return of(this.allMutations);
59
+ }
60
+ const mapArg = (arg) => {
61
+ return {
62
+ name: arg.name,
63
+ type: arg.type?.ofType?.name?.replace(/ID$/, '') || 'should-never-happen',
64
+ };
65
+ };
66
+ return this.apollo
67
+ .query({
68
+ query: queriesQuery,
69
+ fetchPolicy: 'cache-first',
70
+ })
71
+ .pipe(map(({ data }) => {
72
+ if (data.__type && data.__type.fields) {
73
+ this.allMutations = data.__type.fields
74
+ .filter(v => v.name.match(/^(link|unlink)/))
75
+ .map(v => {
76
+ return {
77
+ name: v.name,
78
+ arg1: mapArg(v.args[0]),
79
+ arg2: mapArg(v.args[1]),
80
+ };
81
+ });
82
+ }
83
+ else {
84
+ this.allMutations = [];
85
+ }
86
+ return this.allMutations;
87
+ }));
88
+ }
89
+ /**
90
+ * Generate mutation using patterns and replacing variables
91
+ */
92
+ getMutation(action, obj1, obj2, otherName, variables = {}) {
93
+ otherName = otherName ? upperCaseFirstLetter(otherName) : otherName;
94
+ const mutationName = action + obj1.__typename + (otherName || obj2.__typename);
95
+ const reversedMutationName = action + obj2.__typename + (otherName || obj1.__typename);
96
+ return this.getAllMutationNames().pipe(map(allMutationNames => {
97
+ const mutation = allMutationNames.find(mut => mut.name === mutationName) ||
98
+ allMutationNames.find(mut => mut.name === reversedMutationName);
99
+ if (mutation) {
100
+ return this.buildTemplate(mutation, obj1, obj2, variables);
101
+ }
102
+ throw TypeError('API does not allow to ' + action + ' ' + obj1.__typename + ' and ' + obj2.__typename);
103
+ }));
104
+ }
105
+ /**
106
+ * Execute mutation
107
+ */
108
+ execute(mutation) {
109
+ return this.apollo
110
+ .mutate({
111
+ mutation: gql(mutation),
112
+ })
113
+ .pipe(map(r => {
114
+ this.apollo.client.reFetchObservableQueries();
115
+ return r;
116
+ }));
117
+ }
118
+ /**
119
+ * Build the actual mutation string
120
+ */
121
+ buildTemplate(mutation, obj1, obj2, variables = {}) {
122
+ let name1;
123
+ let name2;
124
+ if (obj1.__typename === mutation.arg1.type) {
125
+ name1 = mutation.arg1.name;
126
+ name2 = mutation.arg2.name;
127
+ }
128
+ else {
129
+ name1 = mutation.arg2.name;
130
+ name2 = mutation.arg1.name;
131
+ }
132
+ variables[name1] = obj1.id;
133
+ variables[name2] = obj2.id;
134
+ let serializedVariables = '';
135
+ for (const key of Object.keys(variables)) {
136
+ serializedVariables += key + ': ' + JSON.stringify(variables[key]) + ' ';
137
+ }
138
+ return `mutation linkAndUnlink {
139
+ ${mutation.name}(${serializedVariables}) {
140
+ id
141
+ }
142
+ }`;
143
+ }
144
+ }
145
+ NaturalLinkMutationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NaturalLinkMutationService, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
146
+ NaturalLinkMutationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NaturalLinkMutationService, providedIn: 'root' });
147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NaturalLinkMutationService, decorators: [{
148
+ type: Injectable,
149
+ args: [{
150
+ providedIn: 'root',
151
+ }]
152
+ }], ctorParameters: function () { return [{ type: i1.Apollo }]; } });
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1tdXRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL3NlcnZpY2VzL2xpbmstbXV0YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxRQUFRLEVBQWMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7OztBQUV4RDs7R0FFRztBQUNILE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7OztDQWdCdkIsQ0FBQztBQXVDRixNQUFNLE9BQU8sMEJBQTBCO0lBTW5DLFlBQW9DLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQUV0RDs7T0FFRztJQUNJLElBQUksQ0FDUCxJQUFvQixFQUNwQixJQUFvQixFQUNwQixZQUEyQixJQUFJLEVBQy9CLFlBQXFCLEVBQUU7UUFFdkIsa0RBQWtEO1FBQ2xELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV6QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FDeEUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUNoRCxD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QUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ3hDLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMzQixLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDOUI7YUFBTTtZQUNILEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMzQixLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDOUI7UUFDRCxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMzQixTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUUzQixJQUFJLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM3QixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDdEMsbUJBQW1CLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUM1RTtRQUVELE9BQU87Y0FDRCxRQUFRLENBQUMsSUFBSSxJQUFJLG1CQUFtQjs7O1VBR3hDLENBQUM7SUFDUCxDQUFDOzt1SEFyS1EsMEJBQTBCOzJIQUExQiwwQkFBMEIsY0FGdkIsTUFBTTsyRkFFVCwwQkFBMEI7a0JBSHRDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcG9sbG8sIGdxbH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xuaW1wb3J0IHtGZXRjaFJlc3VsdH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge2Nsb25lfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtMaXRlcmFsfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge3VwcGVyQ2FzZUZpcnN0TGV0dGVyfSBmcm9tICcuLi9jbGFzc2VzL3V0aWxpdHknO1xuXG4vKipcbiAqIFF1ZXJ5IHRvIGdldCBsaXN0IG9mIG11dGF0aW9uc1xuICovXG5jb25zdCBxdWVyaWVzUXVlcnkgPSBncWxgXG4gICAgcXVlcnkgTXV0YXRpb25zIHtcbiAgICAgICAgX190eXBlKG5hbWU6IFwiTXV0YXRpb25cIikge1xuICAgICAgICAgICAgZmllbGRzIHtcbiAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgYXJncyB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgdHlwZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZlR5cGUge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbmA7XG5cbnR5cGUgSW50cm9zcGVjdGVkQXJnID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiB7XG4gICAgICAgIG9mVHlwZTogbnVsbCB8IHtcbiAgICAgICAgICAgIG5hbWU6IG51bGwgfCBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgfTtcbn07XG5cbmludGVyZmFjZSBJbnRyb3NwZWN0ZWRNdXRhdGlvbnMge1xuICAgIF9fdHlwZTogbnVsbCB8IHtcbiAgICAgICAgZmllbGRzOiBudWxsIHwgQXJyYXk8e1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgYXJnczogQXJyYXk8SW50cm9zcGVjdGVkQXJnPjtcbiAgICAgICAgfT47XG4gICAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaW5rYWJsZU9iamVjdCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBfX3R5cGVuYW1lOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBNdXRhdGlvbkFyZyB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIE11dGF0aW9uIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYXJnMTogTXV0YXRpb25Bcmc7XG4gICAgYXJnMjogTXV0YXRpb25Bcmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxMaW5rTXV0YXRpb25TZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiBSZWNlaXZlcyB0aGUgbGlzdCBvZiBhdmFpbGFibGUgbXV0YXRpb25zXG4gICAgICovXG4gICAgcHJpdmF0ZSBhbGxNdXRhdGlvbnM/OiBNdXRhdGlvbltdO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXBvbGxvOiBBcG9sbG8pIHt9XG5cbiAgICAvKipcbiAgICAgKiBMaW5rIHR3byBvYmplY3RzIHRvZ2V0aGVyXG4gICAgICovXG4gICAgcHVibGljIGxpbmsoXG4gICAgICAgIG9iajE6IExpbmthYmxlT2JqZWN0LFxuICAgICAgICBvYmoyOiBMaW5rYWJsZU9iamVjdCxcbiAgICAgICAgb3RoZXJOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGVzOiBMaXRlcmFsID0ge30sXG4gICAgKTogT2JzZXJ2YWJsZTxGZXRjaFJlc3VsdDx7aWQ6IHN0cmluZ30+PiB7XG4gICAgICAgIC8vIGNsb25lIHByZXZlbnRzIHRvIGFmZmVjdCB0aGUgb3JpZ2luYWwgcmVmZXJlbmNlXG4gICAgICAgIGNvbnN0IGNsb25lZFZhcmlhYmxlcyA9IGNsb25lKHZhcmlhYmxlcyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TXV0YXRpb24oJ2xpbmsnLCBvYmoxLCBvYmoyLCBvdGhlck5hbWUsIGNsb25lZFZhcmlhYmxlcykucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChtdXRhdGlvbiA9PiB0aGlzLmV4ZWN1dGUobXV0YXRpb24pKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaW5rIG1hbnkgb2JqZWN0c1xuICAgICAqL1xuICAgIHB1YmxpYyBsaW5rTWFueShcbiAgICAgICAgb2JqMTogTGlua2FibGVPYmplY3QsXG4gICAgICAgIG9iamVjdHM6IExpbmthYmxlT2JqZWN0W10sXG4gICAgICAgIG90aGVyTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlczogTGl0ZXJhbCA9IHt9LFxuICAgICk6IE9ic2VydmFibGU8RmV0Y2hSZXN1bHQ8e2lkOiBzdHJpbmd9PltdPiB7XG4gICAgICAgIHJldHVybiBmb3JrSm9pbihvYmplY3RzLm1hcChvYmoyID0+IHRoaXMubGluayhvYmoxLCBvYmoyLCBvdGhlck5hbWUsIHZhcmlhYmxlcykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbmxpbmsgdHdvIG9iamVjdHNcbiAgICAgKi9cbiAgICBwdWJsaWMgdW5saW5rKFxuICAgICAgICBvYmoxOiBMaW5rYWJsZU9iamVjdCxcbiAgICAgICAgb2JqMjogTGlua2FibGVPYmplY3QsXG4gICAgICAgIG90aGVyTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgKTogT2JzZXJ2YWJsZTxGZXRjaFJlc3VsdDx7aWQ6IHN0cmluZ30+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE11dGF0aW9uKCd1bmxpbmsnLCBvYmoxLCBvYmoyLCBvdGhlck5hbWUpLnBpcGUoc3dpdGNoTWFwKG11dGF0aW9uID0+IHRoaXMuZXhlY3V0ZShtdXRhdGlvbikpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBtdXRhdGlvbiBuYW1lc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0QWxsTXV0YXRpb25OYW1lcygpOiBPYnNlcnZhYmxlPE11dGF0aW9uW10+IHtcbiAgICAgICAgaWYgKHRoaXMuYWxsTXV0YXRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YodGhpcy5hbGxNdXRhdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWFwQXJnID0gKGFyZzogSW50cm9zcGVjdGVkQXJnKTogTXV0YXRpb25BcmcgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhcmcubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBhcmcudHlwZT8ub2ZUeXBlPy5uYW1lPy5yZXBsYWNlKC9JRCQvLCAnJykgfHwgJ3Nob3VsZC1uZXZlci1oYXBwZW4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgIC5xdWVyeTxJbnRyb3NwZWN0ZWRNdXRhdGlvbnM+KHtcbiAgICAgICAgICAgICAgICBxdWVyeTogcXVlcmllc1F1ZXJ5LFxuICAgICAgICAgICAgICAgIGZldGNoUG9saWN5OiAnY2FjaGUtZmlyc3QnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoe2RhdGF9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLl9fdHlwZSAmJiBkYXRhLl9fdHlwZS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsTXV0YXRpb25zID0gZGF0YS5fX3R5cGUuZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih2ID0+IHYubmFtZS5tYXRjaCgvXihsaW5rfHVubGluaykvKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKHYgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnMTogbWFwQXJnKHYuYXJnc1swXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcyOiBtYXBBcmcodi5hcmdzWzFdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsTXV0YXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbGxNdXRhdGlvbnM7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlIG11dGF0aW9uIHVzaW5nIHBhdHRlcm5zIGFuZCByZXBsYWNpbmcgdmFyaWFibGVzXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRNdXRhdGlvbihcbiAgICAgICAgYWN0aW9uOiBzdHJpbmcsXG4gICAgICAgIG9iajE6IExpbmthYmxlT2JqZWN0LFxuICAgICAgICBvYmoyOiBMaW5rYWJsZU9iamVjdCxcbiAgICAgICAgb3RoZXJOYW1lOiBzdHJpbmcgfCBudWxsLFxuICAgICAgICB2YXJpYWJsZXM6IExpdGVyYWwgPSB7fSxcbiAgICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICBvdGhlck5hbWUgPSBvdGhlck5hbWUgPyB1cHBlckNhc2VGaXJzdExldHRlcihvdGhlck5hbWUpIDogb3RoZXJOYW1lO1xuICAgICAgICBjb25zdCBtdXRhdGlvbk5hbWUgPSBhY3Rpb24gKyBvYmoxLl9fdHlwZW5hbWUgKyAob3RoZXJOYW1lIHx8IG9iajIuX190eXBlbmFtZSk7XG4gICAgICAgIGNvbnN0IHJldmVyc2VkTXV0YXRpb25OYW1lID0gYWN0aW9uICsgb2JqMi5fX3R5cGVuYW1lICsgKG90aGVyTmFtZSB8fCBvYmoxLl9fdHlwZW5hbWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmdldEFsbE11dGF0aW9uTmFtZXMoKS5waXBlKFxuICAgICAgICAgICAgbWFwKGFsbE11dGF0aW9uTmFtZXMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgYWxsTXV0YXRpb25OYW1lcy5maW5kKG11dCA9PiBtdXQubmFtZSA9PT0gbXV0YXRpb25OYW1lKSB8fFxuICAgICAgICAgICAgICAgICAgICBhbGxNdXRhdGlvbk5hbWVzLmZpbmQobXV0ID0+IG11dC5uYW1lID09PSByZXZlcnNlZE11dGF0aW9uTmFtZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAobXV0YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRUZW1wbGF0ZShtdXRhdGlvbiwgb2JqMSwgb2JqMiwgdmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ0FQSSBkb2VzIG5vdCBhbGxvdyB0byAnICsgYWN0aW9uICsgJyAnICsgb2JqMS5fX3R5cGVuYW1lICsgJyBhbmQgJyArIG9iajIuX190eXBlbmFtZSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlIG11dGF0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBleGVjdXRlKG11dGF0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEZldGNoUmVzdWx0PHtpZDogc3RyaW5nfT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvXG4gICAgICAgICAgICAubXV0YXRlPHtpZDogc3RyaW5nfT4oe1xuICAgICAgICAgICAgICAgIG11dGF0aW9uOiBncWwobXV0YXRpb24pLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcG9sbG8uY2xpZW50LnJlRmV0Y2hPYnNlcnZhYmxlUXVlcmllcygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGQgdGhlIGFjdHVhbCBtdXRhdGlvbiBzdHJpbmdcbiAgICAgKi9cbiAgICBwcml2YXRlIGJ1aWxkVGVtcGxhdGUoXG4gICAgICAgIG11dGF0aW9uOiBNdXRhdGlvbixcbiAgICAgICAgb2JqMTogTGlua2FibGVPYmplY3QsXG4gICAgICAgIG9iajI6IExpbmthYmxlT2JqZWN0LFxuICAgICAgICB2YXJpYWJsZXM6IExpdGVyYWwgPSB7fSxcbiAgICApOiBzdHJpbmcge1xuICAgICAgICBsZXQgbmFtZTE7XG4gICAgICAgIGxldCBuYW1lMjtcbiAgICAgICAgaWYgKG9iajEuX190eXBlbmFtZSA9PT0gbXV0YXRpb24uYXJnMS50eXBlKSB7XG4gICAgICAgICAgICBuYW1lMSA9IG11dGF0aW9uLmFyZzEubmFtZTtcbiAgICAgICAgICAgIG5hbWUyID0gbXV0YXRpb24uYXJnMi5uYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmFtZTEgPSBtdXRhdGlvbi5hcmcyLm5hbWU7XG4gICAgICAgICAgICBuYW1lMiA9IG11dGF0aW9uLmFyZzEubmFtZTtcbiAgICAgICAgfVxuICAgICAgICB2YXJpYWJsZXNbbmFtZTFdID0gb2JqMS5pZDtcbiAgICAgICAgdmFyaWFibGVzW25hbWUyXSA9IG9iajIuaWQ7XG5cbiAgICAgICAgbGV0IHNlcmlhbGl6ZWRWYXJpYWJsZXMgPSAnJztcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFyaWFibGVzKSkge1xuICAgICAgICAgICAgc2VyaWFsaXplZFZhcmlhYmxlcyArPSBrZXkgKyAnOiAnICsgSlNPTi5zdHJpbmdpZnkodmFyaWFibGVzW2tleV0pICsgJyAnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGBtdXRhdGlvbiBsaW5rQW5kVW5saW5rIHtcbiAgICAgICAgICAgICR7bXV0YXRpb24ubmFtZX0oJHtzZXJpYWxpemVkVmFyaWFibGVzfSkge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB9XG4gICAgICAgIH1gO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,113 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { clone } from 'lodash-es';
3
+ import { SESSION_STORAGE } from '../modules/common/services/memory-storage';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/router";
6
+ export class NaturalPersistenceService {
7
+ constructor(router, sessionStorage) {
8
+ this.router = router;
9
+ this.sessionStorage = sessionStorage;
10
+ }
11
+ /**
12
+ * Persist in url and local storage the given value with the given key.
13
+ * When stored in storage, we need more "key" to identify the controller.
14
+ */
15
+ persist(key, value, route, storageKey, navigationExtras) {
16
+ this.persistInStorage(key, value, storageKey);
17
+ return this.persistInUrl(key, value, route, navigationExtras);
18
+ }
19
+ /**
20
+ * Return object with persisted data in url or in session storage
21
+ * Url has priority over session storage because of url sharing. When url is provided, session storage is ignored.
22
+ * Url and storage are synced when arriving in a component :
23
+ * - When loading with url parameters, storage is updated to stay synced
24
+ * - When loading without url, but with storage data, the url is updated
25
+ */
26
+ get(key, route, storageKey) {
27
+ // From url
28
+ let params = this.getFromUrl(key, route);
29
+ if (!this.isFalseyValue(params)) {
30
+ this.persistInStorage(key, params, storageKey);
31
+ return params;
32
+ }
33
+ // From storage
34
+ params = this.getFromStorage(key, storageKey);
35
+ if (!this.isFalseyValue(params)) {
36
+ this.persistInUrl(key, params, route);
37
+ return params;
38
+ }
39
+ return null;
40
+ }
41
+ /**
42
+ * Get given key from the url parameters
43
+ */
44
+ getFromUrl(key, route) {
45
+ const value = route.snapshot.paramMap.get(key);
46
+ if (value) {
47
+ try {
48
+ return JSON.parse(value);
49
+ }
50
+ catch (e) { }
51
+ }
52
+ return null;
53
+ }
54
+ /**
55
+ * Add/override given pair key-value in the url
56
+ * Always JSON.stringify() the given value
57
+ * If the value is falsey, the pair key-value is removed from the url.
58
+ */
59
+ persistInUrl(key, value, route, navigationExtras) {
60
+ const params = clone(route.snapshot.url[route.snapshot.url.length - 1].parameters);
61
+ if (this.isFalseyValue(value)) {
62
+ delete params[key];
63
+ }
64
+ else {
65
+ params[key] = JSON.stringify(value);
66
+ }
67
+ navigationExtras = Object.assign(navigationExtras || {}, { relativeTo: route });
68
+ return this.router.navigate(['.', params], navigationExtras);
69
+ }
70
+ getFromStorage(key, storageKey) {
71
+ const value = this.sessionStorage.getItem(this.getStorageKey(key, storageKey));
72
+ if (value) {
73
+ try {
74
+ return JSON.parse(value);
75
+ }
76
+ catch (e) { }
77
+ }
78
+ return null;
79
+ }
80
+ /**
81
+ * Store value in session storage.
82
+ * If value is falsy, the entry is removed
83
+ */
84
+ persistInStorage(key, value, storageKey) {
85
+ if (this.isFalseyValue(value)) {
86
+ this.sessionStorage.removeItem(this.getStorageKey(key, storageKey));
87
+ }
88
+ else {
89
+ this.sessionStorage.setItem(this.getStorageKey(key, storageKey), JSON.stringify(value));
90
+ }
91
+ }
92
+ getStorageKey(key, storageKey) {
93
+ return storageKey + '-' + key;
94
+ }
95
+ // Returns if the given value is falsey
96
+ // Falsey values are : null, undefined and empty string.
97
+ // This cause usually the parameter to be removed from url/storage instead of being stored with no value. Url would be polluted.
98
+ isFalseyValue(value) {
99
+ return value == null || value === ''; // == means null or undefined;
100
+ }
101
+ }
102
+ NaturalPersistenceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NaturalPersistenceService, deps: [{ token: i1.Router }, { token: SESSION_STORAGE }], target: i0.ɵɵFactoryTarget.Injectable });
103
+ NaturalPersistenceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NaturalPersistenceService, providedIn: 'root' });
104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NaturalPersistenceService, decorators: [{
105
+ type: Injectable,
106
+ args: [{
107
+ providedIn: 'root',
108
+ }]
109
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: undefined, decorators: [{
110
+ type: Inject,
111
+ args: [SESSION_STORAGE]
112
+ }] }]; } });
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdGVuY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9wZXJzaXN0ZW5jZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFpQixlQUFlLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQzs7O0FBSzFGLE1BQU0sT0FBTyx5QkFBeUI7SUFDbEMsWUFDcUIsTUFBYyxFQUNXLGNBQThCO1FBRHZELFdBQU0sR0FBTixNQUFNLENBQVE7UUFDVyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDekUsQ0FBQztJQUVKOzs7T0FHRztJQUNJLE9BQU8sQ0FDVixHQUFXLEVBQ1gsS0FBVSxFQUNWLEtBQXFCLEVBQ3JCLFVBQWtCLEVBQ2xCLGdCQUFtQztRQUVuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFxQixFQUFFLFVBQWtCO1FBQzdELFdBQVc7UUFDWCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztZ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d0Q7SUFDeEQsZ0lBQWdJO0lBQ3hILGFBQWEsQ0FBQyxLQUFVO1FBQzVCLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsOEJBQThCO0lBQ3hFLENBQUM7O3NIQXRIUSx5QkFBeUIsd0NBR3RCLGVBQWU7MEhBSGxCLHlCQUF5QixjQUZ0QixNQUFNOzJGQUVULHlCQUF5QjtrQkFIckMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQUlRLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7Y2xvbmV9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge05hdHVyYWxTdG9yYWdlLCBTRVNTSU9OX1NUT1JBR0V9IGZyb20gJy4uL21vZHVsZXMvY29tbW9uL3NlcnZpY2VzL21lbW9yeS1zdG9yYWdlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFBlcnNpc3RlbmNlU2VydmljZSB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgICAgICBASW5qZWN0KFNFU1NJT05fU1RPUkFHRSkgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU3RvcmFnZTogTmF0dXJhbFN0b3JhZ2UsXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogUGVyc2lzdCBpbiB1cmwgYW5kIGxvY2FsIHN0b3JhZ2UgdGhlIGdpdmVuIHZhbHVlIHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICAgKiBXaGVuIHN0b3JlZCBpbiBzdG9yYWdlLCB3ZSBuZWVkIG1vcmUgXCJrZXlcIiB0byBpZGVudGlmeSB0aGUgY29udHJvbGxlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGVyc2lzdChcbiAgICAgICAga2V5OiBzdHJpbmcsXG4gICAgICAgIHZhbHVlOiBhbnksXG4gICAgICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgc3RvcmFnZUtleTogc3RyaW5nLFxuICAgICAgICBuYXZpZ2F0aW9uRXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcyxcbiAgICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgdGhpcy5wZXJzaXN0SW5TdG9yYWdlKGtleSwgdmFsdWUsIHN0b3JhZ2VLZXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5wZXJzaXN0SW5Vcmwoa2V5LCB2YWx1ZSwgcm91dGUsIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBvYmplY3Qgd2l0aCBwZXJzaXN0ZWQgZGF0YSBpbiB1cmwgb3IgaW4gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICogVXJsIGhhcyBwcmlvcml0eSBvdmVyIHNlc3Npb24gc3RvcmFnZSBiZWNhdXNlIG9mIHVybCBzaGFyaW5nLiBXaGVuIHVybCBpcyBwcm92aWRlZCwgc2Vzc2lvbiBzdG9yYWdlIGlzIGlnbm9yZWQuXG4gICAgICogVXJsIGFuZCBzdG9yYWdlIGFyZSBzeW5jZWQgd2hlbiBhcnJpdmluZyBpbiBhIGNvbXBvbmVudCA6XG4gICAgICogIC0gV2hlbiBsb2FkaW5nIHdpdGggdXJsIHBhcmFtZXRlcnMsIHN0b3JhZ2UgaXMgdXBkYXRlZCB0byBzdGF5IHN5bmNlZFxuICAgICAqICAtIFdoZW4gbG9hZGluZyB3aXRob3V0IHVybCwgYnV0IHdpdGggc3RvcmFnZSBkYXRhLCB0aGUgdXJsIGlzIHVwZGF0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nLCByb3V0ZTogQWN0aXZhdGVkUm91dGUsIHN0b3JhZ2VLZXk6IHN0cmluZyk6IGFueSB8IG51bGwge1xuICAgICAgICAvLyBGcm9tIHVybFxuICAgICAgICBsZXQgcGFyYW1zID0gdGhpcy5nZXRGcm9tVXJsKGtleSwgcm91dGUpO1xuICAgICAgICBpZiAoIXRoaXMuaXNGYWxzZXlWYWx1ZShwYXJhbXMpKSB7XG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RJblN0b3JhZ2Uoa2V5LCBwYXJhbXMsIHN0b3JhZ2VLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZyb20gc3RvcmFnZVxuICAgICAgICBwYXJhbXMgPSB0aGlzLmdldEZyb21TdG9yYWdlKGtleSwgc3RvcmFnZUtleSk7XG4gICAgICAgIGlmICghdGhpcy5pc0ZhbHNleVZhbHVlKHBhcmFtcykpIHtcbiAgICAgICAgICAgIHRoaXMucGVyc2lzdEluVXJsKGtleSwgcGFyYW1zLCByb3V0ZSk7XG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGdpdmVuIGtleSBmcm9tIHRoZSB1cmwgcGFyYW1ldGVyc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRGcm9tVXJsKGtleTogc3RyaW5nLCByb3V0ZTogQWN0aXZhdGVkUm91dGUpOiBhbnkgfCBudWxsIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoa2V5KTtcblxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZC9vdmVycmlkZSBnaXZlbiBwYWlyIGtleS12YWx1ZSBpbiB0aGUgdXJsXG4gICAgICogQWx3YXlzIEpTT04uc3RyaW5naWZ5KCkgdGhlIGdpdmVuIHZhbHVlXG4gICAgICogSWYgdGhlIHZhbHVlIGlzIGZhbHNleSwgdGhlIHBhaXIga2V5LXZhbHVlIGlzIHJlbW92ZWQgZnJvbSB0aGUgdXJsLlxuICAgICAqL1xuICAgIHB1YmxpYyBwZXJzaXN0SW5VcmwoXG4gICAgICAgIGtleTogc3RyaW5nLFxuICAgICAgICB2YWx1ZTogYW55LFxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzLFxuICAgICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBjbG9uZShyb3V0ZS5zbmFwc2hvdC51cmxbcm91dGUuc25hcHNob3QudXJsLmxlbmd0aCAtIDFdLnBhcmFtZXRlcnMpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRmFsc2V5VmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICBkZWxldGUgcGFyYW1zW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJhbXNba2V5XSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXMgPSBPYmplY3QuYXNzaWduKG5hdmlnYXRpb25FeHRyYXMgfHwge30sIHtyZWxhdGl2ZVRvOiByb3V0ZX0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nLCBwYXJhbXNdLCBuYXZpZ2F0aW9uRXh0cmFzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RnJvbVN0b3JhZ2Uoa2V5OiBzdHJpbmcsIHN0b3JhZ2VLZXk6IHN0cmluZyk6IGFueSB8IG51bGwge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoa2V5LCBzdG9yYWdlS2V5KSk7XG5cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZSB2YWx1ZSBpbiBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogSWYgdmFsdWUgaXMgZmFsc3ksIHRoZSBlbnRyeSBpcyByZW1vdmVkXG4gICAgICovXG4gICAgcHVibGljIHBlcnNpc3RJblN0b3JhZ2Uoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHN0b3JhZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0ZhbHNleVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuZ2V0U3RvcmFnZUtleShrZXksIHN0b3JhZ2VLZXkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoa2V5LCBzdG9yYWdlS2V5KSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3RvcmFnZUtleShrZXk6IHN0cmluZywgc3RvcmFnZUtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHN0b3JhZ2VLZXkgKyAnLScgKyBrZXk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgZmFsc2V5XG4gICAgLy8gRmFsc2V5IHZhbHVlcyBhcmUgOiBudWxsLCB1bmRlZmluZWQgYW5kIGVtcHR5IHN0cmluZy5cbiAgICAvLyBUaGlzIGNhdXNlIHVzdWFsbHkgdGhlIHBhcmFtZXRlciB0byBiZSByZW1vdmVkIGZyb20gdXJsL3N0b3JhZ2UgaW5zdGVhZCBvZiBiZWluZyBzdG9yZWQgd2l0aCBubyB2YWx1ZS4gVXJsIHdvdWxkIGJlIHBvbGx1dGVkLlxuICAgIHByaXZhdGUgaXNGYWxzZXlWYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJzsgLy8gPT0gbWVhbnMgbnVsbCBvciB1bmRlZmluZWQ7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,55 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { NativeDateAdapter } from '@angular/material/core';
3
+ import * as i0 from "@angular/core";
4
+ export class NaturalSwissParsingDateAdapter extends NativeDateAdapter {
5
+ /**
6
+ * Parse commonly accepted swiss format, such as:
7
+ *
8
+ * - 24.12.2018
9
+ * - 1.4.18
10
+ * - 2018-12-24
11
+ */
12
+ parse(value) {
13
+ if (typeof value === 'number') {
14
+ return new Date(value);
15
+ }
16
+ if (typeof value === 'string') {
17
+ let m = value.match(/(\d{1,2})\.(\d{1,2})\.(\d{4}|\d{2})/);
18
+ if (m) {
19
+ let year = +m[3];
20
+ // Assume year 2000 if only two digits
21
+ if (year < 100) {
22
+ year += 2000;
23
+ }
24
+ return this.createDateIfValid(year, +m[2], +m[1]);
25
+ }
26
+ // Attempt strict ISO format
27
+ m = value.match(/(\d{4})-(\d{2})-(\d{2})/);
28
+ if (m) {
29
+ return this.createDateIfValid(+m[1], +m[2], +m[3]);
30
+ }
31
+ }
32
+ return null;
33
+ }
34
+ createDateIfValid(year, month, date) {
35
+ month = month - 1;
36
+ if (month >= 0 && month <= 11 && date >= 1 && date <= 31) {
37
+ return this.createDate(year, month, date);
38
+ }
39
+ return null;
40
+ }
41
+ getFirstDayOfWeek() {
42
+ // Always starts on Monday, even though it is not true for Canada, U.S., Mexico and many more
43
+ // Also see https://github.com/tc39/ecma402/issues/6
44
+ return 1;
45
+ }
46
+ }
47
+ NaturalSwissParsingDateAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NaturalSwissParsingDateAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
48
+ NaturalSwissParsingDateAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NaturalSwissParsingDateAdapter, providedIn: 'root' });
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NaturalSwissParsingDateAdapter, decorators: [{
50
+ type: Injectable,
51
+ args: [{
52
+ providedIn: 'root',
53
+ }]
54
+ }] });
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpc3MtcGFyc2luZy1kYXRlLWFkYXB0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9zd2lzcy1wYXJzaW5nLWRhdGUtYWRhcHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7O0FBS3pELE1BQU0sT0FBTyw4QkFBK0IsU0FBUSxpQkFBaUI7SUFDakU7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLEtBQWM7UUFDdkIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDM0IsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQjtRQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzNCLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsRUFBRTtnQkFDSCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFakIsc0NBQXNDO2dCQUN0QyxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUU7b0JBQ1osSUFBSSxJQUFJLElBQUksQ0FBQztpQkFDaEI7Z0JBRUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckQ7WUFFRCw0QkFBNEI7WUFDNUIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsRUFBRTtnQkFDSCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3REO1NBQ0o7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8saUJBQWlCLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxJQUFZO1FBQy9ELEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTtZQUN0RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM3QztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxpQkFBaUI7UUFDcEIsNkZBQTZGO1FBQzdGLG9EQUFvRDtRQUNwRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7OzJIQWpEUSw4QkFBOEI7K0hBQTlCLDhCQUE4QixjQUYzQixNQUFNOzJGQUVULDhCQUE4QjtrQkFIMUMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXRpdmVEYXRlQWRhcHRlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxTd2lzc1BhcnNpbmdEYXRlQWRhcHRlciBleHRlbmRzIE5hdGl2ZURhdGVBZGFwdGVyIHtcbiAgICAvKipcbiAgICAgKiBQYXJzZSBjb21tb25seSBhY2NlcHRlZCBzd2lzcyBmb3JtYXQsIHN1Y2ggYXM6XG4gICAgICpcbiAgICAgKiAtIDI0LjEyLjIwMThcbiAgICAgKiAtIDEuNC4xOFxuICAgICAqIC0gMjAxOC0xMi0yNFxuICAgICAqL1xuICAgIHB1YmxpYyBwYXJzZSh2YWx1ZTogdW5rbm93bik6IERhdGUgfCBudWxsIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbGV0IG0gPSB2YWx1ZS5tYXRjaCgvKFxcZHsxLDJ9KVxcLihcXGR7MSwyfSlcXC4oXFxkezR9fFxcZHsyfSkvKTtcbiAgICAgICAgICAgIGlmIChtKSB7XG4gICAgICAgICAgICAgICAgbGV0IHllYXIgPSArbVszXTtcblxuICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB5ZWFyIDIwMDAgaWYgb25seSB0d28gZGlnaXRzXG4gICAgICAgICAgICAgICAgaWYgKHllYXIgPCAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgeWVhciArPSAyMDAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZURhdGVJZlZhbGlkKHllYXIsICttWzJdLCArbVsxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEF0dGVtcHQgc3RyaWN0IElTTyBmb3JtYXRcbiAgICAgICAgICAgIG0gPSB2YWx1ZS5tYXRjaCgvKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSkvKTtcbiAgICAgICAgICAgIGlmIChtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRGF0ZUlmVmFsaWQoK21bMV0sICttWzJdLCArbVszXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZURhdGVJZlZhbGlkKHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF0ZTogbnVtYmVyKTogRGF0ZSB8IG51bGwge1xuICAgICAgICBtb250aCA9IG1vbnRoIC0gMTtcbiAgICAgICAgaWYgKG1vbnRoID49IDAgJiYgbW9udGggPD0gMTEgJiYgZGF0ZSA+PSAxICYmIGRhdGUgPD0gMzEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZURhdGUoeWVhciwgbW9udGgsIGRhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpcnN0RGF5T2ZXZWVrKCk6IG51bWJlciB7XG4gICAgICAgIC8vIEFsd2F5cyBzdGFydHMgb24gTW9uZGF5LCBldmVuIHRob3VnaCBpdCBpcyBub3QgdHJ1ZSBmb3IgQ2FuYWRhLCBVLlMuLCBNZXhpY28gYW5kIG1hbnkgbW9yZVxuICAgICAgICAvLyBBbHNvIHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9lY21hNDAyL2lzc3Vlcy82XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbn1cbiJdfQ==