@kalisio/kdk 1.3.6 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (577) hide show
  1. package/.nyc_output/{0d403586-0c7c-4336-94d1-a49e9f02a905.json → 058fc679-d60a-4501-ac04-71171e5200b8.json} +0 -0
  2. package/.nyc_output/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +1 -0
  3. package/.nyc_output/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +1 -0
  4. package/.nyc_output/{21dd57bd-48c5-41c8-8800-252db32a9366.json → 8b1830fa-932e-4a61-9837-4a5b18f83ea9.json} +0 -0
  5. package/.nyc_output/{3eb3a2ca-53c2-4551-ba6b-adf70f9a53cd.json → afd2d144-3570-4858-b94a-b523dbd023dd.json} +0 -0
  6. package/.nyc_output/processinfo/058fc679-d60a-4501-ac04-71171e5200b8.json +1 -0
  7. package/.nyc_output/processinfo/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +1 -0
  8. package/.nyc_output/processinfo/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +1 -0
  9. package/.nyc_output/processinfo/8b1830fa-932e-4a61-9837-4a5b18f83ea9.json +1 -0
  10. package/.nyc_output/processinfo/afd2d144-3570-4858-b94a-b523dbd023dd.json +1 -0
  11. package/.nyc_output/processinfo/index.json +1 -1
  12. package/CHANGELOG.md +167 -79
  13. package/README.md +1 -1
  14. package/coverage/core/api/application.js.html +436 -436
  15. package/coverage/core/api/authentication.js.html +119 -119
  16. package/coverage/core/api/db.js.html +201 -201
  17. package/coverage/core/api/hooks/hooks.account.js.html +48 -48
  18. package/coverage/core/api/hooks/hooks.authentication.js.html +64 -64
  19. package/coverage/core/api/hooks/hooks.authorisations.js.html +369 -378
  20. package/coverage/core/api/hooks/hooks.devices.js.html +49 -49
  21. package/coverage/core/api/hooks/hooks.groups.js.html +37 -37
  22. package/coverage/core/api/hooks/hooks.logger.js.html +27 -27
  23. package/coverage/core/api/hooks/hooks.model.js.html +269 -269
  24. package/coverage/core/api/hooks/hooks.organisations.js.html +183 -231
  25. package/coverage/core/api/hooks/hooks.pusher.js.html +114 -114
  26. package/coverage/core/api/hooks/hooks.query.js.html +234 -198
  27. package/coverage/core/api/hooks/hooks.service.js.html +82 -82
  28. package/coverage/core/api/hooks/hooks.storage.js.html +121 -121
  29. package/coverage/core/api/hooks/hooks.tags.js.html +232 -232
  30. package/coverage/core/api/hooks/hooks.users.js.html +304 -256
  31. package/coverage/core/api/hooks/index.html +172 -172
  32. package/coverage/core/api/hooks/index.js.html +24 -24
  33. package/coverage/core/api/index.html +75 -75
  34. package/coverage/core/api/index.js.html +26 -26
  35. package/coverage/core/api/marshall.js.html +57 -57
  36. package/coverage/core/api/models/groups.model.mongodb.js.html +20 -20
  37. package/coverage/core/api/models/index.html +50 -50
  38. package/coverage/core/api/models/organisations.model.mongodb.js.html +12 -12
  39. package/coverage/core/api/models/tags.model.mongodb.js.html +22 -22
  40. package/coverage/core/api/models/users.model.mongodb.js.html +20 -20
  41. package/coverage/core/api/oauth2-handler.js.html +18 -18
  42. package/coverage/core/api/oauth2-verifier.js.html +38 -38
  43. package/coverage/core/api/services/account/account.hooks.js.html +16 -16
  44. package/coverage/core/api/services/account/account.service.js.html +108 -108
  45. package/coverage/core/api/services/account/index.html +32 -32
  46. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
  47. package/coverage/core/api/services/authorisations/authorisations.service.js.html +132 -129
  48. package/coverage/core/api/services/authorisations/index.html +28 -28
  49. package/coverage/core/api/services/databases/databases.hooks.js.html +9 -9
  50. package/coverage/core/api/services/databases/databases.service.js.html +12 -12
  51. package/coverage/core/api/services/databases/index.html +24 -24
  52. package/coverage/core/api/services/devices/devices.hooks.js.html +9 -9
  53. package/coverage/core/api/services/devices/devices.service.js.html +121 -121
  54. package/coverage/core/api/services/devices/index.html +28 -28
  55. package/coverage/core/api/services/groups/groups.hooks.js.html +9 -9
  56. package/coverage/core/api/services/groups/index.html +13 -13
  57. package/coverage/core/api/services/index.html +21 -21
  58. package/coverage/core/api/services/index.js.html +137 -137
  59. package/coverage/core/api/services/mailer/index.html +24 -24
  60. package/coverage/core/api/services/mailer/mailer.hooks.js.html +9 -9
  61. package/coverage/core/api/services/mailer/mailer.service.js.html +19 -19
  62. package/coverage/core/api/services/organisations/index.html +24 -24
  63. package/coverage/core/api/services/organisations/organisations.hooks.js.html +8 -8
  64. package/coverage/core/api/services/organisations/organisations.service.js.html +67 -67
  65. package/coverage/core/api/services/pusher/index.html +34 -34
  66. package/coverage/core/api/services/pusher/pusher.channels.js.html +8 -8
  67. package/coverage/core/api/services/pusher/pusher.hooks.js.html +10 -10
  68. package/coverage/core/api/services/pusher/pusher.service.js.html +414 -414
  69. package/coverage/core/api/services/storage/index.html +21 -21
  70. package/coverage/core/api/services/storage/storage.hooks.js.html +35 -35
  71. package/coverage/core/api/services/tags/index.html +21 -21
  72. package/coverage/core/api/services/tags/tags.hooks.js.html +25 -25
  73. package/coverage/core/api/services/users/index.html +21 -21
  74. package/coverage/core/api/services/users/users.hooks.js.html +33 -33
  75. package/coverage/core/common/errors.js.html +1 -1
  76. package/coverage/core/common/index.html +42 -27
  77. package/coverage/core/common/index.js.html +16 -16
  78. package/coverage/core/common/permissions.js.html +325 -265
  79. package/coverage/index.html +182 -182
  80. package/coverage/lcov-report/core/api/application.js.html +436 -436
  81. package/coverage/lcov-report/core/api/authentication.js.html +119 -119
  82. package/coverage/lcov-report/core/api/db.js.html +201 -201
  83. package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +48 -48
  84. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +64 -64
  85. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +369 -378
  86. package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +49 -49
  87. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +37 -37
  88. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +27 -27
  89. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +269 -269
  90. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +183 -231
  91. package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +114 -114
  92. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +234 -198
  93. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +82 -82
  94. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +121 -121
  95. package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +232 -232
  96. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +304 -256
  97. package/coverage/lcov-report/core/api/hooks/index.html +172 -172
  98. package/coverage/lcov-report/core/api/hooks/index.js.html +24 -24
  99. package/coverage/lcov-report/core/api/index.html +75 -75
  100. package/coverage/lcov-report/core/api/index.js.html +26 -26
  101. package/coverage/lcov-report/core/api/marshall.js.html +57 -57
  102. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +20 -20
  103. package/coverage/lcov-report/core/api/models/index.html +50 -50
  104. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +12 -12
  105. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +22 -22
  106. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +20 -20
  107. package/coverage/lcov-report/core/api/oauth2-handler.js.html +18 -18
  108. package/coverage/lcov-report/core/api/oauth2-verifier.js.html +38 -38
  109. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +16 -16
  110. package/coverage/lcov-report/core/api/services/account/account.service.js.html +108 -108
  111. package/coverage/lcov-report/core/api/services/account/index.html +32 -32
  112. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
  113. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +132 -129
  114. package/coverage/lcov-report/core/api/services/authorisations/index.html +28 -28
  115. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +9 -9
  116. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +12 -12
  117. package/coverage/lcov-report/core/api/services/databases/index.html +24 -24
  118. package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +9 -9
  119. package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +121 -121
  120. package/coverage/lcov-report/core/api/services/devices/index.html +28 -28
  121. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +9 -9
  122. package/coverage/lcov-report/core/api/services/groups/index.html +13 -13
  123. package/coverage/lcov-report/core/api/services/index.html +21 -21
  124. package/coverage/lcov-report/core/api/services/index.js.html +137 -137
  125. package/coverage/lcov-report/core/api/services/mailer/index.html +24 -24
  126. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +9 -9
  127. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +19 -19
  128. package/coverage/lcov-report/core/api/services/organisations/index.html +24 -24
  129. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +8 -8
  130. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +67 -67
  131. package/coverage/lcov-report/core/api/services/pusher/index.html +34 -34
  132. package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +8 -8
  133. package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +10 -10
  134. package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +414 -414
  135. package/coverage/lcov-report/core/api/services/storage/index.html +21 -21
  136. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +35 -35
  137. package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
  138. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +25 -25
  139. package/coverage/lcov-report/core/api/services/users/index.html +21 -21
  140. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +33 -33
  141. package/coverage/lcov-report/core/common/errors.js.html +1 -1
  142. package/coverage/lcov-report/core/common/index.html +42 -27
  143. package/coverage/lcov-report/core/common/index.js.html +16 -16
  144. package/coverage/lcov-report/core/common/permissions.js.html +325 -265
  145. package/coverage/lcov-report/index.html +182 -182
  146. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
  147. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +118 -37
  148. package/coverage/lcov-report/map/api/hooks/index.html +7 -7
  149. package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
  150. package/coverage/lcov-report/map/api/index.html +1 -1
  151. package/coverage/lcov-report/map/api/index.js.html +1 -1
  152. package/coverage/lcov-report/map/api/marshall.js.html +1 -1
  153. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
  154. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
  155. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +1 -1
  156. package/coverage/lcov-report/map/api/models/index.html +1 -1
  157. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
  158. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
  159. package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
  160. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
  161. package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
  162. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  163. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  164. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +2 -2
  165. package/coverage/lcov-report/map/api/services/features/index.html +1 -1
  166. package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  167. package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
  168. package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
  169. package/coverage/lcov-report/map/api/services/index.html +1 -1
  170. package/coverage/lcov-report/map/api/services/index.js.html +1 -1
  171. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
  172. package/coverage/lcov-report/map/common/errors.js.html +1 -1
  173. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
  174. package/coverage/lcov-report/map/common/grid.js.html +1 -1
  175. package/coverage/lcov-report/map/common/index.html +12 -12
  176. package/coverage/lcov-report/map/common/index.js.html +1 -1
  177. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
  178. package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
  179. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
  180. package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
  181. package/coverage/lcov-report/map/common/permissions.js.html +1 -1
  182. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
  183. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  184. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
  185. package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
  186. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
  187. package/coverage/lcov-report/map/common/wfs-utils.js.html +8 -5
  188. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  189. package/coverage/lcov-report/map/common/wmts-utils.js.html +71 -11
  190. package/coverage/lcov.info +3742 -3949
  191. package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
  192. package/coverage/map/api/hooks/hooks.query.js.html +118 -37
  193. package/coverage/map/api/hooks/index.html +7 -7
  194. package/coverage/map/api/hooks/index.js.html +1 -1
  195. package/coverage/map/api/index.html +1 -1
  196. package/coverage/map/api/index.js.html +1 -1
  197. package/coverage/map/api/marshall.js.html +1 -1
  198. package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
  199. package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
  200. package/coverage/map/api/models/features.model.mongodb.js.html +1 -1
  201. package/coverage/map/api/models/index.html +1 -1
  202. package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
  203. package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
  204. package/coverage/map/api/services/alerts/index.html +1 -1
  205. package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
  206. package/coverage/map/api/services/catalog/index.html +1 -1
  207. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  208. package/coverage/map/api/services/daptiles/index.html +1 -1
  209. package/coverage/map/api/services/features/features.hooks.js.html +2 -2
  210. package/coverage/map/api/services/features/index.html +1 -1
  211. package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  212. package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
  213. package/coverage/map/api/services/geocoder/index.html +1 -1
  214. package/coverage/map/api/services/index.html +1 -1
  215. package/coverage/map/api/services/index.js.html +1 -1
  216. package/coverage/map/common/dynamic-grid-source.js.html +1 -1
  217. package/coverage/map/common/errors.js.html +1 -1
  218. package/coverage/map/common/geotiff-grid-source.js.html +1 -1
  219. package/coverage/map/common/grid.js.html +1 -1
  220. package/coverage/map/common/index.html +12 -12
  221. package/coverage/map/common/index.js.html +1 -1
  222. package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
  223. package/coverage/map/common/moment-utils.js.html +1 -1
  224. package/coverage/map/common/opendap-grid-source.js.html +1 -1
  225. package/coverage/map/common/opendap-utils.js.html +1 -1
  226. package/coverage/map/common/permissions.js.html +1 -1
  227. package/coverage/map/common/time-based-grid-source.js.html +1 -1
  228. package/coverage/map/common/tms-utils.js.html +1 -1
  229. package/coverage/map/common/wcs-grid-source.js.html +1 -1
  230. package/coverage/map/common/wcs-utils.js.html +1 -1
  231. package/coverage/map/common/weacast-grid-source.js.html +1 -1
  232. package/coverage/map/common/wfs-utils.js.html +8 -5
  233. package/coverage/map/common/wms-utils.js.html +1 -1
  234. package/coverage/map/common/wmts-utils.js.html +71 -11
  235. package/extras/icons/kanban.png +0 -0
  236. package/extras/tours/core/add-member.js +10 -1
  237. package/extras/tours/core/{tag-member.js → edit-member-tags.js} +4 -3
  238. package/extras/tours/core/groups.js +8 -2
  239. package/extras/tours/core/members.js +11 -21
  240. package/extras/tours/core/tags.js +7 -1
  241. package/extras/tours/map/catalog-categories.js +4 -4
  242. package/extras/tours/map/catalog-panel.js +16 -16
  243. package/extras/tours/map/favorite-views.js +3 -3
  244. package/lib/core/api/hooks/hooks.authorisations.js +149 -140
  245. package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
  246. package/lib/core/api/hooks/hooks.organisations.js +1 -23
  247. package/lib/core/api/hooks/hooks.organisations.js.map +1 -1
  248. package/lib/core/api/hooks/hooks.query.js +22 -0
  249. package/lib/core/api/hooks/hooks.query.js.map +1 -1
  250. package/lib/core/api/hooks/hooks.users.js +34 -18
  251. package/lib/core/api/hooks/hooks.users.js.map +1 -1
  252. package/lib/core/api/services/authorisations/authorisations.service.js +34 -25
  253. package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
  254. package/lib/core/client/api.js +1 -0
  255. package/lib/core/client/api.js.map +1 -1
  256. package/lib/core/client/components/account/KAccountDZ.vue +3 -4
  257. package/lib/core/client/components/account/KAccountDevices.vue +5 -6
  258. package/lib/core/client/components/account/KDeviceCard.vue +2 -1
  259. package/lib/core/client/components/account/KIdentityPanel.vue +1 -7
  260. package/lib/core/client/components/collection/KBoard.vue +26 -155
  261. package/lib/core/client/components/collection/KCard.vue +144 -42
  262. package/lib/core/client/components/collection/KCardSection.vue +52 -0
  263. package/lib/core/client/components/collection/KColumn.vue +181 -0
  264. package/lib/core/client/components/collection/KGrid.vue +13 -18
  265. package/lib/core/client/components/collection/KHistory.vue +61 -89
  266. package/lib/core/client/components/collection/KHistoryEntry.vue +90 -66
  267. package/lib/core/client/components/collection/KItem.vue +21 -2
  268. package/lib/core/client/components/collection/KList.vue +9 -12
  269. package/lib/core/client/components/collection/KTable.vue +33 -39
  270. package/lib/core/client/components/collection/index.js +6 -1
  271. package/lib/core/client/components/collection/index.js.map +1 -1
  272. package/lib/core/client/components/editor/KEditor.vue +0 -6
  273. package/lib/core/client/components/editor/KModalEditor.vue +4 -4
  274. package/lib/core/client/components/editor/KSettingsEditor.vue +49 -0
  275. package/lib/core/client/components/form/KAttachmentField.vue +10 -10
  276. package/lib/core/client/components/form/KChipsField.vue +28 -23
  277. package/lib/core/client/components/form/KColorField.vue +30 -25
  278. package/lib/core/client/components/form/KFileField.vue +11 -40
  279. package/lib/core/client/components/form/KForm.vue +0 -12
  280. package/lib/core/client/components/form/KIconField.vue +1 -0
  281. package/lib/core/client/components/form/KItemField.vue +6 -2
  282. package/lib/core/client/components/form/KRoleField.vue +56 -0
  283. package/lib/core/client/components/form/KSelectField.vue +16 -1
  284. package/lib/core/client/components/form/KView.vue +5 -14
  285. package/lib/core/client/components/frame/KAction.vue +18 -12
  286. package/lib/core/client/components/frame/KAvatar.vue +3 -3
  287. package/lib/core/client/components/frame/KChart.vue +60 -0
  288. package/lib/core/client/components/frame/KChipsPane.vue +80 -0
  289. package/lib/core/client/components/frame/KContent.vue +1 -1
  290. package/lib/core/client/components/frame/KModal.vue +30 -44
  291. package/lib/core/client/components/frame/KPanel.vue +1 -1
  292. package/lib/core/client/components/frame/{KMenu.vue → KPopupAction.vue} +6 -7
  293. package/lib/core/client/components/frame/KSpot.vue +31 -0
  294. package/lib/core/client/components/frame/KStamp.vue +62 -0
  295. package/lib/core/client/components/frame/index.js +56 -1
  296. package/lib/core/client/components/frame/index.js.map +1 -1
  297. package/lib/core/client/components/input/KColorChooser.vue +16 -8
  298. package/lib/core/client/components/input/KIconChooser.vue +2 -1
  299. package/lib/core/client/components/input/KOptionsChooser.vue +2 -2
  300. package/lib/core/client/components/input/KUploader.vue +14 -5
  301. package/lib/core/client/components/layout/KAbout.vue +9 -3
  302. package/lib/core/client/components/layout/KFab.vue +1 -1
  303. package/lib/core/client/components/layout/KPage.vue +44 -19
  304. package/lib/core/client/components/layout/KTour.vue +2 -2
  305. package/lib/core/client/components/layout/KWelcome.vue +13 -12
  306. package/lib/core/client/components/layout/KWindow.vue +1 -1
  307. package/lib/core/client/components/media/KImageViewer.vue +9 -7
  308. package/lib/core/client/components/media/KMediaBrowser.vue +12 -8
  309. package/lib/core/client/components/menu/KMenu.vue +103 -0
  310. package/lib/core/client/components/team/KAddMember.vue +17 -9
  311. package/lib/core/client/components/team/KChangeRole.vue +5 -7
  312. package/lib/core/client/components/team/KGroupCard.vue +34 -51
  313. package/lib/core/client/components/team/KGroupsActivity.vue +9 -2
  314. package/lib/core/client/components/team/KJoinGroup.vue +5 -7
  315. package/lib/core/client/components/team/KMemberCard.vue +104 -63
  316. package/lib/core/client/components/team/KMembersActivity.vue +9 -2
  317. package/lib/core/client/components/team/KOrganisationsActivity.vue +8 -1
  318. package/lib/core/client/components/team/KTagCard.vue +26 -26
  319. package/lib/core/client/components/team/KTagsActivity.vue +9 -2
  320. package/lib/core/client/components/time/KTimeRange.vue +144 -0
  321. package/lib/core/client/components/viewer/KModalViewer.vue +6 -0
  322. package/lib/core/client/components/viewer/KViewer.vue +0 -6
  323. package/lib/core/client/i18n/core_en.json +138 -94
  324. package/lib/core/client/i18n/core_fr.json +61 -17
  325. package/lib/core/client/index.js +46 -14
  326. package/lib/core/client/index.js.map +1 -1
  327. package/lib/core/client/layout.js +8 -1
  328. package/lib/core/client/layout.js.map +1 -1
  329. package/lib/core/client/mixins/mixin.authorisation.js +28 -18
  330. package/lib/core/client/mixins/mixin.authorisation.js.map +1 -1
  331. package/lib/core/client/mixins/mixin.base-collection.js +57 -9
  332. package/lib/core/client/mixins/mixin.base-collection.js.map +1 -1
  333. package/lib/core/client/mixins/mixin.base-context.js +1 -1
  334. package/lib/core/client/mixins/mixin.base-context.js.map +1 -1
  335. package/lib/core/client/mixins/mixin.base-editor.js +26 -16
  336. package/lib/core/client/mixins/mixin.base-editor.js.map +1 -1
  337. package/lib/core/client/mixins/mixin.base-field.js +0 -4
  338. package/lib/core/client/mixins/mixin.base-field.js.map +1 -1
  339. package/lib/core/client/mixins/mixin.base-item.js +29 -14
  340. package/lib/core/client/mixins/mixin.base-item.js.map +1 -1
  341. package/lib/core/client/mixins/mixin.base-viewer.js +0 -2
  342. package/lib/core/client/mixins/mixin.base-viewer.js.map +1 -1
  343. package/lib/core/client/mixins/mixin.object-proxy.js +17 -3
  344. package/lib/core/client/mixins/mixin.object-proxy.js.map +1 -1
  345. package/lib/core/client/mixins/mixin.schema-proxy.js +31 -0
  346. package/lib/core/client/mixins/mixin.schema-proxy.js.map +1 -1
  347. package/lib/core/client/mixins/mixin.service.js +5 -33
  348. package/lib/core/client/mixins/mixin.service.js.map +1 -1
  349. package/lib/core/client/reader.js +54 -0
  350. package/lib/core/client/reader.js.map +1 -0
  351. package/lib/core/client/readers/index.js +30 -0
  352. package/lib/core/client/readers/index.js.map +1 -0
  353. package/lib/core/client/readers/reader.csv.js +43 -0
  354. package/lib/core/client/readers/reader.csv.js.map +1 -0
  355. package/lib/core/client/readers/reader.json.js +38 -0
  356. package/lib/core/client/readers/reader.json.js.map +1 -0
  357. package/lib/core/client/services/index.js +23 -0
  358. package/lib/core/client/services/index.js.map +1 -1
  359. package/lib/core/client/services/local-settings.service.js +4 -0
  360. package/lib/core/client/services/local-settings.service.js.map +1 -1
  361. package/lib/core/client/time.js +131 -0
  362. package/lib/core/client/time.js.map +1 -0
  363. package/lib/core/common/permissions.js +65 -23
  364. package/lib/core/common/permissions.js.map +1 -1
  365. package/lib/core/common/schemas/groups.create.json +1 -1
  366. package/lib/core/common/schemas/groups.update.json +1 -1
  367. package/lib/core/common/schemas/organisations.create.json +1 -1
  368. package/lib/core/common/schemas/organisations.update.json +2 -2
  369. package/lib/core/common/schemas/settings.update.json +139 -0
  370. package/lib/core/common/schemas/tags.update.json +9 -1
  371. package/lib/map/api/hooks/hooks.query.js +55 -29
  372. package/lib/map/api/hooks/hooks.query.js.map +1 -1
  373. package/lib/map/api/services/features/features.hooks.js +1 -1
  374. package/lib/map/api/services/features/features.hooks.js.map +1 -1
  375. package/lib/map/client/components/KCaptureToolbar.vue +156 -0
  376. package/lib/map/client/components/KColorLegend.vue +25 -23
  377. package/lib/map/client/components/KFavoriteViews.vue +71 -35
  378. package/lib/map/client/components/KFeaturesChart.vue +11 -9
  379. package/lib/map/client/components/KFeaturesFilter.vue +18 -8
  380. package/lib/map/client/components/KFeaturesTable.vue +27 -2
  381. package/lib/map/client/components/KLayerEditionToolbar.vue +51 -0
  382. package/lib/map/client/components/KLayerStyleEditor.vue +12 -5
  383. package/lib/map/client/components/KLayerStyleForm.vue +44 -33
  384. package/lib/map/client/components/KLocationInput.vue +126 -65
  385. package/lib/map/client/components/KLocationMap.vue +199 -84
  386. package/lib/map/client/components/KMeasureTool.vue +340 -0
  387. package/lib/map/client/components/KPositionIndicator.vue +1 -0
  388. package/lib/map/client/components/KTimeline.vue +41 -37
  389. package/lib/map/client/components/KUrlLegend.vue +21 -19
  390. package/lib/map/client/components/catalog/KBaseLayersSelector.vue +105 -0
  391. package/lib/map/client/components/catalog/KCatalog.vue +14 -2
  392. package/lib/map/client/components/catalog/KConnectLayer.vue +31 -11
  393. package/lib/map/client/components/catalog/KCreateLayer.vue +37 -14
  394. package/lib/map/client/components/catalog/KImportLayer.vue +33 -40
  395. package/lib/map/client/components/catalog/KLayerCategories.vue +86 -62
  396. package/lib/map/client/components/catalog/KLayersSelector.vue +44 -42
  397. package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +3 -3
  398. package/lib/map/client/components/form/KLocationField.vue +1 -1
  399. package/lib/map/client/components/form/KOwsLayerField.vue +7 -0
  400. package/lib/map/client/components/form/KOwsServiceField.vue +1 -0
  401. package/lib/map/client/components/widget/KInformationBox.vue +10 -16
  402. package/lib/map/client/components/widget/KMapillaryViewer.vue +59 -49
  403. package/lib/map/client/components/widget/KTimeSeries.vue +119 -31
  404. package/lib/map/client/i18n/map_en.json +105 -20
  405. package/lib/map/client/i18n/map_fr.json +107 -23
  406. package/lib/map/client/init.js +24 -7
  407. package/lib/map/client/init.js.map +1 -1
  408. package/lib/map/client/leaflet/GSMaPLayer.js +4 -9
  409. package/lib/map/client/leaflet/GSMaPLayer.js.map +1 -1
  410. package/lib/map/client/leaflet/MaskLayer.js +73 -0
  411. package/lib/map/client/leaflet/MaskLayer.js.map +1 -0
  412. package/lib/map/client/mixins/globe/mixin.base-globe.js +7 -6
  413. package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
  414. package/lib/map/client/mixins/globe/mixin.geojson-layers.js +7 -9
  415. package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
  416. package/lib/map/client/mixins/globe/mixin.popup.js +4 -0
  417. package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
  418. package/lib/map/client/mixins/globe/mixin.tooltip.js +4 -0
  419. package/lib/map/client/mixins/globe/mixin.tooltip.js.map +1 -1
  420. package/lib/map/client/mixins/index.js +8 -13
  421. package/lib/map/client/mixins/index.js.map +1 -1
  422. package/lib/map/client/mixins/map/mixin.base-map.js +71 -8
  423. package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
  424. package/lib/map/client/mixins/map/mixin.canvas-layers.js +276 -51
  425. package/lib/map/client/mixins/map/mixin.canvas-layers.js.map +1 -1
  426. package/lib/map/client/mixins/map/mixin.edit-layers.js +218 -121
  427. package/lib/map/client/mixins/map/mixin.edit-layers.js.map +1 -1
  428. package/lib/map/client/mixins/map/mixin.file-layers.js +46 -93
  429. package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
  430. package/lib/map/client/mixins/map/mixin.geojson-layers.js +22 -11
  431. package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
  432. package/lib/map/client/mixins/map/mixin.georaster-layers.js +7 -4
  433. package/lib/map/client/mixins/map/mixin.georaster-layers.js.map +1 -1
  434. package/lib/map/client/mixins/map/mixin.gsmap-layers.js +3 -3
  435. package/lib/map/client/mixins/map/mixin.gsmap-layers.js.map +1 -1
  436. package/lib/map/client/mixins/map/mixin.heatmap-layers.js +8 -10
  437. package/lib/map/client/mixins/map/mixin.heatmap-layers.js.map +1 -1
  438. package/lib/map/client/mixins/map/mixin.mapillary-layers.js +25 -40
  439. package/lib/map/client/mixins/map/mixin.mapillary-layers.js.map +1 -1
  440. package/lib/map/client/mixins/map/mixin.popup.js +4 -0
  441. package/lib/map/client/mixins/map/mixin.popup.js.map +1 -1
  442. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js +5 -3
  443. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js.map +1 -1
  444. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js +5 -3
  445. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js.map +1 -1
  446. package/lib/map/client/mixins/map/mixin.tooltip.js +4 -0
  447. package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
  448. package/lib/map/client/mixins/mixin.activity.js +62 -68
  449. package/lib/map/client/mixins/mixin.activity.js.map +1 -1
  450. package/lib/map/client/mixins/mixin.context.js +26 -3
  451. package/lib/map/client/mixins/mixin.context.js.map +1 -1
  452. package/lib/map/client/mixins/mixin.feature-selection.js +8 -10
  453. package/lib/map/client/mixins/mixin.feature-selection.js.map +1 -1
  454. package/lib/map/client/mixins/mixin.feature-service.js +9 -7
  455. package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
  456. package/lib/map/client/mixins/mixin.infobox.js +4 -0
  457. package/lib/map/client/mixins/mixin.infobox.js.map +1 -1
  458. package/lib/map/client/mixins/mixin.weacast.js +6 -4
  459. package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
  460. package/lib/map/client/pixi-utils.js +9 -0
  461. package/lib/map/client/pixi-utils.js.map +1 -1
  462. package/lib/map/client/readers/index.js +42 -0
  463. package/lib/map/client/readers/index.js.map +1 -0
  464. package/lib/map/client/readers/reader.geojson.js +59 -0
  465. package/lib/map/client/readers/reader.geojson.js.map +1 -0
  466. package/lib/map/client/readers/reader.gpx.js +41 -0
  467. package/lib/map/client/readers/reader.gpx.js.map +1 -0
  468. package/lib/map/client/readers/reader.kml.js +41 -0
  469. package/lib/map/client/readers/reader.kml.js.map +1 -0
  470. package/lib/map/client/utils.js +52 -1
  471. package/lib/map/client/utils.js.map +1 -1
  472. package/lib/map/common/wfs-utils.js +1 -1
  473. package/lib/map/common/wfs-utils.js.map +1 -1
  474. package/lib/map/common/wmts-utils.js +31 -7
  475. package/lib/map/common/wmts-utils.js.map +1 -1
  476. package/lib/test/client/core/account.js +100 -0
  477. package/lib/test/client/core/account.js.map +1 -0
  478. package/lib/test/client/core/api.js +400 -0
  479. package/lib/test/client/core/api.js.map +1 -0
  480. package/lib/test/client/core/collection.js +109 -0
  481. package/lib/test/client/core/collection.js.map +1 -0
  482. package/lib/test/client/core/index.js +90 -0
  483. package/lib/test/client/core/index.js.map +1 -0
  484. package/lib/test/client/core/layout.js +221 -0
  485. package/lib/test/client/core/layout.js.map +1 -0
  486. package/lib/test/client/core/runner.js +203 -0
  487. package/lib/test/client/core/runner.js.map +1 -0
  488. package/lib/test/client/core/screens.js +68 -0
  489. package/lib/test/client/core/screens.js.map +1 -0
  490. package/lib/test/client/core/utils.js +304 -0
  491. package/lib/test/client/core/utils.js.map +1 -0
  492. package/lib/test/client/index.js +20 -0
  493. package/lib/test/client/index.js.map +1 -0
  494. package/lib/test/client/map/catalog.js +192 -0
  495. package/lib/test/client/map/catalog.js.map +1 -0
  496. package/lib/test/client/map/controls.js +54 -0
  497. package/lib/test/client/map/controls.js.map +1 -0
  498. package/lib/test/client/map/index.js +30 -0
  499. package/lib/test/client/map/index.js.map +1 -0
  500. package/package.json +18 -9
  501. package/test.client.js +1 -0
  502. package/tests/core/test-log-2021-09-02.log +47 -0
  503. package/tests/map/test-log-%DATE%.logYYYY-09-DD +6 -0
  504. package/tests/map/test-log-2021-09-02.log +3 -0
  505. package/.nyc_output/5baea3f8-cf8e-4c76-8ccf-0e48b6f16fa4.json +0 -1
  506. package/.nyc_output/dddde6b5-9024-4b0e-8d8b-4502d437b8a4.json +0 -1
  507. package/.nyc_output/ef5e94ba-9a99-4fb6-ab1d-1a974112bb83.json +0 -1
  508. package/.nyc_output/fd4681f8-5f41-4f17-b393-9f399b24c128.json +0 -1
  509. package/.nyc_output/processinfo/0d403586-0c7c-4336-94d1-a49e9f02a905.json +0 -1
  510. package/.nyc_output/processinfo/21dd57bd-48c5-41c8-8800-252db32a9366.json +0 -1
  511. package/.nyc_output/processinfo/3eb3a2ca-53c2-4551-ba6b-adf70f9a53cd.json +0 -1
  512. package/.nyc_output/processinfo/5baea3f8-cf8e-4c76-8ccf-0e48b6f16fa4.json +0 -1
  513. package/.nyc_output/processinfo/dddde6b5-9024-4b0e-8d8b-4502d437b8a4.json +0 -1
  514. package/.nyc_output/processinfo/ef5e94ba-9a99-4fb6-ab1d-1a974112bb83.json +0 -1
  515. package/.nyc_output/processinfo/fd4681f8-5f41-4f17-b393-9f399b24c128.json +0 -1
  516. package/extras/testcafe/Dockerfile +0 -48
  517. package/extras/testcafe/docker-entrypoint.sh +0 -27
  518. package/extras/testcafe/page-models/core/account.js +0 -75
  519. package/extras/testcafe/page-models/core/base-collection.js +0 -41
  520. package/extras/testcafe/page-models/core/base-page.js +0 -25
  521. package/extras/testcafe/page-models/core/groups.js +0 -36
  522. package/extras/testcafe/page-models/core/index.js +0 -140
  523. package/extras/testcafe/page-models/core/layout.js +0 -145
  524. package/extras/testcafe/page-models/core/members.js +0 -98
  525. package/extras/testcafe/page-models/core/organisations.js +0 -76
  526. package/extras/testcafe/page-models/core/screens.js +0 -99
  527. package/extras/testcafe/page-models/core/tags.js +0 -21
  528. package/extras/testcafe/page-models/map/add-layer.js +0 -51
  529. package/extras/testcafe/page-models/map/catalog.js +0 -132
  530. package/extras/testcafe/page-models/map/index.js +0 -36
  531. package/extras/testcafe/page-models/map/map-activity.js +0 -42
  532. package/extras/testcafe/page-models/map/timeline.js +0 -67
  533. package/lib/core/client/components/frame/KLabel.vue +0 -56
  534. package/lib/core/client/components/team/KTagsPane.vue +0 -35
  535. package/lib/map/client/leaflet/TiledMapillaryLayer.js +0 -137
  536. package/lib/map/client/leaflet/TiledMapillaryLayer.js.map +0 -1
  537. package/lib/map/client/mixins/mixin.time.js +0 -73
  538. package/lib/map/client/mixins/mixin.time.js.map +0 -1
  539. package/tests/core/account.test.js +0 -423
  540. package/tests/core/client.test.js.skip +0 -37
  541. package/tests/core/config/default.js +0 -96
  542. package/tests/core/config/email-templates/confirmInvitation/html.ejs +0 -18
  543. package/tests/core/config/email-templates/identityChange/html.ejs +0 -12
  544. package/tests/core/config/email-templates/newDevice/html.ejs +0 -7
  545. package/tests/core/config/email-templates/passwordChange/html.ejs +0 -5
  546. package/tests/core/config/email-templates/resendVerifySignup/html.ejs +0 -10
  547. package/tests/core/config/email-templates/resetPwd/html.ejs +0 -5
  548. package/tests/core/config/email-templates/sendResetPwd/html.ejs +0 -8
  549. package/tests/core/config/email-templates/verifySignup/html.ejs +0 -3
  550. package/tests/core/data/10k_most_common_passwords.txt +0 -10000
  551. package/tests/core/data/logo.png +0 -0
  552. package/tests/core/hooks.test.js +0 -175
  553. package/tests/core/index.test.js +0 -432
  554. package/tests/core/notifications.test.js +0 -465
  555. package/tests/core/storage.test.js +0 -134
  556. package/tests/core/team.test.js +0 -610
  557. package/tests/core/utils.js +0 -62
  558. package/tests/map/alerts.test.js +0 -554
  559. package/tests/map/config/default.js +0 -112
  560. package/tests/map/config/layers.json +0 -37
  561. package/tests/map/daptiles.test.js +0 -41
  562. package/tests/map/data/DescribeCoverage.xml +0 -55
  563. package/tests/map/data/GetCoverage.tif +0 -0
  564. package/tests/map/data/adsb.observations.json +0 -132
  565. package/tests/map/data/dataset.grb.das +0 -55
  566. package/tests/map/data/dataset.grb.dds +0 -17
  567. package/tests/map/data/dataset.grb.dods +0 -0
  568. package/tests/map/data/lat_lon_bounds.grb.dods +0 -0
  569. package/tests/map/data/subdataset.grb.dods +0 -0
  570. package/tests/map/data/vigicrues.observations.json +0 -47042
  571. package/tests/map/data/vigicrues.stations.json +0 -15422
  572. package/tests/map/data/zones.json +0 -1228
  573. package/tests/map/forecast-data/gfs-world/u-wind/2021-07-15_12-00-00_2021-07-15_12-00-00.grib +0 -0
  574. package/tests/map/forecast-data/gfs-world/v-wind/2021-07-15_12-00-00_2021-07-15_12-00-00.grib +0 -0
  575. package/tests/map/grid-sources.test.js +0 -304
  576. package/tests/map/hooks.test.js +0 -96
  577. package/tests/map/index.test.js +0 -333
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../core/client/index.js"],"names":["init","utils","mixins","hooks","api","logger","debug","configure","services","Layout","initialize","Filter","Sorter","Search","Store","set","content","mode","undefined","filter","visible","current","widgets","actions","users","getService","on","user","_id","get","patch","Platform","is","cordova","document","addEventListener","_","window","device","error","notifier","PushNotification","android","vibrate","sound","forceShow","ios","alert","badge","windows","data","registrationId","devicesService","update","uuid","toast","message","timeout","response"],"mappings":"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","file":"index.js","sourcesContent":["import logger from 'loglevel'\r\nimport { Platform } from 'quasar'\r\nimport { Store } from './store'\r\nimport { Layout } from './layout'\r\nimport { Filter } from './filter'\r\nimport { Sorter } from './sorter'\r\nimport { Search } from './search'\r\nimport services from './services'\r\nimport * as utils from './utils'\r\nimport * as mixins from './mixins'\r\nimport * as hooks from './hooks'\r\n\r\n// We faced a bug in babel so that transform-runtime with export * from 'x' generates import statements in transpiled code\r\n// Tracked here : https://github.com/babel/babel/issues/2877\r\n// We tested the workaround given here https://github.com/babel/babel/issues/2877#issuecomment-270700000 with success so far\r\n\r\n// FIXME: we don't build vue component anymore, they are processed by webpack in the application template\r\n// export * from './components'\r\n\r\nexport * from './events'\r\nexport * from './api'\r\nexport * from './store'\r\nexport * from './layout'\r\nexport * from './theme'\r\nexport * from './filter'\r\nexport * from './sorter'\r\nexport * from './search'\r\nexport * from './guards'\r\nexport * from '../common'\r\nexport { utils }\r\nexport { mixins }\r\nexport { hooks }\r\nexport * from './services'\r\n\r\nexport default function init () {\r\n const api = this\r\n\r\n logger.debug('Initializing core')\r\n api.configure(services)\r\n\r\n // Create the models listened by the main layout/pages components\r\n // You must use the patch method on the store to update those models\r\n // It is generally done by activity based componentq or through a local settings service\r\n Layout.initialize()\r\n Filter.initialize(api)\r\n Sorter.initialize()\r\n Search.initialize(api)\r\n Store.set('topPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('leftPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('rightPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('bottomPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('page', { content: null, mode: undefined, filter: {} })\r\n Store.set('window', { current: '', widgets: [], filter: {} })\r\n Store.set('fab', { actions: [], filter: {} })\r\n\r\n // Listen to the 'patched' event on the users\r\n const users = api.getService('users')\r\n users.on('patched', user => {\r\n // Check whether we need to update the current user\r\n if (user._id === Store.get('user._id')) {\r\n Store.patch('user', user)\r\n }\r\n })\r\n\r\n // -----------------------------------------------------------------------\r\n // | After this we should only have specific cordova initialisation code |\r\n // -----------------------------------------------------------------------\r\n if (!Platform.is.cordova) return\r\n\r\n /* NOT SURE IF THIS IS REQUIRED\r\n let permissionsPlugin = cordova.plugins.permissions\r\n const notificationPermissions = [\r\n permissionsPlugin.INTERNET,\r\n permissionsPlugin.ACCESS_NETWORK_STATE,\r\n permissionsPlugin.WAKE_LOCK,\r\n permissionsPlugin.VIBRATE\r\n ]\r\n\r\n function permissionsError() {\r\n const message = 'Required permissions for push notifications are missing or have been rejected, the application will not work as expected'\r\n logger.error(message)\r\n utils.toast({\r\n message,\r\n timeout: 10000\r\n })\r\n }\r\n function permissionsCheckSuccess(status) {\r\n // Request again if not given\r\n if (!status.hasPermission) {\r\n permissionsPlugin.requestPermissions(notificationPermissions, status => { if (!status.hasPermission) permissionsError() }, permissionsError)\r\n }\r\n }\r\n */\r\n\r\n document.addEventListener('deviceready', _ => {\r\n // Check for permissions, will launch permission request on failure\r\n // NOT SURE IF THIS IS REQUIRED\r\n // permissionsPlugin.hasPermission(notificationPermissions, permissionsCheckSuccess, null)\r\n if (!window.device) {\r\n logger.error('Unable to reach device information')\r\n return\r\n }\r\n\r\n const notifier = window.PushNotification.init({\r\n android: { vibrate: true, sound: true, forceShow: true },\r\n ios: { alert: true, badge: true, sound: true },\r\n windows: { }\r\n })\r\n notifier.on('registration', async (data) => {\r\n logger.debug('Push registrationID changed: ' + data.registrationId)\r\n // Store the registrationId\r\n window.device.registrationId = data.registrationId\r\n // update the user device\r\n const user = Store.get('user')\r\n if (user && window.device && window.device.registrationId) {\r\n const devicesService = api.getService('devices')\r\n const device = await devicesService.update(window.device.registrationId, window.device)\r\n logger.debug(`device ${device.uuid} updated with the id ${device.registrationId}`)\r\n }\r\n })\r\n notifier.on('notification', (data) => {\r\n // data.message,\r\n // data.title,\r\n // data.count,\r\n // data.sound,\r\n // data.image,\r\n // data.additionalData\r\n })\r\n notifier.on('error', (error) => {\r\n logger.error(error)\r\n utils.toast({\r\n message: error.message,\r\n timeout: 10000\r\n })\r\n })\r\n api.on('authenticated', async response => {\r\n const devicesService = api.getService('devices')\r\n // Only possible if registration ID already retrieved\r\n if (window.device && window.device.registrationId) {\r\n const device = await devicesService.update(window.device.registrationId, window.device)\r\n logger.debug(`device ${device.uuid} registered with the id ${device.registrationId}`)\r\n }\r\n })\r\n }, false)\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../core/client/index.js"],"names":["init","utils","mixins","hooks","api","logger","debug","Time","initialize","configure","services","Layout","Filter","Sorter","Search","Store","set","content","mode","undefined","filter","visible","current","widgets","actions","users","getService","on","user","_id","get","patch","Reader","register","readJSON","readCSV","Platform","is","cordova","document","addEventListener","_","window","device","error","notifier","PushNotification","android","vibrate","sound","forceShow","ios","alert","badge","windows","data","registrationId","devicesService","update","uuid","toast","message","timeout","response"],"mappings":"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","file":"index.js","sourcesContent":["import logger from 'loglevel'\r\nimport { Platform } from 'quasar'\r\nimport { Store } from './store'\r\nimport { Layout } from './layout'\r\nimport { Time } from './time'\r\nimport { Reader } from './reader'\r\nimport { Filter } from './filter'\r\nimport { Sorter } from './sorter'\r\nimport { Search } from './search'\r\nimport services from './services'\r\nimport * as utils from './utils'\r\nimport * as mixins from './mixins'\r\nimport * as hooks from './hooks'\r\nimport { readJSON, readCSV } from './readers'\r\n\r\n// We faced a bug in babel so that transform-runtime with export * from 'x' generates import statements in transpiled code\r\n// Tracked here : https://github.com/babel/babel/issues/2877\r\n// We tested the workaround given here https://github.com/babel/babel/issues/2877#issuecomment-270700000 with success so far\r\n\r\n// FIXME: we don't build vue component anymore, they are processed by webpack in the application template\r\n// export * from './components'\r\n\r\nexport * from './events'\r\nexport * from './api'\r\nexport * from './services'\r\nexport * from './store'\r\nexport * from './layout'\r\nexport * from './theme'\r\nexport * from './time'\r\nexport * from './filter'\r\nexport * from './reader'\r\nexport * from './sorter'\r\nexport * from './search'\r\nexport * from './guards'\r\nexport * from '../common'\r\nexport { utils }\r\nexport { mixins }\r\nexport { hooks }\r\n\r\nexport default function init () {\r\n const api = this\r\n\r\n logger.debug('Initializing core')\r\n // Initialize singletons that might be used globally first\r\n Time.initialize()\r\n // Then services\r\n api.configure(services)\r\n // Last, create the models listened by the main layout/pages components\r\n // You must use the patch method on the store to update those models\r\n // It is generally done by activity based componentq or through a local settings service\r\n Layout.initialize()\r\n Filter.initialize(api)\r\n Sorter.initialize()\r\n Search.initialize(api)\r\n Store.set('topPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('leftPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('rightPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('bottomPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('page', { content: null, mode: undefined, filter: {} })\r\n Store.set('window', { current: '', widgets: [], filter: {} })\r\n Store.set('fab', { actions: [], filter: {} })\r\n\r\n // Listen to the 'patched' event on the users\r\n const users = api.getService('users')\r\n users.on('patched', user => {\r\n // Check whether we need to update the current user\r\n if (user._id === Store.get('user._id')) {\r\n Store.patch('user', user)\r\n }\r\n })\r\n\r\n // Register default readers\r\n Reader.register('.json', readJSON)\r\n Reader.register('.csv', readCSV)\r\n\r\n // -----------------------------------------------------------------------\r\n // | After this we should only have specific cordova initialisation code |\r\n // -----------------------------------------------------------------------\r\n if (!Platform.is.cordova) return\r\n\r\n /* NOT SURE IF THIS IS REQUIRED\r\n let permissionsPlugin = cordova.plugins.permissions\r\n const notificationPermissions = [\r\n permissionsPlugin.INTERNET,\r\n permissionsPlugin.ACCESS_NETWORK_STATE,\r\n permissionsPlugin.WAKE_LOCK,\r\n permissionsPlugin.VIBRATE\r\n ]\r\n\r\n function permissionsError() {\r\n const message = 'Required permissions for push notifications are missing or have been rejected, the application will not work as expected'\r\n logger.error(message)\r\n utils.toast({\r\n message,\r\n timeout: 10000\r\n })\r\n }\r\n function permissionsCheckSuccess(status) {\r\n // Request again if not given\r\n if (!status.hasPermission) {\r\n permissionsPlugin.requestPermissions(notificationPermissions, status => { if (!status.hasPermission) permissionsError() }, permissionsError)\r\n }\r\n }\r\n */\r\n\r\n document.addEventListener('deviceready', _ => {\r\n // Check for permissions, will launch permission request on failure\r\n // NOT SURE IF THIS IS REQUIRED\r\n // permissionsPlugin.hasPermission(notificationPermissions, permissionsCheckSuccess, null)\r\n if (!window.device) {\r\n logger.error('Unable to reach device information')\r\n return\r\n }\r\n\r\n const notifier = window.PushNotification.init({\r\n android: { vibrate: true, sound: true, forceShow: true },\r\n ios: { alert: true, badge: true, sound: true },\r\n windows: { }\r\n })\r\n notifier.on('registration', async (data) => {\r\n logger.debug('Push registrationID changed: ' + data.registrationId)\r\n // Store the registrationId\r\n window.device.registrationId = data.registrationId\r\n // update the user device\r\n const user = Store.get('user')\r\n if (user && window.device && window.device.registrationId) {\r\n const devicesService = api.getService('devices')\r\n const device = await devicesService.update(window.device.registrationId, window.device)\r\n logger.debug(`device ${device.uuid} updated with the id ${device.registrationId}`)\r\n }\r\n })\r\n notifier.on('notification', (data) => {\r\n // data.message,\r\n // data.title,\r\n // data.count,\r\n // data.sound,\r\n // data.image,\r\n // data.additionalData\r\n })\r\n notifier.on('error', (error) => {\r\n logger.error(error)\r\n utils.toast({\r\n message: error.message,\r\n timeout: 10000\r\n })\r\n })\r\n api.on('authenticated', async response => {\r\n const devicesService = api.getService('devices')\r\n // Only possible if registration ID already retrieved\r\n if (window.device && window.device.registrationId) {\r\n const device = await devicesService.update(window.device.registrationId, window.device)\r\n logger.debug(`device ${device.uuid} registered with the id ${device.registrationId}`)\r\n }\r\n })\r\n }, false)\r\n}\r\n"]}
@@ -78,8 +78,8 @@ const Layout = exports.Layout = {
78
78
  const isArray = Array.isArray(content);
79
79
  const modes = _lodash2.default.keys(content);
80
80
  let filteredContent = content;
81
- // Recurse ?
82
81
  if (!isArray) {
82
+ // Recurse ?
83
83
  if (filteredContent.content) {
84
84
  filteredContent.content = this.filterContent(filteredContent.content, filter);
85
85
  } else {
@@ -89,6 +89,13 @@ const Layout = exports.Layout = {
89
89
  });
90
90
  }
91
91
  filteredContent = [filteredContent];
92
+ } else {
93
+ filteredContent.forEach(item => {
94
+ // Recurse ?
95
+ if (item.content) {
96
+ item.content = this.filterContent(item.content, filter);
97
+ }
98
+ });
92
99
  }
