@kalisio/kdk 1.3.6 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nyc_output/{0d403586-0c7c-4336-94d1-a49e9f02a905.json → 058fc679-d60a-4501-ac04-71171e5200b8.json} +0 -0
- package/.nyc_output/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +1 -0
- package/.nyc_output/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +1 -0
- package/.nyc_output/{21dd57bd-48c5-41c8-8800-252db32a9366.json → 8b1830fa-932e-4a61-9837-4a5b18f83ea9.json} +0 -0
- package/.nyc_output/{3eb3a2ca-53c2-4551-ba6b-adf70f9a53cd.json → afd2d144-3570-4858-b94a-b523dbd023dd.json} +0 -0
- package/.nyc_output/processinfo/058fc679-d60a-4501-ac04-71171e5200b8.json +1 -0
- package/.nyc_output/processinfo/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +1 -0
- package/.nyc_output/processinfo/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +1 -0
- package/.nyc_output/processinfo/8b1830fa-932e-4a61-9837-4a5b18f83ea9.json +1 -0
- package/.nyc_output/processinfo/afd2d144-3570-4858-b94a-b523dbd023dd.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -1
- package/CHANGELOG.md +167 -79
- package/README.md +1 -1
- package/coverage/core/api/application.js.html +436 -436
- package/coverage/core/api/authentication.js.html +119 -119
- package/coverage/core/api/db.js.html +201 -201
- package/coverage/core/api/hooks/hooks.account.js.html +48 -48
- package/coverage/core/api/hooks/hooks.authentication.js.html +64 -64
- package/coverage/core/api/hooks/hooks.authorisations.js.html +369 -378
- package/coverage/core/api/hooks/hooks.devices.js.html +49 -49
- package/coverage/core/api/hooks/hooks.groups.js.html +37 -37
- package/coverage/core/api/hooks/hooks.logger.js.html +27 -27
- package/coverage/core/api/hooks/hooks.model.js.html +269 -269
- package/coverage/core/api/hooks/hooks.organisations.js.html +183 -231
- package/coverage/core/api/hooks/hooks.pusher.js.html +114 -114
- package/coverage/core/api/hooks/hooks.query.js.html +234 -198
- package/coverage/core/api/hooks/hooks.service.js.html +82 -82
- package/coverage/core/api/hooks/hooks.storage.js.html +121 -121
- package/coverage/core/api/hooks/hooks.tags.js.html +232 -232
- package/coverage/core/api/hooks/hooks.users.js.html +304 -256
- package/coverage/core/api/hooks/index.html +172 -172
- package/coverage/core/api/hooks/index.js.html +24 -24
- package/coverage/core/api/index.html +75 -75
- package/coverage/core/api/index.js.html +26 -26
- package/coverage/core/api/marshall.js.html +57 -57
- package/coverage/core/api/models/groups.model.mongodb.js.html +20 -20
- package/coverage/core/api/models/index.html +50 -50
- package/coverage/core/api/models/organisations.model.mongodb.js.html +12 -12
- package/coverage/core/api/models/tags.model.mongodb.js.html +22 -22
- package/coverage/core/api/models/users.model.mongodb.js.html +20 -20
- package/coverage/core/api/oauth2-handler.js.html +18 -18
- package/coverage/core/api/oauth2-verifier.js.html +38 -38
- package/coverage/core/api/services/account/account.hooks.js.html +16 -16
- package/coverage/core/api/services/account/account.service.js.html +108 -108
- package/coverage/core/api/services/account/index.html +32 -32
- package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
- package/coverage/core/api/services/authorisations/authorisations.service.js.html +132 -129
- package/coverage/core/api/services/authorisations/index.html +28 -28
- package/coverage/core/api/services/databases/databases.hooks.js.html +9 -9
- package/coverage/core/api/services/databases/databases.service.js.html +12 -12
- package/coverage/core/api/services/databases/index.html +24 -24
- package/coverage/core/api/services/devices/devices.hooks.js.html +9 -9
- package/coverage/core/api/services/devices/devices.service.js.html +121 -121
- package/coverage/core/api/services/devices/index.html +28 -28
- package/coverage/core/api/services/groups/groups.hooks.js.html +9 -9
- package/coverage/core/api/services/groups/index.html +13 -13
- package/coverage/core/api/services/index.html +21 -21
- package/coverage/core/api/services/index.js.html +137 -137
- package/coverage/core/api/services/mailer/index.html +24 -24
- package/coverage/core/api/services/mailer/mailer.hooks.js.html +9 -9
- package/coverage/core/api/services/mailer/mailer.service.js.html +19 -19
- package/coverage/core/api/services/organisations/index.html +24 -24
- package/coverage/core/api/services/organisations/organisations.hooks.js.html +8 -8
- package/coverage/core/api/services/organisations/organisations.service.js.html +67 -67
- package/coverage/core/api/services/pusher/index.html +34 -34
- package/coverage/core/api/services/pusher/pusher.channels.js.html +8 -8
- package/coverage/core/api/services/pusher/pusher.hooks.js.html +10 -10
- package/coverage/core/api/services/pusher/pusher.service.js.html +414 -414
- package/coverage/core/api/services/storage/index.html +21 -21
- package/coverage/core/api/services/storage/storage.hooks.js.html +35 -35
- package/coverage/core/api/services/tags/index.html +21 -21
- package/coverage/core/api/services/tags/tags.hooks.js.html +25 -25
- package/coverage/core/api/services/users/index.html +21 -21
- package/coverage/core/api/services/users/users.hooks.js.html +33 -33
- package/coverage/core/common/errors.js.html +1 -1
- package/coverage/core/common/index.html +42 -27
- package/coverage/core/common/index.js.html +16 -16
- package/coverage/core/common/permissions.js.html +325 -265
- package/coverage/index.html +182 -182
- package/coverage/lcov-report/core/api/application.js.html +436 -436
- package/coverage/lcov-report/core/api/authentication.js.html +119 -119
- package/coverage/lcov-report/core/api/db.js.html +201 -201
- package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +48 -48
- package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +64 -64
- package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +369 -378
- package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +49 -49
- package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +37 -37
- package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +27 -27
- package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +269 -269
- package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +183 -231
- package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +114 -114
- package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +234 -198
- package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +82 -82
- package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +121 -121
- package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +232 -232
- package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +304 -256
- package/coverage/lcov-report/core/api/hooks/index.html +172 -172
- package/coverage/lcov-report/core/api/hooks/index.js.html +24 -24
- package/coverage/lcov-report/core/api/index.html +75 -75
- package/coverage/lcov-report/core/api/index.js.html +26 -26
- package/coverage/lcov-report/core/api/marshall.js.html +57 -57
- package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +20 -20
- package/coverage/lcov-report/core/api/models/index.html +50 -50
- package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +12 -12
- package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +22 -22
- package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +20 -20
- package/coverage/lcov-report/core/api/oauth2-handler.js.html +18 -18
- package/coverage/lcov-report/core/api/oauth2-verifier.js.html +38 -38
- package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +16 -16
- package/coverage/lcov-report/core/api/services/account/account.service.js.html +108 -108
- package/coverage/lcov-report/core/api/services/account/index.html +32 -32
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +132 -129
- package/coverage/lcov-report/core/api/services/authorisations/index.html +28 -28
- package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +12 -12
- package/coverage/lcov-report/core/api/services/databases/index.html +24 -24
- package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +121 -121
- package/coverage/lcov-report/core/api/services/devices/index.html +28 -28
- package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/groups/index.html +13 -13
- package/coverage/lcov-report/core/api/services/index.html +21 -21
- package/coverage/lcov-report/core/api/services/index.js.html +137 -137
- package/coverage/lcov-report/core/api/services/mailer/index.html +24 -24
- package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +19 -19
- package/coverage/lcov-report/core/api/services/organisations/index.html +24 -24
- package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +8 -8
- package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +67 -67
- package/coverage/lcov-report/core/api/services/pusher/index.html +34 -34
- package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +8 -8
- package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +10 -10
- package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +414 -414
- package/coverage/lcov-report/core/api/services/storage/index.html +21 -21
- package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +35 -35
- package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
- package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +25 -25
- package/coverage/lcov-report/core/api/services/users/index.html +21 -21
- package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +33 -33
- package/coverage/lcov-report/core/common/errors.js.html +1 -1
- package/coverage/lcov-report/core/common/index.html +42 -27
- package/coverage/lcov-report/core/common/index.js.html +16 -16
- package/coverage/lcov-report/core/common/permissions.js.html +325 -265
- package/coverage/lcov-report/index.html +182 -182
- package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
- package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +118 -37
- package/coverage/lcov-report/map/api/hooks/index.html +7 -7
- package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
- package/coverage/lcov-report/map/api/index.html +1 -1
- package/coverage/lcov-report/map/api/index.js.html +1 -1
- package/coverage/lcov-report/map/api/marshall.js.html +1 -1
- package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/index.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
- package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
- 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 +2 -2
- package/coverage/lcov-report/map/api/services/features/index.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
- package/coverage/lcov-report/map/api/services/index.html +1 -1
- package/coverage/lcov-report/map/api/services/index.js.html +1 -1
- package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/errors.js.html +1 -1
- package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/grid.js.html +1 -1
- package/coverage/lcov-report/map/common/index.html +12 -12
- package/coverage/lcov-report/map/common/index.js.html +1 -1
- package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/permissions.js.html +1 -1
- package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
- 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 +3742 -3949
- package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
- package/coverage/map/api/hooks/hooks.query.js.html +118 -37
- package/coverage/map/api/hooks/index.html +7 -7
- package/coverage/map/api/hooks/index.js.html +1 -1
- package/coverage/map/api/index.html +1 -1
- package/coverage/map/api/index.js.html +1 -1
- package/coverage/map/api/marshall.js.html +1 -1
- package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/features.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/index.html +1 -1
- package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
- package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
- package/coverage/map/api/services/alerts/index.html +1 -1
- package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
- package/coverage/map/api/services/catalog/index.html +1 -1
- 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 +2 -2
- package/coverage/map/api/services/features/index.html +1 -1
- package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
- package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
- package/coverage/map/api/services/geocoder/index.html +1 -1
- package/coverage/map/api/services/index.html +1 -1
- package/coverage/map/api/services/index.js.html +1 -1
- package/coverage/map/common/dynamic-grid-source.js.html +1 -1
- package/coverage/map/common/errors.js.html +1 -1
- package/coverage/map/common/geotiff-grid-source.js.html +1 -1
- package/coverage/map/common/grid.js.html +1 -1
- package/coverage/map/common/index.html +12 -12
- package/coverage/map/common/index.js.html +1 -1
- package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
- package/coverage/map/common/moment-utils.js.html +1 -1
- package/coverage/map/common/opendap-grid-source.js.html +1 -1
- package/coverage/map/common/opendap-utils.js.html +1 -1
- package/coverage/map/common/permissions.js.html +1 -1
- package/coverage/map/common/time-based-grid-source.js.html +1 -1
- package/coverage/map/common/tms-utils.js.html +1 -1
- package/coverage/map/common/wcs-grid-source.js.html +1 -1
- package/coverage/map/common/wcs-utils.js.html +1 -1
- package/coverage/map/common/weacast-grid-source.js.html +1 -1
- 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/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/KFileField.vue +11 -40
- 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 +6 -2
- 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/KOptionsChooser.vue +2 -2
- 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 +138 -94
- package/lib/core/client/i18n/core_fr.json +61 -17
- package/lib/core/client/index.js +46 -14
- package/lib/core/client/index.js.map +1 -1
- package/lib/core/client/layout.js +8 -1
- package/lib/core/client/layout.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/reader.js +54 -0
- package/lib/core/client/reader.js.map +1 -0
- package/lib/core/client/readers/index.js +30 -0
- package/lib/core/client/readers/index.js.map +1 -0
- package/lib/core/client/readers/reader.csv.js +43 -0
- package/lib/core/client/readers/reader.csv.js.map +1 -0
- package/lib/core/client/readers/reader.json.js +38 -0
- package/lib/core/client/readers/reader.json.js.map +1 -0
- 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 +55 -29
- 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/KCaptureToolbar.vue +156 -0
- 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 +18 -8
- package/lib/map/client/components/KFeaturesTable.vue +27 -2
- package/lib/map/client/components/KLayerEditionToolbar.vue +51 -0
- package/lib/map/client/components/KLayerStyleEditor.vue +12 -5
- package/lib/map/client/components/KLayerStyleForm.vue +44 -33
- package/lib/map/client/components/KLocationInput.vue +126 -65
- package/lib/map/client/components/KLocationMap.vue +199 -84
- package/lib/map/client/components/KMeasureTool.vue +340 -0
- package/lib/map/client/components/KPositionIndicator.vue +1 -0
- package/lib/map/client/components/KTimeline.vue +41 -37
- 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 +33 -40
- package/lib/map/client/components/catalog/KLayerCategories.vue +86 -62
- package/lib/map/client/components/catalog/KLayersSelector.vue +44 -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 +7 -0
- 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 +119 -31
- package/lib/map/client/i18n/map_en.json +105 -20
- package/lib/map/client/i18n/map_fr.json +107 -23
- package/lib/map/client/init.js +24 -7
- 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/MaskLayer.js +73 -0
- package/lib/map/client/leaflet/MaskLayer.js.map +1 -0
- package/lib/map/client/mixins/globe/mixin.base-globe.js +7 -6
- 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/globe/mixin.popup.js +4 -0
- package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.tooltip.js +4 -0
- package/lib/map/client/mixins/globe/mixin.tooltip.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 +71 -8
- package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.canvas-layers.js +276 -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 +46 -93
- package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.geojson-layers.js +22 -11
- 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.popup.js +4 -0
- package/lib/map/client/mixins/map/mixin.popup.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/map/mixin.tooltip.js +4 -0
- package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
- package/lib/map/client/mixins/mixin.activity.js +62 -68
- package/lib/map/client/mixins/mixin.activity.js.map +1 -1
- package/lib/map/client/mixins/mixin.context.js +26 -3
- package/lib/map/client/mixins/mixin.context.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 +9 -7
- package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
- package/lib/map/client/mixins/mixin.infobox.js +4 -0
- package/lib/map/client/mixins/mixin.infobox.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/readers/index.js +42 -0
- package/lib/map/client/readers/index.js.map +1 -0
- package/lib/map/client/readers/reader.geojson.js +59 -0
- package/lib/map/client/readers/reader.geojson.js.map +1 -0
- package/lib/map/client/readers/reader.gpx.js +41 -0
- package/lib/map/client/readers/reader.gpx.js.map +1 -0
- package/lib/map/client/readers/reader.kml.js +41 -0
- package/lib/map/client/readers/reader.kml.js.map +1 -0
- package/lib/map/client/utils.js +52 -1
- 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 +203 -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 +192 -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 +18 -9
- package/test.client.js +1 -0
- package/tests/core/test-log-2021-09-02.log +47 -0
- package/tests/map/test-log-%DATE%.logYYYY-09-DD +6 -0
- package/tests/map/test-log-2021-09-02.log +3 -0
- package/.nyc_output/5baea3f8-cf8e-4c76-8ccf-0e48b6f16fa4.json +0 -1
- package/.nyc_output/dddde6b5-9024-4b0e-8d8b-4502d437b8a4.json +0 -1
- package/.nyc_output/ef5e94ba-9a99-4fb6-ab1d-1a974112bb83.json +0 -1
- package/.nyc_output/fd4681f8-5f41-4f17-b393-9f399b24c128.json +0 -1
- package/.nyc_output/processinfo/0d403586-0c7c-4336-94d1-a49e9f02a905.json +0 -1
- package/.nyc_output/processinfo/21dd57bd-48c5-41c8-8800-252db32a9366.json +0 -1
- package/.nyc_output/processinfo/3eb3a2ca-53c2-4551-ba6b-adf70f9a53cd.json +0 -1
- package/.nyc_output/processinfo/5baea3f8-cf8e-4c76-8ccf-0e48b6f16fa4.json +0 -1
- package/.nyc_output/processinfo/dddde6b5-9024-4b0e-8d8b-4502d437b8a4.json +0 -1
- package/.nyc_output/processinfo/ef5e94ba-9a99-4fb6-ab1d-1a974112bb83.json +0 -1
- package/.nyc_output/processinfo/fd4681f8-5f41-4f17-b393-9f399b24c128.json +0 -1
- package/extras/testcafe/Dockerfile +0 -48
- package/extras/testcafe/docker-entrypoint.sh +0 -27
- package/extras/testcafe/page-models/core/account.js +0 -75
- package/extras/testcafe/page-models/core/base-collection.js +0 -41
- package/extras/testcafe/page-models/core/base-page.js +0 -25
- package/extras/testcafe/page-models/core/groups.js +0 -36
- package/extras/testcafe/page-models/core/index.js +0 -140
- package/extras/testcafe/page-models/core/layout.js +0 -145
- package/extras/testcafe/page-models/core/members.js +0 -98
- package/extras/testcafe/page-models/core/organisations.js +0 -76
- package/extras/testcafe/page-models/core/screens.js +0 -99
- package/extras/testcafe/page-models/core/tags.js +0 -21
- package/extras/testcafe/page-models/map/add-layer.js +0 -51
- package/extras/testcafe/page-models/map/catalog.js +0 -132
- package/extras/testcafe/page-models/map/index.js +0 -36
- package/extras/testcafe/page-models/map/map-activity.js +0 -42
- package/extras/testcafe/page-models/map/timeline.js +0 -67
- 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 -423
- package/tests/core/client.test.js.skip +0 -37
- package/tests/core/config/default.js +0 -96
- 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 -432
- 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 -62
- 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/forecast-data/gfs-world/u-wind/2021-07-15_12-00-00_2021-07-15_12-00-00.grib +0 -0
- package/tests/map/forecast-data/gfs-world/v-wind/2021-07-15_12-00-00_2021-07-15_12-00-00.grib +0 -0
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../core/client/index.js"],"names":["init","utils","mixins","hooks","api","logger","debug","configure","services","Layout","initialize","Filter","Sorter","Search","Store","set","content","mode","undefined","filter","visible","current","widgets","actions","users","getService","on","user","_id","get","patch","Platform","is","cordova","document","addEventListener","_","window","device","error","notifier","PushNotification","android","vibrate","sound","forceShow","ios","alert","badge","windows","data","registrationId","devicesService","update","uuid","toast","message","timeout","response"],"mappings":"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","file":"index.js","sourcesContent":["import logger from 'loglevel'\r\nimport { Platform } from 'quasar'\r\nimport { Store } from './store'\r\nimport { Layout } from './layout'\r\nimport { Filter } from './filter'\r\nimport { Sorter } from './sorter'\r\nimport { Search } from './search'\r\nimport services from './services'\r\nimport * as utils from './utils'\r\nimport * as mixins from './mixins'\r\nimport * as hooks from './hooks'\r\n\r\n// We faced a bug in babel so that transform-runtime with export * from 'x' generates import statements in transpiled code\r\n// Tracked here : https://github.com/babel/babel/issues/2877\r\n// We tested the workaround given here https://github.com/babel/babel/issues/2877#issuecomment-270700000 with success so far\r\n\r\n// FIXME: we don't build vue component anymore, they are processed by webpack in the application template\r\n// export * from './components'\r\n\r\nexport * from './events'\r\nexport * from './api'\r\nexport * from './store'\r\nexport * from './layout'\r\nexport * from './theme'\r\nexport * from './filter'\r\nexport * from './sorter'\r\nexport * from './search'\r\nexport * from './guards'\r\nexport * from '../common'\r\nexport { utils }\r\nexport { mixins }\r\nexport { hooks }\r\nexport * from './services'\r\n\r\nexport default function init () {\r\n const api = this\r\n\r\n logger.debug('Initializing core')\r\n api.configure(services)\r\n\r\n // Create the models listened by the main layout/pages components\r\n // You must use the patch method on the store to update those models\r\n // It is generally done by activity based componentq or through a local settings service\r\n Layout.initialize()\r\n Filter.initialize(api)\r\n Sorter.initialize()\r\n Search.initialize(api)\r\n Store.set('topPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('leftPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('rightPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('bottomPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('page', { content: null, mode: undefined, filter: {} })\r\n Store.set('window', { current: '', widgets: [], filter: {} })\r\n Store.set('fab', { actions: [], filter: {} })\r\n\r\n // Listen to the 'patched' event on the users\r\n const users = api.getService('users')\r\n users.on('patched', user => {\r\n // Check whether we need to update the current user\r\n if (user._id === Store.get('user._id')) {\r\n Store.patch('user', user)\r\n }\r\n })\r\n\r\n // -----------------------------------------------------------------------\r\n // | After this we should only have specific cordova initialisation code |\r\n // -----------------------------------------------------------------------\r\n if (!Platform.is.cordova) return\r\n\r\n /* NOT SURE IF THIS IS REQUIRED\r\n let permissionsPlugin = cordova.plugins.permissions\r\n const notificationPermissions = [\r\n permissionsPlugin.INTERNET,\r\n permissionsPlugin.ACCESS_NETWORK_STATE,\r\n permissionsPlugin.WAKE_LOCK,\r\n permissionsPlugin.VIBRATE\r\n ]\r\n\r\n function permissionsError() {\r\n const message = 'Required permissions for push notifications are missing or have been rejected, the application will not work as expected'\r\n logger.error(message)\r\n utils.toast({\r\n message,\r\n timeout: 10000\r\n })\r\n }\r\n function permissionsCheckSuccess(status) {\r\n // Request again if not given\r\n if (!status.hasPermission) {\r\n permissionsPlugin.requestPermissions(notificationPermissions, status => { if (!status.hasPermission) permissionsError() }, permissionsError)\r\n }\r\n }\r\n */\r\n\r\n document.addEventListener('deviceready', _ => {\r\n // Check for permissions, will launch permission request on failure\r\n // NOT SURE IF THIS IS REQUIRED\r\n // permissionsPlugin.hasPermission(notificationPermissions, permissionsCheckSuccess, null)\r\n if (!window.device) {\r\n logger.error('Unable to reach device information')\r\n return\r\n }\r\n\r\n const notifier = window.PushNotification.init({\r\n android: { vibrate: true, sound: true, forceShow: true },\r\n ios: { alert: true, badge: true, sound: true },\r\n windows: { }\r\n })\r\n notifier.on('registration', async (data) => {\r\n logger.debug('Push registrationID changed: ' + data.registrationId)\r\n // Store the registrationId\r\n window.device.registrationId = data.registrationId\r\n // update the user device\r\n const user = Store.get('user')\r\n if (user && window.device && window.device.registrationId) {\r\n const devicesService = api.getService('devices')\r\n const device = await devicesService.update(window.device.registrationId, window.device)\r\n logger.debug(`device ${device.uuid} updated with the id ${device.registrationId}`)\r\n }\r\n })\r\n notifier.on('notification', (data) => {\r\n // data.message,\r\n // data.title,\r\n // data.count,\r\n // data.sound,\r\n // data.image,\r\n // data.additionalData\r\n })\r\n notifier.on('error', (error) => {\r\n logger.error(error)\r\n utils.toast({\r\n message: error.message,\r\n timeout: 10000\r\n })\r\n })\r\n api.on('authenticated', async response => {\r\n const devicesService = api.getService('devices')\r\n // Only possible if registration ID already retrieved\r\n if (window.device && window.device.registrationId) {\r\n const device = await devicesService.update(window.device.registrationId, window.device)\r\n logger.debug(`device ${device.uuid} registered with the id ${device.registrationId}`)\r\n }\r\n })\r\n }, false)\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../core/client/index.js"],"names":["init","utils","mixins","hooks","api","logger","debug","Time","initialize","configure","services","Layout","Filter","Sorter","Search","Store","set","content","mode","undefined","filter","visible","current","widgets","actions","users","getService","on","user","_id","get","patch","Reader","register","readJSON","readCSV","Platform","is","cordova","document","addEventListener","_","window","device","error","notifier","PushNotification","android","vibrate","sound","forceShow","ios","alert","badge","windows","data","registrationId","devicesService","update","uuid","toast","message","timeout","response"],"mappings":"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","file":"index.js","sourcesContent":["import logger from 'loglevel'\r\nimport { Platform } from 'quasar'\r\nimport { Store } from './store'\r\nimport { Layout } from './layout'\r\nimport { Time } from './time'\r\nimport { Reader } from './reader'\r\nimport { Filter } from './filter'\r\nimport { Sorter } from './sorter'\r\nimport { Search } from './search'\r\nimport services from './services'\r\nimport * as utils from './utils'\r\nimport * as mixins from './mixins'\r\nimport * as hooks from './hooks'\r\nimport { readJSON, readCSV } from './readers'\r\n\r\n// We faced a bug in babel so that transform-runtime with export * from 'x' generates import statements in transpiled code\r\n// Tracked here : https://github.com/babel/babel/issues/2877\r\n// We tested the workaround given here https://github.com/babel/babel/issues/2877#issuecomment-270700000 with success so far\r\n\r\n// FIXME: we don't build vue component anymore, they are processed by webpack in the application template\r\n// export * from './components'\r\n\r\nexport * from './events'\r\nexport * from './api'\r\nexport * from './services'\r\nexport * from './store'\r\nexport * from './layout'\r\nexport * from './theme'\r\nexport * from './time'\r\nexport * from './filter'\r\nexport * from './reader'\r\nexport * from './sorter'\r\nexport * from './search'\r\nexport * from './guards'\r\nexport * from '../common'\r\nexport { utils }\r\nexport { mixins }\r\nexport { hooks }\r\n\r\nexport default function init () {\r\n const api = this\r\n\r\n logger.debug('Initializing core')\r\n // Initialize singletons that might be used globally first\r\n Time.initialize()\r\n // Then services\r\n api.configure(services)\r\n // Last, create the models listened by the main layout/pages components\r\n // You must use the patch method on the store to update those models\r\n // It is generally done by activity based componentq or through a local settings service\r\n Layout.initialize()\r\n Filter.initialize(api)\r\n Sorter.initialize()\r\n Search.initialize(api)\r\n Store.set('topPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('leftPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('rightPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('bottomPane', { content: null, mode: undefined, filter: {}, visible: false })\r\n Store.set('page', { content: null, mode: undefined, filter: {} })\r\n Store.set('window', { current: '', widgets: [], filter: {} })\r\n Store.set('fab', { actions: [], filter: {} })\r\n\r\n // Listen to the 'patched' event on the users\r\n const users = api.getService('users')\r\n users.on('patched', user => {\r\n // Check whether we need to update the current user\r\n if (user._id === Store.get('user._id')) {\r\n Store.patch('user', user)\r\n }\r\n })\r\n\r\n // Register default readers\r\n Reader.register('.json', readJSON)\r\n Reader.register('.csv', readCSV)\r\n\r\n // -----------------------------------------------------------------------\r\n // | After this we should only have specific cordova initialisation code |\r\n // -----------------------------------------------------------------------\r\n if (!Platform.is.cordova) return\r\n\r\n /* NOT SURE IF THIS IS REQUIRED\r\n let permissionsPlugin = cordova.plugins.permissions\r\n const notificationPermissions = [\r\n permissionsPlugin.INTERNET,\r\n permissionsPlugin.ACCESS_NETWORK_STATE,\r\n permissionsPlugin.WAKE_LOCK,\r\n permissionsPlugin.VIBRATE\r\n ]\r\n\r\n function permissionsError() {\r\n const message = 'Required permissions for push notifications are missing or have been rejected, the application will not work as expected'\r\n logger.error(message)\r\n utils.toast({\r\n message,\r\n timeout: 10000\r\n })\r\n }\r\n function permissionsCheckSuccess(status) {\r\n // Request again if not given\r\n if (!status.hasPermission) {\r\n permissionsPlugin.requestPermissions(notificationPermissions, status => { if (!status.hasPermission) permissionsError() }, permissionsError)\r\n }\r\n }\r\n */\r\n\r\n document.addEventListener('deviceready', _ => {\r\n // Check for permissions, will launch permission request on failure\r\n // NOT SURE IF THIS IS REQUIRED\r\n // permissionsPlugin.hasPermission(notificationPermissions, permissionsCheckSuccess, null)\r\n if (!window.device) {\r\n logger.error('Unable to reach device information')\r\n return\r\n }\r\n\r\n const notifier = window.PushNotification.init({\r\n android: { vibrate: true, sound: true, forceShow: true },\r\n ios: { alert: true, badge: true, sound: true },\r\n windows: { }\r\n })\r\n notifier.on('registration', async (data) => {\r\n logger.debug('Push registrationID changed: ' + data.registrationId)\r\n // Store the registrationId\r\n window.device.registrationId = data.registrationId\r\n // update the user device\r\n const user = Store.get('user')\r\n if (user && window.device && window.device.registrationId) {\r\n const devicesService = api.getService('devices')\r\n const device = await devicesService.update(window.device.registrationId, window.device)\r\n logger.debug(`device ${device.uuid} updated with the id ${device.registrationId}`)\r\n }\r\n })\r\n notifier.on('notification', (data) => {\r\n // data.message,\r\n // data.title,\r\n // data.count,\r\n // data.sound,\r\n // data.image,\r\n // data.additionalData\r\n })\r\n notifier.on('error', (error) => {\r\n logger.error(error)\r\n utils.toast({\r\n message: error.message,\r\n timeout: 10000\r\n })\r\n })\r\n api.on('authenticated', async response => {\r\n const devicesService = api.getService('devices')\r\n // Only possible if registration ID already retrieved\r\n if (window.device && window.device.registrationId) {\r\n const device = await devicesService.update(window.device.registrationId, window.device)\r\n logger.debug(`device ${device.uuid} registered with the id ${device.registrationId}`)\r\n }\r\n })\r\n }, false)\r\n}\r\n"]}
|
|
@@ -78,8 +78,8 @@ const Layout = exports.Layout = {
|
|
|
78
78
|
const isArray = Array.isArray(content);
|
|
79
79
|
const modes = _lodash2.default.keys(content);
|
|
80
80
|
let filteredContent = content;
|
|
81
|
-
// Recurse ?
|
|
82
81
|
if (!isArray) {
|
|
82
|
+
// Recurse ?
|
|
83
83
|
if (filteredContent.content) {
|
|
84
84
|
filteredContent.content = this.filterContent(filteredContent.content, filter);
|
|
85
85
|
} else {
|
|
@@ -89,6 +89,13 @@ const Layout = exports.Layout = {
|
|
|
89
89
|
});
|
|
90
90
|
}
|
|
91
91
|
filteredContent = [filteredContent];
|
|
92
|
+
} else {
|
|
93
|
+
filteredContent.forEach(item => {
|
|
94
|
+
// Recurse ?
|
|
95
|
+
if (item.content) {
|
|
96
|
+
item.content = this.filterContent(item.content, filter);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
92
99
|
}
|
|
93
100
|
// Apply filtering
|
|
94
101
|
filteredContent = filteredContent.filter((0, _sift2.default)(filter));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../core/client/layout.js"],"names":["components","handlers","Layout","initialize","forEach","component","Store","set","content","mode","undefined","filter","visible","getHeader","get","setHeader","patch","setHeaderMode","setHeaderVisible","clearHeader","getFooter","setFooter","setFooterMode","setFooterVisible","clearFooter","validateMode","modes","_","keys","isEmpty","includes","filterContent","isArray","Array","filteredContent","contentForMode","getComponents","context","processedComponents","isVisible","componentName","componentKey","kebabCase","path","basename","uid","push","bindParam","param","startsWith","substring","bindParams","params","isNil","map","mapValues","value","key","generateHandler","name","isNot","args","result","handler","bindHandler","h","reduce","logger","debug","bindProperties","item","i","length","forOwn","bindContent","flatMapDeep","binding","bind","props"],"mappings":";;;;;;;AAAA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;AACA;;;;AAEA,MAAMA,aAAa,CAAC,QAAD,EAAW,QAAX,CAAnB;AACA,MAAMC,WAAW,CAAC,SAAD,EAAY,SAAZ,EAAuB,aAAvB,CAAjB;;AAEA;AACO,MAAMC,0BAAS;AACpBC,eAAc;AACZH,eAAWI,OAAX,CAAmBC,aAAa;AAC9BC,mBAAMC,GAAN,CAAUF,SAAV,EAAqB,EAAEG,SAAS,IAAX,EAAiBC,MAAMC,SAAvB,EAAkCC,QAAQ,EAA1C,EAA8CC,SAAS,KAAvD,EAArB;AACD,KAFD;AAGD,GALmB;AAMpBC,cAAa;AACX,WAAOP,aAAMQ,GAAN,CAAUd,WAAW,CAAX,CAAV,CAAP;AACD,GARmB;AASpBe,YAAWP,OAAX,EAAoBC,IAApB,EAA0BE,MAA1B,EAAkCC,OAAlC,EAA2C;AACzCN,iBAAMU,KAAN,CAAYhB,WAAW,CAAX,CAAZ,EAA2B,EAAEQ,OAAF,EAAWC,IAAX,EAAiBE,MAAjB,EAAyBC,OAAzB,EAA3B;AACD,GAXmB;AAYpBK,gBAAeR,IAAf,EAAqB;AACnBH,iBAAMU,KAAN,CAAYhB,WAAW,CAAX,CAAZ,EAA2B,EAAES,IAAF,EAA3B;AACD,GAdmB;AAepBS,mBAAkBN,OAAlB,EAA2B;AACzBN,iBAAMU,KAAN,CAAYhB,WAAW,CAAX,CAAZ,EAA2B,EAAEY,OAAF,EAA3B;AACD,GAjBmB;AAkBpBO,gBAAe;AACbb,iBAAMU,KAAN,CAAYhB,WAAW,CAAX,CAAZ,EAA2B,EAAEQ,SAAS,IAAX,EAAiBC,MAAMC,SAAvB,EAAkCE,SAAS,KAA3C,EAA3B;AACD,GApBmB;AAqBpBQ,cAAa;AACX,WAAOd,aAAMQ,GAAN,CAAUd,WAAW,CAAX,CAAV,CAAP;AACD,GAvBmB;AAwBpBqB,YAAWb,OAAX,EAAoBC,IAApB,EAA0BE,MAA1B,EAAkCC,OAAlC,EAA2C;AACzCN,iBAAMU,KAAN,CAAYhB,WAAW,CAAX,CAAZ,EAA2B,EAAEQ,OAAF,EAAWC,IAAX,EAAiBE,MAAjB,EAAyBC,OAAzB,EAA3B;AACD,GA1BmB;AA2BpBU,gBAAeb,IAAf,EAAqB;AACnBH,iBAAMU,KAAN,CAAYhB,WAAW,CAAX,CAAZ,EAA2B,EAAES,IAAF,EAA3B;AACD,GA7BmB;AA8BpBc,mBAAkBX,OAAlB,EAA2B;AACzBN,iBAAMU,KAAN,CAAYhB,WAAW,CAAX,CAAZ,EAA2B,EAAEY,OAAF,EAA3B;AACD,GAhCmB;AAiCpBY,gBAAe;AACblB,iBAAMU,KAAN,CAAYhB,WAAW,CAAX,CAAZ,EAA2B,EAAEQ,SAAS,IAAX,EAAiBC,MAAMC,SAAvB,EAAkCE,SAAS,KAA3C,EAA3B;AACD,GAnCmB;AAoCpBa,eAAcjB,OAAd,EAAuBC,IAAvB,EAA6B;AAC3B,UAAMiB,QAAQC,iBAAEC,IAAF,CAAOpB,OAAP,CAAd;AACA,QAAImB,iBAAEE,OAAF,CAAUH,KAAV,CAAJ,EAAsB,OAAOhB,SAAP;AACtB,QAAIgB,MAAMI,QAAN,CAAerB,IAAf,CAAJ,EAA0B,OAAOA,IAAP;AAC1B,WAAOiB,MAAM,CAAN,CAAP;AACD,GAzCmB;AA0CpBK,gBAAevB,OAAf,EAAwBG,MAAxB,EAAgC;AAC9B;AACA,UAAMqB,UAAUC,MAAMD,OAAN,CAAcxB,OAAd,CAAhB;AACA,UAAMkB,QAAQC,iBAAEC,IAAF,CAAOpB,OAAP,CAAd;AACA,QAAI0B,kBAAkB1B,OAAtB;AACA;AACA,QAAI,CAACwB,OAAL,EAAc;AACZ,UAAIE,gBAAgB1B,OAApB,EAA6B;AAC3B0B,wBAAgB1B,OAAhB,GAA0B,KAAKuB,aAAL,CAAmBG,gBAAgB1B,OAAnC,EAA4CG,MAA5C,CAA1B;AACD,OAFD,MAEO;AACLe,cAAMtB,OAAN,CAAcK,QAAQ;AACpB,gBAAM0B,iBAAiBD,gBAAgBzB,IAAhB,CAAvB;AACAyB,0BAAgBzB,IAAhB,IAAwB,KAAKsB,aAAL,CAAmBI,cAAnB,EAAmCxB,MAAnC,CAAxB;AACD,SAHD;AAID;AACDuB,wBAAkB,CAACA,eAAD,CAAlB;AACD;AACD;AACAA,sBAAkBA,gBAAgBvB,MAAhB,CAAuB,oBAAKA,MAAL,CAAvB,CAAlB;AACA,WAAQqB,UAAUE,eAAV,GAA4BA,gBAAgB,CAAhB,CAApC;AACD,GA9DmB;AA+DpBE,gBAAe5B,OAAf,EAAwBC,IAAxB,EAA8B4B,OAA9B,EAAuC;AACrC,QAAIrC,aAAa,EAAjB;;AAEA;AACA,QAAIiC,MAAMD,OAAN,CAAcxB,OAAd,CAAJ,EAA4B;AAC1BR,mBAAaQ,OAAb;AACD,KAFD,MAEO;AACLC,aAAO,KAAKgB,YAAL,CAAkBjB,OAAlB,EAA2BC,IAA3B,CAAP;AACAT,mBAAa2B,iBAAEb,GAAF,CAAMN,OAAN,EAAeC,IAAf,CAAb;AACD;AACD;AACA;AACA,UAAM6B,sBAAsB,EAA5B;AACA;AACAX,qBAAEvB,OAAF,CAAUJ,UAAV,EAAuBK,SAAD,IAAe;AACnC,UAAIkC,YAAYZ,iBAAEb,GAAF,CAAMT,SAAN,EAAiB,SAAjB,EAA4B,IAA5B,CAAhB;AACA;AACA,UAAI,OAAOkC,SAAP,KAAqB,UAAzB,EAAqC;AACnCA,oBAAYA,UAAUF,OAAV,CAAZ;AACD;AACD;AACA;AACAhC,gBAAUkC,SAAV,GAAsBA,SAAtB;AACA;AACA,YAAMC,gBAAgBb,iBAAEb,GAAF,CAAMT,SAAN,EAAiB,WAAjB,EAA8B,eAA9B,CAAtB;AACA,YAAMoC,eAAed,iBAAEe,SAAF,CAAYC,eAAKC,QAAL,CAAcJ,aAAd,CAAZ,CAArB;AACA;AACAnC,gBAAUmC,aAAV,GAA0BA,aAA1B;AACAnC,gBAAUoC,YAAV,GAAyBA,YAAzB;AACApC,gBAAUwC,GAAV,GAAgB,kBAAhB;AACAP,0BAAoBQ,IAApB,CAAyBzC,SAAzB;AACD,KAjBD;AAkBA,WAAOiC,mBAAP;AACD,GAhGmB;AAiGpBS,YAAWC,KAAX,EAAkBX,OAAlB,EAA2B;AACzB,WAAQ,OAAOW,KAAP,KAAiB,QAAlB,GAA+BA,MAAMC,UAAN,CAAiB,GAAjB,IAAwBtB,iBAAEb,GAAF,CAAMuB,OAAN,EAAeW,MAAME,SAAN,CAAgB,CAAhB,CAAf,CAAxB,GAA6DF,KAA5F,GAAqGA,KAA5G;AACD,GAnGmB;AAoGpBG,aAAYC,MAAZ,EAAoBf,OAApB,EAA6B;AAC3B;AACA;AACA,QAAIV,iBAAE0B,KAAF,CAAQD,MAAR,CAAJ,EAAqB;AACnB,aAAOA,MAAP;AACD,KAFD,MAEO,IAAInB,MAAMD,OAAN,CAAcoB,MAAd,CAAJ,EAA2B;AAChC,aAAOA,OAAOE,GAAP,CAAWN,SAAS,KAAKG,UAAL,CAAgBH,KAAhB,EAAuBX,OAAvB,CAApB,CAAP;AACD,KAFM,MAEA,IAAI,OAAOe,MAAP,KAAkB,QAAtB,EAAgC;AACrC,aAAOzB,iBAAE4B,SAAF,CAAYH,MAAZ,EAAoB,CAACI,KAAD,EAAQC,GAAR,KAAgB,KAAKN,UAAL,CAAgBK,KAAhB,EAAuBnB,OAAvB,CAApC,CAAP;AACD,KAFM,MAEA;AACL,aAAO,KAAKU,SAAL,CAAeK,MAAf,EAAuBf,OAAvB,CAAP;AACD;AACF,GAhHmB;AAiHpBqB,kBAAiBrB,OAAjB,EAA0BsB,IAA1B,EAAgCP,MAAhC,EAAwC;AACtC;AACA;AACA,UAAMQ,QAAQD,KAAKV,UAAL,CAAgB,GAAhB,CAAd;AACA,QAAIW,KAAJ,EAAWD,OAAOA,KAAKT,SAAL,CAAe,CAAf,CAAP;AACX,WAAO,CAAC,GAAGW,IAAJ,KAAa;AAClB,UAAIC,MAAJ;AACA,YAAMC,UAAUpC,iBAAEb,GAAF,CAAMuB,OAAN,EAAesB,IAAf,CAAhB;AACA;AACA,UAAI,OAAOI,OAAP,KAAmB,UAAvB,EAAmC;AACjC;AACAD,iBAAUV,SAASW,QAAQ,GAAG,KAAKZ,UAAL,CAAgBC,MAAhB,EAAwBf,OAAxB,CAAX,CAAT,GAAwD0B,QAAQ,GAAGF,IAAX,CAAlE;AACD,OAHD,MAGO;AACLC,iBAASC,OAAT;AACD;AACD;AACA,aAAQH,QAAQ,CAACE,MAAT,GAAkBA,MAA1B;AACD,KAZD;AAaD,GAnImB;AAoIpBE,cAAa3D,SAAb,EAAwBsC,IAAxB,EAA8BN,OAA9B,EAAuC;AACrC,UAAM0B,UAAUpC,iBAAEb,GAAF,CAAMT,SAAN,EAAiBsC,IAAjB,CAAhB;AACA;AACA,QAAIV,MAAMD,OAAN,CAAc+B,OAAd,CAAJ,EAA4B;AAC1B;AACA,YAAM9D,WAAW8D,QAAQT,GAAR,CAAYW,KAAK,KAAKP,eAAL,CAAqBrB,OAArB,EAA8B4B,EAAEN,IAAF,IAAUM,CAAxC,EAA2CA,EAAEb,MAA7C,CAAjB,CAAjB;AACA;AACAzB,uBAAEpB,GAAF,CAAMF,SAAN,EAAiBsC,IAAjB,EAAuB,CAAC,GAAGkB,IAAJ,KAAa5D,SAASiE,MAAT,CAAgB,CAACJ,MAAD,EAASG,CAAT,KAAeH,UAAUG,EAAE,GAAGJ,IAAL,CAAzC,EAAqD,IAArD,CAApC;AACD,KALD,MAKO,IAAIE,WAAW,OAAOA,OAAP,KAAmB,QAAlC,EAA4C;AACjD;AACA,UAAIA,QAAQJ,IAAZ,EAAkB;AAChBhC,yBAAEpB,GAAF,CAAMF,SAAN,EAAiBsC,IAAjB,EAAuB,KAAKe,eAAL,CAAqBrB,OAArB,EAA8B0B,QAAQJ,IAAtC,EAA4CI,QAAQX,MAApD,CAAvB;AACD,OAFD,MAEO;AACLe,2BAAOC,KAAP,CAAc,+BAA8BL,OAAQ,0DAApD;AACD;AACF,KAPM,MAOA,IAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;AAAE;AACxCpC,uBAAEpB,GAAF,CAAMF,SAAN,EAAiBsC,IAAjB,EAAuB,KAAKe,eAAL,CAAqBrB,OAArB,EAA8B0B,OAA9B,CAAvB;AACD;AACD;AACA,WAAOpC,iBAAEb,GAAF,CAAMT,SAAN,EAAiBsC,IAAjB,CAAP;AACD,GAxJmB;AAyJpB0B,iBAAgBC,IAAhB,EAAsBjC,OAAtB,EAA+B;AAC7B,QAAI,OAAOiC,IAAP,KAAgB,QAApB,EAA8B;AAC5B,UAAIA,KAAKrB,UAAL,CAAgB,GAAhB,CAAJ,EAA0B,OAAOtB,iBAAEb,GAAF,CAAMuB,OAAN,EAAeiC,KAAKpB,SAAL,CAAe,CAAf,CAAf,CAAP;AAC3B,KAFD,MAEO,IAAIjB,MAAMD,OAAN,CAAcsC,IAAd,CAAJ,EAAyB;AAC9B,WAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAID,KAAKE,MAAzB,EAAiCD,GAAjC,EAAsC;AACpCD,aAAKC,CAAL,IAAU,KAAKF,cAAL,CAAoBC,KAAKC,CAAL,CAApB,EAA6BlC,OAA7B,CAAV;AACD;AACF,KAJM,MAIA,IAAI,OAAOiC,IAAP,KAAgB,QAApB,EAA8B;AACnC3C,uBAAE8C,MAAF,CAASH,IAAT,EAAe,CAACd,KAAD,EAAQC,GAAR,KAAgB;AAC7B;AACA,YAAKA,QAAQ,SAAT,IAAwBA,QAAQ,MAApC,EAA6Ca,KAAKb,GAAL,IAAY,KAAKY,cAAL,CAAoBb,KAApB,EAA2BnB,OAA3B,CAAZ;AAC9C,OAHD;AAID;AACD,WAAOiC,IAAP;AACD,GAvKmB;AAwKpB;AACAI,cAAalE,OAAb,EAAsB6B,OAAtB,EAA+B;AAC7B,UAAMrC,aAAa2B,iBAAEgD,WAAF,CAAcnE,OAAd,CAAnB;AACAmB,qBAAEvB,OAAF,CAAUJ,UAAV,EAAuBK,SAAD,IAAe;AACnC;AACAJ,eAASG,OAAT,CAAiB2D,WAAW,KAAKC,WAAL,CAAiB3D,SAAjB,EAA4B0D,OAA5B,EAAqC1B,OAArC,CAA5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAMuC,UAAUvE,UAAUwE,IAAV,GAAiBxE,UAAUwE,IAA3B,GAAkC,IAAlD;AACA,UAAID,OAAJ,EAAavE,UAAUyE,KAAV,GAAkBnD,iBAAEb,GAAF,CAAMuB,OAAN,EAAeuC,OAAf,CAAlB;AACb;AACA,UAAIvE,UAAUG,OAAd,EAAuB,KAAKkE,WAAL,CAAiBrE,UAAUG,OAA3B,EAAoC6B,OAApC;AACxB,KAbD;AAcA,WAAO7B,OAAP;AACD;AA1LmB,CAAf","file":"layout.js","sourcesContent":["import _ from 'lodash'\r\nimport path from 'path'\r\nimport logger from 'loglevel'\r\nimport sift from 'sift'\r\nimport { uid } from 'quasar'\r\nimport { Store } from './store'\r\n\r\nconst components = ['header', 'footer']\r\nconst handlers = ['handler', 'visible', 'on.listener']\r\n\r\n// Export singleton\r\nexport const Layout = {\r\n initialize () {\r\n components.forEach(component => {\r\n Store.set(component, { content: null, mode: undefined, filter: {}, visible: false })\r\n })\r\n },\r\n getHeader () {\r\n return Store.get(components[0])\r\n },\r\n setHeader (content, mode, filter, visible) {\r\n Store.patch(components[0], { content, mode, filter, visible })\r\n },\r\n setHeaderMode (mode) {\r\n Store.patch(components[0], { mode })\r\n },\r\n setHeaderVisible (visible) {\r\n Store.patch(components[0], { visible })\r\n },\r\n clearHeader () {\r\n Store.patch(components[0], { content: null, mode: undefined, visible: false })\r\n },\r\n getFooter () {\r\n return Store.get(components[1])\r\n },\r\n setFooter (content, mode, filter, visible) {\r\n Store.patch(components[1], { content, mode, filter, visible })\r\n },\r\n setFooterMode (mode) {\r\n Store.patch(components[1], { mode })\r\n },\r\n setFooterVisible (visible) {\r\n Store.patch(components[1], { visible })\r\n },\r\n clearFooter () {\r\n Store.patch(components[1], { content: null, mode: undefined, visible: false })\r\n },\r\n validateMode (content, mode) {\r\n const modes = _.keys(content)\r\n if (_.isEmpty(modes)) return undefined\r\n if (modes.includes(mode)) return mode\r\n return modes[0]\r\n },\r\n filterContent (content, filter) {\r\n // Handle array and object case\r\n const isArray = Array.isArray(content)\r\n const modes = _.keys(content)\r\n let filteredContent = content\r\n // Recurse ?\r\n if (!isArray) {\r\n if (filteredContent.content) {\r\n filteredContent.content = this.filterContent(filteredContent.content, filter)\r\n } else {\r\n modes.forEach(mode => {\r\n const contentForMode = filteredContent[mode]\r\n filteredContent[mode] = this.filterContent(contentForMode, filter)\r\n })\r\n }\r\n filteredContent = [filteredContent]\r\n }\r\n // Apply filtering\r\n filteredContent = filteredContent.filter(sift(filter))\r\n return (isArray ? filteredContent : filteredContent[0])\r\n },\r\n getComponents (content, mode, context) {\r\n let components = []\r\n\r\n // Get component config for given mode if any\r\n if (Array.isArray(content)) {\r\n components = content\r\n } else {\r\n mode = this.validateMode(content, mode)\r\n components = _.get(content, mode)\r\n }\r\n // Apply filtering\r\n // components = this.filterContent(components, filter)\r\n const processedComponents = []\r\n // Then create component objects\r\n _.forEach(components, (component) => {\r\n let isVisible = _.get(component, 'visible', true)\r\n // Can be a functional call\r\n if (typeof isVisible === 'function') {\r\n isVisible = isVisible(context)\r\n }\r\n // If not a functional call the target property can be a reactive one\r\n // so that we \"bind\" it to the component instead of \"filter\" the component here\r\n component.isVisible = isVisible\r\n // Define the component key\r\n const componentName = _.get(component, 'component', 'frame/KAction')\r\n const componentKey = _.kebabCase(path.basename(componentName))\r\n // Clone the component and add the required props\r\n component.componentName = componentName\r\n component.componentKey = componentKey\r\n component.uid = uid()\r\n processedComponents.push(component)\r\n })\r\n return processedComponents\r\n },\r\n bindParam (param, context) {\r\n return (typeof param === 'string') ? (param.startsWith(':') ? _.get(context, param.substring(1)) : param) : param\r\n },\r\n bindParams (params, context) {\r\n // A parameter like :xxx means xxx is a property of the component, not a static value\r\n // In that case remove trailing : and get property value dynamically\r\n if (_.isNil(params)) {\r\n return params\r\n } else if (Array.isArray(params)) {\r\n return params.map(param => this.bindParams(param, context))\r\n } else if (typeof params === 'object') {\r\n return _.mapValues(params, (value, key) => this.bindParams(value, context))\r\n } else {\r\n return this.bindParam(params, context)\r\n }\r\n },\r\n generateHandler (context, name, params) {\r\n // When the handler can be a simple getter, eg is visible use case,\r\n // we allow a property value instead of a function and a logical NOT\r\n const isNot = name.startsWith('!')\r\n if (isNot) name = name.substring(1)\r\n return (...args) => {\r\n let result\r\n const handler = _.get(context, name)\r\n // Function call or property value read ?\r\n if (typeof handler === 'function') {\r\n // Provided parameters or simply forward arguments ?\r\n result = (params ? handler(...this.bindParams(params, context)) : handler(...args))\r\n } else {\r\n result = handler\r\n }\r\n // Logical NOT to be performed ?\r\n return (isNot ? !result : result)\r\n }\r\n },\r\n bindHandler (component, path, context) {\r\n const handler = _.get(component, path)\r\n // Could be an array if multiple handlers to be called\r\n if (Array.isArray(handler)) {\r\n // Process all array elements, manage the case where the handler is simply a function/property name\r\n const handlers = handler.map(h => this.generateHandler(context, h.name || h, h.params))\r\n // In that specific case the result is a boolean AND operation\r\n _.set(component, path, (...args) => handlers.reduce((result, h) => result && h(...args), true))\r\n } else if (handler && typeof handler === 'object') {\r\n // Could be a structure with name and possibly params specified\r\n if (handler.name) {\r\n _.set(component, path, this.generateHandler(context, handler.name, handler.params))\r\n } else {\r\n logger.debug(`Invalid handler binding for ${handler}: you must provide the name to the function to be called`)\r\n }\r\n } else if (typeof handler === 'string') { // Or only name if no params are specified\r\n _.set(component, path, this.generateHandler(context, handler))\r\n }\r\n // Get back processed handler function\r\n return _.get(component, path)\r\n },\r\n bindProperties (item, context) {\r\n if (typeof item === 'string') {\r\n if (item.startsWith(':')) return _.get(context, item.substring(1))\r\n } else if (Array.isArray(item)) {\r\n for (let i = 0; i < item.length; i++) {\r\n item[i] = this.bindProperties(item[i], context)\r\n }\r\n } else if (typeof item === 'object') {\r\n _.forOwn(item, (value, key) => {\r\n // Skip 'reserved' property\r\n if ((key !== 'content') && (key !== 'bind')) item[key] = this.bindProperties(value, context)\r\n })\r\n }\r\n return item\r\n },\r\n // Perform binding between a configuration object and a given context object\r\n bindContent (content, context) {\r\n const components = _.flatMapDeep(content)\r\n _.forEach(components, (component) => {\r\n // Process component handlers\r\n handlers.forEach(handler => this.bindHandler(component, handler, context))\r\n // Then process component props\r\n // FIXME: don't know why but this generic binding function does not seem to work\r\n // It should allow to wrote any property like { label: ':xxx' } and bind it\r\n // to a component property from the context like we do for handler\r\n // this.bindProperties(component, context)\r\n // The only way to make it work is to add props at the root level\r\n const binding = component.bind ? component.bind : null\r\n if (binding) component.props = _.get(context, binding)\r\n // Recursively bind the props/handlers on the sub content object\r\n if (component.content) this.bindContent(component.content, context)\r\n })\r\n return content\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../core/client/layout.js"],"names":["components","handlers","Layout","initialize","forEach","component","Store","set","content","mode","undefined","filter","visible","getHeader","get","setHeader","patch","setHeaderMode","setHeaderVisible","clearHeader","getFooter","setFooter","setFooterMode","setFooterVisible","clearFooter","validateMode","modes","_","keys","isEmpty","includes","filterContent","isArray","Array","filteredContent","contentForMode","item","getComponents","context","processedComponents","isVisible","componentName","componentKey","kebabCase","path","basename","uid","push","bindParam","param","startsWith","substring","bindParams","params","isNil","map","mapValues","value","key","generateHandler","name","isNot","args","result","handler","bindHandler","h","reduce","logger","debug","bindProperties","i","length","forOwn","bindContent","flatMapDeep","binding","bind","props"],"mappings":"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","file":"layout.js","sourcesContent":["import _ from 'lodash'\r\nimport path from 'path'\r\nimport logger from 'loglevel'\r\nimport sift from 'sift'\r\nimport { uid } from 'quasar'\r\nimport { Store } from './store'\r\n\r\nconst components = ['header', 'footer']\r\nconst handlers = ['handler', 'visible', 'on.listener']\r\n\r\n// Export singleton\r\nexport const Layout = {\r\n initialize () {\r\n components.forEach(component => {\r\n Store.set(component, { content: null, mode: undefined, filter: {}, visible: false })\r\n })\r\n },\r\n getHeader () {\r\n return Store.get(components[0])\r\n },\r\n setHeader (content, mode, filter, visible) {\r\n Store.patch(components[0], { content, mode, filter, visible })\r\n },\r\n setHeaderMode (mode) {\r\n Store.patch(components[0], { mode })\r\n },\r\n setHeaderVisible (visible) {\r\n Store.patch(components[0], { visible })\r\n },\r\n clearHeader () {\r\n Store.patch(components[0], { content: null, mode: undefined, visible: false })\r\n },\r\n getFooter () {\r\n return Store.get(components[1])\r\n },\r\n setFooter (content, mode, filter, visible) {\r\n Store.patch(components[1], { content, mode, filter, visible })\r\n },\r\n setFooterMode (mode) {\r\n Store.patch(components[1], { mode })\r\n },\r\n setFooterVisible (visible) {\r\n Store.patch(components[1], { visible })\r\n },\r\n clearFooter () {\r\n Store.patch(components[1], { content: null, mode: undefined, visible: false })\r\n },\r\n validateMode (content, mode) {\r\n const modes = _.keys(content)\r\n if (_.isEmpty(modes)) return undefined\r\n if (modes.includes(mode)) return mode\r\n return modes[0]\r\n },\r\n filterContent (content, filter) {\r\n // Handle array and object case\r\n const isArray = Array.isArray(content)\r\n const modes = _.keys(content)\r\n let filteredContent = content\r\n if (!isArray) {\r\n // Recurse ?\r\n if (filteredContent.content) {\r\n filteredContent.content = this.filterContent(filteredContent.content, filter)\r\n } else {\r\n modes.forEach(mode => {\r\n const contentForMode = filteredContent[mode]\r\n filteredContent[mode] = this.filterContent(contentForMode, filter)\r\n })\r\n }\r\n filteredContent = [filteredContent]\r\n } else {\r\n filteredContent.forEach(item => {\r\n // Recurse ?\r\n if (item.content) {\r\n item.content = this.filterContent(item.content, filter)\r\n }\r\n })\r\n }\r\n // Apply filtering\r\n filteredContent = filteredContent.filter(sift(filter))\r\n return (isArray ? filteredContent : filteredContent[0])\r\n },\r\n getComponents (content, mode, context) {\r\n let components = []\r\n\r\n // Get component config for given mode if any\r\n if (Array.isArray(content)) {\r\n components = content\r\n } else {\r\n mode = this.validateMode(content, mode)\r\n components = _.get(content, mode)\r\n }\r\n // Apply filtering\r\n // components = this.filterContent(components, filter)\r\n const processedComponents = []\r\n // Then create component objects\r\n _.forEach(components, (component) => {\r\n let isVisible = _.get(component, 'visible', true)\r\n // Can be a functional call\r\n if (typeof isVisible === 'function') {\r\n isVisible = isVisible(context)\r\n }\r\n // If not a functional call the target property can be a reactive one\r\n // so that we \"bind\" it to the component instead of \"filter\" the component here\r\n component.isVisible = isVisible\r\n // Define the component key\r\n const componentName = _.get(component, 'component', 'frame/KAction')\r\n const componentKey = _.kebabCase(path.basename(componentName))\r\n // Clone the component and add the required props\r\n component.componentName = componentName\r\n component.componentKey = componentKey\r\n component.uid = uid()\r\n processedComponents.push(component)\r\n })\r\n return processedComponents\r\n },\r\n bindParam (param, context) {\r\n return (typeof param === 'string') ? (param.startsWith(':') ? _.get(context, param.substring(1)) : param) : param\r\n },\r\n bindParams (params, context) {\r\n // A parameter like :xxx means xxx is a property of the component, not a static value\r\n // In that case remove trailing : and get property value dynamically\r\n if (_.isNil(params)) {\r\n return params\r\n } else if (Array.isArray(params)) {\r\n return params.map(param => this.bindParams(param, context))\r\n } else if (typeof params === 'object') {\r\n return _.mapValues(params, (value, key) => this.bindParams(value, context))\r\n } else {\r\n return this.bindParam(params, context)\r\n }\r\n },\r\n generateHandler (context, name, params) {\r\n // When the handler can be a simple getter, eg is visible use case,\r\n // we allow a property value instead of a function and a logical NOT\r\n const isNot = name.startsWith('!')\r\n if (isNot) name = name.substring(1)\r\n return (...args) => {\r\n let result\r\n const handler = _.get(context, name)\r\n // Function call or property value read ?\r\n if (typeof handler === 'function') {\r\n // Provided parameters or simply forward arguments ?\r\n result = (params ? handler(...this.bindParams(params, context)) : handler(...args))\r\n } else {\r\n result = handler\r\n }\r\n // Logical NOT to be performed ?\r\n return (isNot ? !result : result)\r\n }\r\n },\r\n bindHandler (component, path, context) {\r\n const handler = _.get(component, path)\r\n // Could be an array if multiple handlers to be called\r\n if (Array.isArray(handler)) {\r\n // Process all array elements, manage the case where the handler is simply a function/property name\r\n const handlers = handler.map(h => this.generateHandler(context, h.name || h, h.params))\r\n // In that specific case the result is a boolean AND operation\r\n _.set(component, path, (...args) => handlers.reduce((result, h) => result && h(...args), true))\r\n } else if (handler && typeof handler === 'object') {\r\n // Could be a structure with name and possibly params specified\r\n if (handler.name) {\r\n _.set(component, path, this.generateHandler(context, handler.name, handler.params))\r\n } else {\r\n logger.debug(`Invalid handler binding for ${handler}: you must provide the name to the function to be called`)\r\n }\r\n } else if (typeof handler === 'string') { // Or only name if no params are specified\r\n _.set(component, path, this.generateHandler(context, handler))\r\n }\r\n // Get back processed handler function\r\n return _.get(component, path)\r\n },\r\n bindProperties (item, context) {\r\n if (typeof item === 'string') {\r\n if (item.startsWith(':')) return _.get(context, item.substring(1))\r\n } else if (Array.isArray(item)) {\r\n for (let i = 0; i < item.length; i++) {\r\n item[i] = this.bindProperties(item[i], context)\r\n }\r\n } else if (typeof item === 'object') {\r\n _.forOwn(item, (value, key) => {\r\n // Skip 'reserved' property\r\n if ((key !== 'content') && (key !== 'bind')) item[key] = this.bindProperties(value, context)\r\n })\r\n }\r\n return item\r\n },\r\n // Perform binding between a configuration object and a given context object\r\n bindContent (content, context) {\r\n const components = _.flatMapDeep(content)\r\n _.forEach(components, (component) => {\r\n // Process component handlers\r\n handlers.forEach(handler => this.bindHandler(component, handler, context))\r\n // Then process component props\r\n // FIXME: don't know why but this generic binding function does not seem to work\r\n // It should allow to wrote any property like { label: ':xxx' } and bind it\r\n // to a component property from the context like we do for handler\r\n // this.bindProperties(component, context)\r\n // The only way to make it work is to add props at the root level\r\n const binding = component.bind ? component.bind : null\r\n if (binding) component.props = _.get(context, binding)\r\n // Recursively bind the props/handlers on the sub content object\r\n if (component.content) this.bindContent(component.content, context)\r\n })\r\n return content\r\n }\r\n}\r\n"]}
|
|
@@ -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":"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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: () => {}\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"]}
|