#681 day view with sidebar on mobile

This commit is contained in:
lethemanh
2026-04-07 15:07:44 +07:00
parent aa96a39b28
commit 4bb4ec64ad
17 changed files with 362 additions and 298 deletions
@@ -2,7 +2,9 @@
import { useCallback } from 'react'
import { createViewHandlers, ViewHandlersProps } from '../handlers/viewHandlers'
export const useCalendarViewHandlers = (props: ViewHandlersProps) => {
export const useCalendarViewHandlers = (
props: ViewHandlersProps
): ReturnType<typeof createViewHandlers> => {
const viewHandlers = createViewHandlers(props)
return {
@@ -0,0 +1,77 @@
import { useAppDispatch } from '@/app/hooks'
import { setView } from '@/features/Settings/SettingsSlice'
import { Logout } from '@/features/User/oidcAuth'
import { useScreenSizeDetection } from '@/useScreenSizeDetection'
import { redirectTo } from '@/utils/navigation'
import { useEffect, useState } from 'react'
export const useUtilMenus = (): {
anchorEl: null | HTMLElement
userMenuAnchorEl: null | HTMLElement
supportLink: string
handleAppMenuOpen: (event: React.MouseEvent<HTMLElement>) => void
handleAppMenuClose: () => void
handleUserMenuOpen: (event: React.MouseEvent<HTMLElement>) => void
handleUserMenuClose: () => void
handleSettingsClick: () => void
handleLogoutClick: () => Promise<void>
} => {
const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)
const [userMenuAnchorEl, setUserMenuAnchorEl] = useState<null | HTMLElement>(
null
)
const supportLink = window.SUPPORT_URL
const dispatch = useAppDispatch()
const { isTablet, isTooSmall: isMobile } = useScreenSizeDetection()
useEffect(() => {
const resetMenuAnchorsOnResize = (): void => {
setAnchorEl(null)
setUserMenuAnchorEl(null)
}
resetMenuAnchorsOnResize()
}, [isTablet, isMobile])
const handleAppMenuOpen = (event: React.MouseEvent<HTMLElement>): void =>
setAnchorEl(event.currentTarget)
const handleAppMenuClose = (): void => setAnchorEl(null)
const handleUserMenuOpen = (event: React.MouseEvent<HTMLElement>): void =>
setUserMenuAnchorEl(event.currentTarget)
const handleUserMenuClose = (): void => {
setUserMenuAnchorEl(null)
}
const handleSettingsClick = (): void => {
dispatch(setView('settings'))
handleUserMenuClose()
}
const handleLogoutClick = async (): Promise<void> => {
try {
const logoutUrl = await Logout()
redirectTo(logoutUrl.href)
} catch (error) {
console.error('Logout failed:', error)
} finally {
sessionStorage.removeItem('tokenSet')
handleUserMenuClose()
}
}
return {
anchorEl,
userMenuAnchorEl,
supportLink,
handleAppMenuOpen,
handleAppMenuClose,
handleUserMenuOpen,
handleUserMenuClose,
handleSettingsClick,
handleLogoutClick
}
}