import React, { type FC, useLayoutEffect } from 'react'; import { useOutlet } from 'dumi'; import { ConfigProvider, theme as antdTheme } from 'antd'; import { ThemeConfig } from 'antd/es/config-provider/context'; import ThemeContext, { ThemeContextProps } from '../slots/ThemeContext'; const ANT_DESIGN_SITE_THEME = 'antd-site-theme'; const GlobalLayout: FC = () => { const outlet = useOutlet(); const [theme, setTheme] = React.useState({}); const contextValue = React.useMemo( () => ({ theme, setTheme: newTheme => { setTheme(newTheme); localStorage.setItem( ANT_DESIGN_SITE_THEME, JSON.stringify(newTheme, (key, value) => { if (key === 'algorithm') { return value === antdTheme.darkAlgorithm ? 'dark' : value; } return value; }), ); }, }), [theme], ); useLayoutEffect(() => { const localTheme = localStorage.getItem(ANT_DESIGN_SITE_THEME); if (localTheme) { try { const themeConfig = JSON.parse(localTheme); if (themeConfig.algorithm === 'dark') { themeConfig.algorithm = antdTheme.darkAlgorithm; } setTheme(themeConfig); } catch (e) { console.error(e); } } }, []); return ( {outlet} ); }; export default GlobalLayout;