dumi 2.3.0-alpha.0 → 2.3.0-alpha.2
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.
- package/dist/client/theme-api/context/index.d.ts +2 -1
- package/dist/client/theme-api/context/index.js +2 -1
- package/dist/client/theme-api/context/use.d.ts +3 -0
- package/dist/client/theme-api/context/use.js +3 -0
- package/dist/client/theme-api/useSiteSearch/index.js +31 -13
- package/dist/client/theme-api/useSiteSearch/useSearchData.d.ts +9 -0
- package/dist/client/theme-api/useSiteSearch/useSearchData.js +76 -0
- package/dist/features/exports.js +2 -1
- package/dist/features/meta.js +8 -0
- package/dist/templates/ContextWrapper.ts.tpl +3 -0
- package/dist/templates/meta-search.ts.tpl +43 -0
- package/index.d.ts +3 -0
- package/package.json +1 -1
- package/theme-default/locales/en-US.json +1 -0
- package/theme-default/locales/zh-CN.json +1 -0
- package/theme-default/slots/SearchBar/index.js +3 -3
- package/theme-default/slots/SearchResult/index.js +34 -22
- package/dist/templates/meta.ts.tpl +0 -23
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { PICKED_PKG_FIELDS } from "../../../constants";
|
|
2
2
|
import type { AtomComponentAsset } from 'dumi-assets-types';
|
|
3
3
|
import { type ComponentType } from 'react';
|
|
4
|
-
import type { ILocalesConfig, IPreviewerProps, IThemeConfig } from '../types';
|
|
4
|
+
import type { ILocalesConfig, IPreviewerProps, IRouteMeta, IThemeConfig } from '../types';
|
|
5
5
|
export type DemoInfo = {
|
|
6
6
|
component: ComponentType;
|
|
7
7
|
asset: IPreviewerProps['asset'];
|
|
@@ -13,6 +13,7 @@ interface ISiteContext {
|
|
|
13
13
|
entryExports: Record<string, any>;
|
|
14
14
|
demos: Record<string, DemoInfo>;
|
|
15
15
|
components: Record<string, AtomComponentAsset>;
|
|
16
|
+
tabs: IRouteMeta['tabs'];
|
|
16
17
|
locales: ILocalesConfig;
|
|
17
18
|
themeConfig: IThemeConfig;
|
|
18
19
|
hostname?: string;
|
|
@@ -10,11 +10,11 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
10
10
|
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; }
|
|
11
11
|
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
12
12
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
13
|
-
import { useNavData
|
|
13
|
+
import { useNavData } from 'dumi';
|
|
14
14
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
15
|
-
import { useLocaleDocRoutes } from "../utils";
|
|
16
15
|
// @ts-ignore
|
|
17
16
|
import workerCode from '-!../../../../compiled/_internal/searchWorker.min?dumi-raw';
|
|
17
|
+
import useSearchData from "./useSearchData";
|
|
18
18
|
var worker;
|
|
19
19
|
|
|
20
20
|
// for ssr
|
|
@@ -26,9 +26,8 @@ if (typeof window !== 'undefined') {
|
|
|
26
26
|
}
|
|
27
27
|
export var useSiteSearch = function useSiteSearch() {
|
|
28
28
|
var debounceTimer = useRef();
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
demos = _useSiteData.demos;
|
|
29
|
+
// const routes = useLocaleDocRoutes();
|
|
30
|
+
// const { demos } = useSiteData();
|
|
32
31
|
var _useState = useState(false),
|
|
33
32
|
_useState2 = _slicedToArray(_useState, 2),
|
|
34
33
|
loading = _useState2[0],
|
|
@@ -37,15 +36,27 @@ export var useSiteSearch = function useSiteSearch() {
|
|
|
37
36
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
38
37
|
keywords = _useState4[0],
|
|
39
38
|
setKeywords = _useState4[1];
|
|
40
|
-
var
|
|
41
|
-
var _useState5 = useState([]),
|
|
39
|
+
var _useState5 = useState(false),
|
|
42
40
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
enabled = _useState6[0],
|
|
42
|
+
setEnabled = _useState6[1];
|
|
43
|
+
var navData = useNavData();
|
|
44
|
+
var _useState7 = useState([]),
|
|
45
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
46
|
+
result = _useState8[0],
|
|
47
|
+
setResult = _useState8[1];
|
|
45
48
|
var setter = useCallback(function (val) {
|
|
46
49
|
setLoading(true);
|
|
47
50
|
setKeywords(val);
|
|
51
|
+
if (val) {
|
|
52
|
+
setEnabled(true);
|
|
53
|
+
}
|
|
48
54
|
}, []);
|
|
55
|
+
var _useSearchData = useSearchData(enabled),
|
|
56
|
+
_useSearchData2 = _slicedToArray(_useSearchData, 2),
|
|
57
|
+
filledRoutes = _useSearchData2[0],
|
|
58
|
+
demos = _useSearchData2[1];
|
|
59
|
+
var mergedLoading = loading || !filledRoutes;
|
|
49
60
|
useEffect(function () {
|
|
50
61
|
worker.onmessage = function (e) {
|
|
51
62
|
setResult(e.data);
|
|
@@ -53,6 +64,10 @@ export var useSiteSearch = function useSiteSearch() {
|
|
|
53
64
|
};
|
|
54
65
|
}, []);
|
|
55
66
|
useEffect(function () {
|
|
67
|
+
if (!filledRoutes || !demos) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
|
|
56
71
|
// omit demo component for postmessage
|
|
57
72
|
var demoData = Object.entries(demos).reduce(function (acc, _ref) {
|
|
58
73
|
var _ref2 = _slicedToArray(_ref, 2),
|
|
@@ -68,13 +83,16 @@ export var useSiteSearch = function useSiteSearch() {
|
|
|
68
83
|
worker.postMessage({
|
|
69
84
|
action: 'generate-metadata',
|
|
70
85
|
args: {
|
|
71
|
-
routes: JSON.parse(JSON.stringify(
|
|
86
|
+
routes: JSON.parse(JSON.stringify(filledRoutes)),
|
|
72
87
|
nav: navData,
|
|
73
88
|
demos: demoData
|
|
74
89
|
}
|
|
75
90
|
});
|
|
76
|
-
}, [
|
|
91
|
+
}, [demos, navData, filledRoutes]);
|
|
77
92
|
useEffect(function () {
|
|
93
|
+
if (!filledRoutes) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
78
96
|
var str = keywords.trim();
|
|
79
97
|
if (str) {
|
|
80
98
|
clearTimeout(debounceTimer.current);
|
|
@@ -89,11 +107,11 @@ export var useSiteSearch = function useSiteSearch() {
|
|
|
89
107
|
} else {
|
|
90
108
|
setResult([]);
|
|
91
109
|
}
|
|
92
|
-
}, [keywords]);
|
|
110
|
+
}, [keywords, filledRoutes]);
|
|
93
111
|
return {
|
|
94
112
|
keywords: keywords,
|
|
95
113
|
setKeywords: setter,
|
|
96
114
|
result: result,
|
|
97
|
-
loading:
|
|
115
|
+
loading: mergedLoading
|
|
98
116
|
};
|
|
99
117
|
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DemoInfo } from '../context';
|
|
2
|
+
import { useLocaleDocRoutes } from '../utils';
|
|
3
|
+
type Demos = Record<string, DemoInfo>;
|
|
4
|
+
type ReturnData = [
|
|
5
|
+
routes: ReturnType<typeof useLocaleDocRoutes> | null,
|
|
6
|
+
demo: Demos | null
|
|
7
|
+
];
|
|
8
|
+
export default function useSearchData(enabled: boolean): ReturnData;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
+
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; }
|
|
5
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
6
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
7
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
8
|
+
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."); }
|
|
9
|
+
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); }
|
|
10
|
+
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; }
|
|
11
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
12
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
13
|
+
import { loadFilesMeta, useSiteData } from 'dumi';
|
|
14
|
+
import React from 'react';
|
|
15
|
+
import { useLocaleDocRoutes } from "../utils";
|
|
16
|
+
export default function useSearchData(enabled) {
|
|
17
|
+
var routes = useLocaleDocRoutes();
|
|
18
|
+
var _React$useState = React.useState(null),
|
|
19
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
20
|
+
filesMeta = _React$useState2[0],
|
|
21
|
+
setFilesMeta = _React$useState2[1];
|
|
22
|
+
var _useSiteData = useSiteData(),
|
|
23
|
+
tabs = _useSiteData.tabs;
|
|
24
|
+
React.useEffect(function () {
|
|
25
|
+
if (enabled) {
|
|
26
|
+
loadFilesMeta().then(function (data) {
|
|
27
|
+
setFilesMeta(data);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}, [enabled]);
|
|
31
|
+
return React.useMemo(function () {
|
|
32
|
+
if (!filesMeta) {
|
|
33
|
+
return [null, null];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Route Meta
|
|
37
|
+
var mergedRoutes = {};
|
|
38
|
+
Object.keys(routes).forEach(function (routeId) {
|
|
39
|
+
mergedRoutes[routeId] = _objectSpread({}, routes[routeId]);
|
|
40
|
+
|
|
41
|
+
// Fill routes meta
|
|
42
|
+
if (mergedRoutes[routeId].meta) {
|
|
43
|
+
var _mergedRoutes$routeId;
|
|
44
|
+
mergedRoutes[routeId].meta = _objectSpread(_objectSpread(_objectSpread({}, mergedRoutes[routeId].meta), filesMeta[routeId]), {}, {
|
|
45
|
+
tabs: (_mergedRoutes$routeId = mergedRoutes[routeId].tabs) === null || _mergedRoutes$routeId === void 0 ? void 0 : _mergedRoutes$routeId.map(function (id) {
|
|
46
|
+
var meta = {
|
|
47
|
+
frontmatter: {
|
|
48
|
+
title: tabs[id].title
|
|
49
|
+
},
|
|
50
|
+
toc: [],
|
|
51
|
+
texts: []
|
|
52
|
+
};
|
|
53
|
+
return _objectSpread(_objectSpread({}, tabs[id]), {}, {
|
|
54
|
+
meta: filesMeta[id] || meta
|
|
55
|
+
});
|
|
56
|
+
})
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// Demos
|
|
62
|
+
var demos = Object.entries(filesMeta).reduce(function (acc, _ref) {
|
|
63
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
64
|
+
id = _ref2[0],
|
|
65
|
+
meta = _ref2[1];
|
|
66
|
+
// append route id to demo
|
|
67
|
+
Object.values(meta.demos).forEach(function (demo) {
|
|
68
|
+
demo.routeId = id;
|
|
69
|
+
});
|
|
70
|
+
// merge demos
|
|
71
|
+
Object.assign(acc, meta.demos);
|
|
72
|
+
return acc;
|
|
73
|
+
}, {});
|
|
74
|
+
return [mergedRoutes, demos];
|
|
75
|
+
}, [filesMeta, routes, tabs]);
|
|
76
|
+
}
|
package/dist/features/exports.js
CHANGED
|
@@ -45,7 +45,8 @@ var exports_default = (api) => {
|
|
|
45
45
|
path: "dumi/exports.ts",
|
|
46
46
|
content: `export * from '../exports';
|
|
47
47
|
export * from '${(0, import_plugin_utils.winPath)(require.resolve("../client/theme-api"))}';
|
|
48
|
-
export { getRouteMetaById } from './meta/route-meta'
|
|
48
|
+
export { getRouteMetaById } from './meta/route-meta';
|
|
49
|
+
export { loadFilesMeta } from './meta/search';`
|
|
49
50
|
});
|
|
50
51
|
});
|
|
51
52
|
};
|
package/dist/features/meta.js
CHANGED
|
@@ -71,6 +71,14 @@ var meta_default = (api) => {
|
|
|
71
71
|
key: "dumi.modifyMetaFiles",
|
|
72
72
|
initialValue: JSON.parse(JSON.stringify(metaFiles))
|
|
73
73
|
});
|
|
74
|
+
api.writeTmpFile({
|
|
75
|
+
noPluginDir: true,
|
|
76
|
+
path: "dumi/meta/search.ts",
|
|
77
|
+
tplPath: (0, import_plugin_utils.winPath)((0, import_path.join)(import_constants.TEMPLATES_DIR, "meta-search.ts.tpl")),
|
|
78
|
+
context: {
|
|
79
|
+
metaFiles: parsedMetaFiles
|
|
80
|
+
}
|
|
81
|
+
});
|
|
74
82
|
api.writeTmpFile({
|
|
75
83
|
noPluginDir: true,
|
|
76
84
|
path: "dumi/meta/frontmatter.ts",
|
|
@@ -3,6 +3,7 @@ import { useOutlet, history } from 'dumi';
|
|
|
3
3
|
import { warning } from 'rc-util';
|
|
4
4
|
import { SiteContext, type ISiteContext } from '{{{contextPath}}}';
|
|
5
5
|
import { components } from '../meta/atoms';
|
|
6
|
+
import { tabs } from '../meta/tabs';
|
|
6
7
|
import { getDemoById } from '../meta/demos';
|
|
7
8
|
import { locales } from '../locales/config';
|
|
8
9
|
{{{defaultExport}}}
|
|
@@ -47,6 +48,7 @@ export default function DumiContextWrapper() {
|
|
|
47
48
|
entryExports,
|
|
48
49
|
demos: null,
|
|
49
50
|
components,
|
|
51
|
+
tabs,
|
|
50
52
|
locales,
|
|
51
53
|
loading,
|
|
52
54
|
setLoading,
|
|
@@ -70,6 +72,7 @@ export default function DumiContextWrapper() {
|
|
|
70
72
|
historyType,
|
|
71
73
|
entryExports,
|
|
72
74
|
components,
|
|
75
|
+
tabs,
|
|
73
76
|
locales,
|
|
74
77
|
loading,
|
|
75
78
|
setLoading,
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// This will bundle all the site demos and meta data into one file
|
|
2
|
+
// which should only async load on search
|
|
3
|
+
const filesMetaTabs = {
|
|
4
|
+
{{#metaFiles}}
|
|
5
|
+
{{#tabs}}
|
|
6
|
+
'{{{id}}}': {{{tabs}}},
|
|
7
|
+
{{/tabs}}
|
|
8
|
+
{{/metaFiles}}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// generate demos data in runtime, for reuse route.id to reduce bundle size
|
|
12
|
+
export const demos = {};
|
|
13
|
+
|
|
14
|
+
/** @private Internal usage. Safe to refactor. */
|
|
15
|
+
export async function loadFilesMeta() {
|
|
16
|
+
const metaMap: Record<string, any> = {};
|
|
17
|
+
const idList = [
|
|
18
|
+
{{#metaFiles}}
|
|
19
|
+
'{{{id}}}',
|
|
20
|
+
{{/metaFiles}}
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
{{#metaFiles}}
|
|
24
|
+
metaMap['{{{id}}}'] = import('{{{file}}}?type=meta');
|
|
25
|
+
{{/metaFiles}}
|
|
26
|
+
|
|
27
|
+
// Wait for all meta data to be loaded
|
|
28
|
+
const metaList = await Promise.all(idList.map(id => metaMap[id]));
|
|
29
|
+
|
|
30
|
+
// Merge into filesMeta
|
|
31
|
+
const filesMeta = {};
|
|
32
|
+
|
|
33
|
+
idList.forEach((id, index) => {
|
|
34
|
+
const meta = metaList[index];
|
|
35
|
+
|
|
36
|
+
filesMeta[id] = {
|
|
37
|
+
...meta,
|
|
38
|
+
tabs: filesMetaTabs[id],
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
return filesMeta;
|
|
43
|
+
}
|
package/index.d.ts
CHANGED
|
@@ -9,3 +9,6 @@ export * from './dist';
|
|
|
9
9
|
export { defineConfig } from './dist';
|
|
10
10
|
export * from './dist/client/theme-api';
|
|
11
11
|
export { IApi } from './dist/types';
|
|
12
|
+
export function getRouteMetaById(id: string): Promise<any>;
|
|
13
|
+
/** @private Internal usage. Safe to remove */
|
|
14
|
+
export function loadFilesMeta(): Promise<any>;
|
package/package.json
CHANGED
|
@@ -9,11 +9,11 @@ import { ReactComponent as IconArrowDown } from '@ant-design/icons-svg/inline-sv
|
|
|
9
9
|
import { ReactComponent as IconArrowUp } from '@ant-design/icons-svg/inline-svg/outlined/arrow-up.svg';
|
|
10
10
|
import { ReactComponent as IconSearch } from '@ant-design/icons-svg/inline-svg/outlined/search.svg';
|
|
11
11
|
import { useSiteSearch } from 'dumi';
|
|
12
|
-
import React, { useEffect, useRef, useState } from 'react';
|
|
13
12
|
import SearchResult from 'dumi/theme/slots/SearchResult';
|
|
14
|
-
import
|
|
13
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
15
14
|
import { Input } from "./Input";
|
|
16
15
|
import { Mask } from "./Mask";
|
|
16
|
+
import "./index.less";
|
|
17
17
|
export { Input as SearchInput } from "./Input";
|
|
18
18
|
export { Mask as SearchMask } from "./Mask";
|
|
19
19
|
var isAppleDevice = /(mac|iphone|ipod|ipad)/i.test(typeof navigator !== 'undefined' ? (_navigator = navigator) === null || _navigator === void 0 ? void 0 : _navigator.platform : '');
|
|
@@ -100,7 +100,7 @@ var SearchBar = function SearchBar() {
|
|
|
100
100
|
ref: inputRef
|
|
101
101
|
}), /*#__PURE__*/React.createElement("span", {
|
|
102
102
|
className: "dumi-default-search-shortcut"
|
|
103
|
-
}, symbol, " K"), keywords.trim() && focusing &&
|
|
103
|
+
}, symbol, " K"), keywords.trim() && focusing && !modalVisible && /*#__PURE__*/React.createElement("div", {
|
|
104
104
|
className: "dumi-default-search-popover"
|
|
105
105
|
}, /*#__PURE__*/React.createElement("section", null, /*#__PURE__*/React.createElement(SearchResult, {
|
|
106
106
|
data: result,
|
|
@@ -123,6 +123,39 @@ var SearchResult = function SearchResult(props) {
|
|
|
123
123
|
return document.removeEventListener('keydown', handler);
|
|
124
124
|
};
|
|
125
125
|
});
|
|
126
|
+
var returnNode = null;
|
|
127
|
+
if (props.loading) {
|
|
128
|
+
returnNode = /*#__PURE__*/React.createElement("div", {
|
|
129
|
+
className: "dumi-default-search-empty"
|
|
130
|
+
}, /*#__PURE__*/React.createElement(IconInbox, null), /*#__PURE__*/React.createElement(FormattedMessage, {
|
|
131
|
+
id: "search.loading"
|
|
132
|
+
}));
|
|
133
|
+
} else if (props.data.length) {
|
|
134
|
+
returnNode = /*#__PURE__*/React.createElement("dl", null, data.map(function (item, i) {
|
|
135
|
+
return item.type === 'title' ? /*#__PURE__*/React.createElement("dt", {
|
|
136
|
+
key: String(i)
|
|
137
|
+
}, item.value.title) : /*#__PURE__*/React.createElement("dd", {
|
|
138
|
+
key: String(i)
|
|
139
|
+
}, /*#__PURE__*/React.createElement(Link, {
|
|
140
|
+
to: item.value.link,
|
|
141
|
+
"data-active": activeIndex === item.activeIndex || undefined,
|
|
142
|
+
onClick: function onClick() {
|
|
143
|
+
var _props$onItemSelect2;
|
|
144
|
+
return (_props$onItemSelect2 = props.onItemSelect) === null || _props$onItemSelect2 === void 0 ? void 0 : _props$onItemSelect2.call(props, item.value);
|
|
145
|
+
}
|
|
146
|
+
}, /*#__PURE__*/React.createElement(ICONS_MAPPING[item.value.type]), /*#__PURE__*/React.createElement("h4", null, /*#__PURE__*/React.createElement(Highlight, {
|
|
147
|
+
texts: item.value.highlightTitleTexts
|
|
148
|
+
})), /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement(Highlight, {
|
|
149
|
+
texts: item.value.highlightTexts
|
|
150
|
+
}))));
|
|
151
|
+
}));
|
|
152
|
+
} else {
|
|
153
|
+
returnNode = /*#__PURE__*/React.createElement("div", {
|
|
154
|
+
className: "dumi-default-search-empty"
|
|
155
|
+
}, /*#__PURE__*/React.createElement(IconInbox, null), /*#__PURE__*/React.createElement(FormattedMessage, {
|
|
156
|
+
id: "search.not.found"
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
126
159
|
return /*#__PURE__*/React.createElement("div", {
|
|
127
160
|
className: "dumi-default-search-result",
|
|
128
161
|
onMouseEnter: function onMouseEnter() {
|
|
@@ -136,27 +169,6 @@ var SearchResult = function SearchResult(props) {
|
|
|
136
169
|
onMouseUpCapture: function onMouseUpCapture() {
|
|
137
170
|
document.activeElement.blur();
|
|
138
171
|
}
|
|
139
|
-
},
|
|
140
|
-
return item.type === 'title' ? /*#__PURE__*/React.createElement("dt", {
|
|
141
|
-
key: String(i)
|
|
142
|
-
}, item.value.title) : /*#__PURE__*/React.createElement("dd", {
|
|
143
|
-
key: String(i)
|
|
144
|
-
}, /*#__PURE__*/React.createElement(Link, {
|
|
145
|
-
to: item.value.link,
|
|
146
|
-
"data-active": activeIndex === item.activeIndex || undefined,
|
|
147
|
-
onClick: function onClick() {
|
|
148
|
-
var _props$onItemSelect2;
|
|
149
|
-
return (_props$onItemSelect2 = props.onItemSelect) === null || _props$onItemSelect2 === void 0 ? void 0 : _props$onItemSelect2.call(props, item.value);
|
|
150
|
-
}
|
|
151
|
-
}, /*#__PURE__*/React.createElement(ICONS_MAPPING[item.value.type]), /*#__PURE__*/React.createElement("h4", null, /*#__PURE__*/React.createElement(Highlight, {
|
|
152
|
-
texts: item.value.highlightTitleTexts
|
|
153
|
-
})), /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement(Highlight, {
|
|
154
|
-
texts: item.value.highlightTexts
|
|
155
|
-
}))));
|
|
156
|
-
})) : /*#__PURE__*/React.createElement("div", {
|
|
157
|
-
className: "dumi-default-search-empty"
|
|
158
|
-
}, /*#__PURE__*/React.createElement(IconInbox, null), /*#__PURE__*/React.createElement(FormattedMessage, {
|
|
159
|
-
id: "search.not.found"
|
|
160
|
-
})));
|
|
172
|
+
}, returnNode);
|
|
161
173
|
};
|
|
162
174
|
export default SearchResult;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{{#metaFiles}}
|
|
2
|
-
import { frontmatter as fm{{{index}}}, toc as toc{{{index}}} } from '{{{file}}}?type=meta';
|
|
3
|
-
{{/metaFiles}}
|
|
4
|
-
|
|
5
|
-
export { components } from './atoms';
|
|
6
|
-
export { tabs } from './tabs';
|
|
7
|
-
|
|
8
|
-
export const filesMeta = {
|
|
9
|
-
{{#metaFiles}}
|
|
10
|
-
'{{{id}}}': {
|
|
11
|
-
frontmatter: fm{{{index}}},
|
|
12
|
-
toc: toc{{{index}}},
|
|
13
|
-
texts: [],
|
|
14
|
-
demos: {},
|
|
15
|
-
{{#tabs}}
|
|
16
|
-
tabs: {{{tabs}}},
|
|
17
|
-
{{/tabs}}
|
|
18
|
-
},
|
|
19
|
-
{{/metaFiles}}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// generate demos data in runtime, for reuse route.id to reduce bundle size
|
|
23
|
-
export const demos = {};
|