Update calendar with multi-select

This commit is contained in:
2026-06-14 22:20:32 +02:00
parent 88afa17666
commit dead5e4897
14 changed files with 955 additions and 96 deletions
+1
View File
@@ -1,5 +1,6 @@
export { useAnalytics } from './useAnalytics'
export { useBreakPeriods } from './useBreakPeriods'
export { useShowWeekNumbers, getLastLeaveType, setLastLeaveType } from './useCalendarPreferences'
export { useOptimizationTips } from './useOptimizationTips'
export { useParentalLeave } from './useParentalLeave'
export { usePlannedDays } from './usePlannedDays'
@@ -0,0 +1,61 @@
import { useState, useEffect } from 'react'
const SHOW_WEEK_NUMBERS_KEY = 'calendar_show_week_numbers'
const LAST_LEAVE_TYPE_KEY = 'calendar_last_leave_type'
const STORAGE_EVENT_NAME = 'calendar:preferences-changed'
type LeaveType = 'sjukpenning' | 'lagsta' | 'vacation'
export function useShowWeekNumbers(): [boolean, (show: boolean) => void] {
const [showWeekNumbers, setShowWeekNumbers] = useState(false)
useEffect(() => {
const stored = localStorage.getItem(SHOW_WEEK_NUMBERS_KEY)
setShowWeekNumbers(stored === 'true')
const handleStorageChange = (e: StorageEvent) => {
if (e.key === SHOW_WEEK_NUMBERS_KEY) {
setShowWeekNumbers(e.newValue === 'true')
}
}
const handleCustomEvent = () => {
const stored = localStorage.getItem(SHOW_WEEK_NUMBERS_KEY)
setShowWeekNumbers(stored === 'true')
}
window.addEventListener('storage', handleStorageChange)
window.addEventListener(STORAGE_EVENT_NAME, handleCustomEvent)
return () => {
window.removeEventListener('storage', handleStorageChange)
window.removeEventListener(STORAGE_EVENT_NAME, handleCustomEvent)
}
}, [])
const updateShowWeekNumbers = (show: boolean) => {
localStorage.setItem(SHOW_WEEK_NUMBERS_KEY, show ? 'true' : 'false')
window.dispatchEvent(new Event(STORAGE_EVENT_NAME))
}
return [showWeekNumbers, updateShowWeekNumbers]
}
export function getLastLeaveType(): LeaveType | null {
const stored = sessionStorage.getItem(LAST_LEAVE_TYPE_KEY)
if (!stored || !isValidLeaveType(stored)) {
return null
}
return stored as LeaveType
}
export function setLastLeaveType(type: LeaveType): void {
if (!isValidLeaveType(type)) {
return
}
sessionStorage.setItem(LAST_LEAVE_TYPE_KEY, type)
}
function isValidLeaveType(value: string): value is LeaveType {
return ['sjukpenning', 'lagsta', 'vacation'].includes(value)
}