@antv/dumi-theme-antv 0.6.4-beta.2 → 0.6.4-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/builtins/Playground/index.js +1 -1
  2. package/dist/common/ClientOnly.js +21 -0
  3. package/dist/common/CommonHelmet.js +85 -0
  4. package/dist/common/InViewSuspense.js +29 -0
  5. package/dist/hooks/useLocale.js +11 -0
  6. package/dist/hooks/useMenu.js +68 -73
  7. package/dist/layouts/DocLayout.js +32 -23
  8. package/dist/layouts/IndexLayout/index.js +16 -0
  9. package/dist/layouts/{entry/Manual.js → ManualLayout/index.js} +6 -6
  10. package/dist/pages/404.js +5 -4
  11. package/dist/pages/Example/index.js +76 -53
  12. package/dist/pages/Examples/components/ExampleTopicMenu/index.js +3 -2
  13. package/dist/pages/Examples/index.js +28 -32
  14. package/dist/{slots → pages/Index/components}/Cases/index.js +1 -1
  15. package/dist/{slots → pages/Index/components}/Detail/News.js +1 -1
  16. package/dist/{slots → pages/Index/components}/Detail/index.js +1 -1
  17. package/dist/{slots → pages/Index/components}/Features/FeatureCard.js +1 -1
  18. package/dist/{slots → pages/Index/components}/Features/index.js +1 -1
  19. package/dist/pages/Index/components/_.less +119 -0
  20. package/dist/{layouts/entry/Index.js → pages/Index/index.js} +18 -22
  21. package/dist/plugin/index.js +52 -43
  22. package/dist/slots/CodeEditor/index.js +4 -3
  23. package/dist/slots/CodePreview/CodeHeader.js +3 -2
  24. package/dist/slots/CodePreview/index.js +3 -2
  25. package/dist/slots/CodeRunner/index.js +34 -29
  26. package/dist/slots/ExampleSider/index.js +3 -2
  27. package/dist/slots/Feedback/Contributors.js +3 -2
  28. package/dist/slots/Feedback/EditButton.js +3 -2
  29. package/dist/slots/Feedback/PageFeedback.js +4 -3
  30. package/dist/slots/Feedback/SectionFeedback.js +3 -2
  31. package/dist/slots/Feedback/index.js +12 -10
  32. package/dist/slots/Footer/index.js +3 -2
  33. package/dist/slots/Header/Navs.js +66 -6
  34. package/dist/slots/Header/Search/index.js +1 -1
  35. package/dist/slots/Header/index.js +64 -106
  36. package/dist/slots/ManualContent/Main.js +16 -17
  37. package/dist/slots/ManualContent/NavigatorBanner.js +4 -2
  38. package/dist/slots/ManualContent/ObPreview.js +17 -0
  39. package/dist/slots/ManualContent/index.js +11 -4
  40. package/dist/slots/ManualContent/usePreview.js +6 -1
  41. package/dist/slots/ManualContent/utils.js +3 -13
  42. package/dist/slots/global.js +4 -4
  43. package/dist/slots/hooks.js +0 -25
  44. package/dist/slots/utils.js +0 -7
  45. package/dist/utils/env.js +10 -0
  46. package/dist/utils/location.js +6 -0
  47. package/dist/utils/user.js +12 -24
  48. package/package.json +3 -3
  49. package/dist/common/SEO.js +0 -61
  50. package/dist/layouts/entry/API.js +0 -12
  51. package/dist/pages/Example/utils.js +0 -9
  52. package/dist/slots/Article/index.js +0 -9
  53. package/dist/slots/Article/index.module.less +0 -8
  54. package/dist/slots/CodePreview/CodeHeader.module.less +0 -0
  55. package/dist/slots/Header/Products/NavigatorBanner.js +0 -29
  56. package/dist/slots/Header/Products/NavigatorBanner.module.less +0 -39
  57. /package/dist/{slots → pages/Index/components}/Cases/index.module.less +0 -0
  58. /package/dist/{slots → pages/Index/components}/Companies/index.js +0 -0
  59. /package/dist/{slots → pages/Index/components}/Companies/index.module.less +0 -0
  60. /package/dist/{slots → pages/Index/components}/Detail/News.module.less +0 -0
  61. /package/dist/{slots → pages/Index/components}/Detail/index.module.less +0 -0
  62. /package/dist/{slots → pages/Index/components}/Features/FeatureCard.module.less +0 -0
  63. /package/dist/{slots → pages/Index/components}/Features/index.module.less +0 -0
