From ccb63b0599f3c8c49e4e731236978da10c91ed34 Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Sun, 13 Apr 2025 14:21:20 +0200
Subject: [PATCH] Updated the filter to display unstarred subsets

Signed-off-by: Martin Weise <martin.weise@tuwien.ac.at>
---
 .../target/create-event-listener.jar          | Bin 10139 -> 10144 bytes
 .../components/database/DatabaseToolbar.vue   |   2 +-
 dbrepo-ui/components/subset/Builder.vue       |   2 +-
 dbrepo-ui/components/subset/SubsetList.vue    |  54 +++++++++++++++++-
 dbrepo-ui/components/table/TableSchema.vue    |   7 ++-
 dbrepo-ui/components/table/TableToolbar.vue   |   5 +-
 dbrepo-ui/composables/database-service.ts     |   2 +-
 .../[database_id]/table/[table_id]/import.vue |  13 +++--
 .../[database_id]/table/create/dataset.vue    |   3 +-
 helm/dbrepo/files/create-event-listener.jar   | Bin 10139 -> 10144 bytes
 10 files changed, 76 insertions(+), 12 deletions(-)

diff --git a/dbrepo-auth-service/listeners/target/create-event-listener.jar b/dbrepo-auth-service/listeners/target/create-event-listener.jar
index e6ee56c50203b9ba4e75d7964141c3c353ff933d..7e717c5aada04fa7e157ec8dd9f04333955cf816 100644
GIT binary patch
delta 1017
zcmbR3zrbHOz?+#xgn@yBgJDy4Z<Mq4`|`4h!ix32`HvL@_C|lIf56YMaqf+^`M%#a
z^j=y!rS8sggL?~ZSTt?i{PVl2-|MW!S=-qY668M1<ySCdXMH&mf3foN%}J_BV(!}Q
z4l90s3faUiabc77^0G9C<3@(|%G35{n#8}ht+!ghb-l~N%6*v`mqy5=^KDW(GuO$;
zS@GGv-QjL7QQvy~M5nc^cf9)AcQGfgojz9`Hur{@>2FRE_wR2P9u(94JO4e`FY$#D
zH531<JwII*yh--r!RbMA{qBib`YY_EwlGa$m~`wKpUuv=!1otUciTw1AADh>lP!_(
z=y&5(Mr+x+5|xPGFMjT1R&5S@{<-i!_pJ|idN=-^UugfZSg`6u{pOba$@4=_htJ)*
zBI8W;)oJ^Ad!0`iy#M93V%^kgo0ZF&|B7@>n3DB}Tc&-1rOh1kW5Q7-(+@?<oM{bP
zZXBD^z2wBJEjt=Z=B=9j#B6=hREJq2TI<uVCQW<z^j>$i-Q3^P**y6Iw;gmYnIGk*
z=y+lGw1gCyy^Ns9;9_9lU|<2o#^eo*D$E<RdnaFK)Meh3-8-3`Ne)bFFsXv+046Ok
zUCU$wrnfM8fz>lIp9RwwnY%&an{#>RFo7BIEZm%629H3EAc!%!TX7bc)=-+v2~Pl%
zk0@D!L?<arGp?8{qb#AYF}pX40SO4f*#Zo29nUjPe!wg;IYXHz2V@3Zj)8%J8O{MI
z{Lje1kXWK0;LXS+!VLB($e$=CbD?NZU;=9>DJ{=T%|q8W`GK-DqsQbw%8*czRgq>a
zo!p=zqm9peeH8Q8Om0xI1BcZ?6=|lQOp^tewI*|@@_;?;^P6Rr9s>h|4g&*&6I>eu
z!;;36%#$B5yG*W7<pBlL<kPCsOyMk(Yj{m2%c$`vfWm<LpWvTc91INW1Q-~^Q1pId
zo1DiYF?kPEueO>r6N|v)8ea9u`DzA?3nwp7a|N5Qd)<R1kgXtWi(*2v;^c*DrjySr
kazTBH$iKoKA?K1A7#KD(Ffa(CXi}J*udc?nMF}Jb03ZNb5dZ)H

delta 955
zcmZ4BKigkAz?+#xgn@yBgP}9KJIXUk-K>z2f#D1j1B1xq`%2>Vy+H?q4jBmSEnoJ3
zg1iS)6Kj>QjRvz7^P}3?IjYXHjZSVmabLP?+Qh;u&Xat<rQSb%Tj$^`8QYKHCHF$i
zQfn`EFP`bFaHXco=cbU<mN(~CuFbr#u~A~4z~x&av(A6*TmOB<p{;>3bCo7bvx;ba
z6nAD_=9A9%U9^4HwmXZndk)oSryQ@nJZ+y}RP4?vXO~a?u4BDPH0v9Kh<pFjeFube
z|DG*p{p+TYSAXLF<l@ayOLDxod|x@G{jlSVJKU@I+14_sHZ0k=li7b=ScvtPPdfg`
z0u8J<Ps>QX`0>urIAQnU^?fYa^KI=*6;cCUrQCQoe*w?=Sc&NU+kf-T@3`P>_oDu@
z|C^|(HDQt6UAOjxr~XP?Asf_I8J+GFy7bP&KvB^*yBu1UguIP^aD(OS!-sne=3Q81
zEgqMcd~S<Z^1aIwG^VN>_)H3vKhA9X&M|*Z>PeQ+b?(iaedoTLt=nPoeKwmXU*NQZ
z&L!fyYbPkY2=+EG>a$}2MF|%J0|x^`XEtN^<gJV<%pKX?lkYI<f@vNmIWVouq{`fx
z-90&!NefIjF`0nrolIU}c{b*=VEP(!H;CTM%+AdTW~8vpVFEJ*1!@GrS|%vY0@J!m
zlR4qZVDd>NOL-8F0SR!z*#Zo29T!hlRF(i4HQ7d4n(@@+2xUbuuSQu~>=z>gLt=@3
zfHxzP2s6YxAYZIimbR2;0!x*YmS?8sp{PK&jvvK3=gEvJati2bBvI59FioDwBs)1q
zg$wMXOciOS<sc#H$-5NAbRe#Qr1y^O?x;WW+MK!=7#Kb<FfeGq&0%0z()fjGvM96G
zWL{Msu#aR^r5TS*wonZO^WLaRGX=3s=2U~kOpmHGQv&Z~1p)QR7gQy|Dh$-5nf~)n
zRuIsgT&1SPG)H#wL?)0Eq$b~1;|II!t(r7bog!3NWwNI_4>+)eJwnbUGcYi0WME(r
RMsbn!<Pvo?w)ILNK>%1wN0|Ts

diff --git a/dbrepo-ui/components/database/DatabaseToolbar.vue b/dbrepo-ui/components/database/DatabaseToolbar.vue
index 09d40abf8e..028cf4c3e9 100644
--- a/dbrepo-ui/components/database/DatabaseToolbar.vue
+++ b/dbrepo-ui/components/database/DatabaseToolbar.vue
@@ -66,7 +66,7 @@
             :text="$t('toolbars.database.views.tab')"
             :to="`/database/${$route.params.database_id}/view`" />
           <v-tab
-            v-if="database && database.is_public"
+            v-if="hasReadAccess"
             :text="$t('toolbars.database.subsets.tab')"
             :to="`/database/${$route.params.database_id}/subset`" />
           <v-tab
diff --git a/dbrepo-ui/components/subset/Builder.vue b/dbrepo-ui/components/subset/Builder.vue
index 4e4fe21eec..24e91eec87 100644
--- a/dbrepo-ui/components/subset/Builder.vue
+++ b/dbrepo-ui/components/subset/Builder.vue
@@ -590,7 +590,7 @@ export default {
         return
       }
       const tid = this.$route.query.tid
-      const selection = this.tables.filter(t => t.id === tid)
+      const selection = this.datasources.filter(t => t.id === tid)
       if (selection.length === 0) {
         console.warn('Failed to find table with id', tid)
         return
diff --git a/dbrepo-ui/components/subset/SubsetList.vue b/dbrepo-ui/components/subset/SubsetList.vue
index df0948372e..8c5efe1022 100644
--- a/dbrepo-ui/components/subset/SubsetList.vue
+++ b/dbrepo-ui/components/subset/SubsetList.vue
@@ -1,5 +1,17 @@
 <template>
   <div>
+    <v-toolbar
+      class="pr-2"
+      color="secondary"
+      flat>
+      <v-spacer />
+      <v-btn
+        :variant="buttonVariant"
+        :prepend-icon="filterIcon"
+        @click="switchFilter">
+        {{ filterText }}
+      </v-btn>
+    </v-toolbar>
     <v-card
       v-if="!loadingSubsets && subsets.length === 0"
       variant="flat"
@@ -14,6 +26,7 @@
         <Loading />
       </v-list-item>
       <div
+        v-if="!loadingSubsets"
         v-for="(subset, i) in subsets"
         :key="`q-${i}`">
         <v-divider v-if="i !== 0" class="mx-4" />
@@ -45,6 +58,7 @@ export default {
       loadingSubsets: false,
       loadingIdentifiers: false,
       subsets: [],
+      filter: null,
       cacheStore: useCacheStore()
     }
   },
@@ -58,8 +72,35 @@ export default {
     isDarkTheme () {
       return this.$vuetify.theme.global.name.toLowerCase().startsWith('dark')
     },
+    buttonVariant () {
+      const runtimeConfig = useRuntimeConfig()
+      return this.$vuetify.theme.global.name.toLowerCase().endsWith('contrast') ? runtimeConfig.public.variant.button.contrast : runtimeConfig.public.variant.button.normal
+    },
     colorVariant () {
       return this.isContrastTheme ? '' : (this.isDarkTheme ? 'tertiary' : 'secondary')
+    },
+    filterIcon () {
+      if (this.filter === true) {
+        return 'mdi-star'
+      }
+      if (this.filter === false) {
+        return 'mdi-star-off'
+      }
+      return 'mdi-star-outline'
+    },
+    filterText () {
+      if (this.filter === true) {
+        return 'Starred'
+      }
+      if (this.filter === false) {
+        return 'Not Starred'
+      }
+      return 'All'
+    }
+  },
+  watch: {
+    filter () {
+      this.loadQueries()
     }
   },
   mounted () {
@@ -69,7 +110,7 @@ export default {
     loadQueries () {
       this.loadingSubsets = true
       const queryService = useQueryService()
-      queryService.findAll(this.$route.params.database_id, true)
+      queryService.findAll(this.$route.params.database_id, this.filter)
         .then((subsets) => {
           this.loadingSubsets = false
           this.subsets = subsets.map(subset => {
@@ -87,6 +128,17 @@ export default {
           toast.error(this.$t(code))
         })
     },
+    switchFilter () {
+      if (this.filter === true) {
+        this.filter = false
+        return
+      }
+      if (this.filter === false) {
+        this.filter = null
+        return
+      }
+      this.filter = true
+    },
     title (subset) {
       if (subset.identifiers.length === 0) {
         return subset.query
diff --git a/dbrepo-ui/components/table/TableSchema.vue b/dbrepo-ui/components/table/TableSchema.vue
index 62d88647e4..d6b9c13885 100644
--- a/dbrepo-ui/components/table/TableSchema.vue
+++ b/dbrepo-ui/components/table/TableSchema.vue
@@ -169,6 +169,7 @@
         </v-col>
       </v-row>
       <v-row
+        v-if="columns.length !== 0"
         dense>
         <v-col>
           <v-btn
@@ -181,7 +182,8 @@
             @click="addColumn()" />
         </v-col>
       </v-row>
-      <v-row>
+      <v-row
+        v-if="columns.length !== 0">
         <v-col>
           <v-btn
             color="secondary"
@@ -250,6 +252,9 @@ export default {
       return this.$vuetify.theme.global.name.toLowerCase().endsWith('contrast') ? runtimeConfig.public.variant.button.contrast : runtimeConfig.public.variant.button.normal
     },
     showPrimaryKeyWarning () {
+      if (this.columns.length === 0) {
+        return false
+      }
       return this.columns.filter(c => c.primary_key).length === 0
     }
   },
diff --git a/dbrepo-ui/components/table/TableToolbar.vue b/dbrepo-ui/components/table/TableToolbar.vue
index 72d20ebdc2..70c2165b30 100644
--- a/dbrepo-ui/components/table/TableToolbar.vue
+++ b/dbrepo-ui/components/table/TableToolbar.vue
@@ -117,11 +117,14 @@ export default {
       return this.roles.includes('update-table') && this.table.owner.id === this.cacheUser.uid
     },
     isOwner () {
+      if (!this.cacheUser || !this.database) {
+        return false
+      }
       const databaseService = useDatabaseService()
       return databaseService.isOwner(this.database, this.cacheUser)
     },
     canCreateView () {
-      if (!this.roles || !this.cacheUser || !this.isOwner) {
+      if (!this.roles || !this.isOwner) {
         return false
       }
       return this.roles.includes('create-database-view')
diff --git a/dbrepo-ui/composables/database-service.ts b/dbrepo-ui/composables/database-service.ts
index 204f99dd35..77c958fc92 100644
--- a/dbrepo-ui/composables/database-service.ts
+++ b/dbrepo-ui/composables/database-service.ts
@@ -214,7 +214,7 @@ export const useDatabaseService = (): any => {
     if (!database || !user) {
       return false
     }
-    return database.owner.id === user.id
+    return database.owner.id === user.uid
   }
 
   return {
diff --git a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/import.vue b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/import.vue
index efbcd6accf..260f2113d1 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/import.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/import.vue
@@ -1,7 +1,8 @@
 <template>
-  <div
-    v-if="canInsertTableData">
-    <v-toolbar flat>
+  <div>
+    <v-toolbar
+      v-if="hasReadAccess"
+      flat>
       <v-btn
         class="mr-2"
         variant="plain"
@@ -12,6 +13,7 @@
         :text="title" />
     </v-toolbar>
     <v-card
+      v-if="canInsertTableData"
       variant="flat"
       rounded="0">
       <v-card-text>
@@ -84,6 +86,9 @@ export default {
     access () {
       return this.cacheStore.getAccess
     },
+    hasReadAccess () {
+      return this.access
+    },
     title () {
       if (!this.table) {
         return this.$t('pages.table.import.title')
@@ -91,7 +96,7 @@ export default {
       return this.$t('pages.table.import.title') + ' ' + this.table.name
     },
     canInsertTableData () {
-      if (!this.table || !this.access || !this.cacheUser || !this.roles || !this.roles.includes('insert-table-data')) {
+      if (!this.table || !this.cacheUser || !this.roles || !this.roles.includes('insert-table-data') || !this.hasReadAccess) {
         return false
       }
       const userService = useUserService()
diff --git a/dbrepo-ui/pages/database/[database_id]/table/create/dataset.vue b/dbrepo-ui/pages/database/[database_id]/table/create/dataset.vue
index 56db5fdc37..088190ac5a 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/create/dataset.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/create/dataset.vue
@@ -155,8 +155,7 @@
             </v-stepper-header>
             <v-stepper-window
               direction="vertical">
-              <v-container
-                v-if="step >= 4">
+              <v-container>
                 <TableSchema
                   ref="schema"
                   :back="false"
diff --git a/helm/dbrepo/files/create-event-listener.jar b/helm/dbrepo/files/create-event-listener.jar
index e6ee56c50203b9ba4e75d7964141c3c353ff933d..7e717c5aada04fa7e157ec8dd9f04333955cf816 100644
GIT binary patch
delta 1017
zcmbR3zrbHOz?+#xgn@yBgJDy4Z<Mq4`|`4h!ix32`HvL@_C|lIf56YMaqf+^`M%#a
z^j=y!rS8sggL?~ZSTt?i{PVl2-|MW!S=-qY668M1<ySCdXMH&mf3foN%}J_BV(!}Q
z4l90s3faUiabc77^0G9C<3@(|%G35{n#8}ht+!ghb-l~N%6*v`mqy5=^KDW(GuO$;
zS@GGv-QjL7QQvy~M5nc^cf9)AcQGfgojz9`Hur{@>2FRE_wR2P9u(94JO4e`FY$#D
zH531<JwII*yh--r!RbMA{qBib`YY_EwlGa$m~`wKpUuv=!1otUciTw1AADh>lP!_(
z=y&5(Mr+x+5|xPGFMjT1R&5S@{<-i!_pJ|idN=-^UugfZSg`6u{pOba$@4=_htJ)*
zBI8W;)oJ^Ad!0`iy#M93V%^kgo0ZF&|B7@>n3DB}Tc&-1rOh1kW5Q7-(+@?<oM{bP
zZXBD^z2wBJEjt=Z=B=9j#B6=hREJq2TI<uVCQW<z^j>$i-Q3^P**y6Iw;gmYnIGk*
z=y+lGw1gCyy^Ns9;9_9lU|<2o#^eo*D$E<RdnaFK)Meh3-8-3`Ne)bFFsXv+046Ok
zUCU$wrnfM8fz>lIp9RwwnY%&an{#>RFo7BIEZm%629H3EAc!%!TX7bc)=-+v2~Pl%
zk0@D!L?<arGp?8{qb#AYF}pX40SO4f*#Zo29nUjPe!wg;IYXHz2V@3Zj)8%J8O{MI
z{Lje1kXWK0;LXS+!VLB($e$=CbD?NZU;=9>DJ{=T%|q8W`GK-DqsQbw%8*czRgq>a
zo!p=zqm9peeH8Q8Om0xI1BcZ?6=|lQOp^tewI*|@@_;?;^P6Rr9s>h|4g&*&6I>eu
z!;;36%#$B5yG*W7<pBlL<kPCsOyMk(Yj{m2%c$`vfWm<LpWvTc91INW1Q-~^Q1pId
zo1DiYF?kPEueO>r6N|v)8ea9u`DzA?3nwp7a|N5Qd)<R1kgXtWi(*2v;^c*DrjySr
kazTBH$iKoKA?K1A7#KD(Ffa(CXi}J*udc?nMF}Jb03ZNb5dZ)H

delta 955
zcmZ4BKigkAz?+#xgn@yBgP}9KJIXUk-K>z2f#D1j1B1xq`%2>Vy+H?q4jBmSEnoJ3
zg1iS)6Kj>QjRvz7^P}3?IjYXHjZSVmabLP?+Qh;u&Xat<rQSb%Tj$^`8QYKHCHF$i
zQfn`EFP`bFaHXco=cbU<mN(~CuFbr#u~A~4z~x&av(A6*TmOB<p{;>3bCo7bvx;ba
z6nAD_=9A9%U9^4HwmXZndk)oSryQ@nJZ+y}RP4?vXO~a?u4BDPH0v9Kh<pFjeFube
z|DG*p{p+TYSAXLF<l@ayOLDxod|x@G{jlSVJKU@I+14_sHZ0k=li7b=ScvtPPdfg`
z0u8J<Ps>QX`0>urIAQnU^?fYa^KI=*6;cCUrQCQoe*w?=Sc&NU+kf-T@3`P>_oDu@
z|C^|(HDQt6UAOjxr~XP?Asf_I8J+GFy7bP&KvB^*yBu1UguIP^aD(OS!-sne=3Q81
zEgqMcd~S<Z^1aIwG^VN>_)H3vKhA9X&M|*Z>PeQ+b?(iaedoTLt=nPoeKwmXU*NQZ
z&L!fyYbPkY2=+EG>a$}2MF|%J0|x^`XEtN^<gJV<%pKX?lkYI<f@vNmIWVouq{`fx
z-90&!NefIjF`0nrolIU}c{b*=VEP(!H;CTM%+AdTW~8vpVFEJ*1!@GrS|%vY0@J!m
zlR4qZVDd>NOL-8F0SR!z*#Zo29T!hlRF(i4HQ7d4n(@@+2xUbuuSQu~>=z>gLt=@3
zfHxzP2s6YxAYZIimbR2;0!x*YmS?8sp{PK&jvvK3=gEvJati2bBvI59FioDwBs)1q
zg$wMXOciOS<sc#H$-5NAbRe#Qr1y^O?x;WW+MK!=7#Kb<FfeGq&0%0z()fjGvM96G
zWL{Msu#aR^r5TS*wonZO^WLaRGX=3s=2U~kOpmHGQv&Z~1p)QR7gQy|Dh$-5nf~)n
zRuIsgT&1SPG)H#wL?)0Eq$b~1;|II!t(r7bog!3NWwNI_4>+)eJwnbUGcYi0WME(r
RMsbn!<Pvo?w)ILNK>%1wN0|Ts

-- 
GitLab