yunohost-portal/pages/index.vue

77 lines
1.7 KiB
Vue
Raw Normal View History

2023-07-19 18:42:05 +02:00
<script setup lang="ts">
definePageMeta({
public: true,
})
const { t } = useI18n()
const isLoggedIn = await useIsLoggedIn()
const settings = await useSettings()
const appsData = await useApps()
2023-07-19 18:42:05 +02:00
useHead({
2023-11-11 15:07:40 +01:00
title: t('app_list'),
})
2023-11-23 16:01:49 +01:00
const intro = computed(() => {
const {
portal_user_intro: userIntro,
portal_public_intro: publicIntro,
public: isPublic,
} = settings.value
return isLoggedIn.value ? userIntro : isPublic ? publicIntro : null
})
const apps = Object.entries(appsData.value).map(([id, app]) => {
return {
...app,
url: '//' + app.url,
description: app.description[locale.value] || app.description.en
}
})
2023-07-19 18:42:05 +02:00
</script>
2023-07-12 04:52:58 +02:00
2023-07-19 18:42:05 +02:00
<template>
2023-08-06 16:27:24 +02:00
<div>
2023-11-23 16:01:49 +01:00
<CustomText v-if="intro" :content="intro" />
<section id="apps" class="my-16">
<PageTitle :text="t('app_list')" tag="h2" sr-only class="mb-4" />
<div v-if="!apps.length">
2023-07-26 01:25:42 +02:00
<em>{{ t('no_apps') }}</em>
2023-07-19 18:42:05 +02:00
</div>
<ul v-else class="grid md:grid-cols-2 xl:grid-cols-3 gap-4">
<li
v-for="app in apps"
:key="app.label"
class="flex flex-auto border rounded p-4 relative hover:bg-neutral hover:text-neutral-content hover:border-neutral"
>
<img
v-if="app.logo"
aria-hidden="true"
:src="app.logo"
class="w-24 h-24 rounded me-4 bg-white"
/>
<div>
<h4 class="text-xl font-bold">
<a :href="app.url" class="">{{ app.label }}</a>
</h4>
<div v-if="app.description" v-html="app.description" />
</div>
2023-07-19 18:42:05 +02:00
</li>
</ul>
2023-11-23 16:01:49 +01:00
</section>
2023-07-19 18:42:05 +02:00
</div>
2023-07-12 04:52:58 +02:00
</template>
2023-07-26 01:25:42 +02:00
2023-11-23 16:01:49 +01:00
<style scoped>
.grid li a::after {
content: '';
position: absolute;
top: 0px;
left: 0px;
right: 0px;
bottom: 0px;
2023-07-26 01:25:42 +02:00
}
</style>