From 6104bc35bae013cb384506f3f7cd6904cadea75d Mon Sep 17 00:00:00 2001 From: paidge <paidge_cs@hotmail.com> Date: Fri, 31 Dec 2021 04:32:26 +0100 Subject: [PATCH] loader improvements #2 --- components/navigation/Loader.vue | 31 ++------ layouts/default.vue | 6 ++ pages/membres/_hash.vue | 34 +++++---- pages/membres/index.vue | 10 ++- pages/previsions/_hash.vue | 14 ++-- pages/previsions/index.vue | 8 +- pages/previsions/newcomers.vue | 124 ++++++++++++++++--------------- 7 files changed, 113 insertions(+), 114 deletions(-) diff --git a/components/navigation/Loader.vue b/components/navigation/Loader.vue index 82d80f7..1d534e0 100644 --- a/components/navigation/Loader.vue +++ b/components/navigation/Loader.vue @@ -1,26 +1,15 @@ <template> -<div class="loader overflow-hidden text-center position-absolute" :class="state"> - <img src="~@/assets/img/loader.gif"> - <div class="text-center font-weight-bold my-3">Chargement...</div> -</div> - +<transition name="fade"> + <div class="loader overflow-hidden text-center position-absolute" v-if="isLoading"> + <img src="~@/assets/img/loader.gif"> + <div class="text-center font-weight-bold my-3">Chargement...</div> + </div> +</transition> </template> <script> export default { - data() { - return { - state: '' - } - }, - props: {isLoading: Boolean}, - watch: { - isLoading: { - handler(n,o) { - this.state = "hidden" - } - } - } + props: {isLoading: Boolean} } </script> @@ -32,10 +21,4 @@ export default { --color: #391855; color: var(--color); } -.result, .loader { - transition: opacity .3s linear; -} -.hidden { - opacity: 0; -} </style> \ No newline at end of file diff --git a/layouts/default.vue b/layouts/default.vue index 95b9bdb..382a848 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -63,4 +63,10 @@ main { padding-top: 5rem; position: relative; } +.fade-enter-active, .fade-leave-active { + transition: opacity .5s; +} +.fade-enter, .fade-leave-to { + opacity: 0; +} </style> \ No newline at end of file diff --git a/pages/membres/_hash.vue b/pages/membres/_hash.vue index c0bfe3f..b1336be 100644 --- a/pages/membres/_hash.vue +++ b/pages/membres/_hash.vue @@ -1,25 +1,27 @@ <template> <main class="content container"> <NavigationLoader :isLoading="$apollo.queries.idFromHash.loading" /> - <div v-if="!$apollo.queries.idFromHash.loading"> - <div class="row"> - <div class="col-md-10 col-lg-8 col-xl-6 mx-auto mt-3"> - <MemberCard :hash="idFromHash" /> + <transition name="fade"> + <div v-if="idFromHash"> + <div class="row"> + <div class="col-md-10 col-lg-8 col-xl-6 mx-auto mt-3"> + <MemberCard :hash="idFromHash" /> + </div> </div> - </div> - <div class="row mt-3" v-if="idFromHash.status != 'REVOKED'"> - <div class="col-12 col-md-6 mb-3"> - <h3>Certifications reçues - <BadgeCertifStatus :limitDate="idFromHash.received_certifications.limit" :memberStatus="idFromHash.status" /> - </h3> - <CertifList :certifs="idFromHash.received_certifications.certifications" type="recieved" /> - </div> - <div class="col-12 col-md-6"> - <h3>Certifications envoyées</h3> - <CertifList :certifs="idFromHash.sent_certifications" type="sent" /> + <div class="row mt-3" v-if="idFromHash.status != 'REVOKED'"> + <div class="col-12 col-md-6 mb-3"> + <h3>Certifications reçues + <BadgeCertifStatus :limitDate="idFromHash.received_certifications.limit" :memberStatus="idFromHash.status" /> + </h3> + <CertifList :certifs="idFromHash.received_certifications.certifications" type="recieved" /> + </div> + <div class="col-12 col-md-6"> + <h3>Certifications envoyées</h3> + <CertifList :certifs="idFromHash.sent_certifications" type="sent" /> + </div> </div> </div> - </div> + </transition> </main> </template> diff --git a/pages/membres/index.vue b/pages/membres/index.vue index 4632a21..f12720d 100644 --- a/pages/membres/index.vue +++ b/pages/membres/index.vue @@ -9,11 +9,13 @@ </div> </div> <NavigationLoader :isLoading="$apollo.queries.idSearch.loading" /> - <div class="row" v-if="idSearch && !$apollo.queries.idSearch.loading && param.length > 2"> - <div class="col-8 m-auto"> - <MemberList :members="idSearch.ids"/> + <transition name="fade"> + <div class="row" v-if="idSearch && !$apollo.queries.idSearch.loading && param.length > 2"> + <div class="col-8 m-auto"> + <MemberList :members="idSearch.ids"/> + </div> </div> - </div> + </transition> </main> </template> diff --git a/pages/previsions/_hash.vue b/pages/previsions/_hash.vue index 7c0c250..3526234 100644 --- a/pages/previsions/_hash.vue +++ b/pages/previsions/_hash.vue @@ -1,14 +1,16 @@ <template> <main class="content container"> <NavigationLoader :isLoading="$apollo.queries.idFromHash.loading" /> - <div v-if="!$apollo.queries.idFromHash.loading"> - <div class="row"> - <div class="col-md-10 col-lg-8 col-xl-6 mx-auto mt-3"> - <h2 class="text-center mb-5 font-weight-light">Prévisions <small><span class="badge badge-secondary">{{ idFromHash.uid }}</span></small></h2> - <MemberCard :hash="idFromHash" /> + <transition name="fade"> + <div v-if="!$apollo.queries.idFromHash.loading"> + <div class="row"> + <div class="col-md-10 col-lg-8 col-xl-6 mx-auto mt-3"> + <h2 class="text-center mb-5 font-weight-light">Prévisions <small><span class="badge badge-secondary">{{ idFromHash.uid }}</span></small></h2> + <MemberCard :hash="idFromHash" /> + </div> </div> </div> - </div> + </transition> </main> </template> diff --git a/pages/previsions/index.vue b/pages/previsions/index.vue index a7e776d..a24a77f 100644 --- a/pages/previsions/index.vue +++ b/pages/previsions/index.vue @@ -3,9 +3,11 @@ <h2 class="text-center mb-5 font-weight-light">En préparation</h2> <b-alert variant="danger" show>En développement</b-alert> <NavigationLoader :isLoading="$apollo.queries.test.loading" /> - <div v-if="test"> - {{ test }} - </div> + <transition name="fade"> + <div v-if="test"> + {{ test }} + </div> + </transition> </main> </template> diff --git a/pages/previsions/newcomers.vue b/pages/previsions/newcomers.vue index 49e3271..17d5686 100644 --- a/pages/previsions/newcomers.vue +++ b/pages/previsions/newcomers.vue @@ -1,74 +1,76 @@ <template> <main class="container"> <NavigationLoader :isLoading="$apollo.queries.wwResult.loading" /> - <div v-if="!$apollo.queries.wwResult.loading"> - <h2 class="text-center mb-5 font-weight-light">Prévisions <small><span class="badge badge-secondary">{{ wwResult.dossiers_nb }} dossiers en attente</span></small></h2> - <div class="alert alert-info" role="alert"> - <ul class="list-unstyled m-0"> - <li>{{ wwResult.certifs_nb }} certifications internes</li> - <li>{{ wwResult.permutations_nb }} permutations</li> - </ul> - </div> - <div class="row"> - <div class="col-12 text-center mb-4"> - <div class="form-check form-check-inline"> - <input class="form-check-input" type="radio" id="forecastsByNames" value="forecastsByNames" checked v-model="display" @change="save"> - <label class="form-check-label" for="forecastsByNames"> - Tri par membres - </label> - </div> - <div class="form-check form-check-inline"> - <input class="form-check-input" type="radio" id="forecastsByDates" value="forecastsByDates" v-model="display" @change="save"> - <label class="form-check-label" for="forecastsByDates"> - Tri par dates - </label> - </div> + <transition name="fade"> + <div v-if="!$apollo.queries.wwResult.loading"> + <h2 class="text-center mb-5 font-weight-light">Prévisions <small><span class="badge badge-secondary">{{ wwResult.dossiers_nb }} dossiers en attente</span></small></h2> + <div class="alert alert-info" role="alert"> + <ul class="list-unstyled m-0"> + <li>{{ wwResult.certifs_nb }} certifications internes</li> + <li>{{ wwResult.permutations_nb }} permutations</li> + </ul> </div> - <div class="col-lg-8 m-auto"> - <div v-if="display=='forecastsByNames'"> - <h3>Prévisions par membres</h3> - <div class="table-responsive"> - <table class="table table-striped table-hover"> - <tbody> - <tr v-for="forecast in wwResult.forecastsByNames" :key="forecast.member.uid" @click="$router.push({ path: '/previsions/' + forecast.member.hash })"> - <th scope="row"> - {{ forecast.member.uid }} - <BadgeStatus :membre="forecast.member" /> - </th> - <td class="p-0"> - <div class="d-flex justify-content-between p-3" v-for="date in forecast.forecasts" :key="date.date"> - <div>{{ date.date | formatDateHeure }}</div> - <div>{{ date.proba * 100 }} %</div> - </div> - </td> - </tr> - </tbody> - </table> + <div class="row"> + <div class="col-12 text-center mb-4"> + <div class="form-check form-check-inline"> + <input class="form-check-input" type="radio" id="forecastsByNames" value="forecastsByNames" checked v-model="display" @change="save"> + <label class="form-check-label" for="forecastsByNames"> + Tri par membres + </label> + </div> + <div class="form-check form-check-inline"> + <input class="form-check-input" type="radio" id="forecastsByDates" value="forecastsByDates" v-model="display" @change="save"> + <label class="form-check-label" for="forecastsByDates"> + Tri par dates + </label> </div> </div> - <div v-if="display=='forecastsByDates'"> - <h3>Prévisions par dates</h3> - <div class="table-responsive"> - <table class="table table-striped"> - <tbody> - <tr v-for="forecast in wwResult.forecastsByDates" :key="forecast.date"> - <th scope="row">{{ forecast.date | formatDateHeure }}</th> - <td class="p-0"> - <div class="list-group rounded-0"> - <nuxt-link class="list-group-item list-group-item-action border-0 d-flex justify-content-between" :to="'/membres/' + member.member.hash" v-for="member in forecast.forecasts" :key="member.member.uid"> - <div>{{ member.member.uid }} <BadgeStatus :membre="member.member" /></div> - <div>{{ member.proba * 100 }} %</div> - </nuxt-link> - </div> - </td> - </tr> - </tbody> - </table> + <div class="col-lg-8 m-auto"> + <div v-if="display=='forecastsByNames'"> + <h3>Prévisions par membres</h3> + <div class="table-responsive"> + <table class="table table-striped table-hover"> + <tbody> + <tr v-for="forecast in wwResult.forecastsByNames" :key="forecast.member.uid" @click="$router.push({ path: '/previsions/' + forecast.member.hash })"> + <th scope="row"> + {{ forecast.member.uid }} + <BadgeStatus :membre="forecast.member" /> + </th> + <td class="p-0"> + <div class="d-flex justify-content-between p-3" v-for="date in forecast.forecasts" :key="date.date"> + <div>{{ date.date | formatDateHeure }}</div> + <div>{{ date.proba * 100 }} %</div> + </div> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <div v-if="display=='forecastsByDates'"> + <h3>Prévisions par dates</h3> + <div class="table-responsive"> + <table class="table table-striped"> + <tbody> + <tr v-for="forecast in wwResult.forecastsByDates" :key="forecast.date"> + <th scope="row">{{ forecast.date | formatDateHeure }}</th> + <td class="p-0"> + <div class="list-group rounded-0"> + <nuxt-link class="list-group-item list-group-item-action border-0 d-flex justify-content-between" :to="'/membres/' + member.member.hash" v-for="member in forecast.forecasts" :key="member.member.uid"> + <div>{{ member.member.uid }} <BadgeStatus :membre="member.member" /></div> + <div>{{ member.proba * 100 }} %</div> + </nuxt-link> + </div> + </td> + </tr> + </tbody> + </table> + </div> </div> </div> </div> </div> - </div> + </transition> </main> </template> -- GitLab