@kalisio/kdk 1.3.4 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (536) hide show
  1. package/.nyc_output/{0b8aa700-8daa-49ce-85e7-a8f8965d55f0.json → 03fad5e1-0985-48cc-bcbf-b53b3567b484.json} +0 -0
  2. package/.nyc_output/{20df4355-911a-4b16-a8ab-d3392e9f0a7f.json → 0a387479-430c-4f37-afd0-7cb413b43f71.json} +0 -0
  3. package/.nyc_output/3def2322-4b64-4d43-886a-2f1d1ac42e7f.json +1 -0
  4. package/.nyc_output/{257af0bb-96c3-465a-b5ef-a1df60078d5f.json → 48c4e1d1-6dc8-4531-9519-3715b705900e.json} +0 -0
  5. package/.nyc_output/{284aebfa-23fd-425f-9d72-e4b8904dc224.json → 5942dc79-7596-496b-aca5-0a4fbea84813.json} +0 -0
  6. package/.nyc_output/dcf9446b-252f-41f8-96f9-0119b21bc294.json +1 -0
  7. package/.nyc_output/{5cbee06e-be6e-468a-bd78-4793ee785fe4.json → e4dcc112-f0f4-42fe-a481-fb65d8cb1b7d.json} +0 -0
  8. package/.nyc_output/processinfo/03fad5e1-0985-48cc-bcbf-b53b3567b484.json +1 -0
  9. package/.nyc_output/processinfo/0a387479-430c-4f37-afd0-7cb413b43f71.json +1 -0
  10. package/.nyc_output/processinfo/3def2322-4b64-4d43-886a-2f1d1ac42e7f.json +1 -0
  11. package/.nyc_output/processinfo/48c4e1d1-6dc8-4531-9519-3715b705900e.json +1 -0
  12. package/.nyc_output/processinfo/5942dc79-7596-496b-aca5-0a4fbea84813.json +1 -0
  13. package/.nyc_output/processinfo/{2bece194-92f7-4971-a688-10604044a7fa.json → dcf9446b-252f-41f8-96f9-0119b21bc294.json} +1 -1
  14. package/.nyc_output/processinfo/e4dcc112-f0f4-42fe-a481-fb65d8cb1b7d.json +1 -0
  15. package/.nyc_output/processinfo/index.json +1 -1
  16. package/CHANGELOG.md +251 -94
  17. package/README.md +1 -1
  18. package/coverage/core/api/application.js.html +145 -145
  19. package/coverage/core/api/authentication.js.html +36 -36
  20. package/coverage/core/api/db.js.html +74 -74
  21. package/coverage/core/api/hooks/hooks.account.js.html +4 -4
  22. package/coverage/core/api/hooks/hooks.authentication.js.html +4 -4
  23. package/coverage/core/api/hooks/hooks.authorisations.js.html +112 -121
  24. package/coverage/core/api/hooks/hooks.devices.js.html +5 -5
  25. package/coverage/core/api/hooks/hooks.groups.js.html +3 -3
  26. package/coverage/core/api/hooks/hooks.logger.js.html +7 -7
  27. package/coverage/core/api/hooks/hooks.model.js.html +149 -149
  28. package/coverage/core/api/hooks/hooks.organisations.js.html +13 -61
  29. package/coverage/core/api/hooks/hooks.pusher.js.html +7 -7
  30. package/coverage/core/api/hooks/hooks.query.js.html +68 -32
  31. package/coverage/core/api/hooks/hooks.service.js.html +15 -15
  32. package/coverage/core/api/hooks/hooks.storage.js.html +5 -5
  33. package/coverage/core/api/hooks/hooks.tags.js.html +7 -7
  34. package/coverage/core/api/hooks/hooks.users.js.html +93 -45
  35. package/coverage/core/api/hooks/index.html +66 -66
  36. package/coverage/core/api/hooks/index.js.html +15 -15
  37. package/coverage/core/api/index.html +35 -35
  38. package/coverage/core/api/index.js.html +13 -13
  39. package/coverage/core/api/marshall.js.html +81 -81
  40. package/coverage/core/api/models/groups.model.mongodb.js.html +1 -1
  41. package/coverage/core/api/models/index.html +1 -1
  42. package/coverage/core/api/models/organisations.model.mongodb.js.html +1 -1
  43. package/coverage/core/api/models/tags.model.mongodb.js.html +1 -1
  44. package/coverage/core/api/models/users.model.mongodb.js.html +7 -7
  45. package/coverage/core/api/oauth2-handler.js.html +3 -3
  46. package/coverage/core/api/oauth2-verifier.js.html +5 -5
  47. package/coverage/core/api/services/account/account.hooks.js.html +1 -1
  48. package/coverage/core/api/services/account/account.service.js.html +1 -1
  49. package/coverage/core/api/services/account/index.html +1 -1
  50. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +3 -3
  51. package/coverage/core/api/services/authorisations/authorisations.service.js.html +40 -37
  52. package/coverage/core/api/services/authorisations/index.html +17 -17
  53. package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
  54. package/coverage/core/api/services/databases/databases.service.js.html +1 -1
  55. package/coverage/core/api/services/databases/index.html +1 -1
  56. package/coverage/core/api/services/devices/devices.hooks.js.html +1 -1
  57. package/coverage/core/api/services/devices/devices.service.js.html +1 -1
  58. package/coverage/core/api/services/devices/index.html +1 -1
  59. package/coverage/core/api/services/groups/groups.hooks.js.html +1 -1
  60. package/coverage/core/api/services/groups/index.html +1 -1
  61. package/coverage/core/api/services/index.html +5 -5
  62. package/coverage/core/api/services/index.js.html +40 -40
  63. package/coverage/core/api/services/mailer/index.html +1 -1
  64. package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
  65. package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
  66. package/coverage/core/api/services/organisations/index.html +1 -1
  67. package/coverage/core/api/services/organisations/organisations.hooks.js.html +1 -1
  68. package/coverage/core/api/services/organisations/organisations.service.js.html +1 -1
  69. package/coverage/core/api/services/pusher/index.html +19 -19
  70. package/coverage/core/api/services/pusher/pusher.channels.js.html +1 -1
  71. package/coverage/core/api/services/pusher/pusher.hooks.js.html +1 -1
  72. package/coverage/core/api/services/pusher/pusher.service.js.html +32 -32
  73. package/coverage/core/api/services/storage/index.html +1 -1
  74. package/coverage/core/api/services/storage/storage.hooks.js.html +4 -4
  75. package/coverage/core/api/services/tags/index.html +1 -1
  76. package/coverage/core/api/services/tags/tags.hooks.js.html +1 -1
  77. package/coverage/core/api/services/users/index.html +1 -1
  78. package/coverage/core/api/services/users/users.hooks.js.html +12 -12
  79. package/coverage/core/common/index.html +32 -32
  80. package/coverage/core/common/index.js.html +27 -27
  81. package/coverage/core/common/permissions.js.html +135 -75
  82. package/coverage/index.html +158 -158
  83. package/coverage/lcov-report/core/api/application.js.html +145 -145
  84. package/coverage/lcov-report/core/api/authentication.js.html +36 -36
  85. package/coverage/lcov-report/core/api/db.js.html +74 -74
  86. package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +4 -4
  87. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +4 -4
  88. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +112 -121
  89. package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +5 -5
  90. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +3 -3
  91. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +7 -7
  92. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +149 -149
  93. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +13 -61
  94. package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +7 -7
  95. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +68 -32
  96. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +15 -15
  97. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +5 -5
  98. package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +7 -7
  99. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +93 -45
  100. package/coverage/lcov-report/core/api/hooks/index.html +66 -66
  101. package/coverage/lcov-report/core/api/hooks/index.js.html +15 -15
  102. package/coverage/lcov-report/core/api/index.html +35 -35
  103. package/coverage/lcov-report/core/api/index.js.html +13 -13
  104. package/coverage/lcov-report/core/api/marshall.js.html +81 -81
  105. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +1 -1
  106. package/coverage/lcov-report/core/api/models/index.html +1 -1
  107. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +1 -1
  108. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +1 -1
  109. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +7 -7
  110. package/coverage/lcov-report/core/api/oauth2-handler.js.html +3 -3
  111. package/coverage/lcov-report/core/api/oauth2-verifier.js.html +5 -5
  112. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +1 -1
  113. package/coverage/lcov-report/core/api/services/account/account.service.js.html +1 -1
  114. package/coverage/lcov-report/core/api/services/account/index.html +1 -1
  115. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +3 -3
  116. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +40 -37
  117. package/coverage/lcov-report/core/api/services/authorisations/index.html +17 -17
  118. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
  119. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
  120. package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
  121. package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +1 -1
  122. package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +1 -1
  123. package/coverage/lcov-report/core/api/services/devices/index.html +1 -1
  124. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +1 -1
  125. package/coverage/lcov-report/core/api/services/groups/index.html +1 -1
  126. package/coverage/lcov-report/core/api/services/index.html +5 -5
  127. package/coverage/lcov-report/core/api/services/index.js.html +40 -40
  128. package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
  129. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
  130. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
  131. package/coverage/lcov-report/core/api/services/organisations/index.html +1 -1
  132. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +1 -1
  133. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +1 -1
  134. package/coverage/lcov-report/core/api/services/pusher/index.html +19 -19
  135. package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +1 -1
  136. package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +1 -1
  137. package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +32 -32
  138. package/coverage/lcov-report/core/api/services/storage/index.html +1 -1
  139. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +4 -4
  140. package/coverage/lcov-report/core/api/services/tags/index.html +1 -1
  141. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +1 -1
  142. package/coverage/lcov-report/core/api/services/users/index.html +1 -1
  143. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +12 -12
  144. package/coverage/lcov-report/core/common/index.html +32 -32
  145. package/coverage/lcov-report/core/common/index.js.html +27 -27
  146. package/coverage/lcov-report/core/common/permissions.js.html +135 -75
  147. package/coverage/lcov-report/index.html +158 -158
  148. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +55 -55
  149. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +302 -275
  150. package/coverage/lcov-report/map/api/hooks/index.html +43 -43
  151. package/coverage/lcov-report/map/api/hooks/index.js.html +12 -12
  152. package/coverage/lcov-report/map/api/index.html +31 -31
  153. package/coverage/lcov-report/map/api/index.js.html +24 -24
  154. package/coverage/lcov-report/map/api/marshall.js.html +39 -39
  155. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +20 -20
  156. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +22 -22
  157. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +24 -24
  158. package/coverage/lcov-report/map/api/models/index.html +43 -43
  159. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +21 -21
  160. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +156 -156
  161. package/coverage/lcov-report/map/api/services/alerts/index.html +30 -30
  162. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +19 -19
  163. package/coverage/lcov-report/map/api/services/catalog/index.html +17 -17
  164. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  165. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  166. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +20 -20
  167. package/coverage/lcov-report/map/api/services/features/index.html +21 -21
  168. package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +8 -8
  169. package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +99 -99
  170. package/coverage/lcov-report/map/api/services/geocoder/index.html +28 -28
  171. package/coverage/lcov-report/map/api/services/index.html +21 -21
  172. package/coverage/lcov-report/map/api/services/index.js.html +71 -71
  173. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +68 -68
  174. package/coverage/lcov-report/map/common/errors.js.html +9 -9
  175. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +120 -120
  176. package/coverage/lcov-report/map/common/grid.js.html +268 -268
  177. package/coverage/lcov-report/map/common/index.html +149 -149
  178. package/coverage/lcov-report/map/common/index.js.html +31 -31
  179. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +71 -71
  180. package/coverage/lcov-report/map/common/moment-utils.js.html +14 -14
  181. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +280 -280
  182. package/coverage/lcov-report/map/common/opendap-utils.js.html +220 -220
  183. package/coverage/lcov-report/map/common/permissions.js.html +21 -21
  184. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +51 -51
  185. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  186. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +99 -99
  187. package/coverage/lcov-report/map/common/wcs-utils.js.html +66 -66
  188. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +196 -196
  189. package/coverage/lcov-report/map/common/wfs-utils.js.html +8 -5
  190. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  191. package/coverage/lcov-report/map/common/wmts-utils.js.html +71 -11
  192. package/coverage/lcov.info +3530 -3606
  193. package/coverage/map/api/hooks/hooks.catalog.js.html +55 -55
  194. package/coverage/map/api/hooks/hooks.query.js.html +302 -275
  195. package/coverage/map/api/hooks/index.html +43 -43
  196. package/coverage/map/api/hooks/index.js.html +12 -12
  197. package/coverage/map/api/index.html +31 -31
  198. package/coverage/map/api/index.js.html +24 -24
  199. package/coverage/map/api/marshall.js.html +39 -39
  200. package/coverage/map/api/models/alerts.model.mongodb.js.html +20 -20
  201. package/coverage/map/api/models/catalog.model.mongodb.js.html +22 -22
  202. package/coverage/map/api/models/features.model.mongodb.js.html +24 -24
  203. package/coverage/map/api/models/index.html +43 -43
  204. package/coverage/map/api/services/alerts/alerts.hooks.js.html +21 -21
  205. package/coverage/map/api/services/alerts/alerts.service.js.html +156 -156
  206. package/coverage/map/api/services/alerts/index.html +30 -30
  207. package/coverage/map/api/services/catalog/catalog.hooks.js.html +19 -19
  208. package/coverage/map/api/services/catalog/index.html +17 -17
  209. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  210. package/coverage/map/api/services/daptiles/index.html +1 -1
  211. package/coverage/map/api/services/features/features.hooks.js.html +20 -20
  212. package/coverage/map/api/services/features/index.html +21 -21
  213. package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +8 -8
  214. package/coverage/map/api/services/geocoder/geocoder.service.js.html +99 -99
  215. package/coverage/map/api/services/geocoder/index.html +28 -28
  216. package/coverage/map/api/services/index.html +21 -21
  217. package/coverage/map/api/services/index.js.html +71 -71
  218. package/coverage/map/common/dynamic-grid-source.js.html +68 -68
  219. package/coverage/map/common/errors.js.html +9 -9
  220. package/coverage/map/common/geotiff-grid-source.js.html +120 -120
  221. package/coverage/map/common/grid.js.html +268 -268
  222. package/coverage/map/common/index.html +149 -149
  223. package/coverage/map/common/index.js.html +31 -31
  224. package/coverage/map/common/meteo-model-grid-source.js.html +71 -71
  225. package/coverage/map/common/moment-utils.js.html +14 -14
  226. package/coverage/map/common/opendap-grid-source.js.html +280 -280
  227. package/coverage/map/common/opendap-utils.js.html +220 -220
  228. package/coverage/map/common/permissions.js.html +21 -21
  229. package/coverage/map/common/time-based-grid-source.js.html +51 -51
  230. package/coverage/map/common/tms-utils.js.html +1 -1
  231. package/coverage/map/common/wcs-grid-source.js.html +99 -99
  232. package/coverage/map/common/wcs-utils.js.html +66 -66
  233. package/coverage/map/common/weacast-grid-source.js.html +196 -196
  234. package/coverage/map/common/wfs-utils.js.html +8 -5
  235. package/coverage/map/common/wms-utils.js.html +1 -1
  236. package/coverage/map/common/wmts-utils.js.html +71 -11
  237. package/extras/icons/kanban.png +0 -0
  238. package/extras/testcafe/page-models/map/catalog.js +2 -2
  239. package/extras/tours/core/add-member.js +10 -1
  240. package/extras/tours/core/{tag-member.js → edit-member-tags.js} +4 -3
  241. package/extras/tours/core/groups.js +8 -2
  242. package/extras/tours/core/members.js +11 -21
  243. package/extras/tours/core/tags.js +7 -1
  244. package/extras/tours/map/catalog-categories.js +4 -4
  245. package/extras/tours/map/catalog-panel.js +16 -16
  246. package/extras/tours/map/favorite-views.js +3 -3
  247. package/lib/core/api/hooks/hooks.authorisations.js +149 -140
  248. package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
  249. package/lib/core/api/hooks/hooks.organisations.js +1 -23
  250. package/lib/core/api/hooks/hooks.organisations.js.map +1 -1
  251. package/lib/core/api/hooks/hooks.query.js +22 -0
  252. package/lib/core/api/hooks/hooks.query.js.map +1 -1
  253. package/lib/core/api/hooks/hooks.users.js +34 -18
  254. package/lib/core/api/hooks/hooks.users.js.map +1 -1
  255. package/lib/core/api/services/authorisations/authorisations.service.js +34 -25
  256. package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
  257. package/lib/core/client/api.js +1 -0
  258. package/lib/core/client/api.js.map +1 -1
  259. package/lib/core/client/components/account/KAccountDZ.vue +3 -4
  260. package/lib/core/client/components/account/KAccountDevices.vue +5 -6
  261. package/lib/core/client/components/account/KDeviceCard.vue +2 -1
  262. package/lib/core/client/components/account/KIdentityPanel.vue +1 -7
  263. package/lib/core/client/components/collection/KBoard.vue +23 -158
  264. package/lib/core/client/components/collection/KCard.vue +144 -42
  265. package/lib/core/client/components/collection/KCardSection.vue +52 -0
  266. package/lib/core/client/components/collection/KColumn.vue +181 -0
  267. package/lib/core/client/components/collection/KFilter.vue +3 -2
  268. package/lib/core/client/components/collection/KGrid.vue +13 -18
  269. package/lib/core/client/components/collection/KHistory.vue +61 -89
  270. package/lib/core/client/components/collection/KHistoryEntry.vue +90 -66
  271. package/lib/core/client/components/collection/KItem.vue +21 -2
  272. package/lib/core/client/components/collection/KList.vue +9 -12
  273. package/lib/core/client/components/collection/KTable.vue +33 -39
  274. package/lib/core/client/components/collection/index.js +6 -1
  275. package/lib/core/client/components/collection/index.js.map +1 -1
  276. package/lib/core/client/components/editor/KEditor.vue +0 -6
  277. package/lib/core/client/components/editor/KModalEditor.vue +4 -4
  278. package/lib/core/client/components/editor/KSettingsEditor.vue +49 -0
  279. package/lib/core/client/components/form/KAttachmentField.vue +10 -10
  280. package/lib/core/client/components/form/KChipsField.vue +28 -23
  281. package/lib/core/client/components/form/KColorField.vue +30 -25
  282. package/lib/core/client/components/form/KForm.vue +0 -12
  283. package/lib/core/client/components/form/KIconField.vue +1 -0
  284. package/lib/core/client/components/form/KItemField.vue +8 -3
  285. package/lib/core/client/components/form/KRoleField.vue +56 -0
  286. package/lib/core/client/components/form/KSelectField.vue +16 -1
  287. package/lib/core/client/components/form/KView.vue +5 -14
  288. package/lib/core/client/components/frame/KAction.vue +18 -12
  289. package/lib/core/client/components/frame/KAvatar.vue +3 -3
  290. package/lib/core/client/components/frame/KChart.vue +60 -0
  291. package/lib/core/client/components/frame/KChipsPane.vue +80 -0
  292. package/lib/core/client/components/frame/KContent.vue +1 -1
  293. package/lib/core/client/components/frame/KModal.vue +30 -44
  294. package/lib/core/client/components/frame/KPanel.vue +1 -1
  295. package/lib/core/client/components/frame/{KMenu.vue → KPopupAction.vue} +6 -7
  296. package/lib/core/client/components/frame/KSpot.vue +31 -0
  297. package/lib/core/client/components/frame/KStamp.vue +62 -0
  298. package/lib/core/client/components/frame/index.js +56 -1
  299. package/lib/core/client/components/frame/index.js.map +1 -1
  300. package/lib/core/client/components/input/KColorChooser.vue +16 -8
  301. package/lib/core/client/components/input/KIconChooser.vue +2 -1
  302. package/lib/core/client/components/input/KUploader.vue +14 -5
  303. package/lib/core/client/components/layout/KAbout.vue +9 -3
  304. package/lib/core/client/components/layout/KFab.vue +1 -1
  305. package/lib/core/client/components/layout/KPage.vue +44 -19
  306. package/lib/core/client/components/layout/KTour.vue +2 -2
  307. package/lib/core/client/components/layout/KWelcome.vue +13 -12
  308. package/lib/core/client/components/layout/KWindow.vue +1 -1
  309. package/lib/core/client/components/media/KImageViewer.vue +9 -7
  310. package/lib/core/client/components/media/KMediaBrowser.vue +12 -8
  311. package/lib/core/client/components/menu/KMenu.vue +103 -0
  312. package/lib/core/client/components/team/KAddMember.vue +17 -9
  313. package/lib/core/client/components/team/KChangeRole.vue +5 -7
  314. package/lib/core/client/components/team/KGroupCard.vue +34 -51
  315. package/lib/core/client/components/team/KGroupsActivity.vue +9 -2
  316. package/lib/core/client/components/team/KJoinGroup.vue +5 -7
  317. package/lib/core/client/components/team/KMemberCard.vue +104 -63
  318. package/lib/core/client/components/team/KMembersActivity.vue +9 -2
  319. package/lib/core/client/components/team/KOrganisationsActivity.vue +8 -1
  320. package/lib/core/client/components/team/KTagCard.vue +26 -26
  321. package/lib/core/client/components/team/KTagsActivity.vue +9 -2
  322. package/lib/core/client/components/time/KTimeRange.vue +144 -0
  323. package/lib/core/client/components/viewer/KModalViewer.vue +6 -0
  324. package/lib/core/client/components/viewer/KViewer.vue +0 -6
  325. package/lib/core/client/i18n/core_en.json +132 -93
  326. package/lib/core/client/i18n/core_fr.json +55 -16
  327. package/lib/core/client/index.js +28 -14
  328. package/lib/core/client/index.js.map +1 -1
  329. package/lib/core/client/mixins/mixin.authorisation.js +28 -18
  330. package/lib/core/client/mixins/mixin.authorisation.js.map +1 -1
  331. package/lib/core/client/mixins/mixin.base-collection.js +57 -9
  332. package/lib/core/client/mixins/mixin.base-collection.js.map +1 -1
  333. package/lib/core/client/mixins/mixin.base-context.js +1 -1
  334. package/lib/core/client/mixins/mixin.base-context.js.map +1 -1
  335. package/lib/core/client/mixins/mixin.base-editor.js +26 -16
  336. package/lib/core/client/mixins/mixin.base-editor.js.map +1 -1
  337. package/lib/core/client/mixins/mixin.base-field.js +0 -4
  338. package/lib/core/client/mixins/mixin.base-field.js.map +1 -1
  339. package/lib/core/client/mixins/mixin.base-item.js +29 -14
  340. package/lib/core/client/mixins/mixin.base-item.js.map +1 -1
  341. package/lib/core/client/mixins/mixin.base-viewer.js +0 -2
  342. package/lib/core/client/mixins/mixin.base-viewer.js.map +1 -1
  343. package/lib/core/client/mixins/mixin.object-proxy.js +17 -3
  344. package/lib/core/client/mixins/mixin.object-proxy.js.map +1 -1
  345. package/lib/core/client/mixins/mixin.schema-proxy.js +31 -0
  346. package/lib/core/client/mixins/mixin.schema-proxy.js.map +1 -1
  347. package/lib/core/client/mixins/mixin.service.js +5 -33
  348. package/lib/core/client/mixins/mixin.service.js.map +1 -1
  349. package/lib/core/client/services/index.js +23 -0
  350. package/lib/core/client/services/index.js.map +1 -1
  351. package/lib/core/client/services/local-settings.service.js +4 -0
  352. package/lib/core/client/services/local-settings.service.js.map +1 -1
  353. package/lib/core/client/time.js +131 -0
  354. package/lib/core/client/time.js.map +1 -0
  355. package/lib/core/common/permissions.js +65 -23
  356. package/lib/core/common/permissions.js.map +1 -1
  357. package/lib/core/common/schemas/groups.create.json +1 -1
  358. package/lib/core/common/schemas/groups.update.json +1 -1
  359. package/lib/core/common/schemas/organisations.create.json +1 -1
  360. package/lib/core/common/schemas/organisations.update.json +2 -2
  361. package/lib/core/common/schemas/settings.update.json +139 -0
  362. package/lib/core/common/schemas/tags.update.json +9 -1
  363. package/lib/map/api/hooks/hooks.query.js +48 -27
  364. package/lib/map/api/hooks/hooks.query.js.map +1 -1
  365. package/lib/map/api/services/features/features.hooks.js +1 -1
  366. package/lib/map/api/services/features/features.hooks.js.map +1 -1
  367. package/lib/map/client/components/KColorLegend.vue +25 -23
  368. package/lib/map/client/components/KFavoriteViews.vue +71 -35
  369. package/lib/map/client/components/KFeaturesChart.vue +11 -9
  370. package/lib/map/client/components/KFeaturesFilter.vue +15 -7
  371. package/lib/map/client/components/KFeaturesTable.vue +27 -2
  372. package/lib/map/client/components/KLayerEditionToolbar.vue +43 -0
  373. package/lib/map/client/components/KLayerStyleEditor.vue +10 -4
  374. package/lib/map/client/components/KLayerStyleForm.vue +14 -11
  375. package/lib/map/client/components/KLocationInput.vue +126 -65
  376. package/lib/map/client/components/KLocationMap.vue +199 -84
  377. package/lib/map/client/components/KTimeline.vue +41 -36
  378. package/lib/map/client/components/KUrlLegend.vue +21 -19
  379. package/lib/map/client/components/catalog/KBaseLayersSelector.vue +105 -0
  380. package/lib/map/client/components/catalog/KCatalog.vue +15 -3
  381. package/lib/map/client/components/catalog/KConnectLayer.vue +31 -11
  382. package/lib/map/client/components/catalog/KCreateLayer.vue +37 -14
  383. package/lib/map/client/components/catalog/KImportLayer.vue +28 -8
  384. package/lib/map/client/components/catalog/KLayerCategories.vue +86 -62
  385. package/lib/map/client/components/catalog/KLayersSelector.vue +42 -42
  386. package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +3 -3
  387. package/lib/map/client/components/form/KLocationField.vue +1 -1
  388. package/lib/map/client/components/form/KOwsLayerField.vue +14 -2
  389. package/lib/map/client/components/form/KOwsServiceField.vue +1 -0
  390. package/lib/map/client/components/widget/KInformationBox.vue +10 -16
  391. package/lib/map/client/components/widget/KMapillaryViewer.vue +59 -49
  392. package/lib/map/client/components/widget/KTimeSeries.vue +39 -29
  393. package/lib/map/client/i18n/map_en.json +63 -16
  394. package/lib/map/client/i18n/map_fr.json +66 -20
  395. package/lib/map/client/init.js +18 -6
  396. package/lib/map/client/init.js.map +1 -1
  397. package/lib/map/client/leaflet/GSMaPLayer.js +4 -9
  398. package/lib/map/client/leaflet/GSMaPLayer.js.map +1 -1
  399. package/lib/map/client/leaflet/GradientPath.js +6 -1
  400. package/lib/map/client/leaflet/GradientPath.js.map +1 -1
  401. package/lib/map/client/leaflet/MaskLayer.js +64 -0
  402. package/lib/map/client/leaflet/MaskLayer.js.map +1 -0
  403. package/lib/map/client/mixins/globe/mixin.base-globe.js +4 -1
  404. package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
  405. package/lib/map/client/mixins/globe/mixin.geojson-layers.js +7 -9
  406. package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
  407. package/lib/map/client/mixins/index.js +8 -13
  408. package/lib/map/client/mixins/index.js.map +1 -1
  409. package/lib/map/client/mixins/map/mixin.base-map.js +30 -6
  410. package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
  411. package/lib/map/client/mixins/map/mixin.canvas-layers.js +275 -52
  412. package/lib/map/client/mixins/map/mixin.canvas-layers.js.map +1 -1
  413. package/lib/map/client/mixins/map/mixin.edit-layers.js +218 -121
  414. package/lib/map/client/mixins/map/mixin.edit-layers.js.map +1 -1
  415. package/lib/map/client/mixins/map/mixin.file-layers.js +25 -18
  416. package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
  417. package/lib/map/client/mixins/map/mixin.geojson-layers.js +18 -10
  418. package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
  419. package/lib/map/client/mixins/map/mixin.georaster-layers.js +7 -4
  420. package/lib/map/client/mixins/map/mixin.georaster-layers.js.map +1 -1
  421. package/lib/map/client/mixins/map/mixin.gsmap-layers.js +3 -3
  422. package/lib/map/client/mixins/map/mixin.gsmap-layers.js.map +1 -1
  423. package/lib/map/client/mixins/map/mixin.heatmap-layers.js +8 -10
  424. package/lib/map/client/mixins/map/mixin.heatmap-layers.js.map +1 -1
  425. package/lib/map/client/mixins/map/mixin.mapillary-layers.js +25 -40
  426. package/lib/map/client/mixins/map/mixin.mapillary-layers.js.map +1 -1
  427. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js +5 -3
  428. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js.map +1 -1
  429. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js +5 -3
  430. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js.map +1 -1
  431. package/lib/map/client/mixins/mixin.activity.js +60 -68
  432. package/lib/map/client/mixins/mixin.activity.js.map +1 -1
  433. package/lib/map/client/mixins/mixin.feature-selection.js +8 -10
  434. package/lib/map/client/mixins/mixin.feature-selection.js.map +1 -1
  435. package/lib/map/client/mixins/mixin.feature-service.js +7 -5
  436. package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
  437. package/lib/map/client/mixins/mixin.weacast.js +6 -4
  438. package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
  439. package/lib/map/client/pixi-utils.js +9 -0
  440. package/lib/map/client/pixi-utils.js.map +1 -1
  441. package/lib/map/client/utils.js +50 -0
  442. package/lib/map/client/utils.js.map +1 -1
  443. package/lib/map/common/wfs-utils.js +1 -1
  444. package/lib/map/common/wfs-utils.js.map +1 -1
  445. package/lib/map/common/wmts-utils.js +31 -7
  446. package/lib/map/common/wmts-utils.js.map +1 -1
  447. package/lib/test/client/core/account.js +100 -0
  448. package/lib/test/client/core/account.js.map +1 -0
  449. package/lib/test/client/core/api.js +400 -0
  450. package/lib/test/client/core/api.js.map +1 -0
  451. package/lib/test/client/core/collection.js +109 -0
  452. package/lib/test/client/core/collection.js.map +1 -0
  453. package/lib/test/client/core/index.js +90 -0
  454. package/lib/test/client/core/index.js.map +1 -0
  455. package/lib/test/client/core/layout.js +221 -0
  456. package/lib/test/client/core/layout.js.map +1 -0
  457. package/lib/test/client/core/runner.js +204 -0
  458. package/lib/test/client/core/runner.js.map +1 -0
  459. package/lib/test/client/core/screens.js +68 -0
  460. package/lib/test/client/core/screens.js.map +1 -0
  461. package/lib/test/client/core/utils.js +304 -0
  462. package/lib/test/client/core/utils.js.map +1 -0
  463. package/lib/test/client/index.js +20 -0
  464. package/lib/test/client/index.js.map +1 -0
  465. package/lib/test/client/map/catalog.js +191 -0
  466. package/lib/test/client/map/catalog.js.map +1 -0
  467. package/lib/test/client/map/controls.js +54 -0
  468. package/lib/test/client/map/controls.js.map +1 -0
  469. package/lib/test/client/map/index.js +30 -0
  470. package/lib/test/client/map/index.js.map +1 -0
  471. package/package.json +17 -9
  472. package/test.client.js +1 -0
  473. package/tests/core/test-log-2021-07-15.log +71 -0
  474. package/tests/core/test-log-2021-09-02.log +47 -0
  475. package/tests/map/test-log-%DATE%.logYYYY-07-DD +12 -0
  476. package/tests/map/test-log-%DATE%.logYYYY-09-DD +6 -0
  477. package/tests/map/test-log-2021-07-12.log +12 -0
  478. package/tests/map/test-log-2021-07-15.log +5 -0
  479. package/tests/map/test-log-2021-09-02.log +3 -0
  480. package/.nyc_output/11cd93d8-69cb-405c-98a3-d249ea35b6da.json +0 -1
  481. package/.nyc_output/2bece194-92f7-4971-a688-10604044a7fa.json +0 -1
  482. package/.nyc_output/5ddee33e-b658-4c8e-a247-54f575ac67e8.json +0 -1
  483. package/.nyc_output/78760ae4-555f-4d9c-a6a1-acf5e2f0fe45.json +0 -1
  484. package/.nyc_output/d0bb2559-084e-4c92-b9e6-29a9abd41f7c.json +0 -1
  485. package/.nyc_output/processinfo/0b8aa700-8daa-49ce-85e7-a8f8965d55f0.json +0 -1
  486. package/.nyc_output/processinfo/11cd93d8-69cb-405c-98a3-d249ea35b6da.json +0 -1
  487. package/.nyc_output/processinfo/20df4355-911a-4b16-a8ab-d3392e9f0a7f.json +0 -1
  488. package/.nyc_output/processinfo/257af0bb-96c3-465a-b5ef-a1df60078d5f.json +0 -1
  489. package/.nyc_output/processinfo/284aebfa-23fd-425f-9d72-e4b8904dc224.json +0 -1
  490. package/.nyc_output/processinfo/5cbee06e-be6e-468a-bd78-4793ee785fe4.json +0 -1
  491. package/.nyc_output/processinfo/5ddee33e-b658-4c8e-a247-54f575ac67e8.json +0 -1
  492. package/.nyc_output/processinfo/78760ae4-555f-4d9c-a6a1-acf5e2f0fe45.json +0 -1
  493. package/.nyc_output/processinfo/d0bb2559-084e-4c92-b9e6-29a9abd41f7c.json +0 -1
  494. package/lib/core/client/components/frame/KLabel.vue +0 -56
  495. package/lib/core/client/components/team/KTagsPane.vue +0 -35
  496. package/lib/map/client/leaflet/TiledMapillaryLayer.js +0 -137
  497. package/lib/map/client/leaflet/TiledMapillaryLayer.js.map +0 -1
  498. package/lib/map/client/mixins/mixin.time.js +0 -73
  499. package/lib/map/client/mixins/mixin.time.js.map +0 -1
  500. package/tests/core/account.test.js +0 -415
  501. package/tests/core/client.test.js.skip +0 -37
  502. package/tests/core/config/default.js +0 -97
  503. package/tests/core/config/email-templates/confirmInvitation/html.ejs +0 -18
  504. package/tests/core/config/email-templates/identityChange/html.ejs +0 -12
  505. package/tests/core/config/email-templates/newDevice/html.ejs +0 -7
  506. package/tests/core/config/email-templates/passwordChange/html.ejs +0 -5
  507. package/tests/core/config/email-templates/resendVerifySignup/html.ejs +0 -10
  508. package/tests/core/config/email-templates/resetPwd/html.ejs +0 -5
  509. package/tests/core/config/email-templates/sendResetPwd/html.ejs +0 -8
  510. package/tests/core/config/email-templates/verifySignup/html.ejs +0 -3
  511. package/tests/core/data/10k_most_common_passwords.txt +0 -10000
  512. package/tests/core/data/logo.png +0 -0
  513. package/tests/core/hooks.test.js +0 -175
  514. package/tests/core/index.test.js +0 -418
  515. package/tests/core/notifications.test.js +0 -465
  516. package/tests/core/storage.test.js +0 -134
  517. package/tests/core/team.test.js +0 -610
  518. package/tests/core/utils.js +0 -59
  519. package/tests/map/alerts.test.js +0 -554
  520. package/tests/map/config/default.js +0 -112
  521. package/tests/map/config/layers.json +0 -37
  522. package/tests/map/daptiles.test.js +0 -41
  523. package/tests/map/data/DescribeCoverage.xml +0 -55
  524. package/tests/map/data/GetCoverage.tif +0 -0
  525. package/tests/map/data/adsb.observations.json +0 -132
  526. package/tests/map/data/dataset.grb.das +0 -55
  527. package/tests/map/data/dataset.grb.dds +0 -17
  528. package/tests/map/data/dataset.grb.dods +0 -0
  529. package/tests/map/data/lat_lon_bounds.grb.dods +0 -0
  530. package/tests/map/data/subdataset.grb.dods +0 -0
  531. package/tests/map/data/vigicrues.observations.json +0 -47042
  532. package/tests/map/data/vigicrues.stations.json +0 -15422
  533. package/tests/map/data/zones.json +0 -1228
  534. package/tests/map/grid-sources.test.js +0 -304
  535. package/tests/map/hooks.test.js +0 -96
  536. package/tests/map/index.test.js +0 -333