93
100
  // Apply filtering
94
101
  filteredContent = filteredContent.filter((0, _sift2.default)(filter));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../core/client/layout.js"],"names":["components","handlers","Layout","initialize","forEach","component","Store","set","content","mode","undefined","filter","visible","getHeader","get","setHeader","patch","setHeaderMode","setHeaderVisible","clearHeader","getFooter","setFooter","setFooterMode","setFooterVisible","clearFooter","validateMode","modes","_","keys","isEmpty","includes","filterContent","isArray","Array","filteredContent","contentForMode","getComponents","context","processedComponents","isVisible","componentName","componentKey","kebabCase","path","basename","uid","push","bindParam","param","startsWith","substring","bindParams","params","isNil","map","mapValues","value","key","generateHandler","name","isNot","args","result","handler","bindHandler","h","reduce","logger","debug","bindProperties","item","i","length","forOwn","bindContent","flatMapDeep","binding","bind","props"],"mappings":"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","file":"layout.js","sourcesContent":["import _ from 'lodash'\r\nimport path from 'path'\r\nimport logger from 'loglevel'\r\nimport sift from 'sift'\r\nimport { uid } from 'quasar'\r\nimport { Store } from './store'\r\n\r\nconst components = ['header', 'footer']\r\nconst handlers = ['handler', 'visible', 'on.listener']\r\n\r\n// Export singleton\r\nexport const Layout = {\r\n initialize () {\r\n components.forEach(component => {\r\n Store.set(component, { content: null, mode: undefined, filter: {}, visible: false })\r\n })\r\n },\r\n getHeader () {\r\n return Store.get(components[0])\r\n },\r\n setHeader (content, mode, filter, visible) {\r\n Store.patch(components[0], { content, mode, filter, visible })\r\n },\r\n setHeaderMode (mode) {\r\n Store.patch(components[0], { mode })\r\n },\r\n setHeaderVisible (visible) {\r\n Store.patch(components[0], { visible })\r\n },\r\n clearHeader () {\r\n Store.patch(components[0], { content: null, mode: undefined, visible: false })\r\n },\r\n getFooter () {\r\n return Store.get(components[1])\r\n },\r\n setFooter (content, mode, filter, visible) {\r\n Store.patch(components[1], { content, mode, filter, visible })\r\n },\r\n setFooterMode (mode) {\r\n Store.patch(components[1], { mode })\r\n },\r\n setFooterVisible (visible) {\r\n Store.patch(components[1], { visible })\r\n },\r\n clearFooter () {\r\n Store.patch(components[1], { content: null, mode: undefined, visible: false })\r\n },\r\n validateMode (content, mode) {\r\n const modes = _.keys(content)\r\n if (_.isEmpty(modes)) return undefined\r\n if (modes.includes(mode)) return mode\r\n return modes[0]\r\n },\r\n filterContent (content, filter) {\r\n // Handle array and object case\r\n const isArray = Array.isArray(content)\r\n const modes = _.keys(content)\r\n let filteredContent = content\r\n // Recurse ?\r\n if (!isArray) {\r\n if (filteredContent.content) {\r\n filteredContent.content = this.filterContent(filteredContent.content, filter)\r\n } else {\r\n modes.forEach(mode => {\r\n const contentForMode = filteredContent[mode]\r\n filteredContent[mode] = this.filterContent(contentForMode, filter)\r\n })\r\n }\r\n filteredContent = [filteredContent]\r\n }\r\n // Apply filtering\r\n filteredContent = filteredContent.filter(sift(filter))\r\n return (isArray ? filteredContent : filteredContent[0])\r\n },\r\n getComponents (content, mode, context) {\r\n let components = []\r\n\r\n // Get component config for given mode if any\r\n if (Array.isArray(content)) {\r\n components = content\r\n } else {\r\n mode = this.validateMode(content, mode)\r\n components = _.get(content, mode)\r\n }\r\n // Apply filtering\r\n // components = this.filterContent(components, filter)\r\n const processedComponents = []\r\n // Then create component objects\r\n _.forEach(components, (component) => {\r\n let isVisible = _.get(component, 'visible', true)\r\n // Can be a functional call\r\n if (typeof isVisible === 'function') {\r\n isVisible = isVisible(context)\r\n }\r\n // If not a functional call the target property can be a reactive one\r\n // so that we \"bind\" it to the component instead of \"filter\" the component here\r\n component.isVisible = isVisible\r\n // Define the component key\r\n const componentName = _.get(component, 'component', 'frame/KAction')\r\n const componentKey = _.kebabCase(path.basename(componentName))\r\n // Clone the component and add the required props\r\n component.componentName = componentName\r\n component.componentKey = componentKey\r\n component.uid = uid()\r\n processedComponents.push(component)\r\n })\r\n return processedComponents\r\n },\r\n bindParam (param, context) {\r\n return (typeof param === 'string') ? (param.startsWith(':') ? _.get(context, param.substring(1)) : param) : param\r\n },\r\n bindParams (params, context) {\r\n // A parameter like :xxx means xxx is a property of the component, not a static value\r\n // In that case remove trailing : and get property value dynamically\r\n if (_.isNil(params)) {\r\n return params\r\n } else if (Array.isArray(params)) {\r\n return params.map(param => this.bindParams(param, context))\r\n } else if (typeof params === 'object') {\r\n return _.mapValues(params, (value, key) => this.bindParams(value, context))\r\n } else {\r\n return this.bindParam(params, context)\r\n }\r\n },\r\n generateHandler (context, name, params) {\r\n // When the handler can be a simple getter, eg is visible use case,\r\n // we allow a property value instead of a function and a logical NOT\r\n const isNot = name.startsWith('!')\r\n if (isNot) name = name.substring(1)\r\n return (...args) => {\r\n let result\r\n const handler = _.get(context, name)\r\n // Function call or property value read ?\r\n if (typeof handler === 'function') {\r\n // Provided parameters or simply forward arguments ?\r\n result = (params ? handler(...this.bindParams(params, context)) : handler(...args))\r\n } else {\r\n result = handler\r\n }\r\n // Logical NOT to be performed ?\r\n return (isNot ? !result : result)\r\n }\r\n },\r\n bindHandler (component, path, context) {\r\n const handler = _.get(component, path)\r\n // Could be an array if multiple handlers to be called\r\n if (Array.isArray(handler)) {\r\n // Process all array elements, manage the case where the handler is simply a function/property name\r\n const handlers = handler.map(h => this.generateHandler(context, h.name || h, h.params))\r\n // In that specific case the result is a boolean AND operation\r\n _.set(component, path, (...args) => handlers.reduce((result, h) => result && h(...args), true))\r\n } else if (handler && typeof handler === 'object') {\r\n // Could be a structure with name and possibly params specified\r\n if (handler.name) {\r\n _.set(component, path, this.generateHandler(context, handler.name, handler.params))\r\n } else {\r\n logger.debug(`Invalid handler binding for ${handler}: you must provide the name to the function to be called`)\r\n }\r\n } else if (typeof handler === 'string') { // Or only name if no params are specified\r\n _.set(component, path, this.generateHandler(context, handler))\r\n }\r\n // Get back processed handler function\r\n return _.get(component, path)\r\n },\r\n bindProperties (item, context) {\r\n if (typeof item === 'string') {\r\n if (item.startsWith(':')) return _.get(context, item.substring(1))\r\n } else if (Array.isArray(item)) {\r\n for (let i = 0; i < item.length; i++) {\r\n item[i] = this.bindProperties(item[i], context)\r\n }\r\n } else if (typeof item === 'object') {\r\n _.forOwn(item, (value, key) => {\r\n // Skip 'reserved' property\r\n if ((key !== 'content') && (key !== 'bind')) item[key] = this.bindProperties(value, context)\r\n })\r\n }\r\n return item\r\n },\r\n // Perform binding between a configuration object and a given context object\r\n bindContent (content, context) {\r\n const components = _.flatMapDeep(content)\r\n _.forEach(components, (component) => {\r\n // Process component handlers\r\n handlers.forEach(handler => this.bindHandler(component, handler, context))\r\n // Then process component props\r\n // FIXME: don't know why but this generic binding function does not seem to work\r\n // It should allow to wrote any property like { label: ':xxx' } and bind it\r\n // to a component property from the context like we do for handler\r\n // this.bindProperties(component, context)\r\n // The only way to make it work is to add props at the root level\r\n const binding = component.bind ? component.bind : null\r\n if (binding) component.props = _.get(context, binding)\r\n // Recursively bind the props/handlers on the sub content object\r\n if (component.content) this.bindContent(component.content, context)\r\n })\r\n return content\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../core/client/layout.js"],"names":["components","handlers","Layout","initialize","forEach","component","Store","set","content","mode","undefined","filter","visible","getHeader","get","setHeader","patch","setHeaderMode","setHeaderVisible","clearHeader","getFooter","setFooter","setFooterMode","setFooterVisible","clearFooter","validateMode","modes","_","keys","isEmpty","includes","filterContent","isArray","Array","filteredContent","contentForMode","item","getComponents","context","processedComponents","isVisible","componentName","componentKey","kebabCase","path","basename","uid","push","bindParam","param","startsWith","substring","bindParams","params","isNil","map","mapValues","value","key","generateHandler","name","isNot","args","result","handler","bindHandler","h","reduce","logger","debug","bindProperties","i","length","forOwn","bindContent","flatMapDeep","binding","bind","props"],"mappings":"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","file":"layout.js","sourcesContent":["import _ from 'lodash'\r\nimport path from 'path'\r\nimport logger from 'loglevel'\r\nimport sift from 'sift'\r\nimport { uid } from 'quasar'\r\nimport { Store } from './store'\r\n\r\nconst components = ['header', 'footer']\r\nconst handlers = ['handler', 'visible', 'on.listener']\r\n\r\n// Export singleton\r\nexport const Layout = {\r\n initialize () {\r\n components.forEach(component => {\r\n Store.set(component, { content: null, mode: undefined, filter: {}, visible: false })\r\n })\r\n },\r\n getHeader () {\r\n return Store.get(components[0])\r\n },\r\n setHeader (content, mode, filter, visible) {\r\n Store.patch(components[0], { content, mode, filter, visible })\r\n },\r\n setHeaderMode (mode) {\r\n Store.patch(components[0], { mode })\r\n },\r\n setHeaderVisible (visible) {\r\n Store.patch(components[0], { visible })\r\n },\r\n clearHeader () {\r\n Store.patch(components[0], { content: null, mode: undefined, visible: false })\r\n },\r\n getFooter () {\r\n return Store.get(components[1])\r\n },\r\n setFooter (content, mode, filter, visible) {\r\n Store.patch(components[1], { content, mode, filter, visible })\r\n },\r\n setFooterMode (mode) {\r\n Store.patch(components[1], { mode })\r\n },\r\n setFooterVisible (visible) {\r\n Store.patch(components[1], { visible })\r\n },\r\n clearFooter () {\r\n Store.patch(components[1], { content: null, mode: undefined, visible: false })\r\n },\r\n validateMode (content, mode) {\r\n const modes = _.keys(content)\r\n if (_.isEmpty(modes)) return undefined\r\n if (modes.includes(mode)) return mode\r\n return modes[0]\r\n },\r\n filterContent (content, filter) {\r\n // Handle array and object case\r\n const isArray = Array.isArray(content)\r\n const modes = _.keys(content)\r\n let filteredContent = content\r\n if (!isArray) {\r\n // Recurse ?\r\n if (filteredContent.content) {\r\n filteredContent.content = this.filterContent(filteredContent.content, filter)\r\n } else {\r\n modes.forEach(mode => {\r\n const contentForMode = filteredContent[mode]\r\n filteredContent[mode] = this.filterContent(contentForMode, filter)\r\n })\r\n }\r\n filteredContent = [filteredContent]\r\n } else {\r\n filteredContent.forEach(item => {\r\n // Recurse ?\r\n if (item.content) {\r\n item.content = this.filterContent(item.content, filter)\r\n }\r\n })\r\n }\r\n // Apply filtering\r\n filteredContent = filteredContent.filter(sift(filter))\r\n return (isArray ? filteredContent : filteredContent[0])\r\n },\r\n getComponents (content, mode, context) {\r\n let components = []\r\n\r\n // Get component config for given mode if any\r\n if (Array.isArray(content)) {\r\n components = content\r\n } else {\r\n mode = this.validateMode(content, mode)\r\n components = _.get(content, mode)\r\n }\r\n // Apply filtering\r\n // components = this.filterContent(components, filter)\r\n const processedComponents = []\r\n // Then create component objects\r\n _.forEach(components, (component) => {\r\n let isVisible = _.get(component, 'visible', true)\r\n // Can be a functional call\r\n if (typeof isVisible === 'function') {\r\n isVisible = isVisible(context)\r\n }\r\n // If not a functional call the target property can be a reactive one\r\n // so that we \"bind\" it to the component instead of \"filter\" the component here\r\n component.isVisible = isVisible\r\n // Define the component key\r\n const componentName = _.get(component, 'component', 'frame/KAction')\r\n const componentKey = _.kebabCase(path.basename(componentName))\r\n // Clone the component and add the required props\r\n component.componentName = componentName\r\n component.componentKey = componentKey\r\n component.uid = uid()\r\n processedComponents.push(component)\r\n })\r\n return processedComponents\r\n },\r\n bindParam (param, context) {\r\n return (typeof param === 'string') ? (param.startsWith(':') ? _.get(context, param.substring(1)) : param) : param\r\n },\r\n bindParams (params, context) {\r\n // A parameter like :xxx means xxx is a property of the component, not a static value\r\n // In that case remove trailing : and get property value dynamically\r\n if (_.isNil(params)) {\r\n return params\r\n } else if (Array.isArray(params)) {\r\n return params.map(param => this.bindParams(param, context))\r\n } else if (typeof params === 'object') {\r\n return _.mapValues(params, (value, key) => this.bindParams(value, context))\r\n } else {\r\n return this.bindParam(params, context)\r\n }\r\n },\r\n generateHandler (context, name, params) {\r\n // When the handler can be a simple getter, eg is visible use case,\r\n // we allow a property value instead of a function and a logical NOT\r\n const isNot = name.startsWith('!')\r\n if (isNot) name = name.substring(1)\r\n return (...args) => {\r\n let result\r\n const handler = _.get(context, name)\r\n // Function call or property value read ?\r\n if (typeof handler === 'function') {\r\n // Provided parameters or simply forward arguments ?\r\n result = (params ? handler(...this.bindParams(params, context)) : handler(...args))\r\n } else {\r\n result = handler\r\n }\r\n // Logical NOT to be performed ?\r\n return (isNot ? !result : result)\r\n }\r\n },\r\n bindHandler (component, path, context) {\r\n const handler = _.get(component, path)\r\n // Could be an array if multiple handlers to be called\r\n if (Array.isArray(handler)) {\r\n // Process all array elements, manage the case where the handler is simply a function/property name\r\n const handlers = handler.map(h => this.generateHandler(context, h.name || h, h.params))\r\n // In that specific case the result is a boolean AND operation\r\n _.set(component, path, (...args) => handlers.reduce((result, h) => result && h(...args), true))\r\n } else if (handler && typeof handler === 'object') {\r\n // Could be a structure with name and possibly params specified\r\n if (handler.name) {\r\n _.set(component, path, this.generateHandler(context, handler.name, handler.params))\r\n } else {\r\n logger.debug(`Invalid handler binding for ${handler}: you must provide the name to the function to be called`)\r\n }\r\n } else if (typeof handler === 'string') { // Or only name if no params are specified\r\n _.set(component, path, this.generateHandler(context, handler))\r\n }\r\n // Get back processed handler function\r\n return _.get(component, path)\r\n },\r\n bindProperties (item, context) {\r\n if (typeof item === 'string') {\r\n if (item.startsWith(':')) return _.get(context, item.substring(1))\r\n } else if (Array.isArray(item)) {\r\n for (let i = 0; i < item.length; i++) {\r\n item[i] = this.bindProperties(item[i], context)\r\n }\r\n } else if (typeof item === 'object') {\r\n _.forOwn(item, (value, key) => {\r\n // Skip 'reserved' property\r\n if ((key !== 'content') && (key !== 'bind')) item[key] = this.bindProperties(value, context)\r\n })\r\n }\r\n return item\r\n },\r\n // Perform binding between a configuration object and a given context object\r\n bindContent (content, context) {\r\n const components = _.flatMapDeep(content)\r\n _.forEach(components, (component) => {\r\n // Process component handlers\r\n handlers.forEach(handler => this.bindHandler(component, handler, context))\r\n // Then process component props\r\n // FIXME: don't know why but this generic binding function does not seem to work\r\n // It should allow to wrote any property like { label: ':xxx' } and bind it\r\n // to a component property from the context like we do for handler\r\n // this.bindProperties(component, context)\r\n // The only way to make it work is to add props at the root level\r\n const binding = component.bind ? component.bind : null\r\n if (binding) component.props = _.get(context, binding)\r\n // Recursively bind the props/handlers on the sub content object\r\n if (component.content) this.bindContent(component.content, context)\r\n })\r\n return content\r\n }\r\n}\r\n"]}
