From aed0f42032bc54f72aa2209c956c254f1cbdc87c Mon Sep 17 00:00:00 2001
From: CaTasTrOOf <benoit@besnard.biz>
Date: Tue, 1 Feb 2022 11:38:13 +0100
Subject: [PATCH] Add possibility to use Favorites

---
 components/member/List.vue           | 50 ++++++++++++++++----------
 i18n/locales/de.json                 |  3 +-
 i18n/locales/en.json                 |  3 +-
 i18n/locales/es.json                 |  3 +-
 i18n/locales/fr.json                 |  3 +-
 pages/previsions/futures_sorties.vue | 52 ++++++++++++++++++----------
 6 files changed, 73 insertions(+), 41 deletions(-)

diff --git a/components/member/List.vue b/components/member/List.vue
index c2f3e91..df23d52 100644
--- a/components/member/List.vue
+++ b/components/member/List.vue
@@ -119,6 +119,10 @@ export default {
 			type: Boolean,
 			default: false
 		},
+		certif: {
+			type: Boolean,
+			default: false
+		},
 		defaultSortDir: {
 			type: String,
 			default: "asc"
@@ -140,7 +144,13 @@ export default {
 		},
 		date(member) {
 			if (this.adhesion) return member.limitDate
+			if (this.certif) return member.received_certifications.limit
 			return Math.min(member.limitDate, member.received_certifications.limit)
+		},
+		sort(a, b, order) {
+			if (a < b) return -1 * order
+			if (a > b) return 1 * order
+			return 0
 		}
 	},
 	computed: {
@@ -151,28 +161,30 @@ export default {
 					let modifier = this.currentSortDir === "desc" ? -1 : 1
 
 					if (this.currentSort == "uid") {
-						if (a["uid"].toLowerCase() < b["uid"].toLowerCase())
-							return -1 * modifier
-						if (a["uid"].toLowerCase() > b["uid"].toLowerCase())
-							return 1 * modifier
+						sort(a["uid"].toLowerCase(), b["uid"].toLowerCase(), modifier)
 					} else if (this.currentSort == "pubkey") {
-						if (a["pubkey"].toLowerCase() < b["pubkey"].toLowerCase())
-							return -1 * modifier
-						if (a["pubkey"].toLowerCase() > b["pubkey"].toLowerCase())
-							return 1 * modifier
+						sort(a["pubkey"].toLowerCase(), b["pubkey"].toLowerCase(), modifier)
 					} else if (this.currentSort == "date_sortie") {
-						if (
-							Math.min(a["limitDate"], a["received_certifications"]["limit"]) <
-							Math.min(b["limitDate"], b["received_certifications"]["limit"])
-						)
-							return -1 * modifier
-						if (
-							Math.min(a["limitDate"], a["received_certifications"]["limit"]) >
-							Math.min(b["limitDate"], b["received_certifications"]["limit"])
-						)
-							return 1 * modifier
+						if (this.adhesion) {
+							sort(a["limitDate"], b["limitDate"], modifier)
+						} else if (this.certif) {
+							sort(
+								a["received_certifications"]["limit"],
+								b["received_certifications"]["limit"],
+								modifier
+							)
+						} else {
+							let minA = Math.min(
+								a["limitDate"],
+								a["received_certifications"]["limit"]
+							)
+							let minB = Math.min(
+								b["limitDate"],
+								b["received_certifications"]["limit"]
+							)
+							sort(minA, minB, modifier)
+						}
 					}
-
 					return 0
 				})
 				.filter((row, index) => {
diff --git a/i18n/locales/de.json b/i18n/locales/de.json
index a20e4de..869cc13 100644
--- a/i18n/locales/de.json
+++ b/i18n/locales/de.json
@@ -78,7 +78,8 @@
 		"none": "Sie haben noch keine Favoriten",
 		"supprime": "Aus den Favoriten entfernt!",
 		"supprimer": "Aus den Favoriten entfernen",
-		"title": "Meine Favoriten"
+		"title": "Meine Favoriten",
+		"use": "Verwenden Sie meine Favoriten"
 	},
 	"futuremembers": "Zukünftige Beitritte",
 	"futureexits": "Zukünfitge Austritte",
diff --git a/i18n/locales/en.json b/i18n/locales/en.json
index 3d11593..99fad3e 100644
--- a/i18n/locales/en.json
+++ b/i18n/locales/en.json
@@ -79,7 +79,8 @@
 		"none": "You don't have any favorites yet",
 		"supprime": "Deleted from favourites&nbsp;!",
 		"supprimer": "Delete from favourites",
-		"title": "My favourites"
+		"title": "My favourites",
+		"use": "Use my favourites"
 	},
 	"futuremembers": "Future entries",
 	"futureexits": "Future exits",
