From 65aebb71e2c86daeb842ea245934288d1492fc71 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= <gp5761@partner.kit.edu>
Date: Mon, 11 Nov 2024 13:22:34 +0100
Subject: [PATCH] Use PaginatorTable for BldgList

---
 src/components/PaginatorTable.vue |  8 +++++++-
 src/components/nd/BldgList.vue    | 21 ++++++++-------------
 2 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/src/components/PaginatorTable.vue b/src/components/PaginatorTable.vue
index c1d1dcd16..ca3f5e0c4 100644
--- a/src/components/PaginatorTable.vue
+++ b/src/components/PaginatorTable.vue
@@ -9,7 +9,7 @@
     <div class="pagination_container">
       <slot name="content_skeleton_item" v-if="!items || items.length === 0"></slot>
       <b-table :filter="filterValue" :items="items" v-bind="$attrs" :current-page="current_page"
-               @filtered="onFiltered" :busy="isBusy"
+               @filtered="onFiltered" :busy="isBusy" :sort-by="sortBy"
                :per-page="items_per_page">
         <template v-for="(_, slot) of $scopedSlots" v-slot:[slot]="scope">
           <slot :name="slot" v-bind="scope"/>
@@ -122,6 +122,12 @@ export default {
       default() {
         return false
       }
+    },
+    sortBy: {
+      type: String,
+      default() {
+        return null
+      }
     }
   },
   watch: {
diff --git a/src/components/nd/BldgList.vue b/src/components/nd/BldgList.vue
index 5f9b7a3f9..01df77cdc 100644
--- a/src/components/nd/BldgList.vue
+++ b/src/components/nd/BldgList.vue
@@ -1,34 +1,30 @@
 <template>
   <div>
-    <FilterInput v-model="filter"></FilterInput>
-    <b-pagination v-if="bldgs && bldgs.length > per_page && filter === ''" :total-rows="bldgs.length"
-                  :per-page="per_page" v-model="current_page" align="center"></b-pagination>
     <b-card no-body class="shadow">
-      <b-table responsive :filter="filter" :per-page="filter === '' ? per_page : null"
-               :current-page="filter === '' ? current_page : null" :fields="site_list_fields" :busy="bldgs === null"
-               :items="bldgs" :sort-by="sort_by || default_sort_by">
+      <PaginatorTable responsive :fields="site_list_fields" :is-busy="bldgs === null" :hide-filter="bldgs.length < 10"
+                      :hide-top-pagination="bldgs.length < 25" :sort-by="sort_by || default_sort_by"
+                      :items="bldgs" >
         <template v-slot:cell(name)="data">
           <b-link class="nowrap" :to="'/netdoc/sites/'+data.item.site_fq_name+'/'+data.item.number"><b>{{ data.value }}</b></b-link>
         </template>
         <template v-slot:cell(number)="data">
           <b-link class="nowrap" :to="'/netdoc/sites/'+data.item.site_fq_name+'/'+data.item.number"><b>{{ data.value }}</b></b-link>
         </template>
-      </b-table>
+      </PaginatorTable>
       <div v-if="bldgs && bldgs.length === 0" class="font-italic text-center mb-3">
         {{ $t('components.bcd_list.no_bldgs_available') }}
       </div>
-      <b-pagination v-if="bldgs && bldgs.length > per_page && filter === ''" :total-rows="bldgs.length"
-                    :per-page="per_page" v-model="current_page" align="center"></b-pagination>
     </b-card>
   </div>
 </template>
 
 <script>
-import FilterInput from '@/components/FilterInput'
+
+import PaginatorTable from '@/components/PaginatorTable.vue'
 
 export default {
   name: 'BldgList',
-  components: { FilterInput },
+  components: { PaginatorTable },
   watch: {
     filter: {
       immediate: true,
@@ -52,7 +48,7 @@ export default {
   },
   computed: {
     site_list_fields() {
-      const result = [
+      return [
         {
           label: this.$t('views.nd.bldg.number'),
           key: 'number',
@@ -74,7 +70,6 @@ export default {
           sortable: true
         },
       ]
-      return result
     }
   },
   props: {
-- 
GitLab