@eo-sdk/client 10.0.0-beta.4 → 10.0.0-rc.1

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 (314) hide show
  1. package/app/eo-client/about-state/about-state.component.d.ts +0 -5
  2. package/app/eo-client/about-state/about-state.component.d.ts.map +1 -1
  3. package/app/eo-client/dashboard/dashboard.component.d.ts +25 -33
  4. package/app/eo-client/dashboard/dashboard.component.d.ts.map +1 -1
  5. package/app/eo-client/dashboard/widgets/iframe-widget/iframe-setup/iframe-setup.component.d.ts +19 -0
  6. package/app/eo-client/dashboard/widgets/iframe-widget/iframe-setup/iframe-setup.component.d.ts.map +1 -0
  7. package/app/eo-client/dashboard/widgets/iframe-widget/iframe-widget.component.d.ts +24 -0
  8. package/app/eo-client/dashboard/widgets/iframe-widget/iframe-widget.component.d.ts.map +1 -0
  9. package/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-setup/info-inbox-setup.component.d.ts +20 -0
  10. package/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-setup/info-inbox-setup.component.d.ts.map +1 -0
  11. package/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-widget.component.d.ts +19 -0
  12. package/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-widget.component.d.ts.map +1 -0
  13. package/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox.model.d.ts +4 -0
  14. package/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox.model.d.ts.map +1 -0
  15. package/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-setup/info-intray-setup.component.d.ts +25 -0
  16. package/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-setup/info-intray-setup.component.d.ts.map +1 -0
  17. package/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-widget.component.d.ts +20 -0
  18. package/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-widget.component.d.ts.map +1 -0
  19. package/app/eo-client/dashboard/widgets/info-intray-widget/info-intray.model.d.ts +4 -0
  20. package/app/eo-client/dashboard/widgets/info-intray-widget/info-intray.model.d.ts.map +1 -0
  21. package/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.d.ts +28 -0
  22. package/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.d.ts.map +1 -0
  23. package/app/eo-client/dashboard/widgets/search-widget/search-widget.component.d.ts +44 -0
  24. package/app/eo-client/dashboard/widgets/search-widget/search-widget.component.d.ts.map +1 -0
  25. package/app/eo-client/eo-client.module.d.ts +24 -13
  26. package/app/eo-client/eo-client.module.d.ts.map +1 -1
  27. package/app/eo-client/favorite-state/favorite-state.component.d.ts +7 -8
  28. package/app/eo-client/favorite-state/favorite-state.component.d.ts.map +1 -1
  29. package/app/eo-client/inbox-state/inbox-state/inbox-state.component.d.ts +8 -10
  30. package/app/eo-client/inbox-state/inbox-state/inbox-state.component.d.ts.map +1 -1
  31. package/app/eo-client/login/login.component.d.ts +12 -5
  32. package/app/eo-client/login/login.component.d.ts.map +1 -1
  33. package/app/eo-client/notifications-state/notifications-state.component.d.ts +9 -11
  34. package/app/eo-client/notifications-state/notifications-state.component.d.ts.map +1 -1
  35. package/app/eo-client/object-state/object-state/object-state.component.d.ts +10 -11
  36. package/app/eo-client/object-state/object-state/object-state.component.d.ts.map +1 -1
  37. package/app/eo-client/prepare-state/prepare-state/prepare-state.component.d.ts +8 -9
  38. package/app/eo-client/prepare-state/prepare-state/prepare-state.component.d.ts.map +1 -1
  39. package/app/eo-client/process-state/process-state.component.d.ts +8 -10
  40. package/app/eo-client/process-state/process-state.component.d.ts.map +1 -1
  41. package/app/eo-client/recyclebin-state/recyclebin-state.component.d.ts +5 -6
  42. package/app/eo-client/recyclebin-state/recyclebin-state.component.d.ts.map +1 -1
  43. package/app/eo-client/result-state/result-state.component.d.ts +3 -5
  44. package/app/eo-client/result-state/result-state.component.d.ts.map +1 -1
  45. package/app/eo-client/settings/settings.component.d.ts +6 -7
  46. package/app/eo-client/settings/settings.component.d.ts.map +1 -1
  47. package/app/eo-client/stored-queries-state/stored-queries-state.component.d.ts +8 -10
  48. package/app/eo-client/stored-queries-state/stored-queries-state.component.d.ts.map +1 -1
  49. package/app/eo-client/version-state/version-state.component.d.ts +5 -7
  50. package/app/eo-client/version-state/version-state.component.d.ts.map +1 -1
  51. package/app/eo-framework/accordion/accordion.module.d.ts +1 -2
  52. package/app/eo-framework/accordion/accordion.module.d.ts.map +1 -1
  53. package/app/eo-framework/actions/action-menu/action-menu.component.d.ts +4 -5
  54. package/app/eo-framework/actions/action-menu/action-menu.component.d.ts.map +1 -1
  55. package/app/eo-framework/actions/action.module.d.ts +11 -10
  56. package/app/eo-framework/actions/action.module.d.ts.map +1 -1
  57. package/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission/add-resubmission.component.d.ts +3 -2
  58. package/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission/add-resubmission.component.d.ts.map +1 -1
  59. package/app/eo-framework/actions/actions/share-object-action/share-object/share-object.component.d.ts +9 -13
  60. package/app/eo-framework/actions/actions/share-object-action/share-object/share-object.component.d.ts.map +1 -1
  61. package/app/eo-framework/app-shell/app-bar/app-bar.component.d.ts +3 -4
  62. package/app/eo-framework/app-shell/app-bar/app-bar.component.d.ts.map +1 -1
  63. package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts.map +1 -1
  64. package/app/eo-framework/app-shell/app-bar/side-bar/side-bar.component.d.ts +1 -2
  65. package/app/eo-framework/app-shell/app-bar/side-bar/side-bar.component.d.ts.map +1 -1
  66. package/app/eo-framework/app-shell/app-shell.module.d.ts +18 -20
  67. package/app/eo-framework/app-shell/app-shell.module.d.ts.map +1 -1
  68. package/app/eo-framework/app-shell/index.d.ts +0 -1
  69. package/app/eo-framework/app-shell/index.d.ts.map +1 -1
  70. package/app/eo-framework/eo-framework.module.d.ts +37 -38
  71. package/app/eo-framework/eo-framework.module.d.ts.map +1 -1
  72. package/app/eo-framework/form-elements/date/date.component.d.ts +0 -2
  73. package/app/eo-framework/form-elements/date/date.component.d.ts.map +1 -1
  74. package/app/eo-framework/form-elements/form-elements.module.d.ts +9 -18
  75. package/app/eo-framework/form-elements/form-elements.module.d.ts.map +1 -1
  76. package/app/eo-framework/form-elements/id-reference/reference-finder/reference-finder.component.d.ts +1 -0
  77. package/app/eo-framework/form-elements/id-reference/reference-finder/reference-finder.component.d.ts.map +1 -1
  78. package/app/eo-framework/grid/filters/datetime-filter.component.d.ts +0 -2
  79. package/app/eo-framework/grid/filters/datetime-filter.component.d.ts.map +1 -1
  80. package/app/eo-framework/grid/grid.component.d.ts +7 -8
  81. package/app/eo-framework/grid/grid.component.d.ts.map +1 -1
  82. package/app/eo-framework/grid/grid.module.d.ts +7 -8
  83. package/app/eo-framework/grid/grid.module.d.ts.map +1 -1
  84. package/app/eo-framework/inbox-details/inbox-details.component.d.ts +1 -2
  85. package/app/eo-framework/inbox-details/inbox-details.component.d.ts.map +1 -1
  86. package/app/eo-framework/index.d.ts +0 -4
  87. package/app/eo-framework/index.d.ts.map +1 -1
  88. package/app/eo-framework/media/media.component.d.ts +4 -3
  89. package/app/eo-framework/media/media.component.d.ts.map +1 -1
  90. package/app/eo-framework/object-details/favorite-icon/favorite-icon.component.d.ts +2 -3
  91. package/app/eo-framework/object-details/favorite-icon/favorite-icon.component.d.ts.map +1 -1
  92. package/app/eo-framework/object-details/object-details.component.d.ts +14 -6
  93. package/app/eo-framework/object-details/object-details.component.d.ts.map +1 -1
  94. package/app/eo-framework/object-details/object-details.module.d.ts +2 -1
  95. package/app/eo-framework/object-details/object-details.module.d.ts.map +1 -1
  96. package/app/eo-framework/object-details/object-history/object-history.component.d.ts +2 -3
  97. package/app/eo-framework/object-details/object-history/object-history.component.d.ts.map +1 -1
  98. package/app/eo-framework/object-form/object-form/form-element/form-element-template.directive.d.ts +10 -0
  99. package/app/eo-framework/object-form/object-form/form-element/form-element-template.directive.d.ts.map +1 -0
  100. package/app/eo-framework/object-form/object-form/form-element/form-element.component.d.ts +8 -3
  101. package/app/eo-framework/object-form/object-form/form-element/form-element.component.d.ts.map +1 -1
  102. package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts +1 -2
  103. package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts.map +1 -1
  104. package/app/eo-framework/object-form/object-form/form-element-table/form-element.interface.d.ts +7 -2
  105. package/app/eo-framework/object-form/object-form/form-element-table/form-element.interface.d.ts.map +1 -1
  106. package/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.d.ts +28 -11
  107. package/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.d.ts.map +1 -1
  108. package/app/eo-framework/object-form/object-form/object-form-script/object-form-script.service.d.ts.map +1 -1
  109. package/app/eo-framework/object-form/object-form/object-form.component.d.ts +1 -2
  110. package/app/eo-framework/object-form/object-form/object-form.component.d.ts.map +1 -1
  111. package/app/eo-framework/object-form/object-form-helper.service.d.ts.map +1 -1
  112. package/app/eo-framework/object-form/object-form.module.d.ts +9 -9
  113. package/app/eo-framework/object-state-details/object-state-details.component.d.ts +1 -2
  114. package/app/eo-framework/object-state-details/object-state-details.component.d.ts.map +1 -1
  115. package/app/eo-framework/prepare-details/prepare-details.component.d.ts +8 -9
  116. package/app/eo-framework/prepare-details/prepare-details.component.d.ts.map +1 -1
  117. package/app/eo-framework/process/details/process-details.component.d.ts +7 -8
  118. package/app/eo-framework/process/details/process-details.component.d.ts.map +1 -1
  119. package/app/eo-framework/recyclebin-details/recyclebin-details.component.d.ts +9 -11
  120. package/app/eo-framework/recyclebin-details/recyclebin-details.component.d.ts.map +1 -1
  121. package/app/eo-framework/result-list/result-list.component.d.ts +5 -6
  122. package/app/eo-framework/result-list/result-list.component.d.ts.map +1 -1
  123. package/app/eo-framework/settings/settings.module.d.ts +3 -4
  124. package/app/eo-framework/settings/settings.module.d.ts.map +1 -1
  125. package/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.d.ts +4 -5
  126. package/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.d.ts.map +1 -1
  127. package/app/eo-framework/ui/eo-dialog/eo-dialog.component.d.ts +2 -3
  128. package/app/eo-framework/ui/eo-dialog/eo-dialog.component.d.ts.map +1 -1
  129. package/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.d.ts +1 -0
  130. package/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.d.ts.map +1 -1
  131. package/app/eo-framework/ui/outside-click/outside-click.directive.d.ts +1 -2
  132. package/app/eo-framework/ui/outside-click/outside-click.directive.d.ts.map +1 -1
  133. package/app/eo-framework/ui/signature-tab/signature-tab.component.d.ts +0 -1
  134. package/app/eo-framework/ui/signature-tab/signature-tab.component.d.ts.map +1 -1
  135. package/app/eo-framework/util/index.d.ts +0 -1
  136. package/app/eo-framework/util/index.d.ts.map +1 -1
  137. package/app/eo-framework/util/util.module.d.ts +0 -1
  138. package/app/eo-framework/util/util.module.d.ts.map +1 -1
  139. package/app/eo-framework-core/layout/layout.service.d.ts +2 -26
  140. package/app/eo-framework-core/layout/layout.service.d.ts.map +1 -1
  141. package/app/eo-framework-core/pipes/locale-number.pipe.d.ts +2 -3
  142. package/app/eo-framework-core/pipes/locale-number.pipe.d.ts.map +1 -1
  143. package/assets/_default/i18n/de.json +32 -2
  144. package/assets/_default/i18n/en.json +37 -7
  145. package/assets/_default/svg/ic_add_document_file_as_new_version.svg +1 -0
  146. package/assets/_default/svg/ic_create_document.svg +1 -0
  147. package/assets/_default/svg/ic_create_document_in_folder.svg +1 -0
  148. package/assets/_default/svg/ic_noUrl.svg +1 -0
  149. package/assets/dashboard.json +47 -0
  150. package/esm2020/app/eo-client/about-state/about-state.component.mjs +5 -11
  151. package/esm2020/app/eo-client/dashboard/dashboard.component.mjs +143 -98
  152. package/esm2020/app/eo-client/dashboard/widgets/iframe-widget/iframe-setup/iframe-setup.component.mjs +59 -0
  153. package/esm2020/app/eo-client/dashboard/widgets/iframe-widget/iframe-widget.component.mjs +39 -0
  154. package/esm2020/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-setup/info-inbox-setup.component.mjs +53 -0
  155. package/esm2020/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-widget.component.mjs +42 -0
  156. package/esm2020/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox.model.mjs +2 -0
  157. package/esm2020/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-setup/info-intray-setup.component.mjs +65 -0
  158. package/esm2020/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-widget.component.mjs +43 -0
  159. package/esm2020/app/eo-client/dashboard/widgets/info-intray-widget/info-intray.model.mjs +2 -0
  160. package/esm2020/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.mjs +117 -0
  161. package/esm2020/app/eo-client/dashboard/widgets/search-widget/search-widget.component.mjs +115 -0
  162. package/esm2020/app/eo-client/eo-client.module.mjs +44 -6
  163. package/esm2020/app/eo-client/favorite-state/favorite-state.component.mjs +15 -14
  164. package/esm2020/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +14 -11
  165. package/esm2020/app/eo-client/login/login.component.mjs +33 -13
  166. package/esm2020/app/eo-client/notifications-state/notifications-state.component.mjs +16 -12
  167. package/esm2020/app/eo-client/object-state/object-state/object-state.component.mjs +27 -23
  168. package/esm2020/app/eo-client/prepare-state/prepare-state/prepare-state.component.mjs +12 -9
  169. package/esm2020/app/eo-client/process-state/process-state.component.mjs +6 -9
  170. package/esm2020/app/eo-client/recyclebin-state/recyclebin-state.component.mjs +14 -11
  171. package/esm2020/app/eo-client/result-state/result-state.component.mjs +11 -8
  172. package/esm2020/app/eo-client/settings/settings.component.mjs +16 -12
  173. package/esm2020/app/eo-client/stored-queries-state/stored-queries-state.component.mjs +16 -13
  174. package/esm2020/app/eo-client/version-state/version-state.component.mjs +13 -10
  175. package/esm2020/app/eo-framework/accordion/accordion.module.mjs +3 -7
  176. package/esm2020/app/eo-framework/accordion/simple-accordion/simple-accordion.component.mjs +3 -3
  177. package/esm2020/app/eo-framework/actions/action-menu/action-menu.component.mjs +15 -11
  178. package/esm2020/app/eo-framework/actions/action.module.mjs +5 -2
  179. package/esm2020/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission/add-resubmission.component.mjs +5 -7
  180. package/esm2020/app/eo-framework/actions/actions/add-subscription-action/add-subscription/add-subscription.component.mjs +3 -3
  181. package/esm2020/app/eo-framework/actions/actions/custom-actions/custom-actions.component.mjs +2 -2
  182. package/esm2020/app/eo-framework/actions/actions/share-object-action/share-object/share-object.component.mjs +43 -48
  183. package/esm2020/app/eo-framework/actions/actions/signature-action/signature/signature.component.mjs +2 -2
  184. package/esm2020/app/eo-framework/actions/actions/workflow-action/workflow/workflow.component.mjs +2 -2
  185. package/esm2020/app/eo-framework/app-shell/app-bar/app-bar.component.mjs +16 -14
  186. package/esm2020/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +8 -3
  187. package/esm2020/app/eo-framework/app-shell/app-bar/side-bar/side-bar.component.mjs +4 -6
  188. package/esm2020/app/eo-framework/app-shell/app-shell.module.mjs +1 -8
  189. package/esm2020/app/eo-framework/app-shell/index.mjs +1 -2
  190. package/esm2020/app/eo-framework/eo-framework.module.mjs +35 -43
  191. package/esm2020/app/eo-framework/form-elements/date/date.component.mjs +2 -12
  192. package/esm2020/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +3 -3
  193. package/esm2020/app/eo-framework/form-elements/form-elements.module.mjs +28 -37
  194. package/esm2020/app/eo-framework/form-elements/form-input/form-input.component.mjs +3 -3
  195. package/esm2020/app/eo-framework/form-elements/id-reference/reference-finder/reference-finder.component.mjs +10 -6
  196. package/esm2020/app/eo-framework/form-elements/organization/organization.component.mjs +3 -3
  197. package/esm2020/app/eo-framework/form-elements/reference/reference.component.mjs +5 -6
  198. package/esm2020/app/eo-framework/form-elements/string/string.component.mjs +2 -2
  199. package/esm2020/app/eo-framework/frame/frame.component.mjs +2 -2
  200. package/esm2020/app/eo-framework/grid/filters/datetime-filter.component.mjs +2 -6
  201. package/esm2020/app/eo-framework/grid/filters/dynamic-list-filter.component.mjs +3 -3
  202. package/esm2020/app/eo-framework/grid/filters/organization-filter.component.mjs +3 -3
  203. package/esm2020/app/eo-framework/grid/grid.component.mjs +16 -12
  204. package/esm2020/app/eo-framework/grid/grid.module.mjs +1 -5
  205. package/esm2020/app/eo-framework/inbox-details/inbox-details.component.mjs +16 -11
  206. package/esm2020/app/eo-framework/index.mjs +1 -5
  207. package/esm2020/app/eo-framework/media/media.component.mjs +31 -12
  208. package/esm2020/app/eo-framework/object-details/favorite-icon/favorite-icon.component.mjs +13 -10
  209. package/esm2020/app/eo-framework/object-details/object-details.component.mjs +64 -38
  210. package/esm2020/app/eo-framework/object-details/object-details.module.mjs +7 -3
  211. package/esm2020/app/eo-framework/object-details/object-history/object-history.component.mjs +13 -9
  212. package/esm2020/app/eo-framework/object-form/object-form/form-element/form-element-template.directive.mjs +18 -0
  213. package/esm2020/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +20 -6
  214. package/esm2020/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +21 -22
  215. package/esm2020/app/eo-framework/object-form/object-form/form-element-table/form-element.interface.mjs +1 -1
  216. package/esm2020/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.mjs +94 -32
  217. package/esm2020/app/eo-framework/object-form/object-form/object-form-group/object-form-group.component.mjs +6 -4
  218. package/esm2020/app/eo-framework/object-form/object-form/object-form-script/object-form-script.service.mjs +2 -3
  219. package/esm2020/app/eo-framework/object-form/object-form/object-form.component.mjs +3 -5
  220. package/esm2020/app/eo-framework/object-form/object-form-helper.service.mjs +2 -2
  221. package/esm2020/app/eo-framework/object-form/object-form.module.mjs +9 -10
  222. package/esm2020/app/eo-framework/object-state-details/object-state-details.component.mjs +15 -13
  223. package/esm2020/app/eo-framework/prepare-details/prepare-details.component.mjs +16 -14
  224. package/esm2020/app/eo-framework/process/details/process-details.component.mjs +16 -12
  225. package/esm2020/app/eo-framework/process-form/process-form.component.mjs +2 -2
  226. package/esm2020/app/eo-framework/recyclebin-details/recyclebin-details.component.mjs +25 -17
  227. package/esm2020/app/eo-framework/result-list/result-list.component.mjs +21 -15
  228. package/esm2020/app/eo-framework/settings/settings.module.mjs +1 -5
  229. package/esm2020/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.mjs +17 -13
  230. package/esm2020/app/eo-framework/ui/eo-dialog/eo-dialog.component.mjs +12 -8
  231. package/esm2020/app/eo-framework/ui/eo-icon/eo-icon.component.mjs +2 -2
  232. package/esm2020/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.mjs +20 -12
  233. package/esm2020/app/eo-framework/ui/outside-click/outside-click.directive.mjs +11 -8
  234. package/esm2020/app/eo-framework/ui/signature-tab/signature-tab.component.mjs +3 -6
  235. package/esm2020/app/eo-framework/upload-overlay/upload-overlay.component.mjs +3 -3
  236. package/esm2020/app/eo-framework/util/index.mjs +1 -2
  237. package/esm2020/app/eo-framework/util/util.module.mjs +2 -3
  238. package/esm2020/app/eo-framework-core/layout/layout.service.mjs +61 -63
  239. package/esm2020/app/eo-framework-core/pipes/locale-number.pipe.mjs +11 -8
  240. package/esm2020/projects/eo-sdk/core/lib/eo-core.module.mjs +8 -8
  241. package/esm2020/projects/eo-sdk/core/lib/model/inbox-item.model.mjs +2 -6
  242. package/esm2020/projects/eo-sdk/core/lib/service/auth/auth.service.mjs +24 -30
  243. package/esm2020/projects/eo-sdk/core/lib/service/capabilities/capabilities.model.mjs +1 -1
  244. package/esm2020/projects/eo-sdk/core/lib/service/capabilities/capabilities.service.mjs +8 -6
  245. package/esm2020/projects/eo-sdk/core/lib/service/config/config.service.mjs +1 -1
  246. package/esm2020/projects/eo-sdk/core/lib/service/dms/dms.service.mjs +14 -16
  247. package/esm2020/projects/eo-sdk/core/lib/service/prepare/prepare.service.mjs +15 -12
  248. package/esm2020/projects/eo-sdk/core/lib/service/signing/signing.service.mjs +12 -6
  249. package/esm2020/projects/eo-sdk/core/lib/service/system/system.service.mjs +2 -6
  250. package/esm2020/projects/eo-sdk/core/lib/service/user/user.service.mjs +11 -1
  251. package/esm2020/projects/eo-sdk/core/lib/util/utils.mjs +3 -3
  252. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs +1069 -1066
  253. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs.map +1 -1
  254. package/fesm2015/eo-sdk-client.mjs +14808 -15012
  255. package/fesm2015/eo-sdk-client.mjs.map +1 -1
  256. package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs +1069 -1066
  257. package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs.map +1 -1
  258. package/fesm2020/eo-sdk-client.mjs +16587 -16787
  259. package/fesm2020/eo-sdk-client.mjs.map +1 -1
  260. package/package.json +5 -5
  261. package/projects/eo-sdk/core/lib/eo-core.module.d.ts.map +1 -1
  262. package/projects/eo-sdk/core/lib/model/inbox-item.model.d.ts.map +1 -1
  263. package/projects/eo-sdk/core/lib/service/auth/auth.service.d.ts +14 -20
  264. package/projects/eo-sdk/core/lib/service/auth/auth.service.d.ts.map +1 -1
  265. package/projects/eo-sdk/core/lib/service/capabilities/capabilities.model.d.ts +4 -0
  266. package/projects/eo-sdk/core/lib/service/capabilities/capabilities.model.d.ts.map +1 -1
  267. package/projects/eo-sdk/core/lib/service/capabilities/capabilities.service.d.ts +3 -1
  268. package/projects/eo-sdk/core/lib/service/capabilities/capabilities.service.d.ts.map +1 -1
  269. package/projects/eo-sdk/core/lib/service/config/config.service.d.ts.map +1 -1
  270. package/projects/eo-sdk/core/lib/service/dms/dms.service.d.ts +10 -8
  271. package/projects/eo-sdk/core/lib/service/dms/dms.service.d.ts.map +1 -1
  272. package/projects/eo-sdk/core/lib/service/prepare/prepare.service.d.ts +1 -0
  273. package/projects/eo-sdk/core/lib/service/prepare/prepare.service.d.ts.map +1 -1
  274. package/projects/eo-sdk/core/lib/service/signing/signing.service.d.ts +4 -1
  275. package/projects/eo-sdk/core/lib/service/signing/signing.service.d.ts.map +1 -1
  276. package/projects/eo-sdk/core/lib/service/system/system.service.d.ts.map +1 -1
  277. package/projects/eo-sdk/core/lib/service/user/user.service.d.ts +6 -0
  278. package/projects/eo-sdk/core/lib/service/user/user.service.d.ts.map +1 -1
  279. package/projects/eo-sdk/core/lib/util/utils.d.ts +3 -4
  280. package/projects/eo-sdk/core/lib/util/utils.d.ts.map +1 -1
  281. package/scss/_eo-variables.scss +1 -0
  282. package/scss/_main.scss +1 -1
  283. package/scss/_mixins.scss +6 -6
  284. package/styles.css +2 -1
  285. package/app/eo-framework/app-shell/app-bar/app-layout/app-layout.component.d.ts +0 -24
  286. package/app/eo-framework/app-shell/app-bar/app-layout/app-layout.component.d.ts.map +0 -1
  287. package/app/eo-framework/split/index.d.ts +0 -5
  288. package/app/eo-framework/split/index.d.ts.map +0 -1
  289. package/app/eo-framework/split/split/split.component.d.ts +0 -83
  290. package/app/eo-framework/split/split/split.component.d.ts.map +0 -1
  291. package/app/eo-framework/split/split-area/split-area.component.d.ts +0 -37
  292. package/app/eo-framework/split/split-area/split-area.component.d.ts.map +0 -1
  293. package/app/eo-framework/split/split-gutter/split-gutter.directive.d.ts +0 -21
  294. package/app/eo-framework/split/split-gutter/split-gutter.directive.d.ts.map +0 -1
  295. package/app/eo-framework/split/split.module.d.ts +0 -12
  296. package/app/eo-framework/split/split.module.d.ts.map +0 -1
  297. package/app/eo-framework/undock-split/undock-split.component.d.ts +0 -28
  298. package/app/eo-framework/undock-split/undock-split.component.d.ts.map +0 -1
  299. package/app/eo-framework/undock-split/undock-split.service.d.ts +0 -43
  300. package/app/eo-framework/undock-split/undock-split.service.d.ts.map +0 -1
  301. package/app/eo-framework/undock-split/undock-state.interface.d.ts +0 -6
  302. package/app/eo-framework/undock-split/undock-state.interface.d.ts.map +0 -1
  303. package/app/eo-framework/util/unsubscribe/unsubscribe.component.d.ts +0 -11
  304. package/app/eo-framework/util/unsubscribe/unsubscribe.component.d.ts.map +0 -1
  305. package/esm2020/app/eo-framework/app-shell/app-bar/app-layout/app-layout.component.mjs +0 -67
  306. package/esm2020/app/eo-framework/split/index.mjs +0 -5
  307. package/esm2020/app/eo-framework/split/split/split.component.mjs +0 -373
  308. package/esm2020/app/eo-framework/split/split-area/split-area.component.mjs +0 -131
  309. package/esm2020/app/eo-framework/split/split-gutter/split-gutter.directive.mjs +0 -73
  310. package/esm2020/app/eo-framework/split/split.module.mjs +0 -28
  311. package/esm2020/app/eo-framework/undock-split/undock-split.component.mjs +0 -89
  312. package/esm2020/app/eo-framework/undock-split/undock-split.service.mjs +0 -135
  313. package/esm2020/app/eo-framework/undock-split/undock-state.interface.mjs +0 -2
  314. package/esm2020/app/eo-framework/util/unsubscribe/unsubscribe.component.mjs +0 -23