@@ -30,6 +30,8 @@ var _explode2 = _interopRequireDefault(_explode);
30
30
 
31
31
  var _quasar = require('quasar');
32
32
 
33
+ var _time = require('../../../core/client/time');
34
+
33
35
  var _layout = require('../../../core/client/layout');
34
36
 
35
37
  var _utils = require('../utils');
@@ -165,7 +167,7 @@ exports.default = {
165
167
 
166
168
  return _asyncToGenerator(function* () {
167
169
  // Clear layers and variables
168
- _this6.layers = {};
170
+ _this6.clearLayers();
169
171
  _this6.variables = [];
170
172
  let catalogLayers = yield _this6.getCatalogLayers();
171
173
  // Apply global layer filter
@@ -484,68 +486,58 @@ exports.default = {
484
486
  });
485
487
  })();
486
488
  },
489
+ editLayerByName(name, editOptions = {}) {
490
+ // this one is used through postRobot to trigger edition
491
+ // on a layer
492
+ const layer = this.getLayerByName(name);
493
+ if (!layer) return;
494
+ this.startEditLayer(layer, editOptions);
495
+ },
487
496
  onEditLayerData(layer) {
488
- var _this15 = this;
489
-
490
- return _asyncToGenerator(function* () {
491
- const toggle = function () {
492
- // Start/Stop edition
493
- _this15.editLayer(layer);
494
- // Refresh actions due to state change
495
- _this15.configureLayerActions(layer);
496
- _this15.editedLayerToast = null;
497
- };
498
- // Close previous edition toast if any
499
- // (this will toggle)
500
- if (_this15.editedLayerToast) {
501
- _this15.editedLayerToast();
502
- } else {
503
- toggle();
504
- }
505
- // Create new toast if required
506
- if (_this15.isLayerEdited(layer)) {
507
- _this15.editedLayerToast = _this15.$toast({
508
- type: 'warning',
509
- timeout: 0, // persistent
510
- position: 'top-left',
511
- message: _this15.$t('mixins.activity.EDITING_DATA_MESSAGE'),
512
- caption: _this15.$t(layer.name),
513
- onDismiss: toggle
514
- });
515
- }
516
- })();
497
+ // this one is triggered by a layer action (toggle)
498
+ if (this.isLayerEdited(layer)) {
499
+ // always accept editions in the action
500
+ this.stopEditLayer('accept');
501
+ } else {
502
+ // start editing properties by default
503
+ this.startEditLayer(layer, { editMode: 'edit-properties' });
504
+ }
505
+ },
506
+ onEndLayerEdition(status = 'accept') {
507
+ // this one can be triggered from a toolbar to accept or reject changes
508
+ this.stopEditLayer(status);
517
509
  },
