(tableKey = 'global')
| 8 | * 内部使用 localStorage 保存状态,并监听 storage 事件保持多标签页同步。 |
| 9 | */ |
| 10 | export function useTableCompactMode(tableKey = 'global') { |
| 11 | const [compactMode, setCompactModeState] = useState(() => getTableCompactMode(tableKey)); |
| 12 | |
| 13 | const setCompactMode = useCallback((value) => { |
| 14 | setCompactModeState(value); |
| 15 | setTableCompactMode(value, tableKey); |
| 16 | }, [tableKey]); |
| 17 | |
| 18 | useEffect(() => { |
| 19 | const handleStorage = (e) => { |
| 20 | if (e.key === TABLE_COMPACT_MODES_KEY) { |
| 21 | try { |
| 22 | const modes = JSON.parse(e.newValue || '{}'); |
| 23 | setCompactModeState(!!modes[tableKey]); |
| 24 | } catch { |
| 25 | // ignore parse error |
| 26 | } |
| 27 | } |
| 28 | }; |
| 29 | window.addEventListener('storage', handleStorage); |
| 30 | return () => window.removeEventListener('storage', handleStorage); |
| 31 | }, [tableKey]); |
| 32 | |
| 33 | return [compactMode, setCompactMode]; |
| 34 | } |
no test coverage detected