@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.
@@ -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
- var _jsxRuntime = require("react/jsx-runtime");
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
- } = parseNavigation(navigation);
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
- const addonsFragment = /*#__PURE__*/(0, _react.createElement)(_react.Fragment, null, ...addonsArray);
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: _blocklets.publicPath,
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: renderAddons()
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.53",
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.53",
38
- "@arcblock/ux": "^2.1.53",
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": "00b76f602f945f510fe002f8a16b120327a3f068"
60
+ "gitHead": "5a8e5ecc8cad24b64ef38558457b32657e18ef44"
61
61
  }
@@ -1,4 +1,6 @@
1
- import { useContext, createElement, Fragment, useMemo } from 'react';
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 { navItems, activeId } = parseNavigation(navigation);
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 = addons(addonsArray) || [];
107
+ addonsArray =
108
+ addons(addonsArray, {
109
+ navigation: parsedNavigation,
110
+ }) || [];
105
111
  }
106
- const addonsFragment = createElement(Fragment, null, ...addonsArray);
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={publicPath}>
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={renderAddons()}
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)`