@@ -1,15 +1,20 @@
1
- import * as i2 from '@ngx-translate/core';
1
+ import * as i1 from '@ngx-translate/core';
2
2
  import { TranslateModule, TranslateLoader, MissingTranslationHandler } from '@ngx-translate/core';
3
3
  export { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
4
- import * as i0 from '@angular/core';
5
- import { InjectionToken, Inject, Injectable, NgModule, APP_INITIALIZER, Optional, SkipSelf } from '@angular/core';
6
4
  import * as i1$1 from '@angular/common/http';
7
5
  import { HttpErrorResponse, HttpHeaders, HttpResponse, HTTP_INTERCEPTORS, HttpClient, HttpClientModule } from '@angular/common/http';
6
+ import * as i0 from '@angular/core';
7
+ import { InjectionToken, Inject, Injectable, NgModule, APP_INITIALIZER, Optional, SkipSelf } from '@angular/core';
8
+ import * as i1$3 from 'ngx-toastr';
9
+ import { ToastrModule } from 'ngx-toastr';
8
10
  import { __decorate, __param } from 'tslib';
9
- import { forkJoin, of, EMPTY, throwError, Subject, Observable, ReplaySubject, BehaviorSubject, timer, interval } from 'rxjs';
10
- import { map, catchError, filter, debounceTime, switchMap, first, tap, finalize, shareReplay, expand, skipWhile, mergeMap, takeUntil } from 'rxjs/operators';
11
- import * as i6 from '@angular/common';
12
- import { registerLocaleData, DatePipe } from '@angular/common';
11
+ import { EMPTY, throwError, Subject, of, forkJoin, Observable, ReplaySubject, BehaviorSubject, timer, interval } from 'rxjs';
12
+ import { filter, map, tap, finalize, shareReplay, debounceTime, switchMap, first, catchError, expand, skipWhile, mergeMap, takeUntil } from 'rxjs/operators';
13
+ import { DatePipe, registerLocaleData } from '@angular/common';
14
+ import moment from 'moment';
15
+ import * as _ from 'lodash';
16
+ import * as FileSaver from 'file-saver';
17
+ import * as i1$2 from '@ngx-pwa/local-storage';
13
18
  import localeDeCh from '@angular/common/locales/de-CH';
14
19
  import localeExtraDeCh from '@angular/common/locales/extra/de-CH';
15
20
  import localeDe from '@angular/common/locales/de';
@@ -70,13 +75,6 @@ import localeId from '@angular/common/locales/id';
70
75
  import localeExtraId from '@angular/common/locales/extra/id';
71
76
  import localeMs from '@angular/common/locales/ms';
72
77
  import localeExtraMs from '@angular/common/locales/extra/ms';
73
- import * as momentImported from 'moment';
74
- import momentImported__default from 'moment';
75
- import * as i1 from '@ngx-pwa/local-storage';
76
- import * as FileSaver from 'file-saver';
77
- import * as _ from 'lodash';
78
- import * as i1$2 from 'ngx-toastr';
79
- import { ToastrModule } from 'ngx-toastr';
80
78
 
81
79
  // @see: http://stackoverflow.com/questions/37611549/how-to-pass-parameters-rendered-from-backend-to-angular2-bootstrap-method#answer-40379803
82
80
  /**
@@ -104,92 +102,6 @@ CoreConfig = __decorate([
104
102
  __param(0, Inject(CUSTOM_CONFIG))
105
103
  ], CoreConfig);
106
104
 
107
- /**
108
- * @ignore
109
- * APP_INITIALIZER function
110
- */
111
- function init_module(coreInit) {
112
- // Need to set to a const before returning due to:
113
- // @see: https://github.com/angular/angular/issues/14485
114
- const fnc = () => coreInit.initialize();
115
- return fnc;
116
- }
117
-
118
- /**
119
- * @ignore
120
- * Handles missing translations
121
- */
122
- class EoxMissingTranslationHandler {
123
- /**
124
- *
125
- * @param MissingTranslationHandlerParams params
126
- * @returns string
127
- */
128
- handle(params) {
129
- return '!missing key: ' + params.key;
130
- }
131
- }
132
-
133
- /**
134
- * @ignore
135
- * Loader that fetches translations based on the configured locations
136
- */
137
- let EoxTranslateJsonLoader = class EoxTranslateJsonLoader {
138
- constructor(http, config) {
139
- this.http = http;
140
- this.config = config;
141
- registerLocaleData(localeDe, 'de', localeExtraDe); // German
142
- registerLocaleData(localeAr, 'ar', localeExtraAr); // Arabic
143
- registerLocaleData(localeEs, 'es', localeExtraEs); // Spanish
144
- registerLocaleData(localePt, 'pt', localeExtraPt); // Portuguese
145
- registerLocaleData(localeFr, 'fr', localeExtraFr); // French
146
- registerLocaleData(localeZh, 'zh', localeExtraZh); // Chinese
147
- registerLocaleData(localeLv, 'lv', localeExtraLv); // Latvian
148
- registerLocaleData(localeRu, 'ru', localeExtraRu); // Russian
149
- registerLocaleData(localeIt, 'it', localeExtraIt); // Italian
150
- registerLocaleData(localeNl, 'nl', localeExtraNl); // Dutch
151
- registerLocaleData(localeSk, 'sk', localeExtraSk); // Slovak
152
- registerLocaleData(localePl, 'pl', localeExtraPl); // Polish
153
- registerLocaleData(localeUk, 'uk', localeExtraUk); // Ukrainian
154
- registerLocaleData(localeJa, 'ja', localeExtraJa); // Japanese
155
- registerLocaleData(localeKo, 'ko', localeExtraKo); // Korean
156
- registerLocaleData(localeHi, 'hi', localeExtraHi); // Hindi
157
- registerLocaleData(localeBn, 'bn', localeExtraBn); // Bengalese
158
- registerLocaleData(localeDeCh, 'de-CH', localeExtraDeCh); // German (switzerland)
159
- registerLocaleData(localeZhHant, 'zh-Hant', localeExtraZhHant); // Chinese (traditional)
160
- registerLocaleData(localeTh, 'th', localeExtraTh); // Thai
161
- registerLocaleData(localeVi, 'vi', localeExtraVi); // Vietnamese
162
- registerLocaleData(localeEnGb, 'en-GB', localeExtraEnGb); // English (Great-Britain)
163
- registerLocaleData(localeHe, 'he', localeExtraHe); // Hebrew
164
- registerLocaleData(localeFi, 'fi', localeExtraFi); // Finish
165
- registerLocaleData(localeDa, 'da', localeExtraDa); // Danish
166
- registerLocaleData(localeSe, 'se', localeExtraSe); // Swedish
167
- registerLocaleData(localeNb, 'nb', localeExtraNb); // Norwegian Bokmål
168
- registerLocaleData(localeNn, 'nn', localeExtraNn); // Norwegian Nynorsk
169
- registerLocaleData(localeId, 'id', localeExtraId); // Indonesian
170
- registerLocaleData(localeMs, 'ms', localeExtraMs); // Malay
171
- }
172
- /**
173
- *
174
- * @param string lang
175
- * @returns Observable<Object>
176
- */
177
- getTranslation(lang) {
178
- return forkJoin(this.config.translations.map(folder => this.loadTranslationFile(folder, lang))).pipe(map((res) => res.reduce((acc, x) => Object.assign(acc, x), {})));
179
- }
180
- loadTranslationFile(folder, lang) {
181
- return this.http.get(`${folder}${lang}.json`).pipe(catchError((e) => {
182
- // ISO codes with more than 2 characters are sub-languages like de-CH.
183
- // If there is no translation file for that sub-language we'll try to load
184
- // the file for the base language (in this case de).
185
- return lang.length > 2 ? this.loadTranslationFile(folder, lang.substring(0, 2)) : of({});
186
- }));
187
- }
188
- };
189
- EoxTranslateJsonLoader = __decorate([
190
- __param(1, Inject(CORE_CONFIG))
191
- ], EoxTranslateJsonLoader);
192
-
193
105
  /**
194
106
  * Set up the default logger.
195
107
  * The default logger doesn't actually log anything;
@@ -1083,7 +995,7 @@ class Utils {
1083
995
  * @returns
1084
996
  */
1085
997
  static getTimezoneOffset() {
1086
- return momentImported__default().format('Z');
998
+ return moment().format('Z');
1087
999
  }
1088
1000
  static formatMailTo(value, isEmail) {
1089
1001
  if (isEmail && !!value) {
@@ -1311,14 +1223,26 @@ class Config {
1311
1223
  return this.cfg['agent'];
1312
1224
  }
1313
1225
  }
1314
- Config.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: Config, deps: [{ token: i2.TranslateService }, { token: EventService }], target: i0.ɵɵFactoryTarget.Injectable });
1226
+ Config.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: Config, deps: [{ token: i1.TranslateService }, { token: EventService }], target: i0.ɵɵFactoryTarget.Injectable });
1315
1227
  Config.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: Config, providedIn: 'root' });
