diff --git a/src/services/map-service.js b/src/services/map-service.js index 0bb14fa3a7276e2d9ce9a354d9eb4e0e3e584e2a..c64c318d9e024d9bb3900caff85d1ef8456df50c 100644 --- a/src/services/map-service.js +++ b/src/services/map-service.js @@ -51,6 +51,7 @@ const mapService = { lng, mapDefaultViewCenter, mapDefaultViewZoom, + maxZoom, zoom, zoomControl = true, interactions = { doubleClickZoom: false, mouseWheelZoom: false, dragPan: true }, @@ -60,7 +61,7 @@ const mapService = { el.innerHTML = ''; } - this.map = new Map({ + const mapOptions = { layers: [], target: el, controls: [ @@ -70,14 +71,17 @@ const mapService = { })], interactions: defaults(interactions), view: new View({ - center: transform([ - !lng ? mapDefaultViewCenter[1] : lng, - !lat ? mapDefaultViewCenter[0] : lat, + center: transform([ //* since 0 is considered false, check for number instead of just defined (though boolean will pass through) + Number(lng) ? lng : mapDefaultViewCenter[1], + Number(lat) ? lat : mapDefaultViewCenter[0], ], 'EPSG:4326', 'EPSG:3857'), - zoom: !zoom ? mapDefaultViewZoom : zoom + zoom: Number(mapDefaultViewZoom) ? mapDefaultViewZoom : zoom, + maxZoom }), - }); + }; + + this.map = new Map(mapOptions); if (zoomControl) { this.map.addControl(new Zoom({ zoomInTipLabel: 'Zoomer', zoomOutTipLabel: 'Dézoomer' })); diff --git a/src/store/modules/map.store.js b/src/store/modules/map.store.js index a8b3f37b29b4f49fef161c4d5f47d192182e7030..3ae7994329dc93751cd400d5c39892bf842b2850 100644 --- a/src/store/modules/map.store.js +++ b/src/store/modules/map.store.js @@ -104,12 +104,13 @@ const map = { }); }, - INITIATE_MAP({ commit }, el) { //todo: since this function is not anymore called in different components, it would better to move it in project_details.vue + INITIATE_MAP({ commit, rootState }, el) { //todo: since this function is not anymore called in different components, it would better to move it in project_details.vue const mapDefaultViewCenter = [46, 2]; // defaultMapView.center; const mapDefaultViewZoom = 5; // defaultMapView.zoom; mapService.createMap(el, { mapDefaultViewCenter: mapDefaultViewCenter, mapDefaultViewZoom: mapDefaultViewZoom, + maxZoom: rootState.projects.project.map_max_zoom_level, }); const map = { ...mapService.getMap() }; commit('SET_MAP', map); diff --git a/src/views/Feature/FeatureDetail.vue b/src/views/Feature/FeatureDetail.vue index dc39b0e4733573a96363fa432c3dd587fb2ad6e7..6926b84925ecad4dde6bd8fe2422beddc5bafdf5 100644 --- a/src/views/Feature/FeatureDetail.vue +++ b/src/views/Feature/FeatureDetail.vue @@ -354,6 +354,7 @@ export default { this.map = mapService.createMap(this.$refs.map, { mapDefaultViewCenter, mapDefaultViewZoom, + maxZoom: this.project.map_max_zoom_level, interactions : { doubleClickZoom :false, mouseWheelZoom: false, diff --git a/src/views/Feature/FeatureEdit.vue b/src/views/Feature/FeatureEdit.vue index ce39380330ef83d5ac10aa38060f513bc8308e56..68b7a5d39641400209748e13a8f2cc28b4f3cdf0 100644 --- a/src/views/Feature/FeatureEdit.vue +++ b/src/views/Feature/FeatureEdit.vue @@ -860,6 +860,7 @@ export default { this.map = mapService.createMap(this.$refs.map, { mapDefaultViewCenter, mapDefaultViewZoom, + maxZoom: this.project.map_max_zoom_level, interactions : { doubleClickZoom :false, mouseWheelZoom:true, dragPan:true } }); const currentFeatureId = this.$route.params.slug_signal; diff --git a/src/views/Project/FeaturesListAndMap.vue b/src/views/Project/FeaturesListAndMap.vue index f86c9244e9e77fd13ad692680ef7208400f8ab04..fde352a957e3980fea4e7b76329ca27f1d3fdd78 100644 --- a/src/views/Project/FeaturesListAndMap.vue +++ b/src/views/Project/FeaturesListAndMap.vue @@ -303,6 +303,7 @@ export default { lng: this.lng, mapDefaultViewCenter, mapDefaultViewZoom, + maxZoom: this.project.map_max_zoom_level, interactions : { doubleClickZoom :false,mouseWheelZoom:true,dragPan:true } }); diff --git a/src/views/Project/ProjectEdit.vue b/src/views/Project/ProjectEdit.vue index 9a6de25196772b62b9d9f30eb3fea53d3fc7eb72..0e788f3f84a33b747d170945eb5d315fef982b37 100644 --- a/src/views/Project/ProjectEdit.vue +++ b/src/views/Project/ProjectEdit.vue @@ -156,55 +156,74 @@ </div> </div> - <div class="field"> - <div class="ui checkbox"> - <input - id="moderation" - v-model="form.moderation" - class="hidden" - type="checkbox" - name="moderation" - > - <label for="moderation">Modération</label> - </div> - </div> - - <div class="field"> - <div class="ui checkbox"> - <input - id="is_project_type" - v-model="form.is_project_type" - class="hidden" - type="checkbox" - name="is_project_type" - > - <label for="is_project_type">Est un projet type</label> - </div> - </div> - - <div class="field"> - <div class="ui checkbox"> - <input - id="generate_share_link" - v-model="form.generate_share_link" - class="hidden" - type="checkbox" - name="generate_share_link" - > - <label for="generate_share_link">Génération d'un lien de partage externe</label> + <div class="two fields"> + <div class="fields grouped"> + <div class="field"> + <div class="ui checkbox"> + <input + id="moderation" + v-model="form.moderation" + class="hidden" + type="checkbox" + name="moderation" + > + <label for="moderation">Modération</label> + </div> + </div> + + <div class="field"> + <div class="ui checkbox"> + <input + id="is_project_type" + v-model="form.is_project_type" + class="hidden" + type="checkbox" + name="is_project_type" + > + <label for="is_project_type">Est un projet type</label> + </div> + </div> + + <div class="field"> + <div class="ui checkbox"> + <input + id="generate_share_link" + v-model="form.generate_share_link" + class="hidden" + type="checkbox" + name="generate_share_link" + > + <label for="generate_share_link">Génération d'un lien de partage externe</label> + </div> + </div> + + <div class="field"> + <div class="ui checkbox"> + <input + id="fast_edition_mode" + v-model="form.fast_edition_mode" + class="hidden" + type="checkbox" + name="fast_edition_mode" + > + <label for="fast_edition_mode">Mode d'édition rapide de signalements</label> + </div> + </div> </div> - </div> - <div class="field"> - <div class="ui checkbox"> - <input - id="fast_edition_mode" - v-model="form.fast_edition_mode" - class="hidden" - type="checkbox" - name="fast_edition_mode" - > - <label for="fast_edition_mode">Mode d'édition rapide de signalements</label> + <div class="field required"> + <label>Niveau de zoom maximum de la carte</label> + <div class="range-container"> + <input + v-model="form.map_max_zoom_level" + type="range" + min="0" + max="22" + step="1" + ><output class="range-output-bubble">{{ + form.map_max_zoom_level + }}</output> + </div> </div> </div> @@ -267,6 +286,7 @@ export default { access_level_arch_feature: { name: '', value: '' }, archive_feature: 0, delete_feature: 0, + map_max_zoom_level: 22, nb_features: 0, nb_published_features: 0, nb_comments: 0, @@ -520,6 +540,7 @@ export default { access_level_pub_feature: this.form.access_level_pub_feature.value, archive_feature: this.form.archive_feature, delete_feature: this.form.delete_feature, + map_max_zoom_level: this.form.map_max_zoom_level, is_project_type: this.form.is_project_type, generate_share_link: this.form.generate_share_link, fast_edition_mode: this.form.fast_edition_mode,