@blocklet/ui-react 2.1.53 → 2.1.56
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/lib/Header/index.js +20 -13
- package/package.json +4 -4
- package/src/Header/index.js +24 -9
package/lib/Header/index.js
CHANGED
|
@@ -7,6 +7,8 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
|
|
10
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
|
|
10
12
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
13
|
|
|
12
14
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
@@ -43,9 +45,7 @@ var _utils = require("../utils");
|
|
|
43
45
|
|
|
44
46
|
var _blocklets = require("../blocklets");
|
|
45
47
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const _excluded = ["meta", "addons", "sessionManagerProps"];
|
|
48
|
+
const _excluded = ["meta", "addons", "sessionManagerProps", "homeLink"];
|
|
49
49
|
|
|
50
50
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
51
51
|
|
|
@@ -128,7 +128,8 @@ function Header(_ref) {
|
|
|
128
128
|
let {
|
|
129
129
|
meta,
|
|
130
130
|
addons,
|
|
131
|
-
sessionManagerProps
|
|
131
|
+
sessionManagerProps,
|
|
132
|
+
homeLink
|
|
132
133
|
} = _ref,
|
|
133
134
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
134
135
|
|
|
@@ -159,15 +160,16 @@ function Header(_ref) {
|
|
|
159
160
|
enableLocale = true
|
|
160
161
|
} = formattedBlocklet;
|
|
161
162
|
const navigation = (0, _blocklets.getLocalizedNavigation)(formattedBlocklet === null || formattedBlocklet === void 0 ? void 0 : (_formattedBlocklet$na = formattedBlocklet.navigation) === null || _formattedBlocklet$na === void 0 ? void 0 : _formattedBlocklet$na.header, locale);
|
|
163
|
+
const parsedNavigation = parseNavigation(navigation);
|
|
162
164
|
const {
|
|
163
165
|
navItems,
|
|
164
166
|
activeId
|
|
165
|
-
} =
|
|
167
|
+
} = parsedNavigation;
|
|
166
168
|
|
|
167
169
|
const renderAddons = () => {
|
|
168
170
|
// 不关心内置的 session manager 和 locale selector, 直接覆盖 UX Header 的 addons
|
|
169
171
|
if (addons && typeof addons !== 'function') {
|
|
170
|
-
return addons;
|
|
172
|
+
return Array.isArray(addons) ? addons : [addons];
|
|
171
173
|
}
|
|
172
174
|
|
|
173
175
|
let addonsArray = []; // 启用了多语言并且检测到了 locale context
|
|
@@ -187,18 +189,21 @@ function Header(_ref) {
|
|
|
187
189
|
|
|
188
190
|
|
|
189
191
|
if (typeof addons === 'function') {
|
|
190
|
-
addonsArray = addons(addonsArray
|
|
192
|
+
addonsArray = addons(addonsArray, {
|
|
193
|
+
navigation: parsedNavigation
|
|
194
|
+
}) || [];
|
|
191
195
|
}
|
|
192
196
|
|
|
193
|
-
|
|
194
|
-
return addonsFragment;
|
|
197
|
+
return addonsArray;
|
|
195
198
|
};
|
|
196
199
|
|
|
200
|
+
const renderedAddons = renderAddons();
|
|
201
|
+
const addonList = /*#__PURE__*/(0, _react.createElement)(_jsxRuntime.Fragment, null, ...(Array.isArray(renderedAddons) ? renderedAddons : [renderedAddons]));
|
|
197
202
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_styles.ThemeProvider, {
|
|
198
203
|
theme: muiTheme,
|
|
199
204
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledUxHeader, _objectSpread(_objectSpread({
|
|
200
205
|
logo: /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
|
|
201
|
-
href:
|
|
206
|
+
href: homeLink,
|
|
202
207
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
|
|
203
208
|
src: appLogo,
|
|
204
209
|
alt: "logo"
|
|
@@ -218,7 +223,7 @@ function Header(_ref) {
|
|
|
218
223
|
}),
|
|
219
224
|
children: did
|
|
220
225
|
}) : null,
|
|
221
|
-
addons:
|
|
226
|
+
addons: addonList
|
|
222
227
|
}, rest), {}, {
|
|
223
228
|
$bgcolor: theme === null || theme === void 0 ? void 0 : (_theme$background = theme.background) === null || _theme$background === void 0 ? void 0 : _theme$background.header,
|
|
224
229
|
$theme: muiTheme,
|
|
@@ -245,14 +250,16 @@ Header.propTypes = {
|
|
|
245
250
|
// - PropTypes.func: 可以把自定义 addons 插在 session-manager 或 locale-selector (如果存在的话) 前/中/后
|
|
246
251
|
// - PropTypes.node: 将 addons 原样传给 UX Header 组件
|
|
247
252
|
addons: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.node]),
|
|
248
|
-
sessionManagerProps: _types.sessionManagerProps
|
|
253
|
+
sessionManagerProps: _types.sessionManagerProps,
|
|
254
|
+
homeLink: _propTypes.default.string
|
|
249
255
|
};
|
|
250
256
|
Header.defaultProps = {
|
|
251
257
|
meta: {},
|
|
252
258
|
addons: null,
|
|
253
259
|
sessionManagerProps: {
|
|
254
260
|
showRole: true
|
|
255
|
-
}
|
|
261
|
+
},
|
|
262
|
+
homeLink: _blocklets.publicPath
|
|
256
263
|
};
|
|
257
264
|
const StyledUxHeader = (0, _styledComponents.default)(_Header.ResponsiveHeader).withConfig({
|
|
258
265
|
displayName: "Header__StyledUxHeader",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blocklet/ui-react",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.56",
|
|
4
4
|
"description": "Some useful front-end web components that can be used in Blocklets.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
"url": "https://github.com/ArcBlock/ux/issues"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@arcblock/did-connect": "^2.1.
|
|
38
|
-
"@arcblock/ux": "^2.1.
|
|
37
|
+
"@arcblock/did-connect": "^2.1.56",
|
|
38
|
+
"@arcblock/ux": "^2.1.56",
|
|
39
39
|
"@iconify/iconify": "^2.2.1",
|
|
40
40
|
"@mui/material": "^5.6.4",
|
|
41
41
|
"core-js": "^3.6.4",
|
|
@@ -57,5 +57,5 @@
|
|
|
57
57
|
"eslint-plugin-react-hooks": "^4.2.0",
|
|
58
58
|
"jest": "^24.1.0"
|
|
59
59
|
},
|
|
60
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "5a8e5ecc8cad24b64ef38558457b32657e18ef44"
|
|
61
61
|
}
|
package/src/Header/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { useContext,
|
|
1
|
+
import { useContext, useMemo, createElement } from 'react';
|
|
2
|
+
// FIXME: 直接从 react 中 import Fragment 可能会在 vite 下出错,先暂时从 react/jsx-runtime 导入 Fragment 来跳过这个问题
|
|
3
|
+
import { Fragment } from 'react/jsx-runtime';
|
|
2
4
|
import PropTypes from 'prop-types';
|
|
3
5
|
import styled from 'styled-components';
|
|
4
6
|
import { ThemeProvider } from '@mui/material/styles';
|
|
@@ -65,7 +67,7 @@ const parseNavigation = (navigation) => {
|
|
|
65
67
|
* 专门用于 (composable) blocklet 的 Header 组件, 解析 blocklet meta 中的数据, 通过组合 UX 中的 Header & NavMenu 组件来渲染
|
|
66
68
|
*/
|
|
67
69
|
// eslint-disable-next-line no-shadow
|
|
68
|
-
function Header({ meta, addons, sessionManagerProps, ...rest }) {
|
|
70
|
+
function Header({ meta, addons, sessionManagerProps, homeLink, ...rest }) {
|
|
69
71
|
const sessionInfo = useContext(SessionContext);
|
|
70
72
|
const { locale } = useLocaleContext() || {};
|
|
71
73
|
const blocklet = Object.assign({}, window.blocklet, meta);
|
|
@@ -83,12 +85,13 @@ function Header({ meta, addons, sessionManagerProps, ...rest }) {
|
|
|
83
85
|
}
|
|
84
86
|
const { did, appLogo, appName, theme, enableConnect = true, enableLocale = true } = formattedBlocklet;
|
|
85
87
|
const navigation = getLocalizedNavigation(formattedBlocklet?.navigation?.header, locale);
|
|
86
|
-
const
|
|
88
|
+
const parsedNavigation = parseNavigation(navigation);
|
|
89
|
+
const { navItems, activeId } = parsedNavigation;
|
|
87
90
|
|
|
88
91
|
const renderAddons = () => {
|
|
89
92
|
// 不关心内置的 session manager 和 locale selector, 直接覆盖 UX Header 的 addons
|
|
90
93
|
if (addons && typeof addons !== 'function') {
|
|
91
|
-
return addons;
|
|
94
|
+
return Array.isArray(addons) ? addons : [addons];
|
|
92
95
|
}
|
|
93
96
|
let addonsArray = [];
|
|
94
97
|
// 启用了多语言并且检测到了 locale context
|
|
@@ -101,17 +104,27 @@ function Header({ meta, addons, sessionManagerProps, ...rest }) {
|
|
|
101
104
|
}
|
|
102
105
|
// 在内置 addons 基础上定制 addons
|
|
103
106
|
if (typeof addons === 'function') {
|
|
104
|
-
addonsArray =
|
|
107
|
+
addonsArray =
|
|
108
|
+
addons(addonsArray, {
|
|
109
|
+
navigation: parsedNavigation,
|
|
110
|
+
}) || [];
|
|
105
111
|
}
|
|
106
|
-
|
|
107
|
-
return addonsFragment;
|
|
112
|
+
return addonsArray;
|
|
108
113
|
};
|
|
109
114
|
|
|
115
|
+
const renderedAddons = renderAddons();
|
|
116
|
+
|
|
117
|
+
const addonList = createElement(
|
|
118
|
+
Fragment,
|
|
119
|
+
null,
|
|
120
|
+
...(Array.isArray(renderedAddons) ? renderedAddons : [renderedAddons])
|
|
121
|
+
);
|
|
122
|
+
|
|
110
123
|
return (
|
|
111
124
|
<ThemeProvider theme={muiTheme}>
|
|
112
125
|
<StyledUxHeader
|
|
113
126
|
logo={
|
|
114
|
-
<a href={
|
|
127
|
+
<a href={homeLink}>
|
|
115
128
|
<img src={appLogo} alt="logo" />
|
|
116
129
|
</a>
|
|
117
130
|
}
|
|
@@ -127,7 +140,7 @@ function Header({ meta, addons, sessionManagerProps, ...rest }) {
|
|
|
127
140
|
</DidAddress>
|
|
128
141
|
) : null
|
|
129
142
|
}
|
|
130
|
-
addons={
|
|
143
|
+
addons={addonList}
|
|
131
144
|
{...rest}
|
|
132
145
|
$bgcolor={theme?.background?.header}
|
|
133
146
|
$theme={muiTheme}>
|
|
@@ -158,6 +171,7 @@ Header.propTypes = {
|
|
|
158
171
|
addons: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),
|
|
159
172
|
|
|
160
173
|
sessionManagerProps,
|
|
174
|
+
homeLink: PropTypes.string,
|
|
161
175
|
};
|
|
162
176
|
|
|
163
177
|
Header.defaultProps = {
|
|
@@ -166,6 +180,7 @@ Header.defaultProps = {
|
|
|
166
180
|
sessionManagerProps: {
|
|
167
181
|
showRole: true,
|
|
168
182
|
},
|
|
183
|
+
homeLink: publicPath,
|
|
169
184
|
};
|
|
170
185
|
|
|
171
186
|
const StyledUxHeader = styled(ResponsiveHeader)`
|