@blocklet/ui-react 2.1.2 → 2.1.5
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/Footer/index.js +11 -8
- package/lib/Header/index.js +14 -6
- package/package.json +4 -4
- package/src/Footer/index.js +10 -10
- package/src/Header/index.js +30 -26
package/lib/Footer/index.js
CHANGED
|
@@ -45,8 +45,15 @@ function Footer(_ref) {
|
|
|
45
45
|
appLogo,
|
|
46
46
|
appName,
|
|
47
47
|
theme: blockletTheme,
|
|
48
|
-
navigation
|
|
49
|
-
} = blocklet;
|
|
48
|
+
navigation = []
|
|
49
|
+
} = blocklet; // TODO: 支持分组的 links (#590)
|
|
50
|
+
// 暂时只支持扁平的 links, 没有 link 属性的 navigation item 会被忽略
|
|
51
|
+
|
|
52
|
+
const navMenuItems = navigation.filter(item => item.link).map(item => ({
|
|
53
|
+
label: /*#__PURE__*/_react.default.createElement("a", {
|
|
54
|
+
href: item.link
|
|
55
|
+
}, item.title)
|
|
56
|
+
}));
|
|
50
57
|
return /*#__PURE__*/_react.default.createElement(Root, Object.assign({}, rest, {
|
|
51
58
|
$bgcolor: blockletTheme === null || blockletTheme === void 0 ? void 0 : blockletTheme.background,
|
|
52
59
|
$theme: theme
|
|
@@ -59,12 +66,8 @@ function Footer(_ref) {
|
|
|
59
66
|
alt: "logo"
|
|
60
67
|
}), /*#__PURE__*/_react.default.createElement("span", null, appName)), /*#__PURE__*/_react.default.createElement("div", {
|
|
61
68
|
className: "footer_nav"
|
|
62
|
-
}, !!(
|
|
63
|
-
items:
|
|
64
|
-
label: /*#__PURE__*/_react.default.createElement("a", {
|
|
65
|
-
href: item.link
|
|
66
|
-
}, item.title)
|
|
67
|
-
}))
|
|
69
|
+
}, !!(navMenuItems !== null && navMenuItems !== void 0 && navMenuItems.length) && /*#__PURE__*/_react.default.createElement(_NavMenu.default, {
|
|
70
|
+
items: navMenuItems
|
|
68
71
|
}))), /*#__PURE__*/_react.default.createElement("div", {
|
|
69
72
|
className: "footer_line"
|
|
70
73
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
package/lib/Header/index.js
CHANGED
|
@@ -11,6 +11,10 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
11
11
|
|
|
12
12
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
13
13
|
|
|
14
|
+
var _styles = require("@mui/material/styles");
|
|
15
|
+
|
|
16
|
+
var _Theme = require("@arcblock/ux/lib/Theme");
|
|
17
|
+
|
|
14
18
|
var _Header = require("@arcblock/ux/lib/Header");
|
|
15
19
|
|
|
16
20
|
var _NavMenu = _interopRequireDefault(require("@arcblock/ux/lib/NavMenu"));
|
|
@@ -35,6 +39,8 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
|
|
|
35
39
|
|
|
36
40
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
37
41
|
|
|
42
|
+
const muiTheme = (0, _Theme.create)();
|
|
43
|
+
|
|
38
44
|
const isLinkActive = link => {
|
|
39
45
|
if (window.location.pathname === '/') {
|
|
40
46
|
return link === '/';
|
|
@@ -46,6 +52,8 @@ const isLinkActive = link => {
|
|
|
46
52
|
|
|
47
53
|
const parseNavigation = navigation => {
|
|
48
54
|
const parseItem = item => {
|
|
55
|
+
var _item$link, _item$link2;
|
|
56
|
+
|
|
49
57
|
const icon = item.icon ? /*#__PURE__*/_react.default.createElement("span", {
|
|
50
58
|
className: "iconify",
|
|
51
59
|
"data-icon": item.icon
|
|
@@ -59,11 +67,9 @@ const parseNavigation = navigation => {
|
|
|
59
67
|
};
|
|
60
68
|
}
|
|
61
69
|
|
|
62
|
-
let props = {};
|
|
63
|
-
|
|
64
|
-
item.link = item.link.replace('/https:/', 'https://');
|
|
70
|
+
let props = {};
|
|
65
71
|
|
|
66
|
-
if (item.link.startsWith('http')) {
|
|
72
|
+
if ((_item$link = item.link) !== null && _item$link !== void 0 && _item$link.startsWith('http://') || (_item$link2 = item.link) !== null && _item$link2 !== void 0 && _item$link2.startsWith('https://')) {
|
|
67
73
|
props = {
|
|
68
74
|
target: '_blank',
|
|
69
75
|
rel: 'noreferrer'
|
|
@@ -148,7 +154,9 @@ function Header(_ref) {
|
|
|
148
154
|
return addonsFragment;
|
|
149
155
|
};
|
|
150
156
|
|
|
151
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
157
|
+
return /*#__PURE__*/_react.default.createElement(_styles.ThemeProvider, {
|
|
158
|
+
theme: muiTheme
|
|
159
|
+
}, /*#__PURE__*/_react.default.createElement(StyledUxHeader, Object.assign({
|
|
152
160
|
logo: /*#__PURE__*/_react.default.createElement("a", {
|
|
153
161
|
href: "/"
|
|
154
162
|
}, /*#__PURE__*/_react.default.createElement("img", {
|
|
@@ -171,7 +179,7 @@ function Header(_ref) {
|
|
|
171
179
|
className: "header-nav",
|
|
172
180
|
bgColor: "transparent"
|
|
173
181
|
});
|
|
174
|
-
});
|
|
182
|
+
}));
|
|
175
183
|
}
|
|
176
184
|
|
|
177
185
|
Header.propTypes = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blocklet/ui-react",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.5",
|
|
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.5",
|
|
38
|
+
"@arcblock/ux": "^2.1.5",
|
|
39
39
|
"@iconify/iconify": "^2.2.1",
|
|
40
40
|
"@mui/material": "^5.6.4",
|
|
41
41
|
"core-js": "^3.6.4",
|
|
@@ -56,5 +56,5 @@
|
|
|
56
56
|
"eslint-plugin-react-hooks": "^4.2.0",
|
|
57
57
|
"jest": "^24.1.0"
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "6a480839e6280fae5ad34f6618e8f68635406f3e"
|
|
60
60
|
}
|
package/src/Footer/index.js
CHANGED
|
@@ -16,7 +16,15 @@ export default function Footer({ meta, ...rest }) {
|
|
|
16
16
|
return null;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
const { appLogo, appName, theme: blockletTheme, navigation } = blocklet;
|
|
19
|
+
const { appLogo, appName, theme: blockletTheme, navigation = [] } = blocklet;
|
|
20
|
+
// TODO: 支持分组的 links (#590)
|
|
21
|
+
// 暂时只支持扁平的 links, 没有 link 属性的 navigation item 会被忽略
|
|
22
|
+
const navMenuItems = navigation
|
|
23
|
+
.filter(item => item.link)
|
|
24
|
+
.map(item => ({
|
|
25
|
+
label: <a href={item.link}>{item.title}</a>,
|
|
26
|
+
}));
|
|
27
|
+
|
|
20
28
|
return (
|
|
21
29
|
<Root {...rest} $bgcolor={blockletTheme?.background} $theme={theme}>
|
|
22
30
|
<Container>
|
|
@@ -26,15 +34,7 @@ export default function Footer({ meta, ...rest }) {
|
|
|
26
34
|
<span>{appName}</span>
|
|
27
35
|
</div>
|
|
28
36
|
<div className="footer_nav">
|
|
29
|
-
{!!
|
|
30
|
-
<NavMenu
|
|
31
|
-
items={navigation
|
|
32
|
-
.filter(item => item.link)
|
|
33
|
-
.map(item => ({
|
|
34
|
-
label: <a href={item.link}>{item.title}</a>,
|
|
35
|
-
}))}
|
|
36
|
-
/>
|
|
37
|
-
)}
|
|
37
|
+
{!!navMenuItems?.length && <NavMenu items={navMenuItems} />}
|
|
38
38
|
</div>
|
|
39
39
|
</div>
|
|
40
40
|
<div className="footer_line">
|
package/src/Header/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import styled from 'styled-components';
|
|
4
|
+
import { ThemeProvider } from '@mui/material/styles';
|
|
5
|
+
import { create } from '@arcblock/ux/lib/Theme';
|
|
4
6
|
import { ResponsiveHeader } from '@arcblock/ux/lib/Header';
|
|
5
7
|
import NavMenu from '@arcblock/ux/lib/NavMenu';
|
|
6
8
|
import { SessionContext } from '@arcblock/did-connect/lib/Session';
|
|
@@ -11,6 +13,8 @@ import '@iconify/iconify';
|
|
|
11
13
|
|
|
12
14
|
import { blockletMetaProps, sessionManagerProps } from '../types';
|
|
13
15
|
|
|
16
|
+
const muiTheme = create();
|
|
17
|
+
|
|
14
18
|
const isLinkActive = link => {
|
|
15
19
|
if (window.location.pathname === '/') {
|
|
16
20
|
return link === '/';
|
|
@@ -30,9 +34,7 @@ const parseNavigation = navigation => {
|
|
|
30
34
|
};
|
|
31
35
|
}
|
|
32
36
|
let props = {};
|
|
33
|
-
|
|
34
|
-
item.link = item.link.replace('/https:/', 'https://');
|
|
35
|
-
if (item.link.startsWith('http')) {
|
|
37
|
+
if (item.link?.startsWith('http://') || item.link?.startsWith('https://')) {
|
|
36
38
|
props = {
|
|
37
39
|
target: '_blank',
|
|
38
40
|
rel: 'noreferrer',
|
|
@@ -97,29 +99,31 @@ export default function Header({ meta, addons, sessionManagerProps, ...rest }) {
|
|
|
97
99
|
};
|
|
98
100
|
|
|
99
101
|
return (
|
|
100
|
-
<
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
<
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
102
|
+
<ThemeProvider theme={muiTheme}>
|
|
103
|
+
<StyledUxHeader
|
|
104
|
+
logo={
|
|
105
|
+
<a href="/">
|
|
106
|
+
<img src={appLogo} alt="logo" />
|
|
107
|
+
</a>
|
|
108
|
+
}
|
|
109
|
+
brand={appName}
|
|
110
|
+
addons={renderAddons()}
|
|
111
|
+
{...rest}
|
|
112
|
+
$bgcolor={theme?.background}>
|
|
113
|
+
{/* blocklet.yml 没有配置 navigation 时, 则为 children 传入 null, 此时 ResponsiveHeader 会渲染普通的不带 menu 的 Header */}
|
|
114
|
+
{!navItems?.length
|
|
115
|
+
? null
|
|
116
|
+
: ({ isMobile, closeMenu }) => (
|
|
117
|
+
<NavMenu
|
|
118
|
+
mode={isMobile ? 'inline' : 'horizontal'}
|
|
119
|
+
items={navItems}
|
|
120
|
+
onSelected={closeMenu}
|
|
121
|
+
className="header-nav"
|
|
122
|
+
bgColor="transparent"
|
|
123
|
+
/>
|
|
124
|
+
)}
|
|
125
|
+
</StyledUxHeader>
|
|
126
|
+
</ThemeProvider>
|
|
123
127
|
);
|
|
124
128
|
}
|
|
125
129
|
|