@kalisio/kdk 2.3.2 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (441) hide show
  1. package/.eslintignore +2 -1
  2. package/.github/workflows/main.yaml +3 -3
  3. package/README.md +1 -0
  4. package/core/api/db.js +6 -1
  5. package/core/api/hooks/hooks.model.js +1 -1
  6. package/core/api/hooks/hooks.schemas.js +0 -2
  7. package/core/api/models/messages.model.mongodb.js +13 -0
  8. package/core/api/services/authorisations/authorisations.service.js +13 -4
  9. package/core/api/services/index.js +19 -0
  10. package/core/api/services/messages/messages.hooks.js +38 -0
  11. package/core/client/api.js +7 -32
  12. package/core/client/capabilities.js +2 -2
  13. package/core/client/components/KActivity.vue +29 -6
  14. package/core/client/components/KContent.vue +2 -2
  15. package/core/client/components/KDialog.vue +4 -7
  16. package/core/client/components/KStamp.vue +3 -9
  17. package/core/client/components/KStore.vue +2 -4
  18. package/core/client/components/KTab.vue +95 -0
  19. package/core/client/components/action/KAction.vue +15 -2
  20. package/core/client/components/action/KBugReportAction.vue +4 -2
  21. package/core/client/components/action/KToggleFullscreenAction.vue +25 -0
  22. package/core/client/components/app/KSettings.vue +17 -13
  23. package/core/client/components/chart/KDataTable.vue +6 -9
  24. package/core/client/components/chart/KTimeSeriesChart.vue +62 -49
  25. package/core/client/components/collection/KBoard.vue +22 -33
  26. package/core/client/components/collection/KCard.vue +71 -56
  27. package/core/client/components/collection/KCardSection.vue +20 -10
  28. package/core/client/components/collection/KDescriptionCardSection.vue +47 -0
  29. package/core/client/components/collection/KGrid.vue +234 -54
  30. package/core/client/components/collection/KScrollDown.vue +97 -0
  31. package/core/client/components/collection/KScrollToTop.vue +93 -0
  32. package/core/client/components/collection/KTable.vue +87 -33
  33. package/core/client/components/collection/KTimeLine.vue +406 -0
  34. package/core/client/components/collection/index.js +1 -5
  35. package/core/client/components/document/KDocument.vue +20 -55
  36. package/core/client/components/document/KHtml.vue +17 -7
  37. package/core/client/components/document/KImage.vue +78 -0
  38. package/core/client/components/document/KMarkdown.vue +12 -16
  39. package/core/client/components/document/KPdf.vue +69 -0
  40. package/core/client/components/form/KFileField.vue +2 -2
  41. package/core/client/components/form/KSelectField.vue +2 -1
  42. package/core/client/components/form/KUnitField.vue +3 -1
  43. package/core/client/components/layout/KFab.vue +9 -10
  44. package/core/client/components/layout/KLayout.vue +104 -6
  45. package/core/client/components/layout/KOpener.vue +14 -19
  46. package/core/client/components/layout/KPage.vue +195 -105
  47. package/core/client/components/layout/KWindow.vue +54 -32
  48. package/core/client/components/layout/index.js +0 -2
  49. package/core/client/components/media/KRibbon.vue +95 -0
  50. package/core/client/components/menu/KMenu.vue +4 -4
  51. package/core/client/components/team/KGroupsActivity.vue +25 -27
  52. package/core/client/components/team/KMembersActivity.vue +21 -23
  53. package/core/client/components/team/KOrganisationsActivity.vue +20 -22
  54. package/core/client/components/team/KTagsActivity.vue +21 -23
  55. package/core/client/components/time/KAbsoluteTimeRange.vue +70 -170
  56. package/core/client/composables/activity.js +14 -12
  57. package/core/client/composables/collection.js +3 -1
  58. package/core/client/composables/counter.js +51 -0
  59. package/core/client/composables/index.js +3 -0
  60. package/core/client/composables/layout.js +13 -2
  61. package/core/client/composables/messages.js +15 -0
  62. package/core/client/composables/pwa.js +1 -1
  63. package/core/client/composables/schema.js +6 -6
  64. package/core/client/composables/screen.js +23 -0
  65. package/core/client/directives/index.js +1 -0
  66. package/core/client/directives/v-hover.js +23 -0
  67. package/core/client/document.js +61 -0
  68. package/core/client/exporter.js +1 -1
  69. package/core/client/filter.js +0 -1
  70. package/core/client/guards.js +1 -1
  71. package/core/client/i18n/core_en.json +14 -8
  72. package/core/client/i18n/core_fr.json +15 -9
  73. package/core/client/index.js +9 -3
  74. package/core/client/layout.js +129 -29
  75. package/core/client/local-storage.js +1 -1
  76. package/core/client/mixins/index.js +0 -1
  77. package/core/client/mixins/mixin.base-activity.js +23 -13
  78. package/core/client/mixins/mixin.base-item.js +6 -3
  79. package/core/client/services/index.js +4 -1
  80. package/core/client/services/local-settings.service.js +4 -0
  81. package/core/client/storage.js +1 -1
  82. package/core/client/store.js +1 -1
  83. package/core/client/template-context.js +17 -0
  84. package/core/client/units.js +49 -27
  85. package/core/client/utils/index.js +3 -2
  86. package/core/client/utils/utils.actions.js +4 -0
  87. package/core/client/utils/utils.colors.js +155 -2
  88. package/core/client/utils/utils.items.js +26 -0
  89. package/core/client/utils/utils.math.js +3 -0
  90. package/core/client/utils/utils.platform.js +3 -1
  91. package/core/client/utils/utils.screen.js +82 -0
  92. package/core/client/utils/utils.time.js +0 -1
  93. package/core/common/schemas/settings.update.json +12 -0
  94. package/coverage/base.css +224 -0
  95. package/coverage/block-navigation.js +87 -0
  96. package/coverage/core/api/application.js.html +1870 -0
  97. package/coverage/core/api/authentication.js.html +742 -0
  98. package/coverage/core/api/db.js.html +793 -0
  99. package/coverage/core/api/hooks/hooks.authentication.js.html +313 -0
  100. package/coverage/core/api/hooks/hooks.authorisations.js.html +1243 -0
  101. package/coverage/core/api/hooks/hooks.groups.js.html +229 -0
  102. package/coverage/core/api/hooks/hooks.logger.js.html +163 -0
  103. package/coverage/core/api/hooks/hooks.model.js.html +955 -0
  104. package/coverage/core/api/hooks/hooks.organisations.js.html +541 -0
  105. package/coverage/core/api/hooks/hooks.push.js.html +253 -0
  106. package/coverage/core/api/hooks/hooks.query.js.html +862 -0
  107. package/coverage/core/api/hooks/hooks.schemas.js.html +298 -0
  108. package/coverage/core/api/hooks/hooks.service.js.html +319 -0
  109. package/coverage/core/api/hooks/hooks.storage.js.html +193 -0
  110. package/coverage/core/api/hooks/hooks.users.js.html +868 -0
  111. package/coverage/core/api/hooks/index.html +296 -0
  112. package/coverage/core/api/hooks/index.js.html +121 -0
  113. package/coverage/core/api/index.html +191 -0
  114. package/coverage/core/api/index.js.html +148 -0
  115. package/coverage/core/api/marshall.js.html +448 -0
  116. package/coverage/core/api/models/groups.model.mongodb.js.html +109 -0
  117. package/coverage/core/api/models/index.html +176 -0
  118. package/coverage/core/api/models/messages.model.mongodb.js.html +121 -0
  119. package/coverage/core/api/models/organisations.model.mongodb.js.html +94 -0
  120. package/coverage/core/api/models/tags.model.mongodb.js.html +115 -0
  121. package/coverage/core/api/models/users.model.mongodb.js.html +115 -0
  122. package/coverage/core/api/services/account/account.hooks.js.html +208 -0
  123. package/coverage/core/api/services/account/account.service.js.html +436 -0
  124. package/coverage/core/api/services/account/index.html +131 -0
  125. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +184 -0
  126. package/coverage/core/api/services/authorisations/authorisations.service.js.html +529 -0
  127. package/coverage/core/api/services/authorisations/index.html +131 -0
  128. package/coverage/core/api/services/databases/databases.hooks.js.html +193 -0
  129. package/coverage/core/api/services/databases/databases.service.js.html +100 -0
  130. package/coverage/core/api/services/databases/index.html +131 -0
  131. package/coverage/core/api/services/groups/groups.hooks.js.html +178 -0
  132. package/coverage/core/api/services/groups/index.html +116 -0
  133. package/coverage/core/api/services/import-export/import-export.hooks.js.html +184 -0
  134. package/coverage/core/api/services/import-export/import-export.service.js.html +118 -0
  135. package/coverage/core/api/services/import-export/index.html +131 -0
  136. package/coverage/core/api/services/index.html +116 -0
  137. package/coverage/core/api/services/index.js.html +556 -0
  138. package/coverage/core/api/services/mailer/index.html +131 -0
  139. package/coverage/core/api/services/mailer/mailer.hooks.js.html +190 -0
  140. package/coverage/core/api/services/mailer/mailer.service.js.html +118 -0
  141. package/coverage/core/api/services/messages/index.html +116 -0
  142. package/coverage/core/api/services/messages/messages.hooks.js.html +199 -0
  143. package/coverage/core/api/services/organisations/index.html +131 -0
  144. package/coverage/core/api/services/organisations/organisations.hooks.js.html +178 -0
  145. package/coverage/core/api/services/organisations/organisations.service.js.html +343 -0
  146. package/coverage/core/api/services/push/index.html +131 -0
  147. package/coverage/core/api/services/push/push.hooks.js.html +190 -0
  148. package/coverage/core/api/services/push/push.service.js.html +121 -0
  149. package/coverage/core/api/services/storage/index.html +131 -0
  150. package/coverage/core/api/services/storage/storage.hooks.js.html +190 -0
  151. package/coverage/core/api/services/storage/storage.service.js.html +172 -0
  152. package/coverage/core/api/services/tags/index.html +116 -0
  153. package/coverage/core/api/services/tags/tags.hooks.js.html +178 -0
  154. package/coverage/core/api/services/users/index.html +116 -0
  155. package/coverage/core/api/services/users/users.hooks.js.html +307 -0
  156. package/coverage/core/api/utils.js.html +118 -0
  157. package/coverage/core/common/errors.js.html +88 -0
  158. package/coverage/core/common/index.html +176 -0
  159. package/coverage/core/common/index.js.html +115 -0
  160. package/coverage/core/common/permissions.js.html +1048 -0
  161. package/coverage/core/common/schema.js.html +190 -0
  162. package/coverage/core/common/utils.js.html +220 -0
  163. package/coverage/favicon.png +0 -0
  164. package/coverage/index.html +506 -0
  165. package/coverage/lcov-report/base.css +224 -0
  166. package/coverage/lcov-report/block-navigation.js +87 -0
  167. package/coverage/lcov-report/core/api/application.js.html +1870 -0
  168. package/coverage/lcov-report/core/api/authentication.js.html +742 -0
  169. package/coverage/lcov-report/core/api/db.js.html +793 -0
  170. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +313 -0
  171. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +1243 -0
  172. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +229 -0
  173. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +163 -0
  174. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +955 -0
  175. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +541 -0
  176. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +253 -0
  177. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +862 -0
  178. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +298 -0
  179. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +319 -0
  180. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +193 -0
  181. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +868 -0
  182. package/coverage/lcov-report/core/api/hooks/index.html +296 -0
  183. package/coverage/lcov-report/core/api/hooks/index.js.html +121 -0
  184. package/coverage/lcov-report/core/api/index.html +191 -0
  185. package/coverage/lcov-report/core/api/index.js.html +148 -0
  186. package/coverage/lcov-report/core/api/marshall.js.html +448 -0
  187. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +109 -0
  188. package/coverage/lcov-report/core/api/models/index.html +176 -0
  189. package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +121 -0
  190. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +94 -0
  191. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +115 -0
  192. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +115 -0
  193. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +208 -0
  194. package/coverage/lcov-report/core/api/services/account/account.service.js.html +436 -0
  195. package/coverage/lcov-report/core/api/services/account/index.html +131 -0
  196. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +184 -0
  197. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +529 -0
  198. package/coverage/lcov-report/core/api/services/authorisations/index.html +131 -0
  199. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +193 -0
  200. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +100 -0
  201. package/coverage/lcov-report/core/api/services/databases/index.html +131 -0
  202. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +178 -0
  203. package/coverage/lcov-report/core/api/services/groups/index.html +116 -0
  204. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +184 -0
  205. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +118 -0
  206. package/coverage/lcov-report/core/api/services/import-export/index.html +131 -0
  207. package/coverage/lcov-report/core/api/services/index.html +116 -0
  208. package/coverage/lcov-report/core/api/services/index.js.html +556 -0
  209. package/coverage/lcov-report/core/api/services/mailer/index.html +131 -0
  210. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +190 -0
  211. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +118 -0
  212. package/coverage/lcov-report/core/api/services/messages/index.html +116 -0
  213. package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +199 -0
  214. package/coverage/lcov-report/core/api/services/organisations/index.html +131 -0
  215. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +178 -0
  216. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +343 -0
  217. package/coverage/lcov-report/core/api/services/push/index.html +131 -0
  218. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +190 -0
  219. package/coverage/lcov-report/core/api/services/push/push.service.js.html +121 -0
  220. package/coverage/lcov-report/core/api/services/storage/index.html +131 -0
  221. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +190 -0
  222. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +172 -0
  223. package/coverage/lcov-report/core/api/services/tags/index.html +116 -0
  224. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +178 -0
  225. package/coverage/lcov-report/core/api/services/users/index.html +116 -0
  226. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +307 -0
  227. package/coverage/lcov-report/core/api/utils.js.html +118 -0
  228. package/coverage/lcov-report/core/common/errors.js.html +88 -0
  229. package/coverage/lcov-report/core/common/index.html +176 -0
  230. package/coverage/lcov-report/core/common/index.js.html +115 -0
  231. package/coverage/lcov-report/core/common/permissions.js.html +1048 -0
  232. package/coverage/lcov-report/core/common/schema.js.html +190 -0
  233. package/coverage/lcov-report/core/common/utils.js.html +220 -0
  234. package/coverage/lcov-report/favicon.png +0 -0
  235. package/coverage/lcov-report/index.html +506 -0
  236. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +457 -0
  237. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +397 -0
  238. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +1309 -0
  239. package/coverage/lcov-report/map/api/hooks/index.html +161 -0
  240. package/coverage/lcov-report/map/api/hooks/index.js.html +94 -0
  241. package/coverage/lcov-report/map/api/index.html +131 -0
  242. package/coverage/lcov-report/map/api/index.js.html +139 -0
  243. package/coverage/lcov-report/map/api/marshall.js.html +178 -0
  244. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +106 -0
  245. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +127 -0
  246. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +196 -0
  247. package/coverage/lcov-report/map/api/models/index.html +161 -0
  248. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +109 -0
  249. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +274 -0
  250. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +610 -0
  251. package/coverage/lcov-report/map/api/services/alerts/index.html +131 -0
  252. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +310 -0
  253. package/coverage/lcov-report/map/api/services/catalog/index.html +116 -0
  254. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1510 -0
  255. package/coverage/lcov-report/map/api/services/daptiles/index.html +116 -0
  256. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +241 -0
  257. package/coverage/lcov-report/map/api/services/features/features.service.js.html +241 -0
  258. package/coverage/lcov-report/map/api/services/features/index.html +131 -0
  259. package/coverage/lcov-report/map/api/services/index.html +116 -0
  260. package/coverage/lcov-report/map/api/services/index.js.html +817 -0
  261. package/coverage/lcov-report/map/api/services/projects/index.html +116 -0
  262. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +439 -0
  263. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +466 -0
  264. package/coverage/lcov-report/map/common/errors.js.html +94 -0
  265. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +541 -0
  266. package/coverage/lcov-report/map/common/grid.js.html +1612 -0
  267. package/coverage/lcov-report/map/common/index.html +371 -0
  268. package/coverage/lcov-report/map/common/index.js.html +172 -0
  269. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +556 -0
  270. package/coverage/lcov-report/map/common/moment-utils.js.html +157 -0
  271. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +868 -0
  272. package/coverage/lcov-report/map/common/opendap-utils.js.html +826 -0
  273. package/coverage/lcov-report/map/common/permissions.js.html +124 -0
  274. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +418 -0
  275. package/coverage/lcov-report/map/common/tms-utils.js.html +274 -0
  276. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +364 -0
  277. package/coverage/lcov-report/map/common/wcs-utils.js.html +586 -0
  278. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1033 -0
  279. package/coverage/lcov-report/map/common/wfs-utils.js.html +574 -0
  280. package/coverage/lcov-report/map/common/wms-utils.js.html +451 -0
  281. package/coverage/lcov-report/map/common/wmts-utils.js.html +547 -0
  282. package/coverage/lcov-report/prettify.css +1 -0
  283. package/coverage/lcov-report/prettify.js +2 -0
  284. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  285. package/coverage/lcov-report/sorter.js +196 -0
  286. package/coverage/lcov.info +11245 -0
  287. package/coverage/map/api/hooks/hooks.catalog.js.html +457 -0
  288. package/coverage/map/api/hooks/hooks.features.js.html +397 -0
  289. package/coverage/map/api/hooks/hooks.query.js.html +1309 -0
  290. package/coverage/map/api/hooks/index.html +161 -0
  291. package/coverage/map/api/hooks/index.js.html +94 -0
  292. package/coverage/map/api/index.html +131 -0
  293. package/coverage/map/api/index.js.html +139 -0
  294. package/coverage/map/api/marshall.js.html +178 -0
  295. package/coverage/map/api/models/alerts.model.mongodb.js.html +106 -0
  296. package/coverage/map/api/models/catalog.model.mongodb.js.html +127 -0
  297. package/coverage/map/api/models/features.model.mongodb.js.html +196 -0
  298. package/coverage/map/api/models/index.html +161 -0
  299. package/coverage/map/api/models/projects.model.mongodb.js.html +109 -0
  300. package/coverage/map/api/services/alerts/alerts.hooks.js.html +274 -0
  301. package/coverage/map/api/services/alerts/alerts.service.js.html +610 -0
  302. package/coverage/map/api/services/alerts/index.html +131 -0
  303. package/coverage/map/api/services/catalog/catalog.hooks.js.html +310 -0
  304. package/coverage/map/api/services/catalog/index.html +116 -0
  305. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1510 -0
  306. package/coverage/map/api/services/daptiles/index.html +116 -0
  307. package/coverage/map/api/services/features/features.hooks.js.html +241 -0
  308. package/coverage/map/api/services/features/features.service.js.html +241 -0
  309. package/coverage/map/api/services/features/index.html +131 -0
  310. package/coverage/map/api/services/index.html +116 -0
  311. package/coverage/map/api/services/index.js.html +817 -0
  312. package/coverage/map/api/services/projects/index.html +116 -0
  313. package/coverage/map/api/services/projects/projects.hooks.js.html +439 -0
  314. package/coverage/map/common/dynamic-grid-source.js.html +466 -0
  315. package/coverage/map/common/errors.js.html +94 -0
  316. package/coverage/map/common/geotiff-grid-source.js.html +541 -0
  317. package/coverage/map/common/grid.js.html +1612 -0
  318. package/coverage/map/common/index.html +371 -0
  319. package/coverage/map/common/index.js.html +172 -0
  320. package/coverage/map/common/meteo-model-grid-source.js.html +556 -0
  321. package/coverage/map/common/moment-utils.js.html +157 -0
  322. package/coverage/map/common/opendap-grid-source.js.html +868 -0
  323. package/coverage/map/common/opendap-utils.js.html +826 -0
  324. package/coverage/map/common/permissions.js.html +124 -0
  325. package/coverage/map/common/time-based-grid-source.js.html +418 -0
  326. package/coverage/map/common/tms-utils.js.html +274 -0
  327. package/coverage/map/common/wcs-grid-source.js.html +364 -0
  328. package/coverage/map/common/wcs-utils.js.html +586 -0
  329. package/coverage/map/common/weacast-grid-source.js.html +1033 -0
  330. package/coverage/map/common/wfs-utils.js.html +574 -0
  331. package/coverage/map/common/wms-utils.js.html +451 -0
  332. package/coverage/map/common/wmts-utils.js.html +547 -0
  333. package/coverage/prettify.css +1 -0
  334. package/coverage/prettify.js +2 -0
  335. package/coverage/sort-arrow-sprite.png +0 -0
  336. package/coverage/sorter.js +196 -0
  337. package/coverage/tmp/coverage-280506-1731704745613-0.json +1 -0
  338. package/coverage/tmp/coverage-280518-1731704745599-0.json +1 -0
  339. package/coverage/tmp/coverage-280529-1731704745588-0.json +1 -0
  340. package/coverage/tmp/coverage-280541-1731704745574-0.json +1 -0
  341. package/coverage/tmp/coverage-280548-1731704745545-0.json +1 -0
  342. package/extras/css/core.variables.scss +32 -8
  343. package/extras/icons/attribution.png +0 -0
  344. package/map/api/services/catalog/catalog.hooks.js +5 -7
  345. package/map/api/services/features/features.hooks.js +1 -1
  346. package/map/client/cesium/utils/utils.style.js +11 -2
  347. package/map/client/components/KAttribution.vue +108 -0
  348. package/map/client/components/KPositionIndicator.vue +11 -18
  349. package/map/client/components/KProjectMenu.vue +4 -4
  350. package/map/client/components/catalog/KCategoryItem.vue +74 -0
  351. package/map/client/components/catalog/KLayerCategories.vue +24 -12
  352. package/map/client/components/catalog/KLayersPanel.vue +139 -116
  353. package/map/client/components/catalog/KProjectSelector.vue +29 -17
  354. package/map/client/components/catalog/KProjectsPanel.vue +19 -35
  355. package/map/client/components/catalog/KViewSelector.vue +37 -25
  356. package/map/client/components/catalog/KViewsPanel.vue +19 -35
  357. package/map/client/components/form/KLocationField.vue +1 -2
  358. package/map/client/components/legend/KLegend.vue +34 -34
  359. package/map/client/components/location/KLocationCardSection.vue +18 -22
  360. package/map/client/components/location/KLocationMap.vue +36 -38
  361. package/map/client/components/location/KLocationTimeLineCard.vue +147 -0
  362. package/map/client/components/location/KLocationTip.vue +12 -2
  363. package/map/client/components/widget/KInformationBox.vue +0 -4
  364. package/map/client/components/widget/KStackableTimeSeries.vue +8 -1
  365. package/map/client/components/widget/KTimeSeries.vue +1 -1
  366. package/map/client/composables/highlight.js +29 -31
  367. package/map/client/composables/probe.js +7 -3
  368. package/map/client/composables/weather.js +71 -31
  369. package/map/client/i18n/map_en.json +3 -0
  370. package/map/client/i18n/map_fr.json +3 -0
  371. package/map/client/init.js +4 -3
  372. package/map/client/leaflet/ShapeMarker.js +1 -1
  373. package/map/client/leaflet/utils/utils.events.js +1 -1
  374. package/map/client/leaflet/utils/utils.style.js +20 -8
  375. package/map/client/mixins/globe/mixin.base-globe.js +111 -13
  376. package/map/client/mixins/globe/mixin.file-layers.js +10 -10
  377. package/map/client/mixins/globe/mixin.geojson-layers.js +90 -15
  378. package/map/client/mixins/globe/mixin.style.js +2 -0
  379. package/map/client/mixins/index.js +0 -1
  380. package/map/client/mixins/map/index.js +1 -0
  381. package/map/client/mixins/map/mixin.base-map.js +21 -2
  382. package/map/client/mixins/map/mixin.canvas-layers.js +7 -2
  383. package/map/client/mixins/map/mixin.edit-layers.js +12 -4
  384. package/map/client/mixins/map/mixin.file-layers.js +3 -0
  385. package/map/client/mixins/map/mixin.geojson-layers.js +90 -5
  386. package/map/client/mixins/map/mixin.pmtiles-layers.js +106 -0
  387. package/map/client/mixins/mixin.activity.js +8 -3
  388. package/map/client/mixins/mixin.feature-service.js +73 -32
  389. package/map/client/mixins/mixin.levels.js +1 -0
  390. package/map/client/mixins/mixin.weacast.js +10 -87
  391. package/map/client/utils/index.js +1 -0
  392. package/map/client/utils/utils.capture.js +1 -1
  393. package/map/client/utils/utils.catalog.js +7 -7
  394. package/map/client/utils/utils.features.js +59 -1
  395. package/map/client/utils/utils.layers.js +8 -0
  396. package/map/client/utils/utils.time-series.js +121 -0
  397. package/map/client/utils/utils.weacast.js +102 -0
  398. package/package.json +6 -6
  399. package/scripts/init_runner.sh +2 -2
  400. package/scripts/kash/CHANGELOG.md +12 -0
  401. package/scripts/kash/README.md +2 -0
  402. package/scripts/kash/kash.sh +34 -32
  403. package/scripts/run_tests.sh +2 -2
  404. package/scripts/setup_workspace.sh +24 -6
  405. package/test/api/core/hooks.test.js +6 -3
  406. package/test/api/core/test-log-2023-12-19.log +7 -0
  407. package/test/api/core/test-log-2024-01-04.log +14 -0
  408. package/test/api/core/test-log-2024-05-14.log +6 -0
  409. package/test/api/core/{test-log-2024-04-23.log → test-log-2024-06-06.log} +3 -3
  410. package/test/api/core/test-log-2024-06-26.log +25 -0
  411. package/test/api/core/test-log-2024-06-28.log +2 -0
  412. package/test/api/core/test-log-2024-07-09.log +0 -0
  413. package/test/api/core/test-log-2024-08-13.log +69 -0
  414. package/test/api/core/test-log-2024-10-28.log +53 -0
  415. package/test/api/core/test-log-2024-11-05.log +30 -0
  416. package/test/api/core/test-log-2024-11-15.log +23 -0
  417. package/test/api/map/alerts.test.js +3 -1
  418. package/test/api/map/config/layers.json +3 -1
  419. package/test/api/map/index.test.js +18 -1
  420. package/test/api/map/test-log-2023-11-24.log +121 -0
  421. package/test/api/map/test-log-2023-12-12.log +29 -0
  422. package/test/api/map/test-log-2023-12-13.log +5 -0
  423. package/test/api/map/test-log-2024-01-04.log +2 -0
  424. package/test/api/map/test-log-2024-01-11.log +1 -0
  425. package/test/api/map/test-log-2024-01-25.log +19 -0
  426. package/test/api/map/test-log-2024-06-06.log +39 -0
  427. package/test/api/map/test-log-2024-08-13.log +13 -0
  428. package/test/api/map/test-log-2024-08-20.log +55 -0
  429. package/test/api/map/test-log-2024-09-09.log +92 -0
  430. package/test/api/map/test-log-2024-10-28.log +11 -0
  431. package/test/client/core/utils.js +13 -0
  432. package/test/client/map/api.js +34 -0
  433. package/test/client/map/catalog.js +6 -2
  434. package/test/client/map/index.js +1 -0
  435. package/test/client/map/utils.js +4 -2
  436. package/core/client/components/collection/KList.vue +0 -135
  437. package/core/client/components/layout/KPageSticky.vue +0 -53
  438. package/core/client/mixins/mixin.base-collection.js +0 -162
  439. package/core/client/utils/utils.data.js +0 -22
  440. package/map/client/mixins/mixin.catalog-panel.js +0 -26
  441. package/test/api/core/test-log-2024-04-22.log +0 -84
