From c1edf3b5ea8c3b1b88b11e57797da858cb3d410d Mon Sep 17 00:00:00 2001 From: Alexis <35.alexis.pele@gmail.com> Date: Mon, 1 Apr 2024 11:53:13 +0200 Subject: [PATCH] Added base calendar formatting --- src/App.vue | 4 +++- src/components/Calendar.vue | 40 ++++++++++++++++++++++++++++++++ src/components/CalendarMenu.vue | 33 ++++++++++++++++++++++++++ src/components/state/Century.vue | 9 +++++++ src/components/state/Decade.vue | 3 +++ src/components/state/Monthly.vue | 3 +++ src/components/state/Year.vue | 3 +++ src/models/Date.ts | 1 + src/stores/calendar.ts | 35 +++++++++++++++++++++++----- src/stores/events.ts | 4 ++-- src/views/HomeView.vue | 19 ++++----------- 11 files changed, 131 insertions(+), 23 deletions(-) create mode 100644 src/components/Calendar.vue create mode 100644 src/components/CalendarMenu.vue create mode 100644 src/components/state/Century.vue create mode 100644 src/components/state/Decade.vue create mode 100644 src/components/state/Monthly.vue create mode 100644 src/components/state/Year.vue diff --git a/src/App.vue b/src/App.vue index a78fb6f..ed2af98 100644 --- a/src/App.vue +++ b/src/App.vue @@ -3,5 +3,7 @@ import { RouterView } from 'vue-router' diff --git a/src/components/Calendar.vue b/src/components/Calendar.vue new file mode 100644 index 0000000..d9a3835 --- /dev/null +++ b/src/components/Calendar.vue @@ -0,0 +1,40 @@ + + + diff --git a/src/components/CalendarMenu.vue b/src/components/CalendarMenu.vue new file mode 100644 index 0000000..8a70e70 --- /dev/null +++ b/src/components/CalendarMenu.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/components/state/Century.vue b/src/components/state/Century.vue new file mode 100644 index 0000000..1c83776 --- /dev/null +++ b/src/components/state/Century.vue @@ -0,0 +1,9 @@ + + + diff --git a/src/components/state/Decade.vue b/src/components/state/Decade.vue new file mode 100644 index 0000000..1c6de81 --- /dev/null +++ b/src/components/state/Decade.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/state/Monthly.vue b/src/components/state/Monthly.vue new file mode 100644 index 0000000..6a1ce67 --- /dev/null +++ b/src/components/state/Monthly.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/state/Year.vue b/src/components/state/Year.vue new file mode 100644 index 0000000..b5256a2 --- /dev/null +++ b/src/components/state/Year.vue @@ -0,0 +1,3 @@ + diff --git a/src/models/Date.ts b/src/models/Date.ts index 37872e8..6c8950a 100644 --- a/src/models/Date.ts +++ b/src/models/Date.ts @@ -6,3 +6,4 @@ export type LeimDate = { } export type LeimPeriod = 'ante' | 'nante' +export type LeimPeriodShort = 'A.R' | 'N.R' diff --git a/src/stores/calendar.ts b/src/stores/calendar.ts index bc0a14c..a28a897 100644 --- a/src/stores/calendar.ts +++ b/src/stores/calendar.ts @@ -1,7 +1,7 @@ import { computed, type Ref, type ComputedRef, ref } from 'vue' import { defineStore } from 'pinia' import { useUrlSearchParams } from '@vueuse/core' -import type { LeimPeriod } from '@/models/Date' +import type { LeimPeriod, LeimPeriodShort } from '@/models/Date' type CalendarViewType = 'month' | 'year' | 'decade' | 'century' @@ -18,11 +18,12 @@ type CalendarCurrentConfig = { } type CalendarCurrentDate = { - currentPeriod: Ref - currentYear: ComputedRef - currentMonth: ComputedRef currentDay: ComputedRef + currentMonth: ComputedRef currentMonthName: ComputedRef + currentYear: ComputedRef + currentPeriod: Ref + currentPeriodAbbr: Ref } export const useCalendar = defineStore('calendar', () => { @@ -60,7 +61,7 @@ export const useCalendar = defineStore('calendar', () => { } const currentConfig: Ref = ref({ - viewType: 'century' + viewType: 'month' }) // Get date from URL params @@ -100,14 +101,18 @@ export const useCalendar = defineStore('calendar', () => { const year = Number(currentYear.value) return year >= 0 ? 'nante' : 'ante' }) + const currentPeriodAbbr: ComputedRef = computed(() => { + return currentPeriod.value === 'ante' ? 'A.R' : 'N.R' + }) // Create base config const currentDate: CalendarCurrentDate = { currentDay, currentMonth, + currentMonthName, currentYear, currentPeriod, - currentMonthName + currentPeriodAbbr } /** @@ -174,11 +179,29 @@ export const useCalendar = defineStore('calendar', () => { params.year = newValue.toString() } + /** + * From a given year, returns a set of LeimPeriod identifier + * + * This is used in range use-cases + * + * @param year The year to display + * @returns An object containing both short and long LeimPeriod + */ + function getPeriodOfYear(year: string | number): { long: LeimPeriod; short: LeimPeriodShort } { + const numYear = year as number + + return { + long: numYear >= 0 ? 'nante' : 'ante', + short: numYear >= 0 ? 'N.R' : 'A.R' + } + } + return { staticConfig, currentConfig, currentDate, params, + getPeriodOfYear, incrementMonth, decrementMonth, setMonth, diff --git a/src/stores/events.ts b/src/stores/events.ts index 985551c..9ca812c 100644 --- a/src/stores/events.ts +++ b/src/stores/events.ts @@ -60,13 +60,13 @@ export const useCalendarEvents = defineStore('calendar-events', () => { case 'decade': return ( - event.date.year >= Number(currentDate.currentYear) - 10 && + event.date.year >= Number(currentDate.currentYear) && event.date.year <= Number(currentDate.currentYear) + 10 ) case 'century': return ( - event.date.year >= Number(currentDate.currentYear) - 100 && + event.date.year >= Number(currentDate.currentYear) && event.date.year <= Number(currentDate.currentYear) + 100 ) diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 58074de..401a6c1 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -1,20 +1,11 @@