Forked from
clients / wotwizard-ui
177 commits behind the upstream repository.
-
Pierre-Jean CHANCELLIER authoredPierre-Jean CHANCELLIER authored
List.vue 3.79 KiB
<template>
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead class="thead-light sortable" v-if="displayHead">
<tr>
<th class="position-relative" scope="col" @click="sort('uid')">
<BtnSort
fieldName="uid"
title="UID"
:currentSort="currentSort"
:currentSortDir="currentSortDir" />
</th>
<th
scope="col"
class="d-none d-md-table-cell position-relative"
@click="sort('pubkey')"
v-if="displayPubkey">
<BtnSort
fieldName="pubkey"
:title="$t('cle.publique.title')"
:currentSort="currentSort"
:currentSortDir="currentSortDir" />
</th>
<th
scope="col"
class="d-none d-sm-table-cell position-relative"
@click="sort('date_sortie')"
v-if="displayDate">
<BtnSort
fieldName="date_sortie"
:title="$t('membre.datelimpertestatut')"
:currentSort="currentSort"
:currentSortDir="currentSortDir" />
</th>
<th class="position-relative"></th>
</tr>
</thead>
<tbody>
<tr v-for="member in membersSorted" :key="member.uid">
<th scope="row" @click="redirect(member.hash)">
<span v-if="$favourites.list.includes(member.uid)">★ </span
>{{ member.uid }}
<BadgeDanger
:limitDate="
Math.min(member.received_certifications.limit, member.limitDate)
"
:memberStatus="member.status" />
<BadgeStatus :membre="member" />
</th>
<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="
Math.min(member.limitDate, member.received_certifications.limit)
"
styleDate="long" />
</td>
<td class="py-1 text-center">
<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
}
},
methods: {
redirect(hash) {
this.$router.push(
this.localePath({ name: "membres-hash", params: { hash } })
)
},
sort(s) {
if (s === this.currentSort) {
this.currentSortDir = this.currentSortDir === "asc" ? "desc" : "asc"
}
this.currentSort = s
}
},
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
}
return 0
})
}
}
}
</script>