@@ -0,0 +1,55 @@
1
+ {"level":"info","message":"Logger configured"}
2
+ {"level":"info","message":"Initializing weacast-gfs plugin"}
3
+ {"level":"info","message":"Initializing gfs-world forecast"}
4
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/u-wind"}
5
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/v-wind"}
6
+ {"level":"error","message":"Could not update gfs-world/v-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-20T12:00:00Z"}
7
+ {"level":"error","message":"Could not download gfs-world/v-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-20T12:00:00Z, provider responded with HTTP code 302"}
8
+ {"level":"error","message":"Could not update gfs-world/u-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-20T12:00:00Z"}
9
+ {"level":"error","message":"Could not download gfs-world/u-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-20T12:00:00Z, provider responded with HTTP code 302"}
10
+ {"level":"error","message":"Could not update gfs-world/v-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-20T06:00:00Z"}
11
+ {"level":"error","message":"Could not download gfs-world/v-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-20T06:00:00Z, provider responded with HTTP code 302"}
12
+ {"level":"error","message":"Could not update gfs-world/u-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-20T06:00:00Z"}
13
+ {"level":"error","message":"Could not download gfs-world/u-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-20T06:00:00Z, provider responded with HTTP code 302"}
14
+ {"level":"error","message":"Could not update gfs-world/v-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-20T00:00:00Z"}
15
+ {"level":"error","message":"Could not download gfs-world/v-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-20T00:00:00Z, provider responded with HTTP code 302"}
16
+ {"level":"error","message":"Could not update gfs-world/u-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-20T00:00:00Z"}
17
+ {"level":"error","message":"Could not download gfs-world/u-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-20T00:00:00Z, provider responded with HTTP code 302"}
18
+ {"level":"error","message":"Could not update gfs-world/v-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-19T18:00:00Z"}
19
+ {"level":"error","message":"Could not download gfs-world/v-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-19T18:00:00Z, provider responded with HTTP code 302"}
20
+ {"level":"error","message":"Could not update gfs-world/u-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-19T18:00:00Z"}
21
+ {"level":"error","message":"Could not download gfs-world/u-wind forecast at 2024-08-20T12:00:00Z for run 2024-08-19T18:00:00Z, provider responded with HTTP code 302"}
22
+ {"level":"error","message":"Could not update gfs-world/v-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-20T12:00:00Z"}
23
+ {"level":"error","message":"Could not download gfs-world/v-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-20T12:00:00Z, provider responded with HTTP code 302"}
24
+ {"level":"error","message":"Could not update gfs-world/u-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-20T12:00:00Z"}
25
+ {"level":"error","message":"Could not download gfs-world/u-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-20T12:00:00Z, provider responded with HTTP code 302"}
26
+ {"level":"error","message":"Could not update gfs-world/v-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-20T06:00:00Z"}
27
+ {"level":"error","message":"Could not download gfs-world/v-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-20T06:00:00Z, provider responded with HTTP code 302"}
28
+ {"level":"error","message":"Could not update gfs-world/u-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-20T06:00:00Z"}
29
+ {"level":"error","message":"Could not download gfs-world/u-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-20T06:00:00Z, provider responded with HTTP code 302"}
30
+ {"level":"error","message":"Could not update gfs-world/v-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-20T00:00:00Z"}
31
+ {"level":"error","message":"Could not download gfs-world/v-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-20T00:00:00Z, provider responded with HTTP code 302"}
32
+ {"level":"error","message":"Could not update gfs-world/u-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-20T00:00:00Z"}
33
+ {"level":"error","message":"Could not download gfs-world/u-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-20T00:00:00Z, provider responded with HTTP code 302"}
34
+ {"level":"error","message":"Could not update gfs-world/v-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-19T18:00:00Z"}
35
+ {"level":"error","message":"Could not download gfs-world/v-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-19T18:00:00Z, provider responded with HTTP code 302"}
36
+ {"level":"info","message":"Completed forecast data update on gfs-world/v-wind"}
37
+ {"level":"error","message":"Could not update gfs-world/u-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-19T18:00:00Z"}
38
+ {"level":"error","message":"Could not download gfs-world/u-wind forecast at 2024-08-20T15:00:00Z for run 2024-08-19T18:00:00Z, provider responded with HTTP code 302"}
39
+ {"level":"info","message":"Completed forecast data update on gfs-world/u-wind"}
40
+ {"level":"error","message":"Cannot check alert 66c4b05ca92b91444f4b8703 as target probes service is not available"}
41
+ {"level":"error","message":"Cannot check alert 66c4b05ca92b91444f4b8703 as target probes service is not available"}
42
+ {"level":"error","message":"Cannot check alert 66c4b05ca92b91444f4b8703 as no data is available for gfs-world"}
43
+ {"level":"error","message":"Cannot check alert 66c4b06ba92b91444f4b8704 as no data is available for gfs-world"}
44
+ {"level":"error","message":"Cannot check alert 66c4b06ba92b91444f4b8704 as no data is available for gfs-world"}
45
+ {"level":"error","message":"Cannot check alert 66c4b06ba92b91444f4b8704 as no data is available for gfs-world"}
46
+ {"level":"error","message":"Cannot check alert 66c4b07aa92b91444f4b8705 as no data is available for gfs-world"}
47
+ {"level":"error","message":"Cannot check alert 66c4b099a92b91444f4b8c48 as no data is available for features service vigicrues-observations"}
48
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
49
+ {"level":"info","message":"Logger configured"}
50
+ {"level":"error","message":"error: api/vigicrues-stations - Method: find: unknown top level operator: $search. If you have a field name that starts with a '$' symbol, consider using $getField or $setField."}
51
+ {"level":"error","message":"error: api/vigicrues-stations - Method: find: unknown top level operator: $regex. If you have a field name that starts with a '$' symbol, consider using $getField or $setField."}
52
+ {"level":"error","message":"error: api/vigicrues-stations - Method: find: unknown top level operator: $regex. If you have a field name that starts with a '$' symbol, consider using $getField or $setField."}
53
+ {"level":"error","message":"error: api/vigicrues-stations - Method: find: unknown top level operator: $regex. If you have a field name that starts with a '$' symbol, consider using $getField or $setField."}
54
+ {"level":"error","message":"error: api/vigicrues-stations - Method: find: collection.distinct(...).toArray is not a function"}
55
+ {"level":"error","message":"error: api/vigicrues-stations - Method: find: collection.distinct(...).toArray is not a function"}
@@ -0,0 +1,92 @@
1
+ {"level":"info","message":"Logger configured"}
2
+ {"level":"info","message":"Initializing weacast-gfs plugin"}
3
+ {"level":"info","message":"Initializing gfs-world forecast"}
4
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/u-wind"}
5
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/v-wind"}
6
+ {"level":"info","message":"Completed forecast data update on gfs-world/u-wind"}
7
+ {"level":"info","message":"Completed forecast data update on gfs-world/v-wind"}
8
+ {"level":"error","message":"Cannot check alert 66df0924a66980d48fb0d8b1 as target probes service is not available"}
9
+ {"level":"error","message":"error: api/alerts - Method: create: Not Found"}
10
+ {"level":"error","message":"Cannot check alert 66df0924a66980d48fb0d8b2 as target probes service is not available"}
11
+ {"level":"error","message":"error: api/alerts - Method: create: Not Found"}
12
+ {"level":"error","message":"Cannot check alert 66df0924a66980d48fb0d8b3 as target probes service is not available"}
13
+ {"level":"error","message":"error: api/alerts - Method: create: Not Found"}
14
+ {"level":"error","message":"error: api/alerts - Method: create: Not Found"}
15
+ {"level":"error","message":"error: api/alerts - Method: create: Not Found"}
16
+ {"level":"error","message":"Cannot check alert 66df0924a66980d48fb0ddf6 as no data is available for features service vigicrues-observations"}
17
+ {"level":"error","message":"error: api/alerts - Method: create: Not Found"}
18
+ {"level":"info","message":"Logger configured"}
19
+ {"level":"info","message":"Initializing weacast-gfs plugin"}
20
+ {"level":"info","message":"Initializing gfs-world forecast"}
21
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/u-wind"}
22
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/v-wind"}
23
+ {"level":"info","message":"Completed forecast data update on gfs-world/u-wind"}
24
+ {"level":"info","message":"Completed forecast data update on gfs-world/v-wind"}
25
+ {"level":"error","message":"Cannot check alert 66df094658be2bd5581cb167 as target probes service is not available"}
26
+ {"level":"error","message":"Cannot check alert 66df094658be2bd5581cb167 as target probes service is not available"}
27
+ {"level":"error","message":"Cannot check alert 66df096458be2bd5581cb169 as no data is available for gfs-world"}
28
+ {"level":"error","message":"Cannot check alert 66df098258be2bd5581cb6ac as no data is available for features service vigicrues-observations"}
29
+ {"level":"info","message":"Logger configured"}
30
+ {"level":"info","message":"Initializing weacast-gfs plugin"}
31
+ {"level":"info","message":"Initializing gfs-world forecast"}
32
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/u-wind"}
33
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/v-wind"}
34
+ {"level":"info","message":"Completed forecast data update on gfs-world/u-wind"}
35
+ {"level":"info","message":"Completed forecast data update on gfs-world/v-wind"}
36
+ {"level":"error","message":"Cannot check alert 66df0c9adedf2ddb5855a0e7 as target probes service is not available"}
37
+ {"level":"error","message":"Cannot check alert 66df0c9adedf2ddb5855a0e7 as target probes service is not available"}
38
+ {"level":"error","message":"Cannot check alert 66df0cb9dedf2ddb5855a0e9 as no data is available for gfs-world"}
39
+ {"level":"error","message":"Cannot check alert 66df0cd7dedf2ddb5855a62c as no data is available for features service vigicrues-observations"}
40
+ {"level":"info","message":"Logger configured"}
41
+ {"level":"info","message":"Initializing weacast-gfs plugin"}
42
+ {"level":"info","message":"Initializing gfs-world forecast"}
43
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/u-wind"}
44
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/v-wind"}
45
+ {"level":"info","message":"Completed forecast data update on gfs-world/u-wind"}
46
+ {"level":"info","message":"Completed forecast data update on gfs-world/v-wind"}
47
+ {"level":"error","message":"Cannot check alert 66df0cf9236744ddb6ef906f as target probes service is not available"}
48
+ {"level":"error","message":"Cannot check alert 66df0cf9236744ddb6ef906f as target probes service is not available"}
49
+ {"level":"error","message":"Cannot check alert 66df0d17236744ddb6ef9071 as no data is available for gfs-world"}
50
+ {"level":"error","message":"Cannot check alert 66df0d36236744ddb6ef95b4 as no data is available for features service vigicrues-observations"}
51
+ {"level":"info","message":"Logger configured"}
52
+ {"level":"info","message":"Initializing weacast-gfs plugin"}
53
+ {"level":"info","message":"Initializing gfs-world forecast"}
54
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/u-wind"}
55
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/v-wind"}
56
+ {"level":"info","message":"Completed forecast data update on gfs-world/u-wind"}
57
+ {"level":"info","message":"Completed forecast data update on gfs-world/v-wind"}
58
+ {"level":"error","message":"Cannot check alert 66df0e3910afd5dffa1c4b5e as no data is available for features service vigicrues-observations"}
59
+ {"level":"info","message":"Logger configured"}
60
+ {"level":"info","message":"Initializing weacast-gfs plugin"}
61
+ {"level":"info","message":"Initializing gfs-world forecast"}
62
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/u-wind"}
63
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/v-wind"}
64
+ {"level":"info","message":"Completed forecast data update on gfs-world/u-wind"}
65
+ {"level":"info","message":"Completed forecast data update on gfs-world/v-wind"}
66
+ {"level":"error","message":"Cannot check alert 66df0e8ccdfcb5e1c2c29099 as no data is available for features service vigicrues-observations"}
67
+ {"level":"info","message":"Logger configured"}
68
+ {"level":"info","message":"Initializing weacast-gfs plugin"}
69
+ {"level":"info","message":"Initializing gfs-world forecast"}
70
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/u-wind"}
71
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/v-wind"}
72
+ {"level":"info","message":"Completed forecast data update on gfs-world/v-wind"}
73
+ {"level":"info","message":"Completed forecast data update on gfs-world/u-wind"}
74
+ {"level":"error","message":"Cannot check alert 66df10b5ace15ae6329c10b7 as no data is available for features service vigicrues-observations"}
75
+ {"level":"info","message":"Logger configured"}
76
+ {"level":"info","message":"Initializing weacast-gfs plugin"}
77
+ {"level":"info","message":"Initializing gfs-world forecast"}
78
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/u-wind"}
79
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/v-wind"}
80
+ {"level":"info","message":"Completed forecast data update on gfs-world/u-wind"}
81
+ {"level":"info","message":"Completed forecast data update on gfs-world/v-wind"}
82
+ {"level":"error","message":"Cannot check alert 66df13cbb17161e8e4f2916e as no data is available for gfs-world"}
83
+ {"level":"error","message":"Cannot check alert 66df13eab17161e8e4f296b1 as no data is available for features service vigicrues-observations"}
84
+ {"level":"info","message":"Logger configured"}
85
+ {"level":"info","message":"Initializing weacast-gfs plugin"}
86
+ {"level":"info","message":"Initializing gfs-world forecast"}
87
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/u-wind"}
88
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/v-wind"}
89
+ {"level":"info","message":"Completed forecast data update on gfs-world/u-wind"}
90
+ {"level":"info","message":"Completed forecast data update on gfs-world/v-wind"}
91
+ {"level":"error","message":"Cannot check alert 66df142ac455c7eaba85efdd as no data is available for gfs-world"}
92
+ {"level":"error","message":"Cannot check alert 66df1449c455c7eaba85f520 as no data is available for features service vigicrues-observations"}
@@ -0,0 +1,11 @@
1
+ {"level":"info","message":"Logger configured"}
2
+ {"level":"info","message":"Initializing weacast-gfs plugin"}
3
+ {"level":"info","message":"Initializing gfs-world forecast"}
4
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/u-wind"}
5
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/v-wind"}
6
+ {"level":"info","message":"Completed forecast data update on gfs-world/u-wind"}
7
+ {"level":"info","message":"Completed forecast data update on gfs-world/v-wind"}
8
+ {"level":"error","message":"Cannot check alert 671f4c7f0454b12da9ade006 as no data is available for gfs-world"}
9
+ {"level":"error","message":"Cannot check alert 671f4c9d0454b12da9ade549 as no data is available for features service vigicrues-observations"}
10
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
11
+ {"level":"info","message":"Logger configured"}
@@ -121,6 +121,19 @@ export async function clickSelect (page, selector, entry, wait = 500) {
121
121
  }
