From d9a33dd8e6374f3525fd5828d91c3b8777ac61cf Mon Sep 17 00:00:00 2001
From: paidge <paidge_cs@hotmail.com>
Date: Tue, 1 Feb 2022 16:59:27 +0100
Subject: [PATCH] correct queries for future_sorties

---
 components/member/List.vue           |  27 ++---
 graphql/queries.js                   |  42 +++++++-
 pages/previsions/futures_sorties.vue | 145 ++++++++-------------------
 3 files changed, 96 insertions(+), 118 deletions(-)

diff --git a/components/member/List.vue b/components/member/List.vue
index 77730ae..56a25b6 100644
--- a/components/member/List.vue
+++ b/components/member/List.vue
@@ -50,6 +50,9 @@
 								"
 								:memberStatus="member.status" />
 						</div>
+						<div v-if="['adhesion', 'certif'].includes(type)" class="d-sm-none">
+							<BadgeDate :date="date(member)" styleDate="long" />
+						</div>
 						<BadgeStatus :membre="member" />
 						<BadgeDispo
 							:isDispo="member.minDatePassed"
@@ -103,7 +106,6 @@ export default {
 			type: Array,
 			required: true
 		},
-
 		displayHead: {
 			type: Boolean,
 			default: true
@@ -116,13 +118,12 @@ export default {
 			type: Boolean,
 			default: true
 		},
-		adhesion: {
-			type: Boolean,
-			default: false
-		},
-		certif: {
-			type: Boolean,
-			default: false
+		type: {
+			type: String,
+			default: "default",
+			validator: function (value) {
+				return ["adhesion", "certif", "default"].indexOf(value) !== -1
+			}
 		},
 		defaultSortDir: {
 			type: String,
@@ -144,8 +145,8 @@ export default {
 			this.currentSort = s
 		},
 		date(member) {
-			if (this.adhesion) return member.limitDate
-			if (this.certif) return member.received_certifications.limit
+			if (this.type == "adhesion") return member.limitDate
+			if (this.type == "certif") return member.received_certifications.limit
 			return Math.min(member.limitDate, member.received_certifications.limit)
 		},
 		getOrder(a, b, order) {
@@ -173,9 +174,9 @@ export default {
 							modifier
 						)
 					} else if (this.currentSort == "date_sortie") {
-						if (this.adhesion) {
+						if (this.type == "adhesion") {
 							return this.getOrder(a["limitDate"], b["limitDate"], modifier)
-						} else if (this.certif) {
+						} else if (this.type == "certif") {
 							return this.getOrder(
 								a["received_certifications"]["limit"],
 								b["received_certifications"]["limit"],
@@ -202,7 +203,7 @@ export default {
 				})
 		},
 		getTitleDate() {
-			if (this.adhesion || this.certif) {
+			if (["adhesion", "certif"].includes(this.type)) {
 				return this.$t("date")
 			} else {
 				return this.$t("membre.datelimpertestatut")
diff --git a/graphql/queries.js b/graphql/queries.js
index ae84d24..00715cb 100644
--- a/graphql/queries.js
+++ b/graphql/queries.js
@@ -235,7 +235,7 @@ export const FAVORIS = gql`
 	}
 `
 
-// Pour la page index
+// Pour la page previsions/futures_sorties
 export const NEXT_EXITS = gql`
 	query NextExits($group: [String!], $start: Int64, $period: Int64) {
 		memEnds(group: $group, startFromNow: $start, period: $period) {
@@ -251,6 +251,46 @@ export const NEXT_EXITS = gql`
 				__typename
 				limit
 			}
+			sent_certifications {
+				__typename
+				pending
+			}
+		}
+	}
+`
+// Pour la page previsions/futures_sorties
+export const NEXT_LOOSE_CERTS = gql`
+	query NextLoseCerts(
+		$group: [String!]
+		$start: Int64
+		$period: Int64
+		$missingIncluded: Boolean
+	) {
+		certEnds(
+			group: $group
+			startFromNow: $start
+			period: $period
+			missingIncluded: $missingIncluded
+		) {
+			id {
+				__typename
+				pubkey
+				uid
+				status
+				hash
+				minDatePassed
+				minDate
+				limitDate
+				received_certifications {
+					__typename
+					limit
+				}
+				sent_certifications {
+					__typename
+					pending
+				}
+			}
+			date
 		}
 	}
 `
diff --git a/pages/previsions/futures_sorties.vue b/pages/previsions/futures_sorties.vue
index d434fe0..6202baf 100644
--- a/pages/previsions/futures_sorties.vue
+++ b/pages/previsions/futures_sorties.vue
@@ -6,60 +6,34 @@
 				<input type="checkbox" id="favoris" v-model="favoris" />
 				<label for="favoris" class="form-label">{{ $t("favoris.use") }}</label>
 			</div>
-			<div class="col-10 mb-4" v-if="!favoris">
-				<div class="form-group row period">
-					<label for="period" class="col-sm-6 col-form-label">{{
-						$t("previsions.period.title") + "&nbsp;:"
-					}}</label>
-					<div class="col-sm-6 col-md-5 col-lg-4 col-xl-3">
-						<select
-							class="form-control"
-							id="period"
-							aria-describedby="periodHelp"
-							v-model="period"
-							@change="save">
-							<option
-								v-for="index in 30"
-								:key="index"
-								:value="index"
-								v-html="$tc('jours', index)"></option>
-						</select>
-						<small id="periodHelp" class="form-text text-muted">{{
-							$t("previsions.period.desc")
-						}}</small>
-					</div>
-				</div>
-			</div>
 		</div>
-		<NavigationLoader :isLoading="$apollo.queries.wwResult.loading" />
+		<NavigationLoader :isLoading="$apollo.loading" />
 		<transition name="fade">
-			<div
-				class="alert alert-danger"
-				v-if="error && !$apollo.queries.wwResult.loading">
+			<div class="alert alert-danger" v-if="error && !$apollo.loading">
 				{{ error }}
 			</div>
 		</transition>
 		<transition name="fade">
-			<div v-if="wwResult && !$apollo.queries.wwResult.loading">
-				<div class="row">
-					<div class="col-lg-6">
-						<h2 class="h4 text-danger text-center">
-							{{ $t("statut.bientotmanquecertif") }}
-						</h2>
-						<MemberList
-							defaultSort="date_sortie"
-							:members="wwResult['outOfCerts']"
-							:displayPubkey="false"
-							:certif="true" />
-					</div>
-					<div class="col-lg-6">
-						<h2 class="h4 text-danger text-center">{{ $t("statut.renew") }}</h2>
-						<MemberList
-							defaultSort="date_sortie"
-							:members="wwResult['membership']"
-							:displayPubkey="false"
-							:adhesion="true" />
-					</div>
+			<div class="row" v-if="!$apollo.loading">
+				<div class="col-lg-6" v-if="memEnds">
+					<h2 class="h4 text-danger text-center">
+						{{ $t("statut.renew") }}
+					</h2>
+					<MemberList
+						defaultSort="date_sortie"
+						:members="memEnds"
+						:displayPubkey="false"
+						type="adhesion" />
+				</div>
+				<div class="col-lg-6" v-if="certEnds">
+					<h2 class="h4 text-danger text-center">
+						{{ $t("statut.bientotmanquecertif") }}
+					</h2>
+					<MemberList
+						defaultSort="date_sortie"
+						:members="certEnds"
+						:displayPubkey="false"
+						type="certif" />
 				</div>
 			</div>
 		</transition>
@@ -68,6 +42,7 @@
 
 <script>
 import { NEXT_EXITS } from "@/graphql/queries.js"
+import { NEXT_LOOSE_CERTS } from "@/graphql/queries.js"
 
 export default {
 	data() {
@@ -87,55 +62,36 @@ export default {
 				}
 			],
 			error: null,
-			period: 30,
 			favoris: false
 		}
 	},
-	methods: {
-		save() {
-			localStorage.setItem("previsions_period", this.period)
-		},
+	computed: {
 		getParams() {
-			if (this.favoris && localStorage.favourites) {
-				return { group: this.$favourites.list }
+			if (this.favoris) {
+				return localStorage.favourites
+					? { group: "wotwizard-nobody", period: 2635200 }
+					: { group: this.$favourites.list, period: 2635200 }
 			}
-			return { period: this.period * 24 * 60 * 60 }
+			return { period: 2635200 }
 		}
 	},
 	apollo: {
-		wwResult: {
+		memEnds: {
 			query: NEXT_EXITS,
 			variables() {
-				return this.getParams()
+				return this.getParams
+			},
+			error(err) {
+				this.error = err.message
+			}
+		},
+		certEnds: {
+			query: NEXT_LOOSE_CERTS,
+			variables() {
+				return this.getParams
 			},
 			update(data) {
-				let result = { membership: [], outOfCerts: [] }
-
-				data.memEnds.forEach((member) => {
-					if (this.favoris) {
-						result.membership.push(member)
-						result.outOfCerts.push(member)
-					} else {
-						if (
-							["danger", "warning"].includes(
-								this.$options.filters.dateStatus(member.limitDate)
-							)
-						) {
-							result.membership.push(member)
-						}
-						if (
-							["danger", "warning"].includes(
-								this.$options.filters.dateStatus(
-									member.received_certifications.limit
-								)
-							)
-						) {
-							result.outOfCerts.push(member)
-						}
-					}
-				})
-
-				return result
+				return data.certEnds.map((item) => item.id)
 			},
 			error(err) {
 				this.error = err.message
@@ -151,25 +107,6 @@ export default {
 	},
 	mounted() {
 		$nuxt.$emit("changeRoute", this.breadcrumb)
-		if (localStorage.previsions_sorties) {
-			this.period = localStorage.getItem("previsions_period")
-		}
 	}
 }
 </script>
-
-<style lang="scss">
-.period {
-	text-align: center;
-
-	select {
-		text-align: inherit;
-	}
-
-	@media (min-width: 576px) {
-		label {
-			text-align: right;
-		}
-	}
-}
-</style>
-- 
GitLab