@arcblock/ux 2.8.26 → 2.9.0
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/es/Address/did-address.js +33 -21
- package/es/AnimationWaiter/index.js +2 -1
- package/es/Avatar/index.js +1 -1
- package/es/BlockletContext/index.js +1 -1
- package/es/CardSelector/index.js +2 -1
- package/es/Colors/index.js +2 -1
- package/es/Colors/themes/temp.js +17 -0
- package/es/Datatable/TableSearch.js +2 -1
- package/es/Img/index.js +7 -6
- package/es/Locale/selector.js +15 -13
- package/es/NFTDisplay/index.js +2 -1
- package/es/QRCode/index.js +2 -1
- package/es/SessionBlocklet/index.js +169 -0
- package/es/SessionManager/index.js +2 -381
- package/es/SessionPermission/index.js +28 -0
- package/es/SessionUser/components/logged-in.js +224 -0
- package/es/SessionUser/components/session-user-item.js +148 -0
- package/es/SessionUser/components/session-user-switch.js +213 -0
- package/es/SessionUser/components/un-login.js +64 -0
- package/es/SessionUser/components/user-info.js +163 -0
- package/es/SessionUser/index.js +49 -0
- package/es/SessionUser/libs/translation.js +19 -0
- package/es/SessionUser/libs/utils.js +4 -0
- package/es/SplitButton/index.js +2 -1
- package/es/Toast/index.js +1 -1
- package/es/Util/constant.js +10 -0
- package/es/Util/index.js +11 -0
- package/lib/Address/did-address.js +36 -22
- package/lib/AnimationWaiter/index.js +2 -1
- package/lib/Avatar/index.js +1 -1
- package/lib/BlockletContext/index.js +1 -1
- package/lib/CardSelector/index.js +2 -1
- package/lib/Colors/index.js +7 -0
- package/lib/Colors/themes/temp.js +24 -0
- package/lib/Datatable/TableSearch.js +2 -1
- package/lib/Img/index.js +7 -6
- package/lib/Locale/selector.js +14 -13
- package/lib/NFTDisplay/index.js +2 -1
- package/lib/QRCode/index.js +2 -1
- package/lib/SessionBlocklet/index.js +187 -0
- package/lib/SessionManager/index.js +2 -390
- package/lib/SessionPermission/index.js +38 -0
- package/lib/SessionUser/components/logged-in.js +243 -0
- package/lib/SessionUser/components/session-user-item.js +163 -0
- package/lib/SessionUser/components/session-user-switch.js +232 -0
- package/lib/SessionUser/components/un-login.js +72 -0
- package/lib/SessionUser/components/user-info.js +175 -0
- package/lib/SessionUser/index.js +57 -0
- package/lib/SessionUser/libs/translation.js +26 -0
- package/lib/{SessionManager → SessionUser}/libs/utils.js +8 -1
- package/lib/SplitButton/index.js +2 -1
- package/lib/Toast/index.js +5 -5
- package/lib/Util/constant.js +26 -0
- package/lib/Util/index.js +16 -3
- package/package.json +19 -7
- package/src/Address/did-address.jsx +34 -20
- package/src/AnimationWaiter/index.js +2 -1
- package/src/Avatar/index.jsx +1 -1
- package/src/BlockletContext/index.jsx +1 -1
- package/src/CardSelector/index.jsx +2 -1
- package/src/Colors/index.js +1 -0
- package/src/Colors/themes/temp.js +18 -0
- package/src/Datatable/TableSearch.js +3 -1
- package/src/Img/{index.js → index.jsx} +8 -6
- package/src/Locale/selector.jsx +11 -8
- package/src/NFTDisplay/index.js +2 -1
- package/src/QRCode/index.js +2 -1
- package/src/SessionBlocklet/index.jsx +181 -0
- package/src/SessionManager/index.jsx +2 -369
- package/src/SessionPermission/index.jsx +28 -0
- package/src/SessionUser/components/logged-in.jsx +194 -0
- package/src/SessionUser/components/session-user-item.jsx +96 -0
- package/src/SessionUser/components/session-user-switch.jsx +222 -0
- package/src/SessionUser/components/un-login.jsx +55 -0
- package/src/SessionUser/components/user-info.jsx +165 -0
- package/src/SessionUser/index.jsx +38 -0
- package/src/SessionUser/libs/translation.js +19 -0
- package/src/{SessionManager → SessionUser}/libs/utils.js +4 -0
- package/src/SplitButton/index.js +2 -1
- package/src/Toast/index.js +1 -1
- package/src/Util/constant.js +12 -0
- package/src/Util/index.js +13 -0
- package/es/SessionManager/components/account-item.js +0 -212
- package/es/SessionManager/components/add-account-item.js +0 -57
- package/es/SessionManager/components/federated-login-detecter.js +0 -183
- package/es/SessionManager/components/manage-accounts.js +0 -219
- package/es/SessionManager/components/manage-blocklet.js +0 -70
- package/es/SessionManager/components/menu-accordion.js +0 -103
- package/es/SessionManager/components/responsive-popper.js +0 -24
- package/es/SessionManager/components/user-drawer.js +0 -68
- package/es/SessionManager/components/user-info.js +0 -143
- package/es/SessionManager/components/user-popper.js +0 -110
- package/es/SessionManager/hooks/use-config.js +0 -34
- package/es/SessionManager/libs/translation.js +0 -52
- package/es/SessionManager/libs/utils.js +0 -2
- package/lib/SessionManager/components/account-item.js +0 -219
- package/lib/SessionManager/components/add-account-item.js +0 -66
- package/lib/SessionManager/components/federated-login-detecter.js +0 -193
- package/lib/SessionManager/components/manage-accounts.js +0 -232
- package/lib/SessionManager/components/manage-blocklet.js +0 -86
- package/lib/SessionManager/components/menu-accordion.js +0 -111
- package/lib/SessionManager/components/responsive-popper.js +0 -34
- package/lib/SessionManager/components/user-drawer.js +0 -75
- package/lib/SessionManager/components/user-info.js +0 -160
- package/lib/SessionManager/components/user-popper.js +0 -104
- package/lib/SessionManager/hooks/use-config.js +0 -41
- package/lib/SessionManager/libs/translation.js +0 -59
- package/src/SessionManager/components/account-item.jsx +0 -156
- package/src/SessionManager/components/add-account-item.jsx +0 -49
- package/src/SessionManager/components/federated-login-detecter.jsx +0 -167
- package/src/SessionManager/components/manage-accounts.jsx +0 -228
- package/src/SessionManager/components/manage-blocklet.jsx +0 -70
- package/src/SessionManager/components/menu-accordion.jsx +0 -93
- package/src/SessionManager/components/responsive-popper.jsx +0 -26
- package/src/SessionManager/components/user-drawer.jsx +0 -57
- package/src/SessionManager/components/user-info.jsx +0 -117
- package/src/SessionManager/components/user-popper.jsx +0 -95
- package/src/SessionManager/hooks/use-config.js +0 -33
- package/src/SessionManager/libs/translation.js +0 -52
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React, { useRef, useState, forwardRef } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import '@fontsource/ubuntu-mono/400.css';
|
|
4
|
-
import Tooltip from '@mui/material/Tooltip';
|
|
5
4
|
import { green } from '@mui/material/colors';
|
|
5
|
+
import { Tooltip, Box } from '@mui/material';
|
|
6
6
|
import copy from 'copy-to-clipboard';
|
|
7
|
-
import CopyIcon from '@mui/icons-material
|
|
8
|
-
import
|
|
7
|
+
import { ContentCopy as CopyIcon, Check as CheckIcon } from '@mui/icons-material';
|
|
8
|
+
import noop from 'lodash/noop';
|
|
9
9
|
import { styled } from '../Theme';
|
|
10
10
|
import { getFontSize } from '../Util';
|
|
11
11
|
import CompactText from './compact-text';
|
|
@@ -96,21 +96,35 @@ const DidAddress = /*#__PURE__*/forwardRef(({
|
|
|
96
96
|
size: size,
|
|
97
97
|
...rest,
|
|
98
98
|
ref: ref,
|
|
99
|
-
children: [prepend, /*#__PURE__*/
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
99
|
+
children: [prepend, /*#__PURE__*/_jsxs(Tooltip, {
|
|
100
|
+
title: copyable ? '' : translations[locale].copied,
|
|
101
|
+
placement: "bottom",
|
|
102
|
+
arrow: true,
|
|
103
|
+
open: copied,
|
|
104
|
+
children: [/*#__PURE__*/_jsx(Box, {
|
|
105
|
+
ref: textRef,
|
|
106
|
+
component: "span",
|
|
107
|
+
className: "did-address-text did-address-truncate",
|
|
108
|
+
sx: {
|
|
109
|
+
display: compact ? 'none' : 'inline',
|
|
110
|
+
cursor: copyable ? 'text' : 'pointer'
|
|
111
|
+
},
|
|
112
|
+
onDoubleClick: copyable ? noop : onCopy,
|
|
112
113
|
children: children
|
|
113
|
-
})
|
|
114
|
+
}), compact && /*#__PURE__*/_jsx(Box, {
|
|
115
|
+
component: "span",
|
|
116
|
+
className: "did-address-text",
|
|
117
|
+
sx: {
|
|
118
|
+
cursor: copyable ? 'text' : 'pointer'
|
|
119
|
+
},
|
|
120
|
+
onDoubleClick: copyable ? noop : onCopy,
|
|
121
|
+
children: /*#__PURE__*/_jsx(CompactText, {
|
|
122
|
+
startChars: startChars,
|
|
123
|
+
endChars: endChars,
|
|
124
|
+
showCopyButtonInTooltip: showCopyButtonInTooltip,
|
|
125
|
+
children: children
|
|
126
|
+
})
|
|
127
|
+
})]
|
|
114
128
|
}), copyElement, append]
|
|
115
129
|
});
|
|
116
130
|
});
|
|
@@ -147,7 +161,7 @@ DidAddress.defaultProps = {
|
|
|
147
161
|
endChars: 6,
|
|
148
162
|
locale: 'en'
|
|
149
163
|
};
|
|
150
|
-
const Root = styled(
|
|
164
|
+
const Root = styled(Box, {
|
|
151
165
|
shouldForwardProp: prop => prop !== 'inline'
|
|
152
166
|
})`
|
|
153
167
|
font-family: 'Ubuntu Mono', monospace;
|
|
@@ -177,9 +191,6 @@ const Root = styled('div', {
|
|
|
177
191
|
text-overflow: ellipsis;
|
|
178
192
|
}
|
|
179
193
|
|
|
180
|
-
.did-address-copy {
|
|
181
|
-
flex: 0 0 auto;
|
|
182
|
-
}
|
|
183
194
|
.did-address-copy-wrapper {
|
|
184
195
|
display: flex;
|
|
185
196
|
justify-content: center;
|
|
@@ -189,6 +200,7 @@ const Root = styled('div', {
|
|
|
189
200
|
margin-left: 8px;
|
|
190
201
|
}
|
|
191
202
|
.did-address-copy {
|
|
203
|
+
flex: 0 0 auto;
|
|
192
204
|
font-size: 1em;
|
|
193
205
|
color: #999;
|
|
194
206
|
cursor: pointer;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useState, useEffect, useRef } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import Lottie from 'react-lottie-player';
|
|
4
|
+
import noop from 'lodash/noop';
|
|
4
5
|
import lottieJson from './default-animation.json';
|
|
5
6
|
import { styled } from '../Theme';
|
|
6
7
|
|
|
@@ -70,7 +71,7 @@ export default function AnimationWaiter({
|
|
|
70
71
|
// tips
|
|
71
72
|
useEffect(() => {
|
|
72
73
|
if (!tips.length) {
|
|
73
|
-
return
|
|
74
|
+
return noop;
|
|
74
75
|
}
|
|
75
76
|
const timer = setTimeout(() => {
|
|
76
77
|
let nextId = tipsId + 1;
|
package/es/Avatar/index.js
CHANGED
|
@@ -36,7 +36,7 @@ function BlockletProvider({
|
|
|
36
36
|
setBlockletData(data);
|
|
37
37
|
} catch {
|
|
38
38
|
// NOTICE: 如果获取指定 blockletData 失败,则使用 window.blocklet
|
|
39
|
-
const data =
|
|
39
|
+
const data = globalThis.blocklet || globalThis.env;
|
|
40
40
|
setBlockletData(data);
|
|
41
41
|
}
|
|
42
42
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
package/es/CardSelector/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useState, useEffect, useRef } from 'react';
|
|
2
2
|
import styled from '@emotion/styled';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
+
import noop from 'lodash/noop';
|
|
4
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
6
|
export default function CardSelector({
|
|
6
7
|
list,
|
|
@@ -143,6 +144,6 @@ CardSelector.defaultProps = {
|
|
|
143
144
|
width: 300,
|
|
144
145
|
height: 400,
|
|
145
146
|
cardSpace: 40,
|
|
146
|
-
onSelect:
|
|
147
|
+
onSelect: noop,
|
|
147
148
|
defaultIndex: 0
|
|
148
149
|
};
|
package/es/Colors/index.js
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const colors = {
|
|
2
|
+
lineStep: 'rgba(18, 22, 24, 0.06)',
|
|
3
|
+
lineBorderStrong: 'rgba(18, 22, 24, 0.12)',
|
|
4
|
+
lineBorderBase: 'rgba(18, 22, 24, 0.06)',
|
|
5
|
+
borderBase: 'rgba(18, 22, 24, 0.06)',
|
|
6
|
+
textMuted: 'rgba(18, 22, 24, 0.36)',
|
|
7
|
+
textSubtitle: 'rgba(18, 22, 24, 0.6)',
|
|
8
|
+
textBase: 'rgba(18, 22, 24, 1)',
|
|
9
|
+
textPrimaryBase: 'rgba(18, 22, 24, 1)',
|
|
10
|
+
surfaceBgSubtitle: 'rgba(18, 22, 24, 0.03)',
|
|
11
|
+
surfacePrimarySubtitle: 'rgba(19, 125, 250, 0.06)',
|
|
12
|
+
surfaceSuccess: 'rgba(13, 202, 134, 1)',
|
|
13
|
+
primaryBase: 'rgba(19, 125, 250, 1)',
|
|
14
|
+
primary100: 'rgba(19, 125, 250, 1)',
|
|
15
|
+
gray6: 'rgba(17, 22, 24, 0.06)'
|
|
16
|
+
};
|
|
17
|
+
export default colors;
|
|
@@ -6,6 +6,7 @@ import SearchIcon from '@mui/icons-material/Search';
|
|
|
6
6
|
import TextField from '@mui/material/TextField';
|
|
7
7
|
import ClearIcon from '@mui/icons-material/Clear';
|
|
8
8
|
import clsx from 'clsx';
|
|
9
|
+
import noop from 'lodash/noop';
|
|
9
10
|
import { useDatatableContext } from './DatatableContext';
|
|
10
11
|
import { styled } from '../Theme';
|
|
11
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -110,7 +111,7 @@ TableSearch.propTypes = {
|
|
|
110
111
|
TableSearch.defaultProps = {
|
|
111
112
|
search: '',
|
|
112
113
|
searchText: '',
|
|
113
|
-
onSearchOpen:
|
|
114
|
+
onSearchOpen: noop
|
|
114
115
|
};
|
|
115
116
|
const Container = styled('div')`
|
|
116
117
|
display: flex;
|
package/es/Img/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { useEffect, useMemo, useState } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { useInView } from 'react-intersection-observer';
|
|
4
|
-
import
|
|
5
|
-
import
|
|
4
|
+
import WarningRoundedIcon from '@iconify-icons/material-symbols/warning-rounded';
|
|
5
|
+
import ImageRoundedIcon from '@iconify-icons/material-symbols/image-rounded';
|
|
6
6
|
import { Icon } from '@iconify/react';
|
|
7
|
+
import noop from 'lodash/noop';
|
|
7
8
|
import { styled } from '../Theme';
|
|
8
9
|
|
|
9
10
|
/**
|
|
@@ -162,14 +163,14 @@ function Img({
|
|
|
162
163
|
className: "image--state",
|
|
163
164
|
title: "loading image",
|
|
164
165
|
children: /*#__PURE__*/_jsx(Icon, {
|
|
165
|
-
icon:
|
|
166
|
+
icon: WarningRoundedIcon,
|
|
166
167
|
className: "image--icon"
|
|
167
168
|
})
|
|
168
169
|
}), !placeholder && imgState === 'loading' && /*#__PURE__*/_jsx("div", {
|
|
169
170
|
className: "image--state",
|
|
170
171
|
title: "Image load error",
|
|
171
172
|
children: /*#__PURE__*/_jsx(Icon, {
|
|
172
|
-
icon:
|
|
173
|
+
icon: ImageRoundedIcon,
|
|
173
174
|
className: "image--icon"
|
|
174
175
|
})
|
|
175
176
|
}), imgState === 'loaded' && /*#__PURE__*/_jsx("img", {
|
|
@@ -211,7 +212,7 @@ Img.defaultProps = {
|
|
|
211
212
|
placeholder: null,
|
|
212
213
|
fallback: null,
|
|
213
214
|
className: '',
|
|
214
|
-
onError:
|
|
215
|
-
onSuccess:
|
|
215
|
+
onError: noop,
|
|
216
|
+
onSuccess: noop
|
|
216
217
|
};
|
|
217
218
|
export default Img;
|
package/es/Locale/selector.js
CHANGED
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
import { useState, useContext, useRef, useMemo } from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import { Button, Typography, IconButton, Popper, MenuItem, MenuList, Box, ClickAwayListener } from '@mui/material';
|
|
5
|
-
import
|
|
6
|
-
import
|
|
5
|
+
import { Icon as IconifyIcon } from '@iconify/react';
|
|
6
|
+
import LanguageIcon from '@iconify-icons/material-symbols/language';
|
|
7
|
+
import CheckIcon from '@iconify-icons/material-symbols/check';
|
|
8
|
+
import noop from 'lodash/noop';
|
|
7
9
|
import { getColor, getBackground } from '../Util';
|
|
10
|
+
import { temp as colors } from '../Colors';
|
|
8
11
|
import { LocaleContext } from './context';
|
|
9
12
|
import { styled, useTheme } from '../Theme';
|
|
10
13
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -57,12 +60,10 @@ export default function LocaleSelector(props) {
|
|
|
57
60
|
if (Icon) {
|
|
58
61
|
return /*#__PURE__*/_jsx(Icon, {});
|
|
59
62
|
}
|
|
60
|
-
return /*#__PURE__*/_jsx(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
color: theme.palette.text.secondary
|
|
65
|
-
}
|
|
63
|
+
return /*#__PURE__*/_jsx(IconifyIcon, {
|
|
64
|
+
icon: LanguageIcon,
|
|
65
|
+
fontSize: size,
|
|
66
|
+
color: theme.palette.text.secondary
|
|
66
67
|
});
|
|
67
68
|
}, [Icon, theme?.palette?.text?.secondary, size]);
|
|
68
69
|
return /*#__PURE__*/_jsxs(Div, {
|
|
@@ -101,9 +102,9 @@ export default function LocaleSelector(props) {
|
|
|
101
102
|
}) => /*#__PURE__*/_jsxs(MenuItem, {
|
|
102
103
|
className: "locale-item",
|
|
103
104
|
onClick: () => onSelect(code, name),
|
|
104
|
-
children: [/*#__PURE__*/_jsx(
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
children: [/*#__PURE__*/_jsx(IconifyIcon, {
|
|
106
|
+
icon: CheckIcon,
|
|
107
|
+
className: code === locale ? 'check-icon check-icon-visible' : 'check-icon'
|
|
107
108
|
}), name]
|
|
108
109
|
}, code))
|
|
109
110
|
})
|
|
@@ -124,7 +125,7 @@ LocaleSelector.defaultProps = {
|
|
|
124
125
|
showText: true,
|
|
125
126
|
size: 24,
|
|
126
127
|
popperProps: {},
|
|
127
|
-
onChange:
|
|
128
|
+
onChange: noop,
|
|
128
129
|
popperType: 'click',
|
|
129
130
|
icon: null
|
|
130
131
|
};
|
|
@@ -149,7 +150,8 @@ const Div = styled('div', {
|
|
|
149
150
|
|
|
150
151
|
.locales {
|
|
151
152
|
background: ${props => getBackground(props)};
|
|
152
|
-
box-shadow:
|
|
153
|
+
box-shadow: 0px 8px 16px 0px ${colors.gray6}, 0px 0px 0px 1px ${colors.gray6};
|
|
154
|
+
border-radius: 8px;
|
|
153
155
|
}
|
|
154
156
|
|
|
155
157
|
.locale-item {
|
package/es/NFTDisplay/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import pako from 'pako';
|
|
|
8
8
|
import base64 from 'base64-url';
|
|
9
9
|
import isSvg from 'is-svg';
|
|
10
10
|
import { ReactSVG } from 'react-svg';
|
|
11
|
+
import noop from 'lodash/noop';
|
|
11
12
|
import AspectRatioContainer from './aspect-ratio-container';
|
|
12
13
|
import ImgSvgEmbedder from './svg-embedder/img';
|
|
13
14
|
import InlineSvgEmbedder from './svg-embedder/inline-svg';
|
|
@@ -266,7 +267,7 @@ NFTDisplay.defaultProps = {
|
|
|
266
267
|
preferredSvgEmbedder: 'img',
|
|
267
268
|
checkSvg: false,
|
|
268
269
|
minimumLoadingTime: 0,
|
|
269
|
-
onCompleted:
|
|
270
|
+
onCompleted: noop
|
|
270
271
|
};
|
|
271
272
|
const Root = styled('div')`
|
|
272
273
|
display: flex;
|
package/es/QRCode/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useRef, useEffect, useMemo, useState } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import QRCodeStyling from '@solana/qr-code-styling';
|
|
4
|
+
import { Box } from '@mui/material';
|
|
4
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
6
|
const defaults = {
|
|
6
7
|
margin: 0,
|
|
@@ -52,7 +53,7 @@ function QRCode({
|
|
|
52
53
|
qrCode.update(options);
|
|
53
54
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
54
55
|
}, [data, size, image, config]);
|
|
55
|
-
return /*#__PURE__*/_jsx(
|
|
56
|
+
return /*#__PURE__*/_jsx(Box, {
|
|
56
57
|
ref: ref,
|
|
57
58
|
...rest
|
|
58
59
|
});
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { useRef } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { Box, ClickAwayListener, Fade, IconButton, List, ListItem, ListItemButton, Paper, Popper, Typography } from '@mui/material';
|
|
4
|
+
import { Icon } from '@iconify/react';
|
|
5
|
+
import DashboardOutlineRoundedIcon from '@iconify-icons/material-symbols/dashboard-outline-rounded';
|
|
6
|
+
import WidgetsOutlineRoundedIcon from '@iconify-icons/material-symbols/widgets-outline-rounded';
|
|
7
|
+
import { useMemoizedFn, useReactive } from 'ahooks';
|
|
8
|
+
import Button from '../Button';
|
|
9
|
+
import { temp as colors } from '../Colors';
|
|
10
|
+
import { AUTH_SERVICE_PREFIX, NAVIGATION_URL } from '../Util/constant';
|
|
11
|
+
import SessionPermission from '../SessionPermission';
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
15
|
+
export default function SessionBlocklet({
|
|
16
|
+
session,
|
|
17
|
+
locale,
|
|
18
|
+
size
|
|
19
|
+
}) {
|
|
20
|
+
const blocklet = window?.blocklet || {};
|
|
21
|
+
const sessionMenuList = (blocklet.navigation || []
|
|
22
|
+
// HACK 过滤掉默认插入的 /sessionManager 菜单
|
|
23
|
+
).filter(item => item.section === 'sessionManager' && !['/sessionManager'].includes(item.id)).filter(item => {
|
|
24
|
+
if ((item?.role || []).includes(session?.user?.role || 'guest')) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}).map(item => {
|
|
29
|
+
const component = (blocklet?.componentMountPoints || []).find(x => item.component === x.name);
|
|
30
|
+
return {
|
|
31
|
+
...item,
|
|
32
|
+
component
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
const popperAnchorRef = useRef(null);
|
|
36
|
+
const currentState = useReactive({
|
|
37
|
+
open: false
|
|
38
|
+
});
|
|
39
|
+
const onTogglePopper = useMemoizedFn((value = !currentState.open) => {
|
|
40
|
+
currentState.open = value;
|
|
41
|
+
});
|
|
42
|
+
if (sessionMenuList.length === 0) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
46
|
+
children: [/*#__PURE__*/_jsx(IconButton, {
|
|
47
|
+
size: "medium",
|
|
48
|
+
ref: popperAnchorRef,
|
|
49
|
+
onClick: () => onTogglePopper(),
|
|
50
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
|
51
|
+
icon: DashboardOutlineRoundedIcon,
|
|
52
|
+
fontSize: size
|
|
53
|
+
})
|
|
54
|
+
}), /*#__PURE__*/_jsx(Popper, {
|
|
55
|
+
open: currentState.open,
|
|
56
|
+
onClose: () => onTogglePopper(false),
|
|
57
|
+
anchorEl: popperAnchorRef.current,
|
|
58
|
+
transition: true,
|
|
59
|
+
placement: "bottom-end",
|
|
60
|
+
sx: {
|
|
61
|
+
zIndex: 1600
|
|
62
|
+
},
|
|
63
|
+
children: ({
|
|
64
|
+
TransitionProps
|
|
65
|
+
}) => /*#__PURE__*/_jsx(ClickAwayListener, {
|
|
66
|
+
onClickAway: e => {
|
|
67
|
+
e.preventDefault();
|
|
68
|
+
e.stopPropagation();
|
|
69
|
+
onTogglePopper(false);
|
|
70
|
+
},
|
|
71
|
+
children: /*#__PURE__*/_jsx(Fade, {
|
|
72
|
+
...TransitionProps,
|
|
73
|
+
timeout: 350,
|
|
74
|
+
children: /*#__PURE__*/_jsxs(Paper, {
|
|
75
|
+
variant: "outlined",
|
|
76
|
+
sx: {
|
|
77
|
+
borderRadius: 3,
|
|
78
|
+
width: 350,
|
|
79
|
+
maxWidth: '90vw',
|
|
80
|
+
borderColor: colors.lineStep,
|
|
81
|
+
p: 2,
|
|
82
|
+
border: '0 !important',
|
|
83
|
+
boxShadow: `0px 8px 16px 0px ${colors.gray6}, 0px 0px 0px 1px ${colors.gray6}`
|
|
84
|
+
},
|
|
85
|
+
children: [/*#__PURE__*/_jsx(List, {
|
|
86
|
+
sx: {
|
|
87
|
+
display: 'grid',
|
|
88
|
+
gridTemplateColumns: 'repeat(auto-fill, 100px)',
|
|
89
|
+
gridAutoRows: 'minmax(100px, max-content)',
|
|
90
|
+
justifyContent: 'space-between',
|
|
91
|
+
maxHeight: 350,
|
|
92
|
+
overflowY: 'auto',
|
|
93
|
+
p: 0
|
|
94
|
+
},
|
|
95
|
+
children: sessionMenuList.map(item => /*#__PURE__*/_jsx(ListItem, {
|
|
96
|
+
disablePadding: true,
|
|
97
|
+
children: /*#__PURE__*/_jsxs(ListItemButton, {
|
|
98
|
+
href: item.link,
|
|
99
|
+
sx: {
|
|
100
|
+
p: 1,
|
|
101
|
+
display: 'flex',
|
|
102
|
+
flexDirection: 'column',
|
|
103
|
+
alignItems: 'center',
|
|
104
|
+
gap: 1,
|
|
105
|
+
width: '100%',
|
|
106
|
+
height: '100%',
|
|
107
|
+
borderRadius: 2,
|
|
108
|
+
'&:hover': {
|
|
109
|
+
backgroundColor: colors.surfacePrimarySubtitle
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
children: [item?.component?.did ? /*#__PURE__*/_jsx(Box, {
|
|
113
|
+
component: "img",
|
|
114
|
+
src: `${AUTH_SERVICE_PREFIX}/blocklet/logo-bundle/${item.component.did}`,
|
|
115
|
+
sx: {
|
|
116
|
+
borderRadius: 2,
|
|
117
|
+
width: 50,
|
|
118
|
+
height: 50,
|
|
119
|
+
objectFit: 'contain'
|
|
120
|
+
}
|
|
121
|
+
}) : /*#__PURE__*/_jsx(Icon, {
|
|
122
|
+
fontSize: 50,
|
|
123
|
+
icon: item.icon || WidgetsOutlineRoundedIcon,
|
|
124
|
+
color: colors.textSubtitle
|
|
125
|
+
}), /*#__PURE__*/_jsx(Typography, {
|
|
126
|
+
sx: {
|
|
127
|
+
fontSize: '12px',
|
|
128
|
+
color: colors.textBase,
|
|
129
|
+
textAlign: 'center',
|
|
130
|
+
lineHeight: 'normal'
|
|
131
|
+
},
|
|
132
|
+
children: item.title?.zh || item.title
|
|
133
|
+
})]
|
|
134
|
+
})
|
|
135
|
+
}, item.id))
|
|
136
|
+
}), /*#__PURE__*/_jsx(SessionPermission, {
|
|
137
|
+
session: session,
|
|
138
|
+
children: /*#__PURE__*/_jsx(Button, {
|
|
139
|
+
variant: "outlined",
|
|
140
|
+
fullWidth: true,
|
|
141
|
+
href: NAVIGATION_URL,
|
|
142
|
+
sx: {
|
|
143
|
+
mt: 1,
|
|
144
|
+
borderRadius: 2,
|
|
145
|
+
color: colors.textBase,
|
|
146
|
+
borderColor: colors.lineBorderStrong,
|
|
147
|
+
'&:hover': {
|
|
148
|
+
color: colors.primaryBase,
|
|
149
|
+
borderColor: colors.primaryBase
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
children: locale === 'zh' ? '管理' : 'Manage'
|
|
153
|
+
})
|
|
154
|
+
})]
|
|
155
|
+
})
|
|
156
|
+
})
|
|
157
|
+
})
|
|
158
|
+
})]
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
SessionBlocklet.propTypes = {
|
|
162
|
+
session: PropTypes.object.isRequired,
|
|
163
|
+
locale: PropTypes.string,
|
|
164
|
+
size: PropTypes.number
|
|
165
|
+
};
|
|
166
|
+
SessionBlocklet.defaultProps = {
|
|
167
|
+
locale: 'en',
|
|
168
|
+
size: 24
|
|
169
|
+
};
|