122
122
  }
123
123
 
124
+ /* Helper function to clear input a text on a given selector
125
+ ! Not yet working !
126
+ */
127
+ export async function clear (page, selector, wait = 500) {
128
+ try {
129
+ await page.waitForSelector(selector, { timeout: 2000 })
130
+ await page.$eval(selector, element => { element.value = '' })
131
+ await page.waitForTimeout(wait)
132
+ } catch (error) {
133
+ console.error(`[KDK] Clear ${selector} failed.`)
134
+ }
135
+ }
136
+
124
137
  /* Helper function to input a text on a given selector
125
138
  * set enter to true to run the press 'Enter' key
126
139
  */
@@ -0,0 +1,34 @@
1
+ import * as core from '../core/index.js'
2
+
3
+ // Decorate core API with some of the required features for map
4
+ export class Api extends core.Api {
5
+ createClient (options = {}) {
6
+ const client = super.createClient(options)
7
+
8
+ client.createGeoJsonFeature = async (layerId, coordinates, properties = {}, service = 'features') => {
9
+ // Deduce geometry type from coordinates
10
+ let type = 'Point'
11
+ if (Array.isArray(coordinates[0])) {
12
+ type = (Array.isArray(coordinates[0][0]) ? 'Polygon' : 'LineString')
13
+ }
14
+ const feature = await client.getService(service).create(Object.assign({
15
+ type: 'Feature',
16
+ geometry: {
17
+ type,
18
+ coordinates
19
+ },
20
+ layer: layerId
21
+ }, properties))
22
+ return feature
23
+ }
24
+
25
+ client.updateGeoJsonFeature = async (featureId, coordinates, properties = {}, service = 'features') => {
26
+ const feature = await client.getService(service).patch(featureId, Object.assign({
27
+ 'geometry.coordinates': coordinates
28
+ }, properties))
29
+ return feature
30
+ }
31
+
32
+ return client
33
+ }
34
+ }
@@ -153,13 +153,17 @@ export async function importLayer (page, filePath, featureId = undefined, wait =
153
153
  await page.waitForTimeout(wait)
154
154
  }