diff --git a/i18n/locales/es.json b/i18n/locales/es.json
index c4cd434..5aa977c 100644
--- a/i18n/locales/es.json
+++ b/i18n/locales/es.json
@@ -79,7 +79,8 @@
 		"none": "Aún no tienes favoritos",
 		"supprime": "¡Eliminado de favoritos!",
 		"supprimer": "Eliminar de favoritos",
-		"title": "Mis favoritos"
+		"title": "Mis favoritos",
+		"use": "Usar mis favoritos"
 	},
 	"futuremembers": "Futuras entradas",
 	"futureexits": "Futuras salidas",
diff --git a/i18n/locales/fr.json b/i18n/locales/fr.json
index df72ff4..ccf811d 100644
--- a/i18n/locales/fr.json
+++ b/i18n/locales/fr.json
@@ -79,7 +79,8 @@
 		"none": "Vous n'avez pas encore de favoris",
 		"supprime": "Supprimé des favoris&nbsp;!",
 		"supprimer": "Supprimer des favoris",
-		"title": "Mes favoris"
+		"title": "Mes favoris",
+		"use": "Utiliser mes favoris"
 	},
 	"futuremembers": "Futures entrées",
 	"futureexits": "Futures sorties",
diff --git a/pages/previsions/futures_sorties.vue b/pages/previsions/futures_sorties.vue
index dc01ed1..4d70742 100644
--- a/pages/previsions/futures_sorties.vue
+++ b/pages/previsions/futures_sorties.vue
@@ -2,7 +2,7 @@
 	<main class="container">
 		<h2 class="text-center my-4 font-weight-light">{{ $t("futureexits") }}</h2>
 		<div class="row mb-4">
-			<div class="col-6 m-auto text-center">
+			<div class="col-6 m-auto text-center" v-if="!favoris">
 				<label for="period" class="form-label">{{
 					$t("previsions.period.title")
 				}}</label>
@@ -22,6 +22,10 @@
 					$t("previsions.period.desc")
 				}}</small>
 			</div>
+			<div class="col-6 m-auto text-center">
+				<input type="checkbox" id="favoris" v-model="favoris" />
+				<label for="favoris" class="form-label">{{ $t("favoris.use") }}</label>
+			</div>
 		</div>
 		<NavigationLoader :isLoading="$apollo.queries.wwResult.loading" />
 		<transition name="fade">
@@ -41,7 +45,8 @@
 						<MemberList
 							defaultSort="date_sortie"
 							:members="wwResult['outOfCerts']"
-							:displayPubkey="false" />
+							:displayPubkey="false"
+							:certif="true" />
 					</div>
 					<div class="col-lg-6">
 						<h2 class="h4 text-danger text-center">{{ $t("statut.renew") }}</h2>
@@ -78,40 +83,51 @@ export default {
 				}
 			],
 			error: null,
-			period: 30
+			period: 30,
+			favoris: false
 		}
 	},
 	methods: {
 		save() {
 			localStorage.setItem("previsions_period", this.period)
+		},
+		getParams() {
+			if (this.favoris && localStorage.favourites) {
+				return { group: this.$favourites.list }
+			}
+			return { period: this.period * 24 * 60 * 60 }
 		}
 	},
 	apollo: {
 		wwResult: {
 			query: NEXT_EXITS,
 			variables() {
-				return { period: this.period * 24 * 60 * 60 }
+				return this.getParams()
 			},
 			update(data) {
 				let result = { membership: [], outOfCerts: [] }
 
 				data.memEnds.forEach((member) => {
-					if (
-						["danger", "warning"].includes(
-							this.$options.filters.dateStatus(member.limitDate)
-						)
-					) {
+					if (this.favoris) {
 						result.membership.push(member)
-					}
-
-					if (
-						["danger", "warning"].includes(
-							this.$options.filters.dateStatus(
-								member.received_certifications.limit
-							)
-						)
-					) {
 						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)
+						}
 					}
 				})
 
-- 
GitLab