dumi-theme-antd-style
Version:
dumi-theme-antd-style 是为 dumi2 打造的一款文档站主题包,提供了更加美观、易用的研发与阅读体验
109 lines (107 loc) • 3.7 kB
JavaScript
import { extractStaticStyle } from 'antd-style';
import { Helmet, useIntl, useLocale, useLocation, useNavData, useRouteMeta, useSidebarData, useSiteData, useTabMeta } from 'dumi';
import isEqual from 'fast-deep-equal';
import { memo, useEffect, useMemo } 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 as _createStore, isHeroPageSel, tokenSel, useSiteStore } from "../../store";
import { GlobalStyle } from "./styles";
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
import { Fragment as _Fragment } from "react/jsx-runtime";
var DocLayout = /*#__PURE__*/memo(function () {
var intl = useIntl();
var _useLocation = useLocation(),
hash = _useLocation.hash;
var fm = useSiteStore(function (s) {
return s.routeMeta.frontmatter;
});
var isHomePage = useSiteStore(isHeroPageSel);
var loading = useSiteStore(function (s) {
return s.siteData.loading;
});
// handle hash change or visit page hash after async chunk loaded
useEffect(function () {
var id = hash.replace('#', '');
if (id) {
setTimeout(function () {
var elm = document.getElementById(decodeURIComponent(id));
if (elm) {
elm.scrollIntoView();
window.scrollBy({
top: -80
});
}
}, 1);
}
}, [loading, hash]);
return /*#__PURE__*/_jsxs(_Fragment, {
children: [/*#__PURE__*/_jsxs(Helmet, {
children: [/*#__PURE__*/_jsx("html", {
lang: intl.locale.replace(/-.+$/, '')
}), fm.title && /*#__PURE__*/_jsx("meta", {
property: "og:title",
content: fm.title
}), fm.description && /*#__PURE__*/_jsx("meta", {
name: "description",
content: fm.description
}), fm.description && /*#__PURE__*/_jsx("meta", {
property: "og:description",
content: fm.description
}), fm.keywords && /*#__PURE__*/_jsx("meta", {
name: "keywords",
content: fm.keywords.join(',')
}), fm.keywords && /*#__PURE__*/_jsx("meta", {
property: "og:keywords",
content: fm.keywords.join(',')
})]
}), isHomePage ? /*#__PURE__*/_jsx(Home, {}) : /*#__PURE__*/_jsx(Docs, {})]
});
});
// @ts-ignore
global.__ANTD_CACHE__ = extractStaticStyle.cache;
var ThemeProvider = function ThemeProvider(_ref) {
var children = _ref.children;
var siteToken = useSiteStore(tokenSel, isEqual);
return /*#__PURE__*/_jsx(DumiSiteProvider, {
cache: extractStaticStyle.cache,
token: siteToken,
children: children
});
};
var App = /*#__PURE__*/memo(function (_ref2) {
var initState = _ref2.initState;
return /*#__PURE__*/_jsxs(Provider, {
createStore: function createStore() {
return _createStore(initState);
},
children: [/*#__PURE__*/_jsx(StoreUpdater, {}), /*#__PURE__*/_jsxs(ThemeProvider, {
children: [/*#__PURE__*/_jsx(GlobalStyle, {}), /*#__PURE__*/_jsx(DocLayout, {})]
})]
});
});
export default (function () {
var siteData = useSiteData();
var sidebar = useSidebarData();
var routeMeta = useRouteMeta();
var tabMeta = useTabMeta();
var navData = useNavData();
var location = useLocation();
var locale = useLocale();
var initState = useMemo(function () {
return {
siteData: siteData,
navData: navData,
locale: locale,
location: location,
routeMeta: routeMeta,
tabMeta: tabMeta,
sidebar: sidebar
};
}, []);
return /*#__PURE__*/_jsx(App, {
initState: initState
});
});