@kalisio/kdk 1.3.4 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nyc_output/{0b8aa700-8daa-49ce-85e7-a8f8965d55f0.json → 03fad5e1-0985-48cc-bcbf-b53b3567b484.json} +0 -0
- package/.nyc_output/{20df4355-911a-4b16-a8ab-d3392e9f0a7f.json → 0a387479-430c-4f37-afd0-7cb413b43f71.json} +0 -0
- package/.nyc_output/3def2322-4b64-4d43-886a-2f1d1ac42e7f.json +1 -0
- package/.nyc_output/{257af0bb-96c3-465a-b5ef-a1df60078d5f.json → 48c4e1d1-6dc8-4531-9519-3715b705900e.json} +0 -0
- package/.nyc_output/{284aebfa-23fd-425f-9d72-e4b8904dc224.json → 5942dc79-7596-496b-aca5-0a4fbea84813.json} +0 -0
- package/.nyc_output/dcf9446b-252f-41f8-96f9-0119b21bc294.json +1 -0
- package/.nyc_output/{5cbee06e-be6e-468a-bd78-4793ee785fe4.json → e4dcc112-f0f4-42fe-a481-fb65d8cb1b7d.json} +0 -0
- package/.nyc_output/processinfo/03fad5e1-0985-48cc-bcbf-b53b3567b484.json +1 -0
- package/.nyc_output/processinfo/0a387479-430c-4f37-afd0-7cb413b43f71.json +1 -0
- package/.nyc_output/processinfo/3def2322-4b64-4d43-886a-2f1d1ac42e7f.json +1 -0
- package/.nyc_output/processinfo/48c4e1d1-6dc8-4531-9519-3715b705900e.json +1 -0
- package/.nyc_output/processinfo/5942dc79-7596-496b-aca5-0a4fbea84813.json +1 -0
- package/.nyc_output/processinfo/{2bece194-92f7-4971-a688-10604044a7fa.json → dcf9446b-252f-41f8-96f9-0119b21bc294.json} +1 -1
- package/.nyc_output/processinfo/e4dcc112-f0f4-42fe-a481-fb65d8cb1b7d.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -1
- package/CHANGELOG.md +251 -94
- package/README.md +1 -1
- package/coverage/core/api/application.js.html +145 -145
- package/coverage/core/api/authentication.js.html +36 -36
- package/coverage/core/api/db.js.html +74 -74
- package/coverage/core/api/hooks/hooks.account.js.html +4 -4
- package/coverage/core/api/hooks/hooks.authentication.js.html +4 -4
- package/coverage/core/api/hooks/hooks.authorisations.js.html +112 -121
- package/coverage/core/api/hooks/hooks.devices.js.html +5 -5
- package/coverage/core/api/hooks/hooks.groups.js.html +3 -3
- package/coverage/core/api/hooks/hooks.logger.js.html +7 -7
- package/coverage/core/api/hooks/hooks.model.js.html +149 -149
- package/coverage/core/api/hooks/hooks.organisations.js.html +13 -61
- package/coverage/core/api/hooks/hooks.pusher.js.html +7 -7
- package/coverage/core/api/hooks/hooks.query.js.html +68 -32
- package/coverage/core/api/hooks/hooks.service.js.html +15 -15
- package/coverage/core/api/hooks/hooks.storage.js.html +5 -5
- package/coverage/core/api/hooks/hooks.tags.js.html +7 -7
- package/coverage/core/api/hooks/hooks.users.js.html +93 -45
- package/coverage/core/api/hooks/index.html +66 -66
- package/coverage/core/api/hooks/index.js.html +15 -15
- package/coverage/core/api/index.html +35 -35
- package/coverage/core/api/index.js.html +13 -13
- package/coverage/core/api/marshall.js.html +81 -81
- package/coverage/core/api/models/groups.model.mongodb.js.html +1 -1
- package/coverage/core/api/models/index.html +1 -1
- package/coverage/core/api/models/organisations.model.mongodb.js.html +1 -1
- package/coverage/core/api/models/tags.model.mongodb.js.html +1 -1
- package/coverage/core/api/models/users.model.mongodb.js.html +7 -7
- package/coverage/core/api/oauth2-handler.js.html +3 -3
- package/coverage/core/api/oauth2-verifier.js.html +5 -5
- package/coverage/core/api/services/account/account.hooks.js.html +1 -1
- package/coverage/core/api/services/account/account.service.js.html +1 -1
- package/coverage/core/api/services/account/index.html +1 -1
- package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +3 -3
- package/coverage/core/api/services/authorisations/authorisations.service.js.html +40 -37
- package/coverage/core/api/services/authorisations/index.html +17 -17
- package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
- package/coverage/core/api/services/databases/databases.service.js.html +1 -1
- package/coverage/core/api/services/databases/index.html +1 -1
- package/coverage/core/api/services/devices/devices.hooks.js.html +1 -1
- package/coverage/core/api/services/devices/devices.service.js.html +1 -1
- package/coverage/core/api/services/devices/index.html +1 -1
- package/coverage/core/api/services/groups/groups.hooks.js.html +1 -1
- package/coverage/core/api/services/groups/index.html +1 -1
- package/coverage/core/api/services/index.html +5 -5
- package/coverage/core/api/services/index.js.html +40 -40
- package/coverage/core/api/services/mailer/index.html +1 -1
- package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
- package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
- package/coverage/core/api/services/organisations/index.html +1 -1
- package/coverage/core/api/services/organisations/organisations.hooks.js.html +1 -1
- package/coverage/core/api/services/organisations/organisations.service.js.html +1 -1
- package/coverage/core/api/services/pusher/index.html +19 -19
- package/coverage/core/api/services/pusher/pusher.channels.js.html +1 -1
- package/coverage/core/api/services/pusher/pusher.hooks.js.html +1 -1
- package/coverage/core/api/services/pusher/pusher.service.js.html +32 -32
- package/coverage/core/api/services/storage/index.html +1 -1
- package/coverage/core/api/services/storage/storage.hooks.js.html +4 -4
- package/coverage/core/api/services/tags/index.html +1 -1
- package/coverage/core/api/services/tags/tags.hooks.js.html +1 -1
- package/coverage/core/api/services/users/index.html +1 -1
- package/coverage/core/api/services/users/users.hooks.js.html +12 -12
- package/coverage/core/common/index.html +32 -32
- package/coverage/core/common/index.js.html +27 -27
- package/coverage/core/common/permissions.js.html +135 -75
- package/coverage/index.html +158 -158
- package/coverage/lcov-report/core/api/application.js.html +145 -145
- package/coverage/lcov-report/core/api/authentication.js.html +36 -36
- package/coverage/lcov-report/core/api/db.js.html +74 -74
- package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +4 -4
- package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +4 -4
- package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +112 -121
- package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +5 -5
- package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +3 -3
- package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +7 -7
- package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +149 -149
- package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +13 -61
- package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +7 -7
- package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +68 -32
- package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +15 -15
- package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +5 -5
- package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +7 -7
- package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +93 -45
- package/coverage/lcov-report/core/api/hooks/index.html +66 -66
- package/coverage/lcov-report/core/api/hooks/index.js.html +15 -15
- package/coverage/lcov-report/core/api/index.html +35 -35
- package/coverage/lcov-report/core/api/index.js.html +13 -13
- package/coverage/lcov-report/core/api/marshall.js.html +81 -81
- package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/core/api/models/index.html +1 -1
- package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +7 -7
- package/coverage/lcov-report/core/api/oauth2-handler.js.html +3 -3
- package/coverage/lcov-report/core/api/oauth2-verifier.js.html +5 -5
- package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/account/account.service.js.html +1 -1
- package/coverage/lcov-report/core/api/services/account/index.html +1 -1
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +3 -3
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +40 -37
- package/coverage/lcov-report/core/api/services/authorisations/index.html +17 -17
- package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
- package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
- package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +1 -1
- package/coverage/lcov-report/core/api/services/devices/index.html +1 -1
- package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/groups/index.html +1 -1
- package/coverage/lcov-report/core/api/services/index.html +5 -5
- package/coverage/lcov-report/core/api/services/index.js.html +40 -40
- package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
- package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
- package/coverage/lcov-report/core/api/services/organisations/index.html +1 -1
- package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +1 -1
- package/coverage/lcov-report/core/api/services/pusher/index.html +19 -19
- package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +1 -1
- package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +32 -32
- package/coverage/lcov-report/core/api/services/storage/index.html +1 -1
- package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +4 -4
- package/coverage/lcov-report/core/api/services/tags/index.html +1 -1
- package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/users/index.html +1 -1
- package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +12 -12
- package/coverage/lcov-report/core/common/index.html +32 -32
- package/coverage/lcov-report/core/common/index.js.html +27 -27
- package/coverage/lcov-report/core/common/permissions.js.html +135 -75
- package/coverage/lcov-report/index.html +158 -158
- package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +55 -55
- package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +302 -275
- package/coverage/lcov-report/map/api/hooks/index.html +43 -43
- package/coverage/lcov-report/map/api/hooks/index.js.html +12 -12
- package/coverage/lcov-report/map/api/index.html +31 -31
- package/coverage/lcov-report/map/api/index.js.html +24 -24
- package/coverage/lcov-report/map/api/marshall.js.html +39 -39
- package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +20 -20
- package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +22 -22
- package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +24 -24
- package/coverage/lcov-report/map/api/models/index.html +43 -43
- package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +21 -21
- package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +156 -156
- package/coverage/lcov-report/map/api/services/alerts/index.html +30 -30
- package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +19 -19
- package/coverage/lcov-report/map/api/services/catalog/index.html +17 -17
- package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
- package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +20 -20
- package/coverage/lcov-report/map/api/services/features/index.html +21 -21
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +8 -8
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +99 -99
- package/coverage/lcov-report/map/api/services/geocoder/index.html +28 -28
- package/coverage/lcov-report/map/api/services/index.html +21 -21
- package/coverage/lcov-report/map/api/services/index.js.html +71 -71
- package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +68 -68
- package/coverage/lcov-report/map/common/errors.js.html +9 -9
- package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +120 -120
- package/coverage/lcov-report/map/common/grid.js.html +268 -268
- package/coverage/lcov-report/map/common/index.html +149 -149
- package/coverage/lcov-report/map/common/index.js.html +31 -31
- package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +71 -71
- package/coverage/lcov-report/map/common/moment-utils.js.html +14 -14
- package/coverage/lcov-report/map/common/opendap-grid-source.js.html +280 -280
- package/coverage/lcov-report/map/common/opendap-utils.js.html +220 -220
- package/coverage/lcov-report/map/common/permissions.js.html +21 -21
- package/coverage/lcov-report/map/common/time-based-grid-source.js.html +51 -51
- package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wcs-grid-source.js.html +99 -99
- package/coverage/lcov-report/map/common/wcs-utils.js.html +66 -66
- package/coverage/lcov-report/map/common/weacast-grid-source.js.html +196 -196
- package/coverage/lcov-report/map/common/wfs-utils.js.html +8 -5
- package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wmts-utils.js.html +71 -11
- package/coverage/lcov.info +3530 -3606
- package/coverage/map/api/hooks/hooks.catalog.js.html +55 -55
- package/coverage/map/api/hooks/hooks.query.js.html +302 -275
- package/coverage/map/api/hooks/index.html +43 -43
- package/coverage/map/api/hooks/index.js.html +12 -12
- package/coverage/map/api/index.html +31 -31
- package/coverage/map/api/index.js.html +24 -24
- package/coverage/map/api/marshall.js.html +39 -39
- package/coverage/map/api/models/alerts.model.mongodb.js.html +20 -20
- package/coverage/map/api/models/catalog.model.mongodb.js.html +22 -22
- package/coverage/map/api/models/features.model.mongodb.js.html +24 -24
- package/coverage/map/api/models/index.html +43 -43
- package/coverage/map/api/services/alerts/alerts.hooks.js.html +21 -21
- package/coverage/map/api/services/alerts/alerts.service.js.html +156 -156
- package/coverage/map/api/services/alerts/index.html +30 -30
- package/coverage/map/api/services/catalog/catalog.hooks.js.html +19 -19
- package/coverage/map/api/services/catalog/index.html +17 -17
- package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
- package/coverage/map/api/services/daptiles/index.html +1 -1
- package/coverage/map/api/services/features/features.hooks.js.html +20 -20
- package/coverage/map/api/services/features/index.html +21 -21
- package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +8 -8
- package/coverage/map/api/services/geocoder/geocoder.service.js.html +99 -99
- package/coverage/map/api/services/geocoder/index.html +28 -28
- package/coverage/map/api/services/index.html +21 -21
- package/coverage/map/api/services/index.js.html +71 -71
- package/coverage/map/common/dynamic-grid-source.js.html +68 -68
- package/coverage/map/common/errors.js.html +9 -9
- package/coverage/map/common/geotiff-grid-source.js.html +120 -120
- package/coverage/map/common/grid.js.html +268 -268
- package/coverage/map/common/index.html +149 -149
- package/coverage/map/common/index.js.html +31 -31
- package/coverage/map/common/meteo-model-grid-source.js.html +71 -71
- package/coverage/map/common/moment-utils.js.html +14 -14
- package/coverage/map/common/opendap-grid-source.js.html +280 -280
- package/coverage/map/common/opendap-utils.js.html +220 -220
- package/coverage/map/common/permissions.js.html +21 -21
- package/coverage/map/common/time-based-grid-source.js.html +51 -51
- package/coverage/map/common/tms-utils.js.html +1 -1
- package/coverage/map/common/wcs-grid-source.js.html +99 -99
- package/coverage/map/common/wcs-utils.js.html +66 -66
- package/coverage/map/common/weacast-grid-source.js.html +196 -196
- package/coverage/map/common/wfs-utils.js.html +8 -5
- package/coverage/map/common/wms-utils.js.html +1 -1
- package/coverage/map/common/wmts-utils.js.html +71 -11
- package/extras/icons/kanban.png +0 -0
- package/extras/testcafe/page-models/map/catalog.js +2 -2
- package/extras/tours/core/add-member.js +10 -1
- package/extras/tours/core/{tag-member.js → edit-member-tags.js} +4 -3
- package/extras/tours/core/groups.js +8 -2
- package/extras/tours/core/members.js +11 -21
- package/extras/tours/core/tags.js +7 -1
- package/extras/tours/map/catalog-categories.js +4 -4
- package/extras/tours/map/catalog-panel.js +16 -16
- package/extras/tours/map/favorite-views.js +3 -3
- package/lib/core/api/hooks/hooks.authorisations.js +149 -140
- package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
- package/lib/core/api/hooks/hooks.organisations.js +1 -23
- package/lib/core/api/hooks/hooks.organisations.js.map +1 -1
- package/lib/core/api/hooks/hooks.query.js +22 -0
- package/lib/core/api/hooks/hooks.query.js.map +1 -1
- package/lib/core/api/hooks/hooks.users.js +34 -18
- package/lib/core/api/hooks/hooks.users.js.map +1 -1
- package/lib/core/api/services/authorisations/authorisations.service.js +34 -25
- package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
- package/lib/core/client/api.js +1 -0
- package/lib/core/client/api.js.map +1 -1
- package/lib/core/client/components/account/KAccountDZ.vue +3 -4
- package/lib/core/client/components/account/KAccountDevices.vue +5 -6
- package/lib/core/client/components/account/KDeviceCard.vue +2 -1
- package/lib/core/client/components/account/KIdentityPanel.vue +1 -7
- package/lib/core/client/components/collection/KBoard.vue +23 -158
- package/lib/core/client/components/collection/KCard.vue +144 -42
- package/lib/core/client/components/collection/KCardSection.vue +52 -0
- package/lib/core/client/components/collection/KColumn.vue +181 -0
- package/lib/core/client/components/collection/KFilter.vue +3 -2
- package/lib/core/client/components/collection/KGrid.vue +13 -18
- package/lib/core/client/components/collection/KHistory.vue +61 -89
- package/lib/core/client/components/collection/KHistoryEntry.vue +90 -66
- package/lib/core/client/components/collection/KItem.vue +21 -2
- package/lib/core/client/components/collection/KList.vue +9 -12
- package/lib/core/client/components/collection/KTable.vue +33 -39
- package/lib/core/client/components/collection/index.js +6 -1
- package/lib/core/client/components/collection/index.js.map +1 -1
- package/lib/core/client/components/editor/KEditor.vue +0 -6
- package/lib/core/client/components/editor/KModalEditor.vue +4 -4
- package/lib/core/client/components/editor/KSettingsEditor.vue +49 -0
- package/lib/core/client/components/form/KAttachmentField.vue +10 -10
- package/lib/core/client/components/form/KChipsField.vue +28 -23
- package/lib/core/client/components/form/KColorField.vue +30 -25
- package/lib/core/client/components/form/KForm.vue +0 -12
- package/lib/core/client/components/form/KIconField.vue +1 -0
- package/lib/core/client/components/form/KItemField.vue +8 -3
- package/lib/core/client/components/form/KRoleField.vue +56 -0
- package/lib/core/client/components/form/KSelectField.vue +16 -1
- package/lib/core/client/components/form/KView.vue +5 -14
- package/lib/core/client/components/frame/KAction.vue +18 -12
- package/lib/core/client/components/frame/KAvatar.vue +3 -3
- package/lib/core/client/components/frame/KChart.vue +60 -0
- package/lib/core/client/components/frame/KChipsPane.vue +80 -0
- package/lib/core/client/components/frame/KContent.vue +1 -1
- package/lib/core/client/components/frame/KModal.vue +30 -44
- package/lib/core/client/components/frame/KPanel.vue +1 -1
- package/lib/core/client/components/frame/{KMenu.vue → KPopupAction.vue} +6 -7
- package/lib/core/client/components/frame/KSpot.vue +31 -0
- package/lib/core/client/components/frame/KStamp.vue +62 -0
- package/lib/core/client/components/frame/index.js +56 -1
- package/lib/core/client/components/frame/index.js.map +1 -1
- package/lib/core/client/components/input/KColorChooser.vue +16 -8
- package/lib/core/client/components/input/KIconChooser.vue +2 -1
- package/lib/core/client/components/input/KUploader.vue +14 -5
- package/lib/core/client/components/layout/KAbout.vue +9 -3
- package/lib/core/client/components/layout/KFab.vue +1 -1
- package/lib/core/client/components/layout/KPage.vue +44 -19
- package/lib/core/client/components/layout/KTour.vue +2 -2
- package/lib/core/client/components/layout/KWelcome.vue +13 -12
- package/lib/core/client/components/layout/KWindow.vue +1 -1
- package/lib/core/client/components/media/KImageViewer.vue +9 -7
- package/lib/core/client/components/media/KMediaBrowser.vue +12 -8
- package/lib/core/client/components/menu/KMenu.vue +103 -0
- package/lib/core/client/components/team/KAddMember.vue +17 -9
- package/lib/core/client/components/team/KChangeRole.vue +5 -7
- package/lib/core/client/components/team/KGroupCard.vue +34 -51
- package/lib/core/client/components/team/KGroupsActivity.vue +9 -2
- package/lib/core/client/components/team/KJoinGroup.vue +5 -7
- package/lib/core/client/components/team/KMemberCard.vue +104 -63
- package/lib/core/client/components/team/KMembersActivity.vue +9 -2
- package/lib/core/client/components/team/KOrganisationsActivity.vue +8 -1
- package/lib/core/client/components/team/KTagCard.vue +26 -26
- package/lib/core/client/components/team/KTagsActivity.vue +9 -2
- package/lib/core/client/components/time/KTimeRange.vue +144 -0
- package/lib/core/client/components/viewer/KModalViewer.vue +6 -0
- package/lib/core/client/components/viewer/KViewer.vue +0 -6
- package/lib/core/client/i18n/core_en.json +132 -93
- package/lib/core/client/i18n/core_fr.json +55 -16
- package/lib/core/client/index.js +28 -14
- package/lib/core/client/index.js.map +1 -1
- package/lib/core/client/mixins/mixin.authorisation.js +28 -18
- package/lib/core/client/mixins/mixin.authorisation.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-collection.js +57 -9
- package/lib/core/client/mixins/mixin.base-collection.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-context.js +1 -1
- package/lib/core/client/mixins/mixin.base-context.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-editor.js +26 -16
- package/lib/core/client/mixins/mixin.base-editor.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-field.js +0 -4
- package/lib/core/client/mixins/mixin.base-field.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-item.js +29 -14
- package/lib/core/client/mixins/mixin.base-item.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-viewer.js +0 -2
- package/lib/core/client/mixins/mixin.base-viewer.js.map +1 -1
- package/lib/core/client/mixins/mixin.object-proxy.js +17 -3
- package/lib/core/client/mixins/mixin.object-proxy.js.map +1 -1
- package/lib/core/client/mixins/mixin.schema-proxy.js +31 -0
- package/lib/core/client/mixins/mixin.schema-proxy.js.map +1 -1
- package/lib/core/client/mixins/mixin.service.js +5 -33
- package/lib/core/client/mixins/mixin.service.js.map +1 -1
- package/lib/core/client/services/index.js +23 -0
- package/lib/core/client/services/index.js.map +1 -1
- package/lib/core/client/services/local-settings.service.js +4 -0
- package/lib/core/client/services/local-settings.service.js.map +1 -1
- package/lib/core/client/time.js +131 -0
- package/lib/core/client/time.js.map +1 -0
- package/lib/core/common/permissions.js +65 -23
- package/lib/core/common/permissions.js.map +1 -1
- package/lib/core/common/schemas/groups.create.json +1 -1
- package/lib/core/common/schemas/groups.update.json +1 -1
- package/lib/core/common/schemas/organisations.create.json +1 -1
- package/lib/core/common/schemas/organisations.update.json +2 -2
- package/lib/core/common/schemas/settings.update.json +139 -0
- package/lib/core/common/schemas/tags.update.json +9 -1
- package/lib/map/api/hooks/hooks.query.js +48 -27
- package/lib/map/api/hooks/hooks.query.js.map +1 -1
- package/lib/map/api/services/features/features.hooks.js +1 -1
- package/lib/map/api/services/features/features.hooks.js.map +1 -1
- package/lib/map/client/components/KColorLegend.vue +25 -23
- package/lib/map/client/components/KFavoriteViews.vue +71 -35
- package/lib/map/client/components/KFeaturesChart.vue +11 -9
- package/lib/map/client/components/KFeaturesFilter.vue +15 -7
- package/lib/map/client/components/KFeaturesTable.vue +27 -2
- package/lib/map/client/components/KLayerEditionToolbar.vue +43 -0
- package/lib/map/client/components/KLayerStyleEditor.vue +10 -4
- package/lib/map/client/components/KLayerStyleForm.vue +14 -11
- package/lib/map/client/components/KLocationInput.vue +126 -65
- package/lib/map/client/components/KLocationMap.vue +199 -84
- package/lib/map/client/components/KTimeline.vue +41 -36
- package/lib/map/client/components/KUrlLegend.vue +21 -19
- package/lib/map/client/components/catalog/KBaseLayersSelector.vue +105 -0
- package/lib/map/client/components/catalog/KCatalog.vue +15 -3
- package/lib/map/client/components/catalog/KConnectLayer.vue +31 -11
- package/lib/map/client/components/catalog/KCreateLayer.vue +37 -14
- package/lib/map/client/components/catalog/KImportLayer.vue +28 -8
- package/lib/map/client/components/catalog/KLayerCategories.vue +86 -62
- package/lib/map/client/components/catalog/KLayersSelector.vue +42 -42
- package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +3 -3
- package/lib/map/client/components/form/KLocationField.vue +1 -1
- package/lib/map/client/components/form/KOwsLayerField.vue +14 -2
- package/lib/map/client/components/form/KOwsServiceField.vue +1 -0
- package/lib/map/client/components/widget/KInformationBox.vue +10 -16
- package/lib/map/client/components/widget/KMapillaryViewer.vue +59 -49
- package/lib/map/client/components/widget/KTimeSeries.vue +39 -29
- package/lib/map/client/i18n/map_en.json +63 -16
- package/lib/map/client/i18n/map_fr.json +66 -20
- package/lib/map/client/init.js +18 -6
- package/lib/map/client/init.js.map +1 -1
- package/lib/map/client/leaflet/GSMaPLayer.js +4 -9
- package/lib/map/client/leaflet/GSMaPLayer.js.map +1 -1
- package/lib/map/client/leaflet/GradientPath.js +6 -1
- package/lib/map/client/leaflet/GradientPath.js.map +1 -1
- package/lib/map/client/leaflet/MaskLayer.js +64 -0
- package/lib/map/client/leaflet/MaskLayer.js.map +1 -0
- package/lib/map/client/mixins/globe/mixin.base-globe.js +4 -1
- package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.geojson-layers.js +7 -9
- package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
- package/lib/map/client/mixins/index.js +8 -13
- package/lib/map/client/mixins/index.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.base-map.js +30 -6
- package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.canvas-layers.js +275 -52
- package/lib/map/client/mixins/map/mixin.canvas-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.edit-layers.js +218 -121
- package/lib/map/client/mixins/map/mixin.edit-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.file-layers.js +25 -18
- package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.geojson-layers.js +18 -10
- package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.georaster-layers.js +7 -4
- package/lib/map/client/mixins/map/mixin.georaster-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.gsmap-layers.js +3 -3
- package/lib/map/client/mixins/map/mixin.gsmap-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.heatmap-layers.js +8 -10
- package/lib/map/client/mixins/map/mixin.heatmap-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.mapillary-layers.js +25 -40
- package/lib/map/client/mixins/map/mixin.mapillary-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js +5 -3
- package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js +5 -3
- package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js.map +1 -1
- package/lib/map/client/mixins/mixin.activity.js +60 -68
- package/lib/map/client/mixins/mixin.activity.js.map +1 -1
- package/lib/map/client/mixins/mixin.feature-selection.js +8 -10
- package/lib/map/client/mixins/mixin.feature-selection.js.map +1 -1
- package/lib/map/client/mixins/mixin.feature-service.js +7 -5
- package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
- package/lib/map/client/mixins/mixin.weacast.js +6 -4
- package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
- package/lib/map/client/pixi-utils.js +9 -0
- package/lib/map/client/pixi-utils.js.map +1 -1
- package/lib/map/client/utils.js +50 -0
- package/lib/map/client/utils.js.map +1 -1
- package/lib/map/common/wfs-utils.js +1 -1
- package/lib/map/common/wfs-utils.js.map +1 -1
- package/lib/map/common/wmts-utils.js +31 -7
- package/lib/map/common/wmts-utils.js.map +1 -1
- package/lib/test/client/core/account.js +100 -0
- package/lib/test/client/core/account.js.map +1 -0
- package/lib/test/client/core/api.js +400 -0
- package/lib/test/client/core/api.js.map +1 -0
- package/lib/test/client/core/collection.js +109 -0
- package/lib/test/client/core/collection.js.map +1 -0
- package/lib/test/client/core/index.js +90 -0
- package/lib/test/client/core/index.js.map +1 -0
- package/lib/test/client/core/layout.js +221 -0
- package/lib/test/client/core/layout.js.map +1 -0
- package/lib/test/client/core/runner.js +204 -0
- package/lib/test/client/core/runner.js.map +1 -0
- package/lib/test/client/core/screens.js +68 -0
- package/lib/test/client/core/screens.js.map +1 -0
- package/lib/test/client/core/utils.js +304 -0
- package/lib/test/client/core/utils.js.map +1 -0
- package/lib/test/client/index.js +20 -0
- package/lib/test/client/index.js.map +1 -0
- package/lib/test/client/map/catalog.js +191 -0
- package/lib/test/client/map/catalog.js.map +1 -0
- package/lib/test/client/map/controls.js +54 -0
- package/lib/test/client/map/controls.js.map +1 -0
- package/lib/test/client/map/index.js +30 -0
- package/lib/test/client/map/index.js.map +1 -0
- package/package.json +17 -9
- package/test.client.js +1 -0
- package/tests/core/test-log-2021-07-15.log +71 -0
- package/tests/core/test-log-2021-09-02.log +47 -0
- package/tests/map/test-log-%DATE%.logYYYY-07-DD +12 -0
- package/tests/map/test-log-%DATE%.logYYYY-09-DD +6 -0
- package/tests/map/test-log-2021-07-12.log +12 -0
- package/tests/map/test-log-2021-07-15.log +5 -0
- package/tests/map/test-log-2021-09-02.log +3 -0
- package/.nyc_output/11cd93d8-69cb-405c-98a3-d249ea35b6da.json +0 -1
- package/.nyc_output/2bece194-92f7-4971-a688-10604044a7fa.json +0 -1
- package/.nyc_output/5ddee33e-b658-4c8e-a247-54f575ac67e8.json +0 -1
- package/.nyc_output/78760ae4-555f-4d9c-a6a1-acf5e2f0fe45.json +0 -1
- package/.nyc_output/d0bb2559-084e-4c92-b9e6-29a9abd41f7c.json +0 -1
- package/.nyc_output/processinfo/0b8aa700-8daa-49ce-85e7-a8f8965d55f0.json +0 -1
- package/.nyc_output/processinfo/11cd93d8-69cb-405c-98a3-d249ea35b6da.json +0 -1
- package/.nyc_output/processinfo/20df4355-911a-4b16-a8ab-d3392e9f0a7f.json +0 -1
- package/.nyc_output/processinfo/257af0bb-96c3-465a-b5ef-a1df60078d5f.json +0 -1
- package/.nyc_output/processinfo/284aebfa-23fd-425f-9d72-e4b8904dc224.json +0 -1
- package/.nyc_output/processinfo/5cbee06e-be6e-468a-bd78-4793ee785fe4.json +0 -1
- package/.nyc_output/processinfo/5ddee33e-b658-4c8e-a247-54f575ac67e8.json +0 -1
- package/.nyc_output/processinfo/78760ae4-555f-4d9c-a6a1-acf5e2f0fe45.json +0 -1
- package/.nyc_output/processinfo/d0bb2559-084e-4c92-b9e6-29a9abd41f7c.json +0 -1
- package/lib/core/client/components/frame/KLabel.vue +0 -56
- package/lib/core/client/components/team/KTagsPane.vue +0 -35
- package/lib/map/client/leaflet/TiledMapillaryLayer.js +0 -137
- package/lib/map/client/leaflet/TiledMapillaryLayer.js.map +0 -1
- package/lib/map/client/mixins/mixin.time.js +0 -73
- package/lib/map/client/mixins/mixin.time.js.map +0 -1
- package/tests/core/account.test.js +0 -415
- package/tests/core/client.test.js.skip +0 -37
- package/tests/core/config/default.js +0 -97
- package/tests/core/config/email-templates/confirmInvitation/html.ejs +0 -18
- package/tests/core/config/email-templates/identityChange/html.ejs +0 -12
- package/tests/core/config/email-templates/newDevice/html.ejs +0 -7
- package/tests/core/config/email-templates/passwordChange/html.ejs +0 -5
- package/tests/core/config/email-templates/resendVerifySignup/html.ejs +0 -10
- package/tests/core/config/email-templates/resetPwd/html.ejs +0 -5
- package/tests/core/config/email-templates/sendResetPwd/html.ejs +0 -8
- package/tests/core/config/email-templates/verifySignup/html.ejs +0 -3
- package/tests/core/data/10k_most_common_passwords.txt +0 -10000
- package/tests/core/data/logo.png +0 -0
- package/tests/core/hooks.test.js +0 -175
- package/tests/core/index.test.js +0 -418
- package/tests/core/notifications.test.js +0 -465
- package/tests/core/storage.test.js +0 -134
- package/tests/core/team.test.js +0 -610
- package/tests/core/utils.js +0 -59
- package/tests/map/alerts.test.js +0 -554
- package/tests/map/config/default.js +0 -112
- package/tests/map/config/layers.json +0 -37
- package/tests/map/daptiles.test.js +0 -41
- package/tests/map/data/DescribeCoverage.xml +0 -55
- package/tests/map/data/GetCoverage.tif +0 -0
- package/tests/map/data/adsb.observations.json +0 -132
- package/tests/map/data/dataset.grb.das +0 -55
- package/tests/map/data/dataset.grb.dds +0 -17
- package/tests/map/data/dataset.grb.dods +0 -0
- package/tests/map/data/lat_lon_bounds.grb.dods +0 -0
- package/tests/map/data/subdataset.grb.dods +0 -0
- package/tests/map/data/vigicrues.observations.json +0 -47042
- package/tests/map/data/vigicrues.stations.json +0 -15422
- package/tests/map/data/zones.json +0 -1228
- package/tests/map/grid-sources.test.js +0 -304
- package/tests/map/hooks.test.js +0 -96
- package/tests/map/index.test.js +0 -333
|
@@ -30,6 +30,8 @@ var _explode2 = _interopRequireDefault(_explode);
|
|
|
30
30
|
|
|
31
31
|
var _quasar = require('quasar');
|
|
32
32
|
|
|
33
|
+
var _time = require('../../../core/client/time');
|
|
34
|
+
|
|
33
35
|
var _layout = require('../../../core/client/layout');
|
|
34
36
|
|
|
35
37
|
var _utils = require('../utils');
|
|
@@ -165,7 +167,7 @@ exports.default = {
|
|
|
165
167
|
|
|
166
168
|
return _asyncToGenerator(function* () {
|
|
167
169
|
// Clear layers and variables
|
|
168
|
-
_this6.
|
|
170
|
+
_this6.clearLayers();
|
|
169
171
|
_this6.variables = [];
|
|
170
172
|
let catalogLayers = yield _this6.getCatalogLayers();
|
|
171
173
|
// Apply global layer filter
|
|
@@ -484,68 +486,58 @@ exports.default = {
|
|
|
484
486
|
});
|
|
485
487
|
})();
|
|
486
488
|
},
|
|
489
|
+
editLayerByName(name, editOptions = {}) {
|
|
490
|
+
// this one is used through postRobot to trigger edition
|
|
491
|
+
// on a layer
|
|
492
|
+
const layer = this.getLayerByName(name);
|
|
493
|
+
if (!layer) return;
|
|
494
|
+
this.startEditLayer(layer, editOptions);
|
|
495
|
+
},
|
|
487
496
|
onEditLayerData(layer) {
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
if (_this15.editedLayerToast) {
|
|
501
|
-
_this15.editedLayerToast();
|
|
502
|
-
} else {
|
|
503
|
-
toggle();
|
|
504
|
-
}
|
|
505
|
-
// Create new toast if required
|
|
506
|
-
if (_this15.isLayerEdited(layer)) {
|
|
507
|
-
_this15.editedLayerToast = _this15.$toast({
|
|
508
|
-
type: 'warning',
|
|
509
|
-
timeout: 0, // persistent
|
|
510
|
-
position: 'top-left',
|
|
511
|
-
message: _this15.$t('mixins.activity.EDITING_DATA_MESSAGE'),
|
|
512
|
-
caption: _this15.$t(layer.name),
|
|
513
|
-
onDismiss: toggle
|
|
514
|
-
});
|
|
515
|
-
}
|
|
516
|
-
})();
|
|
497
|
+
// this one is triggered by a layer action (toggle)
|
|
498
|
+
if (this.isLayerEdited(layer)) {
|
|
499
|
+
// always accept editions in the action
|
|
500
|
+
this.stopEditLayer('accept');
|
|
501
|
+
} else {
|
|
502
|
+
// start editing properties by default
|
|
503
|
+
this.startEditLayer(layer, { editMode: 'edit-properties' });
|
|
504
|
+
}
|
|
505
|
+
},
|
|
506
|
+
onEndLayerEdition(status = 'accept') {
|
|
507
|
+
// this one can be triggered from a toolbar to accept or reject changes
|
|
508
|
+
this.stopEditLayer(status);
|
|
517
509
|
},
|
|
518
510
|
onRemoveLayer(layer) {
|
|
519
|
-
var
|
|
511
|
+
var _this15 = this;
|
|
520
512
|
|
|
521
513
|
return _asyncToGenerator(function* () {
|
|
522
514
|
_quasar.Dialog.create({
|
|
523
|
-
title:
|
|
524
|
-
message:
|
|
515
|
+
title: _this15.$t('mixins.activity.REMOVE_DIALOG_TITLE', { layer: layer.name }),
|
|
516
|
+
message: _this15.$t('mixins.activity.REMOVE_DIALOG_MESSAGE', { layer: layer.name }),
|
|
525
517
|
html: true,
|
|
526
518
|
ok: {
|
|
527
|
-
label:
|
|
519
|
+
label: _this15.$t('OK'),
|
|
528
520
|
flat: true
|
|
529
521
|
},
|
|
530
522
|
cancel: {
|
|
531
|
-
label:
|
|
523
|
+
label: _this15.$t('CANCEL'),
|
|
532
524
|
flat: true
|
|
533
525
|
}
|
|
534
526
|
}).onOk(_asyncToGenerator(function* () {
|
|
535
|
-
_quasar.Loading.show({ message:
|
|
527
|
+
_quasar.Loading.show({ message: _this15.$t('mixins.activity.REMOVING_LABEL') });
|
|
536
528
|
try {
|
|
537
529
|
// Stop any running edition
|
|
538
|
-
if (
|
|
530
|
+
if (_this15.isLayerEdited(layer)) _this15.onEditLayerData(layer);
|
|
539
531
|
if (layer._id) {
|
|
540
532
|
// If persistent feature layer remove features as well
|
|
541
|
-
if (
|
|
542
|
-
yield
|
|
533
|
+
if (_this15.isFeatureLayer(layer)) {
|
|
534
|
+
yield _this15.removeFeatures(layer._id);
|
|
543
535
|
}
|
|
544
|
-
yield
|
|
536
|
+
yield _this15.$api.getService('catalog').remove(layer._id);
|
|
545
537
|
}
|
|
546
538
|
// Actual layer removal should be triggerred by real-time event
|
|
547
539
|
// but as we might not always use sockets perform it anyway
|
|
548
|
-
|
|
540
|
+
_this15.removeLayer(layer.name);
|
|
549
541
|
} catch (error) {
|
|
550
542
|
// User error message on operation should be raised by error hook, otherwise this is more a coding error
|
|
551
543
|
_loglevel2.default.error(error);
|
|
@@ -563,7 +555,7 @@ exports.default = {
|
|
|
563
555
|
this.engine = 'cesium';
|
|
564
556
|
},
|
|
565
557
|
getProbeTimeRange() {
|
|
566
|
-
const start =
|
|
558
|
+
const start = _time.Time.getCurrentTime().clone();
|
|
567
559
|
const end = start.clone();
|
|
568
560
|
const span = this.$store.get('timeseries.span');
|
|
569
561
|
// We center on current time with the same span on past/future
|
|
@@ -581,52 +573,52 @@ exports.default = {
|
|
|
581
573
|
if (!this.$q.fullscreen.isActive) this.$q.fullscreen.request();else this.$q.fullscreen.exit();
|
|
582
574
|
},
|
|
583
575
|
initialize() {
|
|
584
|
-
var
|
|
576
|
+
var _this16 = this;
|
|
585
577
|
|
|
586
578
|
return _asyncToGenerator(function* () {
|
|
587
579
|
// Check if the activity is using context restoration
|
|
588
|
-
const hasContext = typeof
|
|
580
|
+
const hasContext = typeof _this16.restoreContext === 'function';
|
|
589
581
|
// Geolocate by default if view has not been restored
|
|
590
|
-
const viewRestored = hasContext ? yield
|
|
582
|
+
const viewRestored = hasContext ? yield _this16.restoreContext('view') : false;
|
|
591
583
|
if (!viewRestored) {
|
|
592
584
|
// Provided by geolocation if enabled
|
|
593
|
-
if (!
|
|
594
|
-
const position =
|
|
595
|
-
if (position)
|
|
585
|
+
if (!_this16.$geolocation.get().position) yield _this16.$geolocation.update();
|
|
586
|
+
const position = _this16.$geolocation.get().position;
|
|
587
|
+
if (position) _this16.center(position.longitude, position.latitude);
|
|
596
588
|
}
|
|
597
589
|
// Retrieve the forecast models
|
|
598
|
-
if (
|
|
590
|
+
if (_this16.setupWeacast) {
|
|
599
591
|
try {
|
|
600
|
-
yield
|
|
592
|
+
yield _this16.setupWeacast();
|
|
601
593
|
} catch (error) {
|
|
602
594
|
_loglevel2.default.error(error);
|
|
603
595
|
}
|
|
604
|
-
|
|
605
|
-
return
|
|
596
|
+
_this16.forecastModelHandlers = { toggle: function (model) {
|
|
597
|
+
return _this16.setForecastModel(model);
|
|
606
598
|
} };
|
|
607
599
|
} else {
|
|
608
|
-
|
|
600
|
+
_this16.forecastModelHandlers = {};
|
|
609
601
|
}
|
|
610
602
|
// Retrieve the layers
|
|
611
603
|
try {
|
|
612
|
-
yield
|
|
613
|
-
yield
|
|
614
|
-
if (hasContext) yield
|
|
604
|
+
yield _this16.refreshLayerCategories();
|
|
605
|
+
yield _this16.refreshLayers();
|
|
606
|
+
if (hasContext) yield _this16.restoreContext('layers');
|
|
615
607
|
} catch (error) {
|
|
616
608
|
_loglevel2.default.error(error);
|
|
617
609
|
}
|
|
618
610
|
// Listen about changes in global/contextual catalog services
|
|
619
|
-
const globalCatalogService =
|
|
620
|
-
const catalogService =
|
|
611
|
+
const globalCatalogService = _this16.$api.getService('catalog', '');
|
|
612
|
+
const catalogService = _this16.$api.getService('catalog');
|
|
621
613
|
// Keep track of binded listeners as we use the same function with different contexts
|
|
622
|
-
|
|
614
|
+
_this16.catalogListeners = {};
|
|
623
615
|
globalCatalogService._serviceEvents.forEach(function (event) {
|
|
624
|
-
|
|
625
|
-
return
|
|
616
|
+
_this16.catalogListeners[event] = function (object) {
|
|
617
|
+
return _this16.onCatalogUpdated(event, object);
|
|
626
618
|
};
|
|
627
|
-
globalCatalogService.on(event,
|
|
619
|
+
globalCatalogService.on(event, _this16.catalogListeners[event]);
|
|
628
620
|
if (catalogService && catalogService !== globalCatalogService) {
|
|
629
|
-
catalogService.on(event,
|
|
621
|
+
catalogService.on(event, _this16.catalogListeners[event]);
|
|
630
622
|
}
|
|
631
623
|
});
|
|
632
624
|
})();
|
|
@@ -644,13 +636,13 @@ exports.default = {
|
|
|
644
636
|
this.catalogListeners = {};
|
|
645
637
|
},
|
|
646
638
|
onCatalogUpdated(event, object) {
|
|
647
|
-
var
|
|
639
|
+
var _this17 = this;
|
|
648
640
|
|
|
649
641
|
return _asyncToGenerator(function* () {
|
|
650
642
|
switch (object.type) {
|
|
651
643
|
case 'Category':
|
|
652
644
|
// In any case we rebuild categories
|
|
653
|
-
|
|
645
|
+
_this17.refreshLayerCategories();
|
|
654
646
|
break;
|
|
655
647
|
case 'Context':
|
|
656
648
|
case 'Service':
|
|
@@ -661,9 +653,9 @@ exports.default = {
|
|
|
661
653
|
// Updating a layer requires to remove/add it again to cover all use cases
|
|
662
654
|
// (eg style edition, etc.)
|
|
663
655
|
// Here we find layer by ID as renaming could have occured from another client
|
|
664
|
-
const layers =
|
|
665
|
-
if (layers.length > 0) yield
|
|
666
|
-
if (event !== 'removed') yield
|
|
656
|
+
const layers = _this17.getLayers({ _id: object._id });
|
|
657
|
+
if (layers.length > 0) yield _this17.removeCatalogLayer(layers[0]);
|
|
658
|
+
if (event !== 'removed') yield _this17.addCatalogLayer(object);
|
|
667
659
|
break;
|
|
668
660
|
}
|
|
669
661
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../map/client/mixins/mixin.activity.js"],"names":["data","forecastModelHandlers","layerCategories","variables","engine","engineReady","engineContainerWidth","engineContainerHeight","computed","viewStyle","variablesForCurrentLevel","map","variable","Object","assign","name","selectedLevel","_","omit","currentVariables","hasSelectableLevels","methods","is2D","is3D","getFeatureActions","feature","layer","getCatalogLayers","layers","globalCatalogService","$api","getService","response","find","concat","catalogService","gatewayToken","get","getItem","$config","addCatalogLayer","i18n","locale","kCoreUtils","getAppLocale","i18next","addResourceBundle","$t","label","description","isWeacastLayer","startsWith","weacastApi","forecastModel","addLayer","uniqBy","removeCatalogLayer","removeLayer","getCatalogCategories","categories","query","type","refreshLayerCategories","refreshLayers","catalogLayers","filter","i","length","hasVisibleBaseLayer","isVisible","baseLayer","showLayer","isUserLayer","isFeatureLayer","hasFeatureSchema","has","isLayerSelectable","isLayerEdited","isLayerStorable","_id","isLayerEditable","isLayerRemovable","isLayerStyleEditable","isLayerDataEditable","resetLayer","isLayerVisible","configureLayerActions","actions","activityOptions","Layout","filterContent","bindContent","cloneDeep","push","id","handler","onTriggerLayer","$set","onLayerAdded","hideLayer","hasContext","storeContext","onZoomIn","center","getCenter","longitude","latitude","zoomLevel","altitude","onZoomOut","onZoomToLayer","zoomToLayer","onSaveLayer","geoJson","toGeoJson","check","checkFeatures","kinks","result","dialog","title","features","message","options","model","items","value","html","ok","flat","cancel","includes","downloadAsBlob","JSON","stringify","set","nbPoints","forEach","Loading","show","processed","total","createdLayer","create","chunkSize","nbFeatures","createFeatures","chunk","patch","baseQuery","$toast","timeout","error","logger","hide","onFilterLayerData","filterModal","$createComponent","propsData","contextId","$mount","open","$on","closeModal","onViewLayerData","viewModal","featureActions","tooltip","icon","context","item","onChartLayerData","chartModal","onEditLayer","editModal","service","objectId","openModal","updatedLayer","renameLayer","onEditLayerStyle","editStyleModal","updateLayer","onEditLayerData","toggle","editLayer","editedLayerToast","position","caption","onDismiss","onRemoveLayer","Dialog","onOk","removeFeatures","remove","onMapReady","onGlobeReady","getProbeTimeRange","start","currentTime","clone","end","span","$store","subtract","add","onProbeLocation","setCursor","$once","unsetCursor","onToggleFullscreen","$q","fullscreen","isActive","request","exit","initialize","restoreContext","viewRestored","$geolocation","update","setupWeacast","setForecastModel","catalogListeners","_serviceEvents","event","object","onCatalogUpdated","on","finalize","removeListener","getLayers","mounted","beforeDestroy","$off"],"mappings":"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","file":"mixin.activity.js","sourcesContent":["import _ from 'lodash'\r\nimport i18next from 'i18next'\r\nimport sift from 'sift'\r\nimport logger from 'loglevel'\r\nimport centroid from '@turf/centroid'\r\nimport explode from '@turf/explode'\r\nimport { Loading, Dialog } from 'quasar'\r\nimport { Layout } from '../../../core/client/layout'\r\nimport { setGatewayJwt } from '../utils'\r\nimport { utils as kCoreUtils } from '../../../core/client'\r\n\r\nexport default {\r\n data () {\r\n return {\r\n forecastModelHandlers: {},\r\n layerCategories: [],\r\n variables: [],\r\n engine: 'leaflet',\r\n engineReady: false,\r\n engineContainerWidth: null,\r\n engineContainerHeight: null\r\n }\r\n },\r\n computed: {\r\n viewStyle () {\r\n return 'width: 100%; height: 100%; fontWeight: normal; zIndex: 0; position: absolute;'\r\n },\r\n variablesForCurrentLevel () {\r\n return this.variables.map(variable => Object.assign({ name: `${variable.name}-${this.selectedLevel}` }, _.omit(variable, ['name'])))\r\n },\r\n currentVariables () {\r\n return this.hasSelectableLevels ? this.variablesForCurrentLevel : this.variables\r\n }\r\n },\r\n methods: {\r\n is2D () {\r\n return (this.engine === 'leaflet')\r\n },\r\n is3D () {\r\n return (this.engine === 'cesium')\r\n },\r\n // This method should be overriden in activities\r\n getFeatureActions (feature, layer) {\r\n return []\r\n },\r\n async getCatalogLayers () {\r\n let layers = []\r\n // We get layers coming from global catalog first if any\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n if (globalCatalogService) {\r\n const response = await globalCatalogService.find()\r\n layers = layers.concat(response.data)\r\n }\r\n // Then we get layers coming from contextual catalog if any\r\n const catalogService = this.$api.getService('catalog')\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n const response = await catalogService.find()\r\n layers = layers.concat(response.data)\r\n }\r\n const gatewayToken = this.$api.get('storage').getItem(this.$config('gatewayJwt'))\r\n return (gatewayToken ? setGatewayJwt(layers, gatewayToken) : layers)\r\n },\r\n async addCatalogLayer (layer) {\r\n // Check if available for current engine\r\n if (layer[this.engine]) {\r\n // Process i18n\r\n if (layer.i18n) {\r\n const locale = kCoreUtils.getAppLocale()\r\n const i18n = _.get(layer.i18n, locale)\r\n if (i18n) i18next.addResourceBundle(locale, 'kdk', i18n, true, true)\r\n }\r\n if (this.$t(layer.name)) layer.label = this.$t(layer.name)\r\n if (this.$t(layer.description)) layer.description = this.$t(layer.description)\r\n // Check for Weacast API availability\r\n const isWeacastLayer = _.get(layer, `${this.engine}.type`, '').startsWith('weacast.')\r\n if (isWeacastLayer && (!this.weacastApi || !this.forecastModel)) return\r\n await this.addLayer(layer)\r\n }\r\n // Filter layers with variables, not just visible ones because we might want to\r\n // probe weather even if there is no visual representation (e.g. in globe)\r\n if (layer.variables) this.variables = _.uniqBy(this.variables.concat(layer.variables), (variable) => variable.name)\r\n },\r\n async removeCatalogLayer (layer) {\r\n // Check if available for current engine\r\n if (layer[this.engine]) {\r\n await this.removeLayer(layer.name)\r\n }\r\n },\r\n async getCatalogCategories () {\r\n let categories = []\r\n // We get categories coming from global catalog first if any\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n if (globalCatalogService) {\r\n const response = await globalCatalogService.find({ query: { type: 'Category' } })\r\n categories = categories.concat(response.data)\r\n }\r\n // Then we get categories coming from contextual catalog if any\r\n const catalogService = this.$api.getService('catalog')\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n const response = await catalogService.find({ query: { type: 'Category' } })\r\n categories = categories.concat(response.data)\r\n }\r\n return categories\r\n },\r\n async refreshLayerCategories () {\r\n // Merge built-in categories with user-defiend ones\r\n this.layerCategories = await this.getCatalogCategories()\r\n this.layerCategories = this.layerCategories.concat(_.get(this, 'activityOptions.catalog.categories', []))\r\n },\r\n async refreshLayers () {\r\n // Clear layers and variables\r\n this.layers = {}\r\n this.variables = []\r\n let catalogLayers = await this.getCatalogLayers()\r\n // Apply global layer filter\r\n catalogLayers = catalogLayers.filter(sift(_.get(this, 'activityOptions.catalog.filter', {})))\r\n // Iterate and await layers as creation is async and we need to have all layers ready\r\n // before checking if there is some background layer\r\n for (let i = 0; i < catalogLayers.length; i++) {\r\n await this.addCatalogLayer(catalogLayers[i])\r\n }\r\n // We need at least an active background\r\n const hasVisibleBaseLayer = catalogLayers.find((layer) => (layer.type === 'BaseLayer') && layer.isVisible)\r\n if (!hasVisibleBaseLayer) {\r\n const baseLayer = catalogLayers.find((layer) => (layer.type === 'BaseLayer'))\r\n if (baseLayer) await this.showLayer(baseLayer.name)\r\n }\r\n },\r\n isUserLayer (layer) {\r\n return (_.get(layer, 'scope') === 'user')\r\n },\r\n isFeatureLayer (layer) {\r\n return (_.get(layer, 'service') === 'features')\r\n },\r\n hasFeatureSchema (layer) {\r\n return _.has(layer, 'schema')\r\n },\r\n isLayerSelectable (layer) {\r\n // Only possible when not edited by default\r\n if ((typeof this.isLayerEdited === 'function') && this.isLayerEdited(layer)) return false\r\n return _.get(layer, 'isSelectable', true)\r\n },\r\n isLayerStorable (layer) {\r\n // Only possible when not saved by default\r\n if (layer._id) return false\r\n return _.get(layer, 'isStorable', this.isUserLayer(layer))\r\n },\r\n isLayerEditable (layer) {\r\n // Only possible when saved by default\r\n if (!layer._id) return false\r\n return _.get(layer, 'isEditable', this.isUserLayer(layer))\r\n },\r\n isLayerRemovable (layer) {\r\n return _.get(layer, 'isRemovable', this.isUserLayer(layer))\r\n },\r\n isLayerStyleEditable (layer) {\r\n return _.get(layer, 'isStyleEditable', this.isUserLayer(layer))\r\n },\r\n isLayerDataEditable (layer) {\r\n return _.get(layer, 'isDataEditable', this.isUserLayer(layer) && this.isFeatureLayer(layer))\r\n },\r\n async resetLayer (layer) {\r\n // Reset layer with new setup but keep track of current visibility state\r\n // as adding the layer back will restore default visibility state\r\n const isVisible = this.isLayerVisible(layer.name)\r\n await this.removeLayer(layer.name)\r\n await this.addLayer(layer)\r\n if (isVisible) await this.showLayer(layer.name)\r\n },\r\n configureLayerActions (layer) {\r\n let actions = _.get(this.activityOptions, 'layers.actions')\r\n if (actions) {\r\n // Apply filtering\r\n actions = Layout.filterContent(actions, _.get(this.activityOptions, 'layers.filter', {}))\r\n }\r\n // As context is different for each item we need to clone the global action configuration\r\n // otheriwse context will always reference the last processed item\r\n actions = Layout.bindContent(_.cloneDeep(actions), this)\r\n // Add 'virtual' action used to trigger the layer\r\n actions.push({ id: 'toggle', handler: () => this.onTriggerLayer(layer) })\r\n // Store the actions and make it reactive\r\n this.$set(layer, 'actions', actions)\r\n return actions\r\n },\r\n onLayerAdded (layer) {\r\n this.configureLayerActions(layer)\r\n },\r\n async onTriggerLayer (layer) {\r\n if (!this.isLayerVisible(layer.name)) {\r\n await this.showLayer(layer.name)\r\n } else {\r\n await this.hideLayer(layer.name)\r\n }\r\n // Check if the activity is using context restoration\r\n const hasContext = (typeof this.storeContext === 'function')\r\n if (hasContext) this.storeContext('layers')\r\n },\r\n onZoomIn () {\r\n const center = this.getCenter()\r\n this.center(center.longitude, center.latitude, center.zoomLevel ? center.zoomLevel + 1 : center.altitude * 0.5)\r\n },\r\n onZoomOut () {\r\n const center = this.getCenter()\r\n this.center(center.longitude, center.latitude, center.zoomLevel ? center.zoomLevel - 1 : center.altitude * 2)\r\n },\r\n onZoomToLayer (layer) {\r\n this.zoomToLayer(layer.name)\r\n },\r\n async onSaveLayer (layer) {\r\n // Take care that WFS layers rely on the same type as our own feature layers\r\n if (!_.has(layer, 'wfs') && _.get(layer, `${this.engine}.type`) === 'geoJson') {\r\n const geoJson = this.toGeoJson(layer.name)\r\n // Check for invalid features first\r\n const check = this.checkFeatures(geoJson)\r\n if (check.kinks.length > 0) {\r\n const result = await kCoreUtils.dialog({\r\n title: this.$t('mixins.activity.INVALID_FEATURES_DIALOG_TITLE', { features: check.kinks }),\r\n message: this.$t('mixins.activity.INVALID_FEATURES_DIALOG_MESSAGE', { features: check.kinks }),\r\n options: {\r\n type: 'toggle',\r\n model: [],\r\n items: [\r\n { label: this.$t('mixins.activity.DOWNLOAD_INVALID_FEATURES_LABEL'), value: 'download' }\r\n ]\r\n },\r\n html: true,\r\n ok: {\r\n label: this.$t('OK'),\r\n flat: true\r\n },\r\n cancel: {\r\n label: this.$t('CANCEL'),\r\n flat: true\r\n }\r\n })\r\n if (!result.ok) return\r\n // Export invalid features if required\r\n if (_.get(result, 'data', []).includes('download')) {\r\n kCoreUtils.downloadAsBlob(JSON.stringify({ type: 'FeatureCollection', features: check.kinks }),\r\n this.$t('mixins.activity.INVALID_FEATURES_FILE'), 'application/json;charset=utf-8;')\r\n }\r\n }\r\n // Change data source from in-memory to features service\r\n _.set(layer, 'service', 'features')\r\n if (_.has(layer, 'leaflet')) _.set(layer, 'leaflet.source', '/api/features')\r\n if (_.has(layer, 'cesium')) _.set(layer, 'cesium.source', '/api/features')\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n // If too much data use tiling\r\n // The threshold is based on the number of points and not features.\r\n // Indeed otherwise the complexity will be different depending on the geometry type\r\n // (eg a bucket of 1000 polygons can actually contains a lot of points).\r\n let nbPoints = 0\r\n features.forEach(feature => {\r\n nbPoints += explode(feature).features.length\r\n })\r\n if (this.is2D() && (nbPoints > 5000)) {\r\n _.set(layer, 'leaflet.tiled', true)\r\n _.set(layer, 'leaflet.minZoom', 15)\r\n }\r\n Loading.show({ message: this.$t('mixins.activity.SAVING_LABEL', { processed: 0, total: features.length }) })\r\n try {\r\n let createdLayer = await this.$api.getService('catalog')\r\n .create(_.omit(layer, ['actions', 'label', 'isVisible', 'isDisabled']))\r\n const chunkSize = _.get(this, 'activityOptions.featuresChunkSize', 5000)\r\n let nbFeatures = 0\r\n // We use the generated DB ID as layer ID on features\r\n await this.createFeatures(geoJson, createdLayer._id, chunkSize, (i, chunk) => {\r\n // Update saving message according to new chunk data\r\n nbFeatures += chunk.length\r\n Loading.show({\r\n message: this.$t('mixins.activity.SAVING_LABEL', { processed: nbFeatures, total: features.length })\r\n })\r\n })\r\n // Because we save all features in a single service use filtering to separate layers\r\n createdLayer = await this.$api.getService('catalog').patch(createdLayer._id, { baseQuery: { layer: createdLayer._id } })\r\n // Reset layer with new setup\r\n await this.resetLayer(createdLayer)\r\n if (_.get(layer, 'leaflet.tiled')) {\r\n this.$toast({ type: 'positive', message: this.$t('mixins.activity.SAVE_DIALOG_MESSAGE'), timeout: 10000, html: true })\r\n }\r\n } catch (error) {\r\n // User error message on operation should be raised by error hook, otherwise this is more a coding error\r\n logger.error(error)\r\n }\r\n Loading.hide()\r\n } else {\r\n // Otherwise simply save in catalog\r\n const createdLayer = await this.$api.getService('catalog')\r\n .create(_.omit(layer, ['actions', 'label', 'isVisible', 'isDisabled']))\r\n // Reset layer with new setup\r\n await this.resetLayer(createdLayer)\r\n }\r\n },\r\n async onFilterLayerData (layer) {\r\n this.filterModal = await this.$createComponent('KFeaturesFilter', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer\r\n }\r\n })\r\n this.filterModal.$mount()\r\n this.filterModal.open()\r\n this.filterModal.$on('applied', async () => {\r\n // Reset layer with new setup\r\n await this.resetLayer(layer)\r\n this.filterModal.closeModal()\r\n })\r\n this.filterModal.$on('closed', () => {\r\n this.filterModal = null\r\n })\r\n },\r\n async onViewLayerData (layer) {\r\n this.viewModal = await this.$createComponent('KFeaturesTable', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer,\r\n featureActions: [{\r\n name: 'zoom-to',\r\n tooltip: this.$t('mixins.activity.ZOOM_TO_LABEL'),\r\n icon: 'zoom_out_map',\r\n handler: (context) => {\r\n // Use altitude or zoom level depending on engine\r\n this.center(..._.get(centroid(context.item), 'geometry.coordinates'), this.is2D() ? 18 : 750)\r\n this.viewModal.closeModal()\r\n }\r\n }]\r\n }\r\n })\r\n this.viewModal.$mount()\r\n this.viewModal.open()\r\n this.viewModal.$on('closed', () => {\r\n this.viewModal = null\r\n })\r\n },\r\n async onChartLayerData (layer) {\r\n this.chartModal = await this.$createComponent('KFeaturesChart', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer\r\n }\r\n })\r\n this.chartModal.$mount()\r\n this.chartModal.open()\r\n this.chartModal.$on('closed', () => {\r\n this.chartModal = null\r\n })\r\n },\r\n async onEditLayer (layer) {\r\n this.editModal = await this.$createComponent('editor/KModalEditor', {\r\n propsData: {\r\n service: 'catalog',\r\n contextId: this.contextId,\r\n objectId: layer._id\r\n }\r\n })\r\n this.editModal.$mount()\r\n this.editModal.openModal()\r\n this.editModal.$on('applied', updatedLayer => {\r\n // Actual layer update should be triggerred by real-time event\r\n // but as we might not always use sockets perform it anyway\r\n // If renamed need to update the layer map accordingly\r\n if (layer.name !== updatedLayer.name) {\r\n this.renameLayer(layer.name, updatedLayer.name)\r\n }\r\n Object.assign(layer, updatedLayer)\r\n this.editModal.closeModal()\r\n })\r\n this.editModal.$on('closed', () => {\r\n this.editModal = null\r\n })\r\n },\r\n async onEditLayerStyle (layer) {\r\n this.editStyleModal = await this.$createComponent('KLayerStyleEditor', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer,\r\n options: this.activityOptions.engine\r\n }\r\n })\r\n this.editStyleModal.$mount()\r\n this.editStyleModal.open()\r\n this.editStyleModal.$on('applied', async () => {\r\n // Actual layer update should be triggerred by real-time event\r\n // but as we might not always use sockets perform it anyway\r\n // Keep track of data as we will reset the layer\r\n const geoJson = this.toGeoJson(layer.name)\r\n // Reset layer with new setup\r\n await this.resetLayer(layer)\r\n // Update data only when in memory as reset has lost it\r\n if (!layer._id) {\r\n this.updateLayer(layer.name, geoJson)\r\n }\r\n this.editStyleModal.closeModal()\r\n })\r\n this.editStyleModal.$on('closed', () => {\r\n this.editStyleModal = null\r\n })\r\n },\r\n async onEditLayerData (layer) {\r\n const toggle = () => {\r\n // Start/Stop edition\r\n this.editLayer(layer)\r\n // Refresh actions due to state change\r\n this.configureLayerActions(layer)\r\n this.editedLayerToast = null\r\n }\r\n // Close previous edition toast if any\r\n // (this will toggle)\r\n if (this.editedLayerToast) {\r\n this.editedLayerToast()\r\n } else {\r\n toggle()\r\n }\r\n // Create new toast if required\r\n if (this.isLayerEdited(layer)) {\r\n this.editedLayerToast = this.$toast({\r\n type: 'warning',\r\n timeout: 0, // persistent\r\n position: 'top-left',\r\n message: this.$t('mixins.activity.EDITING_DATA_MESSAGE'),\r\n caption: this.$t(layer.name),\r\n onDismiss: toggle\r\n })\r\n }\r\n },\r\n async onRemoveLayer (layer) {\r\n Dialog.create({\r\n title: this.$t('mixins.activity.REMOVE_DIALOG_TITLE', { layer: layer.name }),\r\n message: this.$t('mixins.activity.REMOVE_DIALOG_MESSAGE', { layer: layer.name }),\r\n html: true,\r\n ok: {\r\n label: this.$t('OK'),\r\n flat: true\r\n },\r\n cancel: {\r\n label: this.$t('CANCEL'),\r\n flat: true\r\n }\r\n }).onOk(async () => {\r\n Loading.show({ message: this.$t('mixins.activity.REMOVING_LABEL') })\r\n try {\r\n // Stop any running edition\r\n if (this.isLayerEdited(layer)) this.onEditLayerData(layer)\r\n if (layer._id) {\r\n // If persistent feature layer remove features as well\r\n if (this.isFeatureLayer(layer)) {\r\n await this.removeFeatures(layer._id)\r\n }\r\n await this.$api.getService('catalog').remove(layer._id)\r\n }\r\n // Actual layer removal should be triggerred by real-time event\r\n // but as we might not always use sockets perform it anyway\r\n this.removeLayer(layer.name)\r\n } catch (error) {\r\n // User error message on operation should be raised by error hook, otherwise this is more a coding error\r\n logger.error(error)\r\n }\r\n Loading.hide()\r\n })\r\n },\r\n onMapReady () {\r\n this.engineReady = true\r\n this.engine = 'leaflet'\r\n },\r\n onGlobeReady () {\r\n this.engineReady = true\r\n this.engine = 'cesium'\r\n },\r\n getProbeTimeRange () {\r\n const start = this.currentTime.clone()\r\n const end = start.clone()\r\n const span = this.$store.get('timeseries.span')\r\n // We center on current time with the same span on past/future\r\n start.subtract(span, 'm')\r\n end.add(span, 'm')\r\n return { start, end }\r\n },\r\n onProbeLocation () {\r\n this.setCursor('probe-cursor')\r\n this.$once('click', () => {\r\n this.unsetCursor('probe-cursor')\r\n })\r\n },\r\n onToggleFullscreen () {\r\n if (!this.$q.fullscreen.isActive) this.$q.fullscreen.request()\r\n else this.$q.fullscreen.exit()\r\n },\r\n async initialize () {\r\n // Check if the activity is using context restoration\r\n const hasContext = (typeof this.restoreContext === 'function')\r\n // Geolocate by default if view has not been restored\r\n const viewRestored = (hasContext ? await this.restoreContext('view') : false)\r\n if (!viewRestored) {\r\n // Provided by geolocation if enabled\r\n if (!this.$geolocation.get().position) await this.$geolocation.update()\r\n const position = this.$geolocation.get().position\r\n if (position) this.center(position.longitude, position.latitude)\r\n }\r\n // Retrieve the forecast models\r\n if (this.setupWeacast) {\r\n try {\r\n await this.setupWeacast()\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n this.forecastModelHandlers = { toggle: (model) => this.setForecastModel(model) }\r\n } else {\r\n this.forecastModelHandlers = {}\r\n }\r\n // Retrieve the layers\r\n try {\r\n await this.refreshLayerCategories()\r\n await this.refreshLayers()\r\n if (hasContext) await this.restoreContext('layers')\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n // Listen about changes in global/contextual catalog services\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n const catalogService = this.$api.getService('catalog')\r\n // Keep track of binded listeners as we use the same function with different contexts\r\n this.catalogListeners = {}\r\n globalCatalogService._serviceEvents.forEach(event => {\r\n this.catalogListeners[event] = (object) => this.onCatalogUpdated(event, object)\r\n globalCatalogService.on(event, this.catalogListeners[event])\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n catalogService.on(event, this.catalogListeners[event])\r\n }\r\n })\r\n },\r\n finalize () {\r\n // Stop listening about changes in global/contextual catalog services\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n const catalogService = this.$api.getService('catalog')\r\n globalCatalogService._serviceEvents.forEach(event => {\r\n globalCatalogService.removeListener(event, this.catalogListeners[event])\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n catalogService.removeListener(event, this.catalogListeners[event])\r\n }\r\n })\r\n this.catalogListeners = {}\r\n },\r\n async onCatalogUpdated (event, object) {\r\n switch (object.type) {\r\n case 'Category':\r\n // In any case we rebuild categories\r\n this.refreshLayerCategories()\r\n break\r\n case 'Context':\r\n case 'Service':\r\n // Nothing to do\r\n break\r\n default: {\r\n // Updating a layer requires to remove/add it again to cover all use cases\r\n // (eg style edition, etc.)\r\n // Here we find layer by ID as renaming could have occured from another client\r\n const layers = this.getLayers({ _id: object._id })\r\n if (layers.length > 0) await this.removeCatalogLayer(layers[0])\r\n if (event !== 'removed') await this.addCatalogLayer(object)\r\n break\r\n }\r\n }\r\n }\r\n },\r\n mounted () {\r\n this.$on('map-ready', this.onMapReady)\r\n this.$on('globe-ready', this.onGlobeReady)\r\n this.$on('layer-added', this.onLayerAdded)\r\n },\r\n beforeDestroy () {\r\n this.$off('map-ready', this.onMapReady)\r\n this.$off('globe-ready', this.onGlobeReady)\r\n this.$off('layer-added', this.onLayerAdded)\r\n this.finalize()\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../map/client/mixins/mixin.activity.js"],"names":["data","forecastModelHandlers","layerCategories","variables","engine","engineReady","engineContainerWidth","engineContainerHeight","computed","viewStyle","variablesForCurrentLevel","map","variable","Object","assign","name","selectedLevel","_","omit","currentVariables","hasSelectableLevels","methods","is2D","is3D","getFeatureActions","feature","layer","getCatalogLayers","layers","globalCatalogService","$api","getService","response","find","concat","catalogService","gatewayToken","get","getItem","$config","addCatalogLayer","i18n","locale","kCoreUtils","getAppLocale","i18next","addResourceBundle","$t","label","description","isWeacastLayer","startsWith","weacastApi","forecastModel","addLayer","uniqBy","removeCatalogLayer","removeLayer","getCatalogCategories","categories","query","type","refreshLayerCategories","refreshLayers","clearLayers","catalogLayers","filter","i","length","hasVisibleBaseLayer","isVisible","baseLayer","showLayer","isUserLayer","isFeatureLayer","hasFeatureSchema","has","isLayerSelectable","isLayerEdited","isLayerStorable","_id","isLayerEditable","isLayerRemovable","isLayerStyleEditable","isLayerDataEditable","resetLayer","isLayerVisible","configureLayerActions","actions","activityOptions","Layout","filterContent","bindContent","cloneDeep","push","id","handler","onTriggerLayer","$set","onLayerAdded","hideLayer","hasContext","storeContext","onZoomIn","center","getCenter","longitude","latitude","zoomLevel","altitude","onZoomOut","onZoomToLayer","zoomToLayer","onSaveLayer","geoJson","toGeoJson","check","checkFeatures","kinks","result","dialog","title","features","message","options","model","items","value","html","ok","flat","cancel","includes","downloadAsBlob","JSON","stringify","set","nbPoints","forEach","Loading","show","processed","total","createdLayer","create","chunkSize","nbFeatures","createFeatures","chunk","patch","baseQuery","$toast","timeout","error","logger","hide","onFilterLayerData","filterModal","$createComponent","propsData","contextId","$mount","open","$on","closeModal","onViewLayerData","viewModal","featureActions","tooltip","icon","context","item","onChartLayerData","chartModal","onEditLayer","editModal","service","objectId","openModal","updatedLayer","renameLayer","onEditLayerStyle","editStyleModal","updateLayer","editLayerByName","editOptions","getLayerByName","startEditLayer","onEditLayerData","stopEditLayer","editMode","onEndLayerEdition","status","onRemoveLayer","Dialog","onOk","removeFeatures","remove","onMapReady","onGlobeReady","getProbeTimeRange","start","Time","getCurrentTime","clone","end","span","$store","subtract","add","onProbeLocation","setCursor","$once","unsetCursor","onToggleFullscreen","$q","fullscreen","isActive","request","exit","initialize","restoreContext","viewRestored","$geolocation","position","update","setupWeacast","toggle","setForecastModel","catalogListeners","_serviceEvents","event","object","onCatalogUpdated","on","finalize","removeListener","getLayers","mounted","beforeDestroy","$off"],"mappings":"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","file":"mixin.activity.js","sourcesContent":["import _ from 'lodash'\r\nimport i18next from 'i18next'\r\nimport sift from 'sift'\r\nimport logger from 'loglevel'\r\nimport centroid from '@turf/centroid'\r\nimport explode from '@turf/explode'\r\nimport { Loading, Dialog } from 'quasar'\r\nimport { Time } from '../../../core/client/time'\r\nimport { Layout } from '../../../core/client/layout'\r\nimport { setGatewayJwt } from '../utils'\r\nimport { utils as kCoreUtils } from '../../../core/client'\r\n\r\nexport default {\r\n data () {\r\n return {\r\n forecastModelHandlers: {},\r\n layerCategories: [],\r\n variables: [],\r\n engine: 'leaflet',\r\n engineReady: false,\r\n engineContainerWidth: null,\r\n engineContainerHeight: null\r\n }\r\n },\r\n computed: {\r\n viewStyle () {\r\n return 'width: 100%; height: 100%; fontWeight: normal; zIndex: 0; position: absolute;'\r\n },\r\n variablesForCurrentLevel () {\r\n return this.variables.map(variable => Object.assign({ name: `${variable.name}-${this.selectedLevel}` }, _.omit(variable, ['name'])))\r\n },\r\n currentVariables () {\r\n return this.hasSelectableLevels ? this.variablesForCurrentLevel : this.variables\r\n }\r\n },\r\n methods: {\r\n is2D () {\r\n return (this.engine === 'leaflet')\r\n },\r\n is3D () {\r\n return (this.engine === 'cesium')\r\n },\r\n // This method should be overriden in activities\r\n getFeatureActions (feature, layer) {\r\n return []\r\n },\r\n async getCatalogLayers () {\r\n let layers = []\r\n // We get layers coming from global catalog first if any\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n if (globalCatalogService) {\r\n const response = await globalCatalogService.find()\r\n layers = layers.concat(response.data)\r\n }\r\n // Then we get layers coming from contextual catalog if any\r\n const catalogService = this.$api.getService('catalog')\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n const response = await catalogService.find()\r\n layers = layers.concat(response.data)\r\n }\r\n const gatewayToken = this.$api.get('storage').getItem(this.$config('gatewayJwt'))\r\n return (gatewayToken ? setGatewayJwt(layers, gatewayToken) : layers)\r\n },\r\n async addCatalogLayer (layer) {\r\n // Check if available for current engine\r\n if (layer[this.engine]) {\r\n // Process i18n\r\n if (layer.i18n) {\r\n const locale = kCoreUtils.getAppLocale()\r\n const i18n = _.get(layer.i18n, locale)\r\n if (i18n) i18next.addResourceBundle(locale, 'kdk', i18n, true, true)\r\n }\r\n if (this.$t(layer.name)) layer.label = this.$t(layer.name)\r\n if (this.$t(layer.description)) layer.description = this.$t(layer.description)\r\n // Check for Weacast API availability\r\n const isWeacastLayer = _.get(layer, `${this.engine}.type`, '').startsWith('weacast.')\r\n if (isWeacastLayer && (!this.weacastApi || !this.forecastModel)) return\r\n await this.addLayer(layer)\r\n }\r\n // Filter layers with variables, not just visible ones because we might want to\r\n // probe weather even if there is no visual representation (e.g. in globe)\r\n if (layer.variables) this.variables = _.uniqBy(this.variables.concat(layer.variables), (variable) => variable.name)\r\n },\r\n async removeCatalogLayer (layer) {\r\n // Check if available for current engine\r\n if (layer[this.engine]) {\r\n await this.removeLayer(layer.name)\r\n }\r\n },\r\n async getCatalogCategories () {\r\n let categories = []\r\n // We get categories coming from global catalog first if any\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n if (globalCatalogService) {\r\n const response = await globalCatalogService.find({ query: { type: 'Category' } })\r\n categories = categories.concat(response.data)\r\n }\r\n // Then we get categories coming from contextual catalog if any\r\n const catalogService = this.$api.getService('catalog')\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n const response = await catalogService.find({ query: { type: 'Category' } })\r\n categories = categories.concat(response.data)\r\n }\r\n return categories\r\n },\r\n async refreshLayerCategories () {\r\n // Merge built-in categories with user-defiend ones\r\n this.layerCategories = await this.getCatalogCategories()\r\n this.layerCategories = this.layerCategories.concat(_.get(this, 'activityOptions.catalog.categories', []))\r\n },\r\n async refreshLayers () {\r\n // Clear layers and variables\r\n this.clearLayers()\r\n this.variables = []\r\n let catalogLayers = await this.getCatalogLayers()\r\n // Apply global layer filter\r\n catalogLayers = catalogLayers.filter(sift(_.get(this, 'activityOptions.catalog.filter', {})))\r\n // Iterate and await layers as creation is async and we need to have all layers ready\r\n // before checking if there is some background layer\r\n for (let i = 0; i < catalogLayers.length; i++) {\r\n await this.addCatalogLayer(catalogLayers[i])\r\n }\r\n // We need at least an active background\r\n const hasVisibleBaseLayer = catalogLayers.find((layer) => (layer.type === 'BaseLayer') && layer.isVisible)\r\n if (!hasVisibleBaseLayer) {\r\n const baseLayer = catalogLayers.find((layer) => (layer.type === 'BaseLayer'))\r\n if (baseLayer) await this.showLayer(baseLayer.name)\r\n }\r\n },\r\n isUserLayer (layer) {\r\n return (_.get(layer, 'scope') === 'user')\r\n },\r\n isFeatureLayer (layer) {\r\n return (_.get(layer, 'service') === 'features')\r\n },\r\n hasFeatureSchema (layer) {\r\n return _.has(layer, 'schema')\r\n },\r\n isLayerSelectable (layer) {\r\n // Only possible when not edited by default\r\n if ((typeof this.isLayerEdited === 'function') && this.isLayerEdited(layer)) return false\r\n return _.get(layer, 'isSelectable', true)\r\n },\r\n isLayerStorable (layer) {\r\n // Only possible when not saved by default\r\n if (layer._id) return false\r\n return _.get(layer, 'isStorable', this.isUserLayer(layer))\r\n },\r\n isLayerEditable (layer) {\r\n // Only possible when saved by default\r\n if (!layer._id) return false\r\n return _.get(layer, 'isEditable', this.isUserLayer(layer))\r\n },\r\n isLayerRemovable (layer) {\r\n return _.get(layer, 'isRemovable', this.isUserLayer(layer))\r\n },\r\n isLayerStyleEditable (layer) {\r\n return _.get(layer, 'isStyleEditable', this.isUserLayer(layer))\r\n },\r\n isLayerDataEditable (layer) {\r\n return _.get(layer, 'isDataEditable', this.isUserLayer(layer) && this.isFeatureLayer(layer))\r\n },\r\n async resetLayer (layer) {\r\n // Reset layer with new setup but keep track of current visibility state\r\n // as adding the layer back will restore default visibility state\r\n const isVisible = this.isLayerVisible(layer.name)\r\n await this.removeLayer(layer.name)\r\n await this.addLayer(layer)\r\n if (isVisible) await this.showLayer(layer.name)\r\n },\r\n configureLayerActions (layer) {\r\n let actions = _.get(this.activityOptions, 'layers.actions')\r\n if (actions) {\r\n // Apply filtering\r\n actions = Layout.filterContent(actions, _.get(this.activityOptions, 'layers.filter', {}))\r\n }\r\n // As context is different for each item we need to clone the global action configuration\r\n // otheriwse context will always reference the last processed item\r\n actions = Layout.bindContent(_.cloneDeep(actions), this)\r\n // Add 'virtual' action used to trigger the layer\r\n actions.push({ id: 'toggle', handler: () => this.onTriggerLayer(layer) })\r\n // Store the actions and make it reactive\r\n this.$set(layer, 'actions', actions)\r\n return actions\r\n },\r\n onLayerAdded (layer) {\r\n this.configureLayerActions(layer)\r\n },\r\n async onTriggerLayer (layer) {\r\n if (!this.isLayerVisible(layer.name)) {\r\n await this.showLayer(layer.name)\r\n } else {\r\n await this.hideLayer(layer.name)\r\n }\r\n // Check if the activity is using context restoration\r\n const hasContext = (typeof this.storeContext === 'function')\r\n if (hasContext) this.storeContext('layers')\r\n },\r\n onZoomIn () {\r\n const center = this.getCenter()\r\n this.center(center.longitude, center.latitude, center.zoomLevel ? center.zoomLevel + 1 : center.altitude * 0.5)\r\n },\r\n onZoomOut () {\r\n const center = this.getCenter()\r\n this.center(center.longitude, center.latitude, center.zoomLevel ? center.zoomLevel - 1 : center.altitude * 2)\r\n },\r\n onZoomToLayer (layer) {\r\n this.zoomToLayer(layer.name)\r\n },\r\n async onSaveLayer (layer) {\r\n // Take care that WFS layers rely on the same type as our own feature layers\r\n if (!_.has(layer, 'wfs') && _.get(layer, `${this.engine}.type`) === 'geoJson') {\r\n const geoJson = this.toGeoJson(layer.name)\r\n // Check for invalid features first\r\n const check = this.checkFeatures(geoJson)\r\n if (check.kinks.length > 0) {\r\n const result = await kCoreUtils.dialog({\r\n title: this.$t('mixins.activity.INVALID_FEATURES_DIALOG_TITLE', { features: check.kinks }),\r\n message: this.$t('mixins.activity.INVALID_FEATURES_DIALOG_MESSAGE', { features: check.kinks }),\r\n options: {\r\n type: 'toggle',\r\n model: [],\r\n items: [\r\n { label: this.$t('mixins.activity.DOWNLOAD_INVALID_FEATURES_LABEL'), value: 'download' }\r\n ]\r\n },\r\n html: true,\r\n ok: {\r\n label: this.$t('OK'),\r\n flat: true\r\n },\r\n cancel: {\r\n label: this.$t('CANCEL'),\r\n flat: true\r\n }\r\n })\r\n if (!result.ok) return\r\n // Export invalid features if required\r\n if (_.get(result, 'data', []).includes('download')) {\r\n kCoreUtils.downloadAsBlob(JSON.stringify({ type: 'FeatureCollection', features: check.kinks }),\r\n this.$t('mixins.activity.INVALID_FEATURES_FILE'), 'application/json;charset=utf-8;')\r\n }\r\n }\r\n // Change data source from in-memory to features service\r\n _.set(layer, 'service', 'features')\r\n if (_.has(layer, 'leaflet')) _.set(layer, 'leaflet.source', '/api/features')\r\n if (_.has(layer, 'cesium')) _.set(layer, 'cesium.source', '/api/features')\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n // If too much data use tiling\r\n // The threshold is based on the number of points and not features.\r\n // Indeed otherwise the complexity will be different depending on the geometry type\r\n // (eg a bucket of 1000 polygons can actually contains a lot of points).\r\n let nbPoints = 0\r\n features.forEach(feature => {\r\n nbPoints += explode(feature).features.length\r\n })\r\n if (this.is2D() && (nbPoints > 5000)) {\r\n _.set(layer, 'leaflet.tiled', true)\r\n _.set(layer, 'leaflet.minZoom', 15)\r\n }\r\n Loading.show({ message: this.$t('mixins.activity.SAVING_LABEL', { processed: 0, total: features.length }) })\r\n try {\r\n let createdLayer = await this.$api.getService('catalog')\r\n .create(_.omit(layer, ['actions', 'label', 'isVisible', 'isDisabled']))\r\n const chunkSize = _.get(this, 'activityOptions.featuresChunkSize', 5000)\r\n let nbFeatures = 0\r\n // We use the generated DB ID as layer ID on features\r\n await this.createFeatures(geoJson, createdLayer._id, chunkSize, (i, chunk) => {\r\n // Update saving message according to new chunk data\r\n nbFeatures += chunk.length\r\n Loading.show({\r\n message: this.$t('mixins.activity.SAVING_LABEL', { processed: nbFeatures, total: features.length })\r\n })\r\n })\r\n // Because we save all features in a single service use filtering to separate layers\r\n createdLayer = await this.$api.getService('catalog').patch(createdLayer._id, { baseQuery: { layer: createdLayer._id } })\r\n // Reset layer with new setup\r\n await this.resetLayer(createdLayer)\r\n if (_.get(layer, 'leaflet.tiled')) {\r\n this.$toast({ type: 'positive', message: this.$t('mixins.activity.SAVE_DIALOG_MESSAGE'), timeout: 10000, html: true })\r\n }\r\n } catch (error) {\r\n // User error message on operation should be raised by error hook, otherwise this is more a coding error\r\n logger.error(error)\r\n }\r\n Loading.hide()\r\n } else {\r\n // Otherwise simply save in catalog\r\n const createdLayer = await this.$api.getService('catalog')\r\n .create(_.omit(layer, ['actions', 'label', 'isVisible', 'isDisabled']))\r\n // Reset layer with new setup\r\n await this.resetLayer(createdLayer)\r\n }\r\n },\r\n async onFilterLayerData (layer) {\r\n this.filterModal = await this.$createComponent('KFeaturesFilter', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer\r\n }\r\n })\r\n this.filterModal.$mount()\r\n this.filterModal.open()\r\n this.filterModal.$on('applied', async () => {\r\n // Reset layer with new setup\r\n await this.resetLayer(layer)\r\n this.filterModal.closeModal()\r\n })\r\n this.filterModal.$on('closed', () => {\r\n this.filterModal = null\r\n })\r\n },\r\n async onViewLayerData (layer) {\r\n this.viewModal = await this.$createComponent('KFeaturesTable', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer,\r\n featureActions: [{\r\n name: 'zoom-to',\r\n tooltip: this.$t('mixins.activity.ZOOM_TO_LABEL'),\r\n icon: 'zoom_out_map',\r\n handler: (context) => {\r\n // Use altitude or zoom level depending on engine\r\n this.center(..._.get(centroid(context.item), 'geometry.coordinates'), this.is2D() ? 18 : 750)\r\n this.viewModal.closeModal()\r\n }\r\n }]\r\n }\r\n })\r\n this.viewModal.$mount()\r\n this.viewModal.open()\r\n this.viewModal.$on('closed', () => {\r\n this.viewModal = null\r\n })\r\n },\r\n async onChartLayerData (layer) {\r\n this.chartModal = await this.$createComponent('KFeaturesChart', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer\r\n }\r\n })\r\n this.chartModal.$mount()\r\n this.chartModal.open()\r\n this.chartModal.$on('closed', () => {\r\n this.chartModal = null\r\n })\r\n },\r\n async onEditLayer (layer) {\r\n this.editModal = await this.$createComponent('editor/KModalEditor', {\r\n propsData: {\r\n service: 'catalog',\r\n contextId: this.contextId,\r\n objectId: layer._id\r\n }\r\n })\r\n this.editModal.$mount()\r\n this.editModal.openModal()\r\n this.editModal.$on('applied', updatedLayer => {\r\n // Actual layer update should be triggerred by real-time event\r\n // but as we might not always use sockets perform it anyway\r\n // If renamed need to update the layer map accordingly\r\n if (layer.name !== updatedLayer.name) {\r\n this.renameLayer(layer.name, updatedLayer.name)\r\n }\r\n Object.assign(layer, updatedLayer)\r\n this.editModal.closeModal()\r\n })\r\n this.editModal.$on('closed', () => {\r\n this.editModal = null\r\n })\r\n },\r\n async onEditLayerStyle (layer) {\r\n this.editStyleModal = await this.$createComponent('KLayerStyleEditor', {\r\n propsData: {\r\n contextId: this.contextId,\r\n layer,\r\n options: this.activityOptions.engine\r\n }\r\n })\r\n this.editStyleModal.$mount()\r\n this.editStyleModal.open()\r\n this.editStyleModal.$on('applied', async () => {\r\n // Actual layer update should be triggerred by real-time event\r\n // but as we might not always use sockets perform it anyway\r\n // Keep track of data as we will reset the layer\r\n const geoJson = this.toGeoJson(layer.name)\r\n // Reset layer with new setup\r\n await this.resetLayer(layer)\r\n // Update data only when in memory as reset has lost it\r\n if (!layer._id) {\r\n this.updateLayer(layer.name, geoJson)\r\n }\r\n this.editStyleModal.closeModal()\r\n })\r\n this.editStyleModal.$on('closed', () => {\r\n this.editStyleModal = null\r\n })\r\n },\r\n editLayerByName (name, editOptions = {}) {\r\n // this one is used through postRobot to trigger edition\r\n // on a layer\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n this.startEditLayer(layer, editOptions)\r\n },\r\n onEditLayerData (layer) {\r\n // this one is triggered by a layer action (toggle)\r\n if (this.isLayerEdited(layer)) {\r\n // always accept editions in the action\r\n this.stopEditLayer('accept')\r\n } else {\r\n // start editing properties by default\r\n this.startEditLayer(layer, { editMode: 'edit-properties' })\r\n }\r\n },\r\n onEndLayerEdition (status = 'accept') {\r\n // this one can be triggered from a toolbar to accept or reject changes\r\n this.stopEditLayer(status)\r\n },\r\n async onRemoveLayer (layer) {\r\n Dialog.create({\r\n title: this.$t('mixins.activity.REMOVE_DIALOG_TITLE', { layer: layer.name }),\r\n message: this.$t('mixins.activity.REMOVE_DIALOG_MESSAGE', { layer: layer.name }),\r\n html: true,\r\n ok: {\r\n label: this.$t('OK'),\r\n flat: true\r\n },\r\n cancel: {\r\n label: this.$t('CANCEL'),\r\n flat: true\r\n }\r\n }).onOk(async () => {\r\n Loading.show({ message: this.$t('mixins.activity.REMOVING_LABEL') })\r\n try {\r\n // Stop any running edition\r\n if (this.isLayerEdited(layer)) this.onEditLayerData(layer)\r\n if (layer._id) {\r\n // If persistent feature layer remove features as well\r\n if (this.isFeatureLayer(layer)) {\r\n await this.removeFeatures(layer._id)\r\n }\r\n await this.$api.getService('catalog').remove(layer._id)\r\n }\r\n // Actual layer removal should be triggerred by real-time event\r\n // but as we might not always use sockets perform it anyway\r\n this.removeLayer(layer.name)\r\n } catch (error) {\r\n // User error message on operation should be raised by error hook, otherwise this is more a coding error\r\n logger.error(error)\r\n }\r\n Loading.hide()\r\n })\r\n },\r\n onMapReady () {\r\n this.engineReady = true\r\n this.engine = 'leaflet'\r\n },\r\n onGlobeReady () {\r\n this.engineReady = true\r\n this.engine = 'cesium'\r\n },\r\n getProbeTimeRange () {\r\n const start = Time.getCurrentTime().clone()\r\n const end = start.clone()\r\n const span = this.$store.get('timeseries.span')\r\n // We center on current time with the same span on past/future\r\n start.subtract(span, 'm')\r\n end.add(span, 'm')\r\n return { start, end }\r\n },\r\n onProbeLocation () {\r\n this.setCursor('probe-cursor')\r\n this.$once('click', () => {\r\n this.unsetCursor('probe-cursor')\r\n })\r\n },\r\n onToggleFullscreen () {\r\n if (!this.$q.fullscreen.isActive) this.$q.fullscreen.request()\r\n else this.$q.fullscreen.exit()\r\n },\r\n async initialize () {\r\n // Check if the activity is using context restoration\r\n const hasContext = (typeof this.restoreContext === 'function')\r\n // Geolocate by default if view has not been restored\r\n const viewRestored = (hasContext ? await this.restoreContext('view') : false)\r\n if (!viewRestored) {\r\n // Provided by geolocation if enabled\r\n if (!this.$geolocation.get().position) await this.$geolocation.update()\r\n const position = this.$geolocation.get().position\r\n if (position) this.center(position.longitude, position.latitude)\r\n }\r\n // Retrieve the forecast models\r\n if (this.setupWeacast) {\r\n try {\r\n await this.setupWeacast()\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n this.forecastModelHandlers = { toggle: (model) => this.setForecastModel(model) }\r\n } else {\r\n this.forecastModelHandlers = {}\r\n }\r\n // Retrieve the layers\r\n try {\r\n await this.refreshLayerCategories()\r\n await this.refreshLayers()\r\n if (hasContext) await this.restoreContext('layers')\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n // Listen about changes in global/contextual catalog services\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n const catalogService = this.$api.getService('catalog')\r\n // Keep track of binded listeners as we use the same function with different contexts\r\n this.catalogListeners = {}\r\n globalCatalogService._serviceEvents.forEach(event => {\r\n this.catalogListeners[event] = (object) => this.onCatalogUpdated(event, object)\r\n globalCatalogService.on(event, this.catalogListeners[event])\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n catalogService.on(event, this.catalogListeners[event])\r\n }\r\n })\r\n },\r\n finalize () {\r\n // Stop listening about changes in global/contextual catalog services\r\n const globalCatalogService = this.$api.getService('catalog', '')\r\n const catalogService = this.$api.getService('catalog')\r\n globalCatalogService._serviceEvents.forEach(event => {\r\n globalCatalogService.removeListener(event, this.catalogListeners[event])\r\n if (catalogService && (catalogService !== globalCatalogService)) {\r\n catalogService.removeListener(event, this.catalogListeners[event])\r\n }\r\n })\r\n this.catalogListeners = {}\r\n },\r\n async onCatalogUpdated (event, object) {\r\n switch (object.type) {\r\n case 'Category':\r\n // In any case we rebuild categories\r\n this.refreshLayerCategories()\r\n break\r\n case 'Context':\r\n case 'Service':\r\n // Nothing to do\r\n break\r\n default: {\r\n // Updating a layer requires to remove/add it again to cover all use cases\r\n // (eg style edition, etc.)\r\n // Here we find layer by ID as renaming could have occured from another client\r\n const layers = this.getLayers({ _id: object._id })\r\n if (layers.length > 0) await this.removeCatalogLayer(layers[0])\r\n if (event !== 'removed') await this.addCatalogLayer(object)\r\n break\r\n }\r\n }\r\n }\r\n },\r\n mounted () {\r\n this.$on('map-ready', this.onMapReady)\r\n this.$on('globe-ready', this.onGlobeReady)\r\n this.$on('layer-added', this.onLayerAdded)\r\n },\r\n beforeDestroy () {\r\n this.$off('map-ready', this.onMapReady)\r\n this.$off('globe-ready', this.onGlobeReady)\r\n this.$off('layer-added', this.onLayerAdded)\r\n this.finalize()\r\n }\r\n}\r\n"]}
|
|
@@ -44,7 +44,7 @@ exports.default = {
|
|
|
44
44
|
// FIXME: should not be hard-coded
|
|
45
45
|
let widget;
|
|
46
46
|
if (this.selection.layer) {
|
|
47
|
-
widget = 'information-box';
|
|
47
|
+
widget = _lodash2.default.get(this.selection.layer, 'widget', 'information-box');
|
|
48
48
|
if (_lodash2.default.has(this.selection.layer, 'probe') || // Static probe on pre-defined sites
|
|
49
49
|
_lodash2.default.has(this.selection.layer, 'variables')) {
|
|
50
50
|
// Measurement history
|
|
@@ -162,11 +162,7 @@ exports.default = {
|
|
|
162
162
|
this.updateLayer(_utils.SelectionLayerName, { type: 'FeatureCollection', features: Object.values(this.selectionHighlight) });
|
|
163
163
|
},
|
|
164
164
|
removeSelectionLayer() {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
return _asyncToGenerator(function* () {
|
|
168
|
-
yield _this2.removeLayer(_utils.SelectionLayerName);
|
|
169
|
-
})();
|
|
165
|
+
this.removeLayer(_utils.SelectionLayerName);
|
|
170
166
|
},
|
|
171
167
|
onFeatureSelectionClicked(layer, event) {
|
|
172
168
|
// Retrieve the location/feature
|
|
@@ -193,6 +189,10 @@ exports.default = {
|
|
|
193
189
|
// Update the selection
|
|
194
190
|
this.setSelection(location, feature, layer);
|
|
195
191
|
},
|
|
192
|
+
onFeatureSelectionLayerShown(layer) {
|
|
193
|
+
// If at least one layer is visible we have to create selection layer
|
|
194
|
+
if (this.isLayerSelectable(layer)) this.createSelectionLayer();
|
|
195
|
+
},
|
|
196
196
|
onFeatureSelectionLayerHidden(layer) {
|
|
197
197
|
if (this.hasFeatureSelection) {
|
|
198
198
|
if (layer.name === this.selection.layer.name) this.clearSelection();
|
|
@@ -223,16 +223,14 @@ exports.default = {
|
|
|
223
223
|
// Set of highligthed features
|
|
224
224
|
this.selectionHighlight = {};
|
|
225
225
|
this.$on('click', this.onFeatureSelectionClicked);
|
|
226
|
+
this.$on('layer-shown', this.onFeatureSelectionLayerShown);
|
|
226
227
|
this.$on('layer-hidden', this.onFeatureSelectionLayerHidden);
|
|
227
228
|
this.$on('layer-disabled', this.onFeatureSelectionLayerDisabled);
|
|
228
229
|
this.$on('layer-enabled', this.onFeatureSelectionLayerEnabled);
|
|
229
230
|
},
|
|
230
|
-
mounted() {
|
|
231
|
-
this.$once('map-ready', () => this.createSelectionLayer());
|
|
232
|
-
this.$once('globe-ready', () => this.createSelectionLayer());
|
|
233
|
-
},
|
|
234
231
|
beforeDestroy() {
|
|
235
232
|
this.$off('click', this.onFeatureSelectionClicked);
|
|
233
|
+
this.$off('layer-shown', this.onFeatureSelectionLayerShown);
|
|
236
234
|
this.$off('layer-hidden', this.onFeatureSelectionLayerHidden);
|
|
237
235
|
this.$off('layer-disabled', this.onFeatureSelectionLayerDisabled);
|
|
238
236
|
this.$off('layer-enabled', this.onFeatureSelectionLayerEnabled);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../map/client/mixins/mixin.feature-selection.js"],"names":["data","selection","$store","get","computed","hasFeatureSelection","feature","methods","getWidgetForLayer","widget","layer","_","has","isCursor","clearSelection","closeWidget","setSelection","location","set","hasOpenWidget","openWidget","centerOnSelection","center","lng","lat","addSelectionHighlight","id","removeSelectionHighlight","highlight","cloneDeep","type","geometry","coordinates","Object","assign","_id","merge","properties","geodesic","is2D","radius","colors","getBrand","selectionHighlight","updateSelectionLayer","updateSelectionHighlight","unset","createSelectionLayer","getLayerByName","SelectionLayerName","addLayer","name","scope","isSelectable","leaflet","isVisible","realtime","interactive","popup","pick","cesium","isLayerVisible","showLayer","updateLayer","features","values","removeSelectionLayer","removeLayer","onFeatureSelectionClicked","event","isLayerSelectable","undefined","onFeatureSelectionLayerHidden","onFeatureSelectionLayerDisabled","disabledSelectionHighlight","onFeatureSelectionLayerEnabled","created","$on","mounted","$once","beforeDestroy","$off"],"mappings":"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","file":"mixin.feature-selection.js","sourcesContent":["import bbox from '@turf/bbox'\r\nimport bboxPolygon from '@turf/bbox-polygon'\r\nimport centroid from '@turf/centroid'\r\nimport _ from 'lodash'\r\nimport { colors } from 'quasar'\r\nimport { SelectionLayerName } from '../utils'\r\n\r\nexport default {\r\n data () {\r\n return {\r\n selection: this.$store.get('selection')\r\n }\r\n },\r\n computed: {\r\n hasFeatureSelection () {\r\n return this.selection.feature\r\n }\r\n },\r\n methods: {\r\n getWidgetForLayer () {\r\n // FIXME: should not be hard-coded\r\n let widget\r\n if (this.selection.layer) {\r\n widget = 'information-box'\r\n if (_.has(this.selection.layer, 'probe') || // Static probe on pre-defined sites\r\n _.has(this.selection.layer, 'variables')) { // Measurement history\r\n widget = 'time-series'\r\n } else if (_.get(this.selection.layer, 'leaflet.type') === 'mapillary') {\r\n widget = 'mapillary-viewer'\r\n }\r\n } else {\r\n if (this.isCursor('probe-cursor')) {\r\n widget = 'time-series'\r\n }\r\n }\r\n return widget\r\n },\r\n clearSelection () {\r\n this.selection.feature = null\r\n this.selection.layer = null\r\n this.closeWidget()\r\n },\r\n setSelection (location, feature, layer) {\r\n this.selection.location = location\r\n // If clicked on the same object unselect otherwise select\r\n if (feature && (feature === this.selection.feature)) {\r\n this.clearSelection()\r\n } else {\r\n this.selection.feature = feature\r\n this.selection.layer = layer\r\n this.$store.set('selection.states', {})\r\n // Open associated default widget if none already open,\r\n // if the user has open another widget it will remain active\r\n const widget = this.getWidgetForLayer()\r\n if (widget && !this.hasOpenWidget()) this.openWidget(widget)\r\n }\r\n },\r\n centerOnSelection () {\r\n if (this.hasFeatureSelection) {\r\n this.center(..._.get(centroid(this.selection.feature), 'geometry.coordinates'))\r\n } else if (this.selection.location) {\r\n this.center(this.selection.location.lng, this.selection.location.lat)\r\n }\r\n },\r\n addSelectionHighlight (id, feature = {}) {\r\n // Remove previous selection if any\r\n this.removeSelectionHighlight(id)\r\n // Start from selected feature or location to build highlight\r\n const highlight = (this.selection.feature ? _.cloneDeep(this.selection.feature) : {\r\n type: 'Feature',\r\n geometry: { type: 'Point', coordinates: [this.selection.location.lng, this.selection.location.lat] }\r\n })\r\n // Use bbox for line/polygons\r\n if (highlight.geometry.type !== 'Point') {\r\n Object.assign(highlight, bboxPolygon(bbox(this.selection.feature)))\r\n }\r\n // Add an identifier if we'd like to update it\r\n highlight._id = highlight.id = id\r\n // Add default styling and additional information provided if any\r\n _.merge(highlight, {\r\n properties: {\r\n 'marker-type': 'circleMarker',\r\n geodesic: !this.is2D(), // In 3D we use a circle on ground\r\n radius: this.is2D() ? 18 : 1000,\r\n 'stroke-color': colors.getBrand('secondary'),\r\n 'stroke-width': 3,\r\n 'fill-color': colors.getBrand('secondary'),\r\n 'fill-opacity': 0.5\r\n }\r\n }, feature)\r\n _.set(this.selectionHighlight, id, highlight)\r\n this.updateSelectionLayer()\r\n return highlight\r\n },\r\n updateSelectionHighlight (id, feature) {\r\n if (_.has(this.selectionHighlight, id)) {\r\n _.merge(_.get(this.selectionHighlight, id), feature)\r\n this.updateSelectionLayer()\r\n }\r\n },\r\n removeSelectionHighlight (id) {\r\n if (_.has(this.selectionHighlight, id)) {\r\n _.unset(this.selectionHighlight, id)\r\n this.updateSelectionLayer()\r\n }\r\n },\r\n async createSelectionLayer () {\r\n // Get any previous layer or create it the first time\r\n const layer = this.getLayerByName(SelectionLayerName)\r\n if (!layer) {\r\n await this.addLayer({\r\n name: SelectionLayerName,\r\n type: 'OverlayLayer',\r\n scope: 'system',\r\n isSelectable: false,\r\n leaflet: {\r\n type: 'geoJson',\r\n isVisible: true,\r\n realtime: true,\r\n interactive: false,\r\n popup: { pick: [] }\r\n },\r\n cesium: {\r\n type: 'geoJson',\r\n isVisible: true,\r\n realtime: true,\r\n popup: { pick: [] }\r\n }\r\n })\r\n }\r\n if (!this.isLayerVisible(SelectionLayerName)) await this.showLayer(SelectionLayerName)\r\n },\r\n updateSelectionLayer () {\r\n this.updateLayer(SelectionLayerName, { type: 'FeatureCollection', features: Object.values(this.selectionHighlight) })\r\n },\r\n async removeSelectionLayer () {\r\n await this.removeLayer(SelectionLayerName)\r\n },\r\n onFeatureSelectionClicked (layer, event) {\r\n // Retrieve the location/feature\r\n const location = _.get(event, 'latlng')\r\n let feature\r\n // Check the target layer\r\n if (layer && layer.name) {\r\n // FIXME: need to retrieve original layer options as here we get processed options by the underlying engine\r\n layer = this.getLayerByName(layer.name)\r\n // Check if selectable\r\n if (layer && this.isLayerSelectable(layer)) {\r\n // Retrieve the feature and manage 2D/3D entity\r\n feature = _.get(event, 'target.feature')\r\n } else {\r\n // Avoid updating selection on click if not selectable\r\n return\r\n }\r\n } else {\r\n // Avoid updating selection on click if not probe\r\n if ((!this.isCursor('probe-cursor')) && (!this.isCursor('position-cursor'))) return\r\n // Otherwise this is a position selection only\r\n layer = undefined\r\n }\r\n // Update the selection\r\n this.setSelection(location, feature, layer)\r\n },\r\n onFeatureSelectionLayerHidden (layer) {\r\n if (this.hasFeatureSelection) {\r\n if (layer.name === this.selection.layer.name) this.clearSelection()\r\n }\r\n },\r\n onFeatureSelectionLayerDisabled (layer) {\r\n if (this.hasFeatureSelection) {\r\n if (layer.name === this.selection.layer.name) {\r\n // Backup highlights\r\n this.disabledSelectionHighlight = this.selectionHighlight\r\n // Clear it\r\n this.selectionHighlight = {}\r\n this.updateSelectionLayer()\r\n }\r\n }\r\n },\r\n onFeatureSelectionLayerEnabled (layer) {\r\n if (this.hasFeatureSelection) {\r\n if (layer.name === this.selection.layer.name) {\r\n // Restore highlights\r\n this.selectionHighlight = this.disabledSelectionHighlight\r\n this.updateSelectionLayer()\r\n }\r\n }\r\n }\r\n },\r\n created () {\r\n // Set of highligthed features\r\n this.selectionHighlight = {}\r\n this.$on('click', this.onFeatureSelectionClicked)\r\n this.$on('layer-hidden', this.onFeatureSelectionLayerHidden)\r\n this.$on('layer-disabled', this.onFeatureSelectionLayerDisabled)\r\n this.$on('layer-enabled', this.onFeatureSelectionLayerEnabled)\r\n },\r\n mounted () {\r\n this.$once('map-ready', () => this.createSelectionLayer())\r\n this.$once('globe-ready', () => this.createSelectionLayer())\r\n },\r\n beforeDestroy () {\r\n this.$off('click', this.onFeatureSelectionClicked)\r\n this.$off('layer-hidden', this.onFeatureSelectionLayerHidden)\r\n this.$off('layer-disabled', this.onFeatureSelectionLayerDisabled)\r\n this.$off('layer-enabled', this.onFeatureSelectionLayerEnabled)\r\n this.removeSelectionLayer()\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../map/client/mixins/mixin.feature-selection.js"],"names":["data","selection","$store","get","computed","hasFeatureSelection","feature","methods","getWidgetForLayer","widget","layer","_","has","isCursor","clearSelection","closeWidget","setSelection","location","set","hasOpenWidget","openWidget","centerOnSelection","center","lng","lat","addSelectionHighlight","id","removeSelectionHighlight","highlight","cloneDeep","type","geometry","coordinates","Object","assign","_id","merge","properties","geodesic","is2D","radius","colors","getBrand","selectionHighlight","updateSelectionLayer","updateSelectionHighlight","unset","createSelectionLayer","getLayerByName","SelectionLayerName","addLayer","name","scope","isSelectable","leaflet","isVisible","realtime","interactive","popup","pick","cesium","isLayerVisible","showLayer","updateLayer","features","values","removeSelectionLayer","removeLayer","onFeatureSelectionClicked","event","isLayerSelectable","undefined","onFeatureSelectionLayerShown","onFeatureSelectionLayerHidden","onFeatureSelectionLayerDisabled","disabledSelectionHighlight","onFeatureSelectionLayerEnabled","created","$on","beforeDestroy","$off"],"mappings":";;;;;;AAAA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;AACA;;;;;;kBAEe;AACbA,SAAQ;AACN,WAAO;AACLC,iBAAW,KAAKC,MAAL,CAAYC,GAAZ,CAAgB,WAAhB;AADN,KAAP;AAGD,GALY;AAMbC,YAAU;AACRC,0BAAuB;AACrB,aAAO,KAAKJ,SAAL,CAAeK,OAAtB;AACD;AAHO,GANG;AAWbC,WAAS;AACPC,wBAAqB;AACnB;AACA,UAAIC,MAAJ;AACA,UAAI,KAAKR,SAAL,CAAeS,KAAnB,EAA0B;AACxBD,iBAASE,iBAAER,GAAF,CAAM,KAAKF,SAAL,CAAeS,KAArB,EAA4B,QAA5B,EAAsC,iBAAtC,CAAT;AACA,YAAIC,iBAAEC,GAAF,CAAM,KAAKX,SAAL,CAAeS,KAArB,EAA4B,OAA5B,KAAwC;AACxCC,yBAAEC,GAAF,CAAM,KAAKX,SAAL,CAAeS,KAArB,EAA4B,WAA5B,CADJ,EAC8C;AAAE;AAC9CD,mBAAS,aAAT;AACD,SAHD,MAGO,IAAIE,iBAAER,GAAF,CAAM,KAAKF,SAAL,CAAeS,KAArB,EAA4B,cAA5B,MAAgD,WAApD,EAAiE;AACtED,mBAAS,kBAAT;AACD;AACF,OARD,MAQO;AACL,YAAI,KAAKI,QAAL,CAAc,cAAd,CAAJ,EAAmC;AACjCJ,mBAAS,aAAT;AACD;AACF;AACD,aAAOA,MAAP;AACD,KAlBM;AAmBPK,qBAAkB;AAChB,WAAKb,SAAL,CAAeK,OAAf,GAAyB,IAAzB;AACA,WAAKL,SAAL,CAAeS,KAAf,GAAuB,IAAvB;AACA,WAAKK,WAAL;AACD,KAvBM;AAwBPC,iBAAcC,QAAd,EAAwBX,OAAxB,EAAiCI,KAAjC,EAAwC;AACtC,WAAKT,SAAL,CAAegB,QAAf,GAA0BA,QAA1B;AACA;AACA,UAAIX,WAAYA,YAAY,KAAKL,SAAL,CAAeK,OAA3C,EAAqD;AACnD,aAAKQ,cAAL;AACD,OAFD,MAEO;AACL,aAAKb,SAAL,CAAeK,OAAf,GAAyBA,OAAzB;AACA,aAAKL,SAAL,CAAeS,KAAf,GAAuBA,KAAvB;AACA,aAAKR,MAAL,CAAYgB,GAAZ,CAAgB,kBAAhB,EAAoC,EAApC;AACA;AACA;AACA,cAAMT,SAAS,KAAKD,iBAAL,EAAf;AACA,YAAIC,UAAU,CAAC,KAAKU,aAAL,EAAf,EAAqC,KAAKC,UAAL,CAAgBX,MAAhB;AACtC;AACF,KAtCM;AAuCPY,wBAAqB;AACnB,UAAI,KAAKhB,mBAAT,EAA8B;AAC5B,aAAKiB,MAAL,CAAY,GAAGX,iBAAER,GAAF,CAAM,wBAAS,KAAKF,SAAL,CAAeK,OAAxB,CAAN,EAAwC,sBAAxC,CAAf;AACD,OAFD,MAEO,IAAI,KAAKL,SAAL,CAAegB,QAAnB,EAA6B;AAClC,aAAKK,MAAL,CAAY,KAAKrB,SAAL,CAAegB,QAAf,CAAwBM,GAApC,EAAyC,KAAKtB,SAAL,CAAegB,QAAf,CAAwBO,GAAjE;AACD;AACF,KA7CM;AA8CPC,0BAAuBC,EAAvB,EAA2BpB,UAAU,EAArC,EAAyC;AACvC;AACA,WAAKqB,wBAAL,CAA8BD,EAA9B;AACA;AACA,YAAME,YAAa,KAAK3B,SAAL,CAAeK,OAAf,GAAyBK,iBAAEkB,SAAF,CAAY,KAAK5B,SAAL,CAAeK,OAA3B,CAAzB,GAA+D;AAChFwB,cAAM,SAD0E;AAEhFC,kBAAU,EAAED,MAAM,OAAR,EAAiBE,aAAa,CAAC,KAAK/B,SAAL,CAAegB,QAAf,CAAwBM,GAAzB,EAA8B,KAAKtB,SAAL,CAAegB,QAAf,CAAwBO,GAAtD,CAA9B;AAFsE,OAAlF;AAIA;AACA,UAAII,UAAUG,QAAV,CAAmBD,IAAnB,KAA4B,OAAhC,EAAyC;AACvCG,eAAOC,MAAP,CAAcN,SAAd,EAAyB,2BAAY,oBAAK,KAAK3B,SAAL,CAAeK,OAApB,CAAZ,CAAzB;AACD;AACD;AACAsB,gBAAUO,GAAV,GAAgBP,UAAUF,EAAV,GAAeA,EAA/B;AACA;AACAf,uBAAEyB,KAAF,CAAQR,SAAR,EAAmB;AACjBS,oBAAY;AACV,yBAAe,cADL;AAEVC,oBAAU,CAAC,KAAKC,IAAL,EAFD,EAEc;AACxBC,kBAAQ,KAAKD,IAAL,KAAc,EAAd,GAAmB,IAHjB;AAIV,0BAAgBE,eAAOC,QAAP,CAAgB,WAAhB,CAJN;AAKV,0BAAgB,CALN;AAMV,wBAAcD,eAAOC,QAAP,CAAgB,WAAhB,CANJ;AAOV,0BAAgB;AAPN;AADK,OAAnB,EAUGpC,OAVH;AAWAK,uBAAEO,GAAF,CAAM,KAAKyB,kBAAX,EAA+BjB,EAA/B,EAAmCE,SAAnC;AACA,WAAKgB,oBAAL;AACA,aAAOhB,SAAP;AACD,KA3EM;AA4EPiB,6BAA0BnB,EAA1B,EAA8BpB,OAA9B,EAAuC;AACrC,UAAIK,iBAAEC,GAAF,CAAM,KAAK+B,kBAAX,EAA+BjB,EAA/B,CAAJ,EAAwC;AACtCf,yBAAEyB,KAAF,CAAQzB,iBAAER,GAAF,CAAM,KAAKwC,kBAAX,EAA+BjB,EAA/B,CAAR,EAA4CpB,OAA5C;AACA,aAAKsC,oBAAL;AACD;AACF,KAjFM;AAkFPjB,6BAA0BD,EAA1B,EAA8B;AAC5B,UAAIf,iBAAEC,GAAF,CAAM,KAAK+B,kBAAX,EAA+BjB,EAA/B,CAAJ,EAAwC;AACtCf,yBAAEmC,KAAF,CAAQ,KAAKH,kBAAb,EAAiCjB,EAAjC;AACA,aAAKkB,oBAAL;AACD;AACF,KAvFM;AAwFDG,wBAAN,GAA8B;AAAA;;AAAA;AAC5B;AACA,cAAMrC,QAAQ,MAAKsC,cAAL,CAAoBC,yBAApB,CAAd;AACA,YAAI,CAACvC,KAAL,EAAY;AACV,gBAAM,MAAKwC,QAAL,CAAc;AAClBC,kBAAMF,yBADY;AAElBnB,kBAAM,cAFY;AAGlBsB,mBAAO,QAHW;AAIlBC,0BAAc,KAJI;AAKlBC,qBAAS;AACPxB,oBAAM,SADC;AAEPyB,yBAAW,IAFJ;AAGPC,wBAAU,IAHH;AAIPC,2BAAa,KAJN;AAKPC,qBAAO,EAAEC,MAAM,EAAR;AALA,aALS;AAYlBC,oBAAQ;AACN9B,oBAAM,SADA;AAENyB,yBAAW,IAFL;AAGNC,wBAAU,IAHJ;AAINE,qBAAO,EAAEC,MAAM,EAAR;AAJD;AAZU,WAAd,CAAN;AAmBD;AACD,YAAI,CAAC,MAAKE,cAAL,CAAoBZ,yBAApB,CAAL,EAA8C,MAAM,MAAKa,SAAL,CAAeb,yBAAf,CAAN;AAxBlB;AAyB7B,KAjHM;AAkHPL,2BAAwB;AACtB,WAAKmB,WAAL,CAAiBd,yBAAjB,EAAqC,EAAEnB,MAAM,mBAAR,EAA6BkC,UAAU/B,OAAOgC,MAAP,CAAc,KAAKtB,kBAAnB,CAAvC,EAArC;AACD,KApHM;AAqHPuB,2BAAwB;AACtB,WAAKC,WAAL,CAAiBlB,yBAAjB;AACD,KAvHM;AAwHPmB,8BAA2B1D,KAA3B,EAAkC2D,KAAlC,EAAyC;AACvC;AACA,YAAMpD,WAAWN,iBAAER,GAAF,CAAMkE,KAAN,EAAa,QAAb,CAAjB;AACA,UAAI/D,OAAJ;AACA;AACA,UAAII,SAASA,MAAMyC,IAAnB,EAAyB;AACvB;AACAzC,gBAAQ,KAAKsC,cAAL,CAAoBtC,MAAMyC,IAA1B,CAAR;AACA;AACA,YAAIzC,SAAS,KAAK4D,iBAAL,CAAuB5D,KAAvB,CAAb,EAA4C;AAC1C;AACAJ,oBAAUK,iBAAER,GAAF,CAAMkE,KAAN,EAAa,gBAAb,CAAV;AACD,SAHD,MAGO;AACL;AACA;AACD;AACF,OAXD,MAWO;AACL;AACA,YAAK,CAAC,KAAKxD,QAAL,CAAc,cAAd,CAAF,IAAqC,CAAC,KAAKA,QAAL,CAAc,iBAAd,CAA1C,EAA6E;AAC7E;AACAH,gBAAQ6D,SAAR;AACD;AACD;AACA,WAAKvD,YAAL,CAAkBC,QAAlB,EAA4BX,OAA5B,EAAqCI,KAArC;AACD,KAhJM;AAiJP8D,iCAA8B9D,KAA9B,EAAqC;AACnC;AACA,UAAI,KAAK4D,iBAAL,CAAuB5D,KAAvB,CAAJ,EAAmC,KAAKqC,oBAAL;AACpC,KApJM;AAqJP0B,kCAA+B/D,KAA/B,EAAsC;AACpC,UAAI,KAAKL,mBAAT,EAA8B;AAC5B,YAAIK,MAAMyC,IAAN,KAAe,KAAKlD,SAAL,CAAeS,KAAf,CAAqByC,IAAxC,EAA8C,KAAKrC,cAAL;AAC/C;AACF,KAzJM;AA0JP4D,oCAAiChE,KAAjC,EAAwC;AACtC,UAAI,KAAKL,mBAAT,EAA8B;AAC5B,YAAIK,MAAMyC,IAAN,KAAe,KAAKlD,SAAL,CAAeS,KAAf,CAAqByC,IAAxC,EAA8C;AAC5C;AACA,eAAKwB,0BAAL,GAAkC,KAAKhC,kBAAvC;AACA;AACA,eAAKA,kBAAL,GAA0B,EAA1B;AACA,eAAKC,oBAAL;AACD;AACF;AACF,KApKM;AAqKPgC,mCAAgClE,KAAhC,EAAuC;AACrC,UAAI,KAAKL,mBAAT,EAA8B;AAC5B,YAAIK,MAAMyC,IAAN,KAAe,KAAKlD,SAAL,CAAeS,KAAf,CAAqByC,IAAxC,EAA8C;AAC5C;AACA,eAAKR,kBAAL,GAA0B,KAAKgC,0BAA/B;AACA,eAAK/B,oBAAL;AACD;AACF;AACF;AA7KM,GAXI;AA0LbiC,YAAW;AACT;AACA,SAAKlC,kBAAL,GAA0B,EAA1B;AACA,SAAKmC,GAAL,CAAS,OAAT,EAAkB,KAAKV,yBAAvB;AACA,SAAKU,GAAL,CAAS,aAAT,EAAwB,KAAKN,4BAA7B;AACA,SAAKM,GAAL,CAAS,cAAT,EAAyB,KAAKL,6BAA9B;AACA,SAAKK,GAAL,CAAS,gBAAT,EAA2B,KAAKJ,+BAAhC;AACA,SAAKI,GAAL,CAAS,eAAT,EAA0B,KAAKF,8BAA/B;AACD,GAlMY;AAmMbG,kBAAiB;AACf,SAAKC,IAAL,CAAU,OAAV,EAAmB,KAAKZ,yBAAxB;AACA,SAAKY,IAAL,CAAU,aAAV,EAAyB,KAAKR,4BAA9B;AACA,SAAKQ,IAAL,CAAU,cAAV,EAA0B,KAAKP,6BAA/B;AACA,SAAKO,IAAL,CAAU,gBAAV,EAA4B,KAAKN,+BAAjC;AACA,SAAKM,IAAL,CAAU,eAAV,EAA2B,KAAKJ,8BAAhC;AACA,SAAKV,oBAAL;AACD;AA1MY,C","file":"mixin.feature-selection.js","sourcesContent":["import bbox from '@turf/bbox'\r\nimport bboxPolygon from '@turf/bbox-polygon'\r\nimport centroid from '@turf/centroid'\r\nimport _ from 'lodash'\r\nimport { colors } from 'quasar'\r\nimport { SelectionLayerName } from '../utils'\r\n\r\nexport default {\r\n data () {\r\n return {\r\n selection: this.$store.get('selection')\r\n }\r\n },\r\n computed: {\r\n hasFeatureSelection () {\r\n return this.selection.feature\r\n }\r\n },\r\n methods: {\r\n getWidgetForLayer () {\r\n // FIXME: should not be hard-coded\r\n let widget\r\n if (this.selection.layer) {\r\n widget = _.get(this.selection.layer, 'widget', 'information-box')\r\n if (_.has(this.selection.layer, 'probe') || // Static probe on pre-defined sites\r\n _.has(this.selection.layer, 'variables')) { // Measurement history\r\n widget = 'time-series'\r\n } else if (_.get(this.selection.layer, 'leaflet.type') === 'mapillary') {\r\n widget = 'mapillary-viewer'\r\n }\r\n } else {\r\n if (this.isCursor('probe-cursor')) {\r\n widget = 'time-series'\r\n }\r\n }\r\n return widget\r\n },\r\n clearSelection () {\r\n this.selection.feature = null\r\n this.selection.layer = null\r\n this.closeWidget()\r\n },\r\n setSelection (location, feature, layer) {\r\n this.selection.location = location\r\n // If clicked on the same object unselect otherwise select\r\n if (feature && (feature === this.selection.feature)) {\r\n this.clearSelection()\r\n } else {\r\n this.selection.feature = feature\r\n this.selection.layer = layer\r\n this.$store.set('selection.states', {})\r\n // Open associated default widget if none already open,\r\n // if the user has open another widget it will remain active\r\n const widget = this.getWidgetForLayer()\r\n if (widget && !this.hasOpenWidget()) this.openWidget(widget)\r\n }\r\n },\r\n centerOnSelection () {\r\n if (this.hasFeatureSelection) {\r\n this.center(..._.get(centroid(this.selection.feature), 'geometry.coordinates'))\r\n } else if (this.selection.location) {\r\n this.center(this.selection.location.lng, this.selection.location.lat)\r\n }\r\n },\r\n addSelectionHighlight (id, feature = {}) {\r\n // Remove previous selection if any\r\n this.removeSelectionHighlight(id)\r\n // Start from selected feature or location to build highlight\r\n const highlight = (this.selection.feature ? _.cloneDeep(this.selection.feature) : {\r\n type: 'Feature',\r\n geometry: { type: 'Point', coordinates: [this.selection.location.lng, this.selection.location.lat] }\r\n })\r\n // Use bbox for line/polygons\r\n if (highlight.geometry.type !== 'Point') {\r\n Object.assign(highlight, bboxPolygon(bbox(this.selection.feature)))\r\n }\r\n // Add an identifier if we'd like to update it\r\n highlight._id = highlight.id = id\r\n // Add default styling and additional information provided if any\r\n _.merge(highlight, {\r\n properties: {\r\n 'marker-type': 'circleMarker',\r\n geodesic: !this.is2D(), // In 3D we use a circle on ground\r\n radius: this.is2D() ? 18 : 1000,\r\n 'stroke-color': colors.getBrand('secondary'),\r\n 'stroke-width': 3,\r\n 'fill-color': colors.getBrand('secondary'),\r\n 'fill-opacity': 0.5\r\n }\r\n }, feature)\r\n _.set(this.selectionHighlight, id, highlight)\r\n this.updateSelectionLayer()\r\n return highlight\r\n },\r\n updateSelectionHighlight (id, feature) {\r\n if (_.has(this.selectionHighlight, id)) {\r\n _.merge(_.get(this.selectionHighlight, id), feature)\r\n this.updateSelectionLayer()\r\n }\r\n },\r\n removeSelectionHighlight (id) {\r\n if (_.has(this.selectionHighlight, id)) {\r\n _.unset(this.selectionHighlight, id)\r\n this.updateSelectionLayer()\r\n }\r\n },\r\n async createSelectionLayer () {\r\n // Get any previous layer or create it the first time\r\n const layer = this.getLayerByName(SelectionLayerName)\r\n if (!layer) {\r\n await this.addLayer({\r\n name: SelectionLayerName,\r\n type: 'OverlayLayer',\r\n scope: 'system',\r\n isSelectable: false,\r\n leaflet: {\r\n type: 'geoJson',\r\n isVisible: true,\r\n realtime: true,\r\n interactive: false,\r\n popup: { pick: [] }\r\n },\r\n cesium: {\r\n type: 'geoJson',\r\n isVisible: true,\r\n realtime: true,\r\n popup: { pick: [] }\r\n }\r\n })\r\n }\r\n if (!this.isLayerVisible(SelectionLayerName)) await this.showLayer(SelectionLayerName)\r\n },\r\n updateSelectionLayer () {\r\n this.updateLayer(SelectionLayerName, { type: 'FeatureCollection', features: Object.values(this.selectionHighlight) })\r\n },\r\n removeSelectionLayer () {\r\n this.removeLayer(SelectionLayerName)\r\n },\r\n onFeatureSelectionClicked (layer, event) {\r\n // Retrieve the location/feature\r\n const location = _.get(event, 'latlng')\r\n let feature\r\n // Check the target layer\r\n if (layer && layer.name) {\r\n // FIXME: need to retrieve original layer options as here we get processed options by the underlying engine\r\n layer = this.getLayerByName(layer.name)\r\n // Check if selectable\r\n if (layer && this.isLayerSelectable(layer)) {\r\n // Retrieve the feature and manage 2D/3D entity\r\n feature = _.get(event, 'target.feature')\r\n } else {\r\n // Avoid updating selection on click if not selectable\r\n return\r\n }\r\n } else {\r\n // Avoid updating selection on click if not probe\r\n if ((!this.isCursor('probe-cursor')) && (!this.isCursor('position-cursor'))) return\r\n // Otherwise this is a position selection only\r\n layer = undefined\r\n }\r\n // Update the selection\r\n this.setSelection(location, feature, layer)\r\n },\r\n onFeatureSelectionLayerShown (layer) {\r\n // If at least one layer is visible we have to create selection layer\r\n if (this.isLayerSelectable(layer)) this.createSelectionLayer()\r\n },\r\n onFeatureSelectionLayerHidden (layer) {\r\n if (this.hasFeatureSelection) {\r\n if (layer.name === this.selection.layer.name) this.clearSelection()\r\n }\r\n },\r\n onFeatureSelectionLayerDisabled (layer) {\r\n if (this.hasFeatureSelection) {\r\n if (layer.name === this.selection.layer.name) {\r\n // Backup highlights\r\n this.disabledSelectionHighlight = this.selectionHighlight\r\n // Clear it\r\n this.selectionHighlight = {}\r\n this.updateSelectionLayer()\r\n }\r\n }\r\n },\r\n onFeatureSelectionLayerEnabled (layer) {\r\n if (this.hasFeatureSelection) {\r\n if (layer.name === this.selection.layer.name) {\r\n // Restore highlights\r\n this.selectionHighlight = this.disabledSelectionHighlight\r\n this.updateSelectionLayer()\r\n }\r\n }\r\n }\r\n },\r\n created () {\r\n // Set of highligthed features\r\n this.selectionHighlight = {}\r\n this.$on('click', this.onFeatureSelectionClicked)\r\n this.$on('layer-shown', this.onFeatureSelectionLayerShown)\r\n this.$on('layer-hidden', this.onFeatureSelectionLayerHidden)\r\n this.$on('layer-disabled', this.onFeatureSelectionLayerDisabled)\r\n this.$on('layer-enabled', this.onFeatureSelectionLayerEnabled)\r\n },\r\n beforeDestroy () {\r\n this.$off('click', this.onFeatureSelectionClicked)\r\n this.$off('layer-shown', this.onFeatureSelectionLayerShown)\r\n this.$off('layer-hidden', this.onFeatureSelectionLayerHidden)\r\n this.$off('layer-disabled', this.onFeatureSelectionLayerDisabled)\r\n this.$off('layer-enabled', this.onFeatureSelectionLayerEnabled)\r\n this.removeSelectionLayer()\r\n }\r\n}\r\n"]}
|