Update calendar with multi-select
This commit is contained in:
@@ -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)
|
||||
}
|
||||
Reference in New Issue
Block a user