'use client' import { useEffect, useState } from 'react' const USER_VIEW_STORAGE_KEY = 'magent_user_view_preview' const USER_VIEW_EVENT = 'magent:user-view-change' const readUserViewPreview = () => { if (typeof window === 'undefined') return false return window.sessionStorage.getItem(USER_VIEW_STORAGE_KEY) === '1' } const applyDocumentMode = (enabled: boolean) => { if (typeof document === 'undefined') return document.documentElement.dataset.userView = enabled ? 'true' : 'false' } export const setUserViewPreview = (enabled: boolean) => { if (typeof window === 'undefined') return if (enabled) { window.sessionStorage.setItem(USER_VIEW_STORAGE_KEY, '1') } else { window.sessionStorage.removeItem(USER_VIEW_STORAGE_KEY) } applyDocumentMode(enabled) window.dispatchEvent(new CustomEvent(USER_VIEW_EVENT, { detail: { enabled } })) } export const useUserViewPreview = () => { const [enabled, setEnabled] = useState(false) useEffect(() => { const sync = () => { const nextValue = readUserViewPreview() applyDocumentMode(nextValue) setEnabled(nextValue) } sync() window.addEventListener(USER_VIEW_EVENT, sync) window.addEventListener('storage', sync) return () => { window.removeEventListener(USER_VIEW_EVENT, sync) window.removeEventListener('storage', sync) } }, []) return enabled }