@@ -9,7 +9,7 @@ import { get } from 'lodash-es';
9
9
  import React, { useContext } from 'react';
10
10
  import { ErrorBoundary } from 'react-error-boundary';
11
11
  import { ThemeAntVContext } from "../../context";
12
- import { CodeRunner } from "dumi/theme/slots/CodeRunner";
12
+ import CodeRunner from "dumi/theme/slots/CodeRunner";
13
13
  import styles from "./index.module.less";
14
14
  /**
15
15
  * Markdown 标签插件 Playground
@@ -0,0 +1,21 @@
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
+ import { useLayoutEffect, useState } from 'react';
8
+ var ClientOnly = function ClientOnly(_ref) {
9
+ var children = _ref.children,
10
+ _ref$fallback = _ref.fallback,
11
+ fallback = _ref$fallback === void 0 ? null : _ref$fallback;
12
+ var _useState = useState(false),
13
+ _useState2 = _slicedToArray(_useState, 2),
14
+ clientReady = _useState2[0],
15
+ setClientReady = _useState2[1];
16
+ useLayoutEffect(function () {
17
+ setClientReady(true);
18
+ }, []);
19
+ return clientReady ? children : fallback;
20
+ };
21
+ export default ClientOnly;
@@ -0,0 +1,85 @@
1
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
5
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
6
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
7
+ import { Helmet, useLocale, useSiteData } from 'dumi';
8
+ import { isEqual } from 'lodash-es';
9
+ import React, { useEffect } from 'react';
10
+ import { icWithLocale } from "../slots/hooks";
11
+ var CommonHelmet = function CommonHelmet(_ref) {
12
+ var titleSuffix = _ref.titleSuffix,
13
+ propTitle = _ref.title,
14
+ propDescription = _ref.description,
15
+ propMeta = _ref.meta;
16
+ var locale = useLocale();
17
+ var lang = locale.id;
18
+ var _useSiteData = useSiteData(),
19
+ metas = _useSiteData.themeConfig.metas;
20
+ var defaultTitle = icWithLocale(metas.title, lang);
21
+ var defaultDescription = icWithLocale(metas.description, lang);
22
+ var helmetData = React.useMemo(function () {
23
+ var title = propTitle || '';
24
+ var fullTitle = "".concat(title, " | ").concat(titleSuffix || defaultTitle);
25
+ var description = propDescription || defaultDescription;
26
+ var defaultMeta = [{
27
+ name: "description",
28
+ content: description
29
+ },
30
+ // Open Graph 标签,指定页面在社交媒体上的展示效果
31
+ {
32
+ property: "og:title",
33
+ content: title
34
+ }, {
35
+ property: "og:description",
36
+ content: description
37
+ }, {
38
+ property: "og:image",
39
+ content: 'https://gw.alipayobjects.com/zos/antfincdn/FLrTNDvlna/antv.png'
40
+ }, {
41
+ property: "og:type",
42
+ content: "website"
43
+ },
44
+ // Twitter 卡片
45
+ {
46
+ name: "twitter:card",
47
+ content: "summary"
48
+ }, {
49
+ name: "twitter:title",
50
+ content: title
51
+ }, {
52
+ name: "twitter:description",
53
+ content: description
54
+ }, {
55
+ property: "twitter:image",
56
+ content: 'https://gw.alipayobjects.com/zos/antfincdn/FLrTNDvlna/antv.png'
57
+ }];
58
+ return {
59
+ title: title,
60
+ description: description,
61
+ fullTitle: fullTitle,
62
+ defaultMeta: defaultMeta,
63
+ meta: [].concat(defaultMeta, _toConsumableArray(propMeta || []))
64
+ };
65
+ }, [propTitle, propDescription, titleSuffix, propMeta]);
66
+ useEffect(function () {
67
+ // 延迟 document.title 设置标题作为备份机制
68
+ var timer = setTimeout(function () {
69
+ document.title = helmetData.fullTitle;
70
+ }, 100);
71
+ return function () {
72
+ return clearTimeout(timer);
73
+ };
74
+ }, [helmetData.fullTitle]);
75
+ return /*#__PURE__*/React.createElement(Helmet, {
76
+ htmlAttributes: {
77
+ lang: lang
78
+ },
79
+ title: helmetData.fullTitle,
80
+ meta: helmetData.meta
81
+ });
82
+ };
83
+ export default /*#__PURE__*/React.memo(CommonHelmet, function (prevProps, nextProps) {
84
+ return prevProps.title === nextProps.title && prevProps.description === nextProps.description && prevProps.titleSuffix === nextProps.titleSuffix && isEqual(prevProps.meta, nextProps.meta);
85
+ });
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 只在组件进入视口(可见区域)时才会加载和渲染被包裹的懒加载组件
3
+ */
4
+ import { Skeleton } from 'antd';
5
+ import React, { Suspense } from 'react';
6
+ import { InView } from 'react-intersection-observer';
7
+ var InViewSuspense = function InViewSuspense(_ref) {
8
+ var children = _ref.children,
9
+ _ref$fallback = _ref.fallback,
10
+ fallback = _ref$fallback === void 0 ? /*#__PURE__*/React.createElement(Skeleton.Input, {
11
+ active: true,
12
+ size: "small"
13
+ }) : _ref$fallback,
14
+ _ref$delay = _ref.delay,
15
+ delay = _ref$delay === void 0 ? 200 : _ref$delay;
16
+ return /*#__PURE__*/React.createElement(InView, {
17
+ triggerOnce: true,
18
+ delay: delay
19
+ }, function (_ref2) {
20
+ var inView = _ref2.inView,
21
+ ref = _ref2.ref;
22
+ return /*#__PURE__*/React.createElement("div", {
23
+ ref: ref
24
+ }, /*#__PURE__*/React.createElement(Suspense, {
25
+ fallback: fallback
26
+ }, inView ? children : /*#__PURE__*/React.createElement("span", null)));
27
+ });
28
+ };
29
+ export default InViewSuspense;
@@ -0,0 +1,11 @@
1
+ import { useLocale as useDumiLocale } from 'dumi';
2
+ /**
3
+ * 获取国际化
4
+ */
5
+ var useLocale = function useLocale(localeMap) {
6
+ var _useDumiLocale = useDumiLocale(),
7
+ id = _useDumiLocale.id;
8
+ var localeType = id === 'zh' ? 'zh' : 'en';
9
+ return [localeMap === null || localeMap === void 0 ? void 0 : localeMap[localeType], localeType];
10
+ };
11
+ export default useLocale;
@@ -7,27 +7,20 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
7
7
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
8
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
9
9
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
10
- import { useFullSidebarData, useLocale, useLocation, useNavigate, useSiteData } from 'dumi';
10
+ import { useFullSidebarData, useLocale, useLocation, useSiteData } from 'dumi';
11
11
  import { get } from 'lodash-es';
