<template> <div class="to-left"> <h1 v-if="project"> Créer un nouveau type de signalement pour le projet « {{ project.title }} » depuis le catalogue Datasud </h1> Liste des ressources géographiques publiées par vos organisations : <div class="table"> <div class="row header"> <div>Organisation</div> <div>Dataset</div> <div>Ressource</div> </div> <div v-for="(ressource, index) in paginatedRessources" :key="`${ressource.ressource}-${index}`" class="row" > <div>{{ ressource.organisation }}</div> <div>{{ ressource.dataset }}</div> <div>{{ ressource.ressource }}</div> </div> </div> <div v-if="nbPages.length > 1" id="table-features_info" class="dataTables_info" > Affichage de l'élément {{ pagination.start + 1 }} à {{ displayedPageEnd }} sur {{ ressources.length }} éléments </div> <div v-if="nbPages.length > 1" id="table-features_paginate" class="dataTables_paginate paging_simple_numbers" > <a @click="toPreviousPage" id="table-features_previous" :class="[ 'paginate_button previous', { disabled: pagination.currentPage === 1 }, ]" aria-controls="table-features" data-dt-idx="0" tabindex="0" >Précédent</a > <span> <a v-for="pageNumber in nbPages" :key="'page' + pageNumber" @click="toPage(pageNumber)" :class="[ 'paginate_button', { current: pageNumber === pagination.currentPage }, ]" aria-controls="table-features" data-dt-idx="1" tabindex="0" >{{ pageNumber }}</a > </span> <!-- // TODO : <span v-if="nbPages > 4" class="ellipsis">...</span> --> <a id="table-features_next" :class="[ 'paginate_button next', { disabled: pagination.currentPage === nbPages.length }, ]" aria-controls="table-features" data-dt-idx="7" tabindex="0" @click="toNextPage" >Suivant</a > </div> </div> </template> <script> import { mapGetters } from "vuex"; export default { name: "Catalog", data() { return { ressources: [ { organisation: "Organisation 1", dataset: "Dataset 1", ressource: "Ressource 1", }, { organisation: "Organisation 2", dataset: "Dataset 2", ressource: "Ressource 2", }, { organisation: "Organisation 3", dataset: "Dataset 3", ressource: "Ressource 3", }, { organisation: "Organisation 4", dataset: "Dataset 4", ressource: "Ressource 4", }, { organisation: "Organisation 1", dataset: "Dataset 1", ressource: "Ressource 1", }, { organisation: "Organisation 2", dataset: "Dataset 2", ressource: "Ressource 2", }, { organisation: "Organisation 3", dataset: "Dataset 3", ressource: "Ressource 3", }, { organisation: "Organisation 4", dataset: "Dataset 4", ressource: "Ressource 4", }, { organisation: "Organisation 1", dataset: "Dataset 1", ressource: "Ressource 1", }, { organisation: "Organisation 2", dataset: "Dataset 2", ressource: "Ressource 2", }, { organisation: "Organisation 3", dataset: "Dataset 3", ressource: "Ressource 3", }, { organisation: "Organisation 4", dataset: "Dataset 4", ressource: "Ressource 4", }, { organisation: "Organisation 1", dataset: "Dataset 1", ressource: "Ressource 1", }, { organisation: "Organisation 2", dataset: "Dataset 2", ressource: "Ressource 2", }, { organisation: "Organisation 3", dataset: "Dataset 3", ressource: "Ressource 3", }, { organisation: "Organisation 4", dataset: "Dataset 4", ressource: "Ressource 4", }, { organisation: "Organisation 1", dataset: "Dataset 1", ressource: "Ressource 1", }, { organisation: "Organisation 2", dataset: "Dataset 2", ressource: "Ressource 2", }, { organisation: "Organisation 3", dataset: "Dataset 3", ressource: "Ressource 3", }, { organisation: "Organisation 4", dataset: "Dataset 4", ressource: "Ressource 4", }, { organisation: "Organisation 1", dataset: "Dataset 1", ressource: "Ressource 1", }, { organisation: "Organisation 2", dataset: "Dataset 2", ressource: "Ressource 2", }, { organisation: "Organisation 3", dataset: "Dataset 3", ressource: "Ressource 3", }, { organisation: "Organisation 4", dataset: "Dataset 4", ressource: "Ressource 4", }, { organisation: "Organisation 1", dataset: "Dataset 1", ressource: "Ressource 1", }, { organisation: "Organisation 2", dataset: "Dataset 2", ressource: "Ressource 2", }, { organisation: "Organisation 3", dataset: "Dataset 3", ressource: "Ressource 3", }, { organisation: "Organisation 4", dataset: "Dataset 4", ressource: "Ressource 4", }, { organisation: "Organisation 1", dataset: "Dataset 1", ressource: "Ressource 1", }, { organisation: "Organisation 2", dataset: "Dataset 2", ressource: "Ressource 2", }, { organisation: "Organisation 3", dataset: "Dataset 3", ressource: "Ressource 3", }, { organisation: "Organisation 4", dataset: "Dataset 4", ressource: "Ressource 4", }, { organisation: "Organisation 1", dataset: "Dataset 1", ressource: "Ressource 1", }, { organisation: "Organisation 2", dataset: "Dataset 2", ressource: "Ressource 2", }, { organisation: "Organisation 3", dataset: "Dataset 3", ressource: "Ressource 3", }, { organisation: "Organisation 4", dataset: "Dataset 4", ressource: "Ressource 4", }, ], pagination: { currentPage: 1, pagesize: 15, start: 0, end: 15, }, }; }, computed: { ...mapGetters(["project", "permissions"]), paginatedRessources() { return this.ressources.slice(this.pagination.start, this.pagination.end); }, nbPages() { let N = Math.ceil(this.ressources.length / this.pagination.pagesize); const arr = [...Array(N).keys()].map(function (x) { ++x; return x; }); return arr; }, displayedPageEnd() { return this.ressources.length <= this.pagination.end ? this.ressources.length : this.pagination.end; }, }, methods: { toPage(pageNumber) { const toAddOrRemove = (pageNumber - this.pagination.currentPage) * this.pagination.pagesize; this.pagination.start += toAddOrRemove; this.pagination.end += toAddOrRemove; this.pagination.currentPage = pageNumber; }, toPreviousPage() { if (this.pagination.start > 0) { this.pagination.start -= this.pagination.pagesize; this.pagination.end -= this.pagination.pagesize; this.pagination.currentPage -= 1; } }, toNextPage() { if (this.pagination.end < this.ressources.length) { this.pagination.start += this.pagination.pagesize; this.pagination.end += this.pagination.pagesize; this.pagination.currentPage += 1; } }, }, created() { this.$store.dispatch("GET_PROJECT_INFO", this.$route.params.slug); }, }; </script> <style scoped> .to-left { text-align: left; } h1 { margin: 0.5em 0; } .table { width: 100%; border: 1px solid #c0c0c0; margin: 2rem 0; } .table > .row { display: flex; } .table > .row:not(:last-child) { border-bottom: 1px solid #cacaca; } .table > .row > div { width: 100%; padding: 0.5rem; } .table > .header { background-color: #e0e0e0; } /* datatables */ .dataTables_length, .dataTables_filter, .dataTables_info, .dataTables_processing, .dataTables_paginate { color: #333; } .dataTables_info { clear: both; float: left; padding-top: 0.755em; } .dataTables_paginate { float: right; text-align: right; padding-top: 0.25em; } .dataTables_paginate .paginate_button.current, .dataTables_paginate .paginate_button.current:hover { color: #333 !important; border: 1px solid #979797; background-color: white; background: -webkit-gradient( linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc) ); background: -webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%); background: -moz-linear-gradient(top, #fff 0%, #dcdcdc 100%); background: -ms-linear-gradient(top, #fff 0%, #dcdcdc 100%); background: -o-linear-gradient(top, #fff 0%, #dcdcdc 100%); background: linear-gradient(to bottom, #fff 0%, #dcdcdc 100%); } .dataTables_paginate .paginate_button { box-sizing: border-box; display: inline-block; min-width: 1.5em; padding: 0.5em 1em; margin-left: 2px; text-align: center; text-decoration: none !important; cursor: pointer; color: #333 !important; border: 1px solid transparent; border-radius: 2px; } .dataTables_paginate .paginate_button:hover { color: white !important; border: 1px solid #111; background-color: #585858; background: -webkit-gradient( linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111) ); background: -webkit-linear-gradient(top, #585858 0%, #111 100%); background: -moz-linear-gradient(top, #585858 0%, #111 100%); background: -ms-linear-gradient(top, #585858 0%, #111 100%); background: -o-linear-gradient(top, #585858 0%, #111 100%); background: linear-gradient(to bottom, #585858 0%, #111 100%); } .dataTables_paginate .paginate_button.disabled, .dataTables_paginate .paginate_button.disabled:hover, .dataTables_paginate .paginate_button.disabled:active { cursor: default; color: #666 !important; border: 1px solid transparent; background: transparent; box-shadow: none; } </style>