1316
1228
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: Config, decorators: [{
1317
1229
  type: Injectable,
1318
1230
  args: [{
1319
1231
  providedIn: 'root'
1320
1232
  }]
1321
- }], ctorParameters: function () { return [{ type: i2.TranslateService }, { type: EventService }]; } });
1233
+ }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: EventService }]; } });
1234
+
1235
+ class EnvironmentEnaio {
1236
+ static isWebEnvironment() {
1237
+ return !EnvironmentEnaio.isDesktopEnvironment() && !EnvironmentEnaio.isMobileEnvironment();
1238
+ }
1239
+ static isMobileEnvironment() {
1240
+ return window.hasOwnProperty('cordova');
1241
+ }
1242
+ static isDesktopEnvironment() {
1243
+ return window.hasOwnProperty('process') && window['process'].versions.hasOwnProperty('electron');
1244
+ }
1245
+ }
1322
1246
 
1323
1247
  class EoUser {
1324
1248
  /**
@@ -1406,124 +1330,6 @@ class EoUser {
1406
1330
  }
1407
1331
  }
1408
1332
 
1409
- class EnvironmentEnaio {
1410
- static isWebEnvironment() {
1411
- return !EnvironmentEnaio.isDesktopEnvironment() && !EnvironmentEnaio.isMobileEnvironment();
1412
- }
1413
- static isMobileEnvironment() {
1414
- return window.hasOwnProperty('cordova');
1415
- }
1416
- static isDesktopEnvironment() {
1417
- return window.hasOwnProperty('process') && window['process'].versions.hasOwnProperty('electron');
1418
- }
1419
- }
1420
-
1421
- /**
1422
- * The apps central caching service. It will provide the app with an easy to use cache that
1423
- * is aware of the platform it is running on. So it abstracts the platform-specific implementations
1424
- * of a cache from the application.
1425
- */
1426
- class AppCacheService {
1427
- constructor(storage, storageMap) {
1428
- this.storage = storage;
1429
- this.storageMap = storageMap;
1430
- /**
1431
- * Key for storing system definition
1432
- */
1433
- this.SYSTEM_DEFINITION = 'eo.framework.cache.systemdefinition';
1434
- /**
1435
- * Key for storing system definition
1436
- */
1437
- this.HOSTS = 'eo.framework.cache.hosts';
1438
- /**
1439
- * Key for storing location history
1440
- */
1441
- this.LOCATION_HISTORY = 'eo.framework.cache.locations.history';
1442
- this.itemsMap = new Map();
1443
- // IndexedDB issue after update - refresh function (transform all wrapped items)
1444
- window['_ngStorageRefresh'] = () => this.getStorage().subscribe(storage => this.setStorage(storage).subscribe() && console.log(storage));
1445
- }
1446
- /**
1447
- * Writes an item to the storage.
1448
- * @param key The item's key
1449
- * @param value The value to be stored
1450
- * @param debounce The debounce time (default: 500) to reduce identical storage calls
1451
- * @returns Resolves true if setting the item succeeded, false otherwise
1452
- */
1453
- setItem(key, value, debounce = 500) {
1454
- if (!debounce) {
1455
- return this.storage.setItem(key, value);
1456
- }
1457
- else {
1458
- if (!this.itemsMap.has(key)) {
1459
- const subject = new Subject();
1460
- subject.pipe(debounceTime(debounce), switchMap(val => this.storage.setItem(key, val))).subscribe();
1461
- this.itemsMap.set(key, subject);
1462
- }
1463
- this.itemsMap.get(key).next(value);
1464
- return of(true);
1465
- }
1466
- }
1467
- /**
1468
- * Get a stored item by its key.
1469
- * @param key The item's key
1470
- * @returns The item's value if the key exists, null otherwise
1471
- */
1472
- getItem(key) {
1473
- return this.storage.getItem(key)
1474
- .pipe(map((item) => {
1475
- // IndexedDB issue after update (transform wrapped items)
1476
- return Object.keys(item || {}).join() === 'value' ? item.value : item;
1477
- }));
1478
- }
1479
- /**
1480
- * Removes an item from the storage.
1481
- * @param key The item's key
1482
- * @returns Resolves true if removing the item succeeded, false otherwise
1483
- */
1484
- removeItem(key) {
1485
- return this.storage.removeItem(key);
1486
- }
1487
- /**
1488
- * Deletes all items from local storage
1489
- * @param filter optional - Delete all keys that pass through filter
1490
- * @returns Resolves true if clearing all items succeeded, false otherwise
1491
- */
1492
- clear(filter) {
1493
- return filter
1494
- ? this.getStorageKeys().pipe(switchMap((keys) => {
1495
- const list = keys.filter((k) => filter(k)).map((k) => this.removeItem(k));
1496
- return list.length ? forkJoin(list).pipe(map(() => true)) : of(true);
1497
- }))
1498
- : this.storage.clear();
1499
- }
1500
- getStorageKeys() {
1501
- return new Observable((observer) => {
1502
- const keys = [];
1503
- this.storageMap.keys().subscribe({
1504
- next: (key) => keys.push(key),
1505
- complete: () => observer.next(keys)
1506
- });
1507
- }).pipe(first());
1508
- }
1509
- getStorage() {
1510
- return this.getStorageKeys().pipe(switchMap((keys) => keys.length
1511
- ? forkJoin(Utils.arrayToObject(keys, (o) => o, (k) => this.getItem(k)))
1512
- : of({})));
1513
- }
1514
- setStorage(options) {
1515
- return forkJoin(Object.keys(options || {}).map((k) => this.setItem(k, options[k])));
1516
- }
1517
- }
1518
- AppCacheService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: AppCacheService, deps: [{ token: i1.LocalStorage }, { token: i1.StorageMap }], target: i0.ɵɵFactoryTarget.Injectable });
1519
- AppCacheService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: AppCacheService, providedIn: 'root' });
1520
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: AppCacheService, decorators: [{
1521
- type: Injectable,
1522
- args: [{
1523
- providedIn: 'root'
1524
- }]
1525
- }], ctorParameters: function () { return [{ type: i1.LocalStorage }, { type: i1.StorageMap }]; } });
1526
-
1527
1333
  /**
1528
1334
  * Wrapper for Cloud Services through Auth Service
1529
1335
  */
@@ -1681,60 +1487,43 @@ var ClipboardAction;
1681
1487
  })(ClipboardAction || (ClipboardAction = {}));
1682
1488
 
1683
1489
  /**
1684
- * Handles the systems capabilities. Capabilities are settings that enable/disable certain client features.
1490
+ * Representation of an object type. Object types are defined with the system definition and describe
1491
+ * different kind of objects that allowed to be created.
1685
1492
  */
1686
- class CapabilitiesService {
1493
+ class ObjectType {
1687
1494
  /**
1688
- * @ignore
1495
+ * Creates a new instance
1496
+ * @param json The JSON object received from the backend. This will be used to construct the new object type instance
1689
1497
  */
1690
- constructor() {
1498
+ constructor(json) {
1499
+ this.id = json.id;
1500
+ this.implements = json.implements ? json.implements : [];
1501
+ this.isFolder = json.folder;
1502
+ this.isContextFolder = json.iscontextfolder;
1503
+ this.isAbstract = json.abstract;
1504
+ this.iconId = json.icon ? json.icon.id : null;
1505
+ this.maxFiles = json.maxfiles;
1506
+ this.minFiles = json.minfiles;
1507
+ this.name = json.name;
1508
+ this.qname = json.qname;
1509
+ this.label = json.label;
1510
+ this.description = json.description;
1511
+ this.group = json.group ? json.group.label : "";
1512
+ this.elements = json.elements;
1513
+ this.allowedcontexttypes = json.allowedcontexttypes
1514
+ ? json.allowedcontexttypes
1515
+ : [];
1516
+ this.supertypes = json.supertypes ? json.supertypes.map(t => t.name) : [];
1517
+ this.shareable = json.shareable;
1518
+ this.parenttypes = this.getParentTypes(json.allowedlocations);
1691
1519
  }
1692
- /**
1693
- * Sets the capabilities based on a given object set by auth.service
1694
- *
1695
- * @param userCapabilities Object containing capabilities properties
1696
- * @param useSingleSingOn Whether or not to set up single signon on capability
1697
- * @returns The newly created capabilities object
1698
- */
1699
- setCapabilities(userCapabilities, useSingleSingOn) {
1700
- this.capabilities = {
1701
- bpm: userCapabilities.bpm,
1702
- favorites: userCapabilities.favorites,
1703
- followup: userCapabilities.followup,
1704
- subscription: userCapabilities.subscription,
1705
- intray: userCapabilities.intray,
1706
- storedqueries: userCapabilities.storedqueries,
1707
- recyclebin: userCapabilities.recyclebin,
1708
- inbox: userCapabilities.bpm || userCapabilities.followup || userCapabilities.subscription,
1709
- notifications: userCapabilities.followup || userCapabilities.subscription,
1710
- template: userCapabilities.template,
1711
- sso: useSingleSingOn || false
1712
- };
1713
- return this.capabilities;
1714
- }
1715
- /**
1716
- * Getter for the Capabilities
1717
- */
1718
- getCapabilities() {
1719
- return this.capabilities;
1720
- }
1721
- /**
1722
- * Check if Capability is present
1723
- * @param capability Capability to check for
1724
- * @returns True if the capability is set, false otherwise
1725
- */
1726
- hasCapability(capability) {
1727
- return this.capabilities[capability];
1520
+ getParentTypes(allowedlocations) {
1521
+ if (allowedlocations) {
1522
+ return allowedlocations.parenttypes.map(types => types.name);
1523
+ }
1524
+ return [];
1728
1525
  }
1729
1526
  }
1730
- CapabilitiesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: CapabilitiesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1731
- CapabilitiesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: CapabilitiesService, providedIn: 'root' });
1732
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: CapabilitiesService, decorators: [{
1733
- type: Injectable,
1734
- args: [{
1735
- providedIn: 'root'
1736
- }]
1737
- }], ctorParameters: function () { return []; } });
1738
1527
 
1739
1528
  // @ts-ignore
1740
1529
  /**
@@ -2083,887 +1872,1003 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
2083
1872
  }] }, { type: Logger }, { type: Config }]; } });
2084
1873
 
2085
1874
  /**
2086
- * @ignore
2087
- */
2088
- const moment$1 = momentImported;
2089
- /**
2090
- * Items emitted by the inbox service
2091
- */
2092
- class InboxItem {
2093
- /**
2094
- * Creates a new instance
2095
- * @param json The JSON object received from the backend. This will be used to construct the new inbox item instance
2096
- */
2097
- constructor(json) {
2098
- // todo: jsut use Object assign when backend changes are done
2099
- // Object.assign(this, json);
2100
- this.id = json.inboxentryid;
2101
- this.title = json.title;
2102
- this.description = json.description;
2103
- this.type = json.type;
2104
- this.sourceId = json.source ? json.source.id : null;
2105
- this.iconId = json.target && json.target.icon ? json.target.icon.id : null;
2106
- this.accepted = json.accepted;
2107
- this.isdeputy = json.isdeputy;
2108
- this.duetime = json.duetime;
2109
- this.received = json.receivetime;
2110
- this.target = json.target;
2111
- }
2112
- /**
2113
- * Determines whether or not the inbox item is overdue
2114
- * @returns True when inbox item is overdue, false otherwise
2115
- */
2116
- isOverdue() {
2117
- return this.duetime && moment$1(this.duetime).isBefore(moment$1());
2118
- }
2119
- }
2120
- InboxItem.TYPE_BPM = 'BPM';
2121
- InboxItem.TYPE_RESUBMISSION = 'RESUBMISSION';
2122
- InboxItem.TYPE_SUBSCRIPTION = 'SUBSCRIPTION';
2123
-
2124
- /**
2125
- * InboxService handles interaction with the inbox service on the backend side.
1875
+ * The apps central caching service. It will provide the app with an easy to use cache that
1876
+ * is aware of the platform it is running on. So it abstracts the platform-specific implementations
1877
+ * of a cache from the application.
2126
1878
  */
2127
- class InboxService {
2128
- constructor(backend) {
2129
- this.backend = backend;
2130
- // backends maximum page size
2131
- this.MAX_PAGE_SIZE = 1000;
2132
- this.inboxStateSource = new ReplaySubject(1);
2133
- this.inboxState$ = this.inboxStateSource.asObservable();
2134
- this.inboxItemsSource = new ReplaySubject(1);
2135
- this.inboxItemsGridData$ = this.inboxItemsSource.asObservable();
2136
- this.inboxItems$ = this.inboxItemsGridData$.pipe(this.backend.gridDataFilter);
1879
+ class AppCacheService {
1880
+ constructor(storage, storageMap) {
1881
+ this.storage = storage;
1882
+ this.storageMap = storageMap;
1883
+ /**
1884
+ * Key for storing system definition
1885
+ */
1886
+ this.SYSTEM_DEFINITION = 'eo.framework.cache.systemdefinition';
1887
+ /**
1888
+ * Key for storing system definition
1889
+ */
1890
+ this.HOSTS = 'eo.framework.cache.hosts';
1891
+ /**
1892
+ * Key for storing location history
1893
+ */
1894
+ this.LOCATION_HISTORY = 'eo.framework.cache.locations.history';
1895
+ this.itemsMap = new Map();
1896
+ // IndexedDB issue after update - refresh function (transform all wrapped items)
1897
+ window['_ngStorageRefresh'] = () => this.getStorage().subscribe(storage => this.setStorage(storage).subscribe() && console.log(storage));
2137
1898
  }
2138
1899
  /**
2139
- * Fetches inbox items from the backend.
2140
- *
2141
- * @returns Observable of inbox items.
1900
+ * Writes an item to the storage.
1901
+ * @param key The item's key
1902
+ * @param value The value to be stored
1903
+ * @param debounce The debounce time (default: 500) to reduce identical storage calls
1904
+ * @returns Resolves true if setting the item succeeded, false otherwise
2142
1905
  */
2143
- getItems() {
2144
- return this.getAllPages()
2145
- .pipe(map(res => res.map(item => new InboxItem(item))), tap(res => {
2146
- this.inboxItems = res;
2147
- this.inboxItemsSource.next(this.inboxItems);
2148
- }), catchError(Utils.throw(() => this.inboxItemsSource.next([]))));
2149
- }
2150
- getAllPages() {
2151
- let items = [];
2152
- return this.getPage().pipe(expand(res => {
2153
- return !res.last ? this.getPage(res.pageable.pageNumber + 1) : EMPTY;
2154
- }), tap(res => items = [...items, ...res.content]), skipWhile(res => !res.last), map(_ => items));
2155
- }
2156
- getPage(index) {
2157
- return this.backend
2158
- .getJson(`/get?size=${this.MAX_PAGE_SIZE}&page=${index || 0}`, this.backend.getInboxBase());
1906
+ setItem(key, value, debounce = 500) {
1907
+ if (!debounce) {
1908
+ return this.storage.setItem(key, value);
1909
+ }
1910
+ else {
1911
+ if (!this.itemsMap.has(key)) {
1912
+ const subject = new Subject();
1913
+ subject.pipe(debounceTime(debounce), switchMap(val => this.storage.setItem(key, val))).subscribe();
1914
+ this.itemsMap.set(key, subject);
1915
+ }
1916
+ this.itemsMap.get(key).next(value);
1917
+ return of(true);
1918
+ }
2159
1919
  }
2160
1920
  /**
2161
- * Fetches state informations for the users inbox
2162
- *
2163
- * @returns inbox state object
1921
+ * Get a stored item by its key.
1922
+ * @param key The item's key
1923
+ * @returns The item's value if the key exists, null otherwise
2164
1924
  */
2165
- getState() {
2166
- return this.inboxState;
1925
+ getItem(key) {
1926
+ return this.storage.getItem(key)
1927
+ .pipe(map((item) => {
1928
+ // IndexedDB issue after update (transform wrapped items)
1929
+ return Object.keys(item || {}).join() === 'value' ? item.value : item;
1930
+ }));
2167
1931
  }
2168
1932
  /**
2169
- * Public access to fetch inbox
1933
+ * Removes an item from the storage.
1934
+ * @param key The item's key
1935
+ * @returns Resolves true if removing the item succeeded, false otherwise
2170
1936
  */
2171
- refreshInboxState() {
2172
- this.fetchInboxState();
1937
+ removeItem(key) {
1938
+ return this.storage.removeItem(key);
2173
1939
  }
2174
1940
  /**
2175
- * Retrieve inbox state
1941
+ * Deletes all items from local storage
1942
+ * @param filter optional - Delete all keys that pass through filter
1943
+ * @returns Resolves true if clearing all items succeeded, false otherwise
2176
1944
  */
2177
- fetchInboxState() {
2178
- this.backend
2179
- .getJson('/state', this.backend.getInboxBase())
2180
- .pipe(map(res => res))
2181
- .subscribe(res => {
2182
- this.inboxState = res;
2183
- this.inboxStateSource.next(this.inboxState);
2184
- }, Utils.logError(null, 'Failed to fetch inbox state!'));
1945
+ clear(filter) {
1946
+ return filter
1947
+ ? this.getStorageKeys().pipe(switchMap((keys) => {
1948
+ const list = keys.filter((k) => filter(k)).map((k) => this.removeItem(k));
1949
+ return list.length ? forkJoin(list).pipe(map(() => true)) : of(true);
1950
+ }))
1951
+ : this.storage.clear();
2185
1952
  }
2186
- /**
2187
- * Removes an item from the inbox.
2188
- *
2189
- * @param item inbox item to be removed
2190
- * @returns Observable<any>
2191
- */
2192
- removeItem(item) {
2193
- return this.backend
2194
- .del('/' + item.id, this.backend.getInboxBase())
2195
- .pipe(tap(() => this.updateInboxItems(item.id)));
1953
+ getStorageKeys() {
1954
+ return new Observable((observer) => {
1955
+ const keys = [];
1956
+ this.storageMap.keys().subscribe({
1957
+ next: (key) => keys.push(key),
1958
+ complete: () => observer.next(keys)
1959
+ });
1960
+ }).pipe(first());
2196
1961
  }
2197
- /**
2198
- * Soft update for data in the inbox.
2199
- *
2200
- * @param id
2201
- * @param item
2202
- * @param multi
2203
- */
2204
- updateInboxItems(id, item, multi) {
2205
- if (this.backend.update(this.inboxItems, multi || [{ id, item }])) {
2206
- this.inboxItemsSource.next(this.inboxItems);
2207
- }
1962
+ getStorage() {
1963
+ return this.getStorageKeys().pipe(switchMap((keys) => keys.length
1964
+ ? forkJoin(Utils.arrayToObject(keys, (o) => o, (k) => this.getItem(k)))
1965
+ : of({})));
2208
1966
  }
2209
- /**
2210
- * Marks an inbox item as read.
2211
- *
2212
- * @param item the item to be marked as read
2213
- * @returns Observable<any>
2214
- */
2215
- markAsRead(item) {
2216
- return this.backend.put('/read/' + item.id, this.backend.getInboxBase());
1967
+ setStorage(options) {
1968
+ return forkJoin(Object.keys(options || {}).map((k) => this.setItem(k, options[k])));
2217
1969
  }
2218
1970
  }
2219
- InboxService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: InboxService, deps: [{ token: BackendService }], target: i0.ɵɵFactoryTarget.Injectable });
2220
- InboxService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: InboxService, providedIn: 'root' });
2221
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: InboxService, decorators: [{
1971
+ AppCacheService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: AppCacheService, deps: [{ token: i1$2.LocalStorage }, { token: i1$2.StorageMap }], target: i0.ɵɵFactoryTarget.Injectable });
1972
+ AppCacheService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: AppCacheService, providedIn: 'root' });
1973
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: AppCacheService, decorators: [{
2222
1974
  type: Injectable,
2223
1975
  args: [{
2224
1976
  providedIn: 'root'
2225
1977
  }]
2226
- }], ctorParameters: function () { return [{ type: BackendService }]; } });
1978
+ }], ctorParameters: function () { return [{ type: i1$2.LocalStorage }, { type: i1$2.StorageMap }]; } });
2227
1979
 
