refactor: split uni store to per responsiblity store
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
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,
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user