31d20448be
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
import { computed } from 'vue'
|
|
import { defineStore } from 'pinia'
|
|
import { useUserStore } from '@KTXC/stores/userStore'
|
|
import type { CalendarView } from '@/types'
|
|
import {
|
|
AGENDA_VIEW_SPANS,
|
|
DAYS_VIEW_SPANS,
|
|
type AgendaViewSpan,
|
|
type DaysViewSpan,
|
|
} from '@/types/spans'
|
|
|
|
const CALENDAR_VIEW_KEY = 'chrono.calendarView'
|
|
const DAYS_VIEW_SPAN_KEY = 'chrono.daysViewSpan'
|
|
const AGENDA_VIEW_SPAN_KEY = 'chrono.agendaViewSpan'
|
|
|
|
function normalizeCalendarView(value: unknown): CalendarView {
|
|
return value === 'month' || value === 'agenda' || value === 'days' ? value : 'days'
|
|
}
|
|
|
|
function normalizeDaysViewSpan(value: unknown): DaysViewSpan {
|
|
return typeof value === 'string' && DAYS_VIEW_SPANS.includes(value as DaysViewSpan)
|
|
? value as DaysViewSpan
|
|
: '7d'
|
|
}
|
|
|
|
function normalizeAgendaViewSpan(value: unknown): AgendaViewSpan {
|
|
return typeof value === 'string' && AGENDA_VIEW_SPANS.includes(value as AgendaViewSpan)
|
|
? value as AgendaViewSpan
|
|
: '1w'
|
|
}
|
|
|
|
export const useChronoSettingsStore = defineStore('chronoSettingsStore', () => {
|
|
const userStore = useUserStore()
|
|
|
|
const calendarView = computed({
|
|
get: () => normalizeCalendarView(userStore.getSetting(CALENDAR_VIEW_KEY)),
|
|
set: (value: CalendarView) => userStore.setSetting(CALENDAR_VIEW_KEY, normalizeCalendarView(value)),
|
|
})
|
|
|
|
const daysViewSpan = computed({
|
|
get: () => normalizeDaysViewSpan(userStore.getSetting(DAYS_VIEW_SPAN_KEY)),
|
|
set: (value: DaysViewSpan) => userStore.setSetting(DAYS_VIEW_SPAN_KEY, normalizeDaysViewSpan(value)),
|
|
})
|
|
|
|
const agendaViewSpan = computed({
|
|
get: () => normalizeAgendaViewSpan(userStore.getSetting(AGENDA_VIEW_SPAN_KEY)),
|
|
set: (value: AgendaViewSpan) => userStore.setSetting(AGENDA_VIEW_SPAN_KEY, normalizeAgendaViewSpan(value)),
|
|
})
|
|
|
|
return {
|
|
calendarView,
|
|
daysViewSpan,
|
|
agendaViewSpan,
|
|
}
|
|
})
|