2228
1980
  /**
2229
- * `BpmService` handles interaction related to BPM tasks.
2230
- *
2231
- * The main parts provided and used by this service are Processes and WorkItems.
2232
- * Processes are defined on the backend side. They describe a set of tasks that will be executed by the process.
2233
- * Tasks that require user interaction are referred to as WorkItems.
2234
- *
2235
- * Processes can be related to a special object type, but they don't have to. In addition to that they can refer
2236
- * to dms objects.
1981
+ * Collection of System Services
2237
1982
  */
2238
- class BpmService {
2239
- constructor(capabilities, backend, eventService, inboxService) {
2240
- this.capabilities = capabilities;
1983
+ class SystemService {
1984
+ constructor(backend, logger, eventService, appCache) {
2241
1985
  this.backend = backend;
1986
+ this.logger = logger;
2242
1987
  this.eventService = eventService;
2243
- this.inboxService = inboxService;
2244
- this.processItemsSource = new ReplaySubject(1);
2245
- /**
2246
- * Long term observable emitting the current processes
2247
- */
2248
- this.processItems$ = this.processItemsSource.asObservable();
2249
- }
2250
- /**
2251
- * Retrieve all processes of the current user.
2252
- *
2253
- * @param size Maximum number of processes to be fetched
2254
- * @returns List of Processes
2255
- */
2256
- getProcesses(size = 1000) {
2257
- return this.backend
2258
- .getJson(`/process/user?size=${size}`, this.backend.getBpmBase())
2259
- .pipe(map(response => response.content.map(item => new Process(item))), tap((processes) => {
2260
- this.processItems = processes;
2261
- this.processItemsSource.next(this.processItems);
2262
- }));
2263
- }
2264
- /**
2265
- * Getter for the executable Processes. If types are provided, you'll get
2266
- * only the processes that are executable for all of them
2267
- * @param types List of dms object types to fetch executable processes for
2268
- * @param useCached If the cached data should be returned rather than requesting again
2269
- * @param additionalData If the additional form data should be also included
2270
- * @param modelid The process model ID to only return the data for one process
2271
- * @returns List of executable processes
2272
- */
2273
- getExecutableProcesses(types, useCached, additionalData, modelid, global) {
2274
- if (this.capabilities.hasCapability('bpm')) {
2275
- return (!!this.executableProcesses && useCached) ? of(this.executableProcesses) : this.fetchExecutableProcesses(types, additionalData, modelid, global);
2276
- }
2277
- else {
2278
- return of([]);
2279
- }
1988
+ this.appCache = appCache;
1989
+ this.systemSource = new ReplaySubject();
1990
+ this.system$ = this.systemSource.asObservable();
1991
+ // session cache for object type forms
1992
+ this.objectTypeForms = [];
1993
+ this.cachedRoles = [];
1994
+ this.eventService.on(EnaioEvent.SYSTEM_STATUS_SCHEMA_CHANGED).subscribe(() => {
1995
+ this.fetchSystemDefinition(this.user);
1996
+ });
2280
1997
  }
2281
- initExecutableProcesses() {
2282
- let uri = '/bpm/process/executable';
2283
- return this.backend.get(uri).pipe(tap(res => this.hasMainExecutableProcesses = res?.length));
1998
+ set system(s) {
1999
+ this._system = s;
2284
2000
  }
2285
- /**
2286
- * Gets executable Processes for a given set of dms object.You'll get
2287
- * only the processes that are executable for all of them.
2288
- * @param dmsObjects List of dms objects to fetch executable processes for
2289
- * @returns List of executable processes
2290
- */
2291
- getExecutableProcessesForDmsObjects(dmsObjects) {
2292
- return this.getExecutableProcesses(dmsObjects.map(o => o.typeName), false, true);
2001
+ get system() {
2002
+ return JSON.parse(JSON.stringify(this._system));
2293
2003
  }
2294
2004
  /**
2295
- * Fetches executable Processes from the backend.
2296
- * @param types List of dms object types to fetch executable processes for
2297
- * @param additionalData If the additional form data should be also included
2298
- * @param modelid The process model ID to only return the data for one process
2299
- * @returns List of executable processes
2005
+ * Gets all ObjectTypes
2006
+ *
2007
+ * @returns An array containing all object types
2300
2008
  */
2301
- fetchExecutableProcesses(types, additionalData, modelid, global) {
2302
- let uri = '/bpm/process/executable';
2303
- if (additionalData) {
2304
- uri += '?form=true&fields=true';
2305
- }
2306
- if (types) {
2307
- uri += (additionalData ? '&' : '?') + `type=${types.join(',')}`;
2308
- }
2309
- if (modelid) {
2310
- uri += (additionalData || types ? '&' : '?') + `modelid=${modelid}`;
2311
- }
2312
- return this.backend.get(uri).pipe(map(res => res), tap(res => {
2313
- // Extend existing processes with additional data, instead of overwriting all processes
2314
- if (global) {
2315
- if (additionalData) {
2316
- if (!this.executableProcesses) {
2317
- this.executableProcesses = [];
2318
- }
2319
- res.forEach(proc => {
2320
- const existingProcIndex = this.executableProcesses.findIndex(item => item.id === proc.id);
2321
- if (existingProcIndex === -1) {
2322
- this.executableProcesses.push(proc);
2323
- }
2324
- else {
2325
- this.executableProcesses[existingProcIndex] = proc;
2326
- }
2327
- });
2328
- }
2329
- else {
2330
- this.executableProcesses = res;
2331
- }
2332
- }
2333
- }));
2009
+ getObjectTypes() {
2010
+ return this.system.types;
2334
2011
  }
2335
2012
  /**
2336
- * Getter for a processes file. The file of a process contains
2337
- * dms objects attached to the process.
2338
- * @param processId ID of the process to fetch attached objects for
2013
+ * Gets an ObjectType by name.
2014
+ *
2015
+ * @param objectTypeName The name of the object type
2016
+ * @returns the ObjectType matching the given name
2339
2017
  */
2340
- getProcessFile(processId) {
2341
- return this.backend
2342
- .getJson(`/process/${processId}/file`, this.backend.getBpmBase()).pipe(map(res => res.content.map(i => {
2343
- return {
2344
- id: i.elementid,
2345
- title: i.title,
2346
- description: i.description ? i.description : '',
2347
- iconid: i.iconid,
2348
- creator: i.creator,
2349
- addtime: i.addtime,
2350
- type: i.type
2351
- };
2352
- })));
2018
+ getObjectType(objectTypeName) {
2019
+ return this.system.types.find(t => t.name === objectTypeName);
2353
2020
  }
2354
2021
  /**
2355
- * Retrieves a work item.
2356
- * @param processId ID of the parent process
2357
- * @param itemId ID of the work item itself
2358
- * @param options Options to be added to the backend call
2359
- * @returns a WorkItem
2022
+ * Get form elements from form model. This is useful if you have to fetch them
2023
+ * for a special situation like SEARCH
2024
+ * @param objectTypeName ObjectType to fetch elements for
2025
+ * @param situation Form model situation to be fetched
2026
+ * @param isContextType Flag indicating that the form model should be fetched for a context mode
2360
2027
  */
2361
- getWorkItem(processId, itemId, options) {
2362
- const params = options ? options : { form: true, fields: true };
2363
- const tasks = [
2364
- this.backend.getJson(Utils.buildUri(`/bpm/process/${processId}/${itemId}`, params)),
2365
- this.getProcessFile(processId)
2366
- ];
2367
- return forkJoin(tasks).pipe(map(res => {
2368
- const wi = new WorkItem(res[0]);
2369
- wi.setFile(res[1]);
2370
- return wi;
2028
+ getFormElementsFromFormModel(objectTypeName, situation, isContextType) {
2029
+ return this.getObjectTypeForm(objectTypeName, situation, isContextType ? 'CONTEXT' : null).pipe(switchMap(model => {
2030
+ const elements = [];
2031
+ this.processFormModelElements(model, elements);
2032
+ return of(elements);
2371
2033
  }));
2372
2034
  }
2373
- /**
2374
- * Saves a work item.
2375
- * @param item The work item to be saved
2376
- * @returns The updated WorkItem
2377
- */
2378
- saveWorkItem(item) {
2379
- const { id, processId, file, data } = item;
2380
- const payload = { contents: file, data };
2381
- const params = { keeplock: true, isautolock: false };
2382
- return this.backend
2383
- .post(Utils.buildUri(`/bpm/process/${processId}/${id}/save`, params), payload)
2384
- .pipe(mergeMap(() => this.getWorkItem(processId, id)));
2035
+ processFormModelElements(model, elements) {
2036
+ model.elements.forEach(e => {
2037
+ if (e.type !== "o2mGroup" && e.type !== "o2mGroupStack") {
2038
+ elements.push(e);
2039
+ }
2040
+ else if (e.elements && e.elements.length) {
2041
+ this.processFormModelElements(e, elements);
2042
+ }
2043
+ });
2385
2044
  }
2386
2045
  /**
2387
- * Forwards a work item. If a WorkItem provides different actions (@link WorkItemAction)
2388
- * you can provide the selected action too.
2389
- * @param item The work item to be forwarded
2390
- * @param action Action used for forwarding
2046
+ * Checks whether or not the given type implements a given supertype
2047
+ * @param type Type to be checked
2048
+ * @param superTypeName Name of the supertype
2391
2049
  */
2392
- forwardWorkItem(item, action) {
2393
- const params = { keeplock: false, isautolock: false };
2394
- const payload = {
2395
- action: action,
2396
- contents: item.file,
2397
- data: item.data
2398
- };
2399
- return this.backend
2400
- .post(Utils.buildUri(`/bpm/process/${item.processId}/${item.id}/save`, params), payload)
2401
- .pipe(tap(() => this.inboxService.updateInboxItems(item.id)));
2050
+ implementsType(type, superTypeName) {
2051
+ return type.name === superTypeName || (type.implements && type.implements.indexOf(superTypeName) !== -1);
2402
2052
  }
2403
2053
  /**
2404
- * Locks a WorkItem for the current user (personalization), meaning that the
2405
- * current user is now in charge of fulfilling the WorkItem task.
2406
- * @param item The WorkItem to be locked
2407
- * @returns The updated WorkItem
2054
+ * Gets a codesystem
2055
+ *
2056
+ * @param id The codesystems id
2057
+ * @returns The codesystem object matching the given id
2408
2058
  */
2409
- lockWorkItem(item) {
2410
- return this.backend.put(`/bpm/process/${item.processId}/${item.id}/lock`)
2411
- .pipe(mergeMap(() => this.getWorkItem(item.processId, item.id)));
2059
+ getCodesystem(id) {
2060
+ return this.system.codesystems.find(t => t.id === id || t.name === id);
2412
2061
  }
2413
2062
  /**
2414
- * Releases the lock for a WorkItem.
2415
- * @param item The work item to be unlocked
2416
- * @returns The updated WorkItem
2063
+ * Get the form model of an object type.
2064
+ *
2065
+ * @param objectTypeName The object type name
2066
+ * @param situation The form situation to be fetched
2067
+ * @param mode Form mode to fetch (e.g. CONTEXT)
2068
+ * @returns The object type form model
2417
2069
  */
2418
- unlockWorkItem(item) {
2419
- return this.backend.del(`/bpm/process/${item.processId}/${item.id}/lock`).pipe(mergeMap(() => this.getWorkItem(item.processId, item.id)));
2070
+ getObjectTypeForm(objectTypeName, situation, mode) {
2071
+ /** check if we have a cached form first */
2072
+ let cachedForm;
2073
+ let i = 0;
2074
+ while (!cachedForm && i < this.objectTypeForms.length) {
2075
+ if (this.objectTypeForms[i].name === objectTypeName &&
2076
+ this.objectTypeForms[i].mode === mode &&
2077
+ this.objectTypeForms[i].situation === situation) {
2078
+ cachedForm = this.objectTypeForms[i];
2079
+ }
2080
+ i++;
2081
+ }
2082
+ if (cachedForm) {
2083
+ /** return a clone of the cached model as otherwise model changes will be added to the chached model */
2084
+ return of(_.cloneDeep(cachedForm));
2085
+ }
2086
+ else {
2087
+ let uri = `/ui/form/${objectTypeName}?situation=${situation}`;
2088
+ uri += !!mode ? `&formmode=${mode}` : '';
2089
+ /** fetch and cache the requested form, if no cached version was found */
2090
+ return this.backend.getViaTempCache(uri, () => this.backend
2091
+ .getJson(uri)
2092
+ .pipe(tap((model) => this.objectTypeForms.push(_.cloneDeep(model)))));
2093
+ }
2420
2094
  }
2421
2095
  /**
2422
- * Starts an executable process.
2423
- * @param executableProcessId ID of the executable Process to be started
2424
- * @param data Data to be passed to the process (simple object of key/value pairs)
2425
- * @param contents Objects to be attached to the process (process.file).
2096
+ * Fetches the backends system definition and updates system$ Observable.
2097
+ * Subscribe to the system$ observable instead of calling this function, otherwise you'll trigger fetching the
2098
+ * system definition every time.
2099
+ *
2100
+ * @param user The user to load the system definition for
2101
+ * @returns true when successfull
2426
2102
  */
2427
- startProcess(executableProcessId, data, contents) {
2428
- return this.backend.post(`/bpm/process/?modelid=${executableProcessId}`, {
2429
- data: data,
2430
- contents: contents
2431
- });
2432
- }
2103
+ getSystemDefinition(user) {
2104
+ this.user = user;
2105
+ // todo: temporary: OrgChanges could not be recognized but affect object definition
2106
+ return this.fetchSystemDefinition(user);
2107
+ // todo: enable again when OrgChanges are recognizable (DO NOT DELETE!)
2108
+ // // is there a cached version
2109
+ // return this.appCache
2110
+ // .getItem(this.appCache.SYSTEM_DEFINITION)
2111
+ // .catch((error) => {
2112
+ // this.logger.error('Error fetching cached version of system definition.', error);
2113
+ // return this.fetchSystemDefinition(user);
2114
+ // })
2115
+ // .flatMap((cachedSystemDefinition: any) => {
2116
+ //
2117
+ // // yes? then check if it's up to date
2118
+ // if (cachedSystemDefinition) {
2119
+ //
2120
+ // if (
2121
+ // user.schema.version !== cachedSystemDefinition.info.version ||
2122
+ // user.id !== cachedSystemDefinition.info.user ||
2123
+ // user.getSchemaLocale() !== cachedSystemDefinition.info.locale
2124
+ // ) {
2125
+ // return this.fetchSystemDefinition(user);
2126
+ // } else {
2127
+ // // cache is up to date. return the cached one
2128
+ // this.logger.debug('System definition is up to date, using cached version.', cachedSystemDefinition);
2129
+ // this.system = cachedSystemDefinition;
2130
+ // this.systemSource.next(this.system);
2131
+ // return of(true);
2132
+ // }
2133
+ // } else {
2134
+ // // no cached systemDefinition found
2135
+ // return this.fetchSystemDefinition(user);
2136
+ // }
2137
+ // });
2138
+ }
2433
2139
  /**
2434
- * Returns the history for a process. Which entries are returned depends on the
2435
- * permissions of the current user.
2436
- * @param processId The ID of the process to fetch history for
2437
- * @returns Observable<WorkItemHistoryEntry[]>
2140
+ * Creates a value depending on a given Type
2141
+ *
2142
+ * @param string valueType
2143
+ * @returns any
2438
2144
  */
2439
- getProcessHistory(processId) {
2440
- return this.backend
2441
- .getJson(`/bpm/process/${processId}/history`)
2442
- .pipe(map(res => res && res.length ? res.map(item => new WorkItemHistoryEntry(item)) : []));
2145
+ getDefaultValue(valueType) {
2146
+ let defaultValue;
2147
+ switch (valueType) {
2148
+ case 'CURRENT_USER': {
2149
+ defaultValue = this.user.name;
2150
+ break;
2151
+ }
2152
+ case 'CURRENT_USER_NAME': {
2153
+ defaultValue = this.user.title;
2154
+ break;
2155
+ }
2156
+ case 'CURRENT_DATETIME': {
2157
+ defaultValue = new Date();
2158
+ break;
2159
+ }
2160
+ case 'CURRENT_DATE': {
2161
+ defaultValue = moment().startOf('day').toDate();
2162
+ break;
2163
+ }
2164
+ case 'YEAR': {
2165
+ defaultValue = moment().year();
2166
+ break;
2167
+ }
2168
+ case 'MONTH': {
2169
+ defaultValue = moment().month() + 1;
2170
+ break;
2171
+ }
2172
+ case 'DAY': {
2173
+ defaultValue = moment().date();
2174
+ break;
2175
+ }
2176
+ case 'HOUR': {
2177
+ defaultValue = moment().hour();
2178
+ break;
2179
+ }
2180
+ case 'MINUTE': {
2181
+ defaultValue = moment().minute();
2182
+ break;
2183
+ }
2184
+ case 'SECOND': {
2185
+ defaultValue = moment().second();
2186
+ break;
2187
+ }
2188
+ case 'WEEK_OF_YEAR': {
2189
+ defaultValue = moment().isoWeek();
2190
+ break;
2191
+ }
2192
+ case 'FIRST_DAY_OF_WEEK': {
2193
+ defaultValue = moment().startOf('isoWeek').toDate();
2194
+ break;
2195
+ }
2196
+ case 'FIRST_DAY_OF_MONTH': {
2197
+ defaultValue = moment().startOf('month').toDate();
2198
+ break;
2199
+ }
2200
+ case 'FIRST_DAY_OF_YEAR': {
2201
+ defaultValue = moment().startOf('year').toDate();
2202
+ break;
2203
+ }
2204
+ }
2205
+ return defaultValue;
2443
2206
  }
2444
2207
  /**
2445
- * Removes a content from the work items file.
2446
- * @param processId The ID of the process to remove the item from
2447
- * @param workItemId The ID of the work item containing the file element to be removed
2448
- * @param workItemContentId The the ID of the file element to be removed
2208
+ * Fetches the system definition from the server. Provided params are used for storing the
2209
+ * recent version in cache.
2210
+ *
2211
+ * @param user The user to fetch the system definition for
2212
+ * @return boolean
2449
2213
  */
2450
- removeFileElement(processId, workItemId, workItemContentId) {
2451
- return this.backend
2452
- .del(`/process/${processId}/file/${workItemContentId}?activityid=${workItemId}`, this.backend.getBpmBase());
2214
+ fetchSystemDefinition(user) {
2215
+ const fetches = [
2216
+ this.backend.getJson('/system/type/list?elements=true&basetypes=true'),
2217
+ this.backend.getJson('/system/cs/list?elements=true')
2218
+ ];
2219
+ return forkJoin(fetches)
2220
+ .pipe(catchError(Utils.catch((error) => {
2221
+ this.logger.error('Error fetching recent version of system definition from server.', error);
2222
+ this.systemSource.error('Error fetching recent version of system definition from server.');
2223
+ })), map((data) => {
2224
+ this.objectTypeForms = [];
2225
+ const system = {
2226
+ /**
2227
+ * info about the current system definition
2228
+ */
2229
+ info: {
2230
+ user: user.id,
2231
+ locale: user.getSchemaLocale(),
2232
+ version: user.schema.version
2233
+ },
2234
+ /**
2235
+ * supported backend locales
2236
+ */
2237
+ locales: user.schema.supportedLocales,
2238
+ /**
2239
+ * object type definitions
2240
+ */
2241
+ types: [],
2242
+ /**
2243
+ * codesystems cache
2244
+ */
2245
+ codesystems: []
2246
+ };
2247
+ const types = data[0];
2248
+ system.types = types.map(t => new ObjectType(t));
2249
+ system.codesystems = data[1];
2250
+ this.system = system;
2251
+ this.systemSource.next(system);
2252
+ this.logger.debug('Fetched new version of system definition (user: ' + user.id + ', version: ' + user.schema.version + ').');
2253
+ this.appCache
2254
+ .setItem(this.appCache.SYSTEM_DEFINITION, system)
2255
+ .subscribe(() => {
2256
+ this.logger.debug('Cached recent version');
2257
+ }, Utils.logError(null, 'Error caching recent version of system definition.'));
2258
+ return true;
2259
+ }));
2453
2260
  }
2454
2261
  /**
2455
- * Add contents to a work items file.
2456
- * @param processId The ID of the process
2457
- * @param workItemId The ID of the activity
2458
- * @param elements The Elements to be added
2459
- * @returns The updated WorkItem
2262
+ * Retrieve an organization object by its ID
2263
+ * @param id ID of org object
2460
2264
  */
2461
- addFileElements(processId, workItemId, elements) {
2462
- const tasks = [];
2463
- elements.forEach((e) => {
2464
- tasks.push(this.backend.post(`/process/${processId}/file/${e.id}?type=${e.type.name}&activityid=${workItemId}`, {}, this.backend.getBpmBase()));
2465
- });
2466
- return forkJoin(tasks)
2467
- .pipe(mergeMap(() => this.getWorkItem(processId, workItemId)));
2265
+ getOrganizationObjectById(id) {
2266
+ return this.backend.getJson(`/organization/id/${id}`);
2468
2267
  }
2469
2268
  /**
2470
- * Add a objects from the clipboard to a WorkItem.
2471
- * @param workItem The workItem to add the objects to
2472
- * @param clipboard Clipboard object holding user selected objects
2473
- * @returns The updated WorkItem
2269
+ * Fetches the organization object for a given name.
2270
+ *
2271
+ * @param name The name to fetch object for
2272
+ * @returns
2474
2273
  */
2475
- addFileElementsFromClipboard(workItem, clipboard) {
2476
- if ((workItem && workItem.fileEntryPermissions.add) && clipboard && clipboard.elements.length && clipboard.action === ClipboardAction.COPY) {
2477
- let contents;
2478
- if (workItem.file.length) {
2479
- // only add items that are not already part of the attachments
2480
- const attachmentIds = workItem.file.map(e => e.id);
2481
- contents = clipboard.elements.filter(e => attachmentIds.indexOf(e.id) === -1);
2482
- }
2483
- else {
2484
- contents = clipboard.elements;
2485
- }
2486
- return this.addFileElements(workItem.processId, workItem.id, contents);
2274
+ getOrganizationObject(name) {
2275
+ return this.getOrganizationObjects([name]).pipe(map(res => res[0]));
2276
+ }
2277
+ /**
2278
+ * Fetches a collection of organization objects
2279
+ *
2280
+ * @param names Array of names to fetch objects for
2281
+ * @returns A Array of Organization Objects
2282
+ */
2283
+ getOrganizationObjects(names) {
2284
+ const toFetch = names.map(name => this.backend.getJson(`/organization/name/${name}`).pipe(catchError(error => of({ id: name, active: false }))));
2285
+ return forkJoin(toFetch);
2286
+ }
2287
+ /**
2288
+ * Fetches a collection of organization roles
2289
+ *
2290
+ * @return A Array of Organization Roles
2291
+ */
2292
+ getRoles() {
2293
+ if (this.cachedRoles.length) {
2294
+ return of(this.cachedRoles);
2487
2295
  }
2488
2296
  else {
2489
- return throwError('error');
2297
+ return this.backend
2298
+ .get('/organization/role')
2299
+ .pipe(map(o => o), tap(roles => (this.cachedRoles = roles)));
2490
2300
  }
2491
2301
  }
2492
2302
  }
2493
- BpmService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BpmService, deps: [{ token: CapabilitiesService }, { token: BackendService }, { token: EventService }, { token: InboxService }], target: i0.ɵɵFactoryTarget.Injectable });
2494
- BpmService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BpmService, providedIn: 'root' });
2495
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BpmService, decorators: [{
2303
+ SystemService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: SystemService, deps: [{ token: BackendService }, { token: Logger }, { token: EventService }, { token: AppCacheService }], target: i0.ɵɵFactoryTarget.Injectable });
2304
+ SystemService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: SystemService, providedIn: 'root' });
2305
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: SystemService, decorators: [{
2496
2306
  type: Injectable,
2497
2307
  args: [{
2498
2308
  providedIn: 'root'
2499
2309
  }]
2500
- }], ctorParameters: function () { return [{ type: CapabilitiesService }, { type: BackendService }, { type: EventService }, { type: InboxService }]; } });
2310
+ }], ctorParameters: function () { return [{ type: BackendService }, { type: Logger }, { type: EventService }, { type: AppCacheService }]; } });
2501
2311
 
2502
2312
  /**
2503
- * Representation of an object type. Object types are defined with the system definition and describe
2504
- * different kind of objects that allowed to be created.
2313
+ * Handles the systems capabilities. Capabilities are settings that enable/disable certain client features.
2505
2314
  */
2506
- class ObjectType {
2315
+ class CapabilitiesService {
2507
2316
  /**
2508
- * Creates a new instance
2509
- * @param json The JSON object received from the backend. This will be used to construct the new object type instance
2317
+ * @ignore
2510
2318
  */
2511
- constructor(json) {
2512
- this.id = json.id;
2513
- this.implements = json.implements ? json.implements : [];
2514
- this.isFolder = json.folder;
2515
- this.isContextFolder = json.iscontextfolder;
2516
- this.isAbstract = json.abstract;
2517
- this.iconId = json.icon ? json.icon.id : null;
2518
- this.maxFiles = json.maxfiles;
2519
- this.minFiles = json.minfiles;
2520
- this.name = json.name;
2521
- this.qname = json.qname;
2522
- this.label = json.label;
2523
- this.description = json.description;
2524
- this.group = json.group ? json.group.label : "";
2525
- this.elements = json.elements;
2526
- this.allowedcontexttypes = json.allowedcontexttypes
2527
- ? json.allowedcontexttypes
2528
- : [];
2529
- this.supertypes = json.supertypes ? json.supertypes.map(t => t.name) : [];
2530
- this.shareable = json.shareable;
2531
- this.parenttypes = this.getParentTypes(json.allowedlocations);
2532
- }
2533
- getParentTypes(allowedlocations) {
2534
- if (allowedlocations) {
2535
- return allowedlocations.parenttypes.map(types => types.name);
2536
- }
2537
- return [];
2538
- }
2539
- }
2540
-
2541
- /**
2542
- * Representation of a prepared item. A prepared item is an item that is supposed to create a new dms object.
2543
- * Adding a new object to yuuvis<sup>&reg;</sup> RAD starts with a prepared item. If all the required properties are set up, the item
2544
- * will be used to create a new dms object.
2545
- */
2546
- class PreparedItem {
2547
- /**
2548
- * Prepared items title
2549
- */
2550
- get title() {
2551
- return this.selectedtype ? this.selectedtype.label : '';
2319
+ constructor(system) {
2320
+ this.system = system;
2552
2321
  }
2553
2322
  /**
2554
- * Creates a new instance
2555
- * @param json The JSON object received from the backend. This will be used to construct the new prepared item instance
2323
+ * Sets the capabilities based on a given object set by auth.service
2324
+ *
2325
+ * @param userCapabilities Object containing capabilities properties
2326
+ * @param useSingleSingOn Whether or not to set up single signon on capability
2327
+ * @returns The newly created capabilities object
2556
2328
  */
2557
- constructor(json) {
2558
- Object.assign(this, json);
2329
+ setCapabilities(userCapabilities, useSingleSingOn) {
2330
+ this.capabilities = {
2331
+ bpm: userCapabilities.bpm,
2332
+ favorites: userCapabilities.favorites,
2333
+ followup: userCapabilities.followup,
2334
+ subscription: userCapabilities.subscription,
2335
+ intray: userCapabilities.intray,
2336
+ storedqueries: userCapabilities.storedqueries,
2337
+ recyclebin: userCapabilities.recyclebin,
2338
+ inbox: userCapabilities.bpm || userCapabilities.followup || userCapabilities.subscription,
2339
+ notifications: userCapabilities.followup || userCapabilities.subscription,
2340
+ template: userCapabilities.template,
2341
+ sso: useSingleSingOn || false,
2342
+ };
2343
+ return this.capabilities;
2559
2344
  }
2560
2345
  /**
2561
- * Returns true if the preparedItem contains content (template or actual file), false otherwise
2346
+ * Getter for the Capabilities
2562
2347
  */
2563
- hasContent() {
2564
- return !!this.template || this.contentcount > 0;
2348
+ getCapabilities() {
2349
+ return { ...this.capabilities, signing: !!this.system.getObjectType('yuvsigning') };
2565
2350
  }
2566
2351
  /**
2567
- * Retrieves the prepared items selected type object from the list
2568
- * of available types.
2569
- * @returns The type object that is selected or NULL
2352
+ * Check if Capability is present
2353
+ * @param capability Capability to check for
2354
+ * @returns True if the capability is set, false otherwise
2570
2355
  */
2571
- getSelectedTypeObject() {
2572
- return this.types.find(t => t.selected);
2356
+ hasCapability(capability) {
2357
+ return this.capabilities[capability];
2573
2358
  }
2574
2359
  }
2360
+ CapabilitiesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: CapabilitiesService, deps: [{ token: SystemService }], target: i0.ɵɵFactoryTarget.Injectable });
2361
+ CapabilitiesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: CapabilitiesService, providedIn: 'root' });
2362
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: CapabilitiesService, decorators: [{
2363
+ type: Injectable,
2364
+ args: [{
2365
+ providedIn: 'root'
2366
+ }]
2367
+ }], ctorParameters: function () { return [{ type: SystemService }]; } });
2575
2368
 
2576
- class UploadTarget {
2577
- /**
2578
- * Creates a new instance of UploadTarget
2579
- *
2580
- * @param id Upload targets unique id
2581
- * @param type Upload targets type
2582
- */
2583
- constructor(id, type) {
2584
- this.id = id;
2585
- this.type = type;
2586
- }
2369
+ /**
2370
+ * Items emitted by the inbox service
2371
+ */
2372
+ class InboxItem {
2587
2373
  /**
2588
- * Return Method if the Upload is Successfull
2589
- *
2590
- * @param target
2591
- * @returns the provided UploadTarget if the Upload was Successfull.
2374
+ * Creates a new instance
2375
+ * @param json The JSON object received from the backend. This will be used to construct the new inbox item instance
2592
2376
  */
2593
- onUploadSuccess(target) {
2594
- return target;
2377
+ constructor(json) {
2378
+ // todo: jsut use Object assign when backend changes are done
2379
+ // Object.assign(this, json);
2380
+ this.id = json.inboxentryid;
2381
+ this.title = json.title;
2382
+ this.description = json.description;
2383
+ this.type = json.type;
2384
+ this.sourceId = json.source ? json.source.id : null;
2385
+ this.iconId = json.target && json.target.icon ? json.target.icon.id : null;
2386
+ this.accepted = json.accepted;
2387
+ this.isdeputy = json.isdeputy;
2388
+ this.duetime = json.duetime;
2389
+ this.received = json.receivetime;
2390
+ this.target = json.target;
2595
2391
  }
2596
2392
  /**
2597
- * Return method if the Upload fails
2598
- *
2599
- * @returns an empty Object if the Upload fails
2393
+ * Determines whether or not the inbox item is overdue
2394
+ * @returns True when inbox item is overdue, false otherwise
2600
2395
  */
2601
- onUploadFail() {
2602
- return {};
2396
+ isOverdue() {
2397
+ return this.duetime && moment(this.duetime).isBefore(moment());
2603
2398
  }
2604
2399
  }
2605
- /**
2606
- * general filing target
2607
- */
2608
- UploadTarget.ROOT = 'root';
2609
- /**
2610
- * add file(s) to context folder
2611
- */
2612
- UploadTarget.CONTEXT = 'context';
2613
- /**
2614
- * add file(s) to context folders dynamic structure
2615
- */
2616
- UploadTarget.CONTEXT_TREE = 'contexttree';
2617
- /**
2618
- * set/replace content file of a dms object
2619
- */
2620
- UploadTarget.OBJECT = 'object';
2621
- /**
2622
- * custom targets (e.g. for plugin development)
2623
- */
2624
- UploadTarget.CUSTOM = 'custom';
2625
-
2626
- var Direction;
2627
- (function (Direction) {
2628
- Direction["LTR"] = "ltr";
2629
- Direction["RTL"] = "rtl";
2630
- })(Direction || (Direction = {}));
2400
+ InboxItem.TYPE_BPM = 'BPM';
2401
+ InboxItem.TYPE_RESUBMISSION = 'RESUBMISSION';
2402
+ InboxItem.TYPE_SUBSCRIPTION = 'SUBSCRIPTION';
2631
2403
 
2632
2404
  /**
2633
- * @ignore
2634
- */
2635
- const moment = momentImported;
2636
- /**
2637
- * Collection of System Services
2405
+ * InboxService handles interaction with the inbox service on the backend side.
2638
2406
  */
2639
- class SystemService {
2640
- constructor(backend, logger, eventService, appCache) {
2407
+ class InboxService {
2408
+ constructor(backend) {
2641
2409
  this.backend = backend;
2642
- this.logger = logger;
2643
- this.eventService = eventService;
2644
- this.appCache = appCache;
2645
- this.systemSource = new ReplaySubject();
2646
- this.system$ = this.systemSource.asObservable();
2647
- // session cache for object type forms
2648
- this.objectTypeForms = [];
2649
- this.cachedRoles = [];
2650
- this.eventService.on(EnaioEvent.SYSTEM_STATUS_SCHEMA_CHANGED).subscribe(() => {
2651
- this.fetchSystemDefinition(this.user);
2652
- });
2653
- }
2654
- set system(s) {
2655
- this._system = s;
2656
- }
2657
- get system() {
2658
- return JSON.parse(JSON.stringify(this._system));
2410
+ // backends maximum page size
2411
+ this.MAX_PAGE_SIZE = 1000;
2412
+ this.inboxStateSource = new ReplaySubject(1);
2413
+ this.inboxState$ = this.inboxStateSource.asObservable();
2414
+ this.inboxItemsSource = new ReplaySubject(1);
2415
+ this.inboxItemsGridData$ = this.inboxItemsSource.asObservable();
2416
+ this.inboxItems$ = this.inboxItemsGridData$.pipe(this.backend.gridDataFilter);
2659
2417
  }
2660
2418
  /**
2661
- * Gets all ObjectTypes
2419
+ * Fetches inbox items from the backend.
2662
2420
  *
2663
- * @returns An array containing all object types
2421
+ * @returns Observable of inbox items.
2664
2422
  */
2665
- getObjectTypes() {
2666
- return this.system.types;
2423
+ getItems() {
2424
+ return this.getAllPages()
2425
+ .pipe(map(res => res.map(item => new InboxItem(item))), tap(res => {
2426
+ this.inboxItems = res;
2427
+ this.inboxItemsSource.next(this.inboxItems);
2428
+ }), catchError(Utils.throw(() => this.inboxItemsSource.next([]))));
2429
+ }
2430
+ getAllPages() {
2431
+ let items = [];
2432
+ return this.getPage().pipe(expand(res => {
2433
+ return !res.last ? this.getPage(res.pageable.pageNumber + 1) : EMPTY;
2434
+ }), tap(res => items = [...items, ...res.content]), skipWhile(res => !res.last), map(_ => items));
2435
+ }
2436
+ getPage(index) {
2437
+ return this.backend
2438
+ .getJson(`/get?size=${this.MAX_PAGE_SIZE}&page=${index || 0}`, this.backend.getInboxBase());
2667
2439
  }
2668
2440
  /**
2669
- * Gets an ObjectType by name.
2441
+ * Fetches state informations for the users inbox
2670
2442
  *
2671
- * @param objectTypeName The name of the object type
2672
- * @returns the ObjectType matching the given name
2443
+ * @returns inbox state object
2673
2444
  */
2674
- getObjectType(objectTypeName) {
2675
- return this.system.types.find(t => t.name === objectTypeName);
2445
+ getState() {
2446
+ return this.inboxState;
2676
2447
  }
2677
2448
  /**
2678
- * Get form elements from form model. This is useful if you have to fetch them
2679
- * for a special situation like SEARCH
2680
- * @param objectTypeName ObjectType to fetch elements for
2681
- * @param situation Form model situation to be fetched
2682
- * @param isContextType Flag indicating that the form model should be fetched for a context mode
2449
+ * Public access to fetch inbox
2683
2450
  */
2684
- getFormElementsFromFormModel(objectTypeName, situation, isContextType) {
2685
- return this.getObjectTypeForm(objectTypeName, situation, isContextType ? 'CONTEXT' : null).pipe(switchMap(model => {
2686
- const elements = [];
2687
- this.processFormModelElements(model, elements);
2688
- return of(elements);
2689
- }));
2690
- }
2691
- processFormModelElements(model, elements) {
2692
- model.elements.forEach(e => {
2693
- if (e.type !== "o2mGroup" && e.type !== "o2mGroupStack") {
2694
- elements.push(e);
2695
- }
2696
- else if (e.elements && e.elements.length) {
2697
- this.processFormModelElements(e, elements);
2698
- }
2699
- });
2451
+ refreshInboxState() {
2452
+ this.fetchInboxState();
2700
2453
  }
2701
2454
  /**
2702
- * Checks whether or not the given type implements a given supertype
2703
- * @param type Type to be checked
2704
- * @param superTypeName Name of the supertype
2455
+ * Retrieve inbox state
2705
2456
  */
2706
- implementsType(type, superTypeName) {
2707
- return type.name === superTypeName || (type.implements && type.implements.indexOf(superTypeName) !== -1);
2457
+ fetchInboxState() {
2458
+ this.backend
2459
+ .getJson('/state', this.backend.getInboxBase())
2460
+ .pipe(map(res => res))
2461
+ .subscribe(res => {
2462
+ this.inboxState = res;
2463
+ this.inboxStateSource.next(this.inboxState);
2464
+ }, Utils.logError(null, 'Failed to fetch inbox state!'));
2708
2465
  }
2709
2466
  /**
2710
- * Gets a codesystem
2467
+ * Removes an item from the inbox.
2711
2468
  *
2712
- * @param id The codesystems id
2713
- * @returns The codesystem object matching the given id
2469
+ * @param item inbox item to be removed
2470
+ * @returns Observable<any>
2714
2471
  */
2715
- getCodesystem(id) {
2716
- return this.system.codesystems.find(t => t.id === id || t.name === id);
2472
+ removeItem(item) {
2473
+ return this.backend
2474
+ .del('/' + item.id, this.backend.getInboxBase())
2475
+ .pipe(tap(() => this.updateInboxItems(item.id)));
2717
2476
  }
2718
2477
  /**
2719
- * Get the form model of an object type.
2478
+ * Soft update for data in the inbox.
2720
2479
  *
2721
- * @param objectTypeName The object type name
2722
- * @param situation The form situation to be fetched
2723
- * @param mode Form mode to fetch (e.g. CONTEXT)
2724
- * @returns The object type form model
2480
+ * @param id
2481
+ * @param item
2482
+ * @param multi
2725
2483
  */
2726
- getObjectTypeForm(objectTypeName, situation, mode) {
2727
- /** check if we have a cached form first */
2728
- let cachedForm;
2729
- let i = 0;
2730
- while (!cachedForm && i < this.objectTypeForms.length) {
2731
- if (this.objectTypeForms[i].name === objectTypeName &&
2732
- this.objectTypeForms[i].mode === mode &&
2733
- this.objectTypeForms[i].situation === situation) {
2734
- cachedForm = this.objectTypeForms[i];
2735
- }
2736
- i++;
2484
+ updateInboxItems(id, item, multi) {
2485
+ if (this.backend.update(this.inboxItems, multi || [{ id, item }])) {
2486
+ this.inboxItemsSource.next(this.inboxItems);
2737
2487
  }
2738
- if (cachedForm) {
2739
- /** return a clone of the cached model as otherwise model changes will be added to the chached model */
2740
- return of(_.cloneDeep(cachedForm));
2488
+ }
2489
+ /**
2490
+ * Marks an inbox item as read.
2491
+ *
2492
+ * @param item the item to be marked as read
2493
+ * @returns Observable<any>
2494
+ */
2495
+ markAsRead(item) {
2496
+ return this.backend.put('/read/' + item.id, this.backend.getInboxBase());
2497
+ }
2498
+ }
2499
+ InboxService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: InboxService, deps: [{ token: BackendService }], target: i0.ɵɵFactoryTarget.Injectable });
2500
+ InboxService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: InboxService, providedIn: 'root' });
2501
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: InboxService, decorators: [{
2502
+ type: Injectable,
2503
+ args: [{
2504
+ providedIn: 'root'
2505
+ }]
2506
+ }], ctorParameters: function () { return [{ type: BackendService }]; } });
2507
+
2508
+ /**
2509
+ * `BpmService` handles interaction related to BPM tasks.
2510
+ *
2511
+ * The main parts provided and used by this service are Processes and WorkItems.
2512
+ * Processes are defined on the backend side. They describe a set of tasks that will be executed by the process.
2513
+ * Tasks that require user interaction are referred to as WorkItems.
2514
+ *
2515
+ * Processes can be related to a special object type, but they don't have to. In addition to that they can refer
2516
+ * to dms objects.
2517
+ */
2518
+ class BpmService {
2519
+ constructor(capabilities, backend, eventService, inboxService) {
2520
+ this.capabilities = capabilities;
2521
+ this.backend = backend;
2522
+ this.eventService = eventService;
2523
+ this.inboxService = inboxService;
2524
+ this.processItemsSource = new ReplaySubject(1);
2525
+ /**
2526
+ * Long term observable emitting the current processes
2527
+ */
2528
+ this.processItems$ = this.processItemsSource.asObservable();
2529
+ }
2530
+ /**
2531
+ * Retrieve all processes of the current user.
2532
+ *
2533
+ * @param size Maximum number of processes to be fetched
2534
+ * @returns List of Processes
2535
+ */
2536
+ getProcesses(size = 1000) {
2537
+ return this.backend
2538
+ .getJson(`/process/user?size=${size}`, this.backend.getBpmBase())
2539
+ .pipe(map(response => response.content.map(item => new Process(item))), tap((processes) => {
2540
+ this.processItems = processes;
2541
+ this.processItemsSource.next(this.processItems);
2542
+ }));
2543
+ }
2544
+ /**
2545
+ * Getter for the executable Processes. If types are provided, you'll get
2546
+ * only the processes that are executable for all of them
2547
+ * @param types List of dms object types to fetch executable processes for
2548
+ * @param useCached If the cached data should be returned rather than requesting again
2549
+ * @param additionalData If the additional form data should be also included
2550
+ * @param modelid The process model ID to only return the data for one process
2551
+ * @returns List of executable processes
2552
+ */
2553
+ getExecutableProcesses(types, useCached, additionalData, modelid, global) {
2554
+ if (this.capabilities.hasCapability('bpm')) {
2555
+ return (!!this.executableProcesses && useCached) ? of(this.executableProcesses) : this.fetchExecutableProcesses(types, additionalData, modelid, global);
2741
2556
  }
2742
2557
  else {
2743
- let uri = `/ui/form/${objectTypeName}?situation=${situation}`;
2744
- uri += !!mode ? `&formmode=${mode}` : '';
2745
- /** fetch and cache the requested form, if no cached version was found */
2746
- return this.backend.getViaTempCache(uri, () => this.backend
2747
- .getJson(uri)
2748
- .pipe(tap((model) => this.objectTypeForms.push(_.cloneDeep(model)))));
2558
+ return of([]);
2749
2559
  }
2750
2560
  }
2561
+ initExecutableProcesses() {
2562
+ let uri = '/bpm/process/executable';
2563
+ return this.backend.get(uri).pipe(tap(res => this.hasMainExecutableProcesses = res?.length));
2564
+ }
2751
2565
  /**
2752
- * Fetches the backends system definition and updates system$ Observable.
2753
- * Subscribe to the system$ observable instead of calling this function, otherwise you'll trigger fetching the
2754
- * system definition every time.
2755
- *
2756
- * @param user The user to load the system definition for
2757
- * @returns true when successfull
2566
+ * Gets executable Processes for a given set of dms object.You'll get
2567
+ * only the processes that are executable for all of them.
2568
+ * @param dmsObjects List of dms objects to fetch executable processes for
2569
+ * @returns List of executable processes
2758
2570
  */
2759
- getSystemDefinition(user) {
2760
- this.user = user;
2761
- // todo: temporary: OrgChanges could not be recognized but affect object definition
2762
- return this.fetchSystemDefinition(user);
2763
- // todo: enable again when OrgChanges are recognizable (DO NOT DELETE!)
2764
- // // is there a cached version
2765
- // return this.appCache
2766
- // .getItem(this.appCache.SYSTEM_DEFINITION)
2767
- // .catch((error) => {
2768
- // this.logger.error('Error fetching cached version of system definition.', error);
2769
- // return this.fetchSystemDefinition(user);
2770
- // })
2771
- // .flatMap((cachedSystemDefinition: any) => {
2772
- //
2773
- // // yes? then check if it's up to date
2774
- // if (cachedSystemDefinition) {
2775
- //
2776
- // if (
2777
- // user.schema.version !== cachedSystemDefinition.info.version ||
2778
- // user.id !== cachedSystemDefinition.info.user ||
2779
- // user.getSchemaLocale() !== cachedSystemDefinition.info.locale
2780
- // ) {
2781
- // return this.fetchSystemDefinition(user);
2782
- // } else {
2783
- // // cache is up to date. return the cached one
2784
- // this.logger.debug('System definition is up to date, using cached version.', cachedSystemDefinition);
2785
- // this.system = cachedSystemDefinition;
2786
- // this.systemSource.next(this.system);
2787
- // return of(true);
2788
- // }
2789
- // } else {
2790
- // // no cached systemDefinition found
2791
- // return this.fetchSystemDefinition(user);
2792
- // }
2793
- // });
2571
+ getExecutableProcessesForDmsObjects(dmsObjects) {
2572
+ return this.getExecutableProcesses(dmsObjects.map(o => o.typeName), false, true);
2794
2573
  }
2795
2574
  /**
2796
- * Creates a value depending on a given Type
2797
- *
2798
- * @param string valueType
2799
- * @returns any
2575
+ * Fetches executable Processes from the backend.
2576
+ * @param types List of dms object types to fetch executable processes for
2577
+ * @param additionalData If the additional form data should be also included
2578
+ * @param modelid The process model ID to only return the data for one process
2579
+ * @returns List of executable processes
2800
2580
  */
2801
- getDefaultValue(valueType) {
2802
- let defaultValue;
2803
- switch (valueType) {
2804
- case 'CURRENT_USER': {
2805
- defaultValue = this.user.name;
2806
- break;
2807
- }
2808
- case 'CURRENT_USER_NAME': {
2809
- defaultValue = this.user.title;
2810
- break;
2811
- }
2812
- case 'CURRENT_DATETIME': {
2813
- defaultValue = new Date();
2814
- break;
2815
- }
2816
- case 'CURRENT_DATE': {
2817
- defaultValue = moment().startOf('day').toDate();
2818
- break;
2819
- }
2820
- case 'YEAR': {
2821
- defaultValue = moment().year();
2822
- break;
2823
- }
2824
- case 'MONTH': {
2825
- defaultValue = moment().month() + 1;
2826
- break;
2827
- }
2828
- case 'DAY': {
2829
- defaultValue = moment().date();
2830
- break;
2831
- }
2832
- case 'HOUR': {
2833
- defaultValue = moment().hour();
2834
- break;
2835
- }
2836
- case 'MINUTE': {
2837
- defaultValue = moment().minute();
2838
- break;
2839
- }
2840
- case 'SECOND': {
2841
- defaultValue = moment().second();
2842
- break;
2843
- }
2844
- case 'WEEK_OF_YEAR': {
2845
- defaultValue = moment().isoWeek();
2846
- break;
2847
- }
2848
- case 'FIRST_DAY_OF_WEEK': {
2849
- defaultValue = moment().startOf('isoWeek').toDate();
2850
- break;
2581
+ fetchExecutableProcesses(types, additionalData, modelid, global) {
2582
+ let uri = '/bpm/process/executable';
2583
+ if (additionalData) {
2584
+ uri += '?form=true&fields=true';
2585
+ }
2586
+ if (types) {
2587
+ uri += (additionalData ? '&' : '?') + `type=${types.join(',')}`;
2588
+ }
2589
+ if (modelid) {
2590
+ uri += (additionalData || types ? '&' : '?') + `modelid=${modelid}`;
2591
+ }
2592
+ return this.backend.get(uri).pipe(map(res => res), tap(res => {
2593
+ // Extend existing processes with additional data, instead of overwriting all processes
2594
+ if (global) {
2595
+ if (additionalData) {
2596
+ if (!this.executableProcesses) {
2597
+ this.executableProcesses = [];
2598
+ }
2599
+ res.forEach(proc => {
2600
+ const existingProcIndex = this.executableProcesses.findIndex(item => item.id === proc.id);
2601
+ if (existingProcIndex === -1) {
2602
+ this.executableProcesses.push(proc);
2603
+ }
2604
+ else {
2605
+ this.executableProcesses[existingProcIndex] = proc;
2606
+ }
2607
+ });
2608
+ }
2609
+ else {
2610
+ this.executableProcesses = res;
2611
+ }
2851
2612
  }
2852
- case 'FIRST_DAY_OF_MONTH': {
2853
- defaultValue = moment().startOf('month').toDate();
2854
- break;
2613
+ }));
2614
+ }
2615
+ /**
2616
+ * Getter for a processes file. The file of a process contains
2617
+ * dms objects attached to the process.
2618
+ * @param processId ID of the process to fetch attached objects for
2619
+ */
2620
+ getProcessFile(processId) {
2621
+ return this.backend
2622
+ .getJson(`/process/${processId}/file`, this.backend.getBpmBase()).pipe(map(res => res.content.map(i => {
2623
+ return {
2624
+ id: i.elementid,
2625
+ title: i.title,
2626
+ description: i.description ? i.description : '',
2627
+ iconid: i.iconid,
2628
+ creator: i.creator,
2629
+ addtime: i.addtime,
2630
+ type: i.type
2631
+ };
2632
+ })));
2633
+ }
2634
+ /**
2635
+ * Retrieves a work item.
2636
+ * @param processId ID of the parent process
2637
+ * @param itemId ID of the work item itself
2638
+ * @param options Options to be added to the backend call
2639
+ * @returns a WorkItem
2640
+ */
2641
+ getWorkItem(processId, itemId, options) {
2642
+ const params = options ? options : { form: true, fields: true };
2643
+ const tasks = [
2644
+ this.backend.getJson(Utils.buildUri(`/bpm/process/${processId}/${itemId}`, params)),
2645
+ this.getProcessFile(processId)
2646
+ ];
2647
+ return forkJoin(tasks).pipe(map(res => {
2648
+ const wi = new WorkItem(res[0]);
2649
+ wi.setFile(res[1]);
2650
+ return wi;
2651
+ }));
2652
+ }
2653
+ /**
2654
+ * Saves a work item.
2655
+ * @param item The work item to be saved
2656
+ * @returns The updated WorkItem
2657
+ */
2658
+ saveWorkItem(item) {
2659
+ const { id, processId, file, data } = item;
2660
+ const payload = { contents: file, data };
2661
+ const params = { keeplock: true, isautolock: false };
2662
+ return this.backend
2663
+ .post(Utils.buildUri(`/bpm/process/${processId}/${id}/save`, params), payload)
2664
+ .pipe(mergeMap(() => this.getWorkItem(processId, id)));
2665
+ }
2666
+ /**
2667
+ * Forwards a work item. If a WorkItem provides different actions (@link WorkItemAction)
2668
+ * you can provide the selected action too.
2669
+ * @param item The work item to be forwarded
2670
+ * @param action Action used for forwarding
2671
+ */
2672
+ forwardWorkItem(item, action) {
2673
+ const params = { keeplock: false, isautolock: false };
2674
+ const payload = {
2675
+ action: action,
2676
+ contents: item.file,
2677
+ data: item.data
2678
+ };
2679
+ return this.backend
2680
+ .post(Utils.buildUri(`/bpm/process/${item.processId}/${item.id}/save`, params), payload)
2681
+ .pipe(tap(() => this.inboxService.updateInboxItems(item.id)));
2682
+ }
2683
+ /**
2684
+ * Locks a WorkItem for the current user (personalization), meaning that the
2685
+ * current user is now in charge of fulfilling the WorkItem task.
2686
+ * @param item The WorkItem to be locked
2687
+ * @returns The updated WorkItem
2688
+ */
2689
+ lockWorkItem(item) {
2690
+ return this.backend.put(`/bpm/process/${item.processId}/${item.id}/lock`)
2691
+ .pipe(mergeMap(() => this.getWorkItem(item.processId, item.id)));
2692
+ }
2693
+ /**
2694
+ * Releases the lock for a WorkItem.
2695
+ * @param item The work item to be unlocked
2696
+ * @returns The updated WorkItem
2697
+ */
2698
+ unlockWorkItem(item) {
2699
+ return this.backend.del(`/bpm/process/${item.processId}/${item.id}/lock`).pipe(mergeMap(() => this.getWorkItem(item.processId, item.id)));
2700
+ }
2701
+ /**
2702
+ * Starts an executable process.
2703
+ * @param executableProcessId ID of the executable Process to be started
2704
+ * @param data Data to be passed to the process (simple object of key/value pairs)
2705
+ * @param contents Objects to be attached to the process (process.file).
2706
+ */
2707
+ startProcess(executableProcessId, data, contents) {
2708
+ return this.backend.post(`/bpm/process/?modelid=${executableProcessId}`, {
2709
+ data: data,
2710
+ contents: contents
2711
+ });
2712
+ }
2713
+ /**
2714
+ * Returns the history for a process. Which entries are returned depends on the
2715
+ * permissions of the current user.
2716
+ * @param processId The ID of the process to fetch history for
2717
+ * @returns Observable<WorkItemHistoryEntry[]>
2718
+ */
2719
+ getProcessHistory(processId) {
2720
+ return this.backend
2721
+ .getJson(`/bpm/process/${processId}/history`)
2722
+ .pipe(map(res => res && res.length ? res.map(item => new WorkItemHistoryEntry(item)) : []));
2723
+ }
2724
+ /**
2725
+ * Removes a content from the work items file.
2726
+ * @param processId The ID of the process to remove the item from
2727
+ * @param workItemId The ID of the work item containing the file element to be removed
2728
+ * @param workItemContentId The the ID of the file element to be removed
2729
+ */
2730
+ removeFileElement(processId, workItemId, workItemContentId) {
2731
+ return this.backend
2732
+ .del(`/process/${processId}/file/${workItemContentId}?activityid=${workItemId}`, this.backend.getBpmBase());
2733
+ }
2734
+ /**
2735
+ * Add contents to a work items file.
2736
+ * @param processId The ID of the process
2737
+ * @param workItemId The ID of the activity
2738
+ * @param elements The Elements to be added
2739
+ * @returns The updated WorkItem
2740
+ */
2741
+ addFileElements(processId, workItemId, elements) {
2742
+ const tasks = [];
2743
+ elements.forEach((e) => {
2744
+ tasks.push(this.backend.post(`/process/${processId}/file/${e.id}?type=${e.type.name}&activityid=${workItemId}`, {}, this.backend.getBpmBase()));
2745
+ });
2746
+ return forkJoin(tasks)
2747
+ .pipe(mergeMap(() => this.getWorkItem(processId, workItemId)));
2748
+ }
2749
+ /**
2750
+ * Add a objects from the clipboard to a WorkItem.
2751
+ * @param workItem The workItem to add the objects to
2752
+ * @param clipboard Clipboard object holding user selected objects
2753
+ * @returns The updated WorkItem
2754
+ */
2755
+ addFileElementsFromClipboard(workItem, clipboard) {
2756
+ if ((workItem && workItem.fileEntryPermissions.add) && clipboard && clipboard.elements.length && clipboard.action === ClipboardAction.COPY) {
2757
+ let contents;
2758
+ if (workItem.file.length) {
2759
+ // only add items that are not already part of the attachments
2760
+ const attachmentIds = workItem.file.map(e => e.id);
2761
+ contents = clipboard.elements.filter(e => attachmentIds.indexOf(e.id) === -1);
2855
2762
  }
2856
- case 'FIRST_DAY_OF_YEAR': {
2857
- defaultValue = moment().startOf('year').toDate();
2858
- break;
2763
+ else {
2764
+ contents = clipboard.elements;
2859
2765
  }
2766
+ return this.addFileElements(workItem.processId, workItem.id, contents);
2767
+ }
2768
+ else {
2769
+ return throwError('error');
2860
2770
  }
2861
- return defaultValue;
2862
2771
  }
2772
+ }
2773
+ BpmService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BpmService, deps: [{ token: CapabilitiesService }, { token: BackendService }, { token: EventService }, { token: InboxService }], target: i0.ɵɵFactoryTarget.Injectable });
2774
+ BpmService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BpmService, providedIn: 'root' });
2775
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BpmService, decorators: [{
2776
+ type: Injectable,
2777
+ args: [{
2778
+ providedIn: 'root'
2779
+ }]
2780
+ }], ctorParameters: function () { return [{ type: CapabilitiesService }, { type: BackendService }, { type: EventService }, { type: InboxService }]; } });
2781
+
2782
+ /**
2783
+ * Representation of a prepared item. A prepared item is an item that is supposed to create a new dms object.
2784
+ * Adding a new object to yuuvis<sup>&reg;</sup> RAD starts with a prepared item. If all the required properties are set up, the item
2785
+ * will be used to create a new dms object.
2786
+ */
2787
+ class PreparedItem {
2863
2788
  /**
2864
- * Fetches the system definition from the server. Provided params are used for storing the
2865
- * recent version in cache.
2866
- *
2867
- * @param user The user to fetch the system definition for
2868
- * @return boolean
2789
+ * Prepared items title
2869
2790
  */
2870
- fetchSystemDefinition(user) {
2871
- const fetches = [
2872
- this.backend.getJson('/system/type/list?elements=true&basetypes=true'),
2873
- this.backend.getJson('/system/cs/list?elements=true')
2874
- ];
2875
- return forkJoin(fetches)
2876
- .pipe(catchError(Utils.catch((error) => {
2877
- this.logger.error('Error fetching recent version of system definition from server.', error);
2878
- this.systemSource.error('Error fetching recent version of system definition from server.');
2879
- })), map((data) => {
2880
- this.objectTypeForms = [];
2881
- const system = {
2882
- /**
2883
- * info about the current system definition
2884
- */
2885
- info: {
2886
- user: user.id,
2887
- locale: user.getSchemaLocale(),
2888
- version: user.schema.version
2889
- },
2890
- /**
2891
- * supported backend locales
2892
- */
2893
- locales: user.schema.supportedLocales,
2894
- /**
2895
- * object type definitions
2896
- */
2897
- types: [],
2898
- /**
2899
- * codesystems cache
2900
- */
2901
- codesystems: []
2902
- };
2903
- const types = data[0];
2904
- system.types = types.map(t => new ObjectType(t));
2905
- system.codesystems = data[1];
2906
- this.system = system;
2907
- this.systemSource.next(system);
2908
- this.logger.debug('Fetched new version of system definition (user: ' + user.id + ', version: ' + user.schema.version + ').');
2909
- this.appCache
2910
- .setItem(this.appCache.SYSTEM_DEFINITION, system)
2911
- .subscribe(() => {
2912
- this.logger.debug('Cached recent version');
2913
- }, Utils.logError(null, 'Error caching recent version of system definition.'));
2914
- return true;
2915
- }));
2791
+ get title() {
2792
+ return this.selectedtype ? this.selectedtype.label : '';
2793
+ }
2794
+ /**
2795
+ * Creates a new instance
2796
+ * @param json The JSON object received from the backend. This will be used to construct the new prepared item instance
2797
+ */
2798
+ constructor(json) {
2799
+ Object.assign(this, json);
2800
+ }
2801
+ /**
2802
+ * Returns true if the preparedItem contains content (template or actual file), false otherwise
2803
+ */
2804
+ hasContent() {
2805
+ return !!this.template || this.contentcount > 0;
2916
2806
  }
2917
2807
  /**
2918
- * Retrieve an organization object by its ID
2919
- * @param id ID of org object
2808
+ * Retrieves the prepared items selected type object from the list
2809
+ * of available types.
2810
+ * @returns The type object that is selected or NULL
2920
2811
  */
2921
- getOrganizationObjectById(id) {
2922
- return this.backend.getJson(`/organization/id/${id}`);
2812
+ getSelectedTypeObject() {
2813
+ return this.types.find(t => t.selected);
2923
2814
  }
2815
+ }
2816
+
2817
+ class UploadTarget {
2924
2818
  /**
2925
- * Fetches the organization object for a given name.
2819
+ * Creates a new instance of UploadTarget
2926
2820
  *
2927
- * @param name The name to fetch object for
2928
- * @returns
2821
+ * @param id Upload targets unique id
2822
+ * @param type Upload targets type
2929
2823
  */
2930
- getOrganizationObject(name) {
2931
- return this.getOrganizationObjects([name]).pipe(map(res => res[0]));
2824
+ constructor(id, type) {
2825
+ this.id = id;
2826
+ this.type = type;
2932
2827
  }
2933
2828
  /**
2934
- * Fetches a collection of organization objects
2829
+ * Return Method if the Upload is Successfull
2935
2830
  *
2936
- * @param names Array of names to fetch objects for
2937
- * @returns A Array of Organization Objects
2831
+ * @param target
2832
+ * @returns the provided UploadTarget if the Upload was Successfull.
2938
2833
  */
2939
- getOrganizationObjects(names) {
2940
- const toFetch = names.map(name => this.backend.getJson(`/organization/name/${name}`).pipe(catchError(error => of({ id: name, active: false }))));
2941
- return forkJoin(toFetch);
2834
+ onUploadSuccess(target) {
2835
+ return target;
2942
2836
  }
2943
2837
  /**
2944
- * Fetches a collection of organization roles
2838
+ * Return method if the Upload fails
2945
2839
  *
2946
- * @return A Array of Organization Roles
2840
+ * @returns an empty Object if the Upload fails
2947
2841
  */
2948
- getRoles() {
2949
- if (this.cachedRoles.length) {
2950
- return of(this.cachedRoles);
2951
- }
2952
- else {
2953
- return this.backend
2954
- .get('/organization/role')
2955
- .pipe(map(o => o), tap(roles => (this.cachedRoles = roles)));
2956
- }
2842
+ onUploadFail() {
2843
+ return {};
2957
2844
  }
2958
2845
  }
2959
- SystemService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: SystemService, deps: [{ token: BackendService }, { token: Logger }, { token: EventService }, { token: AppCacheService }], target: i0.ɵɵFactoryTarget.Injectable });
2960
- SystemService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: SystemService, providedIn: 'root' });
2961
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: SystemService, decorators: [{
2962
- type: Injectable,
2963
- args: [{
2964
- providedIn: 'root'
2965
- }]
2966
- }], ctorParameters: function () { return [{ type: BackendService }, { type: Logger }, { type: EventService }, { type: AppCacheService }]; } });
2846
+ /**
2847
+ * general filing target
2848
+ */
2849
+ UploadTarget.ROOT = 'root';
2850
+ /**
2851
+ * add file(s) to context folder
2852
+ */
2853
+ UploadTarget.CONTEXT = 'context';
2854
+ /**
2855
+ * add file(s) to context folders dynamic structure
2856
+ */
2857
+ UploadTarget.CONTEXT_TREE = 'contexttree';
2858
+ /**
2859
+ * set/replace content file of a dms object
2860
+ */
2861
+ UploadTarget.OBJECT = 'object';
2862
+ /**
2863
+ * custom targets (e.g. for plugin development)
2864
+ */
2865
+ UploadTarget.CUSTOM = 'custom';
2866
+
2867
+ var Direction;
2868
+ (function (Direction) {
2869
+ Direction["LTR"] = "ltr";
2870
+ Direction["RTL"] = "rtl";
2871
+ })(Direction || (Direction = {}));
2967
2872
 
2968
2873
  /**
2969
2874
  * Applications user service.
@@ -3293,15 +3198,25 @@ class UserService {
3293
3198
  this.refreshCurrentUser().subscribe();
3294
3199
  }));
3295
3200
  }
3201
+ /**
3202
+ * Save or change the workspace of the current user
3203
+ * @param workspaceConfig The value to set the saved workspace or create a new workspace
3204
+ */
3205
+ saveChangeWorkspace(workspaceConfig) {
3206
+ this.user.userSettings.workspaceOptions = workspaceConfig;
3207
+ return this.backend.put('/user/config/web', this.user.userSettings).pipe(map(() => {
3208
+ this.refreshCurrentUser().subscribe();
3209
+ }));
3210
+ }
3296
3211
  }
3297
- UserService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: UserService, deps: [{ token: BackendService }, { token: i2.TranslateService }, { token: Logger }, { token: EventService }, { token: SystemService }, { token: i1$1.HttpClient }, { token: Config }], target: i0.ɵɵFactoryTarget.Injectable });
3212
+ UserService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: UserService, deps: [{ token: BackendService }, { token: i1.TranslateService }, { token: Logger }, { token: EventService }, { token: SystemService }, { token: i1$1.HttpClient }, { token: Config }], target: i0.ɵɵFactoryTarget.Injectable });
3298
3213
  UserService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: UserService, providedIn: 'root' });
3299
3214
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: UserService, decorators: [{
3300
3215
  type: Injectable,
3301
3216
  args: [{
3302
3217
  providedIn: 'root'
3303
3218
  }]
3304
- }], ctorParameters: function () { return [{ type: BackendService }, { type: i2.TranslateService }, { type: Logger }, { type: EventService }, { type: SystemService }, { type: i1$1.HttpClient }, { type: Config }]; } });
3219
+ }], ctorParameters: function () { return [{ type: BackendService }, { type: i1.TranslateService }, { type: Logger }, { type: EventService }, { type: SystemService }, { type: i1$1.HttpClient }, { type: Config }]; } });
3305
3220
 
