From 5f615fc5b532e1955cf7f016965ca9351bca8ef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e?= <tpoussard@neogeo.fr> Date: Tue, 2 Aug 2022 18:15:04 +0200 Subject: [PATCH] fix responsive feature detail header, fix undefined project & mobile table overflow --- .../Feature/Detail/FeatureHeader.vue | 302 ++++++++++-------- .../FeaturesListAndMap/FeatureListTable.vue | 7 + src/views/Project/FeaturesListAndMap.vue | 9 +- 3 files changed, 176 insertions(+), 142 deletions(-) diff --git a/src/components/Feature/Detail/FeatureHeader.vue b/src/components/Feature/Detail/FeatureHeader.vue index c90be13b..ea11e1c1 100644 --- a/src/components/Feature/Detail/FeatureHeader.vue +++ b/src/components/Feature/Detail/FeatureHeader.vue @@ -2,145 +2,160 @@ <div> <h1 class="ui header"> <div class="content"> - <span - v-if="fastEditionMode && form && canEditFeature" - class="form ui half-block" - > - <input - id="feature_detail_title_input" - :value="form.title" - type="text" - required - maxlength="128" - name="title" - @blur="updateTitle" - > - </span> - <span v-else> - {{ currentFeature.title || currentFeature.feature_id }} - </span> - - <div class="ui icon right floated compact buttons"> - <router-link - v-if="displayToListButton" - id="feature-detail-to-features-list" - :to="{ - name: 'liste-signalements', - params: { slug: $route.params.slug }, - }" - custom - > - <div class="ui button tiny-margin teal"> - <i class="ui icon arrow right" /> - Retour à la liste des signalements - </div> - </router-link> - <span - v-if="featuresCount" - id="feature-count" - class="ui button tiny-margin basic" + <div class="two-block"> + <div + v-if="fastEditionMode && form && canEditFeature" + class="form ui half-block" > - {{ parseInt($route.query.offset) + 1 }} sur {{ featuresCount }} - </span> - <button - v-if="queryparams" - id="previous-feature" - :class="['ui button button-hover-green tiny-margin', { disabled: queryparams.previous < 0 }]" - data-tooltip="Voir le précédent signalement" - data-position="bottom center" - @click="toFeature('previous')" + <input + id="feature_detail_title_input" + :value="form.title" + type="text" + required + maxlength="128" + name="title" + @blur="updateTitle" + > + </div> + <div + v-else + class="ellipsis" > - <i - class="angle left fitted icon" - aria-hidden="true" - /> - </button> - <button - v-if="queryparams" - id="next-feature" - :class="[ - 'ui button button-hover-green tiny-margin', - { disabled: queryparams.next >= featuresCount } - ]" - data-tooltip="Voir le prochain signalement" - data-position="bottom center" - @click="toFeature('next')" - > - <i - class="angle right fitted icon" - aria-hidden="true" - /> - </button> + {{ currentFeature.title || currentFeature.feature_id }} + </div> - <button - v-if="fastEditionMode && canEditFeature" - id="save-fast-edit" - :class="['ui button button-hover-orange tiny-margin', { disabled: false }]" - data-tooltip="Enregistrer les modifications" - data-position="bottom center" - @click="$store.dispatch('feature/SEND_FEATURE', $route.name)" + <div + id="feature-actions" + class="ui icon compact buttons" > - <i - class="save fitted icon" - aria-hidden="true" - /> - </button> + <div> + <router-link + v-if="displayToListButton" + id="feature-detail-to-features-list" + :to="{ + name: 'liste-signalements', + params: { slug: $route.params.slug }, + }" + custom + > + <div class="ui button tiny-margin teal"> + <i class="ui icon arrow right" /> + Retour à la liste des signalements + </div> + </router-link> + </div> + <div> + <span + v-if="featuresCount" + id="feature-count" + class="ui button tiny-margin basic" + > + {{ parseInt($route.query.offset) + 1 }} sur {{ featuresCount }} + </span> + <button + v-if="queryparams" + id="previous-feature" + :class="['ui button button-hover-green tiny-margin', { disabled: queryparams.previous < 0 }]" + data-tooltip="Voir le précédent signalement" + data-position="bottom center" + @click="toFeature('previous')" + > + <i + class="angle left fitted icon" + aria-hidden="true" + /> + </button> + <button + v-if="queryparams" + id="next-feature" + :class="[ + 'ui button button-hover-green tiny-margin', + { disabled: queryparams.next >= featuresCount } + ]" + data-tooltip="Voir le prochain signalement" + data-position="bottom center" + @click="toFeature('next')" + > + <i + class="angle right fitted icon" + aria-hidden="true" + /> + </button> + </div> + <div> + <button + v-if="fastEditionMode && canEditFeature" + id="save-fast-edit" + :class="['ui button button-hover-orange tiny-margin', { disabled: false }]" + data-tooltip="Enregistrer les modifications" + data-position="bottom center" + @click="$store.dispatch('feature/SEND_FEATURE', $route.name)" + > + <i + class="save fitted icon" + aria-hidden="true" + /> + </button> - <router-link - v-if="permissions && permissions.can_create_feature" - id="add-feature" - :to="{ - name: 'ajouter-signalement', - params: { - slug_type_signal: $route.params.slug_type_signal || featureType.slug, - }, - }" - class="ui button button-hover-green tiny-margin" - data-tooltip="Ajouter un signalement" - data-position="bottom center" - > - <i - class="plus icon" - aria-hidden="true" - /> - </router-link> + <router-link + v-if="permissions && permissions.can_create_feature" + id="add-feature" + :to="{ + name: 'ajouter-signalement', + params: { + slug_type_signal: $route.params.slug_type_signal || featureType.slug, + }, + }" + class="ui button button-hover-green tiny-margin" + data-tooltip="Ajouter un signalement" + data-position="bottom center" + > + <i + class="plus icon" + aria-hidden="true" + /> + </router-link> - <router-link - v-if="slugSignal && canEditFeature" - id="edit-feature" - :to="{ - name: 'editer-signalement', - params: { - slug_signal: slugSignal, - slug_type_signal: $route.params.slug_type_signal || featureType.slug, - }, - query: $route.query - }" - class="ui button button-hover-orange tiny-margin" - data-tooltip="Éditer le signalement" - data-position="bottom center" - > - <i - class="inverted grey pencil alternate icon" - aria-hidden="true" - /> - </router-link> + <router-link + v-if="slugSignal && canEditFeature" + id="edit-feature" + :to="{ + name: 'editer-signalement', + params: { + slug_signal: slugSignal, + slug_type_signal: $route.params.slug_type_signal || featureType.slug, + }, + query: $route.query + }" + class="ui button button-hover-orange tiny-margin" + data-tooltip="Éditer le signalement" + data-position="bottom center" + > + <i + class="inverted grey pencil alternate icon" + aria-hidden="true" + /> + </router-link> - <a - v-if="canDeleteFeature && isOnline" - id="currentFeature-delete" - class="ui button button-hover-red tiny-margin" - data-tooltip="Supprimer le signalement" - data-position="bottom right" - @click="$emit('setIsDeleting')" - > - <i - class="inverted grey trash alternate icon" - aria-hidden="true" - /> - </a> + <a + v-if="canDeleteFeature && isOnline" + id="currentFeature-delete" + class="ui button button-hover-red tiny-margin" + data-tooltip="Supprimer le signalement" + data-position="bottom right" + @click="$emit('setIsDeleting')" + > + <i + class="inverted grey trash alternate icon" + aria-hidden="true" + /> + </a> + </div> + </div> </div> - <div class="ui hidden divider" /> + + <!-- <div class="ui hidden divider" /> --> + <div class="sub header prewrap"> <span v-if="fastEditionMode && canEditFeature && form" @@ -253,20 +268,31 @@ export default { </script> <style> -#next-feature { - margin-right: .5rem !important; -} #feature-detail-to-features-list { line-height: 0; margin-right: 5px; } -.half-block { - display: inline-block; - width: 50%; -} #feature_detail_title_input { font-weight: bold; font-size: 2em; padding: .25em; } +.two-block { + display: flex; + justify-content: space-between; + margin-bottom: .5em; +} +#feature-actions > div { + margin-left: .5rem; +} + +@media screen and (max-width: 700px) { + .two-block { + flex-direction: column-reverse; + } + #feature-actions.ui.buttons { + flex-direction: column; + align-items: flex-end; + } +} </style> \ No newline at end of file diff --git a/src/components/Project/FeaturesListAndMap/FeatureListTable.vue b/src/components/Project/FeaturesListAndMap/FeatureListTable.vue index 775c08b1..69cd85d8 100644 --- a/src/components/Project/FeaturesListAndMap/FeatureListTable.vue +++ b/src/components/Project/FeaturesListAndMap/FeatureListTable.vue @@ -207,6 +207,7 @@ feature_type_slug: feature.feature_type.slug, }, }" + class="ellipsis space-left" > {{ feature.feature_type.title }} </router-link> @@ -220,6 +221,7 @@ }, query: { ...queryparams, offset: queryparams.offset + index } }" + class="ellipsis space-left" > {{ feature.title || feature.feature_id }} </router-link> @@ -727,6 +729,11 @@ and also iPads specifically. text-align: center; margin: .5em 0; } + .space-left { + max-width: 100%; + display: inline-block; + padding-left: 3em; + } } @media only screen and (max-width: 410px) { .ui.table tr td { diff --git a/src/views/Project/FeaturesListAndMap.vue b/src/views/Project/FeaturesListAndMap.vue index fecd4752..36dfa0b2 100644 --- a/src/views/Project/FeaturesListAndMap.vue +++ b/src/views/Project/FeaturesListAndMap.vue @@ -180,10 +180,11 @@ export default { mounted() { if (!this.project) { // Chargements des features et infos projet en cas d'arrivée directe sur la page ou de refresh - this.$store.dispatch('projects/GET_PROJECT', this.projectSlug); - this.$store - .dispatch('projects/GET_PROJECT_INFO', this.projectSlug) - .then(() => this.initMap()); + Promise.all([ + this.$store.dispatch('projects/GET_PROJECT', this.projectSlug), + this.$store.dispatch('projects/GET_PROJECT_INFO', this.projectSlug) + ]) + .then(()=> this.initMap()); } else { this.initMap(); } -- GitLab