12
- import React, { useMemo } from 'react';
12
+ import React, { useCallback, useMemo } from 'react';
13
13
  import Link from "../common/Link";
14
+ import { icWithLocale } from "../slots/hooks";
14
15
  import styles from "../slots/ManualContent/index.module.less";
15
16
  import { getBaseRoute } from "../slots/ManualContent/utils";
16
17
  import { flattenMenu } from "../utils/menu";
17
- export var useMenu = function useMenu() {
18
- var _navOf;
19
- var fullData = useFullSidebarData();
20
- var _useLocation = useLocation(),
21
- pathname = _useLocation.pathname;
22
- var _useSiteData = useSiteData(),
23
- _useSiteData$themeCon = _useSiteData.themeConfig,
24
- docs = _useSiteData$themeCon.docs,
25
- navs = _useSiteData$themeCon.navs;
26
- var baseRoute = getBaseRoute();
27
- var navigate = useNavigate();
28
- var locale = useLocale();
29
- var currentLocale = locale.id;
30
- var getMenuData = function getMenuData(fullData, rootList, hrefId) {
18
+
19
+ /**
20
+ * 根据 baseRoute 获取特定的菜单数据(纯函数)
21
+ */
22
+ export var getMenuData = function getMenuData(fullData, rootList, baseRoute, locale) {
23
+ var getMenuDataInternal = function getMenuDataInternal(fullData, rootList, hrefId) {
31
24
  var fullSidebarDataToMenuData = function fullSidebarDataToMenuData(rootList, hrefId, list) {
32
25
  // 递归
33
26
  rootList.forEach(function (item) {
@@ -37,7 +30,7 @@ export var useMenu = function useMenu() {
37
30
  if (id === hrefId) {
38
31
  list.push(_objectSpread(_objectSpread({}, item), {}, {
39
32
  key: href,
40
- label: item.title[currentLocale]
33
+ label: icWithLocale(item.title, locale)
41
34
  }));
42
35
  }
43
36
  }
@@ -46,32 +39,34 @@ export var useMenu = function useMenu() {
46
39
  _step;
47
40
  try {
48
41
  var _loop = function _loop() {
49
- var _fullData$item$key$0$;
50
42
  var item = _step.value;
51
43
  item.children = [];
52
44
  fullSidebarDataToMenuData(rootList, item.key, item.children);
53
- fullData[item.key] && ((_fullData$item$key$0$ = fullData[item.key][0].children) === null || _fullData$item$key$0$ === void 0 ? void 0 : _fullData$item$key$0$.forEach(function (itemChild) {
54
- var label = itemChild.title;
55
- var key = itemChild.link;
56
- var tag = get(itemChild, ['frontmatter', 'tag']);
57
- item.children.push(_objectSpread(_objectSpread({}, itemChild), {}, {
58
- label: tag ? /*#__PURE__*/React.createElement(Link, {
59
- to: key
60
- }, /*#__PURE__*/React.createElement("div", {
61
- className: styles.memuLabel
62
- }, label, /*#__PURE__*/React.createElement("div", {
63
- className: styles.tag
64
- }, tag))) : /*#__PURE__*/React.createElement(Link, {
65
- to: key
66
- }, label),
67
- key: key
68
- }));
69
- }));
45
+ if (fullData[item.key]) {
46
+ var _fullData$item$key$0$;
47
+ (_fullData$item$key$0$ = fullData[item.key][0].children) === null || _fullData$item$key$0$ === void 0 || _fullData$item$key$0$.forEach(function (itemChild) {
48
+ var label = itemChild.title;
49
+ var key = itemChild.link;
50
+ var tag = get(itemChild, ['frontmatter', 'tag']);
51
+ item.children.push(_objectSpread(_objectSpread({}, itemChild), {}, {
52
+ label: tag ? /*#__PURE__*/React.createElement(Link, {
53
+ to: key
54
+ }, /*#__PURE__*/React.createElement("div", {
55
+ className: styles.memuLabel
56
+ }, label, /*#__PURE__*/React.createElement("div", {
57
+ className: styles.tag
58
+ }, tag))) : /*#__PURE__*/React.createElement(Link, {
59
+ to: key
60
+ }, label),
61
+ key: key
62
+ }));
63
+ });
64
+ }
70
65
  // children 的 order 排序
71
66
  item.children.sort(function (a, b) {
72
67
  return a.order - b.order;
73
68
  });
74
- if (item.children.length == 0) delete item.children;
69
+ if (item.children.length === 0) delete item.children;
75
70
  };
76
71
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
77
72
  _loop();
@@ -82,17 +77,19 @@ export var useMenu = function useMenu() {
82
77
  _iterator.f();
83
78
  }
84
79
  if (hrefId === baseRoute) {
85
- var _fullData$baseRoute$;
86
- fullData[baseRoute] && ((_fullData$baseRoute$ = fullData[baseRoute][0].children) === null || _fullData$baseRoute$ === void 0 ? void 0 : _fullData$baseRoute$.forEach(function (itemChild) {
87
- var key = itemChild.link;
88
- var label = itemChild.title;
89
- list.push(_objectSpread(_objectSpread({}, itemChild), {}, {
90
- label: /*#__PURE__*/React.createElement(Link, {
91
- to: key
92
- }, label),
93
- key: key
94
- }));
95
- }));
80
+ if (fullData[baseRoute]) {
81
+ var _fullData$baseRoute$;
82
+ (_fullData$baseRoute$ = fullData[baseRoute][0].children) === null || _fullData$baseRoute$ === void 0 || _fullData$baseRoute$.forEach(function (itemChild) {
83
+ var key = itemChild.link;
84
+ var label = itemChild.title;
85
+ list.push(_objectSpread(_objectSpread({}, itemChild), {}, {
86
+ label: /*#__PURE__*/React.createElement(Link, {
87
+ to: key
88
+ }, label),
89
+ key: key
90
+ }));
91
+ });
92
+ }
96
93
  list.sort(function (a, b) {
97
94
  return a.order - b.order;
98
95
  });
@@ -101,36 +98,34 @@ export var useMenu = function useMenu() {
101
98
  };
102
99
  return fullSidebarDataToMenuData(rootList, hrefId, []);
103
100
  };
101
+ return getMenuDataInternal(fullData, rootList, baseRoute);
102
+ };
103
+
104
+ /**
105
+ * 通过 hooks 包装的 getMenuData
106
+ */
107
+ export var useMenuData = function useMenuData() {
108
+ var fullData = useFullSidebarData();
109
+ var _useSiteData = useSiteData(),
110
+ docs = _useSiteData.themeConfig.docs;
111
+ var locale = useLocale();
112
+ var getter = useCallback(function (baseRoute) {
113
+ return getMenuData(fullData, docs, baseRoute, locale.id);
114
+ }, [fullData, docs, locale.id]);
115
+ return getter;
116
+ };
117
+ export var useMenu = function useMenu() {
118
+ var _useLocation = useLocation(),
119
+ pathname = _useLocation.pathname;
120
+ var baseRoute = getBaseRoute(pathname);
121
+ var getMenuDataFn = useMenuData();
104
122
  var menuData = useMemo(function () {
105
- return getMenuData(fullData, docs, baseRoute);
106
- }, [docs, baseRoute, fullData]);
123
+ return getMenuDataFn(baseRoute);
124
+ }, [getMenuDataFn, baseRoute]);
107
125
 
108
126
  // 将菜单数据扁平化
109
127
  var flattedMenuData = useMemo(function () {
110
128
  return flattenMenu(menuData);
111
129
  }, [menuData]);
112
- var selectedKey = pathname;
113
-
114
- // Nav 跳转但不在菜单中,则选中第一个菜单项
115
- var navOf = function navOf(navs) {
116
- return navs.some(function (nav) {
117
- var _nav$slug;
118
- return (nav === null || nav === void 0 || (_nav$slug = nav.slug) === null || _nav$slug === void 0 ? void 0 : _nav$slug.replace('docs/', '/')) === pathname;
119
- });
120
- };
121
- var isNavLink = !!navOf(navs);
122
- var isExactLink = (_navOf = navOf(navs)) === null || _navOf === void 0 ? void 0 : _navOf.exact;
123
- var isLinkInMenu = flattedMenuData.some(function (item) {
124
- return item.link === pathname;
125
- });
126
- if (isNavLink && !isExactLink && !isLinkInMenu) {
127
- var firstValidMenuItem = flattedMenuData.find(function (item) {
128
- return item.link;
129
- });
130
- if (firstValidMenuItem) {
131
- navigate(firstValidMenuItem.link);
132
- selectedKey = firstValidMenuItem.link;
133
- }
134
- }
135
- return [menuData, selectedKey, flattedMenuData];
130
+ return [menuData, pathname, flattedMenuData];
136
131
  };
@@ -1,15 +1,15 @@
1
- import { useLocation, useOutlet, useSiteData } from 'dumi';
1
+ import { Helmet, useLocation, useOutlet, useSiteData } from 'dumi';
2
2
  import React, { useEffect } from 'react';
3
- import { getCurrentPathname } from "../slots/utils";
4
- import { Index } from "./entry/Index";
5
- import { Manual } from "./entry/Manual";
3
+ import { getPurePathname } from "../utils/location";
4
+ import IndexLayout from "./IndexLayout";
5
+ import ManualLayout from "./ManualLayout";
6
6
 
7
7
  // 用户手动添加自己的
8
8
  import "../slots/_.less";
9
9
  import "../slots/global";
10
10
 
11
11
  /**
12
- * DocuLayout 是 dumi2 的内置 layout 入口,在这里使用页面路径进行区分成自己不同的 Layout。
12
+ * DocLayout 是 dumi2 的内置 layout 入口,在这里使用页面路径进行区分成自己不同的 Layout。
13
13
  */
14
14
  export default (function () {
15
15
  var _useSiteData = useSiteData(),
@@ -22,8 +22,10 @@ export default (function () {
22
22
  console.log('%cAntV 让数据栩栩如生', 'color:#5B7102; font-size: 20px;'), console.log('%c新一代数据可视化解决方案', 'color:#5B7102;'), console.log('--------------------------'), console.log('%c关注我们的微信公众号 %c“数据可视化 AntV”%c,获取我们团队最新的进展、动态、分享,也欢迎加入我们!', 'color: red', 'color: pink', 'color: red');
23
23
  }, []);
24
24
  var outlet = useOutlet();
25
- var _useLocation = useLocation(),
26
- hash = _useLocation.hash;
25
+ var location = useLocation();
26
+ var pathname = location.pathname,
27
+ hash = location.hash;
28
+ var purePathname = getPurePathname(pathname);
27
29
 
28
30
  // 监听 hash 变更,跳转到锚点位置
29
31
  // 同时监听页面 loading 状态,因为路由按需加载时需要等待页面渲染完毕才能找到锚点位置
@@ -34,22 +36,29 @@ export default (function () {
34
36
  if (elm) document.documentElement.scrollTo(0, elm.offsetTop - 80);
35
37
  }
36
38
  }, [loading, hash]);
37
- var p = getCurrentPathname();
38
- // 首页
39
- if (p === '/' || p === '/zh' || p === '/en' || p === '/en/') return /*#__PURE__*/React.createElement(Index, null);
39
+ var content = React.useMemo(function () {
40
+ // 首页
41
+ if (['/', ''].includes(purePathname)) {
42
+ return /*#__PURE__*/React.createElement(IndexLayout, null, outlet);
43
+ }
40
44
 
41
- // 匹配 navs 中的 docs 路由
42
- var docsRoutes = navs.filter(function (nav) {
43
- return nav.slug && nav.slug.startsWith('docs/');
44
- }).map(function (nav) {
45
- return nav.slug && nav.slug.split('/').find(function (item) {
46
- return item !== 'docs';
45
+ // 匹配 navs 中的 docs 路由
46
+ var docsRoutes = navs.filter(function (nav) {
47
+ return nav.slug && nav.slug.startsWith('docs/');
48
+ }).map(function (nav) {
49
+ return nav.slug && nav.slug.split('/').find(function (item) {
50
+ return item !== 'docs';
51
+ });
47
52
  });
48
- });
49
- if (docsRoutes.some(function (route) {
50
- return p.startsWith("/".concat(route)) || p.startsWith("/docs/".concat(route));
51
- })) {
52
- return /*#__PURE__*/React.createElement(Manual, null, outlet);
53
- }
54
- return outlet;
53
+ if (docsRoutes.some(function (slug) {
54
+ return purePathname.startsWith("/".concat(slug)) || purePathname.startsWith("/docs/".concat(slug));
55
+ })) {
56
+ return /*#__PURE__*/React.createElement(ManualLayout, null, outlet);
57
+ }
58
+ return outlet;
59
+ }, [purePathname]);
60
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Helmet, null, /*#__PURE__*/React.createElement("link", {
61
+ rel: "shortcut icon",
62
+ href: "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*7svFR6wkPMoAAAAAAAAAAAAADmJ7AQ/original"
63
+ })), content);
55
64
  });
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import Footer from "dumi/theme/slots/Footer";
3
+ import Header from "dumi/theme/slots/Header";
4
+
5
+ /**
6
+ * 首页布局
7
+ */
8
+ var IndexLayout = function IndexLayout(props) {
9
+ var children = props.children;
10
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Header, null), /*#__PURE__*/React.createElement("div", {
11
+ style: {
12
+ minHeight: '100vh'
13
+ }
14
+ }, children), /*#__PURE__*/React.createElement(Footer, null));
15
+ };
16
+ export default IndexLayout;
@@ -1,17 +1,17 @@
1
1
  import React from 'react';
2
- import SEO from "../../common/SEO";
3
- import { Footer } from "dumi/theme/slots/Footer";
4
- import { Header } from "dumi/theme/slots/Header";
2
+ import Footer from "dumi/theme/slots/Footer";
3
+ import Header from "dumi/theme/slots/Header";
5
4
  import { ManualContent } from "dumi/theme/slots/ManualContent";
6
5
 
7
6
  /**
8
7
  * Manual 路由下的入口
9
8
  */
10
- export var Manual = function Manual(_ref) {
9
+ var ManualLayout = function ManualLayout(_ref) {
11
10
  var children = _ref.children;
12
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SEO, null), /*#__PURE__*/React.createElement(Header, {
11
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Header, {
13
12
  isHomePage: false
14
13
  }), /*#__PURE__*/React.createElement(ManualContent, null, children), /*#__PURE__*/React.createElement(Footer, {
15
14
  isDynamicFooter: true
16
15
  }));
17
- };
16
+ };
17
+ export default ManualLayout;
package/dist/pages/404.js CHANGED
@@ -1,13 +1,14 @@
1
1
  import React from 'react';
2
- import SEO from "../common/SEO";
2
+ import CommonHelmet from "../common/CommonHelmet";
3
3
  import { NotFound as NotFoundPage } from "dumi/theme/slots/404";
4
- import { Footer } from "dumi/theme/slots/Footer";
5
- import { Header } from "dumi/theme/slots/Header";
4
+ import Footer from "dumi/theme/slots/Footer";
5
+ import Header from "dumi/theme/slots/Header";
6
+
6
7
  /**
7
8
  * 404 页面
8
9
  */
9
10
  var NotFound = function NotFound() {
10
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SEO, {
11
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CommonHelmet, {
11
12
  title: "404: Not found"
12
13
  }), /*#__PURE__*/React.createElement(Header, {
13
14
  isHomePage: false