Moved navigation to sub nav

This commit is contained in:
Alexis
2025-03-28 12:11:54 +01:00
parent 7f3a2b8d56
commit 149d0794e3
5 changed files with 186 additions and 278 deletions

View File

@@ -4,26 +4,29 @@ import { computed } from "vue"
import { PhMapPin } from "@phosphor-icons/vue" import { PhMapPin } from "@phosphor-icons/vue"
const { defaultDate, getFormattedDateTitle, getRelativeString } = useCalendar() const { defaultDate, getFormattedDateTitle, getRelativeString, getDifferenceInDays } = useCalendar()
const { selectedDate } = storeToRefs(useCalendar()) const { selectedDate } = storeToRefs(useCalendar())
const mainDateTitle = computed(() => getFormattedDateTitle(selectedDate.value, true)) const mainDateTitle = computed(() => getFormattedDateTitle(selectedDate.value, true))
// const mainDateTitle = computed(() => convertDateToDays(selectedDate.value)) // const mainDateTitle = computed(() => convertDateToDays(selectedDate.value))
const dateDifference = computed(() => getRelativeString(defaultDate, selectedDate.value)) const dateDifference = computed(() => getRelativeString(defaultDate, selectedDate.value))
const isToday = computed(() => getDifferenceInDays(defaultDate, selectedDate.value) === 0)
</script> </script>
<template> <template>
<ClientOnly> <ClientOnly>
<h1 class="text-2xl font-bold flex items-center gap-1"> <div class="flex gap-2 items-center">
<PhMapPin size="26" weight="bold" /> {{ mainDateTitle }} <h1 class="text-2xl font-bold flex items-center gap-1">
</h1> <PhMapPin size="26" weight="bold" /> {{ mainDateTitle }}
<h2 class="text-lg italic opacity-75"> </h1>
{{ dateDifference }} <h2 v-if="!isToday" class="text-xl italic opacity-75">
</h2> {{ dateDifference }}
</h2>
</div>
<template #fallback> <template #fallback>
<div class="grid gap-1"> <div class="flex items-center gap-1">
<UiSkeleton class="h-8 w-64" /> <UiSkeleton class="h-8 w-64" />
<UiSkeleton class="h-6 w-28" /> <UiSkeleton class="h-6 w-28" />
</div> </div>

View File

@@ -8,8 +8,8 @@ const { isReadOnly } = storeToRefs(useCalendar())
</script> </script>
<template> <template>
<header class="border-slate-200 contrast-more:border-slate-500 dark:border-slate-700 border-b-[1px]"> <header class="mt-2 grid gap-4 border-slate-200 contrast-more:border-slate-500 dark:border-slate-700 border-b-[1px]">
<div class="px-8 flex justify-between"> <div class="px-8 flex items-center justify-between gap-2">
<menu class="flex items-center gap-2"> <menu class="flex items-center gap-2">
<li v-if="!isReadOnly"> <li v-if="!isReadOnly">
<CalendarDialogQuickCreateEvent /> <CalendarDialogQuickCreateEvent />
@@ -17,9 +17,6 @@ const { isReadOnly } = storeToRefs(useCalendar())
<li> <li>
<CalendarMenuToday /> <CalendarMenuToday />
</li> </li>
<li>
<CalendarMenuNav />
</li>
<li class="ml-4"> <li class="ml-4">
<CalendarCurrentDate /> <CalendarCurrentDate />
</li> </li>

View File

@@ -1,200 +0,0 @@
<script lang="ts" setup>
import { computed, type ComputedRef } from "vue"
import { useCalendar } from "@/stores/CalendarStore"
import {
PhCaretDoubleLeft,
PhCaretDoubleRight,
PhCaretLeft,
PhCaretRight
} from "@phosphor-icons/vue"
const { t } = useI18n()
interface DirectionLabels {
pastFar: string
pastNear: string
futureNear: string
futureFar: string
}
const { currentConfig, decrementViewMonth, incrementViewMonth, decrementViewYear, incrementViewYear } =
useCalendar()
const activeDirectionLabels: ComputedRef<DirectionLabels> = computed(() => {
switch (currentConfig.viewType) {
case "month":
return {
pastFar: t("entity.calendar.years.prevSingular"),
pastNear: t("entity.calendar.months.prevSingular"),
futureNear: t("entity.calendar.months.nextSingular"),
futureFar: t("entity.calendar.years.nextSingular")
}
case "year":
return {
pastFar: t("entity.calendar.decades.prevSingular"),
pastNear: t("entity.calendar.years.prevSingular"),
futureNear: t("entity.calendar.years.nextSingular"),
futureFar: t("entity.calendar.decades.nextSingular")
}
case "decade":
return {
pastFar: t("entity.calendar.centuries.prevSingular"),
pastNear: t("entity.calendar.decades.prevSingular"),
futureNear: t("entity.calendar.decades.nextSingular"),
futureFar: t("entity.calendar.centuries.nextSingular")
}
case "century":
default:
return {
pastFar: t("entity.calendar.millenias.prevSingular"),
pastNear: t("entity.calendar.centuries.prevSingular"),
futureNear: t("entity.calendar.centuries.nextSingular"),
futureFar: t("entity.calendar.millenias.nextSingular")
}
}
})
function toPastFar(): void {
switch (currentConfig.viewType) {
case "month":
decrementViewYear()
break
case "year":
decrementViewYear(10)
break
case "decade":
decrementViewYear(100)
break
case "century":
default:
decrementViewYear(1000)
break
}
}
function toPastNear(): void {
switch (currentConfig.viewType) {
case "month":
decrementViewMonth()
break
case "year":
decrementViewYear()
break
case "decade":
decrementViewYear(10)
break
case "century":
default:
decrementViewYear(100)
break
}
}
function toFutureNear(): void {
switch (currentConfig.viewType) {
case "month":
incrementViewMonth()
break
case "year":
incrementViewYear()
break
case "decade":
incrementViewYear(10)
break
case "century":
default:
incrementViewYear(100)
break
}
}
function toFutureFar(): void {
switch (currentConfig.viewType) {
case "month":
incrementViewYear()
break
case "year":
incrementViewYear(10)
break
case "decade":
incrementViewYear(100)
break
case "century":
default:
incrementViewYear(1000)
break
}
}
</script>
<template>
<div class="flex items-center gap-2">
<UiTooltipProvider :delay-duration="250">
<UiTooltip>
<UiTooltipTrigger as-child>
<UiButton variant="outline" size="icon" @click="toPastFar()">
<PhCaretDoubleLeft size="18" />
</UiButton>
</UiTooltipTrigger>
<UiTooltipContent>
<p>{{ activeDirectionLabels.pastFar }}</p>
</UiTooltipContent>
</UiTooltip>
</UiTooltipProvider>
<UiTooltipProvider :delay-duration="250">
<UiTooltip>
<UiTooltipTrigger as-child>
<UiButton variant="outline" size="icon" @click="toPastNear()">
<PhCaretLeft size="18" />
</UiButton>
</UiTooltipTrigger>
<UiTooltipContent>
<p>{{ activeDirectionLabels.pastNear }}</p>
</UiTooltipContent>
</UiTooltip>
</UiTooltipProvider>
<UiTooltipProvider :delay-duration="250">
<UiTooltip>
<UiTooltipTrigger as-child>
<UiButton variant="outline" size="icon" @click="toFutureNear()">
<PhCaretRight size="18" />
</UiButton>
</UiTooltipTrigger>
<UiTooltipContent>
<p>{{ activeDirectionLabels.futureNear }}</p>
</UiTooltipContent>
</UiTooltip>
</UiTooltipProvider>
<UiTooltipProvider :delay-duration="250">
<UiTooltip>
<UiTooltipTrigger as-child>
<UiButton variant="outline" size="icon" @click="toFutureFar()">
<PhCaretDoubleRight size="18" />
</UiButton>
</UiTooltipTrigger>
<UiTooltipContent>
<p>{{ activeDirectionLabels.futureFar }}</p>
</UiTooltipContent>
</UiTooltip>
</UiTooltipProvider>
</div>
</template>

View File

@@ -1,66 +1,140 @@
<script lang="ts" setup> <script lang="ts" setup>
import { PhCaretDoubleLeft, PhCaretDoubleRight, PhCaretLeft, PhCaretRight } from "@phosphor-icons/vue"
const { currentDate } = useCalendar() const { currentDate } = useCalendar()
// const { toast } = useToast() const { t } = useI18n()
// const { t } = useI18n()
// function handleGotoPreviousEventPage(position: "next" | "prev" = "next") { interface DirectionLabels {
// let fromDate: RPGDate pastFar: string
pastNear: string
futureNear: string
futureFar: string
}
// // To modify, obviously const { currentConfig, decrementViewMonth, incrementViewMonth, decrementViewYear, incrementViewYear } =
// const daysPerMonth = 32 useCalendar()
// const toDay = position === "next" ? daysPerMonth : 1 const activeDirectionLabels: ComputedRef<DirectionLabels> = computed(() => {
// const toMonth = position === "next" ? monthsPerYear : 0 switch (currentConfig.viewType) {
case "month":
return {
pastFar: t("entity.calendar.years.prevSingular"),
pastNear: t("entity.calendar.months.prevSingular"),
futureNear: t("entity.calendar.months.nextSingular"),
futureFar: t("entity.calendar.years.nextSingular")
}
// switch (currentConfig.viewType) { case "year":
// case "month": return {
// fromDate = { pastFar: t("entity.calendar.decades.prevSingular"),
// day: toDay, pastNear: t("entity.calendar.years.prevSingular"),
// month: currentDate.currentMonth, futureNear: t("entity.calendar.years.nextSingular"),
// year: currentDate.currentYear futureFar: t("entity.calendar.decades.nextSingular")
// } }
// break
// case "year": case "decade":
// fromDate = { return {
// day: toDay, pastFar: t("entity.calendar.centuries.prevSingular"),
// month: toMonth, pastNear: t("entity.calendar.decades.prevSingular"),
// year: currentDate.currentYear futureNear: t("entity.calendar.decades.nextSingular"),
// } futureFar: t("entity.calendar.centuries.nextSingular")
// break }
// case "decade": case "century":
// fromDate = { default:
// day: toDay, return {
// month: currentDate.currentMonth, pastFar: t("entity.calendar.millenias.prevSingular"),
// year: currentDate.currentYear pastNear: t("entity.calendar.centuries.prevSingular"),
// } futureNear: t("entity.calendar.centuries.nextSingular"),
// break futureFar: t("entity.calendar.millenias.nextSingular")
}
}
})
// case "century": function toPastFar(): void {
// default: switch (currentConfig.viewType) {
// fromDate = { case "month":
// day: toDay, decrementViewYear()
// month: currentDate.currentMonth, break
// year: currentDate.currentYear
// }
// break
// }
// try { case "year":
// const { targetDate } = getRelativeEventFromDate(fromDate, position) decrementViewYear(10)
break
// jumpToDate(targetDate) case "decade":
// } catch (err) { decrementViewYear(100)
// toast({ break
// title: t("entity.calendar.event.outOfBoundsTitle"),
// variant: "default", case "century":
// description: t("entity.calendar.event.outOfBoundsMessage"), default:
// duration: 4000, decrementViewYear(1000)
// }) break
// } }
// } }
function toPastNear(): void {
switch (currentConfig.viewType) {
case "month":
decrementViewMonth()
break
case "year":
decrementViewYear()
break
case "decade":
decrementViewYear(10)
break
case "century":
default:
decrementViewYear(100)
break
}
}
function toFutureNear(): void {
switch (currentConfig.viewType) {
case "month":
incrementViewMonth()
break
case "year":
incrementViewYear()
break
case "decade":
incrementViewYear(10)
break
case "century":
default:
incrementViewYear(100)
break
}
}
function toFutureFar(): void {
switch (currentConfig.viewType) {
case "month":
incrementViewYear()
break
case "year":
incrementViewYear(10)
break
case "decade":
incrementViewYear(100)
break
case "century":
default:
incrementViewYear(1000)
break
}
}
</script> </script>
<template> <template>
@@ -76,7 +150,7 @@ const { currentDate } = useCalendar()
</template> </template>
</ClientOnly> </ClientOnly>
</div> </div>
<!-- <div> <div>
<UiTooltipProvider :delay-duration="250"> <UiTooltipProvider :delay-duration="250">
<UiTooltip> <UiTooltip>
<UiTooltipTrigger as-child> <UiTooltipTrigger as-child>
@@ -84,15 +158,13 @@ const { currentDate } = useCalendar()
variant="outline" variant="outline"
size="icon" size="icon"
class="rounded-t-sm rounded-b-none border-b-0" class="rounded-t-sm rounded-b-none border-b-0"
@click="handleGotoPreviousEventPage('prev')" @click="toPastFar()"
> >
<PhArrowLineLeft size="22" /> <PhCaretDoubleLeft size="18" />
</UiButton> </UiButton>
</UiTooltipTrigger> </UiTooltipTrigger>
<UiTooltipContent> <UiTooltipContent>
<p> <p>{{ activeDirectionLabels.pastFar }}</p>
{{ $t('entity.calendar.event.prevPage') }}
</p>
</UiTooltipContent> </UiTooltipContent>
</UiTooltip> </UiTooltip>
</UiTooltipProvider> </UiTooltipProvider>
@@ -105,18 +177,54 @@ const { currentDate } = useCalendar()
variant="outline" variant="outline"
size="icon" size="icon"
class="rounded-t-sm rounded-b-none border-b-0" class="rounded-t-sm rounded-b-none border-b-0"
@click="handleGotoPreviousEventPage('next')" @click="toPastNear()"
> >
<PhArrowLineRight size="22" /> <PhCaretLeft size="18" />
</UiButton> </UiButton>
</UiTooltipTrigger> </UiTooltipTrigger>
<UiTooltipContent> <UiTooltipContent>
<p> <p>{{ activeDirectionLabels.pastNear }}</p>
{{ $t('entity.calendar.event.nextPage') }}
</p>
</UiTooltipContent> </UiTooltipContent>
</UiTooltip> </UiTooltip>
</UiTooltipProvider> </UiTooltipProvider>
</div> --> </div>
<div>
<UiTooltipProvider :delay-duration="250">
<UiTooltip>
<UiTooltipTrigger as-child>
<UiButton
variant="outline"
size="icon"
class="rounded-t-sm rounded-b-none border-b-0"
@click="toFutureNear()"
>
<PhCaretRight size="18" />
</UiButton>
</UiTooltipTrigger>
<UiTooltipContent>
<p>{{ activeDirectionLabels.futureNear }}</p>
</UiTooltipContent>
</UiTooltip>
</UiTooltipProvider>
</div>
<div>
<UiTooltipProvider :delay-duration="250">
<UiTooltip>
<UiTooltipTrigger as-child>
<UiButton
variant="outline"
size="icon"
class="rounded-t-sm rounded-b-none border-b-0"
@click="toFutureFar()"
>
<PhCaretDoubleRight size="18" />
</UiButton>
</UiTooltipTrigger>
<UiTooltipContent>
<p>{{ activeDirectionLabels.futureFar }}</p>
</UiTooltipContent>
</UiTooltip>
</UiTooltipProvider>
</div>
</div> </div>
</template> </template>

View File

@@ -99,7 +99,7 @@ export default defineI18nConfig(() => ({
addDescription: "Add a description", addDescription: "Add a description",
deleteOne: "Delete \"{entity}\"", deleteOne: "Delete \"{entity}\"",
advancedSearch: { advancedSearch: {
title: "Advanced search", title: "Search",
subtitle: "Search through calendar and world data", subtitle: "Search through calendar and world data",
older: "Older", older: "Older",
newer: "Newer", newer: "Newer",
@@ -395,7 +395,7 @@ export default defineI18nConfig(() => ({
addDescription: "Ajouter une description", addDescription: "Ajouter une description",
deleteOne: "Supprimer \"{entity}\"", deleteOne: "Supprimer \"{entity}\"",
advancedSearch: { advancedSearch: {
title: "Recherche avancée", title: "Rechercher",
subtitle: "Rechercher les données disponibles sur le calendrier", subtitle: "Rechercher les données disponibles sur le calendrier",
older: "Plus ancien", older: "Plus ancien",
newer: "Plus récent", newer: "Plus récent",