import { extractStaticStyle } from 'antd-style';
import {
Helmet,
useIntl,
useLocale,
useLocation,
useNavData,
useRouteMeta,
useSidebarData,
useSiteData,
useTabMeta,
} from 'dumi';
import isEqual from 'fast-deep-equal';
import { PropsWithChildren, memo, useEffect, useMemo, type FC } from 'react';
import DumiSiteProvider from '../../components/DumiSiteProvider';
import { StoreUpdater } from '../../components/StoreUpdater';
import Docs from '../../pages/Docs';
import Home from '../../pages/Home';
import { Provider, createStore, isHeroPageSel, tokenSel, useSiteStore } from '../../store';
import { GlobalStyle } from './styles';
const DocLayout: FC = memo(() => {
const intl = useIntl();
const { hash } = useLocation();
const fm = useSiteStore((s) => s.routeMeta.frontmatter);
const isHomePage = useSiteStore(isHeroPageSel);
const loading = useSiteStore((s) => s.siteData.loading);
// handle hash change or visit page hash after async chunk loaded
useEffect(() => {
const id = hash.replace('#', '');
if (id) {
setTimeout(() => {
const elm = document.getElementById(decodeURIComponent(id));
if (elm) {
elm.scrollIntoView();
window.scrollBy({ top: -80 });
}
}, 1);
}
}, [loading, hash]);
return (
<>
{fm.title && }
{fm.description && }
{fm.description && }
{fm.keywords && }
{fm.keywords && }
{isHomePage ? : }
>
);
});
// @ts-ignore
global.__ANTD_CACHE__ = extractStaticStyle.cache;
const ThemeProvider = ({ children }: PropsWithChildren) => {
const siteToken = useSiteStore(tokenSel, isEqual);
return (
{children}
);
};
const App = memo(({ initState }: any) => (
createStore(initState)}>
));
export default () => {
const siteData = useSiteData();
const sidebar = useSidebarData();
const routeMeta = useRouteMeta();
const tabMeta = useTabMeta();
const navData = useNavData();
const location = useLocation();
const locale = useLocale();
const initState = useMemo(
() => ({ siteData, navData, locale, location, routeMeta, tabMeta, sidebar }),
[],
);
return ;
};