From 8c53616c79cbb63c3fdf0f511502873470332c04 Mon Sep 17 00:00:00 2001 From: Alexis Date: Sun, 24 Aug 2025 15:02:42 +0200 Subject: [PATCH] Added arrow navigation on calendar page --- app/components/calendar/Calendar.vue | 32 ++++- .../calendar/dialog/QuickCreateEvent.vue | 22 +--- app/components/calendar/menu/Subnav.vue | 86 +----------- app/stores/CalendarStore.ts | 122 ++++++++++++++++++ 4 files changed, 158 insertions(+), 104 deletions(-) diff --git a/app/components/calendar/Calendar.vue b/app/components/calendar/Calendar.vue index 8e4e5f9..c95b930 100644 --- a/app/components/calendar/Calendar.vue +++ b/app/components/calendar/Calendar.vue @@ -8,8 +8,8 @@ import CenturyLayout from "./state/centennially/Layout.vue" import DecadeLayout from "./state/decennially/Layout.vue" import YearLayout from "./state/yearly/Layout.vue" -const { currentConfig, jumpToDate, selectedDate } = useCalendar() -const { isReadOnly } = storeToRefs(useCalendar()) +const { currentConfig, jumpToDate, selectedDate, toPastFar, toPastNear, toFutureNear, toFutureFar } = useCalendar() +const { isReadOnly, calendarState } = storeToRefs(useCalendar()) const currentViewComponent: ComputedRef = computed(() => { switch (currentConfig.viewType) { @@ -31,6 +31,34 @@ const currentViewComponent: ComputedRef = computed(() => { onMounted(() => { jumpToDate(selectedDate) }) + +// Key combos to navigate +const { arrowUp, arrowLeft, pageUp } = useMagicKeys() +const { arrowDown, arrowRight, pageDown } = useMagicKeys() + +watch([arrowUp, arrowLeft], (k) => { + if (calendarState.value === 'active' && k[0] || k[1]) { + toPastNear() + } +}) + +watch([arrowDown, arrowRight], (k) => { + if (calendarState.value === 'active' && k[0] || k[1]) { + toFutureNear() + } +}) + +watch(pageUp!, (k) => { + if (calendarState.value === 'active' && k) { + toPastFar() + } +}) + +watch(pageDown!, (k) => { + if (calendarState.value === 'active' && k) { + toFutureFar() + } +}) diff --git a/app/components/calendar/menu/Subnav.vue b/app/components/calendar/menu/Subnav.vue index eaf9b06..13f129d 100644 --- a/app/components/calendar/menu/Subnav.vue +++ b/app/components/calendar/menu/Subnav.vue @@ -12,7 +12,7 @@ interface DirectionLabels { futureFar: string } -const { currentConfig, decrementViewMonth, incrementViewMonth, decrementViewYear, incrementViewYear } = +const { currentConfig, toPastFar, toPastNear, toFutureNear, toFutureFar } = useCalendar() const activeDirectionLabels: ComputedRef = computed(() => { @@ -51,90 +51,6 @@ const activeDirectionLabels: ComputedRef = computed(() => { } } }) - -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 - } -}