Skip to content
Snippets Groups Projects
Commit dc60394e authored by Pierre-Jean CHANCELLIER's avatar Pierre-Jean CHANCELLIER
Browse files

improve MemberList

parent c05b45b1
No related branches found
No related tags found
No related merge requests found
...@@ -86,8 +86,8 @@ body { ...@@ -86,8 +86,8 @@ body {
width: 165px; width: 165px;
} }
.td-pubkey { .td-quality {
width: 200px; width: 120px;
} }
} }
......
...@@ -4,7 +4,8 @@ ...@@ -4,7 +4,8 @@
:title="title" :title="title"
v-if=" v-if="
$options.filters.dateStatus(limitDate) != 'success' && $options.filters.dateStatus(limitDate) != 'success' &&
['MEMBER', 'MISSING'].includes(memberStatus) ['MEMBER', 'MISSING'].includes(memberStatus) &&
limitDate != 0
" "
><outline-exclamation-icon class="icon" /> ><outline-exclamation-icon class="icon" />
<span class="sr-only" v-if="title">{{ title }}</span> <span class="sr-only" v-if="title">{{ title }}</span>
......
...@@ -8,8 +8,7 @@ ...@@ -8,8 +8,7 @@
export default { export default {
props: { props: {
date: { date: {
type: Number, type: Number
required: true
}, },
styleDate: { styleDate: {
type: String, type: String,
......
...@@ -5,15 +5,18 @@ ...@@ -5,15 +5,18 @@
'bg-success': isDispo, 'bg-success': isDispo,
'bg-danger': !isDispo 'bg-danger': !isDispo
}"> }">
{{ <span v-if="isDispo">{{ $t("membre.dispo") }}</span>
isDispo <span v-else
? $t("membre.dispo") >&nbsp;
: "⏱&nbsp;" + {{
nbPendingCertifs + dateDispo == null
" (&nbsp;" + ? "N/A"
$d(new Date(dateDispo * 1000), "short") + : nbPendingCertifs +
")" " (&nbsp;" +
}} $d(new Date(dateDispo * 1000), "short") +
")"
}}</span
>
</span> </span>
</template> </template>
...@@ -21,12 +24,10 @@ ...@@ -21,12 +24,10 @@
export default { export default {
props: { props: {
isDispo: { isDispo: {
type: Boolean, type: Boolean
required: true
}, },
dateDispo: { dateDispo: {
type: Number, type: Number
required: true
}, },
certifs: { certifs: {
type: Array, type: Array,
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<div class="card-body"> <div class="card-body">
<div <div
class="uid-wrapper d-flex align-items-center justify-content-between mb-4"> class="uid-wrapper d-flex align-items-center justify-content-between mb-4">
<h2 class="h3 card-title text-center d-flex align-items-center"> <h2 class="h3 card-title text-center d-flex align-items-center m-0">
<span class="text-truncate d-inline-block"> <span class="text-truncate d-inline-block">
{{ hash.uid }} {{ hash.uid }}
</span> </span>
...@@ -144,7 +144,11 @@ export default { ...@@ -144,7 +144,11 @@ export default {
<style lang="scss"> <style lang="scss">
.uid-wrapper { .uid-wrapper {
flex-direction: column; flex-direction: column-reverse;
button {
margin-bottom: 1rem;
}
.text-truncate { .text-truncate {
max-width: 300px; max-width: 300px;
...@@ -152,6 +156,10 @@ export default { ...@@ -152,6 +156,10 @@ export default {
@media (min-width: 576px) { @media (min-width: 576px) {
flex-direction: row; flex-direction: row;
button {
margin-bottom: 0;
}
} }
} }
......
...@@ -18,12 +18,34 @@ ...@@ -18,12 +18,34 @@
</th> </th>
<th <th
scope="col" scope="col"
class="td-pubkey d-none d-lg-table-cell p-0" class="d-none d-lg-table-cell p-0"
@click="sort('pubkey')" v-if="['favoris', 'search'].includes(type)"
v-if="['search', 'favoris'].includes(type)"> @click="sort('statut')">
<BtnSort <BtnSort
fieldName="pubkey" fieldName="statut"
:title="$t('cle.publique.title')" :title="$t('statut.title')"
:currentSort="currentSort"
:currentSortDir="currentSortDir" />
</th>
<th
scope="col"
class="td-quality d-none d-lg-table-cell p-0"
v-if="['favoris', 'search'].includes(type)"
@click="sort('quality')">
<BtnSort
fieldName="quality"
:title="$t('membre.qualite.title')"
:currentSort="currentSort"
:currentSortDir="currentSortDir" />
</th>
<th
scope="col"
class="d-none d-xl-table-cell p-0"
v-if="['favoris', 'search'].includes(type)"
@click="sort('dispo')">
<BtnSort
fieldName="dispo"
:title="$t('membre.dispo')"
:currentSort="currentSort" :currentSort="currentSort"
:currentSortDir="currentSortDir" /> :currentSortDir="currentSortDir" />
</th> </th>
...@@ -50,7 +72,7 @@ ...@@ -50,7 +72,7 @@
'd-md-table-cell': type != 'certif' 'd-md-table-cell': type != 'certif'
}" }"
@click="sort('date_certs')" @click="sort('date_certs')"
v-if="['certif', 'favoris'].includes(type)"> v-if="['certif', 'favoris', 'search'].includes(type)">
<BtnSort <BtnSort
fieldName="date_certs" fieldName="date_certs"
:title=" :title="
...@@ -67,32 +89,61 @@ ...@@ -67,32 +89,61 @@
<tbody> <tbody>
<tr v-for="member in membersSorted" :key="member.uid"> <tr v-for="member in membersSorted" :key="member.uid">
<td @click="redirect(member.hash)"> <td @click="redirect(member.hash)">
<div class="d-flex justify-content-center"> <div class="d-flex uid-content">
<span v-if="$favourites.list.includes(member.uid)">&nbsp;</span> <div
<div class="text-truncate">{{ member.uid }}</div> class="d-flex flex-column align-items-center justify-content-evenly flex-grow-1">
&nbsp; <div class="d-flex justify-content-center mw-100">
<BadgeDanger <span v-if="$favourites.list.includes(member.uid)"
:limitDate="member.certsLimit" >&nbsp;</span
:memberStatus="member.status" /> >
<div class="text-truncate">{{ member.uid }}</div>
&nbsp;
<BadgeDanger
:limitDate="Math.min(member.certsLimit, member.limitDate)"
:memberStatus="member.status" />
</div>
<div class="text-muted small">
{{ member.pubkey.substring(0, 10) }}
</div>
<div
v-if="['adhesion', 'certif'].includes(type)"
class="d-sm-none">
<BadgeDate :date="getDate(member)" styleDate="short" />
</div>
</div>
<div
class="w-50 d-flex flex-column align-items-center justify-content-evenly gap-1 d-lg-none"
v-if="['favoris', 'search'].includes(type)">
<BadgeStatus :membre="member" class="mw-100 text-truncate" />
<BadgeQuality :quality="member.quality.ratio" />
<BadgeDispo
:isDispo="member.minDatePassed"
:dateDispo="member.minDate"
:certifs="member.sent_certifications"
class="mw-100 text-truncate" />
</div>
</div> </div>
</td>
<td
class="d-none d-lg-table-cell"
v-if="['favoris', 'search'].includes(type)"
@click="redirect(member.hash)">
<BadgeStatus :membre="member" /> <BadgeStatus :membre="member" />
<BadgeQuality
:quality="member.quality.ratio"
v-if="!['REVOKED', 'NEWCOMER'].includes(member.status)" />
<BadgeDispo
:isDispo="member.minDatePassed"
:dateDispo="member.minDate"
:certifs="member.sent_certifications"
v-if="member.status == 'MEMBER'" />
<div v-if="['adhesion', 'certif'].includes(type)" class="d-sm-none">
<BadgeDate :date="getDate(member)" styleDate="short" />
</div>
</td> </td>
<td <td
class="d-none d-lg-table-cell" class="d-none d-lg-table-cell"
v-if="['search', 'favoris'].includes(type)" v-if="['favoris', 'search'].includes(type)"
@click="redirect(member.hash)"> @click="redirect(member.hash)">
{{ member.pubkey.substring(0, 10) }} <BadgeQuality :quality="member.quality.ratio" />
</td>
<td
class="d-none d-xl-table-cell"
v-if="['favoris', 'search'].includes(type)"
@click="redirect(member.hash)">
<BadgeDispo
:isDispo="member.minDatePassed"
:dateDispo="member.minDate"
:certifs="member.sent_certifications" />
</td> </td>
<td <td
class="d-none d-sm-table-cell" class="d-none d-sm-table-cell"
...@@ -106,7 +157,7 @@ ...@@ -106,7 +157,7 @@
'd-sm-table-cell': type == 'certif', 'd-sm-table-cell': type == 'certif',
'd-md-table-cell': type != 'certif' 'd-md-table-cell': type != 'certif'
}" }"
v-if="['certif', 'favoris'].includes(type)" v-if="['certif', 'favoris', 'search'].includes(type)"
@click="redirect(member.hash)"> @click="redirect(member.hash)">
<BadgeDate :date="member.certsLimit" styleDate="short" /> <BadgeDate :date="member.certsLimit" styleDate="short" />
</td> </td>
...@@ -197,12 +248,14 @@ export default { ...@@ -197,12 +248,14 @@ export default {
b["uid"].toLowerCase(), b["uid"].toLowerCase(),
modifier modifier
) )
} else if (this.currentSort == "pubkey") { } else if (this.currentSort == "dispo") {
return this.getOrder( if (a.minDate == null) return 1 * modifier
a["pubkey"].toLowerCase(), if (b.minDate == null) return -1 * modifier
b["pubkey"].toLowerCase(), return this.getOrder(a.minDate, b.minDate, modifier)
modifier } else if (this.currentSort == "quality") {
) return this.getOrder(a.quality.ratio, b.quality.ratio, modifier)
} else if (this.currentSort == "statut") {
return this.getOrder(a["status"], b["status"], modifier)
} else if (this.currentSort == "date_membership") { } else if (this.currentSort == "date_membership") {
return this.getOrder(a["limitDate"], b["limitDate"], modifier) return this.getOrder(a["limitDate"], b["limitDate"], modifier)
} else if (this.currentSort == "date_certs") { } else if (this.currentSort == "date_certs") {
...@@ -219,9 +272,3 @@ export default { ...@@ -219,9 +272,3 @@ export default {
} }
} }
</script> </script>
<style lang="scss" scoped>
tbody tr {
height: 90px;
}
</style>
<template> <template>
<aside class="menu position-fixed d-flex flex-column border-end"> <aside class="menu position-fixed d-flex flex-column border-end">
<div class="mb-4"> <div class="mb-4">
<nuxt-link :to="localePath('/')" class="d-flex px-3 pt-3"> <nuxt-link
@click.native="
if (sreenwidth < 1200) {
toggleMenu()
}
"
:to="localePath('/')"
class="d-flex px-3 pt-3">
<img :src="$icon(512)" alt="Accueil" class="logo" /> <img :src="$icon(512)" alt="Accueil" class="logo" />
<div> <div>
<h1 class="h3">Wotwizard</h1> <h1 class="h3">Wotwizard</h1>
...@@ -44,12 +51,20 @@ import { LAST_BLOCK } from "@/graphql/queries.js" ...@@ -44,12 +51,20 @@ import { LAST_BLOCK } from "@/graphql/queries.js"
import { VERSION } from "@/graphql/queries.js" import { VERSION } from "@/graphql/queries.js"
export default { export default {
data() {
return {
sreenwidth: 0
}
},
props: { props: {
menus: Array menus: Array
}, },
methods: { methods: {
toggleMenu() { toggleMenu() {
this.$emit("toggleMenu") this.$emit("toggleMenu")
},
onResize() {
this.sreenwidth = window.screen.width
} }
}, },
apollo: { apollo: {
...@@ -59,6 +74,13 @@ export default { ...@@ -59,6 +74,13 @@ export default {
version: { version: {
query: VERSION query: VERSION
} }
},
mounted() {
this.sreenwidth = window.screen.width
this.$nextTick(function () {
this.onResize()
})
window.addEventListener("resize", this.onResize)
} }
} }
</script> </script>
......
...@@ -195,7 +195,8 @@ ...@@ -195,7 +195,8 @@
"missing": "Verlorene Mitgliedschaft", "missing": "Verlorene Mitgliedschaft",
"newcomer": "Zukünftiges Mitglied", "newcomer": "Zukünftiges Mitglied",
"renew": "Zu verlängernde Mitgliedschaft", "renew": "Zu verlängernde Mitgliedschaft",
"revoked": "Widerrufenes Mitglied" "revoked": "Widerrufenes Mitglied",
"title": "Status"
}, },
"time": { "time": {
"a": "um" "a": "um"
......
...@@ -196,7 +196,8 @@ ...@@ -196,7 +196,8 @@
"missing": "Membership lost", "missing": "Membership lost",
"newcomer": "Future member", "newcomer": "Future member",
"renew": "Membership to renew", "renew": "Membership to renew",
"revoked": "Revoked member" "revoked": "Revoked member",
"title": "Status"
}, },
"time": { "time": {
"a": "at" "a": "at"
......
...@@ -196,7 +196,8 @@ ...@@ -196,7 +196,8 @@
"missing": "Membresía perdida", "missing": "Membresía perdida",
"newcomer": "Futur@ miembro", "newcomer": "Futur@ miembro",
"renew": "Membresía por renovar", "renew": "Membresía por renovar",
"revoked": "Membresía revocada" "revoked": "Membresía revocada",
"title": "Estado"
}, },
"time": { "time": {
"a": "a" "a": "a"
......
...@@ -196,7 +196,8 @@ ...@@ -196,7 +196,8 @@
"missing": "Adhésion perdue", "missing": "Adhésion perdue",
"newcomer": "Futur membre", "newcomer": "Futur membre",
"renew": "Adhésion à renouveler", "renew": "Adhésion à renouveler",
"revoked": "Membre révoqué" "revoked": "Membre révoqué",
"title": "Statut"
}, },
"time": { "time": {
"a": "à" "a": "à"
......
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
</transition> </transition>
<transition name="fade"> <transition name="fade">
<div class="row" v-if="!$apollo.loading"> <div class="row" v-if="!$apollo.loading">
<div class="col-lg-6 mb-5" v-if="memEnds"> <div class="col-md-6 mb-5" v-if="memEnds">
<h2 class="h4 text-danger text-center"> <h2 class="h4 text-danger text-center text-truncate">
{{ $t("statut.renew") }} {{ $t("statut.renew") }}
</h2> </h2>
<MemberList <MemberList
...@@ -28,8 +28,8 @@ ...@@ -28,8 +28,8 @@
:members="memEnds" :members="memEnds"
type="adhesion" /> type="adhesion" />
</div> </div>
<div class="col-lg-6 mb-5" v-if="certEnds"> <div class="col-md-6 mb-5" v-if="certEnds">
<h2 class="h4 text-danger text-center"> <h2 class="h4 text-danger text-center text-truncate">
{{ $t("statut.bientotmanquecertif") }} {{ $t("statut.bientotmanquecertif") }}
</h2> </h2>
<MemberList <MemberList
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment