@kalisio/kdk 1.4.2 → 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 (335) hide show
  1. package/.nyc_output/{2e74ca23-8cf0-4161-9536-f71c2a1a74bb.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/{2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json → 6dc4b140-1a8a-4d69-b91c-89c557883d6e.json} +1 -1
  4. package/.nyc_output/{81d21e46-766a-46bc-b1b7-143ca577347a.json → 8b1830fa-932e-4a61-9837-4a5b18f83ea9.json} +0 -0
  5. package/.nyc_output/{aaf3ebbb-f895-4d7b-9255-bc5dee832570.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/{a762cb58-70dc-4d39-ab69-928635affa98.json → 2226bcce-9d22-4dad-b9fa-46564b5565c7.json} +1 -1
  8. package/.nyc_output/processinfo/{2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json → 6dc4b140-1a8a-4d69-b91c-89c557883d6e.json} +1 -1
  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 +21 -8
  13. package/coverage/core/api/application.js.html +455 -455
  14. package/coverage/core/api/authentication.js.html +119 -119
  15. package/coverage/core/api/db.js.html +201 -201
  16. package/coverage/core/api/hooks/hooks.account.js.html +45 -45
  17. package/coverage/core/api/hooks/hooks.authentication.js.html +71 -71
  18. package/coverage/core/api/hooks/hooks.authorisations.js.html +353 -353
  19. package/coverage/core/api/hooks/hooks.devices.js.html +49 -49
  20. package/coverage/core/api/hooks/hooks.groups.js.html +37 -37
  21. package/coverage/core/api/hooks/hooks.logger.js.html +27 -27
  22. package/coverage/core/api/hooks/hooks.model.js.html +269 -269
  23. package/coverage/core/api/hooks/hooks.organisations.js.html +190 -190
  24. package/coverage/core/api/hooks/hooks.pusher.js.html +114 -114
  25. package/coverage/core/api/hooks/hooks.query.js.html +200 -200
  26. package/coverage/core/api/hooks/hooks.service.js.html +82 -82
  27. package/coverage/core/api/hooks/hooks.storage.js.html +121 -121
  28. package/coverage/core/api/hooks/hooks.tags.js.html +232 -232
  29. package/coverage/core/api/hooks/hooks.users.js.html +263 -263
  30. package/coverage/core/api/hooks/index.html +172 -172
  31. package/coverage/core/api/hooks/index.js.html +24 -24
  32. package/coverage/core/api/index.html +75 -75
  33. package/coverage/core/api/index.js.html +26 -26
  34. package/coverage/core/api/marshall.js.html +57 -57
  35. package/coverage/core/api/models/groups.model.mongodb.js.html +20 -20
  36. package/coverage/core/api/models/index.html +50 -50
  37. package/coverage/core/api/models/organisations.model.mongodb.js.html +12 -12
  38. package/coverage/core/api/models/tags.model.mongodb.js.html +22 -22
  39. package/coverage/core/api/models/users.model.mongodb.js.html +20 -20
  40. package/coverage/core/api/oauth2-handler.js.html +18 -18
  41. package/coverage/core/api/oauth2-verifier.js.html +38 -38
  42. package/coverage/core/api/services/account/account.hooks.js.html +16 -16
  43. package/coverage/core/api/services/account/account.service.js.html +104 -104
  44. package/coverage/core/api/services/account/index.html +32 -32
  45. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
  46. package/coverage/core/api/services/authorisations/authorisations.service.js.html +132 -132
  47. package/coverage/core/api/services/authorisations/index.html +28 -28
  48. package/coverage/core/api/services/databases/databases.hooks.js.html +9 -9
  49. package/coverage/core/api/services/databases/databases.service.js.html +12 -12
  50. package/coverage/core/api/services/databases/index.html +24 -24
  51. package/coverage/core/api/services/devices/devices.hooks.js.html +9 -9
  52. package/coverage/core/api/services/devices/devices.service.js.html +121 -121
  53. package/coverage/core/api/services/devices/index.html +28 -28
  54. package/coverage/core/api/services/groups/groups.hooks.js.html +9 -9
  55. package/coverage/core/api/services/groups/index.html +13 -13
  56. package/coverage/core/api/services/index.html +21 -21
  57. package/coverage/core/api/services/index.js.html +137 -137
  58. package/coverage/core/api/services/mailer/index.html +24 -24
  59. package/coverage/core/api/services/mailer/mailer.hooks.js.html +9 -9
  60. package/coverage/core/api/services/mailer/mailer.service.js.html +19 -19
  61. package/coverage/core/api/services/organisations/index.html +24 -24
  62. package/coverage/core/api/services/organisations/organisations.hooks.js.html +8 -8
  63. package/coverage/core/api/services/organisations/organisations.service.js.html +67 -67
  64. package/coverage/core/api/services/pusher/index.html +34 -34
  65. package/coverage/core/api/services/pusher/pusher.channels.js.html +8 -8
  66. package/coverage/core/api/services/pusher/pusher.hooks.js.html +10 -10
  67. package/coverage/core/api/services/pusher/pusher.service.js.html +414 -414
  68. package/coverage/core/api/services/storage/index.html +21 -21
  69. package/coverage/core/api/services/storage/storage.hooks.js.html +35 -35
  70. package/coverage/core/api/services/tags/index.html +21 -21
  71. package/coverage/core/api/services/tags/tags.hooks.js.html +25 -25
  72. package/coverage/core/api/services/users/index.html +21 -21
  73. package/coverage/core/api/services/users/users.hooks.js.html +33 -33
  74. package/coverage/core/common/errors.js.html +1 -1
  75. package/coverage/core/common/index.html +42 -27
  76. package/coverage/core/common/index.js.html +16 -16
  77. package/coverage/core/common/permissions.js.html +274 -274
  78. package/coverage/index.html +178 -178
  79. package/coverage/lcov-report/core/api/application.js.html +455 -455
  80. package/coverage/lcov-report/core/api/authentication.js.html +119 -119
  81. package/coverage/lcov-report/core/api/db.js.html +201 -201
  82. package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +45 -45
  83. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +71 -71
  84. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +353 -353
  85. package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +49 -49
  86. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +37 -37
  87. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +27 -27
  88. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +269 -269
  89. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +190 -190
  90. package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +114 -114
  91. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +200 -200
  92. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +82 -82
  93. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +121 -121
  94. package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +232 -232
  95. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +263 -263
  96. package/coverage/lcov-report/core/api/hooks/index.html +172 -172
  97. package/coverage/lcov-report/core/api/hooks/index.js.html +24 -24
  98. package/coverage/lcov-report/core/api/index.html +75 -75
  99. package/coverage/lcov-report/core/api/index.js.html +26 -26
  100. package/coverage/lcov-report/core/api/marshall.js.html +57 -57
  101. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +20 -20
  102. package/coverage/lcov-report/core/api/models/index.html +50 -50
  103. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +12 -12
  104. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +22 -22
  105. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +20 -20
  106. package/coverage/lcov-report/core/api/oauth2-handler.js.html +18 -18
  107. package/coverage/lcov-report/core/api/oauth2-verifier.js.html +38 -38
  108. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +16 -16
  109. package/coverage/lcov-report/core/api/services/account/account.service.js.html +104 -104
  110. package/coverage/lcov-report/core/api/services/account/index.html +32 -32
  111. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
  112. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +132 -132
  113. package/coverage/lcov-report/core/api/services/authorisations/index.html +28 -28
  114. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +9 -9
  115. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +12 -12
  116. package/coverage/lcov-report/core/api/services/databases/index.html +24 -24
  117. package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +9 -9
  118. package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +121 -121
  119. package/coverage/lcov-report/core/api/services/devices/index.html +28 -28
  120. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +9 -9
  121. package/coverage/lcov-report/core/api/services/groups/index.html +13 -13
  122. package/coverage/lcov-report/core/api/services/index.html +21 -21
  123. package/coverage/lcov-report/core/api/services/index.js.html +137 -137
  124. package/coverage/lcov-report/core/api/services/mailer/index.html +24 -24
  125. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +9 -9
  126. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +19 -19
  127. package/coverage/lcov-report/core/api/services/organisations/index.html +24 -24
  128. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +8 -8
  129. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +67 -67
  130. package/coverage/lcov-report/core/api/services/pusher/index.html +34 -34
  131. package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +8 -8
  132. package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +10 -10
  133. package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +414 -414
  134. package/coverage/lcov-report/core/api/services/storage/index.html +21 -21
  135. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +35 -35
  136. package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
  137. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +25 -25
  138. package/coverage/lcov-report/core/api/services/users/index.html +21 -21
  139. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +33 -33
  140. package/coverage/lcov-report/core/common/errors.js.html +1 -1
  141. package/coverage/lcov-report/core/common/index.html +42 -27
  142. package/coverage/lcov-report/core/common/index.js.html +16 -16
  143. package/coverage/lcov-report/core/common/permissions.js.html +274 -274
  144. package/coverage/lcov-report/index.html +178 -178
  145. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
  146. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +25 -7
  147. package/coverage/lcov-report/map/api/hooks/index.html +7 -7
  148. package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
  149. package/coverage/lcov-report/map/api/index.html +1 -1
  150. package/coverage/lcov-report/map/api/index.js.html +1 -1
  151. package/coverage/lcov-report/map/api/marshall.js.html +1 -1
  152. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
  153. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
  154. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +1 -1
  155. package/coverage/lcov-report/map/api/models/index.html +1 -1
  156. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
  157. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
  158. package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
  159. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
  160. package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
  161. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  162. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  163. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +1 -1
  164. package/coverage/lcov-report/map/api/services/features/index.html +1 -1
  165. package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  166. package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
  167. package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
  168. package/coverage/lcov-report/map/api/services/index.html +1 -1
  169. package/coverage/lcov-report/map/api/services/index.js.html +1 -1
  170. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
  171. package/coverage/lcov-report/map/common/errors.js.html +1 -1
  172. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
  173. package/coverage/lcov-report/map/common/grid.js.html +1 -1
  174. package/coverage/lcov-report/map/common/index.html +1 -1
  175. package/coverage/lcov-report/map/common/index.js.html +1 -1
  176. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
  177. package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
  178. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
  179. package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
  180. package/coverage/lcov-report/map/common/permissions.js.html +1 -1
  181. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
  182. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  183. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
  184. package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
  185. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
  186. package/coverage/lcov-report/map/common/wfs-utils.js.html +1 -1
  187. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  188. package/coverage/lcov-report/map/common/wmts-utils.js.html +1 -1
  189. package/coverage/lcov.info +3403 -3724
  190. package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
  191. package/coverage/map/api/hooks/hooks.query.js.html +25 -7
  192. package/coverage/map/api/hooks/index.html +7 -7
  193. package/coverage/map/api/hooks/index.js.html +1 -1
  194. package/coverage/map/api/index.html +1 -1
  195. package/coverage/map/api/index.js.html +1 -1
  196. package/coverage/map/api/marshall.js.html +1 -1
  197. package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
  198. package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
  199. package/coverage/map/api/models/features.model.mongodb.js.html +1 -1
  200. package/coverage/map/api/models/index.html +1 -1
  201. package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
  202. package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
  203. package/coverage/map/api/services/alerts/index.html +1 -1
  204. package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
  205. package/coverage/map/api/services/catalog/index.html +1 -1
  206. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  207. package/coverage/map/api/services/daptiles/index.html +1 -1
  208. package/coverage/map/api/services/features/features.hooks.js.html +1 -1
  209. package/coverage/map/api/services/features/index.html +1 -1
  210. package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  211. package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
  212. package/coverage/map/api/services/geocoder/index.html +1 -1
  213. package/coverage/map/api/services/index.html +1 -1
  214. package/coverage/map/api/services/index.js.html +1 -1
  215. package/coverage/map/common/dynamic-grid-source.js.html +1 -1
  216. package/coverage/map/common/errors.js.html +1 -1
  217. package/coverage/map/common/geotiff-grid-source.js.html +1 -1
  218. package/coverage/map/common/grid.js.html +1 -1
  219. package/coverage/map/common/index.html +1 -1
  220. package/coverage/map/common/index.js.html +1 -1
  221. package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
  222. package/coverage/map/common/moment-utils.js.html +1 -1
  223. package/coverage/map/common/opendap-grid-source.js.html +1 -1
  224. package/coverage/map/common/opendap-utils.js.html +1 -1
  225. package/coverage/map/common/permissions.js.html +1 -1
  226. package/coverage/map/common/time-based-grid-source.js.html +1 -1
  227. package/coverage/map/common/tms-utils.js.html +1 -1
  228. package/coverage/map/common/wcs-grid-source.js.html +1 -1
  229. package/coverage/map/common/wcs-utils.js.html +1 -1
  230. package/coverage/map/common/weacast-grid-source.js.html +1 -1
  231. package/coverage/map/common/wfs-utils.js.html +1 -1
  232. package/coverage/map/common/wms-utils.js.html +1 -1
  233. package/coverage/map/common/wmts-utils.js.html +1 -1
  234. package/lib/core/client/components/form/KFileField.vue +11 -40
  235. package/lib/core/client/components/input/KOptionsChooser.vue +2 -2
  236. package/lib/core/client/i18n/core_en.json +6 -1
  237. package/lib/core/client/i18n/core_fr.json +6 -1
  238. package/lib/core/client/index.js +18 -0
  239. package/lib/core/client/index.js.map +1 -1
  240. package/lib/core/client/layout.js +8 -1
  241. package/lib/core/client/layout.js.map +1 -1
  242. package/lib/core/client/reader.js +54 -0
  243. package/lib/core/client/reader.js.map +1 -0
  244. package/lib/core/client/readers/index.js +30 -0
  245. package/lib/core/client/readers/index.js.map +1 -0
  246. package/lib/core/client/readers/reader.csv.js +43 -0
  247. package/lib/core/client/readers/reader.csv.js.map +1 -0
  248. package/lib/core/client/readers/reader.json.js +38 -0
  249. package/lib/core/client/readers/reader.json.js.map +1 -0
  250. package/lib/map/api/hooks/hooks.query.js +7 -2
  251. package/lib/map/api/hooks/hooks.query.js.map +1 -1
  252. package/lib/map/client/components/KCaptureToolbar.vue +156 -0
  253. package/lib/map/client/components/KFeaturesFilter.vue +3 -1
  254. package/lib/map/client/components/KLayerEditionToolbar.vue +19 -11
  255. package/lib/map/client/components/KLayerStyleEditor.vue +2 -1
  256. package/lib/map/client/components/KLayerStyleForm.vue +34 -23
  257. package/lib/map/client/components/KMeasureTool.vue +340 -0
  258. package/lib/map/client/components/KTimeline.vue +0 -1
  259. package/lib/map/client/components/catalog/KImportLayer.vue +8 -35
  260. package/lib/map/client/components/catalog/KLayersSelector.vue +5 -3
  261. package/lib/map/client/components/widget/KTimeSeries.vue +81 -3
  262. package/lib/map/client/i18n/map_en.json +41 -4
  263. package/lib/map/client/i18n/map_fr.json +41 -4
  264. package/lib/map/client/init.js +6 -1
  265. package/lib/map/client/init.js.map +1 -1
  266. package/lib/map/client/leaflet/MaskLayer.js +9 -0
  267. package/lib/map/client/leaflet/MaskLayer.js.map +1 -1
  268. package/lib/map/client/mixins/globe/mixin.base-globe.js +3 -5
  269. package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
  270. package/lib/map/client/mixins/globe/mixin.popup.js +4 -0
  271. package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
  272. package/lib/map/client/mixins/globe/mixin.tooltip.js +4 -0
  273. package/lib/map/client/mixins/globe/mixin.tooltip.js.map +1 -1
  274. package/lib/map/client/mixins/map/mixin.base-map.js +45 -6
  275. package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
  276. package/lib/map/client/mixins/map/mixin.canvas-layers.js +2 -0
  277. package/lib/map/client/mixins/map/mixin.canvas-layers.js.map +1 -1
  278. package/lib/map/client/mixins/map/mixin.file-layers.js +47 -101
  279. package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
  280. package/lib/map/client/mixins/map/mixin.geojson-layers.js +4 -1
  281. package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
  282. package/lib/map/client/mixins/map/mixin.popup.js +4 -0
  283. package/lib/map/client/mixins/map/mixin.popup.js.map +1 -1
  284. package/lib/map/client/mixins/map/mixin.tooltip.js +4 -0
  285. package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
  286. package/lib/map/client/mixins/mixin.activity.js +2 -0
  287. package/lib/map/client/mixins/mixin.activity.js.map +1 -1
  288. package/lib/map/client/mixins/mixin.context.js +26 -3
  289. package/lib/map/client/mixins/mixin.context.js.map +1 -1
  290. package/lib/map/client/mixins/mixin.feature-service.js +2 -2
  291. package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
  292. package/lib/map/client/mixins/mixin.infobox.js +4 -0
  293. package/lib/map/client/mixins/mixin.infobox.js.map +1 -1
  294. package/lib/map/client/readers/index.js +42 -0
  295. package/lib/map/client/readers/index.js.map +1 -0
  296. package/lib/map/client/readers/reader.geojson.js +59 -0
  297. package/lib/map/client/readers/reader.geojson.js.map +1 -0
  298. package/lib/map/client/readers/reader.gpx.js +41 -0
  299. package/lib/map/client/readers/reader.gpx.js.map +1 -0
  300. package/lib/map/client/readers/reader.kml.js +41 -0
  301. package/lib/map/client/readers/reader.kml.js.map +1 -0
  302. package/lib/map/client/utils.js +2 -1
  303. package/lib/map/client/utils.js.map +1 -1
  304. package/lib/test/client/core/runner.js +1 -2
  305. package/lib/test/client/core/runner.js.map +1 -1
  306. package/lib/test/client/core/utils.js +2 -2
  307. package/lib/test/client/core/utils.js.map +1 -1
  308. package/lib/test/client/map/catalog.js +50 -49
  309. package/lib/test/client/map/catalog.js.map +1 -1
  310. package/package.json +3 -2
  311. package/.nyc_output/a762cb58-70dc-4d39-ab69-928635affa98.json +0 -1
  312. package/.nyc_output/dbeb2602-0ac2-4e66-978b-0d29548359ca.json +0 -1
  313. package/.nyc_output/e47d1e4c-2fff-4dcb-908f-d3081162547c.json +0 -1
  314. package/.nyc_output/processinfo/2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json +0 -1
  315. package/.nyc_output/processinfo/81d21e46-766a-46bc-b1b7-143ca577347a.json +0 -1
  316. package/.nyc_output/processinfo/aaf3ebbb-f895-4d7b-9255-bc5dee832570.json +0 -1
  317. package/.nyc_output/processinfo/dbeb2602-0ac2-4e66-978b-0d29548359ca.json +0 -1
  318. package/.nyc_output/processinfo/e47d1e4c-2fff-4dcb-908f-d3081162547c.json +0 -1
  319. package/extras/testcafe/Dockerfile +0 -48
  320. package/extras/testcafe/docker-entrypoint.sh +0 -27
  321. package/extras/testcafe/page-models/core/account.js +0 -75
  322. package/extras/testcafe/page-models/core/base-collection.js +0 -41
  323. package/extras/testcafe/page-models/core/base-page.js +0 -25
  324. package/extras/testcafe/page-models/core/groups.js +0 -36
  325. package/extras/testcafe/page-models/core/index.js +0 -140
  326. package/extras/testcafe/page-models/core/layout.js +0 -145
  327. package/extras/testcafe/page-models/core/members.js +0 -98
  328. package/extras/testcafe/page-models/core/organisations.js +0 -76
  329. package/extras/testcafe/page-models/core/screens.js +0 -99
  330. package/extras/testcafe/page-models/core/tags.js +0 -21
  331. package/extras/testcafe/page-models/map/add-layer.js +0 -51
  332. package/extras/testcafe/page-models/map/catalog.js +0 -132
  333. package/extras/testcafe/page-models/map/index.js +0 -36
  334. package/extras/testcafe/page-models/map/map-activity.js +0 -42
  335. package/extras/testcafe/page-models/map/timeline.js +0 -67
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../map/client/mixins/mixin.activity.js"],"names":["data","forecastModelHandlers","layerCategories","variables","engine","engineReady","engineContainerWidth","engineContainerHeight","computed","viewStyle","variablesForCurrentLevel","map","variable","Object","assign","name","selectedLevel","_","omit","currentVariables","hasSelectableLevels","methods","is2D","is3D","getFeatureActions","feature","layer","getCatalogLayers","layers","globalCatalogService","$api","getService","response","find","concat","catalogService","gatewayToken","get","getItem","$config","addCatalogLayer","i18n","locale","kCoreUtils","getAppLocale","i18next","addResourceBundle","$t","label","description","isWeacastLayer","startsWith","weacastApi","forecastModel","addLayer","uniqBy","removeCatalogLayer","removeLayer","getCatalogCategories","categories","query","type","refreshLayerCategories","refreshLayers","clearLayers","catalogLayers","filter","i","length","hasVisibleBaseLayer","isVisible","baseLayer","showLayer","isUserLayer","isFeatureLayer","hasFeatureSchema","has","isLayerSelectable","isLayerEdited","isLayerStorable","_id","isLayerEditable","isLayerRemovable","isLayerStyleEditable","isLayerDataEditable","resetLayer","isLayerVisible","configureLayerActions","actions","activityOptions","Layout","filterContent","bindContent","cloneDeep","push","id","handler","onTriggerLayer","$set","onLayerAdded","hideLayer","hasContext","storeContext","onZoomIn","center","getCenter","longitude","latitude","zoomLevel","altitude","onZoomOut","onZoomToLayer","zoomToLayer","onSaveLayer","geoJson","toGeoJson","check","checkFeatures","kinks","result","dialog","title","features","message","options","model","items","value","html","ok","flat","cancel","includes","downloadAsBlob","JSON","stringify","set","nbPoints","forEach","Loading","show","processed","total","createdLayer","create","chunkSize","nbFeatures","createFeatures","chunk","patch","baseQuery","$toast","timeout","error","logger","hide","onFilterLayerData","filterModal","$createComponent","propsData","contextId","$mount","open","$on","closeModal","onViewLayerData","viewModal","featureActions","tooltip","icon","context","item","onChartLayerData","chartModal","onEditLayer","editModal","service","objectId","openModal","updatedLayer","renameLayer","onEditLayerStyle","editStyleModal","updateLayer","editLayerByName","editOptions","getLayerByName","startEditLayer","onEditLayerData","stopEditLayer","editMode","onEndLayerEdition","status","onRemoveLayer","Dialog","onOk","removeFeatures","remove","onMapReady","onGlobeReady","getProbeTimeRange","start","Time","getCurrentTime","clone","end","span","$store","subtract","add","onProbeLocation","setCursor","$once","unsetCursor","onToggleFullscreen","$q","fullscreen","isActive","request","exit","initialize","restoreContext","viewRestored","$geolocation","position","update","setupWeacast","toggle","setForecastModel","catalogListeners","_serviceEvents","event","object","onCatalogUpdated","on","finalize","removeListener","getLayers","mounted","beforeDestroy","$off"],"mappings":"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","file":"mixin.activity.js","sourcesContent":["import _ from 'lodash'\r\nimport i18next from 'i18next'\r\nimport sift from 'sift'\r\nimport logger from 'loglevel'\r\nimport centroid from '@turf/centroid'\r\nimport explode from '@turf/explode'\r\nimport { Loading, Dialog } from 'quasar'\r\nimport { Time } from '../../../core/client/time'\r\nimport { Layout } from '../../../core/client/layout'\r\nimport { setGatewayJwt } from '../utils'\r\nimport { utils as kCoreUtils } from '../../../core/client'\r\n\r\nexport default {\r\n data () {\r\n return {\r\n forecastModelHandlers: {},\r\n layerCategories: [],\r\n variables: [],\r\n engine: 'leaflet',\r\n engineReady: false,\r\n engineContainerWidth: null,\r\n engineContainerHeight: null\r\n }\r\n },\r\n computed: {\r\n viewStyle () {\r\n return 'width: 100%; height: 100%; fontWeight: normal; zIndex: 0; position: absolute;'\r\n },\r\n variablesForCurrentLevel () {\r\n return this.variables.map(variable => Object.assign({ name: `${variable.name}-${this.selectedLevel}` }, _.omit(variable, ['name'])))\r\n },\r\n currentVariables () {\r\n return this.hasSelectableLevels ? this.variablesForCurrentLevel : this.variables\r\n }\r\n },\r\n methods: {\r\n is2D () {\r\n return (this.engine === 'leaflet')\r\n },\r\n is3D () {\r\n return (this.engine === 'cesium')\r\n },\r\n // This method should be overriden in activities\r\n getFeatureActions (feature, layer) {\r\n return []\r\n },\r\n async getCatalogLayers () {\r\n let layers = []\r\n // We get layers coming from global catalog first if any\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n if (globalCatalogService) {\r\n const response = await globalCatalogService.find()\r\n layers = layers.concat(response.data)\r\n }\r\n // Then we get layers coming from contextual catalog if any\r\n const catalogService = this.$api.getService('catalog')\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n const response = await catalogService.find()\r\n layers = layers.concat(response.data)\r\n }\r\n const gatewayToken = this.$api.get('storage').getItem(this.$config('gatewayJwt'))\r\n return (gatewayToken ? setGatewayJwt(layers, gatewayToken) : layers)\r\n },\r\n async addCatalogLayer (layer) {\r\n // Check if available for current engine\r\n if (layer[this.engine]) {\r\n // Process i18n\r\n if (layer.i18n) {\r\n const locale = kCoreUtils.getAppLocale()\r\n const i18n = _.get(layer.i18n, locale)\r\n if (i18n) i18next.addResourceBundle(locale, 'kdk', i18n, true, true)\r\n }\r\n if (this.$t(layer.name)) layer.label = this.$t(layer.name)\r\n if (this.$t(layer.description)) layer.description = this.$t(layer.description)\r\n // Check for Weacast API availability\r\n const isWeacastLayer = _.get(layer, `${this.engine}.type`, '').startsWith('weacast.')\r\n if (isWeacastLayer && (!this.weacastApi || !this.forecastModel)) return\r\n await this.addLayer(layer)\r\n }\r\n // Filter layers with variables, not just visible ones because we might want to\r\n // probe weather even if there is no visual representation (e.g. in globe)\r\n if (layer.variables) this.variables = _.uniqBy(this.variables.concat(layer.variables), (variable) => variable.name)\r\n },\r\n async removeCatalogLayer (layer) {\r\n // Check if available for current engine\r\n if (layer[this.engine]) {\r\n await this.removeLayer(layer.name)\r\n }\r\n },\r\n async getCatalogCategories () {\r\n let categories = []\r\n // We get categories coming from global catalog first if any\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n if (globalCatalogService) {\r\n const response = await globalCatalogService.find({ query: { type: 'Category' } })\r\n categories = categories.concat(response.data)\r\n }\r\n // Then we get categories coming from contextual catalog if any\r\n const catalogService = this.$api.getService('catalog')\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n const response = await catalogService.find({ query: { type: 'Category' } })\r\n categories = categories.concat(response.data)\r\n }\r\n return categories\r\n },\r\n async refreshLayerCategories () {\r\n // Merge built-in categories with user-defiend ones\r\n this.layerCategories = await this.getCatalogCategories()\r\n this.layerCategories = this.layerCategories.concat(_.get(this, 'activityOptions.catalog.categories', []))\r\n },\r\n async refreshLayers () {\r\n // Clear layers and variables\r\n this.clearLayers()\r\n this.variables = []\r\n let catalogLayers = await this.getCatalogLayers()\r\n // Apply global layer filter\r\n catalogLayers = catalogLayers.filter(sift(_.get(this, 'activityOptions.catalog.filter', {})))\r\n // Iterate and await layers as creation is async and we need to have all layers ready\r\n // before checking if there is some background layer\r\n for (let i = 0; i < catalogLayers.length; i++) {\r\n await this.addCatalogLayer(catalogLayers[i])\r\n }\r\n // We need at least an active background\r\n const hasVisibleBaseLayer = catalogLayers.find((layer) => (layer.type === 'BaseLayer') && layer.isVisible)\r\n if (!hasVisibleBaseLayer) {\r\n const baseLayer = catalogLayers.find((layer) => (layer.type === 'BaseLayer'))\r\n if (baseLayer) await this.showLayer(baseLayer.name)\r\n }\r\n },\r\n isUserLayer (layer) {\r\n return (_.get(layer, 'scope') === 'user')\r\n },\r\n isFeatureLayer (layer) {\r\n return (_.get(layer, 'service') === 'features')\r\n },\r\n hasFeatureSchema (layer) {\r\n return _.has(layer, 'schema')\r\n },\r\n isLayerSelectable (layer) {\r\n // Only possible when not edited by default\r\n if ((typeof this.isLayerEdited === 'function') && this.isLayerEdited(layer)) return false\r\n return _.get(layer, 'isSelectable', true)\r\n },\r\n isLayerStorable (layer) {\r\n // Only possible when not saved by default\r\n if (layer._id) return false\r\n return _.get(layer, 'isStorable', this.isUserLayer(layer))\r\n },\r\n isLayerEditable (layer) {\r\n // Only possible when saved by default\r\n if (!layer._id) return false\r\n return _.get(layer, 'isEditable', this.isUserLayer(layer))\r\n },\r\n isLayerRemovable (layer) {\r\n return _.get(layer, 'isRemovable', this.isUserLayer(layer))\r\n },\r\n isLayerStyleEditable (layer) {\r\n return _.get(layer, 'isStyleEditable', this.isUserLayer(layer))\r\n },\r\n isLayerDataEditable (layer) {\r\n return _.get(layer, 'isDataEditable', this.isUserLayer(layer) && this.isFeatureLayer(layer))\r\n },\r\n async resetLayer (layer) {\r\n // Reset layer with new setup but keep track of current visibility state\r\n // as adding the layer back will restore default visibility state\r\n const isVisible = this.isLayerVisible(layer.name)\r\n await this.removeLayer(layer.name)\r\n await this.addLayer(layer)\r\n if (isVisible) await this.showLayer(layer.name)\r\n },\r\n configureLayerActions (layer) {\r\n let actions = _.get(this.activityOptions, 'layers.actions')\r\n if (actions) {\r\n // Apply filtering\r\n actions = Layout.filterContent(actions, _.get(this.activityOptions, 'layers.filter', {}))\r\n }\r\n // As context is different for each item we need to clone the global action configuration\r\n // otheriwse context will always reference the last processed item\r\n actions = Layout.bindContent(_.cloneDeep(actions), this)\r\n // Add 'virtual' action used to trigger the layer\r\n actions.push({ id: 'toggle', handler: () => this.onTriggerLayer(layer) })\r\n // Store the actions and make it reactive\r\n this.$set(layer, 'actions', actions)\r\n return actions\r\n },\r\n onLayerAdded (layer) {\r\n this.configureLayerActions(layer)\r\n },\r\n async onTriggerLayer (layer) {\r\n if (!this.isLayerVisible(layer.name)) {\r\n await this.showLayer(layer.name)\r\n } else {\r\n await this.hideLayer(layer.name)\r\n }\r\n // Check if the activity is using context restoration\r\n const hasContext = (typeof this.storeContext === 'function')\r\n if (hasContext) this.storeContext('layers')\r\n },\r\n onZoomIn () {\r\n const center = this.getCenter()\r\n this.center(center.longitude, center.latitude, center.zoomLevel ? center.zoomLevel + 1 : center.altitude * 0.5)\r\n },\r\n onZoomOut () {\r\n const center = this.getCenter()\r\n this.center(center.longitude, center.latitude, center.zoomLevel ? center.zoomLevel - 1 : center.altitude * 2)\r\n },\r\n onZoomToLayer (layer) {\r\n this.zoomToLayer(layer.name)\r\n },\r\n async onSaveLayer (layer) {\r\n // Take care that WFS layers rely on the same type as our own feature layers\r\n if (!_.has(layer, 'wfs') && _.get(layer, `${this.engine}.type`) === 'geoJson') {\r\n const geoJson = this.toGeoJson(layer.name)\r\n // Check for invalid features first\r\n const check = this.checkFeatures(geoJson)\r\n if (check.kinks.length > 0) {\r\n const result = await kCoreUtils.dialog({\r\n title: this.$t('mixins.activity.INVALID_FEATURES_DIALOG_TITLE', { features: check.kinks }),\r\n message: this.$t('mixins.activity.INVALID_FEATURES_DIALOG_MESSAGE', { features: check.kinks }),\r\n options: {\r\n type: 'toggle',\r\n model: [],\r\n items: [\r\n { label: this.$t('mixins.activity.DOWNLOAD_INVALID_FEATURES_LABEL'), value: 'download' }\r\n ]\r\n },\r\n html: true,\r\n ok: {\r\n label: this.$t('OK'),\r\n flat: true\r\n },\r\n cancel: {\r\n label: this.$t('CANCEL'),\r\n flat: true\r\n }\r\n })\r\n if (!result.ok) return\r\n // Export invalid features if required\r\n if (_.get(result, 'data', []).includes('download')) {\r\n kCoreUtils.downloadAsBlob(JSON.stringify({ type: 'FeatureCollection', features: check.kinks }),\r\n this.$t('mixins.activity.INVALID_FEATURES_FILE'), 'application/json;charset=utf-8;')\r\n }\r\n }\r\n // Change data source from in-memory to features service\r\n _.set(layer, 'service', 'features')\r\n if (_.has(layer, 'leaflet')) _.set(layer, 'leaflet.source', '/api/features')\r\n if (_.has(layer, 'cesium')) _.set(layer, 'cesium.source', '/api/features')\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n // If too much data use tiling\r\n // The threshold is based on the number of points and not features.\r\n // Indeed otherwise the complexity will be different depending on the geometry type\r\n // (eg a bucket of 1000 polygons can actually contains a lot of points).\r\n let nbPoints = 0\r\n features.forEach(feature => {\r\n nbPoints += explode(feature).features.length\r\n })\r\n if (this.is2D() && (nbPoints > 5000)) {\r\n _.set(layer, 'leaflet.tiled', true)\r\n _.set(layer, 'leaflet.minZoom', 15)\r\n }\r\n Loading.show({ message: this.$t('mixins.activity.SAVING_LABEL', { processed: 0, total: features.length }) })\r\n try {\r\n let createdLayer = await this.$api.getService('catalog')\r\n .create(_.omit(layer, ['actions', 'label', 'isVisible', 'isDisabled']))\r\n const chunkSize = _.get(this, 'activityOptions.featuresChunkSize', 5000)\r\n let nbFeatures = 0\r\n // We use the generated DB ID as layer ID on features\r\n await this.createFeatures(geoJson, createdLayer._id, chunkSize, (i, chunk) => {\r\n // Update saving message according to new chunk data\r\n nbFeatures += chunk.length\r\n Loading.show({\r\n message: this.$t('mixins.activity.SAVING_LABEL', { processed: nbFeatures, total: features.length })\r\n })\r\n })\r\n // Because we save all features in a single service use filtering to separate layers\r\n createdLayer = await this.$api.getService('catalog').patch(createdLayer._id, { baseQuery: { layer: createdLayer._id } })\r\n // Reset layer with new setup\r\n await this.resetLayer(createdLayer)\r\n if (_.get(layer, 'leaflet.tiled')) {\r\n this.$toast({ type: 'positive', message: this.$t('mixins.activity.SAVE_DIALOG_MESSAGE'), timeout: 10000, html: true })\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 Loading.hide()\r\n } else {\r\n // Otherwise simply save in catalog\r\n const createdLayer = await this.$api.getService('catalog')\r\n .create(_.omit(layer, ['actions', 'label', 'isVisible', 'isDisabled']))\r\n // Reset layer with new setup\r\n await this.resetLayer(createdLayer)\r\n }\r\n },\r\n async onFilterLayerData (layer) {\r\n this.filterModal = await this.$createComponent('KFeaturesFilter', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer\r\n }\r\n })\r\n this.filterModal.$mount()\r\n this.filterModal.open()\r\n this.filterModal.$on('applied', async () => {\r\n // Reset layer with new setup\r\n await this.resetLayer(layer)\r\n this.filterModal.closeModal()\r\n })\r\n this.filterModal.$on('closed', () => {\r\n this.filterModal = null\r\n })\r\n },\r\n async onViewLayerData (layer) {\r\n this.viewModal = await this.$createComponent('KFeaturesTable', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer,\r\n featureActions: [{\r\n name: 'zoom-to',\r\n tooltip: this.$t('mixins.activity.ZOOM_TO_LABEL'),\r\n icon: 'zoom_out_map',\r\n handler: (context) => {\r\n // Use altitude or zoom level depending on engine\r\n this.center(..._.get(centroid(context.item), 'geometry.coordinates'), this.is2D() ? 18 : 750)\r\n this.viewModal.closeModal()\r\n }\r\n }]\r\n }\r\n })\r\n this.viewModal.$mount()\r\n this.viewModal.open()\r\n this.viewModal.$on('closed', () => {\r\n this.viewModal = null\r\n })\r\n },\r\n async onChartLayerData (layer) {\r\n this.chartModal = await this.$createComponent('KFeaturesChart', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer\r\n }\r\n })\r\n this.chartModal.$mount()\r\n this.chartModal.open()\r\n this.chartModal.$on('closed', () => {\r\n this.chartModal = null\r\n })\r\n },\r\n async onEditLayer (layer) {\r\n this.editModal = await this.$createComponent('editor/KModalEditor', {\r\n propsData: {\r\n service: 'catalog',\r\n contextId: this.contextId,\r\n objectId: layer._id\r\n }\r\n })\r\n this.editModal.$mount()\r\n this.editModal.openModal()\r\n this.editModal.$on('applied', updatedLayer => {\r\n // Actual layer update should be triggerred by real-time event\r\n // but as we might not always use sockets perform it anyway\r\n // If renamed need to update the layer map accordingly\r\n if (layer.name !== updatedLayer.name) {\r\n this.renameLayer(layer.name, updatedLayer.name)\r\n }\r\n Object.assign(layer, updatedLayer)\r\n this.editModal.closeModal()\r\n })\r\n this.editModal.$on('closed', () => {\r\n this.editModal = null\r\n })\r\n },\r\n async onEditLayerStyle (layer) {\r\n this.editStyleModal = await this.$createComponent('KLayerStyleEditor', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer,\r\n options: this.activityOptions.engine\r\n }\r\n })\r\n this.editStyleModal.$mount()\r\n this.editStyleModal.open()\r\n this.editStyleModal.$on('applied', async () => {\r\n // Actual layer update should be triggerred by real-time event\r\n // but as we might not always use sockets perform it anyway\r\n // Keep track of data as we will reset the layer\r\n const geoJson = this.toGeoJson(layer.name)\r\n // Reset layer with new setup\r\n await this.resetLayer(layer)\r\n // Update data only when in memory as reset has lost it\r\n if (!layer._id) {\r\n this.updateLayer(layer.name, geoJson)\r\n }\r\n this.editStyleModal.closeModal()\r\n })\r\n this.editStyleModal.$on('closed', () => {\r\n this.editStyleModal = null\r\n })\r\n },\r\n editLayerByName (name, editOptions = {}) {\r\n // this one is used through postRobot to trigger edition\r\n // on a layer\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n this.startEditLayer(layer, editOptions)\r\n },\r\n onEditLayerData (layer) {\r\n // this one is triggered by a layer action (toggle)\r\n if (this.isLayerEdited(layer)) {\r\n // always accept editions in the action\r\n this.stopEditLayer('accept')\r\n } else {\r\n // start editing properties by default\r\n this.startEditLayer(layer, { editMode: 'edit-properties' })\r\n }\r\n },\r\n onEndLayerEdition (status = 'accept') {\r\n // this one can be triggered from a toolbar to accept or reject changes\r\n this.stopEditLayer(status)\r\n },\r\n async onRemoveLayer (layer) {\r\n Dialog.create({\r\n title: this.$t('mixins.activity.REMOVE_DIALOG_TITLE', { layer: layer.name }),\r\n message: this.$t('mixins.activity.REMOVE_DIALOG_MESSAGE', { layer: layer.name }),\r\n html: true,\r\n ok: {\r\n label: this.$t('OK'),\r\n flat: true\r\n },\r\n cancel: {\r\n label: this.$t('CANCEL'),\r\n flat: true\r\n }\r\n }).onOk(async () => {\r\n Loading.show({ message: this.$t('mixins.activity.REMOVING_LABEL') })\r\n try {\r\n // Stop any running edition\r\n if (this.isLayerEdited(layer)) this.onEditLayerData(layer)\r\n if (layer._id) {\r\n // If persistent feature layer remove features as well\r\n if (this.isFeatureLayer(layer)) {\r\n await this.removeFeatures(layer._id)\r\n }\r\n await this.$api.getService('catalog').remove(layer._id)\r\n }\r\n // Actual layer removal should be triggerred by real-time event\r\n // but as we might not always use sockets perform it anyway\r\n this.removeLayer(layer.name)\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 Loading.hide()\r\n })\r\n },\r\n onMapReady () {\r\n this.engineReady = true\r\n this.engine = 'leaflet'\r\n },\r\n onGlobeReady () {\r\n this.engineReady = true\r\n this.engine = 'cesium'\r\n },\r\n getProbeTimeRange () {\r\n const start = Time.getCurrentTime().clone()\r\n const end = start.clone()\r\n const span = this.$store.get('timeseries.span')\r\n // We center on current time with the same span on past/future\r\n start.subtract(span, 'm')\r\n end.add(span, 'm')\r\n return { start, end }\r\n },\r\n onProbeLocation () {\r\n this.setCursor('probe-cursor')\r\n this.$once('click', () => {\r\n this.unsetCursor('probe-cursor')\r\n })\r\n },\r\n onToggleFullscreen () {\r\n if (!this.$q.fullscreen.isActive) this.$q.fullscreen.request()\r\n else this.$q.fullscreen.exit()\r\n },\r\n async initialize () {\r\n // Check if the activity is using context restoration\r\n const hasContext = (typeof this.restoreContext === 'function')\r\n // Geolocate by default if view has not been restored\r\n const viewRestored = (hasContext ? await this.restoreContext('view') : false)\r\n if (!viewRestored) {\r\n // Provided by geolocation if enabled\r\n if (!this.$geolocation.get().position) await this.$geolocation.update()\r\n const position = this.$geolocation.get().position\r\n if (position) this.center(position.longitude, position.latitude)\r\n }\r\n // Retrieve the forecast models\r\n if (this.setupWeacast) {\r\n try {\r\n await this.setupWeacast()\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n this.forecastModelHandlers = { toggle: (model) => this.setForecastModel(model) }\r\n } else {\r\n this.forecastModelHandlers = {}\r\n }\r\n // Retrieve the layers\r\n try {\r\n await this.refreshLayerCategories()\r\n await this.refreshLayers()\r\n if (hasContext) await this.restoreContext('layers')\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n // Listen about changes in global/contextual catalog services\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n const catalogService = this.$api.getService('catalog')\r\n // Keep track of binded listeners as we use the same function with different contexts\r\n this.catalogListeners = {}\r\n globalCatalogService._serviceEvents.forEach(event => {\r\n this.catalogListeners[event] = (object) => this.onCatalogUpdated(event, object)\r\n globalCatalogService.on(event, this.catalogListeners[event])\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n catalogService.on(event, this.catalogListeners[event])\r\n }\r\n })\r\n },\r\n finalize () {\r\n // Stop listening about changes in global/contextual catalog services\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n const catalogService = this.$api.getService('catalog')\r\n globalCatalogService._serviceEvents.forEach(event => {\r\n globalCatalogService.removeListener(event, this.catalogListeners[event])\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n catalogService.removeListener(event, this.catalogListeners[event])\r\n }\r\n })\r\n this.catalogListeners = {}\r\n },\r\n async onCatalogUpdated (event, object) {\r\n switch (object.type) {\r\n case 'Category':\r\n // In any case we rebuild categories\r\n this.refreshLayerCategories()\r\n break\r\n case 'Context':\r\n case 'Service':\r\n // Nothing to do\r\n break\r\n default: {\r\n // Updating a layer requires to remove/add it again to cover all use cases\r\n // (eg style edition, etc.)\r\n // Here we find layer by ID as renaming could have occured from another client\r\n const layers = this.getLayers({ _id: object._id })\r\n if (layers.length > 0) await this.removeCatalogLayer(layers[0])\r\n if (event !== 'removed') await this.addCatalogLayer(object)\r\n break\r\n }\r\n }\r\n }\r\n },\r\n mounted () {\r\n this.$on('map-ready', this.onMapReady)\r\n this.$on('globe-ready', this.onGlobeReady)\r\n this.$on('layer-added', this.onLayerAdded)\r\n },\r\n beforeDestroy () {\r\n this.$off('map-ready', this.onMapReady)\r\n this.$off('globe-ready', this.onGlobeReady)\r\n this.$off('layer-added', this.onLayerAdded)\r\n this.finalize()\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../map/client/mixins/mixin.activity.js"],"names":["data","forecastModelHandlers","layerCategories","variables","engine","engineReady","engineContainerWidth","engineContainerHeight","computed","viewStyle","variablesForCurrentLevel","map","variable","Object","assign","name","selectedLevel","_","omit","currentVariables","hasSelectableLevels","methods","is2D","is3D","getFeatureActions","feature","layer","getCatalogLayers","layers","globalCatalogService","$api","getService","response","find","concat","catalogService","gatewayToken","get","getItem","$config","addCatalogLayer","i18n","locale","kCoreUtils","getAppLocale","i18next","addResourceBundle","$t","label","description","isWeacastLayer","startsWith","weacastApi","forecastModel","addLayer","uniqBy","removeCatalogLayer","removeLayer","getCatalogCategories","categories","query","type","refreshLayerCategories","refreshLayers","clearLayers","catalogLayers","filter","i","length","hasVisibleBaseLayer","isVisible","baseLayer","showLayer","isUserLayer","isFeatureLayer","hasFeatureSchema","has","isLayerSelectable","isLayerEdited","isLayerStorable","_id","isLayerEditable","isLayerRemovable","isLayerStyleEditable","isLayerDataEditable","resetLayer","isLayerVisible","configureLayerActions","actions","activityOptions","Layout","filterContent","bindContent","cloneDeep","push","id","handler","onTriggerLayer","$set","onLayerAdded","hideLayer","hasContext","storeContext","onZoomIn","center","getCenter","longitude","latitude","zoomLevel","altitude","onZoomOut","onZoomToLayer","zoomToLayer","onSaveLayer","geoJson","toGeoJson","check","checkFeatures","kinks","result","dialog","title","features","message","options","model","items","value","html","ok","flat","cancel","includes","downloadAsBlob","JSON","stringify","set","nbPoints","forEach","Loading","show","processed","total","createdLayer","create","chunkSize","nbFeatures","createFeatures","chunk","patch","baseQuery","$toast","timeout","error","logger","hide","onFilterLayerData","filterModal","$createComponent","propsData","contextId","$mount","open","$on","closeModal","onViewLayerData","viewModal","featureActions","tooltip","icon","context","item","onChartLayerData","chartModal","onEditLayer","editModal","service","objectId","openModal","updatedLayer","renameLayer","onEditLayerStyle","editStyleModal","updateLayer","editLayerByName","editOptions","getLayerByName","startEditLayer","onEditLayerData","stopEditLayer","editMode","onEndLayerEdition","status","onRemoveLayer","Dialog","onOk","removeFeatures","remove","onMapReady","onGlobeReady","getProbeTimeRange","start","Time","getCurrentTime","clone","end","span","$store","subtract","add","onProbeLocation","setCursor","$once","unsetCursor","onToggleFullscreen","$q","fullscreen","isActive","request","exit","initialize","restoreContext","viewRestored","$geolocation","position","update","setupWeacast","toggle","setForecastModel","catalogListeners","_serviceEvents","event","object","onCatalogUpdated","on","finalize","removeListener","getLayers","mounted","beforeDestroy","$off"],"mappings":"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","file":"mixin.activity.js","sourcesContent":["import _ from 'lodash'\r\nimport i18next from 'i18next'\r\nimport sift from 'sift'\r\nimport logger from 'loglevel'\r\nimport centroid from '@turf/centroid'\r\nimport explode from '@turf/explode'\r\nimport { Loading, Dialog } from 'quasar'\r\nimport { Time } from '../../../core/client/time'\r\nimport { Layout } from '../../../core/client/layout'\r\nimport { setGatewayJwt } from '../utils'\r\nimport { utils as kCoreUtils } from '../../../core/client'\r\n\r\nexport default {\r\n data () {\r\n return {\r\n forecastModelHandlers: {},\r\n layerCategories: [],\r\n variables: [],\r\n engine: 'leaflet',\r\n engineReady: false,\r\n engineContainerWidth: null,\r\n engineContainerHeight: null\r\n }\r\n },\r\n computed: {\r\n viewStyle () {\r\n return 'width: 100%; height: 100%; fontWeight: normal; zIndex: 0; position: absolute;'\r\n },\r\n variablesForCurrentLevel () {\r\n return this.variables.map(variable => Object.assign({ name: `${variable.name}-${this.selectedLevel}` }, _.omit(variable, ['name'])))\r\n },\r\n currentVariables () {\r\n return this.hasSelectableLevels ? this.variablesForCurrentLevel : this.variables\r\n }\r\n },\r\n methods: {\r\n is2D () {\r\n return (this.engine === 'leaflet')\r\n },\r\n is3D () {\r\n return (this.engine === 'cesium')\r\n },\r\n // This method should be overriden in activities\r\n getFeatureActions (feature, layer) {\r\n return []\r\n },\r\n async getCatalogLayers () {\r\n let layers = []\r\n // We get layers coming from global catalog first if any\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n if (globalCatalogService) {\r\n const response = await globalCatalogService.find()\r\n layers = layers.concat(response.data)\r\n }\r\n // Then we get layers coming from contextual catalog if any\r\n const catalogService = this.$api.getService('catalog')\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n const response = await catalogService.find()\r\n layers = layers.concat(response.data)\r\n }\r\n const gatewayToken = this.$api.get('storage').getItem(this.$config('gatewayJwt'))\r\n return (gatewayToken ? setGatewayJwt(layers, gatewayToken) : layers)\r\n },\r\n async addCatalogLayer (layer) {\r\n // Check if available for current engine\r\n if (layer[this.engine]) {\r\n // Process i18n\r\n if (layer.i18n) {\r\n const locale = kCoreUtils.getAppLocale()\r\n const i18n = _.get(layer.i18n, locale)\r\n if (i18n) i18next.addResourceBundle(locale, 'kdk', i18n, true, true)\r\n }\r\n if (this.$t(layer.name)) layer.label = this.$t(layer.name)\r\n if (this.$t(layer.description)) layer.description = this.$t(layer.description)\r\n // Check for Weacast API availability\r\n const isWeacastLayer = _.get(layer, `${this.engine}.type`, '').startsWith('weacast.')\r\n if (isWeacastLayer && (!this.weacastApi || !this.forecastModel)) return\r\n await this.addLayer(layer)\r\n }\r\n // Filter layers with variables, not just visible ones because we might want to\r\n // probe weather even if there is no visual representation (e.g. in globe)\r\n if (layer.variables) this.variables = _.uniqBy(this.variables.concat(layer.variables), (variable) => variable.name)\r\n },\r\n async removeCatalogLayer (layer) {\r\n // Check if available for current engine\r\n if (layer[this.engine]) {\r\n await this.removeLayer(layer.name)\r\n }\r\n },\r\n async getCatalogCategories () {\r\n let categories = []\r\n // We get categories coming from global catalog first if any\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n if (globalCatalogService) {\r\n const response = await globalCatalogService.find({ query: { type: 'Category' } })\r\n categories = categories.concat(response.data)\r\n }\r\n // Then we get categories coming from contextual catalog if any\r\n const catalogService = this.$api.getService('catalog')\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n const response = await catalogService.find({ query: { type: 'Category' } })\r\n categories = categories.concat(response.data)\r\n }\r\n return categories\r\n },\r\n async refreshLayerCategories () {\r\n // Merge built-in categories with user-defiend ones\r\n this.layerCategories = await this.getCatalogCategories()\r\n this.layerCategories = this.layerCategories.concat(_.get(this, 'activityOptions.catalog.categories', []))\r\n },\r\n async refreshLayers () {\r\n // Clear layers and variables\r\n this.clearLayers()\r\n this.variables = []\r\n let catalogLayers = await this.getCatalogLayers()\r\n // Apply global layer filter\r\n catalogLayers = catalogLayers.filter(sift(_.get(this, 'activityOptions.catalog.filter', {})))\r\n // Iterate and await layers as creation is async and we need to have all layers ready\r\n // before checking if there is some background layer\r\n for (let i = 0; i < catalogLayers.length; i++) {\r\n await this.addCatalogLayer(catalogLayers[i])\r\n }\r\n // We need at least an active background\r\n const hasVisibleBaseLayer = catalogLayers.find((layer) => (layer.type === 'BaseLayer') && layer.isVisible)\r\n if (!hasVisibleBaseLayer) {\r\n const baseLayer = catalogLayers.find((layer) => (layer.type === 'BaseLayer'))\r\n if (baseLayer) await this.showLayer(baseLayer.name)\r\n }\r\n },\r\n isUserLayer (layer) {\r\n return (_.get(layer, 'scope') === 'user')\r\n },\r\n isFeatureLayer (layer) {\r\n return (_.get(layer, 'service') === 'features')\r\n },\r\n hasFeatureSchema (layer) {\r\n return _.has(layer, 'schema')\r\n },\r\n isLayerSelectable (layer) {\r\n // Only possible when not edited by default\r\n if ((typeof this.isLayerEdited === 'function') && this.isLayerEdited(layer)) return false\r\n return _.get(layer, 'isSelectable', true)\r\n },\r\n isLayerStorable (layer) {\r\n // Only possible when not saved by default\r\n if (layer._id) return false\r\n return _.get(layer, 'isStorable', this.isUserLayer(layer))\r\n },\r\n isLayerEditable (layer) {\r\n // Only possible when saved by default\r\n if (!layer._id) return false\r\n return _.get(layer, 'isEditable', this.isUserLayer(layer))\r\n },\r\n isLayerRemovable (layer) {\r\n return _.get(layer, 'isRemovable', this.isUserLayer(layer))\r\n },\r\n isLayerStyleEditable (layer) {\r\n return _.get(layer, 'isStyleEditable', this.isUserLayer(layer))\r\n },\r\n isLayerDataEditable (layer) {\r\n return _.get(layer, 'isDataEditable', this.isUserLayer(layer) && this.isFeatureLayer(layer))\r\n },\r\n async resetLayer (layer) {\r\n // Reset layer with new setup but keep track of current visibility state\r\n // as adding the layer back will restore default visibility state\r\n const isVisible = this.isLayerVisible(layer.name)\r\n await this.removeLayer(layer.name)\r\n await this.addLayer(layer)\r\n if (isVisible) await this.showLayer(layer.name)\r\n },\r\n configureLayerActions (layer) {\r\n let actions = _.get(this.activityOptions, 'layers.actions')\r\n if (actions) {\r\n // Apply filtering\r\n actions = Layout.filterContent(actions, _.get(this.activityOptions, 'layers.filter', {}))\r\n }\r\n // As context is different for each item we need to clone the global action configuration\r\n // otheriwse context will always reference the last processed item\r\n actions = Layout.bindContent(_.cloneDeep(actions), this)\r\n // Add 'virtual' action used to trigger the layer\r\n actions.push({ id: 'toggle', handler: () => this.onTriggerLayer(layer) })\r\n // Store the actions and make it reactive\r\n this.$set(layer, 'actions', actions)\r\n return actions\r\n },\r\n onLayerAdded (layer) {\r\n this.configureLayerActions(layer)\r\n },\r\n async onTriggerLayer (layer) {\r\n if (!this.isLayerVisible(layer.name)) {\r\n await this.showLayer(layer.name)\r\n } else {\r\n await this.hideLayer(layer.name)\r\n }\r\n // Check if the activity is using context restoration\r\n const hasContext = (typeof this.storeContext === 'function')\r\n if (hasContext) this.storeContext('layers')\r\n },\r\n onZoomIn () {\r\n const center = this.getCenter()\r\n this.center(center.longitude, center.latitude, center.zoomLevel ? center.zoomLevel + 1 : center.altitude * 0.5)\r\n },\r\n onZoomOut () {\r\n const center = this.getCenter()\r\n this.center(center.longitude, center.latitude, center.zoomLevel ? center.zoomLevel - 1 : center.altitude * 2)\r\n },\r\n onZoomToLayer (layer) {\r\n this.zoomToLayer(layer.name)\r\n },\r\n async onSaveLayer (layer) {\r\n // Take care that WFS layers rely on the same type as our own feature layers\r\n if (!_.has(layer, 'wfs') && _.get(layer, `${this.engine}.type`) === 'geoJson') {\r\n const geoJson = this.toGeoJson(layer.name)\r\n // Check for invalid features first\r\n const check = this.checkFeatures(geoJson)\r\n if (check.kinks.length > 0) {\r\n const result = await kCoreUtils.dialog({\r\n title: this.$t('mixins.activity.INVALID_FEATURES_DIALOG_TITLE', { features: check.kinks }),\r\n message: this.$t('mixins.activity.INVALID_FEATURES_DIALOG_MESSAGE', { features: check.kinks }),\r\n options: {\r\n type: 'toggle',\r\n model: [],\r\n items: [\r\n { label: this.$t('mixins.activity.DOWNLOAD_INVALID_FEATURES_LABEL'), value: 'download' }\r\n ]\r\n },\r\n html: true,\r\n ok: {\r\n label: this.$t('OK'),\r\n flat: true\r\n },\r\n cancel: {\r\n label: this.$t('CANCEL'),\r\n flat: true\r\n }\r\n })\r\n if (!result.ok) return\r\n // Export invalid features if required\r\n if (_.get(result, 'data', []).includes('download')) {\r\n kCoreUtils.downloadAsBlob(JSON.stringify({ type: 'FeatureCollection', features: check.kinks }),\r\n this.$t('mixins.activity.INVALID_FEATURES_FILE'), 'application/json;charset=utf-8;')\r\n }\r\n }\r\n // Change data source from in-memory to features service\r\n _.set(layer, 'service', 'features')\r\n if (_.has(layer, 'leaflet')) _.set(layer, 'leaflet.source', '/api/features')\r\n if (_.has(layer, 'cesium')) _.set(layer, 'cesium.source', '/api/features')\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n // If too much data use tiling\r\n // The threshold is based on the number of points and not features.\r\n // Indeed otherwise the complexity will be different depending on the geometry type\r\n // (eg a bucket of 1000 polygons can actually contains a lot of points).\r\n let nbPoints = 0\r\n features.forEach(feature => {\r\n nbPoints += explode(feature).features.length\r\n })\r\n if (this.is2D() && (nbPoints > 5000)) {\r\n _.set(layer, 'leaflet.tiled', true)\r\n _.set(layer, 'leaflet.minZoom', 15)\r\n }\r\n Loading.show({ message: this.$t('mixins.activity.SAVING_LABEL', { processed: 0, total: features.length }) })\r\n try {\r\n let createdLayer = await this.$api.getService('catalog')\r\n .create(_.omit(layer, ['actions', 'label', 'isVisible', 'isDisabled']))\r\n const chunkSize = _.get(this, 'activityOptions.featuresChunkSize', 5000)\r\n let nbFeatures = 0\r\n // We use the generated DB ID as layer ID on features\r\n await this.createFeatures(geoJson, createdLayer._id, chunkSize, (i, chunk) => {\r\n // Update saving message according to new chunk data\r\n nbFeatures += chunk.length\r\n Loading.show({\r\n message: this.$t('mixins.activity.SAVING_LABEL', { processed: nbFeatures, total: features.length })\r\n })\r\n })\r\n // Because we save all features in a single service use filtering to separate layers\r\n createdLayer = await this.$api.getService('catalog').patch(createdLayer._id, { baseQuery: { layer: createdLayer._id } })\r\n // Reset layer with new setup\r\n await this.resetLayer(createdLayer)\r\n if (_.get(layer, 'leaflet.tiled')) {\r\n this.$toast({ type: 'positive', message: this.$t('mixins.activity.SAVE_DIALOG_MESSAGE'), timeout: 10000, html: true })\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 Loading.hide()\r\n } else {\r\n // Otherwise simply save in catalog\r\n const createdLayer = await this.$api.getService('catalog')\r\n .create(_.omit(layer, ['actions', 'label', 'isVisible', 'isDisabled']))\r\n // Reset layer with new setup\r\n await this.resetLayer(createdLayer)\r\n }\r\n },\r\n async onFilterLayerData (layer) {\r\n this.filterModal = await this.$createComponent('KFeaturesFilter', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer\r\n }\r\n })\r\n this.filterModal.$mount()\r\n this.filterModal.open()\r\n this.filterModal.$on('applied', async () => {\r\n // Reset layer with new setup\r\n await this.resetLayer(layer)\r\n this.filterModal.closeModal()\r\n })\r\n this.filterModal.$on('closed', () => {\r\n this.filterModal = null\r\n })\r\n },\r\n async onViewLayerData (layer) {\r\n this.viewModal = await this.$createComponent('KFeaturesTable', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer,\r\n featureActions: [{\r\n name: 'zoom-to',\r\n tooltip: this.$t('mixins.activity.ZOOM_TO_LABEL'),\r\n icon: 'zoom_out_map',\r\n handler: (context) => {\r\n // Use altitude or zoom level depending on engine\r\n this.center(..._.get(centroid(context.item), 'geometry.coordinates'), this.is2D() ? 18 : 750)\r\n this.viewModal.closeModal()\r\n }\r\n }]\r\n }\r\n })\r\n this.viewModal.$mount()\r\n this.viewModal.open()\r\n this.viewModal.$on('closed', () => {\r\n this.viewModal = null\r\n })\r\n },\r\n async onChartLayerData (layer) {\r\n this.chartModal = await this.$createComponent('KFeaturesChart', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer\r\n }\r\n })\r\n this.chartModal.$mount()\r\n this.chartModal.open()\r\n this.chartModal.$on('closed', () => {\r\n this.chartModal = null\r\n })\r\n },\r\n async onEditLayer (layer) {\r\n this.editModal = await this.$createComponent('editor/KModalEditor', {\r\n propsData: {\r\n service: 'catalog',\r\n contextId: this.contextId,\r\n objectId: layer._id\r\n }\r\n })\r\n this.editModal.$mount()\r\n this.editModal.openModal()\r\n this.editModal.$on('applied', updatedLayer => {\r\n // Actual layer update should be triggerred by real-time event\r\n // but as we might not always use sockets perform it anyway\r\n // If renamed need to update the layer map accordingly\r\n if (layer.name !== updatedLayer.name) {\r\n this.renameLayer(layer.name, updatedLayer.name)\r\n }\r\n Object.assign(layer, updatedLayer)\r\n this.editModal.closeModal()\r\n })\r\n this.editModal.$on('closed', () => {\r\n this.editModal = null\r\n })\r\n },\r\n async onEditLayerStyle (layer) {\r\n this.editStyleModal = await this.$createComponent('KLayerStyleEditor', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer,\r\n options: this.activityOptions.engine\r\n }\r\n })\r\n this.editStyleModal.$mount()\r\n this.editStyleModal.open()\r\n this.editStyleModal.$on('applied', async () => {\r\n // Actual layer update should be triggerred by real-time event\r\n // but as we might not always use sockets perform it anyway\r\n // Keep track of data as we will reset the layer\r\n const geoJson = this.toGeoJson(layer.name)\r\n // Reset layer with new setup\r\n await this.resetLayer(layer)\r\n // Update data only when in memory as reset has lost it\r\n if (!layer._id) {\r\n this.updateLayer(layer.name, geoJson)\r\n }\r\n this.editStyleModal.closeModal()\r\n })\r\n this.editStyleModal.$on('closed', () => {\r\n this.editStyleModal = null\r\n })\r\n },\r\n editLayerByName (name, editOptions = {}) {\r\n // this one is used through postRobot to trigger edition\r\n // on a layer\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n this.startEditLayer(layer, editOptions)\r\n },\r\n onEditLayerData (layer) {\r\n // this one is triggered by a layer action (toggle)\r\n if (this.isLayerEdited(layer)) {\r\n // always accept editions in the action\r\n this.stopEditLayer('accept')\r\n } else {\r\n // start editing properties by default\r\n this.startEditLayer(layer, { editMode: 'edit-properties' })\r\n }\r\n },\r\n onEndLayerEdition (status = 'accept') {\r\n // this one can be triggered from a toolbar to accept or reject changes\r\n this.stopEditLayer(status)\r\n },\r\n async onRemoveLayer (layer) {\r\n Dialog.create({\r\n title: this.$t('mixins.activity.REMOVE_DIALOG_TITLE', { layer: layer.name }),\r\n message: this.$t('mixins.activity.REMOVE_DIALOG_MESSAGE', { layer: layer.name }),\r\n html: true,\r\n ok: {\r\n label: this.$t('OK'),\r\n flat: true\r\n },\r\n cancel: {\r\n label: this.$t('CANCEL'),\r\n flat: true\r\n }\r\n }).onOk(async () => {\r\n Loading.show({ message: this.$t('mixins.activity.REMOVING_LABEL') })\r\n try {\r\n // Stop any running edition\r\n if (this.isLayerEdited(layer)) this.onEditLayerData(layer)\r\n if (layer._id) {\r\n // If persistent feature layer remove features as well\r\n if (this.isFeatureLayer(layer)) {\r\n await this.removeFeatures(layer._id)\r\n }\r\n await this.$api.getService('catalog').remove(layer._id)\r\n }\r\n // Actual layer removal should be triggerred by real-time event\r\n // but as we might not always use sockets perform it anyway\r\n this.removeLayer(layer.name)\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 Loading.hide()\r\n })\r\n },\r\n onMapReady () {\r\n this.engineReady = true\r\n this.engine = 'leaflet'\r\n },\r\n onGlobeReady () {\r\n this.engineReady = true\r\n this.engine = 'cesium'\r\n },\r\n getProbeTimeRange () {\r\n const start = Time.getCurrentTime().clone()\r\n const end = start.clone()\r\n const span = this.$store.get('timeseries.span')\r\n // We center on current time with the same span on past/future\r\n start.subtract(span, 'm')\r\n end.add(span, 'm')\r\n return { start, end }\r\n },\r\n onProbeLocation () {\r\n this.setCursor('probe-cursor')\r\n this.$once('click', () => {\r\n this.unsetCursor('probe-cursor')\r\n })\r\n },\r\n onToggleFullscreen () {\r\n if (!this.$q.fullscreen.isActive) this.$q.fullscreen.request()\r\n else this.$q.fullscreen.exit()\r\n },\r\n async initialize () {\r\n // Check if the activity is using context restoration\r\n const hasContext = (typeof this.restoreContext === 'function')\r\n // Geolocate by default if view has not been restored\r\n const viewRestored = (hasContext ? await this.restoreContext('view') : false)\r\n if (!viewRestored) {\r\n // Provided by geolocation if enabled\r\n if (!this.$geolocation.get().position) await this.$geolocation.update()\r\n const position = this.$geolocation.get().position\r\n if (position) this.center(position.longitude, position.latitude)\r\n }\r\n // Retrieve the forecast models\r\n if (this.setupWeacast) {\r\n try {\r\n await this.setupWeacast()\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n this.forecastModelHandlers = { toggle: (model) => this.setForecastModel(model) }\r\n } else {\r\n this.forecastModelHandlers = {}\r\n }\r\n // Retrieve the layers\r\n try {\r\n await this.refreshLayerCategories()\r\n await this.refreshLayers()\r\n if (hasContext) await this.restoreContext('layers')\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n // Retrieve the time\r\n if (hasContext) this.restoreContext('time')\r\n // Listen about changes in global/contextual catalog services\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n const catalogService = this.$api.getService('catalog')\r\n // Keep track of binded listeners as we use the same function with different contexts\r\n this.catalogListeners = {}\r\n globalCatalogService._serviceEvents.forEach(event => {\r\n this.catalogListeners[event] = (object) => this.onCatalogUpdated(event, object)\r\n globalCatalogService.on(event, this.catalogListeners[event])\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n catalogService.on(event, this.catalogListeners[event])\r\n }\r\n })\r\n },\r\n finalize () {\r\n // Stop listening about changes in global/contextual catalog services\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n const catalogService = this.$api.getService('catalog')\r\n globalCatalogService._serviceEvents.forEach(event => {\r\n globalCatalogService.removeListener(event, this.catalogListeners[event])\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n catalogService.removeListener(event, this.catalogListeners[event])\r\n }\r\n })\r\n this.catalogListeners = {}\r\n },\r\n async onCatalogUpdated (event, object) {\r\n switch (object.type) {\r\n case 'Category':\r\n // In any case we rebuild categories\r\n this.refreshLayerCategories()\r\n break\r\n case 'Context':\r\n case 'Service':\r\n // Nothing to do\r\n break\r\n default: {\r\n // Updating a layer requires to remove/add it again to cover all use cases\r\n // (eg style edition, etc.)\r\n // Here we find layer by ID as renaming could have occured from another client\r\n const layers = this.getLayers({ _id: object._id })\r\n if (layers.length > 0) await this.removeCatalogLayer(layers[0])\r\n if (event !== 'removed') await this.addCatalogLayer(object)\r\n break\r\n }\r\n }\r\n }\r\n },\r\n mounted () {\r\n this.$on('map-ready', this.onMapReady)\r\n this.$on('globe-ready', this.onGlobeReady)\r\n this.$on('layer-added', this.onLayerAdded)\r\n },\r\n beforeDestroy () {\r\n this.$off('map-ready', this.onMapReady)\r\n this.$off('globe-ready', this.onGlobeReady)\r\n this.$off('layer-added', this.onLayerAdded)\r\n this.finalize()\r\n }\r\n}\r\n"]}
@@ -8,6 +8,10 @@ var _lodash = require('lodash');
8
8
 
9
9
  var _lodash2 = _interopRequireDefault(_lodash);
10
10
 
11
+ var _moment = require('moment');
12
+
13
+ var _moment2 = _interopRequireDefault(_moment);
14
+
11
15
  var _sift = require('sift');
12
16
 
13
17
  var _sift2 = _interopRequireDefault(_sift);
@@ -38,6 +42,11 @@ exports.default = {
38
42
  return _lodash2.default.pick(this.$route.query, ['layers']);
39
43
  }
40
44
  break;
45
+ case 'time':
46
+ if (_lodash2.default.get(this.$route, 'query.time')) {
47
+ return _lodash2.default.pick(this.$route.query, ['time']);
48
+ }
49
+ break;
41
50
  case 'view':
42
51
  default:
43
52
  if (_lodash2.default.get(this.$route, 'params.south') && _lodash2.default.get(this.$route, 'params.west') && _lodash2.default.get(this.$route, 'params.north') && _lodash2.default.get(this.$route, 'params.east')) {
@@ -74,9 +83,16 @@ exports.default = {
74
83
  switch (context) {
75
84
  case 'layers':
76
85
  targetParameters = {
77
- layers: _lodash2.default.values(this.layers).filter((0, _sift2.default)({ isVisible: true })).map(layer => layer.name)
86
+ layers: _lodash2.default.values(this.layers).filter((0, _sift2.default)({ isVisible: true, scope: { $nin: ['system'] }, _id: { $exists: true } })).map(layer => layer.name)
78
87
  };
79
88
  break;
89
+ case 'time':
90
+ {
91
+ targetParameters = {
92
+ time: _client.Time.getCurrentTime().restoreContext()
93
+ };
94
+ break;
95
+ }
80
96
  case 'view':
81
97
  default:
82
98
  {
@@ -99,10 +115,11 @@ exports.default = {
99
115
  {
100
116
  if (!_lodash2.default.has(targetParameters, 'layers')) return;
101
117
  // According to current state find which layers need to be (de)activated
102
- const activeLayers = _lodash2.default.values(_this.layers).filter((0, _sift2.default)({ isVisible: true })).map(function (layer) {
118
+ const activeLayers = _lodash2.default.values(_this.layers).filter((0, _sift2.default)({ isVisible: true, scope: { $nin: ['system'] }, _id: { $exists: true } })).map(function (layer) {
103
119
  return layer.name;
104
120
  });
105
- const targetLayers = targetParameters.layers;
121
+ // When retrieved from query parameters if a single layer is provided we don't have an array
122
+ const targetLayers = _lodash2.default.isArray(targetParameters.layers) ? targetParameters.layers : [targetParameters.layers];
106
123
  // List of layers to be (de)activated
107
124
  const activedLayers = _lodash2.default.difference(targetLayers, activeLayers);
108
125
  const inactivatedLayers = _lodash2.default.difference(activeLayers, targetLayers);
@@ -124,6 +141,12 @@ exports.default = {
124
141
  }));
125
142
  break;
126
143
  }
144
+ case 'time':
145
+ {
146
+ if (!_lodash2.default.has(targetParameters, 'time')) return;
147
+ _client.Store.set('time.currentTime', (0, _moment2.default)(targetParameters.time).utc());
148
+ break;
149
+ }
127
150
  case 'view':
128
151
  default:
129
152
  if (!_lodash2.default.has(targetParameters, 'south') || !_lodash2.default.has(targetParameters, 'west') || !_lodash2.default.has(targetParameters, 'north') || !_lodash2.default.has(targetParameters, 'east')) return;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../map/client/mixins/mixin.context.js"],"names":["methods","getContextKey","context","getAppName","toLowerCase","activityName","shouldRestoreContext","_","has","get","$store","getRouteContext","$route","pick","query","currentBounds","params","mapValues","value","toNumber","contextAsQuery","updateRouteContext","parameters","asQuery","route","Object","assign","$router","replace","catch","getContextParameters","targetParameters","layers","values","filter","isVisible","map","layer","name","bounds","getBounds","south","west","north","east","setContextParameters","activeLayers","targetLayers","activedLayers","difference","inactivatedLayers","inactivatedTerrainLayer","find","hasLayer","getLayerByName","type","activatedTerrainLayer","pull","Promise","all","showLayer","hideLayer","zoomToBounds","storeContext","isEqual","window","localStorage","setItem","JSON","stringify","restoreContext","isEmpty","savedParameters","getItem","parse","Array","isArray","response","$api","getService","isDefault","homeContext","data","length","clearContext","undefined","removeItem","saveContext","hasLayers","create","loadContext","kCoreUtils","isObjectID","Error","updateViewSettings","enabled","updateLayersSettings","mounted","$events","$on","beforeDestroy","$off"],"mappings":"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","file":"mixin.context.js","sourcesContent":["import _ from 'lodash'\r\nimport sift from 'sift'\r\nimport { utils as kCoreUtils } from '../../../core/client'\r\n\r\nexport default {\r\n methods: {\r\n getContextKey (context) {\r\n // Generate a unique key to store context based on app name, map activity name and context type\r\n return this.getAppName().toLowerCase() + `-${this.activityName}-${context}`\r\n },\r\n shouldRestoreContext (context) {\r\n // Use user settings except if the view has explicitly revoked restoration\r\n if (_.has(this, `activityOptions.restore.${context}`)) {\r\n if (!_.get(this, `activityOptions.restore.${context}`)) return false\r\n }\r\n return this.$store.get(`restore.${context}`)\r\n },\r\n getRouteContext (context) {\r\n switch (context) {\r\n case 'layers':\r\n if (_.get(this.$route, 'query.layers')) {\r\n return _.pick(this.$route.query, ['layers'])\r\n }\r\n break\r\n case 'view':\r\n default:\r\n if (_.get(this.$route, 'params.south') && _.get(this.$route, 'params.west') &&\r\n _.get(this.$route, 'params.north') && _.get(this.$route, 'params.east')) {\r\n const currentBounds = _.pick(this.$route.params, ['south', 'west', 'north', 'east'])\r\n return _.mapValues(currentBounds, value => _.toNumber(value))\r\n }\r\n break\r\n }\r\n return {}\r\n },\r\n contextAsQuery (context) {\r\n // Check if context is stored in route params or query\r\n switch (context) {\r\n case 'layers':\r\n return true\r\n case 'view':\r\n default:\r\n return false\r\n }\r\n },\r\n updateRouteContext (context, parameters) {\r\n const asQuery = this.contextAsQuery(context)\r\n // Clone route context to avoid any side effect\r\n const route = {\r\n query: Object.assign({}, _.get(this.$route, 'query', {})),\r\n params: Object.assign({}, _.get(this.$route, 'params', {}))\r\n }\r\n // Then update according to context\r\n if (asQuery) Object.assign(route.query, parameters)\r\n else Object.assign(route.params, parameters)\r\n // We catch as replacing with similar params raises a duplicate navigation error\r\n this.$router.replace(route).catch(_ => {})\r\n },\r\n getContextParameters (context) {\r\n let targetParameters\r\n switch (context) {\r\n case 'layers':\r\n targetParameters = {\r\n layers: _.values(this.layers).filter(sift({ isVisible: true })).map(layer => layer.name)\r\n }\r\n break\r\n case 'view':\r\n default: {\r\n const bounds = this.getBounds()\r\n const south = bounds[0][0]\r\n const west = bounds[0][1]\r\n const north = bounds[1][0]\r\n const east = bounds[1][1]\r\n targetParameters = { south, west, north, east }\r\n }\r\n }\r\n return targetParameters\r\n },\r\n async setContextParameters (context, targetParameters) {\r\n switch (context) {\r\n case 'layers': {\r\n if (!_.has(targetParameters, 'layers')) return\r\n // According to current state find which layers need to be (de)activated\r\n const activeLayers = _.values(this.layers).filter(sift({ isVisible: true })).map(layer => layer.name)\r\n const targetLayers = targetParameters.layers\r\n // List of layers to be (de)activated\r\n const activedLayers = _.difference(targetLayers, activeLayers)\r\n const inactivatedLayers = _.difference(activeLayers, targetLayers)\r\n // Take care that 3D requires at least a terrain layer.\r\n // So if we try to remove a terrain layer without activating a new one, keep it active\r\n // (this can be the case when the view has been saved from the 2D activity and restored in the 3D activity).\r\n const inactivatedTerrainLayer = _.find(inactivatedLayers, (name) => this.hasLayer(name) && (this.getLayerByName(name).type === 'TerrainLayer'))\r\n const activatedTerrainLayer = _.find(activedLayers, (name) => this.hasLayer(name) && (this.getLayerByName(name).type === 'TerrainLayer'))\r\n if (inactivatedTerrainLayer && !activatedTerrainLayer) _.pull(inactivatedLayers, inactivatedTerrainLayer)\r\n await Promise.all(activedLayers.map(layer => this.showLayer(layer)))\r\n await Promise.all(inactivatedLayers.map(layer => this.hideLayer(layer)))\r\n break\r\n }\r\n case 'view':\r\n default:\r\n if (!_.has(targetParameters, 'south') || !_.has(targetParameters, 'west') ||\r\n !_.has(targetParameters, 'north') || !_.has(targetParameters, 'east')) return\r\n this.zoomToBounds([\r\n [targetParameters.south, targetParameters.west],\r\n [targetParameters.north, targetParameters.east]\r\n ])\r\n break\r\n }\r\n },\r\n storeContext (context) {\r\n const targetParameters = this.getContextParameters(context)\r\n // Store both in URL and local storage, except if the user/view has explicitly revoked restoration\r\n if (this.shouldRestoreContext(context)) {\r\n if (!_.isEqual(this.getRouteContext(context), targetParameters)) {\r\n this.updateRouteContext(context, targetParameters)\r\n }\r\n window.localStorage.setItem(this.getContextKey(context), JSON.stringify(targetParameters))\r\n }\r\n },\r\n async restoreContext (context) {\r\n let targetParameters = this.getRouteContext(context)\r\n // Restore from local storage/catalog if no route parameters\r\n if (this.shouldRestoreContext(context) && _.isEmpty(targetParameters)) {\r\n const savedParameters = window.localStorage.getItem(this.getContextKey(context))\r\n if (savedParameters) {\r\n targetParameters = JSON.parse(savedParameters)\r\n // Backward compatibility: we previously stored the bounds as an array\r\n if (Array.isArray(targetParameters)) {\r\n targetParameters = {\r\n south: targetParameters[0][0],\r\n west: targetParameters[0][1],\r\n north: targetParameters[1][0],\r\n east: targetParameters[1][1]\r\n }\r\n }\r\n } else {\r\n // Check for a home context\r\n const response = await this.$api.getService('catalog').find({ query: { type: 'Context', isDefault: true } })\r\n const homeContext = (response.data.length > 0 ? response.data[0] : null)\r\n if (homeContext) targetParameters = homeContext\r\n }\r\n }\r\n // Restore context if possible\r\n if (!_.isEmpty(targetParameters)) {\r\n if (!_.isEqual(this.getRouteContext(context), targetParameters)) {\r\n this.updateRouteContext(context, targetParameters)\r\n }\r\n this.setContextParameters(context, targetParameters)\r\n }\r\n return targetParameters\r\n },\r\n clearContext (context) {\r\n // In order to clear we simply erase target property values\r\n let parameters\r\n switch (context) {\r\n case 'layers':\r\n parameters = { layers: undefined }\r\n break\r\n case 'view':\r\n default:\r\n parameters = { south: undefined, west: undefined, north: undefined, east: undefined }\r\n break\r\n }\r\n this.updateRouteContext(context, parameters)\r\n window.localStorage.removeItem(this.getContextKey(context))\r\n },\r\n async saveContext (context) {\r\n context = Object.assign({}, context)\r\n const hasLayers = context.layers\r\n // This flag is only useful in the options but will be replaced\r\n // by the actual layers when processed\r\n delete context.layers\r\n // Add required type for catalog\r\n context.type = 'Context'\r\n // Retrieve basic view parameters\r\n Object.assign(context, this.getContextParameters('view'))\r\n // Add layers parameters if required\r\n if (hasLayers) {\r\n Object.assign(context, this.getContextParameters('layers'))\r\n }\r\n await this.$api.getService('catalog').create(context)\r\n },\r\n async loadContext (context) {\r\n // If not context object retrieve it from catalog first\r\n if (typeof context === 'string') {\r\n if (kCoreUtils.isObjectID(context)) {\r\n context = await this.$api.getService('catalog').get(context)\r\n } else {\r\n const response = await this.$api.getService('catalog').find({ query: { type: 'Context', name: context } })\r\n context = (response.data.length > 0 ? response.data[0] : null)\r\n }\r\n }\r\n if (!context) throw new Error('Cannot find or invalid context')\r\n this.setContextParameters('view', context)\r\n this.setContextParameters('layers', context)\r\n },\r\n updateViewSettings (enabled) {\r\n if (!enabled) this.clearContext('view')\r\n },\r\n updateLayersSettings (enabled) {\r\n if (!enabled) this.clearContext('layers')\r\n }\r\n },\r\n mounted () {\r\n // Whenever restore settings are updated, update view as well\r\n this.$events.$on('restore-view-changed', this.updateViewSettings)\r\n this.$events.$on('restore-layers-changed', this.updateLayersSettings)\r\n },\r\n beforeDestroy () {\r\n this.$events.$off('restore-view-changed', this.updateViewSettings)\r\n this.$events.$off('restore-layers-changed', this.updateLayersSettings)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../map/client/mixins/mixin.context.js"],"names":["methods","getContextKey","context","getAppName","toLowerCase","activityName","shouldRestoreContext","_","has","get","$store","getRouteContext","$route","pick","query","currentBounds","params","mapValues","value","toNumber","contextAsQuery","updateRouteContext","parameters","asQuery","route","Object","assign","$router","replace","catch","getContextParameters","targetParameters","layers","values","filter","isVisible","scope","$nin","_id","$exists","map","layer","name","time","Time","getCurrentTime","restoreContext","bounds","getBounds","south","west","north","east","setContextParameters","activeLayers","targetLayers","isArray","activedLayers","difference","inactivatedLayers","inactivatedTerrainLayer","find","hasLayer","getLayerByName","type","activatedTerrainLayer","pull","Promise","all","showLayer","hideLayer","Store","set","utc","zoomToBounds","storeContext","isEqual","window","localStorage","setItem","JSON","stringify","isEmpty","savedParameters","getItem","parse","Array","response","$api","getService","isDefault","homeContext","data","length","clearContext","undefined","removeItem","saveContext","hasLayers","create","loadContext","kCoreUtils","isObjectID","Error","updateViewSettings","enabled","updateLayersSettings","mounted","$events","$on","beforeDestroy","$off"],"mappings":"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","file":"mixin.context.js","sourcesContent":["import _ from 'lodash'\r\nimport moment from 'moment'\r\nimport sift from 'sift'\r\nimport { utils as kCoreUtils, Time, Store } from '../../../core/client'\r\n\r\nexport default {\r\n methods: {\r\n getContextKey (context) {\r\n // Generate a unique key to store context based on app name, map activity name and context type\r\n return this.getAppName().toLowerCase() + `-${this.activityName}-${context}`\r\n },\r\n shouldRestoreContext (context) {\r\n // Use user settings except if the view has explicitly revoked restoration\r\n if (_.has(this, `activityOptions.restore.${context}`)) {\r\n if (!_.get(this, `activityOptions.restore.${context}`)) return false\r\n }\r\n return this.$store.get(`restore.${context}`)\r\n },\r\n getRouteContext (context) {\r\n switch (context) {\r\n case 'layers':\r\n if (_.get(this.$route, 'query.layers')) {\r\n return _.pick(this.$route.query, ['layers'])\r\n }\r\n break\r\n case 'time':\r\n if (_.get(this.$route, 'query.time')) {\r\n return _.pick(this.$route.query, ['time'])\r\n }\r\n break\r\n case 'view':\r\n default:\r\n if (_.get(this.$route, 'params.south') && _.get(this.$route, 'params.west') &&\r\n _.get(this.$route, 'params.north') && _.get(this.$route, 'params.east')) {\r\n const currentBounds = _.pick(this.$route.params, ['south', 'west', 'north', 'east'])\r\n return _.mapValues(currentBounds, value => _.toNumber(value))\r\n }\r\n break\r\n }\r\n return {}\r\n },\r\n contextAsQuery (context) {\r\n // Check if context is stored in route params or query\r\n switch (context) {\r\n case 'layers':\r\n return true\r\n case 'view':\r\n default:\r\n return false\r\n }\r\n },\r\n updateRouteContext (context, parameters) {\r\n const asQuery = this.contextAsQuery(context)\r\n // Clone route context to avoid any side effect\r\n const route = {\r\n query: Object.assign({}, _.get(this.$route, 'query', {})),\r\n params: Object.assign({}, _.get(this.$route, 'params', {}))\r\n }\r\n // Then update according to context\r\n if (asQuery) Object.assign(route.query, parameters)\r\n else Object.assign(route.params, parameters)\r\n // We catch as replacing with similar params raises a duplicate navigation error\r\n this.$router.replace(route).catch(_ => {})\r\n },\r\n getContextParameters (context) {\r\n let targetParameters\r\n switch (context) {\r\n case 'layers':\r\n targetParameters = {\r\n layers: _.values(this.layers).filter(sift({ isVisible: true, scope: { $nin: ['system'] }, _id: { $exists: true } })).map(layer => layer.name)\r\n }\r\n break\r\n case 'time': {\r\n targetParameters = {\r\n time: Time.getCurrentTime().restoreContext()\r\n }\r\n break\r\n }\r\n case 'view':\r\n default: {\r\n const bounds = this.getBounds()\r\n const south = bounds[0][0]\r\n const west = bounds[0][1]\r\n const north = bounds[1][0]\r\n const east = bounds[1][1]\r\n targetParameters = { south, west, north, east }\r\n }\r\n }\r\n return targetParameters\r\n },\r\n async setContextParameters (context, targetParameters) {\r\n switch (context) {\r\n case 'layers': {\r\n if (!_.has(targetParameters, 'layers')) return\r\n // According to current state find which layers need to be (de)activated\r\n const activeLayers = _.values(this.layers).filter(sift({ isVisible: true, scope: { $nin: ['system'] }, _id: { $exists: true } })).map(layer => layer.name)\r\n // When retrieved from query parameters if a single layer is provided we don't have an array\r\n const targetLayers = _.isArray(targetParameters.layers) ? targetParameters.layers : [targetParameters.layers]\r\n // List of layers to be (de)activated\r\n const activedLayers = _.difference(targetLayers, activeLayers)\r\n const inactivatedLayers = _.difference(activeLayers, targetLayers)\r\n // Take care that 3D requires at least a terrain layer.\r\n // So if we try to remove a terrain layer without activating a new one, keep it active\r\n // (this can be the case when the view has been saved from the 2D activity and restored in the 3D activity).\r\n const inactivatedTerrainLayer = _.find(inactivatedLayers, (name) => this.hasLayer(name) && (this.getLayerByName(name).type === 'TerrainLayer'))\r\n const activatedTerrainLayer = _.find(activedLayers, (name) => this.hasLayer(name) && (this.getLayerByName(name).type === 'TerrainLayer'))\r\n if (inactivatedTerrainLayer && !activatedTerrainLayer) _.pull(inactivatedLayers, inactivatedTerrainLayer)\r\n await Promise.all(activedLayers.map(layer => this.showLayer(layer)))\r\n await Promise.all(inactivatedLayers.map(layer => this.hideLayer(layer)))\r\n break\r\n }\r\n case 'time': {\r\n if (!_.has(targetParameters, 'time')) return\r\n Store.set('time.currentTime', moment(targetParameters.time).utc())\r\n break\r\n }\r\n case 'view':\r\n default:\r\n if (!_.has(targetParameters, 'south') || !_.has(targetParameters, 'west') ||\r\n !_.has(targetParameters, 'north') || !_.has(targetParameters, 'east')) return\r\n this.zoomToBounds([\r\n [targetParameters.south, targetParameters.west],\r\n [targetParameters.north, targetParameters.east]\r\n ])\r\n break\r\n }\r\n },\r\n storeContext (context) {\r\n const targetParameters = this.getContextParameters(context)\r\n // Store both in URL and local storage, except if the user/view has explicitly revoked restoration\r\n if (this.shouldRestoreContext(context)) {\r\n if (!_.isEqual(this.getRouteContext(context), targetParameters)) {\r\n this.updateRouteContext(context, targetParameters)\r\n }\r\n window.localStorage.setItem(this.getContextKey(context), JSON.stringify(targetParameters))\r\n }\r\n },\r\n async restoreContext (context) {\r\n let targetParameters = this.getRouteContext(context)\r\n // Restore from local storage/catalog if no route parameters\r\n if (this.shouldRestoreContext(context) && _.isEmpty(targetParameters)) {\r\n const savedParameters = window.localStorage.getItem(this.getContextKey(context))\r\n if (savedParameters) {\r\n targetParameters = JSON.parse(savedParameters)\r\n // Backward compatibility: we previously stored the bounds as an array\r\n if (Array.isArray(targetParameters)) {\r\n targetParameters = {\r\n south: targetParameters[0][0],\r\n west: targetParameters[0][1],\r\n north: targetParameters[1][0],\r\n east: targetParameters[1][1]\r\n }\r\n }\r\n } else {\r\n // Check for a home context\r\n const response = await this.$api.getService('catalog').find({ query: { type: 'Context', isDefault: true } })\r\n const homeContext = (response.data.length > 0 ? response.data[0] : null)\r\n if (homeContext) targetParameters = homeContext\r\n }\r\n }\r\n // Restore context if possible\r\n if (!_.isEmpty(targetParameters)) {\r\n if (!_.isEqual(this.getRouteContext(context), targetParameters)) {\r\n this.updateRouteContext(context, targetParameters)\r\n }\r\n this.setContextParameters(context, targetParameters)\r\n }\r\n return targetParameters\r\n },\r\n clearContext (context) {\r\n // In order to clear we simply erase target property values\r\n let parameters\r\n switch (context) {\r\n case 'layers':\r\n parameters = { layers: undefined }\r\n break\r\n case 'view':\r\n default:\r\n parameters = { south: undefined, west: undefined, north: undefined, east: undefined }\r\n break\r\n }\r\n this.updateRouteContext(context, parameters)\r\n window.localStorage.removeItem(this.getContextKey(context))\r\n },\r\n async saveContext (context) {\r\n context = Object.assign({}, context)\r\n const hasLayers = context.layers\r\n // This flag is only useful in the options but will be replaced\r\n // by the actual layers when processed\r\n delete context.layers\r\n // Add required type for catalog\r\n context.type = 'Context'\r\n // Retrieve basic view parameters\r\n Object.assign(context, this.getContextParameters('view'))\r\n // Add layers parameters if required\r\n if (hasLayers) {\r\n Object.assign(context, this.getContextParameters('layers'))\r\n }\r\n await this.$api.getService('catalog').create(context)\r\n },\r\n async loadContext (context) {\r\n // If not context object retrieve it from catalog first\r\n if (typeof context === 'string') {\r\n if (kCoreUtils.isObjectID(context)) {\r\n context = await this.$api.getService('catalog').get(context)\r\n } else {\r\n const response = await this.$api.getService('catalog').find({ query: { type: 'Context', name: context } })\r\n context = (response.data.length > 0 ? response.data[0] : null)\r\n }\r\n }\r\n if (!context) throw new Error('Cannot find or invalid context')\r\n this.setContextParameters('view', context)\r\n this.setContextParameters('layers', context)\r\n },\r\n updateViewSettings (enabled) {\r\n if (!enabled) this.clearContext('view')\r\n },\r\n updateLayersSettings (enabled) {\r\n if (!enabled) this.clearContext('layers')\r\n }\r\n },\r\n mounted () {\r\n // Whenever restore settings are updated, update view as well\r\n this.$events.$on('restore-view-changed', this.updateViewSettings)\r\n this.$events.$on('restore-layers-changed', this.updateLayersSettings)\r\n },\r\n beforeDestroy () {\r\n this.$events.$off('restore-view-changed', this.updateViewSettings)\r\n this.$events.$off('restore-layers-changed', this.updateLayersSettings)\r\n }\r\n}\r\n"]}
@@ -134,7 +134,7 @@ exports.default = {
134
134
  const lte = now;
135
135
  Object.assign(query, {
136
136
  $limit: 1,
137
- $sort: { time: -1 },
137
+ $sort: { time: -1, runTime: -1 },
138
138
  time: {
139
139
  $gte: gte.format(),
140
140
  $lte: lte.format()
@@ -146,7 +146,7 @@ exports.default = {
146
146
  // Last available data only for realtime visualization
147
147
  Object.assign(query, {
148
148
  $limit: 1,
149
- $sort: { time: -1 },
149
+ $sort: { time: -1, runTime: -1 },
150
150
  time: { $lte: now.format() }
151
151
  });
152
152
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../map/client/mixins/mixin.feature-service.js"],"names":["methods","getBaseQueryForFeatures","options","baseQuery","result","Object","assign","getFeaturesUpdateInterval","interval","_","has","get","engine","moment","duration","getFeaturesQueryInterval","queryInterval","asMilliseconds","shouldSkipFeaturesUpdate","lastUpdateTime","now","Time","getCurrentTime","isSameOrAfter","clone","add","getProbeFeatures","query","response","$api","getService","probeService","find","processor","features","type","forEach","feature","getProbeFeaturesFromLayer","name","layer","getLayerByName","getFeatures","variables","$groupBy","featureId","$aggregate","map","variable","isDuration","gte","subtract","lte","$limit","$sort","time","$gte","format","$lte","service","getFeaturesFromLayer","getMeasureValueAtCurrentTime","times","values","Array","isArray","nearestTime","utc","index","getProbedLocationMeasureAtCurrentTime","probedLocation","cloneDeep","forOwn","properties","value","key","set","getMeasureForFeature","startTime","endTime","setCursor","merge","length","error","logger","unsetCursor","checkFeatures","geoJson","kinks","redundantCoordinates","mutate","kinksFeatures","remove","invalidFeatures","createFeatures","layerId","chunkSize","processCallback","_id","create","chunks","chunkPoints","chunk","explodedFeature","nbPoints","push","i","editFeaturesGeometry","updatedFeatures","updatedFeature","patch","pick","editFeaturesProperties","removeFeatures","geoJsonOrLayerId","created","timeout"],"mappings":"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","file":"mixin.feature-service.js","sourcesContent":["import _ from 'lodash'\r\nimport explode from '@turf/explode'\r\nimport kinks from '@turf/kinks'\r\nimport clean from '@turf/clean-coords'\r\nimport { getType } from '@turf/invariant'\r\nimport logger from 'loglevel'\r\nimport moment from 'moment'\r\nimport { Time } from '../../../core/client/time'\r\nimport { getNearestTime } from '../utils'\r\n\r\nexport default {\r\n methods: {\r\n async getBaseQueryForFeatures (options) {\r\n // Any base query to process ?\r\n const baseQuery = {}\r\n if (options.baseQuery) {\r\n if (typeof options.baseQuery === 'function') {\r\n const result = await options.baseQuery()\r\n // A null query indicate to skip update\r\n if (!result) return\r\n else Object.assign(baseQuery, result)\r\n } else {\r\n Object.assign(baseQuery, options.baseQuery)\r\n }\r\n }\r\n return baseQuery\r\n },\r\n getFeaturesUpdateInterval (options) {\r\n const interval = (_.has(options, 'every')\r\n ? _.get(options, 'every')\r\n // Backward compatibility with old configuration style\r\n : _.get(options, this.engine, options).interval)\r\n return moment.duration(interval)\r\n },\r\n getFeaturesQueryInterval (options) {\r\n const interval = this.getFeaturesUpdateInterval(options)\r\n let queryInterval = (_.has(options, 'queryFrom')\r\n ? _.get(options, 'queryFrom')\r\n // Backward compatibility with old configuration style\r\n : _.get(options, this.engine, options).queryInterval)\r\n // If query interval not given use 2 x refresh interval as default value\r\n // this ensures we cover last interval if server/client update processes are not in sync\r\n if (!queryInterval && interval) queryInterval = moment.duration(-2 * interval.asMilliseconds())\r\n return moment.duration(queryInterval)\r\n },\r\n shouldSkipFeaturesUpdate (lastUpdateTime, options, interval) {\r\n // If not given try to compute query interval from options\r\n if (!interval) {\r\n interval = this.getFeaturesUpdateInterval(options)\r\n }\r\n if (!interval) return true\r\n const now = Time.getCurrentTime()\r\n // If query interval has elapsed since last update we need to update again\r\n return now.isSameOrAfter(lastUpdateTime.clone().add(interval))\r\n },\r\n async getProbeFeatures (options) {\r\n // Any base query to process ?\r\n const query = await this.getBaseQueryForFeatures(options)\r\n const response = await this.$api.getService(options.probeService).find({ query })\r\n if (typeof options.processor === 'function') {\r\n const features = (response.type === 'FeatureCollection' ? response.features : [response])\r\n features.forEach(feature => options.processor(feature))\r\n }\r\n return response\r\n },\r\n async getProbeFeaturesFromLayer (name) {\r\n // Retrieve the layer\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n return this.getProbeFeatures(layer)\r\n },\r\n async getFeatures (options, queryInterval) {\r\n // If not given try to compute query interval from options\r\n if (!queryInterval) {\r\n queryInterval = this.getFeaturesQueryInterval(options)\r\n }\r\n // Any base query to process ?\r\n let query = await this.getBaseQueryForFeatures(options)\r\n // Check if we have variables to be aggregate in time or not\r\n if (options.variables) {\r\n query = Object.assign({\r\n $groupBy: options.featureId,\r\n $aggregate: options.variables.map(variable => variable.name)\r\n }, query)\r\n // Request feature with at least one data available during last query interval if none given\r\n const now = Time.getCurrentTime()\r\n if (moment.isDuration(queryInterval)) {\r\n // Depending on the duration format we might have negative or positive values\r\n const gte = (queryInterval.asMilliseconds() > 0\r\n ? now.clone().subtract(queryInterval) : now.clone().add(queryInterval))\r\n const lte = now\r\n Object.assign(query, {\r\n $limit: 1,\r\n $sort: { time: -1 },\r\n time: {\r\n $gte: gte.format(),\r\n $lte: lte.format()\r\n }\r\n })\r\n } else if (typeof queryInterval === 'object') {\r\n query.time = queryInterval\r\n } else {\r\n // Last available data only for realtime visualization\r\n Object.assign(query, {\r\n $limit: 1,\r\n $sort: { time: -1 },\r\n time: { $lte: now.format() }\r\n })\r\n }\r\n }\r\n const response = await this.$api.getService(options.service).find({ query })\r\n if (typeof options.processor === 'function') {\r\n const features = (response.type === 'FeatureCollection' ? response.features : [response])\r\n features.forEach(feature => options.processor(feature))\r\n }\r\n return response\r\n },\r\n async getFeaturesFromLayer (name, queryInterval) {\r\n // Retrieve the layer\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n return this.getFeatures(layer, queryInterval)\r\n },\r\n getMeasureValueAtCurrentTime (times, values) {\r\n // Check for the right value at time\r\n if (Array.isArray(times) && Array.isArray(values)) {\r\n /// Look for the nearest time\r\n const nearestTime = getNearestTime(Time.getCurrentTime(), times.map(time => moment.utc(time)))\r\n return (nearestTime.index >= 0 ? values[nearestTime.index] : null)\r\n } else {\r\n // Constant value\r\n return values\r\n }\r\n },\r\n getProbedLocationMeasureAtCurrentTime (probedLocation) {\r\n // Create new geojson from raw response containing all times\r\n const feature = _.cloneDeep(probedLocation)\r\n // Then check for the right value at time\r\n _.forOwn(feature.properties, (value, key) => {\r\n if (Array.isArray(value)) {\r\n const times = _.get(feature, 'time.' + key)\r\n if (times) {\r\n _.set(feature, 'properties.' + key, this.getMeasureValueAtCurrentTime(times, value))\r\n _.set(feature, 'time.' + key, this.getMeasureValueAtCurrentTime(times, times))\r\n }\r\n }\r\n })\r\n return feature\r\n },\r\n async getMeasureForFeature (layer, feature, startTime, endTime) {\r\n let probedLocation\r\n this.setCursor('processing-cursor')\r\n try {\r\n const result = await this.getFeatures(_.merge({\r\n baseQuery: { ['properties.' + layer.featureId]: _.get(feature, 'properties.' + layer.featureId) }\r\n }, layer), {\r\n $gte: startTime.format(),\r\n $lte: endTime.format()\r\n })\r\n if (result.features.length > 0) {\r\n probedLocation = result.features[0]\r\n } else {\r\n probedLocation = _.cloneDeep(feature)\r\n }\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n this.unsetCursor('processing-cursor')\r\n return probedLocation\r\n },\r\n checkFeatures (geoJson, options = {\r\n kinks: true,\r\n redundantCoordinates: true\r\n }) {\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n // Removes redundant coordinates\r\n if (options.redundantCoordinates) {\r\n features.forEach(feature => clean(feature, { mutate: true }))\r\n }\r\n // Filter invalid features\r\n let kinksFeatures\r\n if (options.kinks) {\r\n kinksFeatures = _.remove(features, feature => {\r\n const type = getType(feature)\r\n if ((type === 'MultiPolygon') || (type === 'Polygon')) {\r\n const invalidFeatures = kinks(feature)\r\n return _.get(invalidFeatures, 'features', []).length > 0\r\n } else { // No possible self-intersection on points, self-intersections allowed on lines\r\n return false\r\n }\r\n })\r\n }\r\n return { kinks: kinksFeatures }\r\n },\r\n async createFeatures (geoJson, layerId, chunkSize = 5000, processCallback) {\r\n if (!layerId) return\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n features.forEach(feature => {\r\n // Remove any temporary ID as we will use the one from MongoDB\r\n delete feature._id\r\n feature.layer = layerId\r\n })\r\n // Single edition mode\r\n if (features.length === 1) {\r\n const feature = await this.$api.getService('features').create(features[0])\r\n return feature\r\n } else {\r\n // Create chunks to avoid reaching some limits (upload size, timeout, etc.)\r\n // We create chunks according to the number of points and not features.\r\n // Indeed otherwise it would create very different chunks depending on the geometry type\r\n // (eg a bucket of 1000 polygons can actually contains a lot of points).\r\n // const chunks = _.chunk(features, chunkSize)\r\n const chunks = []\r\n let chunkPoints = 0\r\n let chunk = []\r\n features.forEach(feature => {\r\n const explodedFeature = explode(feature)\r\n const nbPoints = explodedFeature.features.length\r\n // Check if current chunk is not full\r\n if ((chunkPoints + nbPoints) <= chunkSize) {\r\n chunkPoints += nbPoints\r\n chunk.push(feature)\r\n } else {\r\n // Otherwise push current chunk if not empty\r\n if (chunk.length > 0) {\r\n chunks.push(chunk)\r\n }\r\n // Then start new chunk\r\n chunk = [feature]\r\n chunkPoints = nbPoints\r\n }\r\n })\r\n // Push last chunk\r\n if (chunk.length > 0) {\r\n chunks.push(chunk)\r\n }\r\n // Write the chunks\r\n for (let i = 0; i < chunks.length; i++) {\r\n await this.$api.getService('features').create(chunks[i])\r\n if (typeof processCallback === 'function') await processCallback(i, chunks[i])\r\n }\r\n }\r\n },\r\n async editFeaturesGeometry (geoJson) {\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n const updatedFeatures = []\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i]\r\n if (feature._id) {\r\n const updatedFeature = await this.$api.getService('features').patch(feature._id, _.pick(feature, ['geometry']))\r\n updatedFeatures.push(updatedFeature)\r\n }\r\n }\r\n return (geoJson.type === 'FeatureCollection' ? Object.assign(geoJson, { features: updatedFeatures }) : updatedFeatures)\r\n },\r\n async editFeaturesProperties (geoJson) {\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n const updatedFeatures = []\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i]\r\n if (feature._id) {\r\n const updatedFeature = await this.$api.getService('features').patch(feature._id, _.pick(feature, ['properties']))\r\n updatedFeatures.push(updatedFeature)\r\n }\r\n }\r\n return (geoJson.type === 'FeatureCollection' ? Object.assign(geoJson, { features: updatedFeatures }) : updatedFeatures)\r\n },\r\n async removeFeatures (geoJsonOrLayerId) {\r\n // Remove all features of a given layer\r\n if (typeof geoJsonOrLayerId === 'string') {\r\n await this.$api.getService('features').remove(null, { query: { layer: geoJsonOrLayerId } })\r\n } else {\r\n const features = (geoJsonOrLayerId.type === 'FeatureCollection' ? geoJsonOrLayerId.features : [geoJsonOrLayerId])\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i]\r\n if (feature._id) await this.$api.getService('features').remove(feature._id)\r\n }\r\n }\r\n }\r\n },\r\n created () {\r\n // Extend timeout for large write operations\r\n this.$api.getService('features').timeout = 60 * 60 * 1000 // 1h should be sufficient since we also have size limits\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../map/client/mixins/mixin.feature-service.js"],"names":["methods","getBaseQueryForFeatures","options","baseQuery","result","Object","assign","getFeaturesUpdateInterval","interval","_","has","get","engine","moment","duration","getFeaturesQueryInterval","queryInterval","asMilliseconds","shouldSkipFeaturesUpdate","lastUpdateTime","now","Time","getCurrentTime","isSameOrAfter","clone","add","getProbeFeatures","query","response","$api","getService","probeService","find","processor","features","type","forEach","feature","getProbeFeaturesFromLayer","name","layer","getLayerByName","getFeatures","variables","$groupBy","featureId","$aggregate","map","variable","isDuration","gte","subtract","lte","$limit","$sort","time","runTime","$gte","format","$lte","service","getFeaturesFromLayer","getMeasureValueAtCurrentTime","times","values","Array","isArray","nearestTime","utc","index","getProbedLocationMeasureAtCurrentTime","probedLocation","cloneDeep","forOwn","properties","value","key","set","getMeasureForFeature","startTime","endTime","setCursor","merge","length","error","logger","unsetCursor","checkFeatures","geoJson","kinks","redundantCoordinates","mutate","kinksFeatures","remove","invalidFeatures","createFeatures","layerId","chunkSize","processCallback","_id","create","chunks","chunkPoints","chunk","explodedFeature","nbPoints","push","i","editFeaturesGeometry","updatedFeatures","updatedFeature","patch","pick","editFeaturesProperties","removeFeatures","geoJsonOrLayerId","created","timeout"],"mappings":"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","file":"mixin.feature-service.js","sourcesContent":["import _ from 'lodash'\r\nimport explode from '@turf/explode'\r\nimport kinks from '@turf/kinks'\r\nimport clean from '@turf/clean-coords'\r\nimport { getType } from '@turf/invariant'\r\nimport logger from 'loglevel'\r\nimport moment from 'moment'\r\nimport { Time } from '../../../core/client/time'\r\nimport { getNearestTime } from '../utils'\r\n\r\nexport default {\r\n methods: {\r\n async getBaseQueryForFeatures (options) {\r\n // Any base query to process ?\r\n const baseQuery = {}\r\n if (options.baseQuery) {\r\n if (typeof options.baseQuery === 'function') {\r\n const result = await options.baseQuery()\r\n // A null query indicate to skip update\r\n if (!result) return\r\n else Object.assign(baseQuery, result)\r\n } else {\r\n Object.assign(baseQuery, options.baseQuery)\r\n }\r\n }\r\n return baseQuery\r\n },\r\n getFeaturesUpdateInterval (options) {\r\n const interval = (_.has(options, 'every')\r\n ? _.get(options, 'every')\r\n // Backward compatibility with old configuration style\r\n : _.get(options, this.engine, options).interval)\r\n return moment.duration(interval)\r\n },\r\n getFeaturesQueryInterval (options) {\r\n const interval = this.getFeaturesUpdateInterval(options)\r\n let queryInterval = (_.has(options, 'queryFrom')\r\n ? _.get(options, 'queryFrom')\r\n // Backward compatibility with old configuration style\r\n : _.get(options, this.engine, options).queryInterval)\r\n // If query interval not given use 2 x refresh interval as default value\r\n // this ensures we cover last interval if server/client update processes are not in sync\r\n if (!queryInterval && interval) queryInterval = moment.duration(-2 * interval.asMilliseconds())\r\n return moment.duration(queryInterval)\r\n },\r\n shouldSkipFeaturesUpdate (lastUpdateTime, options, interval) {\r\n // If not given try to compute query interval from options\r\n if (!interval) {\r\n interval = this.getFeaturesUpdateInterval(options)\r\n }\r\n if (!interval) return true\r\n const now = Time.getCurrentTime()\r\n // If query interval has elapsed since last update we need to update again\r\n return now.isSameOrAfter(lastUpdateTime.clone().add(interval))\r\n },\r\n async getProbeFeatures (options) {\r\n // Any base query to process ?\r\n const query = await this.getBaseQueryForFeatures(options)\r\n const response = await this.$api.getService(options.probeService).find({ query })\r\n if (typeof options.processor === 'function') {\r\n const features = (response.type === 'FeatureCollection' ? response.features : [response])\r\n features.forEach(feature => options.processor(feature))\r\n }\r\n return response\r\n },\r\n async getProbeFeaturesFromLayer (name) {\r\n // Retrieve the layer\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n return this.getProbeFeatures(layer)\r\n },\r\n async getFeatures (options, queryInterval) {\r\n // If not given try to compute query interval from options\r\n if (!queryInterval) {\r\n queryInterval = this.getFeaturesQueryInterval(options)\r\n }\r\n // Any base query to process ?\r\n let query = await this.getBaseQueryForFeatures(options)\r\n // Check if we have variables to be aggregate in time or not\r\n if (options.variables) {\r\n query = Object.assign({\r\n $groupBy: options.featureId,\r\n $aggregate: options.variables.map(variable => variable.name)\r\n }, query)\r\n // Request feature with at least one data available during last query interval if none given\r\n const now = Time.getCurrentTime()\r\n if (moment.isDuration(queryInterval)) {\r\n // Depending on the duration format we might have negative or positive values\r\n const gte = (queryInterval.asMilliseconds() > 0\r\n ? now.clone().subtract(queryInterval) : now.clone().add(queryInterval))\r\n const lte = now\r\n Object.assign(query, {\r\n $limit: 1,\r\n $sort: { time: -1, runTime: -1 },\r\n time: {\r\n $gte: gte.format(),\r\n $lte: lte.format()\r\n }\r\n })\r\n } else if (typeof queryInterval === 'object') {\r\n query.time = queryInterval\r\n } else {\r\n // Last available data only for realtime visualization\r\n Object.assign(query, {\r\n $limit: 1,\r\n $sort: { time: -1, runTime: -1 },\r\n time: { $lte: now.format() }\r\n })\r\n }\r\n }\r\n const response = await this.$api.getService(options.service).find({ query })\r\n if (typeof options.processor === 'function') {\r\n const features = (response.type === 'FeatureCollection' ? response.features : [response])\r\n features.forEach(feature => options.processor(feature))\r\n }\r\n return response\r\n },\r\n async getFeaturesFromLayer (name, queryInterval) {\r\n // Retrieve the layer\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n return this.getFeatures(layer, queryInterval)\r\n },\r\n getMeasureValueAtCurrentTime (times, values) {\r\n // Check for the right value at time\r\n if (Array.isArray(times) && Array.isArray(values)) {\r\n /// Look for the nearest time\r\n const nearestTime = getNearestTime(Time.getCurrentTime(), times.map(time => moment.utc(time)))\r\n return (nearestTime.index >= 0 ? values[nearestTime.index] : null)\r\n } else {\r\n // Constant value\r\n return values\r\n }\r\n },\r\n getProbedLocationMeasureAtCurrentTime (probedLocation) {\r\n // Create new geojson from raw response containing all times\r\n const feature = _.cloneDeep(probedLocation)\r\n // Then check for the right value at time\r\n _.forOwn(feature.properties, (value, key) => {\r\n if (Array.isArray(value)) {\r\n const times = _.get(feature, 'time.' + key)\r\n if (times) {\r\n _.set(feature, 'properties.' + key, this.getMeasureValueAtCurrentTime(times, value))\r\n _.set(feature, 'time.' + key, this.getMeasureValueAtCurrentTime(times, times))\r\n }\r\n }\r\n })\r\n return feature\r\n },\r\n async getMeasureForFeature (layer, feature, startTime, endTime) {\r\n let probedLocation\r\n this.setCursor('processing-cursor')\r\n try {\r\n const result = await this.getFeatures(_.merge({\r\n baseQuery: { ['properties.' + layer.featureId]: _.get(feature, 'properties.' + layer.featureId) }\r\n }, layer), {\r\n $gte: startTime.format(),\r\n $lte: endTime.format()\r\n })\r\n if (result.features.length > 0) {\r\n probedLocation = result.features[0]\r\n } else {\r\n probedLocation = _.cloneDeep(feature)\r\n }\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n this.unsetCursor('processing-cursor')\r\n return probedLocation\r\n },\r\n checkFeatures (geoJson, options = {\r\n kinks: true,\r\n redundantCoordinates: true\r\n }) {\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n // Removes redundant coordinates\r\n if (options.redundantCoordinates) {\r\n features.forEach(feature => clean(feature, { mutate: true }))\r\n }\r\n // Filter invalid features\r\n let kinksFeatures\r\n if (options.kinks) {\r\n kinksFeatures = _.remove(features, feature => {\r\n const type = getType(feature)\r\n if ((type === 'MultiPolygon') || (type === 'Polygon')) {\r\n const invalidFeatures = kinks(feature)\r\n return _.get(invalidFeatures, 'features', []).length > 0\r\n } else { // No possible self-intersection on points, self-intersections allowed on lines\r\n return false\r\n }\r\n })\r\n }\r\n return { kinks: kinksFeatures }\r\n },\r\n async createFeatures (geoJson, layerId, chunkSize = 5000, processCallback) {\r\n if (!layerId) return\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n features.forEach(feature => {\r\n // Remove any temporary ID as we will use the one from MongoDB\r\n delete feature._id\r\n feature.layer = layerId\r\n })\r\n // Single edition mode\r\n if (features.length === 1) {\r\n const feature = await this.$api.getService('features').create(features[0])\r\n return feature\r\n } else {\r\n // Create chunks to avoid reaching some limits (upload size, timeout, etc.)\r\n // We create chunks according to the number of points and not features.\r\n // Indeed otherwise it would create very different chunks depending on the geometry type\r\n // (eg a bucket of 1000 polygons can actually contains a lot of points).\r\n // const chunks = _.chunk(features, chunkSize)\r\n const chunks = []\r\n let chunkPoints = 0\r\n let chunk = []\r\n features.forEach(feature => {\r\n const explodedFeature = explode(feature)\r\n const nbPoints = explodedFeature.features.length\r\n // Check if current chunk is not full\r\n if ((chunkPoints + nbPoints) <= chunkSize) {\r\n chunkPoints += nbPoints\r\n chunk.push(feature)\r\n } else {\r\n // Otherwise push current chunk if not empty\r\n if (chunk.length > 0) {\r\n chunks.push(chunk)\r\n }\r\n // Then start new chunk\r\n chunk = [feature]\r\n chunkPoints = nbPoints\r\n }\r\n })\r\n // Push last chunk\r\n if (chunk.length > 0) {\r\n chunks.push(chunk)\r\n }\r\n // Write the chunks\r\n for (let i = 0; i < chunks.length; i++) {\r\n await this.$api.getService('features').create(chunks[i])\r\n if (typeof processCallback === 'function') await processCallback(i, chunks[i])\r\n }\r\n }\r\n },\r\n async editFeaturesGeometry (geoJson) {\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n const updatedFeatures = []\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i]\r\n if (feature._id) {\r\n const updatedFeature = await this.$api.getService('features').patch(feature._id, _.pick(feature, ['geometry']))\r\n updatedFeatures.push(updatedFeature)\r\n }\r\n }\r\n return (geoJson.type === 'FeatureCollection' ? Object.assign(geoJson, { features: updatedFeatures }) : updatedFeatures)\r\n },\r\n async editFeaturesProperties (geoJson) {\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n const updatedFeatures = []\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i]\r\n if (feature._id) {\r\n const updatedFeature = await this.$api.getService('features').patch(feature._id, _.pick(feature, ['properties']))\r\n updatedFeatures.push(updatedFeature)\r\n }\r\n }\r\n return (geoJson.type === 'FeatureCollection' ? Object.assign(geoJson, { features: updatedFeatures }) : updatedFeatures)\r\n },\r\n async removeFeatures (geoJsonOrLayerId) {\r\n // Remove all features of a given layer\r\n if (typeof geoJsonOrLayerId === 'string') {\r\n await this.$api.getService('features').remove(null, { query: { layer: geoJsonOrLayerId } })\r\n } else {\r\n const features = (geoJsonOrLayerId.type === 'FeatureCollection' ? geoJsonOrLayerId.features : [geoJsonOrLayerId])\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i]\r\n if (feature._id) await this.$api.getService('features').remove(feature._id)\r\n }\r\n }\r\n }\r\n },\r\n created () {\r\n // Extend timeout for large write operations\r\n this.$api.getService('features').timeout = 60 * 60 * 1000 // 1h should be sufficient since we also have size limits\r\n }\r\n}\r\n"]}
@@ -16,6 +16,10 @@ exports.default = {
16
16
  let properties = feature.properties;
17
17
  if (properties) {
18
18
  const engineOptions = _lodash2.default.get(options, this.engine, options);
19
+ // Check if explicitely disabled first
20
+ if (_lodash2.default.has(engineOptions, 'infobox') && !_lodash2.default.get(engineOptions, 'infobox')) return [];
21
+ if (_lodash2.default.has(properties, 'infobox') && !_lodash2.default.get(properties, 'infobox')) return [];
22
+ // Otherwise merge options
19
23
  const infoboxStyle = Object.assign({}, this.activityOptions.engine.infobox, engineOptions.infobox, properties.infobox);
20
24
 
21
25
  if (infoboxStyle.pick) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../map/client/mixins/mixin.infobox.js"],"names":["methods","getDefaultInfoBox","feature","options","properties","engineOptions","_","get","engine","infoboxStyle","Object","assign","activityOptions","infobox","pick","omit","created","registerStyle"],"mappings":";;;;;;AAAA;;;;;;kBAEe;AACbA,WAAS;AACPC,sBAAmBC,OAAnB,EAA4BC,OAA5B,EAAqC;AACnC,UAAIC,aAAaF,QAAQE,UAAzB;AACA,UAAIA,UAAJ,EAAgB;AACd,cAAMC,gBAAgBC,iBAAEC,GAAF,CAAMJ,OAAN,EAAe,KAAKK,MAApB,EAA4BL,OAA5B,CAAtB;AACA,cAAMM,eAAeC,OAAOC,MAAP,CAAc,EAAd,EAAkB,KAAKC,eAAL,CAAqBJ,MAArB,CAA4BK,OAA9C,EACnBR,cAAcQ,OADK,EACIT,WAAWS,OADf,CAArB;;AAGA,YAAIJ,aAAaK,IAAjB,EAAuB;AACrBV,uBAAaE,iBAAEQ,IAAF,CAAOV,UAAP,EAAmBK,aAAaK,IAAhC,CAAb;AACD,SAFD,MAEO,IAAIL,aAAaM,IAAjB,EAAuB;AAC5BX,uBAAaE,iBAAES,IAAF,CAAOX,UAAP,EAAmBK,aAAaM,IAAhC,CAAb;AACD;AACF;AACD,aAAOX,UAAP;AACD;AAfM,GADI;AAkBbY,YAAW;AACT,SAAKC,aAAL,CAAmB,SAAnB,EAA8B,KAAKhB,iBAAnC;AACD;AApBY,C","file":"mixin.infobox.js","sourcesContent":["import _ from 'lodash'\r\n\r\nexport default {\r\n methods: {\r\n getDefaultInfoBox (feature, options) {\r\n let properties = feature.properties\r\n if (properties) {\r\n const engineOptions = _.get(options, this.engine, options)\r\n const infoboxStyle = Object.assign({}, this.activityOptions.engine.infobox,\r\n engineOptions.infobox, properties.infobox)\r\n\r\n if (infoboxStyle.pick) {\r\n properties = _.pick(properties, infoboxStyle.pick)\r\n } else if (infoboxStyle.omit) {\r\n properties = _.omit(properties, infoboxStyle.omit)\r\n }\r\n }\r\n return properties\r\n }\r\n },\r\n created () {\r\n this.registerStyle('infobox', this.getDefaultInfoBox)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../map/client/mixins/mixin.infobox.js"],"names":["methods","getDefaultInfoBox","feature","options","properties","engineOptions","_","get","engine","has","infoboxStyle","Object","assign","activityOptions","infobox","pick","omit","created","registerStyle"],"mappings":";;;;;;AAAA;;;;;;kBAEe;AACbA,WAAS;AACPC,sBAAmBC,OAAnB,EAA4BC,OAA5B,EAAqC;AACnC,UAAIC,aAAaF,QAAQE,UAAzB;AACA,UAAIA,UAAJ,EAAgB;AACd,cAAMC,gBAAgBC,iBAAEC,GAAF,CAAMJ,OAAN,EAAe,KAAKK,MAApB,EAA4BL,OAA5B,CAAtB;AACA;AACA,YAAIG,iBAAEG,GAAF,CAAMJ,aAAN,EAAqB,SAArB,KAAmC,CAACC,iBAAEC,GAAF,CAAMF,aAAN,EAAqB,SAArB,CAAxC,EAAyE,OAAO,EAAP;AACzE,YAAIC,iBAAEG,GAAF,CAAML,UAAN,EAAkB,SAAlB,KAAgC,CAACE,iBAAEC,GAAF,CAAMH,UAAN,EAAkB,SAAlB,CAArC,EAAmE,OAAO,EAAP;AACnE;AACA,cAAMM,eAAeC,OAAOC,MAAP,CAAc,EAAd,EAAkB,KAAKC,eAAL,CAAqBL,MAArB,CAA4BM,OAA9C,EACnBT,cAAcS,OADK,EACIV,WAAWU,OADf,CAArB;;AAGA,YAAIJ,aAAaK,IAAjB,EAAuB;AACrBX,uBAAaE,iBAAES,IAAF,CAAOX,UAAP,EAAmBM,aAAaK,IAAhC,CAAb;AACD,SAFD,MAEO,IAAIL,aAAaM,IAAjB,EAAuB;AAC5BZ,uBAAaE,iBAAEU,IAAF,CAAOZ,UAAP,EAAmBM,aAAaM,IAAhC,CAAb;AACD;AACF;AACD,aAAOZ,UAAP;AACD;AAnBM,GADI;AAsBba,YAAW;AACT,SAAKC,aAAL,CAAmB,SAAnB,EAA8B,KAAKjB,iBAAnC;AACD;AAxBY,C","file":"mixin.infobox.js","sourcesContent":["import _ from 'lodash'\r\n\r\nexport default {\r\n methods: {\r\n getDefaultInfoBox (feature, options) {\r\n let properties = feature.properties\r\n if (properties) {\r\n const engineOptions = _.get(options, this.engine, options)\r\n // Check if explicitely disabled first\r\n if (_.has(engineOptions, 'infobox') && !_.get(engineOptions, 'infobox')) return []\r\n if (_.has(properties, 'infobox') && !_.get(properties, 'infobox')) return []\r\n // Otherwise merge options\r\n const infoboxStyle = Object.assign({}, this.activityOptions.engine.infobox,\r\n engineOptions.infobox, properties.infobox)\r\n\r\n if (infoboxStyle.pick) {\r\n properties = _.pick(properties, infoboxStyle.pick)\r\n } else if (infoboxStyle.omit) {\r\n properties = _.omit(properties, infoboxStyle.omit)\r\n }\r\n }\r\n return properties\r\n }\r\n },\r\n created () {\r\n this.registerStyle('infobox', this.getDefaultInfoBox)\r\n }\r\n}\r\n"]}