Files
NewSzxcn-Email/apps/web/src/lib/display-mode.ts
T
LanQin 85fb05d031 feat(mail): 增强邮件规则与阅读体验
- 将收件规则升级为支持多条件、多动作、应用现有邮件和终止继续处理。
- 新增规则构建与显示模式设置,优化规则列表与邮件详情展示。
- 增加邮件列表简洁模式、批量操作、手动刷新和更精细的已读状态控制。
2026-06-15 21:50:44 +08:00

37 lines
1.2 KiB
TypeScript

import * as React from "react"
export type DisplayMode = "detailed" | "compact"
const DISPLAY_MODE_KEY = "lanqin:display-mode"
export function getInitialDisplayMode(): DisplayMode {
if (typeof window === "undefined") return "detailed"
return window.localStorage.getItem(DISPLAY_MODE_KEY) === "compact" ? "compact" : "detailed"
}
export function setStoredDisplayMode(mode: DisplayMode) {
window.localStorage.setItem(DISPLAY_MODE_KEY, mode)
window.dispatchEvent(new CustomEvent("lanqin:display-mode", { detail: mode }))
}
export function useDisplayMode() {
const [displayMode, setDisplayModeState] = React.useState<DisplayMode>(getInitialDisplayMode)
React.useEffect(() => {
function sync() {
setDisplayModeState(getInitialDisplayMode())
}
window.addEventListener("storage", sync)
window.addEventListener("lanqin:display-mode", sync)
return () => {
window.removeEventListener("storage", sync)
window.removeEventListener("lanqin:display-mode", sync)
}
}, [])
const setDisplayMode = React.useCallback((mode: DisplayMode) => {
setStoredDisplayMode(mode)
setDisplayModeState(mode)
}, [])
return [displayMode, setDisplayMode] as const
}