518
510
  onRemoveLayer(layer) {
519
- var _this16 = this;
511
+ var _this15 = this;
520
512
 
521
513
  return _asyncToGenerator(function* () {
522
514
  _quasar.Dialog.create({
523
- title: _this16.$t('mixins.activity.REMOVE_DIALOG_TITLE', { layer: layer.name }),
524
- message: _this16.$t('mixins.activity.REMOVE_DIALOG_MESSAGE', { layer: layer.name }),
515
+ title: _this15.$t('mixins.activity.REMOVE_DIALOG_TITLE', { layer: layer.name }),
516
+ message: _this15.$t('mixins.activity.REMOVE_DIALOG_MESSAGE', { layer: layer.name }),
525
517
  html: true,
526
518
  ok: {
527
- label: _this16.$t('OK'),
519
+ label: _this15.$t('OK'),
528
520
  flat: true
529
521
  },
530
522
  cancel: {
531
- label: _this16.$t('CANCEL'),
523
+ label: _this15.$t('CANCEL'),
532
524
  flat: true
533
525
  }
534
526
  }).onOk(_asyncToGenerator(function* () {
535
- _quasar.Loading.show({ message: _this16.$t('mixins.activity.REMOVING_LABEL') });
527
+ _quasar.Loading.show({ message: _this15.$t('mixins.activity.REMOVING_LABEL') });
536
528
  try {
537
529
  // Stop any running edition
538
- if (_this16.isLayerEdited(layer)) _this16.onEditLayerData(layer);
530
+ if (_this15.isLayerEdited(layer)) _this15.onEditLayerData(layer);
539
531
  if (layer._id) {
540
532
  // If persistent feature layer remove features as well
541
- if (_this16.isFeatureLayer(layer)) {
542
- yield _this16.removeFeatures(layer._id);
533
+ if (_this15.isFeatureLayer(layer)) {
534
+ yield _this15.removeFeatures(layer._id);
543
535
  }
544
- yield _this16.$api.getService('catalog').remove(layer._id);
536
+ yield _this15.$api.getService('catalog').remove(layer._id);
545
537
  }
546
538
  // Actual layer removal should be triggerred by real-time event
547
539
  // but as we might not always use sockets perform it anyway
548
- _this16.removeLayer(layer.name);
540
+ _this15.removeLayer(layer.name);
549
541
  } catch (error) {
550
542
  // User error message on operation should be raised by error hook, otherwise this is more a coding error
551
543
  _loglevel2.default.error(error);
@@ -563,7 +555,7 @@ exports.default = {
563
555
  this.engine = 'cesium';
564
556
  },
565
557
  getProbeTimeRange() {
566
- const start = this.currentTime.clone();
558
+ const start = _time.Time.getCurrentTime().clone();
567
559
  const end = start.clone();
568
560
  const span = this.$store.get('timeseries.span');
569
561
  // We center on current time with the same span on past/future
@@ -581,52 +573,52 @@ exports.default = {
581
573
  if (!this.$q.fullscreen.isActive) this.$q.fullscreen.request();else this.$q.fullscreen.exit();
582
574
  },
583
575
  initialize() {
584
- var _this17 = this;
576
+ var _this16 = this;
585
577
 
586
578
  return _asyncToGenerator(function* () {
587
579
  // Check if the activity is using context restoration
588
- const hasContext = typeof _this17.restoreContext === 'function';
580
+ const hasContext = typeof _this16.restoreContext === 'function';
589
581
  // Geolocate by default if view has not been restored
590
- const viewRestored = hasContext ? yield _this17.restoreContext('view') : false;
582
+ const viewRestored = hasContext ? yield _this16.restoreContext('view') : false;
591
583
  if (!viewRestored) {
592
584
  // Provided by geolocation if enabled
593
- if (!_this17.$geolocation.get().position) yield _this17.$geolocation.update();
594
- const position = _this17.$geolocation.get().position;
595
- if (position) _this17.center(position.longitude, position.latitude);
585
+ if (!_this16.$geolocation.get().position) yield _this16.$geolocation.update();
586
+ const position = _this16.$geolocation.get().position;
587
+ if (position) _this16.center(position.longitude, position.latitude);
596
588
  }
597
589
  // Retrieve the forecast models
598
- if (_this17.setupWeacast) {
590
+ if (_this16.setupWeacast) {
599
591
  try {
600
- yield _this17.setupWeacast();
592
+ yield _this16.setupWeacast();
601
593
  } catch (error) {
602
594
  _loglevel2.default.error(error);
603
595
  }
604
- _this17.forecastModelHandlers = { toggle: function (model) {
605
- return _this17.setForecastModel(model);
596
+ _this16.forecastModelHandlers = { toggle: function (model) {
597
+ return _this16.setForecastModel(model);
606
598
  } };
607
599
  } else {
608
- _this17.forecastModelHandlers = {};
600
+ _this16.forecastModelHandlers = {};
609
601
  }
610
602
  // Retrieve the layers
611
603
  try {
612
- yield _this17.refreshLayerCategories();
613
- yield _this17.refreshLayers();
614
- if (hasContext) yield _this17.restoreContext('layers');
604
+ yield _this16.refreshLayerCategories();
605
+ yield _this16.refreshLayers();
606
+ if (hasContext) yield _this16.restoreContext('layers');
615
607
  } catch (error) {
616
608
  _loglevel2.default.error(error);
617
609
  }
618
610
  // Listen about changes in global/contextual catalog services
619
- const globalCatalogService = _this17.$api.getService('catalog', '');
620
- const catalogService = _this17.$api.getService('catalog');
611
+ const globalCatalogService = _this16.$api.getService('catalog', '');
612
+ const catalogService = _this16.$api.getService('catalog');
621
613
  // Keep track of binded listeners as we use the same function with different contexts
622
- _this17.catalogListeners = {};
614
+ _this16.catalogListeners = {};
623
615
  globalCatalogService._serviceEvents.forEach(function (event) {
624
- _this17.catalogListeners[event] = function (object) {
625
- return _this17.onCatalogUpdated(event, object);
616
+ _this16.catalogListeners[event] = function (object) {
617
+ return _this16.onCatalogUpdated(event, object);
626
618
  };
627
- globalCatalogService.on(event, _this17.catalogListeners[event]);
619
+ globalCatalogService.on(event, _this16.catalogListeners[event]);
628
620
  if (catalogService && catalogService !== globalCatalogService) {
629
- catalogService.on(event, _this17.catalogListeners[event]);
621
+ catalogService.on(event, _this16.catalogListeners[event]);
630
622
  }
631
623
  });
632
624
  })();
@@ -644,13 +636,13 @@ exports.default = {
644
636
  this.catalogListeners = {};
645
637
  },
646
638
  onCatalogUpdated(event, object) {
647
- var _this18 = this;
639
+ var _this17 = this;
648
640
 
649
641
  return _asyncToGenerator(function* () {
650
642
  switch (object.type) {
651
643
  case 'Category':
652
644
  // In any case we rebuild categories
653
- _this18.refreshLayerCategories();
645
+ _this17.refreshLayerCategories();
654
646
  break;
655
647
  case 'Context':
656
648
  case 'Service':
@@ -661,9 +653,9 @@ exports.default = {
661
653
  // Updating a layer requires to remove/add it again to cover all use cases
662
654
  // (eg style edition, etc.)
663
655
  // Here we find layer by ID as renaming could have occured from another client
664
- const layers = _this18.getLayers({ _id: object._id });
665
- if (layers.length > 0) yield _this18.removeCatalogLayer(layers[0]);
666
- if (event !== 'removed') yield _this18.addCatalogLayer(object);
656
+ const layers = _this17.getLayers({ _id: object._id });
657
+ if (layers.length > 0) yield _this17.removeCatalogLayer(layers[0]);
658
+ if (event !== 'removed') yield _this17.addCatalogLayer(object);
667
659
  break;
668
660
  }
669
661
  }
@@ -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","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","onEditLayerData","toggle","editLayer","editedLayerToast","position","caption","onDismiss","onRemoveLayer","Dialog","onOk","removeFeatures","remove","onMapReady","onGlobeReady","getProbeTimeRange","start","currentTime","clone","end","span","$store","subtract","add","onProbeLocation","setCursor","$once","unsetCursor","onToggleFullscreen","$q","fullscreen","isActive","request","exit","initialize","restoreContext","viewRestored","$geolocation","update","setupWeacast","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 { 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.layers = {}\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 async onEditLayerData (layer) {\r\n const toggle = () => {\r\n // Start/Stop edition\r\n this.editLayer(layer)\r\n // Refresh actions due to state change\r\n this.configureLayerActions(layer)\r\n this.editedLayerToast = null\r\n }\r\n // Close previous edition toast if any\r\n // (this will toggle)\r\n if (this.editedLayerToast) {\r\n this.editedLayerToast()\r\n } else {\r\n toggle()\r\n }\r\n // Create new toast if required\r\n if (this.isLayerEdited(layer)) {\r\n this.editedLayerToast = this.$toast({\r\n type: 'warning',\r\n timeout: 0, // persistent\r\n position: 'top-left',\r\n message: this.$t('mixins.activity.EDITING_DATA_MESSAGE'),\r\n caption: this.$t(layer.name),\r\n onDismiss: toggle\r\n })\r\n }\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 = this.currentTime.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 // 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"]}
@@ -44,7 +44,7 @@ exports.default = {
44
44
  // FIXME: should not be hard-coded
45
45
  let widget;
46
46
  if (this.selection.layer) {
47
- widget = 'information-box';
47
+ widget = _lodash2.default.get(this.selection.layer, 'widget', 'information-box');
48
48
  if (_lodash2.default.has(this.selection.layer, 'probe') || // Static probe on pre-defined sites
49
49
  _lodash2.default.has(this.selection.layer, 'variables')) {
50
50
  // Measurement history
@@ -162,11 +162,7 @@ exports.default = {
162
162
  this.updateLayer(_utils.SelectionLayerName, { type: 'FeatureCollection', features: Object.values(this.selectionHighlight) });
163
163
  },
164
164
  removeSelectionLayer() {
165
- var _this2 = this;
166
-
167
- return _asyncToGenerator(function* () {
168
- yield _this2.removeLayer(_utils.SelectionLayerName);
169
- })();
165
+ this.removeLayer(_utils.SelectionLayerName);
170
166
  },
171
167
  onFeatureSelectionClicked(layer, event) {
172
168
  // Retrieve the location/feature
@@ -193,6 +189,10 @@ exports.default = {
193
189
  // Update the selection
194
190
  this.setSelection(location, feature, layer);
195
191
  },
192
+ onFeatureSelectionLayerShown(layer) {
193
+ // If at least one layer is visible we have to create selection layer
194
+ if (this.isLayerSelectable(layer)) this.createSelectionLayer();
195
+ },
196
196
  onFeatureSelectionLayerHidden(layer) {
197
197
  if (this.hasFeatureSelection) {
198
198
  if (layer.name === this.selection.layer.name) this.clearSelection();
@@ -223,16 +223,14 @@ exports.default = {
223
223
  // Set of highligthed features
224
224
  this.selectionHighlight = {};
225
225
  this.$on('click', this.onFeatureSelectionClicked);
226
+ this.$on('layer-shown', this.onFeatureSelectionLayerShown);
226
227
  this.$on('layer-hidden', this.onFeatureSelectionLayerHidden);
227
228
  this.$on('layer-disabled', this.onFeatureSelectionLayerDisabled);
228
229
  this.$on('layer-enabled', this.onFeatureSelectionLayerEnabled);
229
230
  },
230
- mounted() {
231
- this.$once('map-ready', () => this.createSelectionLayer());
232
- this.$once('globe-ready', () => this.createSelectionLayer());
233
- },
234
231
  beforeDestroy() {
235
232
  this.$off('click', this.onFeatureSelectionClicked);
233
+ this.$off('layer-shown', this.onFeatureSelectionLayerShown);
236
234
  this.$off('layer-hidden', this.onFeatureSelectionLayerHidden);
237
235
  this.$off('layer-disabled', this.onFeatureSelectionLayerDisabled);
238
236
  this.$off('layer-enabled', this.onFeatureSelectionLayerEnabled);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../map/client/mixins/mixin.feature-selection.js"],"names":["data","selection","$store","get","computed","hasFeatureSelection","feature","methods","getWidgetForLayer","widget","layer","_","has","isCursor","clearSelection","closeWidget","setSelection","location","set","hasOpenWidget","openWidget","centerOnSelection","center","lng","lat","addSelectionHighlight","id","removeSelectionHighlight","highlight","cloneDeep","type","geometry","coordinates","Object","assign","_id","merge","properties","geodesic","is2D","radius","colors","getBrand","selectionHighlight","updateSelectionLayer","updateSelectionHighlight","unset","createSelectionLayer","getLayerByName","SelectionLayerName","addLayer","name","scope","isSelectable","leaflet","isVisible","realtime","interactive","popup","pick","cesium","isLayerVisible","showLayer","updateLayer","features","values","removeSelectionLayer","removeLayer","onFeatureSelectionClicked","event","isLayerSelectable","undefined","onFeatureSelectionLayerHidden","onFeatureSelectionLayerDisabled","disabledSelectionHighlight","onFeatureSelectionLayerEnabled","created","$on","mounted","$once","beforeDestroy","$off"],"mappings":"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","file":"mixin.feature-selection.js","sourcesContent":["import bbox from '@turf/bbox'\r\nimport bboxPolygon from '@turf/bbox-polygon'\r\nimport centroid from '@turf/centroid'\r\nimport _ from 'lodash'\r\nimport { colors } from 'quasar'\r\nimport { SelectionLayerName } from '../utils'\r\n\r\nexport default {\r\n data () {\r\n return {\r\n selection: this.$store.get('selection')\r\n }\r\n },\r\n computed: {\r\n hasFeatureSelection () {\r\n return this.selection.feature\r\n }\r\n },\r\n methods: {\r\n getWidgetForLayer () {\r\n // FIXME: should not be hard-coded\r\n let widget\r\n if (this.selection.layer) {\r\n widget = 'information-box'\r\n if (_.has(this.selection.layer, 'probe') || // Static probe on pre-defined sites\r\n _.has(this.selection.layer, 'variables')) { // Measurement history\r\n widget = 'time-series'\r\n } else if (_.get(this.selection.layer, 'leaflet.type') === 'mapillary') {\r\n widget = 'mapillary-viewer'\r\n }\r\n } else {\r\n if (this.isCursor('probe-cursor')) {\r\n widget = 'time-series'\r\n }\r\n }\r\n return widget\r\n },\r\n clearSelection () {\r\n this.selection.feature = null\r\n this.selection.layer = null\r\n this.closeWidget()\r\n },\r\n setSelection (location, feature, layer) {\r\n this.selection.location = location\r\n // If clicked on the same object unselect otherwise select\r\n if (feature && (feature === this.selection.feature)) {\r\n this.clearSelection()\r\n } else {\r\n this.selection.feature = feature\r\n this.selection.layer = layer\r\n this.$store.set('selection.states', {})\r\n // Open associated default widget if none already open,\r\n // if the user has open another widget it will remain active\r\n const widget = this.getWidgetForLayer()\r\n if (widget && !this.hasOpenWidget()) this.openWidget(widget)\r\n }\r\n },\r\n centerOnSelection () {\r\n if (this.hasFeatureSelection) {\r\n this.center(..._.get(centroid(this.selection.feature), 'geometry.coordinates'))\r\n } else if (this.selection.location) {\r\n this.center(this.selection.location.lng, this.selection.location.lat)\r\n }\r\n },\r\n addSelectionHighlight (id, feature = {}) {\r\n // Remove previous selection if any\r\n this.removeSelectionHighlight(id)\r\n // Start from selected feature or location to build highlight\r\n const highlight = (this.selection.feature ? _.cloneDeep(this.selection.feature) : {\r\n type: 'Feature',\r\n geometry: { type: 'Point', coordinates: [this.selection.location.lng, this.selection.location.lat] }\r\n })\r\n // Use bbox for line/polygons\r\n if (highlight.geometry.type !== 'Point') {\r\n Object.assign(highlight, bboxPolygon(bbox(this.selection.feature)))\r\n }\r\n // Add an identifier if we'd like to update it\r\n highlight._id = highlight.id = id\r\n // Add default styling and additional information provided if any\r\n _.merge(highlight, {\r\n properties: {\r\n 'marker-type': 'circleMarker',\r\n geodesic: !this.is2D(), // In 3D we use a circle on ground\r\n radius: this.is2D() ? 18 : 1000,\r\n 'stroke-color': colors.getBrand('secondary'),\r\n 'stroke-width': 3,\r\n 'fill-color': colors.getBrand('secondary'),\r\n 'fill-opacity': 0.5\r\n }\r\n }, feature)\r\n _.set(this.selectionHighlight, id, highlight)\r\n this.updateSelectionLayer()\r\n return highlight\r\n },\r\n updateSelectionHighlight (id, feature) {\r\n if (_.has(this.selectionHighlight, id)) {\r\n _.merge(_.get(this.selectionHighlight, id), feature)\r\n this.updateSelectionLayer()\r\n }\r\n },\r\n removeSelectionHighlight (id) {\r\n if (_.has(this.selectionHighlight, id)) {\r\n _.unset(this.selectionHighlight, id)\r\n this.updateSelectionLayer()\r\n }\r\n },\r\n async createSelectionLayer () {\r\n // Get any previous layer or create it the first time\r\n const layer = this.getLayerByName(SelectionLayerName)\r\n if (!layer) {\r\n await this.addLayer({\r\n name: SelectionLayerName,\r\n type: 'OverlayLayer',\r\n scope: 'system',\r\n isSelectable: false,\r\n leaflet: {\r\n type: 'geoJson',\r\n isVisible: true,\r\n realtime: true,\r\n interactive: false,\r\n popup: { pick: [] }\r\n },\r\n cesium: {\r\n type: 'geoJson',\r\n isVisible: true,\r\n realtime: true,\r\n popup: { pick: [] }\r\n }\r\n })\r\n }\r\n if (!this.isLayerVisible(SelectionLayerName)) await this.showLayer(SelectionLayerName)\r\n },\r\n updateSelectionLayer () {\r\n this.updateLayer(SelectionLayerName, { type: 'FeatureCollection', features: Object.values(this.selectionHighlight) })\r\n },\r\n async removeSelectionLayer () {\r\n await this.removeLayer(SelectionLayerName)\r\n },\r\n onFeatureSelectionClicked (layer, event) {\r\n // Retrieve the location/feature\r\n const location = _.get(event, 'latlng')\r\n let feature\r\n // Check the target layer\r\n if (layer && layer.name) {\r\n // FIXME: need to retrieve original layer options as here we get processed options by the underlying engine\r\n layer = this.getLayerByName(layer.name)\r\n // Check if selectable\r\n if (layer && this.isLayerSelectable(layer)) {\r\n // Retrieve the feature and manage 2D/3D entity\r\n feature = _.get(event, 'target.feature')\r\n } else {\r\n // Avoid updating selection on click if not selectable\r\n return\r\n }\r\n } else {\r\n // Avoid updating selection on click if not probe\r\n if ((!this.isCursor('probe-cursor')) && (!this.isCursor('position-cursor'))) return\r\n // Otherwise this is a position selection only\r\n layer = undefined\r\n }\r\n // Update the selection\r\n this.setSelection(location, feature, layer)\r\n },\r\n onFeatureSelectionLayerHidden (layer) {\r\n if (this.hasFeatureSelection) {\r\n if (layer.name === this.selection.layer.name) this.clearSelection()\r\n }\r\n },\r\n onFeatureSelectionLayerDisabled (layer) {\r\n if (this.hasFeatureSelection) {\r\n if (layer.name === this.selection.layer.name) {\r\n // Backup highlights\r\n this.disabledSelectionHighlight = this.selectionHighlight\r\n // Clear it\r\n this.selectionHighlight = {}\r\n this.updateSelectionLayer()\r\n }\r\n }\r\n },\r\n onFeatureSelectionLayerEnabled (layer) {\r\n if (this.hasFeatureSelection) {\r\n if (layer.name === this.selection.layer.name) {\r\n // Restore highlights\r\n this.selectionHighlight = this.disabledSelectionHighlight\r\n this.updateSelectionLayer()\r\n }\r\n }\r\n }\r\n },\r\n created () {\r\n // Set of highligthed features\r\n this.selectionHighlight = {}\r\n this.$on('click', this.onFeatureSelectionClicked)\r\n this.$on('layer-hidden', this.onFeatureSelectionLayerHidden)\r\n this.$on('layer-disabled', this.onFeatureSelectionLayerDisabled)\r\n this.$on('layer-enabled', this.onFeatureSelectionLayerEnabled)\r\n },\r\n mounted () {\r\n this.$once('map-ready', () => this.createSelectionLayer())\r\n this.$once('globe-ready', () => this.createSelectionLayer())\r\n },\r\n beforeDestroy () {\r\n this.$off('click', this.onFeatureSelectionClicked)\r\n this.$off('layer-hidden', this.onFeatureSelectionLayerHidden)\r\n this.$off('layer-disabled', this.onFeatureSelectionLayerDisabled)\r\n this.$off('layer-enabled', this.onFeatureSelectionLayerEnabled)\r\n this.removeSelectionLayer()\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../map/client/mixins/mixin.feature-selection.js"],"names":["data","selection","$store","get","computed","hasFeatureSelection","feature","methods","getWidgetForLayer","widget","layer","_","has","isCursor","clearSelection","closeWidget","setSelection","location","set","hasOpenWidget","openWidget","centerOnSelection","center","lng","lat","addSelectionHighlight","id","removeSelectionHighlight","highlight","cloneDeep","type","geometry","coordinates","Object","assign","_id","merge","properties","geodesic","is2D","radius","colors","getBrand","selectionHighlight","updateSelectionLayer","updateSelectionHighlight","unset","createSelectionLayer","getLayerByName","SelectionLayerName","addLayer","name","scope","isSelectable","leaflet","isVisible","realtime","interactive","popup","pick","cesium","isLayerVisible","showLayer","updateLayer","features","values","removeSelectionLayer","removeLayer","onFeatureSelectionClicked","event","isLayerSelectable","undefined","onFeatureSelectionLayerShown","onFeatureSelectionLayerHidden","onFeatureSelectionLayerDisabled","disabledSelectionHighlight","onFeatureSelectionLayerEnabled","created","$on","beforeDestroy","$off"],"mappings":"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","file":"mixin.feature-selection.js","sourcesContent":["import bbox from '@turf/bbox'\r\nimport bboxPolygon from '@turf/bbox-polygon'\r\nimport centroid from '@turf/centroid'\r\nimport _ from 'lodash'\r\nimport { colors } from 'quasar'\r\nimport { SelectionLayerName } from '../utils'\r\n\r\nexport default {\r\n data () {\r\n return {\r\n selection: this.$store.get('selection')\r\n }\r\n },\r\n computed: {\r\n hasFeatureSelection () {\r\n return this.selection.feature\r\n }\r\n },\r\n methods: {\r\n getWidgetForLayer () {\r\n // FIXME: should not be hard-coded\r\n let widget\r\n if (this.selection.layer) {\r\n widget = _.get(this.selection.layer, 'widget', 'information-box')\r\n if (_.has(this.selection.layer, 'probe') || // Static probe on pre-defined sites\r\n _.has(this.selection.layer, 'variables')) { // Measurement history\r\n widget = 'time-series'\r\n } else if (_.get(this.selection.layer, 'leaflet.type') === 'mapillary') {\r\n widget = 'mapillary-viewer'\r\n }\r\n } else {\r\n if (this.isCursor('probe-cursor')) {\r\n widget = 'time-series'\r\n }\r\n }\r\n return widget\r\n },\r\n clearSelection () {\r\n this.selection.feature = null\r\n this.selection.layer = null\r\n this.closeWidget()\r\n },\r\n setSelection (location, feature, layer) {\r\n this.selection.location = location\r\n // If clicked on the same object unselect otherwise select\r\n if (feature && (feature === this.selection.feature)) {\r\n this.clearSelection()\r\n } else {\r\n this.selection.feature = feature\r\n this.selection.layer = layer\r\n this.$store.set('selection.states', {})\r\n // Open associated default widget if none already open,\r\n // if the user has open another widget it will remain active\r\n const widget = this.getWidgetForLayer()\r\n if (widget && !this.hasOpenWidget()) this.openWidget(widget)\r\n }\r\n },\r\n centerOnSelection () {\r\n if (this.hasFeatureSelection) {\r\n this.center(..._.get(centroid(this.selection.feature), 'geometry.coordinates'))\r\n } else if (this.selection.location) {\r\n this.center(this.selection.location.lng, this.selection.location.lat)\r\n }\r\n },\r\n addSelectionHighlight (id, feature = {}) {\r\n // Remove previous selection if any\r\n this.removeSelectionHighlight(id)\r\n // Start from selected feature or location to build highlight\r\n const highlight = (this.selection.feature ? _.cloneDeep(this.selection.feature) : {\r\n type: 'Feature',\r\n geometry: { type: 'Point', coordinates: [this.selection.location.lng, this.selection.location.lat] }\r\n })\r\n // Use bbox for line/polygons\r\n if (highlight.geometry.type !== 'Point') {\r\n Object.assign(highlight, bboxPolygon(bbox(this.selection.feature)))\r\n }\r\n // Add an identifier if we'd like to update it\r\n highlight._id = highlight.id = id\r\n // Add default styling and additional information provided if any\r\n _.merge(highlight, {\r\n properties: {\r\n 'marker-type': 'circleMarker',\r\n geodesic: !this.is2D(), // In 3D we use a circle on ground\r\n radius: this.is2D() ? 18 : 1000,\r\n 'stroke-color': colors.getBrand('secondary'),\r\n 'stroke-width': 3,\r\n 'fill-color': colors.getBrand('secondary'),\r\n 'fill-opacity': 0.5\r\n }\r\n }, feature)\r\n _.set(this.selectionHighlight, id, highlight)\r\n this.updateSelectionLayer()\r\n return highlight\r\n },\r\n updateSelectionHighlight (id, feature) {\r\n if (_.has(this.selectionHighlight, id)) {\r\n _.merge(_.get(this.selectionHighlight, id), feature)\r\n this.updateSelectionLayer()\r\n }\r\n },\r\n removeSelectionHighlight (id) {\r\n if (_.has(this.selectionHighlight, id)) {\r\n _.unset(this.selectionHighlight, id)\r\n this.updateSelectionLayer()\r\n }\r\n },\r\n async createSelectionLayer () {\r\n // Get any previous layer or create it the first time\r\n const layer = this.getLayerByName(SelectionLayerName)\r\n if (!layer) {\r\n await this.addLayer({\r\n name: SelectionLayerName,\r\n type: 'OverlayLayer',\r\n scope: 'system',\r\n isSelectable: false,\r\n leaflet: {\r\n type: 'geoJson',\r\n isVisible: true,\r\n realtime: true,\r\n interactive: false,\r\n popup: { pick: [] }\r\n },\r\n cesium: {\r\n type: 'geoJson',\r\n isVisible: true,\r\n realtime: true,\r\n popup: { pick: [] }\r\n }\r\n })\r\n }\r\n if (!this.isLayerVisible(SelectionLayerName)) await this.showLayer(SelectionLayerName)\r\n },\r\n updateSelectionLayer () {\r\n this.updateLayer(SelectionLayerName, { type: 'FeatureCollection', features: Object.values(this.selectionHighlight) })\r\n },\r\n removeSelectionLayer () {\r\n this.removeLayer(SelectionLayerName)\r\n },\r\n onFeatureSelectionClicked (layer, event) {\r\n // Retrieve the location/feature\r\n const location = _.get(event, 'latlng')\r\n let feature\r\n // Check the target layer\r\n if (layer && layer.name) {\r\n // FIXME: need to retrieve original layer options as here we get processed options by the underlying engine\r\n layer = this.getLayerByName(layer.name)\r\n // Check if selectable\r\n if (layer && this.isLayerSelectable(layer)) {\r\n // Retrieve the feature and manage 2D/3D entity\r\n feature = _.get(event, 'target.feature')\r\n } else {\r\n // Avoid updating selection on click if not selectable\r\n return\r\n }\r\n } else {\r\n // Avoid updating selection on click if not probe\r\n if ((!this.isCursor('probe-cursor')) && (!this.isCursor('position-cursor'))) return\r\n // Otherwise this is a position selection only\r\n layer = undefined\r\n }\r\n // Update the selection\r\n this.setSelection(location, feature, layer)\r\n },\r\n onFeatureSelectionLayerShown (layer) {\r\n // If at least one layer is visible we have to create selection layer\r\n if (this.isLayerSelectable(layer)) this.createSelectionLayer()\r\n },\r\n onFeatureSelectionLayerHidden (layer) {\r\n if (this.hasFeatureSelection) {\r\n if (layer.name === this.selection.layer.name) this.clearSelection()\r\n }\r\n },\r\n onFeatureSelectionLayerDisabled (layer) {\r\n if (this.hasFeatureSelection) {\r\n if (layer.name === this.selection.layer.name) {\r\n // Backup highlights\r\n this.disabledSelectionHighlight = this.selectionHighlight\r\n // Clear it\r\n this.selectionHighlight = {}\r\n this.updateSelectionLayer()\r\n }\r\n }\r\n },\r\n onFeatureSelectionLayerEnabled (layer) {\r\n if (this.hasFeatureSelection) {\r\n if (layer.name === this.selection.layer.name) {\r\n // Restore highlights\r\n this.selectionHighlight = this.disabledSelectionHighlight\r\n this.updateSelectionLayer()\r\n }\r\n }\r\n }\r\n },\r\n created () {\r\n // Set of highligthed features\r\n this.selectionHighlight = {}\r\n this.$on('click', this.onFeatureSelectionClicked)\r\n this.$on('layer-shown', this.onFeatureSelectionLayerShown)\r\n this.$on('layer-hidden', this.onFeatureSelectionLayerHidden)\r\n this.$on('layer-disabled', this.onFeatureSelectionLayerDisabled)\r\n this.$on('layer-enabled', this.onFeatureSelectionLayerEnabled)\r\n },\r\n beforeDestroy () {\r\n this.$off('click', this.onFeatureSelectionClicked)\r\n this.$off('layer-shown', this.onFeatureSelectionLayerShown)\r\n this.$off('layer-hidden', this.onFeatureSelectionLayerHidden)\r\n this.$off('layer-disabled', this.onFeatureSelectionLayerDisabled)\r\n this.$off('layer-enabled', this.onFeatureSelectionLayerEnabled)\r\n this.removeSelectionLayer()\r\n }\r\n}\r\n"]}