Newer
Older
<table class="table table-striped table-hover text-center">
<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(

Pierre-Jean CHANCELLIER
committed
Math.max(member.received_certifications.limit, 1),
member.limitDate
)
"
:memberStatus="member.status" />
</div>
<BadgeStatus :membre="member" />
<BadgeDispo
:isDispo="member.minDatePassed"
:dateDispo="member.minDate"
<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" />
<button
class="btn btn-danger"
v-if="$favourites.list.includes(member.uid)"
@click="$favourites.toggleFavourite(member.uid, $event)"
:title="$t('favoris.supprimer')">
<BtnPagination
:currentPage.sync="currentPage"
:pageSize="pageSize"
:arrayLength="members.length" />
</template>
<script>
export default {
currentSort: this.defaultSort,
currentSortDir: this.defaultSortDir,
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
certif: {
type: Boolean,
default: false
},
defaultSortDir: {
type: String,
default: "asc"
},
defaultSort: {
type: String,
default: "uid"
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
if (this.certif) return member.received_certifications.limit
return Math.min(member.limitDate, member.received_certifications.limit)
if (a < b) return -1 * order
if (a > b) return 1 * order
return 0
}
},
computed: {
membersSorted() {
return this.members
.sort((a, b) => {
let modifier = this.currentSortDir === "desc" ? -1 : 1
return this.getOrder(
a["uid"].toLowerCase(),
b["uid"].toLowerCase(),
modifier
)
a["pubkey"].toLowerCase(),
b["pubkey"].toLowerCase(),
modifier
)
} else if (this.currentSort == "date_sortie") {
return this.getOrder(a["limitDate"], b["limitDate"], modifier)
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"]
)
return this.getOrder(minA, minB, modifier)
}
return 0
})
.filter((row, index) => {
let start = (this.currentPage - 1) * this.pageSize
let end = this.currentPage * this.pageSize
if (index >= start && index < end) return true
})
},
getTitleDate() {
if (this.adhesion || this.certif) {
return this.$t("date")
} else {
return this.$t("membre.datelimpertestatut")
}