Newer
Older
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead class="thead-light sortable" v-if="displayHead">
<th class="position-relative" scope="col" @click="sort('uid')">
:currentSort="currentSort"
:currentSortDir="currentSortDir" />
class="d-none d-md-table-cell position-relative"
@click="sort('pubkey')"
v-if="displayPubkey">
<BtnSort
:currentSort="currentSort"
:currentSortDir="currentSortDir" />
<th
scope="col"
class="d-none d-sm-table-cell position-relative"
@click="sort('date_sortie')"
<BtnSort
fieldName="date_sortie"
:currentSort="currentSort"
:currentSortDir="currentSortDir" />
<th class="position-relative"></th>
<tr v-for="member in membersSorted" :key="member.uid">
<th scope="row" @click="redirect(member.hash)">
<div>
<span v-if="$favourites.list.includes(member.uid)">★ </span
>{{ member.uid }}
<BadgeDanger
:limitDate="
Math.min(
member.received_certifications.limit,
member.limitDate
)
"
:memberStatus="member.status" />
</div>
<BadgeStatus :membre="member" />
<BadgeDispo
:isDispo="member.minDatePassed"
:dateDispo="member.minDate"
v-if="member.status == 'MEMBER'" />
<td
class="d-none d-md-table-cell"
v-if="displayPubkey"
@click="redirect(member.hash)">
{{ member.pubkey.substring(0, 10) }}
</td>
<td
class="d-none d-sm-table-cell"
v-if="displayDate"
@click="redirect(member.hash)">
<BadgeDate :date="date(member)" styleDate="long" />
<td class="py-1 text-center" :title="$t('favoris.supprimer')">
<button
class="btn btn-danger"
v-if="$favourites.list.includes(member.uid)"
@click="$favourites.toggleFavourite(member.uid, $event)">
X
</button>
</td>
</tr>
</tbody>
</table>
</div>
</template>
<script>
export default {
data() {
return {
currentSort: "uid",
currentSortDir: "asc"
}
},
props: {
members: {
type: Array,
required: true
},
displayHead: {
type: Boolean,
default: true
displayPubkey: {
type: Boolean,
default: true
displayDate: {
type: Boolean,
default: true
},
adhesion: {
type: Boolean,
default: false
},
methods: {
redirect(hash) {
this.$router.push(
this.localePath({ name: "membre", query: { hash } })
sort(s) {
if (s === this.currentSort) {
this.currentSortDir = this.currentSortDir === "asc" ? "desc" : "asc"
}
this.currentSort = s
},
date(member) {
if (this.adhesion) return member.limitDate
return Math.min(member.limitDate, member.received_certifications.limit)
}
},
computed: {
membersSorted() {
return this.members.slice().sort((a, b) => {
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
} 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
} 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