3306
3221
  /**
3307
3222
  * The Upload Service is provides access to Upload data (files)
@@ -3352,6 +3267,14 @@ class PrepareService {
3352
3267
  this.preparedItems$ = this.preparedItemsSource.asObservable();
3353
3268
  this.preparedItemCountSource = new ReplaySubject(1);
3354
3269
  this.preparedItemCount$ = this.preparedItemCountSource.asObservable();
3270
+ /**
3271
+ * Creates a prepared item on the backed side.
3272
+ *
3273
+ * @param parentId The ID of the parent dms object to add the prepared item to
3274
+ * @param childType The type of object to be created
3275
+ * @returns Observable<any>
3276
+ */
3277
+ this.i = 0;
3355
3278
  }
3356
3279
  /**
3357
3280
  * Public Fetch Prepare items
@@ -3370,14 +3293,9 @@ class PrepareService {
3370
3293
  this.preparedItemCountSource.next(this.preparedItemCount);
3371
3294
  });
3372
3295
  }
3373
- /**
3374
- * Creates a prepared item on the backed side.
3375
- *
3376
- * @param parentId The ID of the parent dms object to add the prepared item to
3377
- * @param childType The type of object to be created
3378
- * @returns Observable<any>
3379
- */
3380
3296
  createPreparedItem(parentId, childType) {
3297
+ console.log('tick');
3298
+ this.i++;
3381
3299
  return this.backend
3382
3300
  .post(this.createPreparedItemPostUrl({
3383
3301
  parentId: parentId,
@@ -3544,7 +3462,7 @@ class PrepareService {
3544
3462
  * @returns Observable<any>
3545
3463
  */
3546
3464
  uploadContent(preparedItemId, file) {
3547
- const uri = `${this.backend.getServiceBase()}/prepare/${preparedItemId}/content.json?form=true&contentmeta=true`;
3465
+ const uri = `${this.backend.getBaseWithContext(this.backend.getServiceBase())}/prepare/${preparedItemId}/content.json?form=true&contentmeta=true`;
3548
3466
  return this.uploadService
3549
3467
  .upload(uri, [file])
3550
3468
  .pipe(
@@ -3580,7 +3498,7 @@ class PrepareService {
3580
3498
  *
3581
3499
  * @type string
3582
3500
  */
3583
- uri = this.backend.getServiceBase() + this.createPreparedItemPostUrl({
3501
+ uri = this.backend.getBaseWithContext(this.backend.getServiceBase()) + this.createPreparedItemPostUrl({
3584
3502
  parentId: null,
3585
3503
  createMany: !useBatchUpload
3586
3504
  });
@@ -3590,7 +3508,7 @@ class PrepareService {
3590
3508
  * upload to dms object, means adding or replacing content file
3591
3509
  */
3592
3510
  const { referenceObject } = uploadTarget;
3593
- uri = `${this.backend.getServiceBase()}/dms/${referenceObject.id}/contents?type=${referenceObject.type.name}`;
3511
+ uri = `${this.backend.getBaseWithContext(this.backend.getServiceBase())}/dms/${referenceObject.id}/contents?type=${referenceObject.type.name}`;
3594
3512
  }
3595
3513
  else if (uploadTarget.type === UploadTarget.CONTEXT || uploadTarget.type === UploadTarget.CONTEXT_TREE) {
3596
3514
  /**
@@ -3600,7 +3518,7 @@ class PrepareService {
3600
3518
  *
3601
3519
  * @type string
3602
3520
  */
3603
- uri = this.backend.getServiceBase() + this.createPreparedItemPostUrl({
3521
+ uri = this.backend.getBaseWithContext(this.backend.getServiceBase()) + this.createPreparedItemPostUrl({
3604
3522
  parentId: uploadTarget.referenceObject.id,
3605
3523
  createMany: !useBatchUpload,
3606
3524
  childType: uploadTarget.subFolder && uploadTarget.subFolder.data.type ? uploadTarget.subFolder.data.type : null
@@ -3842,17 +3760,14 @@ class AuthService {
3842
3760
  /**
3843
3761
  * @ignore
3844
3762
  */
3845
- constructor(config, coreConfig, appCache, envService, http, bpmService, ngZone, location, capabilitiesService, logger, inboxService, prepareService, backend, systemService, userService, eventService, systemStatusService, storage, local) {
3763
+ constructor(config, coreConfig, envService, http, bpmService, ngZone, capabilitiesService, inboxService, prepareService, backend, systemService, userService, eventService, systemStatusService, storage, local) {
3846
3764
  this.config = config;
3847
3765
  this.coreConfig = coreConfig;
3848
- this.appCache = appCache;
3849
3766
  this.envService = envService;
3850
3767
  this.http = http;
3851
3768
  this.bpmService = bpmService;
3852
3769
  this.ngZone = ngZone;
3853
- this.location = location;
3854
3770
  this.capabilitiesService = capabilitiesService;
3855
- this.logger = logger;
3856
3771
  this.inboxService = inboxService;
3857
3772
  this.prepareService = prepareService;
3858
3773
  this.backend = backend;
@@ -4161,7 +4076,7 @@ class AuthService {
4161
4076
  return forkJoin(todo).pipe(map(() => currUser));
4162
4077
  }
4163
4078
  }
4164
- AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: AuthService, deps: [{ token: Config }, { token: CORE_CONFIG }, { token: AppCacheService }, { token: EnvironmentService }, { token: i1$1.HttpClient }, { token: BpmService }, { token: i0.NgZone }, { token: i6.PlatformLocation }, { token: CapabilitiesService }, { token: Logger }, { token: InboxService }, { token: PrepareService }, { token: BackendService }, { token: SystemService }, { token: UserService }, { token: EventService }, { token: SystemStatusService }, { token: i1.LocalStorage }, { token: LocalStorageService }], target: i0.ɵɵFactoryTarget.Injectable });
4079
+ AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: AuthService, deps: [{ token: Config }, { token: CORE_CONFIG }, { token: EnvironmentService }, { token: i1$1.HttpClient }, { token: BpmService }, { token: i0.NgZone }, { token: CapabilitiesService }, { token: InboxService }, { token: PrepareService }, { token: BackendService }, { token: SystemService }, { token: UserService }, { token: EventService }, { token: SystemStatusService }, { token: i1$2.LocalStorage }, { token: LocalStorageService }], target: i0.ɵɵFactoryTarget.Injectable });
4165
4080
  AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: AuthService, providedIn: 'root' });
4166
4081
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: AuthService, decorators: [{
4167
4082
  type: Injectable,
@@ -4171,7 +4086,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
4171
4086
  }], ctorParameters: function () { return [{ type: Config }, { type: CoreConfig, decorators: [{
4172
4087
  type: Inject,
4173
4088
  args: [CORE_CONFIG]
4174
- }] }, { type: AppCacheService }, { type: EnvironmentService }, { type: i1$1.HttpClient }, { type: BpmService }, { type: i0.NgZone }, { type: i6.PlatformLocation }, { type: CapabilitiesService }, { type: Logger }, { type: InboxService }, { type: PrepareService }, { type: BackendService }, { type: SystemService }, { type: UserService }, { type: EventService }, { type: SystemStatusService }, { type: i1.LocalStorage }, { type: LocalStorageService }]; } });
4089
+ }] }, { type: EnvironmentService }, { type: i1$1.HttpClient }, { type: BpmService }, { type: i0.NgZone }, { type: CapabilitiesService }, { type: InboxService }, { type: PrepareService }, { type: BackendService }, { type: SystemService }, { type: UserService }, { type: EventService }, { type: SystemStatusService }, { type: i1$2.LocalStorage }, { type: LocalStorageService }]; } });
4175
4090
 
4176
4091
  /**
4177
4092
  * Main initialization service of the eoFrameworkCore module. The `load()` function will contain
@@ -4236,42 +4151,89 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
4236
4151
 
4237
4152
  /**
4238
4153
  * @ignore
4239
- * logger logging values to the ambient console object.
4154
+ * APP_INITIALIZER function
4240
4155
  */
4241
- class ConsoleLogService {
4242
- apply(fn, args) {
4243
- return console && console[fn] && console[fn](...args);
4244
- }
4245
- assert(...args) {
4246
- this.apply('assert', args);
4247
- }
4248
- debug(...args) {
4249
- this.apply('debug', args);
4250
- }
4251
- error(...args) {
4252
- this.apply('error', args);
4253
- }
4254
- group(...args) {
4255
- this.apply('group', args);
4256
- }
4257
- groupEnd(...args) {
4258
- this.apply('groupEnd', args);
4156
+ function init_module(coreInit) {
4157
+ // Need to set to a const before returning due to:
4158
+ // @see: https://github.com/angular/angular/issues/14485
4159
+ const fnc = () => coreInit.initialize();
4160
+ return fnc;
4161
+ }
4162
+
4163
+ /**
4164
+ * @ignore
4165
+ * Handles missing translations
4166
+ */
4167
+ class EoxMissingTranslationHandler {
4168
+ /**
4169
+ *
4170
+ * @param MissingTranslationHandlerParams params
4171
+ * @returns string
4172
+ */
4173
+ handle(params) {
4174
+ return '!missing key: ' + params.key;
4259
4175
  }
4260
- info(...args) {
4261
- this.apply('info', args);
4176
+ }
4177
+
4178
+ /**
4179
+ * @ignore
4180
+ * Loader that fetches translations based on the configured locations
4181
+ */
4182
+ let EoxTranslateJsonLoader = class EoxTranslateJsonLoader {
4183
+ constructor(http, config) {
4184
+ this.http = http;
4185
+ this.config = config;
4186
+ registerLocaleData(localeDe, 'de', localeExtraDe); // German
4187
+ registerLocaleData(localeAr, 'ar', localeExtraAr); // Arabic
4188
+ registerLocaleData(localeEs, 'es', localeExtraEs); // Spanish
4189
+ registerLocaleData(localePt, 'pt', localeExtraPt); // Portuguese
4190
+ registerLocaleData(localeFr, 'fr', localeExtraFr); // French
4191
+ registerLocaleData(localeZh, 'zh', localeExtraZh); // Chinese
4192
+ registerLocaleData(localeLv, 'lv', localeExtraLv); // Latvian
4193
+ registerLocaleData(localeRu, 'ru', localeExtraRu); // Russian
4194
+ registerLocaleData(localeIt, 'it', localeExtraIt); // Italian
4195
+ registerLocaleData(localeNl, 'nl', localeExtraNl); // Dutch
4196
+ registerLocaleData(localeSk, 'sk', localeExtraSk); // Slovak
4197
+ registerLocaleData(localePl, 'pl', localeExtraPl); // Polish
4198
+ registerLocaleData(localeUk, 'uk', localeExtraUk); // Ukrainian
4199
+ registerLocaleData(localeJa, 'ja', localeExtraJa); // Japanese
4200
+ registerLocaleData(localeKo, 'ko', localeExtraKo); // Korean
4201
+ registerLocaleData(localeHi, 'hi', localeExtraHi); // Hindi
4202
+ registerLocaleData(localeBn, 'bn', localeExtraBn); // Bengalese
4203
+ registerLocaleData(localeDeCh, 'de-CH', localeExtraDeCh); // German (switzerland)
4204
+ registerLocaleData(localeZhHant, 'zh-Hant', localeExtraZhHant); // Chinese (traditional)
4205
+ registerLocaleData(localeTh, 'th', localeExtraTh); // Thai
4206
+ registerLocaleData(localeVi, 'vi', localeExtraVi); // Vietnamese
4207
+ registerLocaleData(localeEnGb, 'en-GB', localeExtraEnGb); // English (Great-Britain)
4208
+ registerLocaleData(localeHe, 'he', localeExtraHe); // Hebrew
4209
+ registerLocaleData(localeFi, 'fi', localeExtraFi); // Finish
4210
+ registerLocaleData(localeDa, 'da', localeExtraDa); // Danish
4211
+ registerLocaleData(localeSe, 'se', localeExtraSe); // Swedish
4212
+ registerLocaleData(localeNb, 'nb', localeExtraNb); // Norwegian Bokmål
4213
+ registerLocaleData(localeNn, 'nn', localeExtraNn); // Norwegian Nynorsk
4214
+ registerLocaleData(localeId, 'id', localeExtraId); // Indonesian
4215
+ registerLocaleData(localeMs, 'ms', localeExtraMs); // Malay
4262
4216
  }
4263
- log(...args) {
4264
- this.apply('log', args);
4217
+ /**
4218
+ *
4219
+ * @param string lang
4220
+ * @returns Observable<Object>
4221
+ */
4222
+ getTranslation(lang) {
4223
+ return forkJoin(this.config.translations.map(folder => this.loadTranslationFile(folder, lang))).pipe(map((res) => res.reduce((acc, x) => Object.assign(acc, x), {})));
4265
4224
  }
4266
- warn(...args) {
4267
- this.apply('warn', args);
4225
+ loadTranslationFile(folder, lang) {
4226
+ return this.http.get(`${folder}${lang}.json`).pipe(catchError((e) => {
4227
+ // ISO codes with more than 2 characters are sub-languages like de-CH.
4228
+ // If there is no translation file for that sub-language we'll try to load
4229
+ // the file for the base language (in this case de).
4230
+ return lang.length > 2 ? this.loadTranslationFile(folder, lang.substring(0, 2)) : of({});
4231
+ }));
4268
4232
  }
4269
- }
4270
- ConsoleLogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ConsoleLogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4271
- ConsoleLogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ConsoleLogService });
4272
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ConsoleLogService, decorators: [{
4273
- type: Injectable
4274
- }] });
4233
+ };
4234
+ EoxTranslateJsonLoader = __decorate([
4235
+ __param(1, Inject(CORE_CONFIG))
4236
+ ], EoxTranslateJsonLoader);
4275
4237
 
4276
4238
  /**
4277
4239
  * `EoSharedModule` re-exports ToastrModule, TranslateModule so you can use directives
@@ -4317,6 +4279,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
4317
4279
  type: Injectable
4318
4280
  }], ctorParameters: function () { return [{ type: AuthService }]; } });
4319
4281
 
4282
+ /**
4283
+ * @ignore
4284
+ * logger logging values to the ambient console object.
4285
+ */
4286
+ class ConsoleLogService {
4287
+ apply(fn, args) {
4288
+ return console && console[fn] && console[fn](...args);
4289
+ }
4290
+ assert(...args) {
4291
+ this.apply('assert', args);
4292
+ }
4293
+ debug(...args) {
4294
+ this.apply('debug', args);
4295
+ }
4296
+ error(...args) {
4297
+ this.apply('error', args);
4298
+ }
4299
+ group(...args) {
4300
+ this.apply('group', args);
4301
+ }
4302
+ groupEnd(...args) {
4303
+ this.apply('groupEnd', args);
4304
+ }
4305
+ info(...args) {
4306
+ this.apply('info', args);
4307
+ }
4308
+ log(...args) {
4309
+ this.apply('log', args);
4310
+ }
4311
+ warn(...args) {
4312
+ this.apply('warn', args);
4313
+ }
4314
+ }
4315
+ ConsoleLogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ConsoleLogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4316
+ ConsoleLogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ConsoleLogService });
4317
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ConsoleLogService, decorators: [{
4318
+ type: Injectable
4319
+ }] });
4320
+
4320
4321
  /**
4321
4322
  * Main module for connecting an app to an yuuvis<sup>&reg;</sup> RAD backend. To use it just import int in your app module:
4322
4323
  *
@@ -4374,7 +4375,7 @@ class EoCoreModule {
4374
4375
  }
4375
4376
  }
4376
4377
  EoCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: EoCoreModule, deps: [{ token: EoCoreModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule });
4377
- EoCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: EoCoreModule, imports: [HttpClientModule, i2.TranslateModule, i1$2.ToastrModule], exports: [EoSharedModule] });
4378
+ EoCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: EoCoreModule, imports: [HttpClientModule, i1.TranslateModule, i1$3.ToastrModule], exports: [EoSharedModule] });
4378
4379
  EoCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: EoCoreModule, providers: [
4379
4380
  {
4380
4381
  /**
@@ -5048,22 +5049,20 @@ class DmsService {
5048
5049
  }));
5049
5050
  }
5050
5051
  /**
5051
- * Setter for Organization Objects With Read Rights
5052
- *
5053
- * @param DmsObject[] dmsObjects
5054
- * @param string[] orgaNames
5055
- * @param string[] orgaNameWithChildren
5056
- * @param id
5057
- * @returns Observable<any>
5052
+ * Shares a dms object (and its children) with certain users
5053
+ * @param dmsObject The dms object to be shared
5054
+ * @param shareWith Array of organization objects to share the object with. Each entry
5055
+ * will have the ID of the target organization object as well as an optional param
5056
+ * whether or not to also share the dms objects children.
5057
+ * @returns Observable being resolved once the request is done
5058
5058
  */
