feat(mail): 增强邮件规则与阅读体验
- 将收件规则升级为支持多条件、多动作、应用现有邮件和终止继续处理。 - 新增规则构建与显示模式设置,优化规则列表与邮件详情展示。 - 增加邮件列表简洁模式、批量操作、手动刷新和更精细的已读状态控制。
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user