@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
@@ -15,12 +15,7 @@ $warning: #d09931 !default;
15
15
  $tooltip-fontsize: 12px !default;
16
16
  $tooltip-background: $accent !default;
17
17
 
18
- // Pane
19
- $left-pane-width: 320px !default;
20
-
21
18
  // Window
22
- $window-min-width: 300px !default;
23
- $window-min-height: 300px !default;
24
19
  $window-background: #ffffff !default;
25
20
  $window-border-style: solid !default;
26
21
  $window-border-width: 1px !default;
@@ -31,10 +26,39 @@ $window-header-background: #eeeeee !default;
31
26
  $window-header-hover-background: #dddddd !default;
32
27
  $window-controls-size: 1rem !default;
33
28
 
34
- // Sticky
35
- $sticky-z-index: 1000 !default;
36
-
37
29
  // Table: quasar has eg $table-hover-background but nothing for background
38
30
  $table-background: #fff !default;
39
31
 
32
+ // Scrollbar
33
+ .q-scrollarea__thumb {
34
+ background: $primary;
35
+ border-radius: 3px;
36
+ opacity: .2;
37
+ }
38
+
39
+ /* TODO try to specify style the same as above
40
+ ::-webkit-scrollbar {
41
+ height: 10px;
42
+ width: 10px;
43
+ background: transparent;
44
+ overflow: visible;
45
+ }
46
+
47
+ ::-webkit-scrollbar-thumb {
48
+ width: 10px;
49
+ background-color: $primary;
50
+ border-radius: 3px;
51
+ -webkit-transition: background-color .28s ease-in-out;
52
+ transition: background-color .28s ease-in-out;
53
+ opacity: .2;
54
+ }
55
+
56
+ ::-webkit-scrollbar-thumb:hover {
57
+ background: $primary
58
+ }*/
40
59
 