5059
- setOrganizationObjectsWithReadRights(dmsObjects, id, orgaNames, orgaNameWithChildren) {
5060
- const url = `/dms/${id}/share`;
5061
- const shares = [
5062
- ...orgaNameWithChildren.map(field => ({ organizationobject: field, sharechildren: true })),
5063
- ...orgaNames.map(name => ({ organizationobject: name, sharechildren: false }))
5064
- ];
5065
- const data = { shares };
5066
- return this.triggerUpdate(dmsObjects[0], this.backend.put(url, data));
5059
+ share(dmsObject, shareWith) {
5060
+ return this.triggerUpdate(dmsObject, this.backend.put(`/dms/${dmsObject.id}/share`, {
5061
+ shares: shareWith.map(i => ({
5062
+ organizationobject: i.id,
5063
+ sharechildren: !!i.shareChildren
5064
+ }))
5065
+ }));
5067
5066
  }
5068
5067
  /**
5069
5068
  * Move a DMS Object
@@ -5301,14 +5300,14 @@ class NotificationsService {
5301
5300
  }
5302
5301
  }
5303
5302
  }
5304
- NotificationsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: NotificationsService, deps: [{ token: i1$2.ToastrService }], target: i0.ɵɵFactoryTarget.Injectable });
5303
+ NotificationsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: NotificationsService, deps: [{ token: i1$3.ToastrService }], target: i0.ɵɵFactoryTarget.Injectable });
5305
5304
  NotificationsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: NotificationsService, providedIn: 'root' });
5306
5305
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: NotificationsService, decorators: [{
5307
5306
  type: Injectable,
5308
5307
  args: [{
5309
5308
  providedIn: 'root'
5310
5309
  }]
5311
- }], ctorParameters: function () { return [{ type: i1$2.ToastrService }]; } });
5310
+ }], ctorParameters: function () { return [{ type: i1$3.ToastrService }]; } });
5312
5311
 
5313
5312
  /**
5314
5313
  * Collection of Search Services
@@ -6132,10 +6131,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
6132
6131
  * Collection of Signing Services
6133
6132
  */
6134
6133
  class SigningService {
6135
- constructor(backend, translate) {
6134
+ constructor(backend, capabilities, translate) {
6136
6135
  this.backend = backend;
6136
+ this.capabilities = capabilities;
6137
6137
  this.translate = translate;
6138
6138
  }
6139
+ canSign() {
6140
+ return this.capabilities.getCapabilities().signing;
6141
+ }
6139
6142
  /**
6140
6143
  * Sign the document of a DMS Object
6141
6144
  * @param id the id of the dms object
@@ -6144,7 +6147,7 @@ class SigningService {
6144
6147
  */
6145
6148
  signDocument(id, signingData) {
6146
6149
  const uri = `/request/${id}`;
6147
- return this.backend.post(uri, signingData, '/signing');
6150
+ return this.canSign ? this.backend.post(uri, signingData, '/signing') : of(null);
6148
6151
  }
6149
6152
  /**
6150
6153
  * Cancels the signing process of a DMS Object
@@ -6231,14 +6234,14 @@ class SigningService {
6231
6234
  return item.data.yuvsigstatus === 'inprocess';
6232
6235
  }
6233
6236
  }
6234
- SigningService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: SigningService, deps: [{ token: BackendService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
6237
+ SigningService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: SigningService, deps: [{ token: BackendService }, { token: CapabilitiesService }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
6235
6238
  SigningService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: SigningService, providedIn: 'root' });
6236
6239
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: SigningService, decorators: [{
6237
6240
  type: Injectable,
6238
6241
  args: [{
6239
6242
  providedIn: 'root'
6240
6243
  }]
6241
- }], ctorParameters: function () { return [{ type: BackendService }, { type: i2.TranslateService }]; } });
6244
+ }], ctorParameters: function () { return [{ type: BackendService }, { type: CapabilitiesService }, { type: i1.TranslateService }]; } });
6242
6245
 
6243
6246
  class UploadFileItem {
6244
6247
  /**