155
155
 
156
- export async function connectLayer (page, service, layerId, layerName, wait = 2000) {
156
+ export async function connectLayer (page, service, layerId, layerName, featureId, wait = 2000) {
157
157
  await addLayer(page)
158
158
  await core.clickAction(page, 'connect-layer')
159
159
  await core.type(page, '#service-field', service, true, false, 5000)
160
160
  await core.click(page, '#layer-field', 500)
161
161
  if (layerName) await core.type(page, '#layer-field', layerName)
162
162
  await core.click(page, `#${layerId}`, 500)
163
+ if (featureId) {
164
+ await core.click(page, '#featureId-field', 500)
165
+ await core.click(page, `#${featureId}`, 500)
166
+ }
163
167
  await core.clickAction(page, 'connect-layer-action', 2000)
164
168
  await page.waitForNetworkIdle()
165
169
  await page.waitForTimeout(wait)
@@ -250,7 +254,7 @@ export async function clickProject (page, tabId, name) {
250
254
 
251
255
  export async function switchProject (page, name, wait = 2000) {
252
256
  await core.click(page, '#project-menu', 2000)
253
- await core.clickXPath(page, `//div[contains(@component, "collection/KItem") and contains(., "${name}")]`, 1000)
257
+ await core.clickXPath(page, `//div[contains(@component, "collection/KCard") and contains(., "${name}")]`, 1000)
254
258
  await page.waitForNetworkIdle()
255
259
  await page.waitForTimeout(wait)
256
260
  }
@@ -1,3 +1,4 @@
1
+ export * from './api.js'
1
2
  export * from './catalog.js'
2
3
  export * from './controls.js'
3
4
  export * from './time.js'
@@ -18,8 +18,10 @@ export async function moveMap (page, direction, times, wait = 500) {
18
18
 
19
19
  /* Zooms the map to a specific level
20
20
  */
21
- export async function zoomToLevel (page, level, wait = 500) {
22
- const zoom = await core.getFromStore(page, 'mapActivity.zoom')
21
+ export async function zoomToLevel (page, storePath, level, wait = 500) {
22
+ // FIXME: better way to get activity state ?
23
+ // At current time the activity should implement state saving to make it work
24
+ const zoom = await core.getFromStore(page, `${storePath}.state.zoom`)
23
25
  const diff = level - zoom
24
26
  const action = (level > zoom) ? 'in' : 'out'
25
27
  await moveMap(page, action, Math.abs(diff), wait)
@@ -1,135 +0,0 @@
1
- <template>
2
- <div v-if="items.length > 0" class="row">
3
- <div class="col-12">
4
- <q-list highlight separator>
5
- <template v-for="item in items" :key="item._id">
6
- <component
7
- :id="item._id"
8
- :service="service"
9
- :item="item"
10
- :contextId="contextId"
11
- :is="rendererComponent"
12
- v-bind="renderer"
13
- @item-toggled="onItemToggled"
14
- @item-selected="onItemSelected" />
15
- </template>
16
- </q-list>
17
- </div>
18
- <div v-if="nbPages > 1" class="col-12">
19
- <div class="row justify-center">
20
- <q-pagination
21
- v-model="currentPage"
22
- :max="nbPages"
23
- :input="true"
24
- @update:model-value="refreshCollection"
25
- />
26
- </div>
27
- </div>
28
- </div>
29
- <div v-else>
30
- <slot name="empty-section">
31
- <div class="row col justify-center">
32
- <KStamp
33
- icon="las la-exclamation-circle"
34
- icon-size="1.6rem"
35
- :text="$t('KList.EMPTY_LIST')"
36
- direction="horizontal" />
37
- </div>
38
- </slot>
39
- </div>
40
- </template>
41
-
42
- <script setup>
43
- import { computed, watch, toRefs, onBeforeMount, onBeforeUnmount } from 'vue'
44
- import KStamp from '../KStamp.vue'
45
- import { Events } from '../../events.js'
46
- import { useCollection } from '../../composables'
47
- import { loadComponent } from '../../utils'
48
-
49
- const emit = defineEmits(['selection-changed', 'collection-refreshed'])
50
-
51
- // Props
52
- const props = defineProps({
53
- renderer: {
54
- type: Object,
55
- default: () => {
56
- return {
57
- component: 'collection/KItem'
58
- }
59
- }
60
- },
61
- contextId: {
62
- type: String,
63
- default: undefined
64
- },
65
- service: {
66
- type: String,
67
- required: true
68
- },
69
- baseQuery: {
70
- type: Object,
71
- default: function () {
72
- return {}
73
- }
74
- },
75
- filterQuery: {
76
- type: Object,
77
- default: function () {
78
- return {}
79
- }
80
- },
81
- listStrategy: {
82
- type: String,
83
- default: 'smart'
84
- },
85
- nbItemsPerPage: {
86
- type: Number,
87
- default: 12
88
- },
89
- processor: {
90
- type: Function,
91
- default: undefined
92
- }
93
- })
94
-
95
- // Computed
96
- const rendererComponent = computed(() => loadComponent(props.renderer.component))
97
-
98
- // Functions
99
- function onItemToggled (item, toggled) {
100
- emit('item-toggled', item, toggled)
101
- }
102
- function onItemSelected (item, section) {
103
- emit('selection-changed', item, section)
104
- }
105
- function onCollectionRefreshed () {
106
- emit('collection-refreshed', items.value)
107
- }
108
-
109
- const { items, nbTotalItems, nbPages, currentPage, refreshCollection, resetCollection } = useCollection(toRefs(props))
110
-
111
- // Lifecycle hooks
112
-
113
- // Emit events so that embbeding components can be aware of it
114
- watch(items, onCollectionRefreshed)
115
-
116
- onBeforeMount(() => {
117
- refreshCollection()
118
- // Whenever the user abilities are updated, update collection as well
119
- Events.on('user-abilities-changed', refreshCollection)
120
- })
121
-
122
- onBeforeUnmount(() => {
123
- Events.off('user-abilities-changed', refreshCollection)
124
- })
125
-
126
- // Expose
127
- defineExpose({
128
- items,
129
- nbTotalItems,
130
- nbPages,
131
- currentPage,
132
- refreshCollection,
133
- resetCollection
134
- })
135
- </script>
@@ -1,53 +0,0 @@
1
- <template>
2
- <q-page-sticky
3
- v-if="hasContent"
4
- class="k-sticky"
5
- :position="position"
6
- :offset="offset"
7
- >
8
- <KContent
9
- v-bind="$props"
10
- />
11
- </q-page-sticky>
12
- </template>
13
-
14
- <script setup>
15
- import _ from 'lodash'
16
- import { computed } from 'vue'
17
- import KContent from '../KContent.vue'
18
-
19
- // Props
20
- const props = defineProps({
21
- position: {
22
- type: String,
23
- required: true
24
- },
25
- offset: {
26
- type: Array,
27
- default: () => [0, 0]
28
- },
29
- content: {
30
- type: [Object, Array],
31
- default: () => null
32
- },
33
- mode: {
34
- type: String,
35
- default: undefined
36
- },
37
- context: {
38
- type: Object,
39
- default: () => null
40
- }
41
- })
42
-
43
- // Computed
44
- const hasContent = computed(() => {
45
- return !_.isEmpty(props.content)
46
- })
47
- </script>
48
-
49
- <style lang="scss" scoped>
50
- .k-sticky {
51
- z-index: $sticky-z-index;
52
- }
53
- </style>
@@ -1,162 +0,0 @@
1
- import _ from 'lodash'
2
- import logger from 'loglevel'
3
- import { getLocale } from '../utils/utils.locale.js'
4
-
5
- export const baseCollection = {
6
- emits: [
7
- 'collection-refreshed',
8
- 'selection-changed',
9
- 'item-toggled'
10
- ],
11
- props: {
12
- // This value can be overriden in activities if they want to manage pagination by themselves
13
- // nbItemsPerPage = 0 means that the client does not handle pagination and server defaults will be used
14
- nbItemsPerPage: {
15
- type: Number,
16
- default: 12
17
- },
18
- // This value indicate if items of each page replace or are appended to previous ones
19
- appendItems: {
20
- type: Boolean,
21
- default: false
22
- },
23
- // Only invoke refresh at most once per every refreshThrottle milliseconds
24
- refreshThrottle: {
25
- type: Number,
26
- default: 500
27
- }
28
- },
29
- computed: {
30
- nbPages () {
31
- return (this.nbItemsPerPage > 0 ? Math.ceil(this.nbTotalItems / this.nbItemsPerPage) : 1)
32
- }
33
- },
34
- data () {
35
- return {
36
- items: [],
37
- nbTotalItems: 0,
38
- currentPage: 1
39
- }
40
- },
41
- methods: {
42
- subscribe (query) {
43
- // Remove previous listener if any
44
- this.unsubscribe()
45
- this.itemListener = this.getService().watch({ listStrategy: this.listStrategy || 'smart' })
46
- .find({ query })
47
- .subscribe(response => {
48
- // Manage GeoJson features collection as well
49
- if (response.type === 'FeatureCollection') {
50
- this.items = response.features
51
- } else if (this.appendItems) {
52
- // Append the response ensuring there is no duplicates
53
- this.items = _.unionBy(response.data, this.items, '_id')
54
- // We keep order from the updated list as depending on the sorting criteria a new item might have to be pushed on top of current items
55
- const sortQuery = _.get(this.getCollectionBaseQuery(), '$sort')
56
- if (sortQuery) {
57
- // By default orderBy is case sensitive while using collation we want to perform case insensitive sort
58
- this.items = _.orderBy(this.items,
59
- // Sort function for each sort property
60
- _.map(_.keys(sortQuery), property => {
61
- return item => {
62
- const value = _.get(item, property)
63
- return (typeof value === 'string' ? value.toLowerCase() : value)
64
- }
65
- }),
66
- // Sort order for each sort property
67
- _.map(_.values(sortQuery), value => { return value > 0 ? 'asc' : 'desc' }))
68
- }
69
- } else {
70
- this.items = response.data
71
- }
72
- this.nbTotalItems = response.total
73
- this.onCollectionRefreshed()
74
- }, error => {
75
- logger.error(error)
76
- })
77
- },
78
- unsubscribe () {
79
- if (this.itemListener) {
80
- this.itemListener.unsubscribe()
81
- this.itemListener = null
82
- }
83
- },
84
- getCollectionBaseQuery () {
85
- // This method should be overriden in collections
86
- return {}
87
- },
88
- getCollectionFilterQuery () {
89
- // This method should be overriden in collections
90
- return {}
91
- },
92
- getCollectionPaginationQuery () {
93
- // This method can be overriden in collections
94
- if (this.nbItemsPerPage > 0) {
95
- return {
96
- $limit: this.nbItemsPerPage,
97
- $skip: (this.currentPage - 1) * this.nbItemsPerPage
98
- }
99
- } else return {}
100
- },
101
- resetCollection () {
102
- // Reset pagination and start again refreshing the collection
103
- this.items = []
104
- this.currentPage = 1
105
- this.refreshCollection()
106
- },
107
- onPageChanged () {
108
- this.refreshCollection()
109
- },
110
- onItemToggled (item, toggled) {
111
- this.$emit('item-toggled', item, toggled)
112
- },
113
- onItemSelected (item, section) {
114
- this.$emit('selection-changed', item, section)
115
- },
116
- onItemsSelected (items) {
117
- this.$emit('selection-changed', items)
118
- },
119
- onCollectionRefreshed () {
120
- this.$emit('collection-refreshed', this.items)
121
- },
122
- onItemsUpdated (items) {
123
- // When we append items some items of the previous pages might have been updated.
124
- // In this case we need to reset the full collection as Rx only tracks changes on the current page
125
- let updatedItems = (Array.isArray(items) ? items : [items])
126
- // We keep order from the updated list as depending on the sorting criteria a new item might have to be pushed on top of current items
127
- updatedItems = _.intersectionWith(this.items, updatedItems, (item1, item2) => (item1._id.toString() === item2._id.toString()))
128
- if (updatedItems.length > 0) this.resetCollection()
129
- }
130
- },
131
- created () {
132
- // Avoid initiating too much request as the same time, this might be the case
133
- // when async UI components update simultaneously the base/filter query
134
- // see https://github.com/kalisio/kdk/issues/432
135
- const refreshCollection = () => {
136
- // Add locale to perform sorting (i.e. collation) correctly w.r.t. user's language
137
- const fullQuery = Object.assign({ $locale: getLocale() },
138
- this.getCollectionBaseQuery(),
139
- this.getCollectionFilterQuery(),
140
- this.getCollectionPaginationQuery())
141
- // Find the desired items
142
- this.subscribe(fullQuery)
143
- }
144
- this.refreshCollection = _.throttle(refreshCollection, this.refreshThrottle, { leading: false })
145
-
146
- if (this.appendItems) {
147
- const service = this.getService()
148
- service.on('patched', this.onItemsUpdated)
149
- service.on('updated', this.onItemsUpdated)
150
- service.on('removed', this.onItemsUpdated)
151
- }
152
- },
153
- beforeUnmount () {
154
- this.unsubscribe()
155
- if (this.appendItems) {
156
- const service = this.getService()
157
- service.off('patched', this.onItemsUpdated)
158
- service.off('updated', this.onItemsUpdated)
159
- service.off('removed', this.onItemsUpdated)
160
- }
161
- }
162
- }
@@ -1,22 +0,0 @@
1
- import _ from 'lodash'
2
- import { Units } from '../units.js'
3
-
4
- export function convertData (data, valuePaths, sourceUnit, targetUnit) {
5
- if (!Array.isArray(valuePaths)) valuePaths = [valuePaths]
6
- _.forEach(data, document => {
7
- _.forEach(valuePaths, valuePath => {
8
- const value = _.get(document, valuePath)
9
- if (value) _.set(document, valuePath, Units.convert(value, sourceUnit.name, targetUnit.name))
10
- })
11
- })
12
- }
13
-
14
- export function convertTimeSerie (data, variable, valuePaths) {
15
- if (!Array.isArray(valuePaths)) valuePaths = [valuePaths]
16
- const unit = variable.unit
17
- const targetUnit = variable.targetUnit || Units.getDefaultUnit(unit.name)
18
- if (unit.name !== targetUnit.name) {
19
- convertData(data, valuePaths, unit, targetUnit)
20
- variable.unit = targetUnit
21
- }
22
- }