Merge branch 'code/cleanup' into dev
This commit is contained in:
@@ -87,123 +87,123 @@
|
|||||||
|
|
||||||
/* Colors */
|
/* Colors */
|
||||||
.event-red:not(.is-hidden) {
|
.event-red:not(.is-hidden) {
|
||||||
@apply text-slate-900 bg-red-500 hover:bg-red-600
|
@apply text-slate-900 bg-red-500 hover:bg-red-600 focus-visible:bg-red-600
|
||||||
}
|
}
|
||||||
.event-orange:not(.is-hidden) {
|
.event-orange:not(.is-hidden) {
|
||||||
@apply text-slate-900 bg-orange-500 hover:bg-orange-600
|
@apply text-slate-900 bg-orange-500 hover:bg-orange-600 focus-visible:bg-orange-600
|
||||||
}
|
}
|
||||||
.event-amber:not(.is-hidden) {
|
.event-amber:not(.is-hidden) {
|
||||||
@apply text-slate-900 bg-amber-500 hover:bg-amber-600
|
@apply text-slate-900 bg-amber-500 hover:bg-amber-600 focus-visible:bg-amber-600
|
||||||
}
|
}
|
||||||
.event-yellow:not(.is-hidden) {
|
.event-yellow:not(.is-hidden) {
|
||||||
@apply text-slate-900 bg-yellow-600 hover:bg-yellow-700
|
@apply text-slate-900 bg-yellow-600 hover:bg-yellow-700 focus-visible:bg-yellow-700
|
||||||
}
|
}
|
||||||
.event-lime:not(.is-hidden) {
|
.event-lime:not(.is-hidden) {
|
||||||
@apply text-slate-900 bg-lime-500 hover:bg-lime-600
|
@apply text-slate-900 bg-lime-500 hover:bg-lime-600 focus-visible:bg-lime-600
|
||||||
}
|
}
|
||||||
.event-green:not(.is-hidden) {
|
.event-green:not(.is-hidden) {
|
||||||
@apply text-white bg-green-600 hover:bg-green-700
|
@apply text-white bg-green-600 hover:bg-green-700 focus-visible:bg-green-700
|
||||||
}
|
}
|
||||||
.event-emerald:not(.is-hidden) {
|
.event-emerald:not(.is-hidden) {
|
||||||
@apply text-white bg-emerald-600 hover:bg-emerald-700
|
@apply text-white bg-emerald-600 hover:bg-emerald-700 focus-visible:bg-emerald-700
|
||||||
}
|
}
|
||||||
.event-teal:not(.is-hidden) {
|
.event-teal:not(.is-hidden) {
|
||||||
@apply text-white bg-teal-600 hover:bg-teal-700
|
@apply text-white bg-teal-600 hover:bg-teal-700 focus-visible:bg-teal-700
|
||||||
}
|
}
|
||||||
.event-cyan:not(.is-hidden) {
|
.event-cyan:not(.is-hidden) {
|
||||||
@apply text-white bg-cyan-600 hover:bg-cyan-700
|
@apply text-white bg-cyan-600 hover:bg-cyan-700 focus-visible:bg-cyan-700
|
||||||
}
|
}
|
||||||
.event-sky:not(.is-hidden) {
|
.event-sky:not(.is-hidden) {
|
||||||
@apply text-white bg-sky-600 hover:bg-sky-700
|
@apply text-white bg-sky-600 hover:bg-sky-700 focus-visible:bg-sky-700
|
||||||
}
|
}
|
||||||
.event-blue:not(.is-hidden) {
|
.event-blue:not(.is-hidden) {
|
||||||
@apply text-white bg-blue-600 hover:bg-blue-700
|
@apply text-white bg-blue-600 hover:bg-blue-700 focus-visible:bg-blue-700
|
||||||
}
|
}
|
||||||
.event-indigo:not(.is-hidden) {
|
.event-indigo:not(.is-hidden) {
|
||||||
@apply text-white bg-indigo-600 hover:bg-indigo-700
|
@apply text-white bg-indigo-600 hover:bg-indigo-700 focus-visible:bg-indigo-700
|
||||||
}
|
}
|
||||||
.event-violet:not(.is-hidden) {
|
.event-violet:not(.is-hidden) {
|
||||||
@apply text-white bg-violet-600 hover:bg-violet-700
|
@apply text-white bg-violet-600 hover:bg-violet-700 focus-visible:bg-violet-700
|
||||||
}
|
}
|
||||||
.event-purple:not(.is-hidden) {
|
.event-purple:not(.is-hidden) {
|
||||||
@apply text-white bg-purple-600 hover:bg-purple-700
|
@apply text-white bg-purple-600 hover:bg-purple-700 focus-visible:bg-purple-700
|
||||||
}
|
}
|
||||||
.event-fuchsia:not(.is-hidden) {
|
.event-fuchsia:not(.is-hidden) {
|
||||||
@apply text-white bg-fuchsia-600 hover:bg-fuchsia-700
|
@apply text-white bg-fuchsia-600 hover:bg-fuchsia-700 focus-visible:bg-fuchsia-700
|
||||||
}
|
}
|
||||||
.event-pink:not(.is-hidden) {
|
.event-pink:not(.is-hidden) {
|
||||||
@apply text-white bg-pink-700 hover:bg-pink-800
|
@apply text-white bg-pink-700 hover:bg-pink-800 focus-visible:bg-pink-800
|
||||||
}
|
}
|
||||||
.event-rose:not(.is-hidden) {
|
.event-rose:not(.is-hidden) {
|
||||||
@apply text-white bg-rose-700 hover:bg-rose-800
|
@apply text-white bg-rose-700 hover:bg-rose-800 focus-visible:bg-rose-800
|
||||||
}
|
}
|
||||||
.event-black:not(.is-hidden) {
|
.event-black:not(.is-hidden) {
|
||||||
@apply text-white bg-stone-500 hover:bg-stone-700
|
@apply text-white bg-stone-500 hover:bg-stone-700 focus-visible:bg-stone-700
|
||||||
}
|
}
|
||||||
.event-white:not(.is-hidden) {
|
.event-white:not(.is-hidden) {
|
||||||
@apply text-slate-900 bg-white hover:bg-yellow-200 border-[1px] border-slate-300
|
@apply text-slate-900 bg-white hover:bg-yellow-200 focus-visible:bg-yellow-200 border-[1px] border-slate-300
|
||||||
}
|
}
|
||||||
|
|
||||||
.event.is-hidden {
|
.event.is-hidden {
|
||||||
border: 1px solid transparent;
|
border: 1px dashed transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.event-red.is-hidden {
|
.event-red.is-hidden {
|
||||||
@apply text-red-500 hover:text-white dark:hover:text-slate-900 border-red-500 hover:bg-red-600 dark:text-white
|
@apply text-red-600 border-red-600 hover:bg-red-100 focus-visible:bg-red-100 dark:text-white dark:hover:bg-red-950 dark:focus-visible:bg-red-950
|
||||||
}
|
}
|
||||||
.event-orange.is-hidden {
|
.event-orange.is-hidden {
|
||||||
@apply text-orange-500 hover:text-white dark:hover:text-slate-900 border-orange-500 hover:bg-orange-600 dark:text-white
|
@apply text-orange-600 border-orange-600 hover:bg-orange-100 focus-visible:bg-orange-100 dark:text-white dark:hover:bg-orange-950 dark:focus-visible:bg-orange-950
|
||||||
}
|
}
|
||||||
.event-amber.is-hidden {
|
.event-amber.is-hidden {
|
||||||
@apply text-amber-500 hover:text-white dark:hover:text-slate-900 border-amber-500 hover:bg-amber-600 dark:text-white
|
@apply text-red-600 border-red-600 hover:bg-red-100 focus-visible:bg-red-100 dark:text-white dark:hover:bg-red-950 dark:focus-visible:bg-red-950
|
||||||
}
|
}
|
||||||
.event-yellow.is-hidden {
|
.event-yellow.is-hidden {
|
||||||
@apply text-yellow-600 hover:text-white dark:hover:text-slate-900 border-yellow-600 hover:bg-yellow-700 dark:text-white
|
@apply text-yellow-600 border-yellow-600 hover:bg-yellow-100 focus-visible:bg-yellow-100 dark:text-white dark:hover:bg-yellow-950 dark:focus-visible:bg-yellow-950
|
||||||
}
|
}
|
||||||
.event-lime.is-hidden {
|
.event-lime.is-hidden {
|
||||||
@apply text-lime-500 hover:text-white dark:hover:text-slate-900 border-lime-500 hover:bg-lime-600 dark:text-white
|
@apply text-lime-600 border-lime-600 hover:bg-lime-100 focus-visible:bg-lime-100 dark:text-white dark:hover:bg-lime-950 dark:focus-visible:bg-lime-950
|
||||||
}
|
}
|
||||||
.event-green.is-hidden {
|
.event-green.is-hidden {
|
||||||
@apply text-green-600 hover:text-white border-green-600 hover:bg-green-700 dark:text-white
|
@apply text-green-600 border-green-600 hover:bg-green-700 focus-visible:bg-green-700 dark:text-white dark:hover:bg-green-950 dark:focus-visible:bg-green-950
|
||||||
}
|
}
|
||||||
.event-emerald.is-hidden {
|
.event-emerald.is-hidden {
|
||||||
@apply text-emerald-600 hover:text-white border-emerald-600 hover:bg-emerald-700 dark:text-white
|
@apply text-emerald-600 border-emerald-600 hover:bg-emerald-700 focus-visible:bg-emerald-700 dark:text-white dark:hover:bg-emerald-950 dark:focus-visible:bg-emerald-950
|
||||||
}
|
}
|
||||||
.event-teal.is-hidden {
|
.event-teal.is-hidden {
|
||||||
@apply text-teal-700 hover:text-white border-teal-600 hover:bg-teal-700 dark:text-white
|
@apply text-teal-700 border-teal-600 hover:bg-teal-700 focus-visible:bg-teal-700 dark:text-white dark:hover:bg-teal-950 dark:focus-visible:bg-teal-950
|
||||||
}
|
}
|
||||||
.event-cyan.is-hidden {
|
.event-cyan.is-hidden {
|
||||||
@apply text-cyan-600 hover:text-white border-cyan-600 hover:bg-cyan-700 dark:text-white
|
@apply text-cyan-600 border-cyan-600 hover:bg-cyan-100 focus-visible:bg-cyan-100 dark:text-white dark:hover:bg-cyan-950 dark:focus-visible:bg-cyan-950
|
||||||
}
|
}
|
||||||
.event-sky.is-hidden {
|
.event-sky.is-hidden {
|
||||||
@apply text-sky-600 hover:text-white border-sky-600 hover:bg-sky-700 dark:text-white
|
@apply text-sky-600 border-sky-600 hover:bg-sky-100 focus-visible:bg-sky-100 dark:text-white dark:hover:bg-sky-950 dark:focus-visible:bg-sky-950
|
||||||
}
|
}
|
||||||
.event-blue.is-hidden {
|
.event-blue.is-hidden {
|
||||||
@apply text-blue-600 hover:text-white border-blue-600 hover:bg-blue-700 dark:text-white
|
@apply text-blue-600 border-blue-600 hover:bg-blue-100 focus-visible:bg-blue-100 dark:text-white dark:hover:bg-blue-950 dark:focus-visible:bg-blue-950
|
||||||
}
|
}
|
||||||
.event-indigo.is-hidden {
|
.event-indigo.is-hidden {
|
||||||
@apply text-indigo-600 hover:text-white border-indigo-600 hover:bg-indigo-700 dark:text-white
|
@apply text-indigo-600 border-indigo-600 hover:bg-indigo-100 focus-visible:bg-indigo-100 dark:text-white dark:hover:bg-indigo-950 dark:focus-visible:bg-indigo-950
|
||||||
}
|
}
|
||||||
.event-violet.is-hidden {
|
.event-violet.is-hidden {
|
||||||
@apply text-violet-600 hover:text-white border-violet-600 hover:bg-violet-700 dark:text-white
|
@apply text-violet-600 border-violet-600 hover:bg-violet-100 focus-visible:bg-violet-100 dark:text-white dark:hover:bg-violet-950 dark:focus-visible:bg-violet-950
|
||||||
}
|
}
|
||||||
.event-purple.is-hidden {
|
.event-purple.is-hidden {
|
||||||
@apply text-purple-600 hover:text-white border-purple-600 hover:bg-purple-700 dark:text-white
|
@apply text-purple-600 border-purple-600 hover:bg-purple-100 focus-visible:bg-purple-100 dark:text-white dark:hover:bg-purple-950 dark:focus-visible:bg-purple-950
|
||||||
}
|
}
|
||||||
.event-fuchsia.is-hidden {
|
.event-fuchsia.is-hidden {
|
||||||
@apply text-fuchsia-600 hover:text-white border-fuchsia-600 hover:bg-fuchsia-700 dark:text-white
|
@apply text-fuchsia-600 border-fuchsia-600 hover:bg-fuchsia-100 focus-visible:bg-fuchsia-100 dark:text-white dark:hover:bg-fuchsia-950 dark:focus-visible:bg-fuchsia-950
|
||||||
}
|
}
|
||||||
.event-pink.is-hidden {
|
.event-pink.is-hidden {
|
||||||
@apply text-pink-700 hover:text-white border-pink-700 hover:bg-pink-800 dark:text-white
|
@apply text-pink-700 border-pink-700 hover:bg-pink-100 focus-visible:bg-pink-100 dark:text-white dark:hover:bg-pink-950 dark:focus-visible:bg-pink-950
|
||||||
}
|
}
|
||||||
.event-rose.is-hidden {
|
.event-rose.is-hidden {
|
||||||
@apply text-rose-700 hover:text-white border-rose-700 hover:bg-rose-800 dark:text-white
|
@apply text-rose-700 border-rose-700 hover:bg-rose-100 focus-visible:bg-rose-100 dark:text-white dark:hover:bg-rose-950 dark:focus-visible:bg-rose-950
|
||||||
}
|
}
|
||||||
.event-black.is-hidden {
|
.event-black.is-hidden {
|
||||||
@apply text-stone-700 hover:text-white border-stone-500 hover:bg-stone-700 dark:text-white
|
@apply text-stone-700 border-stone-500 hover:bg-stone-100 focus-visible:bg-stone-100 dark:text-white dark:hover:bg-stone-950 dark:focus-visible:bg-stone-950
|
||||||
}
|
}
|
||||||
.event-white.is-hidden {
|
.event-white.is-hidden {
|
||||||
@apply text-slate-900 border-neutral-400 hover:bg-yellow-200 dark:bg-neutral-800 dark:text-white dark:hover:bg-neutral-300 dark:hover:text-slate-900
|
@apply text-slate-900 border-neutral-400 hover:bg-yellow-200 focus-visible:bg-yellow-200 dark:bg-neutral-900 dark:text-white dark:hover:bg-neutral-700 dark:focus-visible:bg-neutral-300
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark .event-details-red {
|
.dark .event-details-red {
|
||||||
|
|||||||
@@ -51,9 +51,9 @@ onMounted(() => {
|
|||||||
|
|
||||||
<component :is="currentViewComponent" />
|
<component :is="currentViewComponent" />
|
||||||
|
|
||||||
<CalendarSearch />
|
<LazyCalendarSearch />
|
||||||
<CalendarDialogUpdateEvent v-if="!isReadOnly" />
|
<LazyCalendarDialogUpdateEvent v-if="!isReadOnly" />
|
||||||
<CalendarDialogDeleteEvent v-if="!isReadOnly" />
|
<LazyCalendarDialogDeleteEvent v-if="!isReadOnly" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ onMounted(() => {
|
|||||||
<UiPopover v-model:open="isPopoverDetailsOpen">
|
<UiPopover v-model:open="isPopoverDetailsOpen">
|
||||||
<UiPopoverTrigger as-child>
|
<UiPopoverTrigger as-child>
|
||||||
<button
|
<button
|
||||||
class="event text-xs px-2 py-1 block w-full text-left rounded-sm focus-visible:bg-red-200 transition-colors"
|
class="event text-xs px-2 py-1 block w-full text-left rounded-sm transition-colors outline-offset-1"
|
||||||
:class="
|
:class="
|
||||||
cn(
|
cn(
|
||||||
event.category ? `event-${event.category.color}` : '',
|
event.category ? `event-${event.category.color}` : '',
|
||||||
|
|||||||
@@ -2,12 +2,20 @@
|
|||||||
import type { RPGDate } from "~/models/Date";
|
import type { RPGDate } from "~/models/Date";
|
||||||
import { PhAlarm, PhCircleNotch, PhEye, PhEyeClosed, PhMapPinArea, PhTag } from "@phosphor-icons/vue"
|
import { PhAlarm, PhCircleNotch, PhEye, PhEyeClosed, PhMapPinArea, PhTag } from "@phosphor-icons/vue"
|
||||||
|
|
||||||
|
const { t } = useI18n()
|
||||||
|
|
||||||
const emit = defineEmits(["event-created"])
|
const emit = defineEmits(["event-created"])
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
date?: RPGDate
|
||||||
|
btnClass?: string
|
||||||
|
}>()
|
||||||
|
|
||||||
const { eventSkeleton } = storeToRefs(useCalendar())
|
const { eventSkeleton } = storeToRefs(useCalendar())
|
||||||
const { submitSkeleton, cancelLatestRequest } = useCalendar()
|
const { submitSkeleton, cancelLatestRequest } = useCalendar()
|
||||||
|
|
||||||
const { t } = useI18n()
|
const newEventTitle = shallowRef<HTMLInputElement>()
|
||||||
|
useFocus(newEventTitle, { initialValue: true })
|
||||||
|
|
||||||
const isLoading = ref(false)
|
const isLoading = ref(false)
|
||||||
|
|
||||||
@@ -15,11 +23,6 @@ const formErrors = reactive<{ message: string | null }>({
|
|||||||
message: null
|
message: null
|
||||||
})
|
})
|
||||||
|
|
||||||
const props = defineProps<{
|
|
||||||
date?: RPGDate
|
|
||||||
btnClass?: string
|
|
||||||
}>()
|
|
||||||
|
|
||||||
async function handleSubmit() {
|
async function handleSubmit() {
|
||||||
// Prevent form submission if already loading
|
// Prevent form submission if already loading
|
||||||
if (isLoading.value) return
|
if (isLoading.value) return
|
||||||
@@ -56,6 +59,7 @@ function handleCancel() {
|
|||||||
<div class="col-span-2 pl-8">
|
<div class="col-span-2 pl-8">
|
||||||
<input
|
<input
|
||||||
id="new-event-title"
|
id="new-event-title"
|
||||||
|
ref="newEventTitle"
|
||||||
v-model="eventSkeleton.title"
|
v-model="eventSkeleton.title"
|
||||||
type="text"
|
type="text"
|
||||||
name="new-event-title"
|
name="new-event-title"
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ import type { Category } from "~/models/Category"
|
|||||||
const { isAdvancedSearchOpen, allEvents } = storeToRefs(useCalendar())
|
const { isAdvancedSearchOpen, allEvents } = storeToRefs(useCalendar())
|
||||||
const { characters } = storeToRefs(useCharacters())
|
const { characters } = storeToRefs(useCharacters())
|
||||||
|
|
||||||
|
const searchInput = shallowRef<HTMLInputElement>()
|
||||||
|
useFocus(searchInput, { initialValue: true })
|
||||||
|
|
||||||
const searchQuery = ref<string>("")
|
const searchQuery = ref<string>("")
|
||||||
// const searchEnough = computed<boolean>(() => searchQuery.value.length >= 2)
|
// const searchEnough = computed<boolean>(() => searchQuery.value.length >= 2)
|
||||||
|
|
||||||
@@ -281,6 +284,7 @@ function handleCategoryUnselect(e: Category) {
|
|||||||
<div class="relative w-full h-fit">
|
<div class="relative w-full h-fit">
|
||||||
<UiInput
|
<UiInput
|
||||||
id="search"
|
id="search"
|
||||||
|
ref="searchInput"
|
||||||
v-model:model-value="searchQuery"
|
v-model:model-value="searchQuery"
|
||||||
type="text"
|
type="text"
|
||||||
:placeholder="$t('entity.advancedSearch.ctaPlaceholder')"
|
:placeholder="$t('entity.advancedSearch.ctaPlaceholder')"
|
||||||
@@ -321,7 +325,7 @@ function handleCategoryUnselect(e: Category) {
|
|||||||
<ComboboxRoot
|
<ComboboxRoot
|
||||||
v-model="selectedCategories"
|
v-model="selectedCategories"
|
||||||
v-model:open="categoryFilterOpened"
|
v-model:open="categoryFilterOpened"
|
||||||
v-model:searchTerm="searchCategory"
|
v-model:search-term="searchCategory"
|
||||||
class="grow flex items-center gap-y-1 pr-2"
|
class="grow flex items-center gap-y-1 pr-2"
|
||||||
>
|
>
|
||||||
<ComboboxAnchor as-child>
|
<ComboboxAnchor as-child>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ const dateDuration = computed<string | null>(() => props.event.endDate ? getRela
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<button
|
<button
|
||||||
class="event relative block w-full text-left py-3 px-4 rounded-sm transition-colors"
|
class="event group relative block w-full text-left py-3 px-4 rounded-sm transition-colors"
|
||||||
:class="cn(
|
:class="cn(
|
||||||
event.category ? `event-${event.category.color}` : '',
|
event.category ? `event-${event.category.color}` : '',
|
||||||
{
|
{
|
||||||
@@ -30,7 +30,7 @@ const dateDuration = computed<string | null>(() => props.event.endDate ? getRela
|
|||||||
@click="$emit('query:date-jump', event.startDate)"
|
@click="$emit('query:date-jump', event.startDate)"
|
||||||
>
|
>
|
||||||
<div class="flex gap-2 items-center mb-1">
|
<div class="flex gap-2 items-center mb-1">
|
||||||
<h2 class="font-bold text-lg">
|
<h2 class="font-bold text-lg underline-offset-4 group-hover:underline">
|
||||||
{{ event.title }}
|
{{ event.title }}
|
||||||
</h2>
|
</h2>
|
||||||
<div v-if="event.wiki">
|
<div v-if="event.wiki">
|
||||||
|
|||||||
21
components/global/LoadingCard.vue
Normal file
21
components/global/LoadingCard.vue
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<script lang="ts" setup>
|
||||||
|
const { lineNb = 3 } = defineProps<{
|
||||||
|
lineNb?: number
|
||||||
|
}>()
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<UiCard class="w-full h-full flex flex-col">
|
||||||
|
<UiCardHeader>
|
||||||
|
<UiCardTitle>
|
||||||
|
<UiSkeleton class="w-2/3 max-w-full h-8" />
|
||||||
|
</UiCardTitle>
|
||||||
|
</UiCardHeader>
|
||||||
|
<UiCardContent class="grow grid gap-2">
|
||||||
|
<UiSkeleton class="w-full max-w-full h-6" />
|
||||||
|
<template v-for="(l, i) in lineNb" :key="i">
|
||||||
|
<UiSkeleton class="max-w-full h-6" :style="`width: ${Math.floor(Math.random() * 100) + 1}%`" />
|
||||||
|
</template>
|
||||||
|
</UiCardContent>
|
||||||
|
</UiCard>
|
||||||
|
</template>
|
||||||
@@ -52,7 +52,7 @@ watch(user, () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-else-if="calendar?.data && categories?.data" class="h-full w-full">
|
<div v-else-if="calendar?.data && categories?.data" class="h-full w-full pt-8">
|
||||||
<Head>
|
<Head>
|
||||||
<Title>{{ calendar.data.name }}</Title>
|
<Title>{{ calendar.data.name }}</Title>
|
||||||
</Head>
|
</Head>
|
||||||
@@ -68,21 +68,21 @@ watch(user, () => {
|
|||||||
<div class="grid justify-items-center opacity-80">
|
<div class="grid justify-items-center opacity-80">
|
||||||
<PhCalendarX size="75" class="opacity-60" />
|
<PhCalendarX size="75" class="opacity-60" />
|
||||||
|
|
||||||
<Heading level="h1">
|
<LazyHeading level="h1">
|
||||||
{{ $t("entity.calendar.notFound") }}
|
{{ $t("entity.calendar.notFound") }}
|
||||||
</Heading>
|
</LazyHeading>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
{{ $t('entity.calendar.notFoundDescription') }}
|
{{ $t('entity.calendar.notFoundDescription') }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<UiButton variant="default" class="mt-4 gap-2" as-child>
|
<LazyUiButton variant="default" class="mt-4 gap-2" as-child>
|
||||||
<RouterLink to="/explore">
|
<RouterLink to="/explore">
|
||||||
<PhArrowBendDoubleUpLeft size="24" />
|
<PhArrowBendDoubleUpLeft size="24" />
|
||||||
|
|
||||||
{{ $t('entity.calendar.backToList') }}
|
{{ $t('entity.calendar.backToList') }}
|
||||||
</RouterLink>
|
</RouterLink>
|
||||||
</UiButton>
|
</LazyUiButton>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ definePageMeta({
|
|||||||
middleware: ["reset-menu"]
|
middleware: ["reset-menu"]
|
||||||
})
|
})
|
||||||
|
|
||||||
const { data: availableCalendars } = await useLazyFetch<{ data: Calendar[] }>("/api/calendars/query", { key: "explore-calendars", query: { full: true } })
|
const { data: availableCalendars, status: calendarStatus } = await useLazyFetch<{ data: Calendar[] }>("/api/calendars/query", { key: "explore-calendars", query: { full: true } })
|
||||||
|
|
||||||
|
const isLoading = computed(() => calendarStatus.value === "pending")
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -24,11 +26,14 @@ const { data: availableCalendars } = await useLazyFetch<{ data: Calendar[] }>("/
|
|||||||
{{ $t("entity.calendar.namePublicPlural") }}
|
{{ $t("entity.calendar.namePublicPlural") }}
|
||||||
</Heading>
|
</Heading>
|
||||||
|
|
||||||
<ul v-if="availableCalendars?.data" class="grid md:grid-cols-3 gap-2">
|
<div v-if="isLoading" class="grid md:grid-cols-3 gap-2">
|
||||||
<li v-for="calendar in availableCalendars.data" :key="calendar.shortId">
|
<LoadingCard />
|
||||||
<CalendarPreviewCard :calendar="calendar" :gm-id="calendar.world?.gmId" />
|
</div>
|
||||||
</li>
|
<ul v-else-if="availableCalendars?.data" class="grid md:grid-cols-3 gap-2">
|
||||||
</ul>
|
<li v-for="calendar in availableCalendars.data" :key="calendar.shortId">
|
||||||
|
<CalendarPreviewCard :calendar="calendar" :gm-id="calendar.world?.gmId" />
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</Spacing>
|
</Spacing>
|
||||||
</Spacing>
|
</Spacing>
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
@@ -153,8 +153,8 @@ function hideEditModal() {
|
|||||||
</Spacing>
|
</Spacing>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<WorldDialogCreate :modal-state="isCreateWorldModalOpen" @on-close="hideCreateDialog" />
|
<LazyWorldDialogCreate :modal-state="isCreateWorldModalOpen" @on-close="hideCreateDialog" />
|
||||||
<WorldDialogEdit :world="markedWorld" :modal-state="isEditWorldModalOpen" @on-close="hideEditModal" />
|
<LazyWorldDialogEdit :world="markedWorld" :modal-state="isEditWorldModalOpen" @on-close="hideEditModal" />
|
||||||
<WorldDialogDelete :world="markedWorld" :modal-state="isDeleteWorldModalOpen" @on-close="hideDeleteModal" />
|
<LazyWorldDialogDelete :world="markedWorld" :modal-state="isDeleteWorldModalOpen" @on-close="hideDeleteModal" />
|
||||||
</main>
|
</main>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -251,10 +251,10 @@ function hideEditModal() {
|
|||||||
</Spacing>
|
</Spacing>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<WorldDialogEdit :world="world.data" :modal-state="isEditWorldModalOpen" @on-close="hideEditModal" />
|
<LazyWorldDialogEdit :world="world.data" :modal-state="isEditWorldModalOpen" @on-close="hideEditModal" />
|
||||||
<CalendarDialogCreate :world="world.data" :modal-state="isCreateCalendarModalOpen" @on-close="hideCreateDialog" />
|
<LazyCalendarDialogCreate :world="world.data" :modal-state="isCreateCalendarModalOpen" @on-close="hideCreateDialog" />
|
||||||
<CalendarDialogUpdate v-if="markedCalendar?.id" :world="world.data" :calendar="markedCalendar" :modal-state="isUpdateCalendarModalOpen" @on-close="hideUpdateDialog" />
|
<LazyCalendarDialogUpdate v-if="markedCalendar?.id" :world="world.data" :calendar="markedCalendar" :modal-state="isUpdateCalendarModalOpen" @on-close="hideUpdateDialog" />
|
||||||
<CalendarDialogDelete :calendar="markedCalendar" :modal-state="isDeleteCalendarModalOpen" @on-close="hideDeleteCalendarModal"/>
|
<LazyCalendarDialogDelete :calendar="markedCalendar" :modal-state="isDeleteCalendarModalOpen" @on-close="hideDeleteCalendarModal"/>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<div class="h-full w-full grid place-items-center">
|
<div class="h-full w-full grid place-items-center">
|
||||||
|
|||||||
Reference in New Issue
Block a user