@@ -14,30 +14,40 @@ var _permissions = require('../../common/permissions');
14
14
 
15
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
16
 
17
+ function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
18
+
17
19
  const authorisationMixin = {
18
20
  methods: {
19
21
  updateAbilities() {
20
- const user = _store.Store.get('user');
21
- let abilities;
22
- if (user) {
23
- abilities = (0, _permissions.defineAbilities)(user);
24
- _store.Store.set('user.abilities', abilities);
25
- }
26
- if (abilities) {
27
- _loglevel2.default.debug('New user abilities: ', abilities.rules);
28
- }
29
- return abilities;
22
+ var _this = this;
23
+
24
+ return _asyncToGenerator(function* () {
25
+ const user = _store.Store.get('user');
26
+ let abilities;
27
+ if (user) {
28
+ abilities = yield (0, _permissions.defineAbilities)(user, _this.$api);
29
+ _store.Store.set('user.abilities', abilities);
30
+ }
31
+ if (abilities) {
32
+ _loglevel2.default.debug('New user abilities: ', abilities.rules);
33
+ }
34
+ return abilities;
35
+ })();
30
36
  }
31
37
  },
32
38
  created() {
33
- // Check if abilities are already computed
34
- const abilities = _store.Store.get('user.abilities');
35
- if (!abilities) {
36
- // Otherwise try to compute them
37
- this.updateAbilities();
38
- }
39
- // Whenever the user is updated, update abilities as well
40
- this.$events.$on('user-changed', this.updateAbilities);
39
+ var _this2 = this;
40
+
41
+ return _asyncToGenerator(function* () {
42
+ // Check if abilities are already computed
43
+ const abilities = _store.Store.get('user.abilities');
44
+ if (!abilities) {
45
+ // Otherwise try to compute them
46
+ yield _this2.updateAbilities();
47
+ }
48
+ // Whenever the user is updated, update abilities as well
49
+ _this2.$events.$on('user-changed', _this2.updateAbilities);
50
+ })();
41
51
  },
42
52
  beforeDestroy() {
43
53
  this.$events.$off('user-changed', this.updateAbilities);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../core/client/mixins/mixin.authorisation.js"],"names":["authorisationMixin","methods","updateAbilities","user","Store","get","abilities","set","logger","debug","rules","created","$events","$on","beforeDestroy","$off"],"mappings":";;;;;;AAAA;;;;AACA;;AACA;;;;AAEA,MAAMA,qBAAqB;AACzBC,WAAS;AACPC,sBAAmB;AACjB,YAAMC,OAAOC,aAAMC,GAAN,CAAU,MAAV,CAAb;AACA,UAAIC,SAAJ;AACA,UAAIH,IAAJ,EAAU;AACRG,oBAAY,kCAAgBH,IAAhB,CAAZ;AACAC,qBAAMG,GAAN,CAAU,gBAAV,EAA4BD,SAA5B;AACD;AACD,UAAIA,SAAJ,EAAe;AACbE,2BAAOC,KAAP,CAAa,sBAAb,EAAqCH,UAAUI,KAA/C;AACD;AACD,aAAOJ,SAAP;AACD;AAZM,GADgB;AAezBK,YAAW;AACT;AACA,UAAML,YAAYF,aAAMC,GAAN,CAAU,gBAAV,CAAlB;AACA,QAAI,CAACC,SAAL,EAAgB;AACd;AACA,WAAKJ,eAAL;AACD;AACD;AACA,SAAKU,OAAL,CAAaC,GAAb,CAAiB,cAAjB,EAAiC,KAAKX,eAAtC;AACD,GAxBwB;AAyBzBY,kBAAiB;AACf,SAAKF,OAAL,CAAaG,IAAb,CAAkB,cAAlB,EAAkC,KAAKb,eAAvC;AACD;AA3BwB,CAA3B;;kBA8BeF,kB","file":"mixin.authorisation.js","sourcesContent":["import logger from 'loglevel'\r\nimport { Store } from '../store'\r\nimport { defineAbilities } from '../../common/permissions'\r\n\r\nconst authorisationMixin = {\r\n methods: {\r\n updateAbilities () {\r\n const user = Store.get('user')\r\n let abilities\r\n if (user) {\r\n abilities = defineAbilities(user)\r\n Store.set('user.abilities', abilities)\r\n }\r\n if (abilities) {\r\n logger.debug('New user abilities: ', abilities.rules)\r\n }\r\n return abilities\r\n }\r\n },\r\n created () {\r\n // Check if abilities are already computed\r\n const abilities = Store.get('user.abilities')\r\n if (!abilities) {\r\n // Otherwise try to compute them\r\n this.updateAbilities()\r\n }\r\n // Whenever the user is updated, update abilities as well\r\n this.$events.$on('user-changed', this.updateAbilities)\r\n },\r\n beforeDestroy () {\r\n this.$events.$off('user-changed', this.updateAbilities)\r\n }\r\n}\r\n\r\nexport default authorisationMixin\r\n"]}
1
+ {"version":3,"sources":["../../../../core/client/mixins/mixin.authorisation.js"],"names":["authorisationMixin","methods","updateAbilities","user","Store","get","abilities","$api","set","logger","debug","rules","created","$events","$on","beforeDestroy","$off"],"mappings":";;;;;;AAAA;;;;AACA;;AACA;;;;;;AAEA,MAAMA,qBAAqB;AACzBC,WAAS;AACDC,mBAAN,GAAyB;AAAA;;AAAA;AACvB,cAAMC,OAAOC,aAAMC,GAAN,CAAU,MAAV,CAAb;AACA,YAAIC,SAAJ;AACA,YAAIH,IAAJ,EAAU;AACRG,sBAAY,MAAM,kCAAgBH,IAAhB,EAAsB,MAAKI,IAA3B,CAAlB;AACAH,uBAAMI,GAAN,CAAU,gBAAV,EAA4BF,SAA5B;AACD;AACD,YAAIA,SAAJ,EAAe;AACbG,6BAAOC,KAAP,CAAa,sBAAb,EAAqCJ,UAAUK,KAA/C;AACD;AACD,eAAOL,SAAP;AAVuB;AAWxB;AAZM,GADgB;AAenBM,SAAN,GAAiB;AAAA;;AAAA;AACf;AACA,YAAMN,YAAYF,aAAMC,GAAN,CAAU,gBAAV,CAAlB;AACA,UAAI,CAACC,SAAL,EAAgB;AACd;AACA,cAAM,OAAKJ,eAAL,EAAN;AACD;AACD;AACA,aAAKW,OAAL,CAAaC,GAAb,CAAiB,cAAjB,EAAiC,OAAKZ,eAAtC;AARe;AAShB,GAxBwB;AAyBzBa,kBAAiB;AACf,SAAKF,OAAL,CAAaG,IAAb,CAAkB,cAAlB,EAAkC,KAAKd,eAAvC;AACD;AA3BwB,CAA3B;;kBA8BeF,kB","file":"mixin.authorisation.js","sourcesContent":["import logger from 'loglevel'\r\nimport { Store } from '../store'\r\nimport { defineAbilities } from '../../common/permissions'\r\n\r\nconst authorisationMixin = {\r\n methods: {\r\n async updateAbilities () {\r\n const user = Store.get('user')\r\n let abilities\r\n if (user) {\r\n abilities = await defineAbilities(user, this.$api)\r\n Store.set('user.abilities', abilities)\r\n }\r\n if (abilities) {\r\n logger.debug('New user abilities: ', abilities.rules)\r\n }\r\n return abilities\r\n }\r\n },\r\n async created () {\r\n // Check if abilities are already computed\r\n const abilities = Store.get('user.abilities')\r\n if (!abilities) {\r\n // Otherwise try to compute them\r\n await this.updateAbilities()\r\n }\r\n // Whenever the user is updated, update abilities as well\r\n this.$events.$on('user-changed', this.updateAbilities)\r\n },\r\n beforeDestroy () {\r\n this.$events.$off('user-changed', this.updateAbilities)\r\n }\r\n}\r\n\r\nexport default authorisationMixin\r\n"]}
@@ -24,6 +24,11 @@ const baseCollectionMixin = {
24
24
  appendItems: {
25
25
  type: Boolean,
26
26
  default: false
27
+ },
28
+ // Only invoke refresh at most once per every refreshThrottle milliseconds
29
+ refreshThrottle: {
30
+ type: Number,
31
+ default: 500
27
32
  }
28
33
  },
29
34
  computed: {
@@ -42,18 +47,25 @@ const baseCollectionMixin = {
42
47
  subscribe(query) {
43
48
  // Remove previous listener if any
44
49
  this.unsubscribe();
45
- this.itemListener = this.loadService().watch({ listStrategy: this.listStrategy || 'always' }).find({ query }).subscribe(response => {
50
+ this.itemListener = this.getService().watch({ listStrategy: this.listStrategy || 'always' }).find({ query }).subscribe(response => {
46
51
  // Manage GeoJson features collection as well
47
52
  if (response.type === 'FeatureCollection') {
48
53
  this.items = response.features;
49
54
  } else if (this.appendItems) {
50
- // Ensure there is no duplicates when appending
51
- this.items = _lodash2.default.unionBy(this.items, response.data, '_id');
55
+ // Append the response ensuring there is no duplicates
56
+ this.items = _lodash2.default.unionBy(response.data, this.items, '_id');
57
+ // We keep order from the updated list as depending on the sorting criteria a new item might have to be pushed on top of current items
58
+ const sortQuery = _lodash2.default.get(this.getCollectionBaseQuery(), '$sort');
59
+ if (sortQuery) {
60
+ this.items = _lodash2.default.orderBy(this.items, _lodash2.default.keys(sortQuery), _lodash2.default.map(_lodash2.default.values(sortQuery), value => {
61
+ return value > 0 ? 'asc' : 'desc';
62
+ }));
63
+ }
52
64
  } else {
53
65
  this.items = response.data;
54
66
  }
55
67
  this.nbTotalItems = response.total;
56
- this.$emit('collection-refreshed', this.$data);
68
+ this.$emit('collection-refreshed', this.items);
57
69
  }, error => {
58
70
  this.$events.$emit('error', error);
59
71
  });
@@ -81,24 +93,60 @@ const baseCollectionMixin = {
81
93
  };
82
94
  } else return {};
83
95
  },
84
- refreshCollection() {
85
- // Add locale to perform sorting (i.e. collation) correctly w.r.t. user's language
86
- const fullQuery = Object.assign({ $locale: (0, _utils.getLocale)() }, this.getCollectionBaseQuery(), this.getCollectionFilterQuery(), this.getCollectionPaginationQuery());
87
- // Find the desired items
88
- this.subscribe(fullQuery);
96
+ resetCollection() {
97
+ // Reset pagination and start again refreshing the collection
98
+ this.items = [];
99
+ this.currentPage = 1;
100
+ this.refreshCollection();
89
101
  },
90
102
  onPageChanged() {
91
103
  this.refreshCollection();
92
104
  },
105
+ onItemToggled(item, toggled) {
106
+ this.$emit('toggle-changed', item, toggled);
107
+ },
93
108
  onItemSelected(item, section) {
94
109
  this.$emit('selection-changed', item, section);
95
110
  },
96
111
  onItemsSelected(items) {
97
112
  this.$emit('selection-changed', items);
113
+ },
114
+ onItemsUpdated(items) {
115
+ // When we append items some items of the previous pages might have been updated.
116
+ // In this case we need to reset the full collection as Rx only tracks changes on the current page
117
+ let updatedItems = Array.isArray(items) ? items : [items];
118
+ // We keep order from the updated list as depending on the sorting criteria a new item might have to be pushed on top of current items
119
+ updatedItems = _lodash2.default.intersectionWith(this.items, updatedItems, (item1, item2) => item1._id.toString() === item2._id.toString());
120
+ if (updatedItems.length > 0) this.resetCollection();
121
+ }
122
+ },
123
+ created() {
124
+ // Avoid initiating too much request as the same time, this might be the case
125
+ // when async UI components update simultaneously the base/filter query
126
+ // see https://github.com/kalisio/kdk/issues/432
127
+ const refreshCollection = () => {
128
+ // Add locale to perform sorting (i.e. collation) correctly w.r.t. user's language
129
+ const fullQuery = Object.assign({ $locale: (0, _utils.getLocale)() }, this.getCollectionBaseQuery(), this.getCollectionFilterQuery(), this.getCollectionPaginationQuery());
130
+ // Find the desired items
131
+ this.subscribe(fullQuery);
132
+ };
133
+ this.refreshCollection = _lodash2.default.throttle(refreshCollection, this.refreshThrottle, { leading: false });
134
+
135
+ if (this.appendItems) {
136
+ const service = this.getService();
137
+ service.on('patched', this.onItemsUpdated);
138
+ service.on('updated', this.onItemsUpdated);
139
+ service.on('removed', this.onItemsUpdated);
98
140
  }
99
141
  },
100
142
  beforeDestroy() {
101
143
  this.unsubscribe();
144
+ if (this.appendItems) {
145
+ const service = this.getService();
146
+ service.off('patched', this.onItemsUpdated);
147
+ service.off('updated', this.onItemsUpdated);
148
+ service.off('removed', this.onItemsUpdated);
149
+ }
102
150
  }
103
151
  };
104
152
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../core/client/mixins/mixin.base-collection.js"],"names":["baseCollectionMixin","props","nbItemsPerPage","type","Number","default","appendItems","Boolean","computed","nbPages","Math","ceil","nbTotalItems","data","items","currentPage","methods","subscribe","query","unsubscribe","itemListener","loadService","watch","listStrategy","find","response","features","_","unionBy","total","$emit","$data","error","$events","getCollectionBaseQuery","getCollectionFilterQuery","getCollectionPaginationQuery","$limit","$skip","refreshCollection","fullQuery","Object","assign","$locale","onPageChanged","onItemSelected","item","section","onItemsSelected","beforeDestroy"],"mappings":";;;;;;AAAA;;;;AACA;;;;AAEA,MAAMA,sBAAsB;AAC1BC,SAAO;AACL;AACA;AACAC,oBAAgB;AACdC,YAAMC,MADQ;AAEdC,eAAS;AAFK,KAHX;AAOL;AACAC,iBAAa;AACXH,YAAMI,OADK;AAEXF,eAAS;AAFE;AARR,GADmB;AAc1BG,YAAU;AACRC,cAAW;AACT,aAAQ,KAAKP,cAAL,GAAsB,CAAtB,GAA0BQ,KAAKC,IAAL,CAAU,KAAKC,YAAL,GAAoB,KAAKV,cAAnC,CAA1B,GAA+E,CAAvF;AACD;AAHO,GAdgB;AAmB1BW,SAAQ;AACN,WAAO;AACLC,aAAO,EADF;AAELF,oBAAc,CAFT;AAGLG,mBAAa;AAHR,KAAP;AAKD,GAzByB;AA0B1BC,WAAS;AACPC,cAAWC,KAAX,EAAkB;AAChB;AACA,WAAKC,WAAL;AACA,WAAKC,YAAL,GAAoB,KAAKC,WAAL,GAAmBC,KAAnB,CAAyB,EAAEC,cAAc,KAAKA,YAAL,IAAqB,QAArC,EAAzB,EACjBC,IADiB,CACZ,EAAEN,KAAF,EADY,EAEjBD,SAFiB,CAEPQ,YAAY;AACrB;AACA,YAAIA,SAAStB,IAAT,KAAkB,mBAAtB,EAA2C;AACzC,eAAKW,KAAL,GAAaW,SAASC,QAAtB;AACD,SAFD,MAEO,IAAI,KAAKpB,WAAT,EAAsB;AAC3B;AACA,eAAKQ,KAAL,GAAaa,iBAAEC,OAAF,CAAU,KAAKd,KAAf,EAAsBW,SAASZ,IAA/B,EAAqC,KAArC,CAAb;AACD,SAHM,MAGA;AACL,eAAKC,KAAL,GAAaW,SAASZ,IAAtB;AACD;AACD,aAAKD,YAAL,GAAoBa,SAASI,KAA7B;AACA,aAAKC,KAAL,CAAW,sBAAX,EAAmC,KAAKC,KAAxC;AACD,OAdiB,EAcfC,SAAS;AACV,aAAKC,OAAL,CAAaH,KAAb,CAAmB,OAAnB,EAA4BE,KAA5B;AACD,OAhBiB,CAApB;AAiBD,KArBM;AAsBPb,kBAAe;AACb,UAAI,KAAKC,YAAT,EAAuB;AACrB,aAAKA,YAAL,CAAkBD,WAAlB;AACA,aAAKC,YAAL,GAAoB,IAApB;AACD;AACF,KA3BM;AA4BPc,6BAA0B;AACxB;AACA,aAAO,EAAP;AACD,KA/BM;AAgCPC,+BAA4B;AAC1B;AACA,aAAO,EAAP;AACD,KAnCM;AAoCPC,mCAAgC;AAC9B;AACA,UAAI,KAAKlC,cAAL,GAAsB,CAA1B,EAA6B;AAC3B,eAAO;AACLmC,kBAAQ,KAAKnC,cADR;AAELoC,iBAAO,CAAC,KAAKvB,WAAL,GAAmB,CAApB,IAAyB,KAAKb;AAFhC,SAAP;AAID,OALD,MAKO,OAAO,EAAP;AACR,KA5CM;AA6CPqC,wBAAqB;AACnB;AACA,YAAMC,YAAYC,OAAOC,MAAP,CAAc,EAAEC,SAAS,uBAAX,EAAd,EAChB,KAAKT,sBAAL,EADgB,EAEhB,KAAKC,wBAAL,EAFgB,EAGhB,KAAKC,4BAAL,EAHgB,CAAlB;AAIA;AACA,WAAKnB,SAAL,CAAeuB,SAAf;AACD,KArDM;AAsDPI,oBAAiB;AACf,WAAKL,iBAAL;AACD,KAxDM;AAyDPM,mBAAgBC,IAAhB,EAAsBC,OAAtB,EAA+B;AAC7B,WAAKjB,KAAL,CAAW,mBAAX,EAAgCgB,IAAhC,EAAsCC,OAAtC;AACD,KA3DM;AA4DPC,oBAAiBlC,KAAjB,EAAwB;AACtB,WAAKgB,KAAL,CAAW,mBAAX,EAAgChB,KAAhC;AACD;AA9DM,GA1BiB;AA0F1BmC,kBAAiB;AACf,SAAK9B,WAAL;AACD;AA5FyB,CAA5B;;kBA+FenB,mB","file":"mixin.base-collection.js","sourcesContent":["import _ from 'lodash'\r\nimport { getLocale } from '../utils'\r\n\r\nconst baseCollectionMixin = {\r\n props: {\r\n // This value can be overriden in activities if they want to manage pagination by themselves\r\n // nbItemsPerPage = 0 means that the client does not handle pagination and server defaults will be used\r\n nbItemsPerPage: {\r\n type: Number,\r\n default: 12\r\n },\r\n // This value indicate if items of each page replace or are appended to previous ones\r\n appendItems: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n computed: {\r\n nbPages () {\r\n return (this.nbItemsPerPage > 0 ? Math.ceil(this.nbTotalItems / this.nbItemsPerPage) : 1)\r\n }\r\n },\r\n data () {\r\n return {\r\n items: [],\r\n nbTotalItems: 0,\r\n currentPage: 1\r\n }\r\n },\r\n methods: {\r\n subscribe (query) {\r\n // Remove previous listener if any\r\n this.unsubscribe()\r\n this.itemListener = this.loadService().watch({ listStrategy: this.listStrategy || 'always' })\r\n .find({ query })\r\n .subscribe(response => {\r\n // Manage GeoJson features collection as well\r\n if (response.type === 'FeatureCollection') {\r\n this.items = response.features\r\n } else if (this.appendItems) {\r\n // Ensure there is no duplicates when appending\r\n this.items = _.unionBy(this.items, response.data, '_id')\r\n } else {\r\n this.items = response.data\r\n }\r\n this.nbTotalItems = response.total\r\n this.$emit('collection-refreshed', this.$data)\r\n }, error => {\r\n this.$events.$emit('error', error)\r\n })\r\n },\r\n unsubscribe () {\r\n if (this.itemListener) {\r\n this.itemListener.unsubscribe()\r\n this.itemListener = null\r\n }\r\n },\r\n getCollectionBaseQuery () {\r\n // This method should be overriden in collections\r\n return {}\r\n },\r\n getCollectionFilterQuery () {\r\n // This method should be overriden in collections\r\n return {}\r\n },\r\n getCollectionPaginationQuery () {\r\n // This method can be overriden in collections\r\n if (this.nbItemsPerPage > 0) {\r\n return {\r\n $limit: this.nbItemsPerPage,\r\n $skip: (this.currentPage - 1) * this.nbItemsPerPage\r\n }\r\n } else return {}\r\n },\r\n refreshCollection () {\r\n // Add locale to perform sorting (i.e. collation) correctly w.r.t. user's language\r\n const fullQuery = Object.assign({ $locale: getLocale() },\r\n this.getCollectionBaseQuery(),\r\n this.getCollectionFilterQuery(),\r\n this.getCollectionPaginationQuery())\r\n // Find the desired items\r\n this.subscribe(fullQuery)\r\n },\r\n onPageChanged () {\r\n this.refreshCollection()\r\n },\r\n onItemSelected (item, section) {\r\n this.$emit('selection-changed', item, section)\r\n },\r\n onItemsSelected (items) {\r\n this.$emit('selection-changed', items)\r\n }\r\n },\r\n beforeDestroy () {\r\n this.unsubscribe()\r\n }\r\n}\r\n\r\nexport default baseCollectionMixin\r\n"]}
1
+ {"version":3,"sources":["../../../../core/client/mixins/mixin.base-collection.js"],"names":["baseCollectionMixin","props","nbItemsPerPage","type","Number","default","appendItems","Boolean","refreshThrottle","computed","nbPages","Math","ceil","nbTotalItems","data","items","currentPage","methods","subscribe","query","unsubscribe","itemListener","getService","watch","listStrategy","find","response","features","_","unionBy","sortQuery","get","getCollectionBaseQuery","orderBy","keys","map","values","value","total","$emit","error","$events","getCollectionFilterQuery","getCollectionPaginationQuery","$limit","$skip","resetCollection","refreshCollection","onPageChanged","onItemToggled","item","toggled","onItemSelected","section","onItemsSelected","onItemsUpdated","updatedItems","Array","isArray","intersectionWith","item1","item2","_id","toString","length","created","fullQuery","Object","assign","$locale","throttle","leading","service","on","beforeDestroy","off"],"mappings":"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","file":"mixin.base-collection.js","sourcesContent":["import _ from 'lodash'\r\nimport { getLocale } from '../utils'\r\n\r\nconst baseCollectionMixin = {\r\n props: {\r\n // This value can be overriden in activities if they want to manage pagination by themselves\r\n // nbItemsPerPage = 0 means that the client does not handle pagination and server defaults will be used\r\n nbItemsPerPage: {\r\n type: Number,\r\n default: 12\r\n },\r\n // This value indicate if items of each page replace or are appended to previous ones\r\n appendItems: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // Only invoke refresh at most once per every refreshThrottle milliseconds\r\n refreshThrottle: {\r\n type: Number,\r\n default: 500\r\n }\r\n },\r\n computed: {\r\n nbPages () {\r\n return (this.nbItemsPerPage > 0 ? Math.ceil(this.nbTotalItems / this.nbItemsPerPage) : 1)\r\n }\r\n },\r\n data () {\r\n return {\r\n items: [],\r\n nbTotalItems: 0,\r\n currentPage: 1\r\n }\r\n },\r\n methods: {\r\n subscribe (query) {\r\n // Remove previous listener if any\r\n this.unsubscribe()\r\n this.itemListener = this.getService().watch({ listStrategy: this.listStrategy || 'always' })\r\n .find({ query })\r\n .subscribe(response => {\r\n // Manage GeoJson features collection as well\r\n if (response.type === 'FeatureCollection') {\r\n this.items = response.features\r\n } else if (this.appendItems) {\r\n // Append the response ensuring there is no duplicates\r\n this.items = _.unionBy(response.data, this.items, '_id')\r\n // We keep order from the updated list as depending on the sorting criteria a new item might have to be pushed on top of current items\r\n const sortQuery = _.get(this.getCollectionBaseQuery(), '$sort')\r\n if (sortQuery) {\r\n this.items = _.orderBy(this.items, _.keys(sortQuery), _.map(_.values(sortQuery), value => { return value > 0 ? 'asc' : 'desc' }))\r\n }\r\n } else {\r\n this.items = response.data\r\n }\r\n this.nbTotalItems = response.total\r\n this.$emit('collection-refreshed', this.items)\r\n }, error => {\r\n this.$events.$emit('error', error)\r\n })\r\n },\r\n unsubscribe () {\r\n if (this.itemListener) {\r\n this.itemListener.unsubscribe()\r\n this.itemListener = null\r\n }\r\n },\r\n getCollectionBaseQuery () {\r\n // This method should be overriden in collections\r\n return {}\r\n },\r\n getCollectionFilterQuery () {\r\n // This method should be overriden in collections\r\n return {}\r\n },\r\n getCollectionPaginationQuery () {\r\n // This method can be overriden in collections\r\n if (this.nbItemsPerPage > 0) {\r\n return {\r\n $limit: this.nbItemsPerPage,\r\n $skip: (this.currentPage - 1) * this.nbItemsPerPage\r\n }\r\n } else return {}\r\n },\r\n resetCollection () {\r\n // Reset pagination and start again refreshing the collection\r\n this.items = []\r\n this.currentPage = 1\r\n this.refreshCollection()\r\n },\r\n onPageChanged () {\r\n this.refreshCollection()\r\n },\r\n onItemToggled (item, toggled) {\r\n this.$emit('toggle-changed', item, toggled)\r\n },\r\n onItemSelected (item, section) {\r\n this.$emit('selection-changed', item, section)\r\n },\r\n onItemsSelected (items) {\r\n this.$emit('selection-changed', items)\r\n },\r\n onItemsUpdated (items) {\r\n // When we append items some items of the previous pages might have been updated.\r\n // In this case we need to reset the full collection as Rx only tracks changes on the current page\r\n let updatedItems = (Array.isArray(items) ? items : [items])\r\n // We keep order from the updated list as depending on the sorting criteria a new item might have to be pushed on top of current items\r\n updatedItems = _.intersectionWith(this.items, updatedItems, (item1, item2) => (item1._id.toString() === item2._id.toString()))\r\n if (updatedItems.length > 0) this.resetCollection()\r\n }\r\n },\r\n created () {\r\n // Avoid initiating too much request as the same time, this might be the case\r\n // when async UI components update simultaneously the base/filter query\r\n // see https://github.com/kalisio/kdk/issues/432\r\n const refreshCollection = () => {\r\n // Add locale to perform sorting (i.e. collation) correctly w.r.t. user's language\r\n const fullQuery = Object.assign({ $locale: getLocale() },\r\n this.getCollectionBaseQuery(),\r\n this.getCollectionFilterQuery(),\r\n this.getCollectionPaginationQuery())\r\n // Find the desired items\r\n this.subscribe(fullQuery)\r\n }\r\n this.refreshCollection = _.throttle(refreshCollection, this.refreshThrottle, { leading: false })\r\n\r\n if (this.appendItems) {\r\n const service = this.getService()\r\n service.on('patched', this.onItemsUpdated)\r\n service.on('updated', this.onItemsUpdated)\r\n service.on('removed', this.onItemsUpdated)\r\n }\r\n },\r\n beforeDestroy () {\r\n this.unsubscribe()\r\n if (this.appendItems) {\r\n const service = this.getService()\r\n service.off('patched', this.onItemsUpdated)\r\n service.off('updated', this.onItemsUpdated)\r\n service.off('removed', this.onItemsUpdated)\r\n }\r\n }\r\n}\r\n\r\nexport default baseCollectionMixin\r\n"]}
@@ -19,7 +19,7 @@ const baseContextMixin = {
19
19
  };
20
20
  },
21
21
  watch: {
22
- '$route'(to, from) {
22
+ $route(to, from) {
23
23
  // React to route changes but reusing the same component as this one is generic
24
24
  this.refreshContext();
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../core/client/mixins/mixin.base-context.js"],"names":["baseContextMixin","props","contextId","type","String","default","data","contextLoaded","watch","to","from","refreshContext","methods","clearContext","$store","set","setContext","context","get","_id","service","created","$api","getService","$config","beforeDestroy"],"mappings":";;;;;;;;AAAA,MAAMA,mBAAmB;AACvBC,SAAO;AACLC,eAAW;AACTC,YAAMC,MADG;AAETC,eAAS;AAFA;AADN,GADgB;AAOvBC,SAAQ;AACN,WAAO;AACLC,qBAAe;AADV,KAAP;AAGD,GAXsB;AAYvBC,SAAO;AACL,aAAUC,EAAV,EAAcC,IAAd,EAAoB;AAClB;AACA,WAAKC,cAAL;AACD;AAJI,GAZgB;AAkBvBC,WAAS;AACPC,mBAAgB;AACd,WAAKC,MAAL,CAAYC,GAAZ,CAAgB,SAAhB,EAA2B,IAA3B;AACA,WAAKR,aAAL,GAAqB,KAArB;AACD,KAJM;AAKPS,eAAYC,OAAZ,EAAqB;AACnB;AACA,WAAKH,MAAL,CAAYC,GAAZ,CAAgB,SAAhB,EAA2BE,OAA3B;AACA,WAAKV,aAAL,GAAqB,IAArB;AACD,KATM;AAUDI,kBAAN,GAAwB;AAAA;;AAAA;AACtB,YAAI,MAAKT,SAAT,EAAoB;AAClB;AACA,cAAIe,UAAU,MAAKH,MAAL,CAAYI,GAAZ,CAAgB,SAAhB,CAAd;AACA,cAAID,WAAWA,QAAQE,GAAR,KAAgB,MAAKjB,SAApC,EAA+C;AAC7C;AACD;AACD;AACA,gBAAKW,YAAL;AACA;AACAI,oBAAU,MAAM,MAAKG,OAAL,CAAaF,GAAb,CAAiB,MAAKhB,SAAtB,CAAhB;AACA,gBAAKc,UAAL,CAAgBC,OAAhB;AACD,SAXD,MAWO;AACL,gBAAKJ,YAAL;AACD;AAdqB;AAevB;AAzBM,GAlBc;AA6CvBQ,YAAW;AACT,SAAKD,OAAL,GAAe,KAAKE,IAAL,CAAUC,UAAV,CAAqB,KAAKC,OAAL,CAAa,iBAAb,CAArB,CAAf;AACA;AACA,SAAKb,cAAL;AACD,GAjDsB;AAkDvBc,kBAAiB;AACf,SAAKZ,YAAL;AACD;AApDsB,CAAzB;;kBAuDeb,gB","file":"mixin.base-context.js","sourcesContent":["const baseContextMixin = {\r\n props: {\r\n contextId: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n data () {\r\n return {\r\n contextLoaded: false\r\n }\r\n },\r\n watch: {\r\n '$route' (to, from) {\r\n // React to route changes but reusing the same component as this one is generic\r\n this.refreshContext()\r\n }\r\n },\r\n methods: {\r\n clearContext () {\r\n this.$store.set('context', null)\r\n this.contextLoaded = false\r\n },\r\n setContext (context) {\r\n // Set context in store so that contextual services are aware of it\r\n this.$store.set('context', context)\r\n this.contextLoaded = true\r\n },\r\n async refreshContext () {\r\n if (this.contextId) {\r\n // Context already set ?\r\n let context = this.$store.get('context')\r\n if (context && context._id === this.contextId) {\r\n return\r\n }\r\n // Otherwise clear so that underlying components will be destroyed\r\n this.clearContext()\r\n // Then update the context\r\n context = await this.service.get(this.contextId)\r\n this.setContext(context)\r\n } else {\r\n this.clearContext()\r\n }\r\n }\r\n },\r\n created () {\r\n this.service = this.$api.getService(this.$config('context.service'))\r\n // Register the context\r\n this.refreshContext()\r\n },\r\n beforeDestroy () {\r\n this.clearContext()\r\n }\r\n}\r\n\r\nexport default baseContextMixin\r\n"]}
1
+ {"version":3,"sources":["../../../../core/client/mixins/mixin.base-context.js"],"names":["baseContextMixin","props","contextId","type","String","default","data","contextLoaded","watch","$route","to","from","refreshContext","methods","clearContext","$store","set","setContext","context","get","_id","service","created","$api","getService","$config","beforeDestroy"],"mappings":";;;;;;;;AAAA,MAAMA,mBAAmB;AACvBC,SAAO;AACLC,eAAW;AACTC,YAAMC,MADG;AAETC,eAAS;AAFA;AADN,GADgB;AAOvBC,SAAQ;AACN,WAAO;AACLC,qBAAe;AADV,KAAP;AAGD,GAXsB;AAYvBC,SAAO;AACLC,WAAQC,EAAR,EAAYC,IAAZ,EAAkB;AAChB;AACA,WAAKC,cAAL;AACD;AAJI,GAZgB;AAkBvBC,WAAS;AACPC,mBAAgB;AACd,WAAKC,MAAL,CAAYC,GAAZ,CAAgB,SAAhB,EAA2B,IAA3B;AACA,WAAKT,aAAL,GAAqB,KAArB;AACD,KAJM;AAKPU,eAAYC,OAAZ,EAAqB;AACnB;AACA,WAAKH,MAAL,CAAYC,GAAZ,CAAgB,SAAhB,EAA2BE,OAA3B;AACA,WAAKX,aAAL,GAAqB,IAArB;AACD,KATM;AAUDK,kBAAN,GAAwB;AAAA;;AAAA;AACtB,YAAI,MAAKV,SAAT,EAAoB;AAClB;AACA,cAAIgB,UAAU,MAAKH,MAAL,CAAYI,GAAZ,CAAgB,SAAhB,CAAd;AACA,cAAID,WAAWA,QAAQE,GAAR,KAAgB,MAAKlB,SAApC,EAA+C;AAC7C;AACD;AACD;AACA,gBAAKY,YAAL;AACA;AACAI,oBAAU,MAAM,MAAKG,OAAL,CAAaF,GAAb,CAAiB,MAAKjB,SAAtB,CAAhB;AACA,gBAAKe,UAAL,CAAgBC,OAAhB;AACD,SAXD,MAWO;AACL,gBAAKJ,YAAL;AACD;AAdqB;AAevB;AAzBM,GAlBc;AA6CvBQ,YAAW;AACT,SAAKD,OAAL,GAAe,KAAKE,IAAL,CAAUC,UAAV,CAAqB,KAAKC,OAAL,CAAa,iBAAb,CAArB,CAAf;AACA;AACA,SAAKb,cAAL;AACD,GAjDsB;AAkDvBc,kBAAiB;AACf,SAAKZ,YAAL;AACD;AApDsB,CAAzB;;kBAuDed,gB","file":"mixin.base-context.js","sourcesContent":["const baseContextMixin = {\r\n props: {\r\n contextId: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n data () {\r\n return {\r\n contextLoaded: false\r\n }\r\n },\r\n watch: {\r\n $route (to, from) {\r\n // React to route changes but reusing the same component as this one is generic\r\n this.refreshContext()\r\n }\r\n },\r\n methods: {\r\n clearContext () {\r\n this.$store.set('context', null)\r\n this.contextLoaded = false\r\n },\r\n setContext (context) {\r\n // Set context in store so that contextual services are aware of it\r\n this.$store.set('context', context)\r\n this.contextLoaded = true\r\n },\r\n async refreshContext () {\r\n if (this.contextId) {\r\n // Context already set ?\r\n let context = this.$store.get('context')\r\n if (context && context._id === this.contextId) {\r\n return\r\n }\r\n // Otherwise clear so that underlying components will be destroyed\r\n this.clearContext()\r\n // Then update the context\r\n context = await this.service.get(this.contextId)\r\n this.setContext(context)\r\n } else {\r\n this.clearContext()\r\n }\r\n }\r\n },\r\n created () {\r\n this.service = this.$api.getService(this.$config('context.service'))\r\n // Register the context\r\n this.refreshContext()\r\n },\r\n beforeDestroy () {\r\n this.clearContext()\r\n }\r\n}\r\n\r\nexport default baseContextMixin\r\n"]}
@@ -22,15 +22,15 @@ function baseEditorMixin(formRefs) {
22
22
  props: {
23
23
  baseObject: {
24
24
  type: Object,
25
- default: function () {
26
- return {};
27
- }
25
+ default: () => {}
28
26
  },
29
27
  baseQuery: {
30
28
  type: Object,
31
- default: function () {
32
- return {};
33
- }
29
+ default: () => {}
30
+ },
31
+ schemaName: {
32
+ type: String,
33
+ default: undefined
34
34
  },
35
35
  clearButton: {
36
36
  type: String,
@@ -83,7 +83,7 @@ function baseEditorMixin(formRefs) {
83
83
  if (form.loadRefs().isFulfilled()) {
84
84
  if (this.getObject()) {
85
85
  if (this.perspective !== '') {
86
- form.fill(this.getObject()[this.perspective]);
86
+ form.fill(_lodash2.default.get(this.getObject(), this.perspective));
87
87
  } else {
88
88
  form.fill(this.getObject());
89
89
  }
@@ -183,7 +183,11 @@ function baseEditorMixin(formRefs) {
183
183
  const object = {};
184
184
  const baseObject = this.getObject() || this.baseObject;
185
185
  if (this.perspective !== '') {
186
- Object.assign(object, _lodash2.default.get(baseObject, this.perspective));
186
+ if (this.perspectiveAsObject) {
187
+ Object.assign(object, _lodash2.default.get(baseObject, this.perspective));
188
+ } else {
189
+ _lodash2.default.set(object, this.perspective, _lodash2.default.get(baseObject, this.perspective));
190
+ }
187
191
  // Keep track of ID as it is used to know if we update or create
188
192
  if (baseObject._id) object._id = baseObject._id;
189
193
  } else {
@@ -195,14 +199,18 @@ function baseEditorMixin(formRefs) {
195
199
  // Start from default query
196
200
  const query = {};
197
201
  Object.assign(query, this.baseQuery);
198
- if (this.getMode() === 'update' && this.perspective !== '') {
202
+ if (this.getMode() === 'update' && this.perspective && this.perspectiveAsObject) {
199
203
  Object.assign(query, { $select: ['_id', this.perspective] });
200
204
  }
201
205
  return query;
202
206
  },
203
207
  getSchemaName() {
208
+ if (this.schemaName) return this.schemaName;
209
+ // Can be provided as route metadata
210
+ let schemaName = _lodash2.default.get(this.$route, 'meta.schemaName');
211
+ if (schemaName) return schemaName;
204
212
  // When used with a service by default use the same name for schema as for service
205
- let schemaName = this.service + (this.objectId ? '.update' : '.create');
213
+ schemaName = this.service + (this.objectId ? '.update' : '.create');
206
214
  if (this.perspective) {
207
215
  schemaName += '-' + this.perspective;
208
216
  }
@@ -244,18 +252,22 @@ function baseEditorMixin(formRefs) {
244
252
  // Editing mode => patch the item
245
253
  if (_this3.perspective !== '') {
246
254
  const data = {};
247
- data[_this3.perspective] = _lodash2.default.omit(object, ['_id']);
248
- const response = yield _this3.servicePatch(_this3.objectId, data, { query });
255
+ if (_this3.perspectiveAsObject) {
256
+ _lodash2.default.set(data, _this3.perspective, _lodash2.default.omit(object, ['_id']));
257
+ } else {
258
+ _lodash2.default.set(data, _this3.perspective, _lodash2.default.get(object, _this3.perspective));
259
+ }
260
+ const response = yield _this3.getService().patch(_this3.objectId, data, { query });
249
261
  // Keep track of ID as it is used to know if we update or create
250
262
  if (object._id) response._id = object._id;
251
263
  onServiceResponse(response);
252
264
  } else {
253
- const response = yield _this3.servicePatch(_this3.objectId, object, { query });
265
+ const response = yield _this3.getService().patch(_this3.objectId, object, { query });
254
266
  onServiceResponse(response);
255
267
  }
256
268
  } else if (_this3.getMode() === 'create') {
257
269
  // Creation mode => create the item
258
- const response = yield _this3.serviceCreate(object, { query });
270
+ const response = yield _this3.getService().create(object, { query });
259
271
  onServiceResponse(response);
260
272
  } else {
261
273
  _loglevel2.default.warn('Invalid editor mode');
@@ -272,8 +284,6 @@ function baseEditorMixin(formRefs) {
272
284
  var _this4 = this;
273
285
 
274
286
  return _asyncToGenerator(function* () {
275
- // When the service is available
276
- yield _this4.loadService();
277
287
  // We can then load the schema/object and local refs in parallel
278
288
  yield Promise.all([_this4.loadSchema(_this4.getSchemaName()), _this4.loadObject(), _this4.loadRefs()]);
279
289
  // We finally build the forms then fill it
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../core/client/mixins/mixin.base-editor.js"],"names":["baseEditorMixin","formRefs","props","baseObject","type","Object","default","baseQuery","clearButton","String","resetButton","computed","editorTitle","getSchema","schemaTitle","title","$t","object","getObject","interpolation","escapeValue","data","applyButton","applyInProgress","methods","getMode","objectId","setFormDisabled","formName","disabled","forEach","name","form","$refs","loadRefs","isFulfilled","isDisabled","logger","warn","fillEditor","perspective","fill","clear","reset","validateForms","isValid","result","validate","applyForms","isApplied","i","length","apply","error","submittedForms","submitted","getBaseObject","assign","_","get","_id","getBaseQuery","query","$select","getSchemaName","schemaName","service","getService","onServiceResponse","response","$emit","omit","servicePatch","serviceCreate","refresh","loadService","Promise","all","loadSchema","loadObject","map","build"],"mappings":"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","file":"mixin.base-editor.js","sourcesContent":["import logger from 'loglevel'\r\nimport _ from 'lodash'\r\n\r\nexport default function baseEditorMixin (formRefs) {\r\n return {\r\n props: {\r\n baseObject: {\r\n type: Object,\r\n default: function () {\r\n return {}\r\n }\r\n },\r\n baseQuery: {\r\n type: Object,\r\n default: function () {\r\n return {}\r\n }\r\n },\r\n clearButton: {\r\n type: String,\r\n default: ''\r\n },\r\n resetButton: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n computed: {\r\n editorTitle () {\r\n // Retuns the schema title\r\n if (this.getSchema()) {\r\n const schemaTitle = this.getSchema().title\r\n return this.$t(schemaTitle, { object: this.getObject(), interpolation: { escapeValue: false } })\r\n }\r\n return ''\r\n }\r\n },\r\n data () {\r\n return {\r\n applyButton: '',\r\n applyInProgress: false\r\n }\r\n },\r\n methods: {\r\n getMode () {\r\n if (this.objectId) return 'update'\r\n return 'create'\r\n },\r\n // Disabled forms will not be applied\r\n setFormDisabled (formName, disabled) {\r\n // Iterate over forms\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (name === formName) {\r\n if (form.loadRefs().isFulfilled()) {\r\n form.isDisabled = disabled\r\n } else {\r\n logger.warn(`Trying to disable in the editor a non-ready form named ${name}`)\r\n }\r\n }\r\n })\r\n },\r\n fillEditor () {\r\n // Iterate over forms\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (form.loadRefs().isFulfilled()) {\r\n if (this.getObject()) {\r\n if (this.perspective !== '') {\r\n form.fill(this.getObject()[this.perspective])\r\n } else {\r\n form.fill(this.getObject())\r\n }\r\n } else {\r\n form.clear()\r\n }\r\n } else {\r\n logger.warn(`Trying to fill the editor with a non-ready form named ${name}`)\r\n }\r\n })\r\n // Update button accordingly\r\n if (this.getMode() === 'update') {\r\n this.applyButton = this.$t('UPDATE')\r\n } else {\r\n this.applyButton = this.$t('CREATE')\r\n }\r\n },\r\n clear () {\r\n // Iterate over forms\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (form.loadRefs().isFulfilled()) {\r\n form.clear()\r\n } else {\r\n logger.warn(`Trying to clear the editor with a non-ready form named ${name}`)\r\n }\r\n })\r\n },\r\n reset () {\r\n this.fillEditor()\r\n },\r\n validateForms () {\r\n // Iterate over forms for validation\r\n let isValid = true\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (form.loadRefs().isFulfilled()) {\r\n if (!form.isDisabled) {\r\n const result = form.validate()\r\n if (!result.isValid) {\r\n isValid = false\r\n }\r\n }\r\n } else {\r\n logger.warn(`Trying to apply the editor with a non-ready form named ${name}`)\r\n isValid = false\r\n }\r\n })\r\n return isValid\r\n },\r\n async applyForms (object) {\r\n // Apply each form\r\n let isApplied = true\r\n for (let i = 0; i < formRefs.length; i++) {\r\n const name = formRefs[i]\r\n const form = this.$refs[name]\r\n if (!form.isDisabled) {\r\n try {\r\n await form.apply(object)\r\n } catch (error) {\r\n isApplied = false\r\n break\r\n }\r\n }\r\n }\r\n return isApplied\r\n },\r\n async submittedForms (object) {\r\n // Apply each form\r\n let isApplied = true\r\n for (let i = 0; i < formRefs.length; i++) {\r\n const name = formRefs[i]\r\n const form = this.$refs[name]\r\n if (!form.isDisabled) {\r\n try {\r\n await form.submitted(object)\r\n } catch (error) {\r\n isApplied = false\r\n break\r\n }\r\n }\r\n }\r\n return isApplied\r\n },\r\n getBaseObject () {\r\n // Start from default object or input base object\r\n // This is used to keep track of existing or additional \"hidden\" or \"internal\" properties\r\n // in addition to the ones edited throught the form\r\n const object = {}\r\n const baseObject = this.getObject() || this.baseObject\r\n if (this.perspective !== '') {\r\n Object.assign(object, _.get(baseObject, this.perspective))\r\n // Keep track of ID as it is used to know if we update or create\r\n if (baseObject._id) object._id = baseObject._id\r\n } else {\r\n Object.assign(object, baseObject)\r\n }\r\n return object\r\n },\r\n getBaseQuery () {\r\n // Start from default query\r\n const query = {}\r\n Object.assign(query, this.baseQuery)\r\n if ((this.getMode() === 'update') && (this.perspective !== '')) {\r\n Object.assign(query, { $select: ['_id', this.perspective] })\r\n }\r\n return query\r\n },\r\n getSchemaName () {\r\n // When used with a service by default use the same name for schema as for service\r\n let schemaName = this.service + (this.objectId ? '.update' : '.create')\r\n if (this.perspective) {\r\n schemaName += ('-' + this.perspective)\r\n }\r\n return schemaName\r\n },\r\n async apply () {\r\n let isValid = this.validateForms()\r\n // Now the form is validated apply it to the target object\r\n const object = this.getBaseObject()\r\n\r\n if (isValid) {\r\n isValid = await this.applyForms(object)\r\n } else {\r\n // Stop here if invalid or not applied correctly\r\n return\r\n }\r\n\r\n if (this.getService()) {\r\n // Small helper to avoid repeating too much similar code\r\n const onServiceResponse = async (response) => {\r\n await this.submittedForms(response)\r\n this.$emit('applied', response)\r\n }\r\n\r\n const query = this.getBaseQuery(object)\r\n this.applyInProgress = true\r\n // Update the item\r\n try {\r\n if (this.getMode() === 'update') {\r\n // Editing mode => patch the item\r\n if (this.perspective !== '') {\r\n const data = {}\r\n data[this.perspective] = _.omit(object, ['_id'])\r\n const response = await this.servicePatch(this.objectId, data, { query })\r\n // Keep track of ID as it is used to know if we update or create\r\n if (object._id) response._id = object._id\r\n onServiceResponse(response)\r\n } else {\r\n const response = await this.servicePatch(this.objectId, object, { query })\r\n onServiceResponse(response)\r\n }\r\n } else if (this.getMode() === 'create') {\r\n // Creation mode => create the item\r\n const response = await this.serviceCreate(object, { query })\r\n onServiceResponse(response)\r\n } else {\r\n logger.warn('Invalid editor mode')\r\n }\r\n } catch (error) {\r\n // User error message on operation should be raised by error hook, otherwise this is more a coding error\r\n logger.error(error)\r\n }\r\n this.applyInProgress = false\r\n }\r\n },\r\n async refresh () {\r\n // When the service is available\r\n await this.loadService()\r\n // We can then load the schema/object and local refs in parallel\r\n await Promise.all([\r\n this.loadSchema(this.getSchemaName()),\r\n this.loadObject(),\r\n this.loadRefs()\r\n ])\r\n // We finally build the forms then fill it\r\n await Promise.all(formRefs.map(name => this.$refs[name].build()))\r\n this.fillEditor()\r\n this.$emit('editor-ready', this)\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../core/client/mixins/mixin.base-editor.js"],"names":["baseEditorMixin","formRefs","props","baseObject","type","Object","default","baseQuery","schemaName","String","undefined","clearButton","resetButton","computed","editorTitle","getSchema","schemaTitle","title","$t","object","getObject","interpolation","escapeValue","data","applyButton","applyInProgress","methods","getMode","objectId","setFormDisabled","formName","disabled","forEach","name","form","$refs","loadRefs","isFulfilled","isDisabled","logger","warn","fillEditor","perspective","fill","_","get","clear","reset","validateForms","isValid","result","validate","applyForms","isApplied","i","length","apply","error","submittedForms","submitted","getBaseObject","perspectiveAsObject","assign","set","_id","getBaseQuery","query","$select","getSchemaName","$route","service","getService","onServiceResponse","response","$emit","omit","patch","create","refresh","Promise","all","loadSchema","loadObject","map","build"],"mappings":"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","file":"mixin.base-editor.js","sourcesContent":["import logger from 'loglevel'\r\nimport _ from 'lodash'\r\n\r\nexport default function baseEditorMixin (formRefs) {\r\n return {\r\n props: {\r\n baseObject: {\r\n type: Object,\r\n default: () => {}\r\n },\r\n baseQuery: {\r\n type: Object,\r\n default: () => {}\r\n },\r\n schemaName: {\r\n type: String,\r\n default: undefined\r\n },\r\n clearButton: {\r\n type: String,\r\n default: ''\r\n },\r\n resetButton: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n computed: {\r\n editorTitle () {\r\n // Retuns the schema title\r\n if (this.getSchema()) {\r\n const schemaTitle = this.getSchema().title\r\n return this.$t(schemaTitle, { object: this.getObject(), interpolation: { escapeValue: false } })\r\n }\r\n return ''\r\n }\r\n },\r\n data () {\r\n return {\r\n applyButton: '',\r\n applyInProgress: false\r\n }\r\n },\r\n methods: {\r\n getMode () {\r\n if (this.objectId) return 'update'\r\n return 'create'\r\n },\r\n // Disabled forms will not be applied\r\n setFormDisabled (formName, disabled) {\r\n // Iterate over forms\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (name === formName) {\r\n if (form.loadRefs().isFulfilled()) {\r\n form.isDisabled = disabled\r\n } else {\r\n logger.warn(`Trying to disable in the editor a non-ready form named ${name}`)\r\n }\r\n }\r\n })\r\n },\r\n fillEditor () {\r\n // Iterate over forms\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (form.loadRefs().isFulfilled()) {\r\n if (this.getObject()) {\r\n if (this.perspective !== '') {\r\n form.fill(_.get(this.getObject(), this.perspective))\r\n } else {\r\n form.fill(this.getObject())\r\n }\r\n } else {\r\n form.clear()\r\n }\r\n } else {\r\n logger.warn(`Trying to fill the editor with a non-ready form named ${name}`)\r\n }\r\n })\r\n // Update button accordingly\r\n if (this.getMode() === 'update') {\r\n this.applyButton = this.$t('UPDATE')\r\n } else {\r\n this.applyButton = this.$t('CREATE')\r\n }\r\n },\r\n clear () {\r\n // Iterate over forms\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (form.loadRefs().isFulfilled()) {\r\n form.clear()\r\n } else {\r\n logger.warn(`Trying to clear the editor with a non-ready form named ${name}`)\r\n }\r\n })\r\n },\r\n reset () {\r\n this.fillEditor()\r\n },\r\n validateForms () {\r\n // Iterate over forms for validation\r\n let isValid = true\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (form.loadRefs().isFulfilled()) {\r\n if (!form.isDisabled) {\r\n const result = form.validate()\r\n if (!result.isValid) {\r\n isValid = false\r\n }\r\n }\r\n } else {\r\n logger.warn(`Trying to apply the editor with a non-ready form named ${name}`)\r\n isValid = false\r\n }\r\n })\r\n return isValid\r\n },\r\n async applyForms (object) {\r\n // Apply each form\r\n let isApplied = true\r\n for (let i = 0; i < formRefs.length; i++) {\r\n const name = formRefs[i]\r\n const form = this.$refs[name]\r\n if (!form.isDisabled) {\r\n try {\r\n await form.apply(object)\r\n } catch (error) {\r\n isApplied = false\r\n break\r\n }\r\n }\r\n }\r\n return isApplied\r\n },\r\n async submittedForms (object) {\r\n // Apply each form\r\n let isApplied = true\r\n for (let i = 0; i < formRefs.length; i++) {\r\n const name = formRefs[i]\r\n const form = this.$refs[name]\r\n if (!form.isDisabled) {\r\n try {\r\n await form.submitted(object)\r\n } catch (error) {\r\n isApplied = false\r\n break\r\n }\r\n }\r\n }\r\n return isApplied\r\n },\r\n getBaseObject () {\r\n // Start from default object or input base object\r\n // This is used to keep track of existing or additional \"hidden\" or \"internal\" properties\r\n // in addition to the ones edited throught the form\r\n const object = {}\r\n const baseObject = this.getObject() || this.baseObject\r\n if (this.perspective !== '') {\r\n if (this.perspectiveAsObject) {\r\n Object.assign(object, _.get(baseObject, this.perspective))\r\n } else {\r\n _.set(object, this.perspective, _.get(baseObject, this.perspective))\r\n }\r\n // Keep track of ID as it is used to know if we update or create\r\n if (baseObject._id) object._id = baseObject._id\r\n } else {\r\n Object.assign(object, baseObject)\r\n }\r\n return object\r\n },\r\n getBaseQuery () {\r\n // Start from default query\r\n const query = {}\r\n Object.assign(query, this.baseQuery)\r\n if ((this.getMode() === 'update') && this.perspective && this.perspectiveAsObject) {\r\n Object.assign(query, { $select: ['_id', this.perspective] })\r\n }\r\n return query\r\n },\r\n getSchemaName () {\r\n if (this.schemaName) return this.schemaName\r\n // Can be provided as route metadata\r\n let schemaName = _.get(this.$route, 'meta.schemaName')\r\n if (schemaName) return schemaName\r\n // When used with a service by default use the same name for schema as for service\r\n schemaName = this.service + (this.objectId ? '.update' : '.create')\r\n if (this.perspective) {\r\n schemaName += ('-' + this.perspective)\r\n }\r\n return schemaName\r\n },\r\n async apply () {\r\n let isValid = this.validateForms()\r\n // Now the form is validated apply it to the target object\r\n const object = this.getBaseObject()\r\n\r\n if (isValid) {\r\n isValid = await this.applyForms(object)\r\n } else {\r\n // Stop here if invalid or not applied correctly\r\n return\r\n }\r\n\r\n if (this.getService()) {\r\n // Small helper to avoid repeating too much similar code\r\n const onServiceResponse = async (response) => {\r\n await this.submittedForms(response)\r\n this.$emit('applied', response)\r\n }\r\n\r\n const query = this.getBaseQuery(object)\r\n this.applyInProgress = true\r\n // Update the item\r\n try {\r\n if (this.getMode() === 'update') {\r\n // Editing mode => patch the item\r\n if (this.perspective !== '') {\r\n const data = {}\r\n if (this.perspectiveAsObject) {\r\n _.set(data, this.perspective, _.omit(object, ['_id']))\r\n } else {\r\n _.set(data, this.perspective, _.get(object, this.perspective))\r\n }\r\n const response = await this.getService().patch(this.objectId, data, { query })\r\n // Keep track of ID as it is used to know if we update or create\r\n if (object._id) response._id = object._id\r\n onServiceResponse(response)\r\n } else {\r\n const response = await this.getService().patch(this.objectId, object, { query })\r\n onServiceResponse(response)\r\n }\r\n } else if (this.getMode() === 'create') {\r\n // Creation mode => create the item\r\n const response = await this.getService().create(object, { query })\r\n onServiceResponse(response)\r\n } else {\r\n logger.warn('Invalid editor mode')\r\n }\r\n } catch (error) {\r\n // User error message on operation should be raised by error hook, otherwise this is more a coding error\r\n logger.error(error)\r\n }\r\n this.applyInProgress = false\r\n }\r\n },\r\n async refresh () {\r\n // We can then load the schema/object and local refs in parallel\r\n await Promise.all([\r\n this.loadSchema(this.getSchemaName()),\r\n this.loadObject(),\r\n this.loadRefs()\r\n ])\r\n // We finally build the forms then fill it\r\n await Promise.all(formRefs.map(name => this.$refs[name].build()))\r\n this.fillEditor()\r\n this.$emit('editor-ready', this)\r\n }\r\n }\r\n }\r\n}\r\n"]}