60
+ // Anchor
61
+ a {
62
+ color: $accent;
63
+ cursor: pointer;
64
+ }
Binary file
@@ -15,8 +15,7 @@ export default {
15
15
  get: [],
16
16
  create: [
17
17
  coreHooks.checkUnique({ field: 'name', query: (query, hook) => { query.type = _.get(hook, 'data.type') } }),
18
- coreHooks.convertObjectIDs(['baseQuery.layer']),
19
- coreHooks.convertToString(['schema.content', 'filters']),
18
+ coreHooks.convertToString(['baseQuery', 'schema.content', 'filters']),
20
19
  setNow('createdAt', 'updatedAt'),
21
20
  // This allow to use keys for base queries like 'properties.xxx': 'yyy'
22
21
  (hook) => { _.set(hook, 'params.mongodb.checkKeys', false) }
@@ -24,16 +23,14 @@ export default {
24
23
  update: [
25
24
  coreHooks.populatePreviousObject,
26
25
  coreHooks.checkUnique({ field: 'name', query: (query, hook) => { query.type = _.get(hook, 'params.previousItem.type') } }),
27
- coreHooks.convertObjectIDs(['baseQuery.layer']),
28
- coreHooks.convertToString(['schema.content', 'filters']),
26
+ coreHooks.convertToString(['baseQuery', 'schema.content', 'filters']),
29
27
  discard('createdAt', 'updatedAt'),
30
28
  setNow('updatedAt')
31
29
  ],
32
30
  patch: [
33
31
  coreHooks.populatePreviousObject,
34
32
  coreHooks.checkUnique({ field: 'name', query: (query, hook) => { query.type = _.get(hook, 'params.previousItem.type') } }),
35
- coreHooks.convertObjectIDs(['baseQuery.layer']),
36
- coreHooks.convertToString(['schema.content', 'filters']),
33
+ coreHooks.convertToString(['baseQuery', 'schema.content', 'filters']),
37
34
  discard('createdAt', 'updatedAt'),
38
35
  setNow('updatedAt')
39
36
  ],
@@ -44,7 +41,8 @@ export default {
44
41
 
45
42
  after: {
46
43
  all: [
47
- coreHooks.convertToJson(['schema.content', 'filters'])
44
+ coreHooks.convertToJson(['baseQuery', 'schema.content', 'filters']),
45
+ coreHooks.convertObjectIDs(['baseQuery.layer'])
48
46
  ],
49
47
  find: [
50
48
  // Merge built-in categoriessublegends with user-defined ones for global catalog only
@@ -20,7 +20,7 @@ export default {
20
20
  before: {
21
21
  all: [coreHooks.marshallTimeQuery, coreHooks.convertObjectIDs(['layer'])],
22
22
  find: [coreHooks.marshallComparisonQuery, coreHooks.marshallSortQuery, marshallSpatialQuery,
23
- coreHooks.distinct, aggregateFeaturesQuery, coreHooks.aggregationQuery, fuzzySearch, coreHooks.diacriticSearch],
23
+ coreHooks.distinct, aggregateFeaturesQuery, coreHooks.aggregationQuery, fuzzySearch, coreHooks.diacriticSearch()],
24
24
  get: [],
25
25
  create: [coreHooks.processTimes(['time']), fullResult, emitEvents],
26
26
  update: [coreHooks.processTimes(['time']), fullResult, emitEvents],
@@ -2,7 +2,7 @@ import _ from 'lodash'
2
2
  import chroma from 'chroma-js'
3
3
  import moment from 'moment'
4
4
  import { Color } from 'cesium'
5
- import { Time, Units } from '../../../../core/client/index.js'
5
+ import { Time, Units, TemplateContext } from '../../../../core/client/index.js'
6
6
  import { convertPointStyleToSimpleStyle, convertLineStyleToSimpleStyle, convertPolygonStyleToSimpleStyle, convertSimpleStyleColors,
7
7
  convertSimpleStyleToPointStyle, convertSimpleStyleToLineStyle, convertSimpleStyleToPolygonStyle,
8
8
  PointStyleTemplateMappings, LineStyleTemplateMappings, PolygonStyleTemplateMappings } from '../../utils/utils.style.js'
@@ -47,7 +47,7 @@ function processStyle (style, feature, options, mappings) {
47
47
  const cesiumOptions = options.cesium || options
48
48
  // We allow to template style properties according to feature,
49
49
  // because it can be slow you have to specify a subset of properties
50
- const context = { properties: feature.properties, feature, chroma, moment, Units, Time }
50
+ const context = Object.assign({ properties: feature.properties, feature, chroma, moment, Units, Time }, TemplateContext.get())
51
51
  if (cesiumOptions.template) {
52
52
  // Create the map of variables
53
53
  if (options.variables) context.variables = _.reduce(options.variables,
@@ -56,6 +56,15 @@ function processStyle (style, feature, options, mappings) {
56
56
  _.set(style, _.get(mappings, _.kebabCase(entry.property), entry.property), entry.compiler(context))
57
57
  })
58
58
  }
59
+
60
+ // visibility attribute can be used to hide individual features
61
+ // visibility is true by default but can also be a string when it's
62
+ // a result of a lodash steing template evaluation
63
+ let visibility = _.get(style, 'style.visibility', true)
64
+ if (typeof visibility === 'string') visibility = visibility === 'true'
65
+ // The 'kdk-hidden-features' pane is created when the leaflet map is initialized
66
+ // if (!visibility) _.set(style, `style.${type}.pane`, 'kdk-hidden-features')
67
+
59
68
  return style
60
69
  }
61
70
 
@@ -0,0 +1,108 @@
1
+ <template>
2
+ <div class="q-pa-sm">
3
+ <KShape
4
+ class="text-weight-bold"
5
+ :options="{
6
+ shape: 'circle',
7
+ color: 'white',
8
+ stroke: {
9
+ color: 'primary',
10
+ width: '2'
11
+ },
12
+ text: {
13
+ label: 'i',
14
+ color: 'primary'
15
+ }
16
+ }"
17
+ />
18
+ <q-popup-proxy
19
+ id="attributions-popup"
20
+ transition-show="scale"
21
+ transition-hide="scale"
22
+ anchor="center left"
23
+ self="bottom right"
24
+ >
25
+ <div
26
+ id="attributions-banner"
27
+ class="bg-white text-primary text-center q-col-gutter-y-xs"
28
+ >
29
+ <!-- Header Content -->
30
+ <div v-if="header">
31
+ <KContent :content="header" :class="headerClass" />
32
+ </div>
33
+ <!-- Main Content -->
34
+ <div
35
+ id="attributions-content"
36
+ v-html="sanitizedAttributions"
37
+ class="text-caption q-py-none q-px-sm"
38
+ />
39
+ <!-- Footer Content -->
40
+ <div v-if="footer">
41
+ <KContent :content="footer" :class="footerClass" />
42
+ </div>
43
+ </div>
44
+ </q-popup-proxy>
45
+ </div>
46
+ </template>
47
+
48
+ <script setup>
49
+ import _ from 'lodash'
50
+ import logger from 'loglevel'
51
+ import config from 'config'
52
+ import { ref, computed, watch } from 'vue'
53
+ import { Document } from '../../../core/client/document.js'
54
+ import { KShape } from '../../../core/client/components/media'
55
+ import { useCurrentActivity } from '../composables'
56
+ import KContent from '../../../core/client/components/KContent.vue'
57
+
58
+ // Data
59
+ const { CurrentActivity } = useCurrentActivity({ selection: false, probe: false })
60
+ const attributions = ref({})
61
+ const header = ref(_.get(config, 'attribution.header', []))
62
+ const headerClass = ref(_.get(config, 'attribution.headerClass', ''))
63
+ const footer = ref(_.get(config, 'attribution.footer', []))
64
+ const footerClass = ref(_.get(config, 'attribution.footerClass', ''))
65
+
66
+ // Computed
67
+ const sanitizedAttributions = computed(() => {
68
+ let content = ''
69
+ _.forOwn(attributions.value, (attribution, layer) => {
70
+ content += `${attribution}<br>`
71
+ })
72
+ return Document.sanitizeHtml(content)
73
+ })
74
+
75
+ // Watch
76
+ watch(CurrentActivity, (newActivity, oldActivity) => {
77
+ if (oldActivity) {
78
+ // remove listeners
79
+ oldActivity.value.$engineEvents.off('layer-shown', onShowLayer)
80
+ oldActivity.value.$engineEvents.off('layer-hidden', onHideLayer)
81
+ }
82
+ if (newActivity) {
83
+ // setup attribution
84
+ newActivity.getLayers().forEach((layer) => {
85
+ if (newActivity.isLayerVisible(layer.name)) {
86
+ onShowLayer(layer)
87
+ }
88
+ })
89
+ // install listeners
90
+ newActivity.$engineEvents.on('layer-shown', onShowLayer)
91
+ newActivity.$engineEvents.on('layer-hidden', onHideLayer)
92
+ }
93
+ }, { immediate: true })
94
+
95
+ // Functions
96
+ function onShowLayer (layer) {
97
+ if (layer.attribution) {
98
+ logger.debug(`[KDK] Add ${layer.name} to attribution`)
99
+ _.set(attributions.value, _.kebabCase(layer.name), layer.attribution)
100
+ }
101
+ }
102
+ function onHideLayer (layer) {
103
+ if (layer.attribution) {
104
+ logger.debug(`[KDK] Remove ${layer.name} from attribution`)
105
+ _.unset(attributions.value, _.kebabCase(layer.name))
106
+ }
107
+ }
108
+ </script>
@@ -28,8 +28,8 @@ export default {
28
28
  inject: ['kActivity'],
29
29
  props: {
30
30
  size: {
31
- type: String,
32
- default: '3rem'
31
+ type: Number,
32
+ default: 48
33
33
  }
34
34
  },
35
35
  data () {
@@ -61,30 +61,23 @@ export default {
61
61
  id: 'position-target',
62
62
  component: 'QImg',
63
63
  src: 'icons/kdk/target.svg',
64
- height: this.size,
65
- width: this.size,
66
- class: 'fixed-center k-position-indicator'
64
+ height: `${this.size}px`,
65
+ width: `${this.size}px`,
66
+ position: 'center',
67
+ offset: [0, -this.size / 2],
68
+ style: 'pointer-events: none; background-color: #00000020; border-radius: 50%;'
67
69
  }
68
70
  kdkCoreUtils.bindContent(target, this.kActivity)
69
- const components = Layout.getPage().components
71
+ const stickies = Layout.getStickies().components
70
72
  // Required to use splice when modifying an object inside an array to make it reactive
71
- components.splice(components.length, 0, target)
73
+ stickies.splice(stickies.length, 0, target)
72
74
  this.kActivity.$engineEvents.on('move', this.updatePosition)
73
75
  },
74
76
  beforeUnmount () {
75
- const components = Layout.getPage().components
77
+ const stickies = Layout.getStickies().components
76
78
  // Required to use splice when modifying an object inside an array to make it reactive
77
- components.splice(_.findIndex(components, component => component.id === 'position-target'), 1)
79
+ stickies.splice(_.findIndex(stickies, component => component.id === 'position-target'), 1)
78
80
  this.kActivity.$engineEvents.off('move', this.updatePosition)
79
81
  }
80
82
  }
81
83
  </script>
82
-
83
- <style lang="scss">
84
- .k-position-indicator {
85
- pointer-events: none;
86
- border-radius: 50%;
87
- background-color: #00000020;
88
- z-index: $sticky-z-index;
89
- }
90
- </style>
@@ -17,11 +17,11 @@
17
17
  menu-anchor="bottom middle"
18
18
  menu-self="top middle">
19
19
  <template v-slot:default>
20
- <KList
20
+ <KGrid
21
21
  service="projects"
22
22
  :base-query="{ _id: { $ne: projectId } }"
23
- @selection-changed="onProjectSelected"
24
23
  :dense="true"
24
+ @selection-changed="onProjectSelected"
25
25
  />
26
26
  </template>
27
27
  </q-btn-dropdown>
@@ -30,12 +30,12 @@
30
30
 
31
31
  <script>
32
32
  import _ from 'lodash'
33
- import { KList } from '../../../core/client/components'
33
+ import { KGrid } from '../../../core/client/components'
34
34
  import { useProject } from '../composables'
35
35
 
36
36
  export default {
37
37
  components: {
38
- KList
38
+ KGrid
39
39
  },
40
40
  inject: ['kActivity'],
41
41
  computed: {
@@ -0,0 +1,74 @@
1
+ <template>
2
+ <q-expansion-item
3
+ :header-class="headerClass"
4
+ :icon="icon"
5
+ :label="name"
6
+ :default-opened="defaultOpened"
7
+ expand-separator
8
+ @update:model-value="onToggled"
9
+ >
10
+ <component
11
+ :is="category.componentInstance"
12
+ :layers="layers"
13
+ :forecastModels="forecastModels"
14
+ :options="category.options || category">
15
+ </component>
16
+ </q-expansion-item>
17
+ </template>
18
+
19
+ <script setup>
20
+ import _ from 'lodash'
21
+ import { computed } from 'vue'
22
+ import { i18n, LocalStorage } from '../../../../core/client'
23
+
24
+ // Props
25
+ const props = defineProps({
26
+ category: {
27
+ type: Object,
28
+ required: true
29
+ },
30
+ layers: {
31
+ type: Array,
32
+ required: true
33
+ },
34
+ forecastModels: {
35
+ type: Array,
36
+ default: () => []
37
+ }
38
+ })
39
+
40
+ // Data
41
+ const localStorageKey = 'catalog-categories'
42
+
43
+ // Computed
44
+ const name = computed(() => {
45
+ return i18n.tie(props.category.name)
46
+ })
47
+ const headerClass = computed(() => {
48
+ const defaultClass = 'text-' + _.get(props.category, 'icon.color', 'primary')
49
+ return _.get(props.category, 'headerClass', defaultClass)
50
+ })
51
+ const icon = computed(() => {
52
+ _.get(props.category, 'icon.name', _.get(props.category, 'icon'))
53
+ })
54
+ const defaultOpened = computed(() => {
55
+ const states = LocalStorage.get(localStorageKey)
56
+ if (states && _.has(states, getId())) return states[getId()]
57
+ // if category explicitly specify default opened state, use that
58
+ if (_.has(props.category, 'options.open')) return props.category.options.open
59
+ // otherwise, default open when there's only one category
60
+ // return this.filteredCategories.length === 1
61
+ // robin: to not break existing apps, just return false when options.open is not defined
62
+ return false
63
+ })
64
+
65
+ // Functions
66
+ function getId () {
67
+ return _.kebabCase(_.replace(props.category.name, 'Categories.', ''))
68
+ }
69
+ function onToggled (value) {
70
+ const states = LocalStorage.get(localStorageKey, {})
71
+ states[getId()] = value
72
+ LocalStorage.set(localStorageKey, states)
73
+ }
74
+ </script>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <k-modal
2
+ <KModal
3
3
  id="layer-categories-modal"
4
4
  :title="title"
5
5
  :toolbar="toolbar"
@@ -8,37 +8,48 @@
8
8
  >
9
9
  <div id="layer-categories-content">
10
10
  <q-card-section id="layer-categories-list" v-if="mode === 'list'">
11
- <k-list
11
+ <KGrid
12
12
  style="min-height: 50px; min-width: 200px"
13
13
  service="catalog"
14
14
  :renderer="categoryRenderer"
15
- :nbItemsPerPage="8"
15
+ :nbItemsPerPage="12"
16
16
  :base-query="baseQuery"
17
17
  :filter-query="filter.query"
18
- @collection-refreshed="refreshCategories" />
18
+ :append-items="true"
19
+ @collection-refreshed="refreshCategories"
20
+ />
19
21
  </q-card-section>
20
22
  <q-card-section id="layer-category-add" v-if="mode === 'add'">
21
- <k-form :ref="onAddFormCreated" :schema="categorySchema" style="min-width: 300px" />
23
+ <KForm
24
+ :ref="onAddFormCreated"
25
+ :schema="categorySchema"
26
+ style="min-width: 300px"
27
+ />
22
28
  </q-card-section>
23
29
  <q-card-section id="layer-category-edit" v-if="mode === 'edit'">
24
- <k-form :ref="onEditFormCreated" @form-ready="onEditFormReady" :schema="categorySchema" style="min-width: 300px" />
30
+ <KForm
31
+ :ref="onEditFormCreated"
32
+ :schema="categorySchema"
33
+ style="min-width: 300px"
34
+ @form-ready="onEditFormReady"
35
+ />
25
36
  </q-card-section>
26
37
  </div>
27
- </k-modal>
38
+ </KModal>
28
39
  </template>
29
40
 
30
41
  <script>
31
42
  import _ from 'lodash'
32
43
  import { mixins as kCoreMixins } from '../../../../core/client'
33
- import { KModal, KAction, KPanel, KList } from '../../../../core/client/components'
44
+ import { KModal, KGrid, KAction, KPanel, KForm } from '../../../../core/client/components'
34
45
 
35
46
  export default {
36
- name: 'k-layer-categories',
37
47
  components: {
38
48
  KModal,
49
+ KGrid,
39
50
  KAction,
40
51
  KPanel,
41
- KList
52
+ KForm
42
53
  },
43
54
  mixins: [
44
55
  kCoreMixins.baseModal
@@ -187,10 +198,11 @@ export default {
187
198
  filter: this.$store.get('filter'),
188
199
  sorter: this.$store.get('sorter'),
189
200
  mode: 'list',
190
- count: 0,
201
+ count: undefined,
191
202
  savingCategory: false,
192
203
  categoryRenderer: {
193
204
  component: 'collection/KItem',
205
+ class: 'col-12',
194
206
  actions: [{
195
207
  id: 'edit-layer-category',
196
208
  icon: 'las la-file-alt',
@@ -246,7 +258,7 @@ export default {
246
258
  if (!_.isEmpty(category.layers)) category.description = category.layers.join(',')
247
259
  })
248
260
  } else {
249
- if (!this.filter.pattern) this.mode = 'add'
261
+ if (this.count === 0 && _.isEmpty(this.filter.pattern)) this.mode = 'add'
250
262
  }
251
263
  },
252
264
  onAddFormCreated (ref) {