diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java index 19b7eae6c93f2c47fe987cbe3ca455da11a010d1..79f0b0acc5a0571d3957e2950456a83fa737243a 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java @@ -33,7 +33,7 @@ import java.util.UUID; @UniqueConstraint(columnNames = {"cid", "internalName"}) }) @NamedQueries({ - @NamedQuery(name = "Database.findAll", query = "select d from Database d order by d.created desc"), + @NamedQuery(name = "Database.findAllDesc", query = "select d from Database d order by d.created desc"), @NamedQuery(name = "Database.findByInternalName", query = "select d from Database d where d.internalName = ?1"), @NamedQuery(name = "Database.findAllOnlyIds", query = "select d.id from Database d order by d.created desc"), @NamedQuery(name = "Database.findReadAccess", query = "select distinct d from Database d join DatabaseAccess a on a.hdbid = d.id and a.huserid = ?1"), diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java index b9123993280c00c79b72e80ff57c88441afbef38..fe17cbc8b29ee40cf7297882f7763acbf337b9d1 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java @@ -11,6 +11,8 @@ import java.util.UUID; @Repository public interface DatabaseRepository extends JpaRepository<Database, Long> { + List<Database> findAllDesc(); + List<Database> findReadAccess(UUID id); List<Database> findWriteAccess(UUID id); diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java index a905152e61fe21784307f1aeaee5e36852fff8e9..3353721f47f894c729e1a96e591fc9f42cedb300 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java @@ -76,7 +76,7 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe @Override public List<Database> findAll() { - return databaseRepository.findAll(); + return databaseRepository.findAllDesc(); } @Override diff --git a/dbrepo-ui/components/database/DatabaseCard.vue b/dbrepo-ui/components/database/DatabaseCard.vue index 7dbb6401b4dd55eefacbc71716a18268c6873494..ea3089fabdcbf3d9d21652cd977a743a374f9a3f 100644 --- a/dbrepo-ui/components/database/DatabaseCard.vue +++ b/dbrepo-ui/components/database/DatabaseCard.vue @@ -24,6 +24,7 @@ v-if="!database.is_public" size="small" :color="colorVariant" + variant="outlined" :text="$t('toolbars.database.private')" flat /> <v-chip @@ -76,7 +77,13 @@ export default { }, computed: { colorVariant () { - return this.$vuetify.theme.global.name.toLowerCase().endsWith('contrast') ? '' : 'secondary' + return this.isContrastTheme ? '' : (this.isDarkTheme ? 'tertiary' : 'secondary') + }, + isContrastTheme () { + return this.$vuetify.theme.global.name.toLowerCase().endsWith('contrast') + }, + isDarkTheme () { + return this.$vuetify.theme.global.name.toLowerCase().startsWith('dark') } }, methods: { diff --git a/dbrepo-ui/components/database/DatabaseList.vue b/dbrepo-ui/components/database/DatabaseList.vue index c836c2be797b38a619e5acbec607259d60b8062f..baefecad2071d7db23c4d69299d8741ee77ce26d 100644 --- a/dbrepo-ui/components/database/DatabaseList.vue +++ b/dbrepo-ui/components/database/DatabaseList.vue @@ -2,7 +2,7 @@ <div> <div v-if="loading" - v-for="(idx) in [1,2,3]" + v-for="(idx) in [1,2,3,4,5]" :key="`d-${idx}`"> <DatabaseSkeleton /> </div> diff --git a/dbrepo-ui/components/database/DatabaseSkeleton.vue b/dbrepo-ui/components/database/DatabaseSkeleton.vue index 2e691fa98ae003a15c20b3e3adc7202ce25aa27a..2a918c05c337c0ba5c974a734de497092cbe5269 100644 --- a/dbrepo-ui/components/database/DatabaseSkeleton.vue +++ b/dbrepo-ui/components/database/DatabaseSkeleton.vue @@ -1,16 +1,14 @@ <template> - <v-card variant="flat"> + <v-card + variant="flat" + rounded="0"> <v-divider class="mx-4" /> - <v-card-subtitle class="db-subtitle"> - <v-skeleton-loader type="text" :style="randomWidth(100,300)" /> - <v-skeleton-loader type="text" class="pt-2" :style="randomWidth(100,200)" /> - </v-card-subtitle> - <v-card-text class="db-description"> - <v-skeleton-loader type="chip" /> - <v-skeleton-loader type="text" class="pt-4" :style="randomWidth(800,1000)" /> - <v-skeleton-loader type="text" :style="randomWidth(800,1000)" /> - <v-skeleton-loader type="text" :style="randomWidth(600,1000)" /> - </v-card-text> + <v-skeleton-loader + type="subtitle" + :style="randomWidth(300,500)" /> + <v-skeleton-loader + type="list-item-two-line" + :style="randomWidth(500,800)" /> </v-card> </template> diff --git a/dbrepo-ui/components/database/DatabaseToolbar.vue b/dbrepo-ui/components/database/DatabaseToolbar.vue index b48aaa93d5519db007bf1c61203d4db35227095b..a4897c120b0f32f8257727220f8c8da39eea8f39 100644 --- a/dbrepo-ui/components/database/DatabaseToolbar.vue +++ b/dbrepo-ui/components/database/DatabaseToolbar.vue @@ -1,15 +1,20 @@ <template> - <div v-if="database"> - <v-toolbar flat> + <div> + <v-toolbar + flat> <v-toolbar-title> - <span v-if="$vuetify.display.lgAndUp" v-text="database.name" /> - <v-tooltip bottom> + <span + v-if="database && $vuetify.display.lgAndUp" + v-text="database.name" /> + <v-tooltip + v-if="database" + bottom> <template v-slot:activator="{ props }"> <v-icon class="ml-2" size="small" right - :color="database.is_public ? 'success' : null" + :color="database.is_public ? 'success' : 'chip'" v-bind="props"> {{ database.is_public ? 'mdi-lock-open-outline' : 'mdi-lock-outline' }} </v-icon> diff --git a/dbrepo-ui/composables/identifier-service.ts b/dbrepo-ui/composables/identifier-service.ts index 268dc8d3f74bd1ed9cb78f24a3edf768fba43236..de406ef7b698c3998c12ade1f3c44bf5e44c1b78 100644 --- a/dbrepo-ui/composables/identifier-service.ts +++ b/dbrepo-ui/composables/identifier-service.ts @@ -167,12 +167,15 @@ export const useIdentifierService = (): any => { } const filtered = data.descriptions.filter(d => d.language && d.language === 'en') if (filtered.length === 0) { - return data.descriptions[0].description + return data.descriptions[0]?.description } return filtered[0].description } - function descriptionShort(description: string): string { + function descriptionShort(description: string): string | null { + if (!description) { + return null + } const targetLength = 280 const lengthMax = 300 if (description.length <= lengthMax) { diff --git a/dbrepo-ui/pages/database/[database_id]/info.vue b/dbrepo-ui/pages/database/[database_id]/info.vue index cb3de72ff9d948de0485cb2884d4af68662b7c62..eb1b6f544b784bcafeea731cc922687dbb1906c4 100644 --- a/dbrepo-ui/pages/database/[database_id]/info.vue +++ b/dbrepo-ui/pages/database/[database_id]/info.vue @@ -2,7 +2,6 @@ <div> <DatabaseToolbar /> <v-window - v-if="database" v-model="tab"> <v-window-item value="1"> <Summary @@ -18,12 +17,14 @@ :identifier="identifier" /> </v-card-text> </v-card> - <v-divider v-if="hasIdentifier" /> + <v-divider + v-if="hasIdentifier" /> <v-card :title="$t('pages.database.title')" variant="flat" rounded="0"> - <v-card-text> + <v-card-text + v-if="database"> <v-list lines="two" dense> @@ -114,7 +115,8 @@ :title="$t('pages.container.title')" variant="flat" rounded="0"> - <v-card-text> + <v-card-text + v-if="database"> <v-list dense> <v-list-item :title="$t('pages.container.name.title')" diff --git a/dbrepo-ui/pages/index.vue b/dbrepo-ui/pages/index.vue index 3b410c1b738ba933b90c746ae25fb0d8151ed57c..5b4ee9cc9d9c8c0952b0cda6323840ea1f1aadc1 100644 --- a/dbrepo-ui/pages/index.vue +++ b/dbrepo-ui/pages/index.vue @@ -38,7 +38,7 @@ export default { }, data () { return { - loading: false, + loading: true, dialog: null, databases: [], userStore: useUserStore() @@ -56,10 +56,12 @@ export default { } }, mounted () { + this.loading = true const databaseService = useDatabaseService(); databaseService.findAll() .then((databases) => { this.databases = databases + this.loading = false }) }, methods: {