UNPKG

@easyx.ai/dumi-theme-easyxai

Version:

@easyx.ai/dumi-theme-easyxai 是为 dumi2 打造的一款文档站主题包,提供了更加美观、易用的研发与阅读体验

90 lines (89 loc) 3.11 kB
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; var _excluded = ["setLoading"], _excluded2 = ["setLoading"]; import React, { memo, useEffect } from 'react'; import { useDebounceEffect } from 'ahooks'; import { useLocale, useLocation, useNavData, useSidebarData, useSiteData, useTabMeta } from 'dumi'; import isEqual from 'fast-deep-equal'; import { useStoreApi } from "../../store/useSiteStore"; import { useRouteMeta } from "./useRouteMeta"; var isBrowser = typeof window !== 'undefined'; var SSRInit = {}; var useReact18xUpdater = function useReact18xUpdater(effect, deps) { useEffect(function () { React.startTransition(function () { effect(); }); }, deps); }; var useLegacyUpdater = function useLegacyUpdater(effect, deps) { useDebounceEffect(function () { effect(); }, deps, { wait: 32, maxWait: 96 }); }; var useUpdater = typeof React.startTransition === 'function' ? useReact18xUpdater : useLegacyUpdater; var useSyncState = function useSyncState(key, value, updateMethod) { var storeApi = useStoreApi(); var updater = updateMethod ? updateMethod : function (key, value) { return storeApi.setState(_defineProperty({}, key, value)); }; // 如果是 Node 环境,直接更新一次 store // 但是为了避免多次更新 store,所以加一个标记 if (!isBrowser && !SSRInit[key]) { updater(key, value); SSRInit[key] = true; } useUpdater(function () { updater(key, value); }, [value]); }; var displayLangHomeNavMap = { 'zh-CN': '首页', 'en-US': 'Home' }; var getHomeNav = function getHomeNav(id) { return { title: displayLangHomeNavMap[id], link: '/', activePath: '/' }; }; export var StoreUpdater = /*#__PURE__*/memo(function () { var siteData = useSiteData(); var sidebar = useSidebarData(); var tabMeta = useTabMeta(); var navData = useNavData(); var location = useLocation(); var locale = useLocale(); var storeApi = useStoreApi(); useRouteMeta(); useSyncState('siteData', siteData, function () { // eslint-disable-next-line @typescript-eslint/no-unused-vars var setLoading = siteData.setLoading, data = _objectWithoutProperties(siteData, _excluded); var _storeApi$getState = storeApi.getState(), _storeApi$getState$si = _storeApi$getState.siteData, _ = _storeApi$getState$si.setLoading, prevData = _objectWithoutProperties(_storeApi$getState$si, _excluded2); if (isEqual(data, prevData)) return; storeApi.setState({ siteData: siteData }); }); useSyncState('sidebar', sidebar); useSyncState('location', location); useSyncState('tabMeta', tabMeta); useSyncState('locale', locale); useSyncState('navData', navData, function () { var data = siteData.themeConfig.hideHomeNav ? navData : [getHomeNav(locale.id)].concat(_toConsumableArray(navData)); storeApi.setState({ navData: data }); }); return null; });