@kalisio/kdk 1.3.5 → 1.4.2
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/2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json +1 -0
- package/.nyc_output/{0b8aa700-8daa-49ce-85e7-a8f8965d55f0.json → 2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json} +0 -0
- package/.nyc_output/{20df4355-911a-4b16-a8ab-d3392e9f0a7f.json → 81d21e46-766a-46bc-b1b7-143ca577347a.json} +0 -0
- package/.nyc_output/a762cb58-70dc-4d39-ab69-928635affa98.json +1 -0
- package/.nyc_output/{257af0bb-96c3-465a-b5ef-a1df60078d5f.json → aaf3ebbb-f895-4d7b-9255-bc5dee832570.json} +0 -0
- package/.nyc_output/{284aebfa-23fd-425f-9d72-e4b8904dc224.json → dbeb2602-0ac2-4e66-978b-0d29548359ca.json} +0 -0
- package/.nyc_output/{5cbee06e-be6e-468a-bd78-4793ee785fe4.json → e47d1e4c-2fff-4dcb-908f-d3081162547c.json} +0 -0
- package/.nyc_output/processinfo/{2bece194-92f7-4971-a688-10604044a7fa.json → 2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json} +1 -1
- package/.nyc_output/processinfo/2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json +1 -0
- package/.nyc_output/processinfo/81d21e46-766a-46bc-b1b7-143ca577347a.json +1 -0
- package/.nyc_output/processinfo/a762cb58-70dc-4d39-ab69-928635affa98.json +1 -0
- package/.nyc_output/processinfo/aaf3ebbb-f895-4d7b-9255-bc5dee832570.json +1 -0
- package/.nyc_output/processinfo/dbeb2602-0ac2-4e66-978b-0d29548359ca.json +1 -0
- package/.nyc_output/processinfo/e47d1e4c-2fff-4dcb-908f-d3081162547c.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -1
- package/CHANGELOG.md +189 -67
- package/README.md +1 -1
- package/coverage/core/api/application.js.html +145 -145
- package/coverage/core/api/authentication.js.html +37 -37
- package/coverage/core/api/db.js.html +74 -74
- package/coverage/core/api/hooks/hooks.account.js.html +15 -15
- package/coverage/core/api/hooks/hooks.authentication.js.html +16 -16
- 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 +111 -63
- package/coverage/core/api/hooks/index.html +72 -72
- 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 +34 -34
- package/coverage/core/api/services/account/index.html +17 -17
- 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 +1 -1
- 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 +1 -1
- 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 +157 -157
- package/coverage/lcov-report/core/api/application.js.html +145 -145
- package/coverage/lcov-report/core/api/authentication.js.html +37 -37
- package/coverage/lcov-report/core/api/db.js.html +74 -74
- package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +15 -15
- package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +16 -16
- 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 +111 -63
- package/coverage/lcov-report/core/api/hooks/index.html +72 -72
- 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 +34 -34
- package/coverage/lcov-report/core/api/services/account/index.html +17 -17
- 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 +1 -1
- 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 +1 -1
- 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 +157 -157
- package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +55 -55
- package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +337 -274
- 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 +3588 -3659
- package/coverage/map/api/hooks/hooks.catalog.js.html +55 -55
- package/coverage/map/api/hooks/hooks.query.js.html +337 -274
- 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 +26 -155
- 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/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 -4
- 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 +133 -93
- package/lib/core/client/i18n/core_fr.json +56 -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/KPositionIndicator.vue +1 -0
- 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 +14 -2
- 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 +21 -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 +65 -17
- package/lib/map/client/i18n/map_fr.json +67 -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.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 +274 -51
- 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
|
@@ -14,30 +14,40 @@ var _permissions = require('../../common/permissions');
|
|
|
14
14
|
|
|
15
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
16
|
|
|
17
|
+
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
|
|
18
|
+
|
|
17
19
|
const authorisationMixin = {
|
|
18
20
|
methods: {
|
|
19
21
|
updateAbilities() {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
var _this = this;
|
|
23
|
+
|
|
24
|
+
return _asyncToGenerator(function* () {
|
|
25
|
+
const user = _store.Store.get('user');
|
|
26
|
+
let abilities;
|
|
27
|
+
if (user) {
|
|
28
|
+
abilities = yield (0, _permissions.defineAbilities)(user, _this.$api);
|
|
29
|
+
_store.Store.set('user.abilities', abilities);
|
|
30
|
+
}
|
|
31
|
+
if (abilities) {
|
|
32
|
+
_loglevel2.default.debug('New user abilities: ', abilities.rules);
|
|
33
|
+
}
|
|
34
|
+
return abilities;
|
|
35
|
+
})();
|
|
30
36
|
}
|
|
31
37
|
},
|
|
32
38
|
created() {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
//
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
var _this2 = this;
|
|
40
|
+
|
|
41
|
+
return _asyncToGenerator(function* () {
|
|
42
|
+
// Check if abilities are already computed
|
|
43
|
+
const abilities = _store.Store.get('user.abilities');
|
|
44
|
+
if (!abilities) {
|
|
45
|
+
// Otherwise try to compute them
|
|
46
|
+
yield _this2.updateAbilities();
|
|
47
|
+
}
|
|
48
|
+
// Whenever the user is updated, update abilities as well
|
|
49
|
+
_this2.$events.$on('user-changed', _this2.updateAbilities);
|
|
50
|
+
})();
|
|
41
51
|
},
|
|
42
52
|
beforeDestroy() {
|
|
43
53
|
this.$events.$off('user-changed', this.updateAbilities);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../core/client/mixins/mixin.authorisation.js"],"names":["authorisationMixin","methods","updateAbilities","user","Store","get","abilities","set","logger","debug","rules","created","$events","$on","beforeDestroy","$off"],"mappings":";;;;;;AAAA;;;;AACA;;AACA
|
|
1
|
+
{"version":3,"sources":["../../../../core/client/mixins/mixin.authorisation.js"],"names":["authorisationMixin","methods","updateAbilities","user","Store","get","abilities","$api","set","logger","debug","rules","created","$events","$on","beforeDestroy","$off"],"mappings":";;;;;;AAAA;;;;AACA;;AACA;;;;;;AAEA,MAAMA,qBAAqB;AACzBC,WAAS;AACDC,mBAAN,GAAyB;AAAA;;AAAA;AACvB,cAAMC,OAAOC,aAAMC,GAAN,CAAU,MAAV,CAAb;AACA,YAAIC,SAAJ;AACA,YAAIH,IAAJ,EAAU;AACRG,sBAAY,MAAM,kCAAgBH,IAAhB,EAAsB,MAAKI,IAA3B,CAAlB;AACAH,uBAAMI,GAAN,CAAU,gBAAV,EAA4BF,SAA5B;AACD;AACD,YAAIA,SAAJ,EAAe;AACbG,6BAAOC,KAAP,CAAa,sBAAb,EAAqCJ,UAAUK,KAA/C;AACD;AACD,eAAOL,SAAP;AAVuB;AAWxB;AAZM,GADgB;AAenBM,SAAN,GAAiB;AAAA;;AAAA;AACf;AACA,YAAMN,YAAYF,aAAMC,GAAN,CAAU,gBAAV,CAAlB;AACA,UAAI,CAACC,SAAL,EAAgB;AACd;AACA,cAAM,OAAKJ,eAAL,EAAN;AACD;AACD;AACA,aAAKW,OAAL,CAAaC,GAAb,CAAiB,cAAjB,EAAiC,OAAKZ,eAAtC;AARe;AAShB,GAxBwB;AAyBzBa,kBAAiB;AACf,SAAKF,OAAL,CAAaG,IAAb,CAAkB,cAAlB,EAAkC,KAAKd,eAAvC;AACD;AA3BwB,CAA3B;;kBA8BeF,kB","file":"mixin.authorisation.js","sourcesContent":["import logger from 'loglevel'\r\nimport { Store } from '../store'\r\nimport { defineAbilities } from '../../common/permissions'\r\n\r\nconst authorisationMixin = {\r\n methods: {\r\n async updateAbilities () {\r\n const user = Store.get('user')\r\n let abilities\r\n if (user) {\r\n abilities = await defineAbilities(user, this.$api)\r\n Store.set('user.abilities', abilities)\r\n }\r\n if (abilities) {\r\n logger.debug('New user abilities: ', abilities.rules)\r\n }\r\n return abilities\r\n }\r\n },\r\n async created () {\r\n // Check if abilities are already computed\r\n const abilities = Store.get('user.abilities')\r\n if (!abilities) {\r\n // Otherwise try to compute them\r\n await this.updateAbilities()\r\n }\r\n // Whenever the user is updated, update abilities as well\r\n this.$events.$on('user-changed', this.updateAbilities)\r\n },\r\n beforeDestroy () {\r\n this.$events.$off('user-changed', this.updateAbilities)\r\n }\r\n}\r\n\r\nexport default authorisationMixin\r\n"]}
|
|
@@ -24,6 +24,11 @@ const baseCollectionMixin = {
|
|
|
24
24
|
appendItems: {
|
|
25
25
|
type: Boolean,
|
|
26
26
|
default: false
|
|
27
|
+
},
|
|
28
|
+
// Only invoke refresh at most once per every refreshThrottle milliseconds
|
|
29
|
+
refreshThrottle: {
|
|
30
|
+
type: Number,
|
|
31
|
+
default: 500
|
|
27
32
|
}
|
|
28
33
|
},
|
|
29
34
|
computed: {
|
|
@@ -42,18 +47,25 @@ const baseCollectionMixin = {
|
|
|
42
47
|
subscribe(query) {
|
|
43
48
|
// Remove previous listener if any
|
|
44
49
|
this.unsubscribe();
|
|
45
|
-
this.itemListener = this.
|
|
50
|
+
this.itemListener = this.getService().watch({ listStrategy: this.listStrategy || 'always' }).find({ query }).subscribe(response => {
|
|
46
51
|
// Manage GeoJson features collection as well
|
|
47
52
|
if (response.type === 'FeatureCollection') {
|
|
48
53
|
this.items = response.features;
|
|
49
54
|
} else if (this.appendItems) {
|
|
50
|
-
//
|
|
51
|
-
this.items = _lodash2.default.unionBy(
|
|
55
|
+
// Append the response ensuring there is no duplicates
|
|
56
|
+
this.items = _lodash2.default.unionBy(response.data, this.items, '_id');
|
|
57
|
+
// We keep order from the updated list as depending on the sorting criteria a new item might have to be pushed on top of current items
|
|
58
|
+
const sortQuery = _lodash2.default.get(this.getCollectionBaseQuery(), '$sort');
|
|
59
|
+
if (sortQuery) {
|
|
60
|
+
this.items = _lodash2.default.orderBy(this.items, _lodash2.default.keys(sortQuery), _lodash2.default.map(_lodash2.default.values(sortQuery), value => {
|
|
61
|
+
return value > 0 ? 'asc' : 'desc';
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
52
64
|
} else {
|
|
53
65
|
this.items = response.data;
|
|
54
66
|
}
|
|
55
67
|
this.nbTotalItems = response.total;
|
|
56
|
-
this.$emit('collection-refreshed', this
|
|
68
|
+
this.$emit('collection-refreshed', this.items);
|
|
57
69
|
}, error => {
|
|
58
70
|
this.$events.$emit('error', error);
|
|
59
71
|
});
|
|
@@ -81,24 +93,60 @@ const baseCollectionMixin = {
|
|
|
81
93
|
};
|
|
82
94
|
} else return {};
|
|
83
95
|
},
|
|
84
|
-
|
|
85
|
-
//
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
this.
|
|
96
|
+
resetCollection() {
|
|
97
|
+
// Reset pagination and start again refreshing the collection
|
|
98
|
+
this.items = [];
|
|
99
|
+
this.currentPage = 1;
|
|
100
|
+
this.refreshCollection();
|
|
89
101
|
},
|
|
90
102
|
onPageChanged() {
|
|
91
103
|
this.refreshCollection();
|
|
92
104
|
},
|
|
105
|
+
onItemToggled(item, toggled) {
|
|
106
|
+
this.$emit('toggle-changed', item, toggled);
|
|
107
|
+
},
|
|
93
108
|
onItemSelected(item, section) {
|
|
94
109
|
this.$emit('selection-changed', item, section);
|
|
95
110
|
},
|
|
96
111
|
onItemsSelected(items) {
|
|
97
112
|
this.$emit('selection-changed', items);
|
|
113
|
+
},
|
|
114
|
+
onItemsUpdated(items) {
|
|
115
|
+
// When we append items some items of the previous pages might have been updated.
|
|
116
|
+
// In this case we need to reset the full collection as Rx only tracks changes on the current page
|
|
117
|
+
let updatedItems = Array.isArray(items) ? items : [items];
|
|
118
|
+
// We keep order from the updated list as depending on the sorting criteria a new item might have to be pushed on top of current items
|
|
119
|
+
updatedItems = _lodash2.default.intersectionWith(this.items, updatedItems, (item1, item2) => item1._id.toString() === item2._id.toString());
|
|
120
|
+
if (updatedItems.length > 0) this.resetCollection();
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
created() {
|
|
124
|
+
// Avoid initiating too much request as the same time, this might be the case
|
|
125
|
+
// when async UI components update simultaneously the base/filter query
|
|
126
|
+
// see https://github.com/kalisio/kdk/issues/432
|
|
127
|
+
const refreshCollection = () => {
|
|
128
|
+
// Add locale to perform sorting (i.e. collation) correctly w.r.t. user's language
|
|
129
|
+
const fullQuery = Object.assign({ $locale: (0, _utils.getLocale)() }, this.getCollectionBaseQuery(), this.getCollectionFilterQuery(), this.getCollectionPaginationQuery());
|
|
130
|
+
// Find the desired items
|
|
131
|
+
this.subscribe(fullQuery);
|
|
132
|
+
};
|
|
133
|
+
this.refreshCollection = _lodash2.default.throttle(refreshCollection, this.refreshThrottle, { leading: false });
|
|
134
|
+
|
|
135
|
+
if (this.appendItems) {
|
|
136
|
+
const service = this.getService();
|
|
137
|
+
service.on('patched', this.onItemsUpdated);
|
|
138
|
+
service.on('updated', this.onItemsUpdated);
|
|
139
|
+
service.on('removed', this.onItemsUpdated);
|
|
98
140
|
}
|
|
99
141
|
},
|
|
100
142
|
beforeDestroy() {
|
|
101
143
|
this.unsubscribe();
|
|
144
|
+
if (this.appendItems) {
|
|
145
|
+
const service = this.getService();
|
|
146
|
+
service.off('patched', this.onItemsUpdated);
|
|
147
|
+
service.off('updated', this.onItemsUpdated);
|
|
148
|
+
service.off('removed', this.onItemsUpdated);
|
|
149
|
+
}
|
|
102
150
|
}
|
|
103
151
|
};
|
|
104
152
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../core/client/mixins/mixin.base-collection.js"],"names":["baseCollectionMixin","props","nbItemsPerPage","type","Number","default","appendItems","Boolean","computed","nbPages","Math","ceil","nbTotalItems","data","items","currentPage","methods","subscribe","query","unsubscribe","itemListener","loadService","watch","listStrategy","find","response","features","_","unionBy","total","$emit","$data","error","$events","getCollectionBaseQuery","getCollectionFilterQuery","getCollectionPaginationQuery","$limit","$skip","refreshCollection","fullQuery","Object","assign","$locale","onPageChanged","onItemSelected","item","section","onItemsSelected","beforeDestroy"],"mappings":";;;;;;AAAA;;;;AACA;;;;AAEA,MAAMA,sBAAsB;AAC1BC,SAAO;AACL;AACA;AACAC,oBAAgB;AACdC,YAAMC,MADQ;AAEdC,eAAS;AAFK,KAHX;AAOL;AACAC,iBAAa;AACXH,YAAMI,OADK;AAEXF,eAAS;AAFE;AARR,GADmB;AAc1BG,YAAU;AACRC,cAAW;AACT,aAAQ,KAAKP,cAAL,GAAsB,CAAtB,GAA0BQ,KAAKC,IAAL,CAAU,KAAKC,YAAL,GAAoB,KAAKV,cAAnC,CAA1B,GAA+E,CAAvF;AACD;AAHO,GAdgB;AAmB1BW,SAAQ;AACN,WAAO;AACLC,aAAO,EADF;AAELF,oBAAc,CAFT;AAGLG,mBAAa;AAHR,KAAP;AAKD,GAzByB;AA0B1BC,WAAS;AACPC,cAAWC,KAAX,EAAkB;AAChB;AACA,WAAKC,WAAL;AACA,WAAKC,YAAL,GAAoB,KAAKC,WAAL,GAAmBC,KAAnB,CAAyB,EAAEC,cAAc,KAAKA,YAAL,IAAqB,QAArC,EAAzB,EACjBC,IADiB,CACZ,EAAEN,KAAF,EADY,EAEjBD,SAFiB,CAEPQ,YAAY;AACrB;AACA,YAAIA,SAAStB,IAAT,KAAkB,mBAAtB,EAA2C;AACzC,eAAKW,KAAL,GAAaW,SAASC,QAAtB;AACD,SAFD,MAEO,IAAI,KAAKpB,WAAT,EAAsB;AAC3B;AACA,eAAKQ,KAAL,GAAaa,iBAAEC,OAAF,CAAU,KAAKd,KAAf,EAAsBW,SAASZ,IAA/B,EAAqC,KAArC,CAAb;AACD,SAHM,MAGA;AACL,eAAKC,KAAL,GAAaW,SAASZ,IAAtB;AACD;AACD,aAAKD,YAAL,GAAoBa,SAASI,KAA7B;AACA,aAAKC,KAAL,CAAW,sBAAX,EAAmC,KAAKC,KAAxC;AACD,OAdiB,EAcfC,SAAS;AACV,aAAKC,OAAL,CAAaH,KAAb,CAAmB,OAAnB,EAA4BE,KAA5B;AACD,OAhBiB,CAApB;AAiBD,KArBM;AAsBPb,kBAAe;AACb,UAAI,KAAKC,YAAT,EAAuB;AACrB,aAAKA,YAAL,CAAkBD,WAAlB;AACA,aAAKC,YAAL,GAAoB,IAApB;AACD;AACF,KA3BM;AA4BPc,6BAA0B;AACxB;AACA,aAAO,EAAP;AACD,KA/BM;AAgCPC,+BAA4B;AAC1B;AACA,aAAO,EAAP;AACD,KAnCM;AAoCPC,mCAAgC;AAC9B;AACA,UAAI,KAAKlC,cAAL,GAAsB,CAA1B,EAA6B;AAC3B,eAAO;AACLmC,kBAAQ,KAAKnC,cADR;AAELoC,iBAAO,CAAC,KAAKvB,WAAL,GAAmB,CAApB,IAAyB,KAAKb;AAFhC,SAAP;AAID,OALD,MAKO,OAAO,EAAP;AACR,KA5CM;AA6CPqC,wBAAqB;AACnB;AACA,YAAMC,YAAYC,OAAOC,MAAP,CAAc,EAAEC,SAAS,uBAAX,EAAd,EAChB,KAAKT,sBAAL,EADgB,EAEhB,KAAKC,wBAAL,EAFgB,EAGhB,KAAKC,4BAAL,EAHgB,CAAlB;AAIA;AACA,WAAKnB,SAAL,CAAeuB,SAAf;AACD,KArDM;AAsDPI,oBAAiB;AACf,WAAKL,iBAAL;AACD,KAxDM;AAyDPM,mBAAgBC,IAAhB,EAAsBC,OAAtB,EAA+B;AAC7B,WAAKjB,KAAL,CAAW,mBAAX,EAAgCgB,IAAhC,EAAsCC,OAAtC;AACD,KA3DM;AA4DPC,oBAAiBlC,KAAjB,EAAwB;AACtB,WAAKgB,KAAL,CAAW,mBAAX,EAAgChB,KAAhC;AACD;AA9DM,GA1BiB;AA0F1BmC,kBAAiB;AACf,SAAK9B,WAAL;AACD;AA5FyB,CAA5B;;kBA+FenB,mB","file":"mixin.base-collection.js","sourcesContent":["import _ from 'lodash'\r\nimport { getLocale } from '../utils'\r\n\r\nconst baseCollectionMixin = {\r\n props: {\r\n // This value can be overriden in activities if they want to manage pagination by themselves\r\n // nbItemsPerPage = 0 means that the client does not handle pagination and server defaults will be used\r\n nbItemsPerPage: {\r\n type: Number,\r\n default: 12\r\n },\r\n // This value indicate if items of each page replace or are appended to previous ones\r\n appendItems: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n computed: {\r\n nbPages () {\r\n return (this.nbItemsPerPage > 0 ? Math.ceil(this.nbTotalItems / this.nbItemsPerPage) : 1)\r\n }\r\n },\r\n data () {\r\n return {\r\n items: [],\r\n nbTotalItems: 0,\r\n currentPage: 1\r\n }\r\n },\r\n methods: {\r\n subscribe (query) {\r\n // Remove previous listener if any\r\n this.unsubscribe()\r\n this.itemListener = this.loadService().watch({ listStrategy: this.listStrategy || 'always' })\r\n .find({ query })\r\n .subscribe(response => {\r\n // Manage GeoJson features collection as well\r\n if (response.type === 'FeatureCollection') {\r\n this.items = response.features\r\n } else if (this.appendItems) {\r\n // Ensure there is no duplicates when appending\r\n this.items = _.unionBy(this.items, response.data, '_id')\r\n } else {\r\n this.items = response.data\r\n }\r\n this.nbTotalItems = response.total\r\n this.$emit('collection-refreshed', this.$data)\r\n }, error => {\r\n this.$events.$emit('error', error)\r\n })\r\n },\r\n unsubscribe () {\r\n if (this.itemListener) {\r\n this.itemListener.unsubscribe()\r\n this.itemListener = null\r\n }\r\n },\r\n getCollectionBaseQuery () {\r\n // This method should be overriden in collections\r\n return {}\r\n },\r\n getCollectionFilterQuery () {\r\n // This method should be overriden in collections\r\n return {}\r\n },\r\n getCollectionPaginationQuery () {\r\n // This method can be overriden in collections\r\n if (this.nbItemsPerPage > 0) {\r\n return {\r\n $limit: this.nbItemsPerPage,\r\n $skip: (this.currentPage - 1) * this.nbItemsPerPage\r\n }\r\n } else return {}\r\n },\r\n refreshCollection () {\r\n // Add locale to perform sorting (i.e. collation) correctly w.r.t. user's language\r\n const fullQuery = Object.assign({ $locale: getLocale() },\r\n this.getCollectionBaseQuery(),\r\n this.getCollectionFilterQuery(),\r\n this.getCollectionPaginationQuery())\r\n // Find the desired items\r\n this.subscribe(fullQuery)\r\n },\r\n onPageChanged () {\r\n this.refreshCollection()\r\n },\r\n onItemSelected (item, section) {\r\n this.$emit('selection-changed', item, section)\r\n },\r\n onItemsSelected (items) {\r\n this.$emit('selection-changed', items)\r\n }\r\n },\r\n beforeDestroy () {\r\n this.unsubscribe()\r\n }\r\n}\r\n\r\nexport default baseCollectionMixin\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../core/client/mixins/mixin.base-collection.js"],"names":["baseCollectionMixin","props","nbItemsPerPage","type","Number","default","appendItems","Boolean","refreshThrottle","computed","nbPages","Math","ceil","nbTotalItems","data","items","currentPage","methods","subscribe","query","unsubscribe","itemListener","getService","watch","listStrategy","find","response","features","_","unionBy","sortQuery","get","getCollectionBaseQuery","orderBy","keys","map","values","value","total","$emit","error","$events","getCollectionFilterQuery","getCollectionPaginationQuery","$limit","$skip","resetCollection","refreshCollection","onPageChanged","onItemToggled","item","toggled","onItemSelected","section","onItemsSelected","onItemsUpdated","updatedItems","Array","isArray","intersectionWith","item1","item2","_id","toString","length","created","fullQuery","Object","assign","$locale","throttle","leading","service","on","beforeDestroy","off"],"mappings":"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","file":"mixin.base-collection.js","sourcesContent":["import _ from 'lodash'\r\nimport { getLocale } from '../utils'\r\n\r\nconst baseCollectionMixin = {\r\n props: {\r\n // This value can be overriden in activities if they want to manage pagination by themselves\r\n // nbItemsPerPage = 0 means that the client does not handle pagination and server defaults will be used\r\n nbItemsPerPage: {\r\n type: Number,\r\n default: 12\r\n },\r\n // This value indicate if items of each page replace or are appended to previous ones\r\n appendItems: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // Only invoke refresh at most once per every refreshThrottle milliseconds\r\n refreshThrottle: {\r\n type: Number,\r\n default: 500\r\n }\r\n },\r\n computed: {\r\n nbPages () {\r\n return (this.nbItemsPerPage > 0 ? Math.ceil(this.nbTotalItems / this.nbItemsPerPage) : 1)\r\n }\r\n },\r\n data () {\r\n return {\r\n items: [],\r\n nbTotalItems: 0,\r\n currentPage: 1\r\n }\r\n },\r\n methods: {\r\n subscribe (query) {\r\n // Remove previous listener if any\r\n this.unsubscribe()\r\n this.itemListener = this.getService().watch({ listStrategy: this.listStrategy || 'always' })\r\n .find({ query })\r\n .subscribe(response => {\r\n // Manage GeoJson features collection as well\r\n if (response.type === 'FeatureCollection') {\r\n this.items = response.features\r\n } else if (this.appendItems) {\r\n // Append the response ensuring there is no duplicates\r\n this.items = _.unionBy(response.data, this.items, '_id')\r\n // We keep order from the updated list as depending on the sorting criteria a new item might have to be pushed on top of current items\r\n const sortQuery = _.get(this.getCollectionBaseQuery(), '$sort')\r\n if (sortQuery) {\r\n this.items = _.orderBy(this.items, _.keys(sortQuery), _.map(_.values(sortQuery), value => { return value > 0 ? 'asc' : 'desc' }))\r\n }\r\n } else {\r\n this.items = response.data\r\n }\r\n this.nbTotalItems = response.total\r\n this.$emit('collection-refreshed', this.items)\r\n }, error => {\r\n this.$events.$emit('error', error)\r\n })\r\n },\r\n unsubscribe () {\r\n if (this.itemListener) {\r\n this.itemListener.unsubscribe()\r\n this.itemListener = null\r\n }\r\n },\r\n getCollectionBaseQuery () {\r\n // This method should be overriden in collections\r\n return {}\r\n },\r\n getCollectionFilterQuery () {\r\n // This method should be overriden in collections\r\n return {}\r\n },\r\n getCollectionPaginationQuery () {\r\n // This method can be overriden in collections\r\n if (this.nbItemsPerPage > 0) {\r\n return {\r\n $limit: this.nbItemsPerPage,\r\n $skip: (this.currentPage - 1) * this.nbItemsPerPage\r\n }\r\n } else return {}\r\n },\r\n resetCollection () {\r\n // Reset pagination and start again refreshing the collection\r\n this.items = []\r\n this.currentPage = 1\r\n this.refreshCollection()\r\n },\r\n onPageChanged () {\r\n this.refreshCollection()\r\n },\r\n onItemToggled (item, toggled) {\r\n this.$emit('toggle-changed', item, toggled)\r\n },\r\n onItemSelected (item, section) {\r\n this.$emit('selection-changed', item, section)\r\n },\r\n onItemsSelected (items) {\r\n this.$emit('selection-changed', items)\r\n },\r\n onItemsUpdated (items) {\r\n // When we append items some items of the previous pages might have been updated.\r\n // In this case we need to reset the full collection as Rx only tracks changes on the current page\r\n let updatedItems = (Array.isArray(items) ? items : [items])\r\n // We keep order from the updated list as depending on the sorting criteria a new item might have to be pushed on top of current items\r\n updatedItems = _.intersectionWith(this.items, updatedItems, (item1, item2) => (item1._id.toString() === item2._id.toString()))\r\n if (updatedItems.length > 0) this.resetCollection()\r\n }\r\n },\r\n created () {\r\n // Avoid initiating too much request as the same time, this might be the case\r\n // when async UI components update simultaneously the base/filter query\r\n // see https://github.com/kalisio/kdk/issues/432\r\n const refreshCollection = () => {\r\n // Add locale to perform sorting (i.e. collation) correctly w.r.t. user's language\r\n const fullQuery = Object.assign({ $locale: getLocale() },\r\n this.getCollectionBaseQuery(),\r\n this.getCollectionFilterQuery(),\r\n this.getCollectionPaginationQuery())\r\n // Find the desired items\r\n this.subscribe(fullQuery)\r\n }\r\n this.refreshCollection = _.throttle(refreshCollection, this.refreshThrottle, { leading: false })\r\n\r\n if (this.appendItems) {\r\n const service = this.getService()\r\n service.on('patched', this.onItemsUpdated)\r\n service.on('updated', this.onItemsUpdated)\r\n service.on('removed', this.onItemsUpdated)\r\n }\r\n },\r\n beforeDestroy () {\r\n this.unsubscribe()\r\n if (this.appendItems) {\r\n const service = this.getService()\r\n service.off('patched', this.onItemsUpdated)\r\n service.off('updated', this.onItemsUpdated)\r\n service.off('removed', this.onItemsUpdated)\r\n }\r\n }\r\n}\r\n\r\nexport default baseCollectionMixin\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../core/client/mixins/mixin.base-context.js"],"names":["baseContextMixin","props","contextId","type","String","default","data","contextLoaded","watch","to","from","refreshContext","methods","clearContext","$store","set","setContext","context","get","_id","service","created","$api","getService","$config","beforeDestroy"],"mappings":";;;;;;;;AAAA,MAAMA,mBAAmB;AACvBC,SAAO;AACLC,eAAW;AACTC,YAAMC,MADG;AAETC,eAAS;AAFA;AADN,GADgB;AAOvBC,SAAQ;AACN,WAAO;AACLC,qBAAe;AADV,KAAP;AAGD,GAXsB;AAYvBC,SAAO;
|
|
1
|
+
{"version":3,"sources":["../../../../core/client/mixins/mixin.base-context.js"],"names":["baseContextMixin","props","contextId","type","String","default","data","contextLoaded","watch","$route","to","from","refreshContext","methods","clearContext","$store","set","setContext","context","get","_id","service","created","$api","getService","$config","beforeDestroy"],"mappings":";;;;;;;;AAAA,MAAMA,mBAAmB;AACvBC,SAAO;AACLC,eAAW;AACTC,YAAMC,MADG;AAETC,eAAS;AAFA;AADN,GADgB;AAOvBC,SAAQ;AACN,WAAO;AACLC,qBAAe;AADV,KAAP;AAGD,GAXsB;AAYvBC,SAAO;AACLC,WAAQC,EAAR,EAAYC,IAAZ,EAAkB;AAChB;AACA,WAAKC,cAAL;AACD;AAJI,GAZgB;AAkBvBC,WAAS;AACPC,mBAAgB;AACd,WAAKC,MAAL,CAAYC,GAAZ,CAAgB,SAAhB,EAA2B,IAA3B;AACA,WAAKT,aAAL,GAAqB,KAArB;AACD,KAJM;AAKPU,eAAYC,OAAZ,EAAqB;AACnB;AACA,WAAKH,MAAL,CAAYC,GAAZ,CAAgB,SAAhB,EAA2BE,OAA3B;AACA,WAAKX,aAAL,GAAqB,IAArB;AACD,KATM;AAUDK,kBAAN,GAAwB;AAAA;;AAAA;AACtB,YAAI,MAAKV,SAAT,EAAoB;AAClB;AACA,cAAIgB,UAAU,MAAKH,MAAL,CAAYI,GAAZ,CAAgB,SAAhB,CAAd;AACA,cAAID,WAAWA,QAAQE,GAAR,KAAgB,MAAKlB,SAApC,EAA+C;AAC7C;AACD;AACD;AACA,gBAAKY,YAAL;AACA;AACAI,oBAAU,MAAM,MAAKG,OAAL,CAAaF,GAAb,CAAiB,MAAKjB,SAAtB,CAAhB;AACA,gBAAKe,UAAL,CAAgBC,OAAhB;AACD,SAXD,MAWO;AACL,gBAAKJ,YAAL;AACD;AAdqB;AAevB;AAzBM,GAlBc;AA6CvBQ,YAAW;AACT,SAAKD,OAAL,GAAe,KAAKE,IAAL,CAAUC,UAAV,CAAqB,KAAKC,OAAL,CAAa,iBAAb,CAArB,CAAf;AACA;AACA,SAAKb,cAAL;AACD,GAjDsB;AAkDvBc,kBAAiB;AACf,SAAKZ,YAAL;AACD;AApDsB,CAAzB;;kBAuDed,gB","file":"mixin.base-context.js","sourcesContent":["const baseContextMixin = {\r\n props: {\r\n contextId: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n data () {\r\n return {\r\n contextLoaded: false\r\n }\r\n },\r\n watch: {\r\n $route (to, from) {\r\n // React to route changes but reusing the same component as this one is generic\r\n this.refreshContext()\r\n }\r\n },\r\n methods: {\r\n clearContext () {\r\n this.$store.set('context', null)\r\n this.contextLoaded = false\r\n },\r\n setContext (context) {\r\n // Set context in store so that contextual services are aware of it\r\n this.$store.set('context', context)\r\n this.contextLoaded = true\r\n },\r\n async refreshContext () {\r\n if (this.contextId) {\r\n // Context already set ?\r\n let context = this.$store.get('context')\r\n if (context && context._id === this.contextId) {\r\n return\r\n }\r\n // Otherwise clear so that underlying components will be destroyed\r\n this.clearContext()\r\n // Then update the context\r\n context = await this.service.get(this.contextId)\r\n this.setContext(context)\r\n } else {\r\n this.clearContext()\r\n }\r\n }\r\n },\r\n created () {\r\n this.service = this.$api.getService(this.$config('context.service'))\r\n // Register the context\r\n this.refreshContext()\r\n },\r\n beforeDestroy () {\r\n this.clearContext()\r\n }\r\n}\r\n\r\nexport default baseContextMixin\r\n"]}
|
|
@@ -22,15 +22,15 @@ function baseEditorMixin(formRefs) {
|
|
|
22
22
|
props: {
|
|
23
23
|
baseObject: {
|
|
24
24
|
type: Object,
|
|
25
|
-
default:
|
|
26
|
-
return {};
|
|
27
|
-
}
|
|
25
|
+
default: () => {}
|
|
28
26
|
},
|
|
29
27
|
baseQuery: {
|
|
30
28
|
type: Object,
|
|
31
|
-
default:
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
default: () => {}
|
|
30
|
+
},
|
|
31
|
+
schemaName: {
|
|
32
|
+
type: String,
|
|
33
|
+
default: undefined
|
|
34
34
|
},
|
|
35
35
|
clearButton: {
|
|
36
36
|
type: String,
|
|
@@ -83,7 +83,7 @@ function baseEditorMixin(formRefs) {
|
|
|
83
83
|
if (form.loadRefs().isFulfilled()) {
|
|
84
84
|
if (this.getObject()) {
|
|
85
85
|
if (this.perspective !== '') {
|
|
86
|
-
form.fill(this.getObject()
|
|
86
|
+
form.fill(_lodash2.default.get(this.getObject(), this.perspective));
|
|
87
87
|
} else {
|
|
88
88
|
form.fill(this.getObject());
|
|
89
89
|
}
|
|
@@ -183,7 +183,11 @@ function baseEditorMixin(formRefs) {
|
|
|
183
183
|
const object = {};
|
|
184
184
|
const baseObject = this.getObject() || this.baseObject;
|
|
185
185
|
if (this.perspective !== '') {
|
|
186
|
-
|
|
186
|
+
if (this.perspectiveAsObject) {
|
|
187
|
+
Object.assign(object, _lodash2.default.get(baseObject, this.perspective));
|
|
188
|
+
} else {
|
|
189
|
+
_lodash2.default.set(object, this.perspective, _lodash2.default.get(baseObject, this.perspective));
|
|
190
|
+
}
|
|
187
191
|
// Keep track of ID as it is used to know if we update or create
|
|
188
192
|
if (baseObject._id) object._id = baseObject._id;
|
|
189
193
|
} else {
|
|
@@ -195,14 +199,18 @@ function baseEditorMixin(formRefs) {
|
|
|
195
199
|
// Start from default query
|
|
196
200
|
const query = {};
|
|
197
201
|
Object.assign(query, this.baseQuery);
|
|
198
|
-
if (this.getMode() === 'update' && this.perspective
|
|
202
|
+
if (this.getMode() === 'update' && this.perspective && this.perspectiveAsObject) {
|
|
199
203
|
Object.assign(query, { $select: ['_id', this.perspective] });
|
|
200
204
|
}
|
|
201
205
|
return query;
|
|
202
206
|
},
|
|
203
207
|
getSchemaName() {
|
|
208
|
+
if (this.schemaName) return this.schemaName;
|
|
209
|
+
// Can be provided as route metadata
|
|
210
|
+
let schemaName = _lodash2.default.get(this.$route, 'meta.schemaName');
|
|
211
|
+
if (schemaName) return schemaName;
|
|
204
212
|
// When used with a service by default use the same name for schema as for service
|
|
205
|
-
|
|
213
|
+
schemaName = this.service + (this.objectId ? '.update' : '.create');
|
|
206
214
|
if (this.perspective) {
|
|
207
215
|
schemaName += '-' + this.perspective;
|
|
208
216
|
}
|
|
@@ -244,18 +252,22 @@ function baseEditorMixin(formRefs) {
|
|
|
244
252
|
// Editing mode => patch the item
|
|
245
253
|
if (_this3.perspective !== '') {
|
|
246
254
|
const data = {};
|
|
247
|
-
|
|
248
|
-
|
|
255
|
+
if (_this3.perspectiveAsObject) {
|
|
256
|
+
_lodash2.default.set(data, _this3.perspective, _lodash2.default.omit(object, ['_id']));
|
|
257
|
+
} else {
|
|
258
|
+
_lodash2.default.set(data, _this3.perspective, _lodash2.default.get(object, _this3.perspective));
|
|
259
|
+
}
|
|
260
|
+
const response = yield _this3.getService().patch(_this3.objectId, data, { query });
|
|
249
261
|
// Keep track of ID as it is used to know if we update or create
|
|
250
262
|
if (object._id) response._id = object._id;
|
|
251
263
|
onServiceResponse(response);
|
|
252
264
|
} else {
|
|
253
|
-
const response = yield _this3.
|
|
265
|
+
const response = yield _this3.getService().patch(_this3.objectId, object, { query });
|
|
254
266
|
onServiceResponse(response);
|
|
255
267
|
}
|
|
256
268
|
} else if (_this3.getMode() === 'create') {
|
|
257
269
|
// Creation mode => create the item
|
|
258
|
-
const response = yield _this3.
|
|
270
|
+
const response = yield _this3.getService().create(object, { query });
|
|
259
271
|
onServiceResponse(response);
|
|
260
272
|
} else {
|
|
261
273
|
_loglevel2.default.warn('Invalid editor mode');
|
|
@@ -272,8 +284,6 @@ function baseEditorMixin(formRefs) {
|
|
|
272
284
|
var _this4 = this;
|
|
273
285
|
|
|
274
286
|
return _asyncToGenerator(function* () {
|
|
275
|
-
// When the service is available
|
|
276
|
-
yield _this4.loadService();
|
|
277
287
|
// We can then load the schema/object and local refs in parallel
|
|
278
288
|
yield Promise.all([_this4.loadSchema(_this4.getSchemaName()), _this4.loadObject(), _this4.loadRefs()]);
|
|
279
289
|
// We finally build the forms then fill it
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../core/client/mixins/mixin.base-editor.js"],"names":["baseEditorMixin","formRefs","props","baseObject","type","Object","default","baseQuery","clearButton","String","resetButton","computed","editorTitle","getSchema","schemaTitle","title","$t","object","getObject","interpolation","escapeValue","data","applyButton","applyInProgress","methods","getMode","objectId","setFormDisabled","formName","disabled","forEach","name","form","$refs","loadRefs","isFulfilled","isDisabled","logger","warn","fillEditor","perspective","fill","clear","reset","validateForms","isValid","result","validate","applyForms","isApplied","i","length","apply","error","submittedForms","submitted","getBaseObject","assign","_","get","_id","getBaseQuery","query","$select","getSchemaName","schemaName","service","getService","onServiceResponse","response","$emit","omit","servicePatch","serviceCreate","refresh","loadService","Promise","all","loadSchema","loadObject","map","build"],"mappings":"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","file":"mixin.base-editor.js","sourcesContent":["import logger from 'loglevel'\r\nimport _ from 'lodash'\r\n\r\nexport default function baseEditorMixin (formRefs) {\r\n return {\r\n props: {\r\n baseObject: {\r\n type: Object,\r\n default: function () {\r\n return {}\r\n }\r\n },\r\n baseQuery: {\r\n type: Object,\r\n default: function () {\r\n return {}\r\n }\r\n },\r\n clearButton: {\r\n type: String,\r\n default: ''\r\n },\r\n resetButton: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n computed: {\r\n editorTitle () {\r\n // Retuns the schema title\r\n if (this.getSchema()) {\r\n const schemaTitle = this.getSchema().title\r\n return this.$t(schemaTitle, { object: this.getObject(), interpolation: { escapeValue: false } })\r\n }\r\n return ''\r\n }\r\n },\r\n data () {\r\n return {\r\n applyButton: '',\r\n applyInProgress: false\r\n }\r\n },\r\n methods: {\r\n getMode () {\r\n if (this.objectId) return 'update'\r\n return 'create'\r\n },\r\n // Disabled forms will not be applied\r\n setFormDisabled (formName, disabled) {\r\n // Iterate over forms\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (name === formName) {\r\n if (form.loadRefs().isFulfilled()) {\r\n form.isDisabled = disabled\r\n } else {\r\n logger.warn(`Trying to disable in the editor a non-ready form named ${name}`)\r\n }\r\n }\r\n })\r\n },\r\n fillEditor () {\r\n // Iterate over forms\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (form.loadRefs().isFulfilled()) {\r\n if (this.getObject()) {\r\n if (this.perspective !== '') {\r\n form.fill(this.getObject()[this.perspective])\r\n } else {\r\n form.fill(this.getObject())\r\n }\r\n } else {\r\n form.clear()\r\n }\r\n } else {\r\n logger.warn(`Trying to fill the editor with a non-ready form named ${name}`)\r\n }\r\n })\r\n // Update button accordingly\r\n if (this.getMode() === 'update') {\r\n this.applyButton = this.$t('UPDATE')\r\n } else {\r\n this.applyButton = this.$t('CREATE')\r\n }\r\n },\r\n clear () {\r\n // Iterate over forms\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (form.loadRefs().isFulfilled()) {\r\n form.clear()\r\n } else {\r\n logger.warn(`Trying to clear the editor with a non-ready form named ${name}`)\r\n }\r\n })\r\n },\r\n reset () {\r\n this.fillEditor()\r\n },\r\n validateForms () {\r\n // Iterate over forms for validation\r\n let isValid = true\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (form.loadRefs().isFulfilled()) {\r\n if (!form.isDisabled) {\r\n const result = form.validate()\r\n if (!result.isValid) {\r\n isValid = false\r\n }\r\n }\r\n } else {\r\n logger.warn(`Trying to apply the editor with a non-ready form named ${name}`)\r\n isValid = false\r\n }\r\n })\r\n return isValid\r\n },\r\n async applyForms (object) {\r\n // Apply each form\r\n let isApplied = true\r\n for (let i = 0; i < formRefs.length; i++) {\r\n const name = formRefs[i]\r\n const form = this.$refs[name]\r\n if (!form.isDisabled) {\r\n try {\r\n await form.apply(object)\r\n } catch (error) {\r\n isApplied = false\r\n break\r\n }\r\n }\r\n }\r\n return isApplied\r\n },\r\n async submittedForms (object) {\r\n // Apply each form\r\n let isApplied = true\r\n for (let i = 0; i < formRefs.length; i++) {\r\n const name = formRefs[i]\r\n const form = this.$refs[name]\r\n if (!form.isDisabled) {\r\n try {\r\n await form.submitted(object)\r\n } catch (error) {\r\n isApplied = false\r\n break\r\n }\r\n }\r\n }\r\n return isApplied\r\n },\r\n getBaseObject () {\r\n // Start from default object or input base object\r\n // This is used to keep track of existing or additional \"hidden\" or \"internal\" properties\r\n // in addition to the ones edited throught the form\r\n const object = {}\r\n const baseObject = this.getObject() || this.baseObject\r\n if (this.perspective !== '') {\r\n Object.assign(object, _.get(baseObject, this.perspective))\r\n // Keep track of ID as it is used to know if we update or create\r\n if (baseObject._id) object._id = baseObject._id\r\n } else {\r\n Object.assign(object, baseObject)\r\n }\r\n return object\r\n },\r\n getBaseQuery () {\r\n // Start from default query\r\n const query = {}\r\n Object.assign(query, this.baseQuery)\r\n if ((this.getMode() === 'update') && (this.perspective !== '')) {\r\n Object.assign(query, { $select: ['_id', this.perspective] })\r\n }\r\n return query\r\n },\r\n getSchemaName () {\r\n // When used with a service by default use the same name for schema as for service\r\n let schemaName = this.service + (this.objectId ? '.update' : '.create')\r\n if (this.perspective) {\r\n schemaName += ('-' + this.perspective)\r\n }\r\n return schemaName\r\n },\r\n async apply () {\r\n let isValid = this.validateForms()\r\n // Now the form is validated apply it to the target object\r\n const object = this.getBaseObject()\r\n\r\n if (isValid) {\r\n isValid = await this.applyForms(object)\r\n } else {\r\n // Stop here if invalid or not applied correctly\r\n return\r\n }\r\n\r\n if (this.getService()) {\r\n // Small helper to avoid repeating too much similar code\r\n const onServiceResponse = async (response) => {\r\n await this.submittedForms(response)\r\n this.$emit('applied', response)\r\n }\r\n\r\n const query = this.getBaseQuery(object)\r\n this.applyInProgress = true\r\n // Update the item\r\n try {\r\n if (this.getMode() === 'update') {\r\n // Editing mode => patch the item\r\n if (this.perspective !== '') {\r\n const data = {}\r\n data[this.perspective] = _.omit(object, ['_id'])\r\n const response = await this.servicePatch(this.objectId, data, { query })\r\n // Keep track of ID as it is used to know if we update or create\r\n if (object._id) response._id = object._id\r\n onServiceResponse(response)\r\n } else {\r\n const response = await this.servicePatch(this.objectId, object, { query })\r\n onServiceResponse(response)\r\n }\r\n } else if (this.getMode() === 'create') {\r\n // Creation mode => create the item\r\n const response = await this.serviceCreate(object, { query })\r\n onServiceResponse(response)\r\n } else {\r\n logger.warn('Invalid editor mode')\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 this.applyInProgress = false\r\n }\r\n },\r\n async refresh () {\r\n // When the service is available\r\n await this.loadService()\r\n // We can then load the schema/object and local refs in parallel\r\n await Promise.all([\r\n this.loadSchema(this.getSchemaName()),\r\n this.loadObject(),\r\n this.loadRefs()\r\n ])\r\n // We finally build the forms then fill it\r\n await Promise.all(formRefs.map(name => this.$refs[name].build()))\r\n this.fillEditor()\r\n this.$emit('editor-ready', this)\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../core/client/mixins/mixin.base-editor.js"],"names":["baseEditorMixin","formRefs","props","baseObject","type","Object","default","baseQuery","schemaName","String","undefined","clearButton","resetButton","computed","editorTitle","getSchema","schemaTitle","title","$t","object","getObject","interpolation","escapeValue","data","applyButton","applyInProgress","methods","getMode","objectId","setFormDisabled","formName","disabled","forEach","name","form","$refs","loadRefs","isFulfilled","isDisabled","logger","warn","fillEditor","perspective","fill","_","get","clear","reset","validateForms","isValid","result","validate","applyForms","isApplied","i","length","apply","error","submittedForms","submitted","getBaseObject","perspectiveAsObject","assign","set","_id","getBaseQuery","query","$select","getSchemaName","$route","service","getService","onServiceResponse","response","$emit","omit","patch","create","refresh","Promise","all","loadSchema","loadObject","map","build"],"mappings":";;;;;kBAGwBA,e;;AAHxB;;;;AACA;;;;;;;;AAEe,SAASA,eAAT,CAA0BC,QAA1B,EAAoC;AACjD,SAAO;AACLC,WAAO;AACLC,kBAAY;AACVC,cAAMC,MADI;AAEVC,iBAAS,MAAM,CAAE;AAFP,OADP;AAKLC,iBAAW;AACTH,cAAMC,MADG;AAETC,iBAAS,MAAM,CAAE;AAFR,OALN;AASLE,kBAAY;AACVJ,cAAMK,MADI;AAEVH,iBAASI;AAFC,OATP;AAaLC,mBAAa;AACXP,cAAMK,MADK;AAEXH,iBAAS;AAFE,OAbR;AAiBLM,mBAAa;AACXR,cAAMK,MADK;AAEXH,iBAAS;AAFE;AAjBR,KADF;AAuBLO,cAAU;AACRC,oBAAe;AACb;AACA,YAAI,KAAKC,SAAL,EAAJ,EAAsB;AACpB,gBAAMC,cAAc,KAAKD,SAAL,GAAiBE,KAArC;AACA,iBAAO,KAAKC,EAAL,CAAQF,WAAR,EAAqB,EAAEG,QAAQ,KAAKC,SAAL,EAAV,EAA4BC,eAAe,EAAEC,aAAa,KAAf,EAA3C,EAArB,CAAP;AACD;AACD,eAAO,EAAP;AACD;AARO,KAvBL;AAiCLC,WAAQ;AACN,aAAO;AACLC,qBAAa,EADR;AAELC,yBAAiB;AAFZ,OAAP;AAID,KAtCI;AAuCLC,aAAS;AACPC,gBAAW;AACT,YAAI,KAAKC,QAAT,EAAmB,OAAO,QAAP;AACnB,eAAO,QAAP;AACD,OAJM;AAKP;AACAC,sBAAiBC,QAAjB,EAA2BC,QAA3B,EAAqC;AACnC;AACA9B,iBAAS+B,OAAT,CAAiBC,QAAQ;AACvB,gBAAMC,OAAO,KAAKC,KAAL,CAAWF,IAAX,CAAb;AACA,cAAIA,SAASH,QAAb,EAAuB;AACrB,gBAAII,KAAKE,QAAL,GAAgBC,WAAhB,EAAJ,EAAmC;AACjCH,mBAAKI,UAAL,GAAkBP,QAAlB;AACD,aAFD,MAEO;AACLQ,iCAAOC,IAAP,CAAa,0DAAyDP,IAAK,EAA3E;AACD;AACF;AACF,SATD;AAUD,OAlBM;AAmBPQ,mBAAc;AACZ;AACAxC,iBAAS+B,OAAT,CAAiBC,QAAQ;AACvB,gBAAMC,OAAO,KAAKC,KAAL,CAAWF,IAAX,CAAb;AACA,cAAIC,KAAKE,QAAL,GAAgBC,WAAhB,EAAJ,EAAmC;AACjC,gBAAI,KAAKjB,SAAL,EAAJ,EAAsB;AACpB,kBAAI,KAAKsB,WAAL,KAAqB,EAAzB,EAA6B;AAC3BR,qBAAKS,IAAL,CAAUC,iBAAEC,GAAF,CAAM,KAAKzB,SAAL,EAAN,EAAwB,KAAKsB,WAA7B,CAAV;AACD,eAFD,MAEO;AACLR,qBAAKS,IAAL,CAAU,KAAKvB,SAAL,EAAV;AACD;AACF,aAND,MAMO;AACLc,mBAAKY,KAAL;AACD;AACF,WAVD,MAUO;AACLP,+BAAOC,IAAP,CAAa,yDAAwDP,IAAK,EAA1E;AACD;AACF,SAfD;AAgBA;AACA,YAAI,KAAKN,OAAL,OAAmB,QAAvB,EAAiC;AAC/B,eAAKH,WAAL,GAAmB,KAAKN,EAAL,CAAQ,QAAR,CAAnB;AACD,SAFD,MAEO;AACL,eAAKM,WAAL,GAAmB,KAAKN,EAAL,CAAQ,QAAR,CAAnB;AACD;AACF,OA3CM;AA4CP4B,cAAS;AACP;AACA7C,iBAAS+B,OAAT,CAAiBC,QAAQ;AACvB,gBAAMC,OAAO,KAAKC,KAAL,CAAWF,IAAX,CAAb;AACA,cAAIC,KAAKE,QAAL,GAAgBC,WAAhB,EAAJ,EAAmC;AACjCH,iBAAKY,KAAL;AACD,WAFD,MAEO;AACLP,+BAAOC,IAAP,CAAa,0DAAyDP,IAAK,EAA3E;AACD;AACF,SAPD;AAQD,OAtDM;AAuDPc,cAAS;AACP,aAAKN,UAAL;AACD,OAzDM;AA0DPO,sBAAiB;AACf;AACA,YAAIC,UAAU,IAAd;AACAhD,iBAAS+B,OAAT,CAAiBC,QAAQ;AACvB,gBAAMC,OAAO,KAAKC,KAAL,CAAWF,IAAX,CAAb;AACA,cAAIC,KAAKE,QAAL,GAAgBC,WAAhB,EAAJ,EAAmC;AACjC,gBAAI,CAACH,KAAKI,UAAV,EAAsB;AACpB,oBAAMY,SAAShB,KAAKiB,QAAL,EAAf;AACA,kBAAI,CAACD,OAAOD,OAAZ,EAAqB;AACnBA,0BAAU,KAAV;AACD;AACF;AACF,WAPD,MAOO;AACLV,+BAAOC,IAAP,CAAa,0DAAyDP,IAAK,EAA3E;AACAgB,sBAAU,KAAV;AACD;AACF,SAbD;AAcA,eAAOA,OAAP;AACD,OA5EM;AA6EDG,gBAAN,CAAkBjC,MAAlB,EAA0B;AAAA;;AAAA;AACxB;AACA,cAAIkC,YAAY,IAAhB;AACA,eAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIrD,SAASsD,MAA7B,EAAqCD,GAArC,EAA0C;AACxC,kBAAMrB,OAAOhC,SAASqD,CAAT,CAAb;AACA,kBAAMpB,OAAO,MAAKC,KAAL,CAAWF,IAAX,CAAb;AACA,gBAAI,CAACC,KAAKI,UAAV,EAAsB;AACpB,kBAAI;AACF,sBAAMJ,KAAKsB,KAAL,CAAWrC,MAAX,CAAN;AACD,eAFD,CAEE,OAAOsC,KAAP,EAAc;AACdJ,4BAAY,KAAZ;AACA;AACD;AACF;AACF;AACD,iBAAOA,SAAP;AAfwB;AAgBzB,OA7FM;AA8FDK,oBAAN,CAAsBvC,MAAtB,EAA8B;AAAA;;AAAA;AAC5B;AACA,cAAIkC,YAAY,IAAhB;AACA,eAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIrD,SAASsD,MAA7B,EAAqCD,GAArC,EAA0C;AACxC,kBAAMrB,OAAOhC,SAASqD,CAAT,CAAb;AACA,kBAAMpB,OAAO,OAAKC,KAAL,CAAWF,IAAX,CAAb;AACA,gBAAI,CAACC,KAAKI,UAAV,EAAsB;AACpB,kBAAI;AACF,sBAAMJ,KAAKyB,SAAL,CAAexC,MAAf,CAAN;AACD,eAFD,CAEE,OAAOsC,KAAP,EAAc;AACdJ,4BAAY,KAAZ;AACA;AACD;AACF;AACF;AACD,iBAAOA,SAAP;AAf4B;AAgB7B,OA9GM;AA+GPO,sBAAiB;AACf;AACA;AACA;AACA,cAAMzC,SAAS,EAAf;AACA,cAAMhB,aAAa,KAAKiB,SAAL,MAAoB,KAAKjB,UAA5C;AACA,YAAI,KAAKuC,WAAL,KAAqB,EAAzB,EAA6B;AAC3B,cAAI,KAAKmB,mBAAT,EAA8B;AAC5BxD,mBAAOyD,MAAP,CAAc3C,MAAd,EAAsByB,iBAAEC,GAAF,CAAM1C,UAAN,EAAkB,KAAKuC,WAAvB,CAAtB;AACD,WAFD,MAEO;AACLE,6BAAEmB,GAAF,CAAM5C,MAAN,EAAc,KAAKuB,WAAnB,EAAgCE,iBAAEC,GAAF,CAAM1C,UAAN,EAAkB,KAAKuC,WAAvB,CAAhC;AACD;AACD;AACA,cAAIvC,WAAW6D,GAAf,EAAoB7C,OAAO6C,GAAP,GAAa7D,WAAW6D,GAAxB;AACrB,SARD,MAQO;AACL3D,iBAAOyD,MAAP,CAAc3C,MAAd,EAAsBhB,UAAtB;AACD;AACD,eAAOgB,MAAP;AACD,OAjIM;AAkIP8C,qBAAgB;AACd;AACA,cAAMC,QAAQ,EAAd;AACA7D,eAAOyD,MAAP,CAAcI,KAAd,EAAqB,KAAK3D,SAA1B;AACA,YAAK,KAAKoB,OAAL,OAAmB,QAApB,IAAiC,KAAKe,WAAtC,IAAqD,KAAKmB,mBAA9D,EAAmF;AACjFxD,iBAAOyD,MAAP,CAAcI,KAAd,EAAqB,EAAEC,SAAS,CAAC,KAAD,EAAQ,KAAKzB,WAAb,CAAX,EAArB;AACD;AACD,eAAOwB,KAAP;AACD,OA1IM;AA2IPE,sBAAiB;AACf,YAAI,KAAK5D,UAAT,EAAqB,OAAO,KAAKA,UAAZ;AACrB;AACA,YAAIA,aAAaoC,iBAAEC,GAAF,CAAM,KAAKwB,MAAX,EAAmB,iBAAnB,CAAjB;AACA,YAAI7D,UAAJ,EAAgB,OAAOA,UAAP;AAChB;AACAA,qBAAa,KAAK8D,OAAL,IAAgB,KAAK1C,QAAL,GAAgB,SAAhB,GAA4B,SAA5C,CAAb;AACA,YAAI,KAAKc,WAAT,EAAsB;AACpBlC,wBAAe,MAAM,KAAKkC,WAA1B;AACD;AACD,eAAOlC,UAAP;AACD,OAtJM;AAuJDgD,WAAN,GAAe;AAAA;;AAAA;AACb,cAAIP,UAAU,OAAKD,aAAL,EAAd;AACA;AACA,gBAAM7B,SAAS,OAAKyC,aAAL,EAAf;;AAEA,cAAIX,OAAJ,EAAa;AACXA,sBAAU,MAAM,OAAKG,UAAL,CAAgBjC,MAAhB,CAAhB;AACD,WAFD,MAEO;AACL;AACA;AACD;;AAED,cAAI,OAAKoD,UAAL,EAAJ,EAAuB;AACrB;AACA,kBAAMC;AAAA,2CAAoB,WAAOC,QAAP,EAAoB;AAC5C,sBAAM,OAAKf,cAAL,CAAoBe,QAApB,CAAN;AACA,uBAAKC,KAAL,CAAW,SAAX,EAAsBD,QAAtB;AACD,eAHK;;AAAA;AAAA;AAAA;AAAA,gBAAN;;AAKA,kBAAMP,QAAQ,OAAKD,YAAL,CAAkB9C,MAAlB,CAAd;AACA,mBAAKM,eAAL,GAAuB,IAAvB;AACA;AACA,gBAAI;AACF,kBAAI,OAAKE,OAAL,OAAmB,QAAvB,EAAiC;AAC/B;AACA,oBAAI,OAAKe,WAAL,KAAqB,EAAzB,EAA6B;AAC3B,wBAAMnB,OAAO,EAAb;AACA,sBAAI,OAAKsC,mBAAT,EAA8B;AAC5BjB,qCAAEmB,GAAF,CAAMxC,IAAN,EAAY,OAAKmB,WAAjB,EAA8BE,iBAAE+B,IAAF,CAAOxD,MAAP,EAAe,CAAC,KAAD,CAAf,CAA9B;AACD,mBAFD,MAEO;AACLyB,qCAAEmB,GAAF,CAAMxC,IAAN,EAAY,OAAKmB,WAAjB,EAA8BE,iBAAEC,GAAF,CAAM1B,MAAN,EAAc,OAAKuB,WAAnB,CAA9B;AACD;AACD,wBAAM+B,WAAW,MAAM,OAAKF,UAAL,GAAkBK,KAAlB,CAAwB,OAAKhD,QAA7B,EAAuCL,IAAvC,EAA6C,EAAE2C,KAAF,EAA7C,CAAvB;AACA;AACA,sBAAI/C,OAAO6C,GAAX,EAAgBS,SAAST,GAAT,GAAe7C,OAAO6C,GAAtB;AAChBQ,oCAAkBC,QAAlB;AACD,iBAXD,MAWO;AACL,wBAAMA,WAAW,MAAM,OAAKF,UAAL,GAAkBK,KAAlB,CAAwB,OAAKhD,QAA7B,EAAuCT,MAAvC,EAA+C,EAAE+C,KAAF,EAA/C,CAAvB;AACAM,oCAAkBC,QAAlB;AACD;AACF,eAjBD,MAiBO,IAAI,OAAK9C,OAAL,OAAmB,QAAvB,EAAiC;AACtC;AACA,sBAAM8C,WAAW,MAAM,OAAKF,UAAL,GAAkBM,MAAlB,CAAyB1D,MAAzB,EAAiC,EAAE+C,KAAF,EAAjC,CAAvB;AACAM,kCAAkBC,QAAlB;AACD,eAJM,MAIA;AACLlC,mCAAOC,IAAP,CAAY,qBAAZ;AACD;AACF,aAzBD,CAyBE,OAAOiB,KAAP,EAAc;AACd;AACAlB,iCAAOkB,KAAP,CAAaA,KAAb;AACD;AACD,mBAAKhC,eAAL,GAAuB,KAAvB;AACD;AApDY;AAqDd,OA5MM;AA6MDqD,aAAN,GAAiB;AAAA;;AAAA;AACf;AACA,gBAAMC,QAAQC,GAAR,CAAY,CAChB,OAAKC,UAAL,CAAgB,OAAKb,aAAL,EAAhB,CADgB,EAEhB,OAAKc,UAAL,EAFgB,EAGhB,OAAK9C,QAAL,EAHgB,CAAZ,CAAN;AAKA;AACA,gBAAM2C,QAAQC,GAAR,CAAY/E,SAASkF,GAAT,CAAa;AAAA,mBAAQ,OAAKhD,KAAL,CAAWF,IAAX,EAAiBmD,KAAjB,EAAR;AAAA,WAAb,CAAZ,CAAN;AACA,iBAAK3C,UAAL;AACA,iBAAKiC,KAAL,CAAW,cAAX,EAA2B,MAA3B;AAVe;AAWhB;AAxNM;AAvCJ,GAAP;AAkQD","file":"mixin.base-editor.js","sourcesContent":["import logger from 'loglevel'\r\nimport _ from 'lodash'\r\n\r\nexport default function baseEditorMixin (formRefs) {\r\n return {\r\n props: {\r\n baseObject: {\r\n type: Object,\r\n default: () => {}\r\n },\r\n baseQuery: {\r\n type: Object,\r\n default: () => {}\r\n },\r\n schemaName: {\r\n type: String,\r\n default: undefined\r\n },\r\n clearButton: {\r\n type: String,\r\n default: ''\r\n },\r\n resetButton: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n computed: {\r\n editorTitle () {\r\n // Retuns the schema title\r\n if (this.getSchema()) {\r\n const schemaTitle = this.getSchema().title\r\n return this.$t(schemaTitle, { object: this.getObject(), interpolation: { escapeValue: false } })\r\n }\r\n return ''\r\n }\r\n },\r\n data () {\r\n return {\r\n applyButton: '',\r\n applyInProgress: false\r\n }\r\n },\r\n methods: {\r\n getMode () {\r\n if (this.objectId) return 'update'\r\n return 'create'\r\n },\r\n // Disabled forms will not be applied\r\n setFormDisabled (formName, disabled) {\r\n // Iterate over forms\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (name === formName) {\r\n if (form.loadRefs().isFulfilled()) {\r\n form.isDisabled = disabled\r\n } else {\r\n logger.warn(`Trying to disable in the editor a non-ready form named ${name}`)\r\n }\r\n }\r\n })\r\n },\r\n fillEditor () {\r\n // Iterate over forms\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (form.loadRefs().isFulfilled()) {\r\n if (this.getObject()) {\r\n if (this.perspective !== '') {\r\n form.fill(_.get(this.getObject(), this.perspective))\r\n } else {\r\n form.fill(this.getObject())\r\n }\r\n } else {\r\n form.clear()\r\n }\r\n } else {\r\n logger.warn(`Trying to fill the editor with a non-ready form named ${name}`)\r\n }\r\n })\r\n // Update button accordingly\r\n if (this.getMode() === 'update') {\r\n this.applyButton = this.$t('UPDATE')\r\n } else {\r\n this.applyButton = this.$t('CREATE')\r\n }\r\n },\r\n clear () {\r\n // Iterate over forms\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (form.loadRefs().isFulfilled()) {\r\n form.clear()\r\n } else {\r\n logger.warn(`Trying to clear the editor with a non-ready form named ${name}`)\r\n }\r\n })\r\n },\r\n reset () {\r\n this.fillEditor()\r\n },\r\n validateForms () {\r\n // Iterate over forms for validation\r\n let isValid = true\r\n formRefs.forEach(name => {\r\n const form = this.$refs[name]\r\n if (form.loadRefs().isFulfilled()) {\r\n if (!form.isDisabled) {\r\n const result = form.validate()\r\n if (!result.isValid) {\r\n isValid = false\r\n }\r\n }\r\n } else {\r\n logger.warn(`Trying to apply the editor with a non-ready form named ${name}`)\r\n isValid = false\r\n }\r\n })\r\n return isValid\r\n },\r\n async applyForms (object) {\r\n // Apply each form\r\n let isApplied = true\r\n for (let i = 0; i < formRefs.length; i++) {\r\n const name = formRefs[i]\r\n const form = this.$refs[name]\r\n if (!form.isDisabled) {\r\n try {\r\n await form.apply(object)\r\n } catch (error) {\r\n isApplied = false\r\n break\r\n }\r\n }\r\n }\r\n return isApplied\r\n },\r\n async submittedForms (object) {\r\n // Apply each form\r\n let isApplied = true\r\n for (let i = 0; i < formRefs.length; i++) {\r\n const name = formRefs[i]\r\n const form = this.$refs[name]\r\n if (!form.isDisabled) {\r\n try {\r\n await form.submitted(object)\r\n } catch (error) {\r\n isApplied = false\r\n break\r\n }\r\n }\r\n }\r\n return isApplied\r\n },\r\n getBaseObject () {\r\n // Start from default object or input base object\r\n // This is used to keep track of existing or additional \"hidden\" or \"internal\" properties\r\n // in addition to the ones edited throught the form\r\n const object = {}\r\n const baseObject = this.getObject() || this.baseObject\r\n if (this.perspective !== '') {\r\n if (this.perspectiveAsObject) {\r\n Object.assign(object, _.get(baseObject, this.perspective))\r\n } else {\r\n _.set(object, this.perspective, _.get(baseObject, this.perspective))\r\n }\r\n // Keep track of ID as it is used to know if we update or create\r\n if (baseObject._id) object._id = baseObject._id\r\n } else {\r\n Object.assign(object, baseObject)\r\n }\r\n return object\r\n },\r\n getBaseQuery () {\r\n // Start from default query\r\n const query = {}\r\n Object.assign(query, this.baseQuery)\r\n if ((this.getMode() === 'update') && this.perspective && this.perspectiveAsObject) {\r\n Object.assign(query, { $select: ['_id', this.perspective] })\r\n }\r\n return query\r\n },\r\n getSchemaName () {\r\n if (this.schemaName) return this.schemaName\r\n // Can be provided as route metadata\r\n let schemaName = _.get(this.$route, 'meta.schemaName')\r\n if (schemaName) return schemaName\r\n // When used with a service by default use the same name for schema as for service\r\n schemaName = this.service + (this.objectId ? '.update' : '.create')\r\n if (this.perspective) {\r\n schemaName += ('-' + this.perspective)\r\n }\r\n return schemaName\r\n },\r\n async apply () {\r\n let isValid = this.validateForms()\r\n // Now the form is validated apply it to the target object\r\n const object = this.getBaseObject()\r\n\r\n if (isValid) {\r\n isValid = await this.applyForms(object)\r\n } else {\r\n // Stop here if invalid or not applied correctly\r\n return\r\n }\r\n\r\n if (this.getService()) {\r\n // Small helper to avoid repeating too much similar code\r\n const onServiceResponse = async (response) => {\r\n await this.submittedForms(response)\r\n this.$emit('applied', response)\r\n }\r\n\r\n const query = this.getBaseQuery(object)\r\n this.applyInProgress = true\r\n // Update the item\r\n try {\r\n if (this.getMode() === 'update') {\r\n // Editing mode => patch the item\r\n if (this.perspective !== '') {\r\n const data = {}\r\n if (this.perspectiveAsObject) {\r\n _.set(data, this.perspective, _.omit(object, ['_id']))\r\n } else {\r\n _.set(data, this.perspective, _.get(object, this.perspective))\r\n }\r\n const response = await this.getService().patch(this.objectId, data, { query })\r\n // Keep track of ID as it is used to know if we update or create\r\n if (object._id) response._id = object._id\r\n onServiceResponse(response)\r\n } else {\r\n const response = await this.getService().patch(this.objectId, object, { query })\r\n onServiceResponse(response)\r\n }\r\n } else if (this.getMode() === 'create') {\r\n // Creation mode => create the item\r\n const response = await this.getService().create(object, { query })\r\n onServiceResponse(response)\r\n } else {\r\n logger.warn('Invalid editor mode')\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 this.applyInProgress = false\r\n }\r\n },\r\n async refresh () {\r\n // We can then load the schema/object and local refs in parallel\r\n await Promise.all([\r\n this.loadSchema(this.getSchemaName()),\r\n this.loadObject(),\r\n this.loadRefs()\r\n ])\r\n // We finally build the forms then fill it\r\n await Promise.all(formRefs.map(name => this.$refs[name].build()))\r\n this.fillEditor()\r\n this.$emit('editor-ready', this)\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../core/client/mixins/mixin.base-field.js"],"names":["baseFieldMixin","props","values","type","Object","default","properties","required","Boolean","
|
|
1
|
+
{"version":3,"sources":["../../../../core/client/mixins/mixin.base-field.js"],"names":["baseFieldMixin","props","values","type","Object","default","properties","required","Boolean","readOnly","computed","label","_","get","field","$i18n","i18next","exists","$t","helper","hasError","isEmpty","error","errorLabel","disabled","data","model","emptyModel","watch","updateValue","name","clear","methods","value","isNil","fill","isEqual","validate","invalidate","onChanged","$nextTick","$emit","apply","object","set","submitted","created"],"mappings":"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","file":"mixin.base-field.js","sourcesContent":["import _ from 'lodash'\r\n\r\nconst baseFieldMixin = {\r\n props: {\r\n values: {\r\n type: Object,\r\n default: () => { return null }\r\n },\r\n properties: {\r\n type: Object,\r\n required: true\r\n },\r\n required: {\r\n type: Boolean,\r\n default: false\r\n },\r\n readOnly: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n computed: {\r\n label () {\r\n // Check if we have a translation key or directly the label content\r\n const label = _.get(this.properties.field, 'label', '')\r\n return (this.$i18n.i18next.exists(label) ? this.$t(label) : label)\r\n },\r\n helper () {\r\n // Check if we have a translation key or directly the helper content\r\n const helper = _.get(this.properties.field, 'helper', '')\r\n return (this.$i18n.i18next.exists(helper) ? this.$t(helper) : helper)\r\n },\r\n hasError () {\r\n return !_.isEmpty(this.error)\r\n },\r\n errorLabel () {\r\n // Check for overriden error label\r\n let error = _.get(this.properties.field, 'errorLabel', '')\r\n // If not use default validator error messages\r\n if (!error) error = this.error\r\n // Else check if we have a translation key or directly the error content\r\n return (this.$i18n.i18next.exists(error) ? this.$t(error) : error)\r\n },\r\n disabled () {\r\n return _.get(this.properties.field, 'disabled', false)\r\n }\r\n },\r\n data () {\r\n return {\r\n // The model to used for data binding with the field\r\n model: this.emptyModel(),\r\n // The error message\r\n error: ''\r\n }\r\n },\r\n watch: {\r\n values: function () {\r\n if (this.values) this.updateValue(_.get(this.values, this.properties.name))\r\n else this.clear()\r\n }\r\n },\r\n methods: {\r\n updateValue (value) {\r\n if (_.isNil(value)) this.clear()\r\n else this.fill(value)\r\n },\r\n emptyModel () {\r\n return ''\r\n },\r\n isEmpty () {\r\n return _.isEqual(this.model, this.emptyModel())\r\n },\r\n value () {\r\n return this.model\r\n },\r\n fill (value) {\r\n this.model = value\r\n this.error = ''\r\n },\r\n clear () {\r\n this.fill(_.get(this.properties, 'default', this.emptyModel()))\r\n },\r\n validate () {\r\n this.error = ''\r\n },\r\n invalidate (error) {\r\n this.error = error\r\n },\r\n async onChanged () {\r\n // Tell the form that this field has a new value.\r\n // Consequently the form will validate or invalidate the field\r\n // Warning: This method must be called once the form is mounted\r\n // We need to force a refresh so that the model is correctly updated by Vuejs\r\n await this.$nextTick()\r\n this.$emit('field-changed', this.properties.name, this.model)\r\n },\r\n apply (object, field) {\r\n // To be overloaded if you need to perform specific operations before the form has been submitted\r\n // By default simply set the current value on the given object field to apply the form\r\n _.set(object, field, this.value())\r\n },\r\n submitted (object, field) {\r\n // To be overloaded if you need to perform specific operations after the form has been submitted\r\n }\r\n },\r\n created () {\r\n if (this.values) this.updateValue(_.get(this.values, this.properties.name))\r\n }\r\n}\r\n\r\nexport default baseFieldMixin\r\n"]}
|
|
@@ -60,19 +60,13 @@ exports.default = {
|
|
|
60
60
|
},
|
|
61
61
|
computed: {
|
|
62
62
|
name() {
|
|
63
|
-
return this.
|
|
63
|
+
return _lodash2.default.get(this.item, this.options.nameField || 'name', '');
|
|
64
64
|
},
|
|
65
65
|
description() {
|
|
66
|
-
return this.
|
|
66
|
+
return _lodash2.default.get(this.item, this.options.descriptionField || 'description', '');
|
|
67
67
|
}
|
|
68
68
|
},
|
|
69
69
|
methods: {
|
|
70
|
-
getName() {
|
|
71
|
-
return _lodash2.default.get(this.item, this.options.nameField || 'name', '');
|
|
72
|
-
},
|
|
73
|
-
getDescription() {
|
|
74
|
-
return _lodash2.default.get(this.item, this.options.descriptionField || 'description', '');
|
|
75
|
-
},
|
|
76
70
|
setActions(actions) {
|
|
77
71
|
// As context is different for each item we need to clone the global action configuration
|
|
78
72
|
// otheriwse context will always reference the last processed item
|
|
@@ -90,21 +84,42 @@ exports.default = {
|
|
|
90
84
|
const actions = this.filteredActions();
|
|
91
85
|
if (actions && actions.length > 0) this.setActions(actions);else this.clearActions();
|
|
92
86
|
},
|
|
87
|
+
onItemToggled(toggled) {
|
|
88
|
+
this.$emit('item-toggled', this.item, toggled);
|
|
89
|
+
},
|
|
93
90
|
onItemSelected(section) {
|
|
94
91
|
this.$emit('item-selected', this.item, section);
|
|
95
92
|
},
|
|
93
|
+
canViewItem() {
|
|
94
|
+
return this.$can('read', this.service, this.contextId, this.item);
|
|
95
|
+
},
|
|
96
96
|
viewItem() {
|
|
97
97
|
const path = this.$route.fullPath + `/view/${this.item._id}`;
|
|
98
98
|
this.$router.push(path);
|
|
99
99
|
},
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
100
|
+
canEditItem() {
|
|
101
|
+
return this.$can('update', this.service, this.contextId, this.item);
|
|
102
|
+
},
|
|
103
|
+
editItem(scope = undefined, properties = undefined) {
|
|
104
|
+
const route = this.$route;
|
|
105
|
+
let subPath = 'edit/' + this.item._id;
|
|
106
|
+
// Add trailing / if required (as sometimes it might be already present)
|
|
107
|
+
if (!route.path.endsWith('/')) subPath = `/${subPath}`;
|
|
108
|
+
if (scope) {
|
|
109
|
+
if (properties) subPath += `/${properties}`;else subPath += `/${scope}`;
|
|
110
|
+
}
|
|
111
|
+
this.$router.push({
|
|
112
|
+
path: route.path + subPath,
|
|
113
|
+
params: route.params,
|
|
114
|
+
query: route.query
|
|
115
|
+
});
|
|
116
|
+
},
|
|
117
|
+
canRemoveItem() {
|
|
118
|
+
return this.$can('remove', this.service, this.contextId, this.item);
|
|
103
119
|
},
|
|
104
120
|
removeItem(prompt) {
|
|
105
|
-
if (!['none', 'confirm', 'input'].includes(prompt)) return;
|
|
106
121
|
if (prompt === 'confirm' || prompt === 'input') {
|
|
107
|
-
const name = this.
|
|
122
|
+
const name = this.name;
|
|
108
123
|
const input = {
|
|
109
124
|
type: 'text',
|
|
110
125
|
model: '',
|
|
@@ -132,7 +147,7 @@ exports.default = {
|
|
|
132
147
|
}
|
|
133
148
|
},
|
|
134
149
|
exportItem() {
|
|
135
|
-
const name = this.
|
|
150
|
+
const name = this.name;
|
|
136
151
|
const file = name + '.json';
|
|
137
152
|
if ((0, _quasar.exportFile)(file, JSON.stringify(this.item))) {
|
|
138
153
|
this.$toast({ type: 'error', message: this.$t('mixins.baseItem.ITEM_EXPORTED', { name, file }) });
|