@arcblock/ux 2.8.25 → 2.9.0
Sign up to get free protection for your applications and to get access to all the features.
- 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/Header/header.js +0 -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/Header/header.js +1 -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/Header/header.jsx +0 -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,117 +0,0 @@
|
|
1
|
-
/* eslint-disable react/jsx-no-bind */
|
2
|
-
/* eslint-disable react/prop-types */
|
3
|
-
import { Box, Chip } from '@mui/material';
|
4
|
-
import ShieldCheckIcon from '@iconify-icons/mdi/shield-check';
|
5
|
-
import ExpandMoreIcon from '@iconify-icons/mdi/expand-more';
|
6
|
-
import { Icon } from '@iconify/react';
|
7
|
-
import { useCreation, useMemoizedFn } from 'ahooks';
|
8
|
-
|
9
|
-
import DidAvatar from '../../Avatar';
|
10
|
-
import DidAddress from '../../Address';
|
11
|
-
import DID from '../../DID';
|
12
|
-
import { getUserAvatar } from '../../Util';
|
13
|
-
import { t as translate } from '../../Locale/util';
|
14
|
-
import { translations } from '../libs/translation';
|
15
|
-
import Typography from '../../Typography';
|
16
|
-
|
17
|
-
export default function UserInfo({ session, locale, onSwitchProfile, onSwitchPassport, switchProfile, hasBindWallet }) {
|
18
|
-
const t = (key, data = {}) => {
|
19
|
-
return translate(translations, key, locale, 'en', data);
|
20
|
-
};
|
21
|
-
const avatar = getUserAvatar(session.user?.avatar?.replace(/\s/g, encodeURIComponent(' ')), 64);
|
22
|
-
const { walletDid } = session.useDid({ session });
|
23
|
-
const currentRole = useCreation(
|
24
|
-
() => session.user?.passports?.find((item) => item.name === session.user.role),
|
25
|
-
[session?.user?.passports, session?.user?.role]
|
26
|
-
);
|
27
|
-
const userEmail = useCreation(() => session.user?.email, [session?.user]);
|
28
|
-
|
29
|
-
const canEdit = useCreation(() => {
|
30
|
-
if (onSwitchProfile instanceof Function) {
|
31
|
-
if (switchProfile && hasBindWallet) {
|
32
|
-
return true;
|
33
|
-
}
|
34
|
-
}
|
35
|
-
return false;
|
36
|
-
}, [onSwitchProfile, switchProfile, hasBindWallet, session.provider]);
|
37
|
-
|
38
|
-
const _onSwitchProfile = useMemoizedFn(() => {
|
39
|
-
if (window.blocklet?.appPid) {
|
40
|
-
window.location.href = '/.well-known/service/user/profile';
|
41
|
-
} else if (canEdit) {
|
42
|
-
onSwitchProfile();
|
43
|
-
}
|
44
|
-
});
|
45
|
-
|
46
|
-
return (
|
47
|
-
<Box
|
48
|
-
sx={{
|
49
|
-
display: 'flex',
|
50
|
-
alignItems: 'center',
|
51
|
-
gap: '12px',
|
52
|
-
padding: '15px',
|
53
|
-
}}>
|
54
|
-
<Box
|
55
|
-
onClick={_onSwitchProfile}
|
56
|
-
data-cy="sessionManager-switch-profile-trigger"
|
57
|
-
sx={{
|
58
|
-
cursor: canEdit ? 'pointer' : 'default',
|
59
|
-
position: 'relative',
|
60
|
-
borderRadius: '100%',
|
61
|
-
overflow: 'hidden',
|
62
|
-
fontSize: 0,
|
63
|
-
'&:hover': canEdit
|
64
|
-
? {
|
65
|
-
'&::after': {
|
66
|
-
content: `"${t('switch')}"`,
|
67
|
-
position: 'absolute',
|
68
|
-
bottom: 0,
|
69
|
-
background: 'rgba(0, 0, 0, 0.2)',
|
70
|
-
left: 0,
|
71
|
-
right: 0,
|
72
|
-
height: '2.2em',
|
73
|
-
color: 'white',
|
74
|
-
textAlign: 'center',
|
75
|
-
fontSize: '12px',
|
76
|
-
lineHeight: '2em',
|
77
|
-
},
|
78
|
-
}
|
79
|
-
: {},
|
80
|
-
}}>
|
81
|
-
<DidAvatar variant="circle" did={session.user.did} src={avatar} size={64} shape="circle" />
|
82
|
-
</Box>
|
83
|
-
<Box sx={{ flex: 1, position: 'static', overflow: 'hidden', fontSize: '14px' }}>
|
84
|
-
<Typography variant="h5" fontWeight="bold" sx={{ wordBreak: 'break-all', lineHeight: 1 }}>
|
85
|
-
{session.user.fullName}
|
86
|
-
</Typography>
|
87
|
-
<Chip
|
88
|
-
label={currentRole?.title || session.user?.role.toUpperCase()}
|
89
|
-
size="small"
|
90
|
-
variant="outlined"
|
91
|
-
sx={{
|
92
|
-
height: 'auto',
|
93
|
-
marginRight: 0,
|
94
|
-
fontWeight: 'bold',
|
95
|
-
fontSize: '12px',
|
96
|
-
margin: '6px 0 4px 0',
|
97
|
-
}}
|
98
|
-
icon={<Icon icon={ShieldCheckIcon} height="0.8em" />}
|
99
|
-
deleteIcon={<Icon icon={ExpandMoreIcon} height="1em" />}
|
100
|
-
// HACK: 必须设置 onDelete 函数,deleteIcon 才能显示出来
|
101
|
-
onDelete={onSwitchPassport}
|
102
|
-
onClick={onSwitchPassport}
|
103
|
-
data-cy="sessionManager-switch-passport-trigger"
|
104
|
-
/>
|
105
|
-
{/* eslint-disable-next-line no-nested-ternary */}
|
106
|
-
{session.provider === 'auth0' ? (
|
107
|
-
walletDid ? (
|
108
|
-
<DID responsive={false} compact did={walletDid} />
|
109
|
-
) : null
|
110
|
-
) : (
|
111
|
-
<DID responsive={false} compact did={session.user.did} />
|
112
|
-
)}
|
113
|
-
{userEmail ? <DidAddress responsive={false}>{userEmail}</DidAddress> : null}
|
114
|
-
</Box>
|
115
|
-
</Box>
|
116
|
-
);
|
117
|
-
}
|
@@ -1,95 +0,0 @@
|
|
1
|
-
import PropTypes from 'prop-types';
|
2
|
-
import { IconButton, Paper, Popper, ClickAwayListener } from '@mui/material';
|
3
|
-
import CloseIcon from '@iconify-icons/mdi/close';
|
4
|
-
import { Icon } from '@iconify/react';
|
5
|
-
import { styled } from '../../Theme';
|
6
|
-
|
7
|
-
export default function UserPopper({ anchorEl, dark, children, open, onClose, autoClose }) {
|
8
|
-
return (
|
9
|
-
anchorEl && (
|
10
|
-
<StyledPopper open={open} disablePortal anchorEl={anchorEl} placement="bottom-end" $dark={dark}>
|
11
|
-
<Paper
|
12
|
-
sx={[
|
13
|
-
(theme) => ({
|
14
|
-
borderColor: '#F0F0F0',
|
15
|
-
boxShadow: '0px 8px 12px rgba(92, 92, 92, 0.04)',
|
16
|
-
borderRadius: theme.spacing(2),
|
17
|
-
overflow: 'auto',
|
18
|
-
maxWidth: 'calc(100vw - 10px)',
|
19
|
-
maxHeight: 'calc(100vh - 80px)',
|
20
|
-
'& .MuiChip-root .MuiChip-icon': {
|
21
|
-
color: theme.palette.success.main,
|
22
|
-
},
|
23
|
-
'& .MuiList-root': {
|
24
|
-
width: '320px',
|
25
|
-
},
|
26
|
-
}),
|
27
|
-
dark && {
|
28
|
-
backgroundColor: '#27282c',
|
29
|
-
color: '#fff',
|
30
|
-
border: 0,
|
31
|
-
'& .MuiChip-root': {
|
32
|
-
borderColor: '#aaa',
|
33
|
-
},
|
34
|
-
'& .MuiListItem-root, & .MuiChip-label': {
|
35
|
-
color: '#aaa',
|
36
|
-
},
|
37
|
-
'& .MuiListItem-root:hover': {
|
38
|
-
backgroundColor: '#363434',
|
39
|
-
},
|
40
|
-
},
|
41
|
-
]}
|
42
|
-
variant="outlined">
|
43
|
-
{autoClose ? (
|
44
|
-
<ClickAwayListener onClickAway={onClose}>{children}</ClickAwayListener>
|
45
|
-
) : (
|
46
|
-
<>
|
47
|
-
<IconButton
|
48
|
-
size="small"
|
49
|
-
sx={{ cursor: 'pointer', position: 'absolute', right: 0, top: 0, zIndex: 1 }}
|
50
|
-
onClick={onClose}>
|
51
|
-
<Icon icon={CloseIcon} width={20} height={20} />
|
52
|
-
</IconButton>
|
53
|
-
{children}
|
54
|
-
</>
|
55
|
-
)}
|
56
|
-
</Paper>
|
57
|
-
</StyledPopper>
|
58
|
-
)
|
59
|
-
);
|
60
|
-
}
|
61
|
-
|
62
|
-
UserPopper.propTypes = {
|
63
|
-
anchorEl: PropTypes.instanceOf(Element),
|
64
|
-
dark: PropTypes.bool,
|
65
|
-
open: PropTypes.bool,
|
66
|
-
children: PropTypes.any.isRequired,
|
67
|
-
onClose: PropTypes.func,
|
68
|
-
autoClose: PropTypes.bool,
|
69
|
-
};
|
70
|
-
UserPopper.defaultProps = {
|
71
|
-
anchorEl: null,
|
72
|
-
dark: false,
|
73
|
-
open: false,
|
74
|
-
onClose: () => {},
|
75
|
-
autoClose: true,
|
76
|
-
};
|
77
|
-
|
78
|
-
const StyledPopper = styled(Popper)`
|
79
|
-
z-index: ${({ theme }) => {
|
80
|
-
return theme.zIndex.tooltip;
|
81
|
-
}};
|
82
|
-
|
83
|
-
.session-manager-menu-item {
|
84
|
-
padding: 15px;
|
85
|
-
color: #777;
|
86
|
-
font-size: 16px;
|
87
|
-
&:hover {
|
88
|
-
background-color: #fbfbfb;
|
89
|
-
}
|
90
|
-
}
|
91
|
-
.session-manager-menu-icon {
|
92
|
-
color: #999;
|
93
|
-
margin-right: 8px;
|
94
|
-
}
|
95
|
-
`;
|
@@ -1,33 +0,0 @@
|
|
1
|
-
import { useLocalStorageState, useMemoizedFn } from 'ahooks';
|
2
|
-
import cloneDeep from 'lodash/cloneDeep';
|
3
|
-
|
4
|
-
export default function useConfig() {
|
5
|
-
const [config, setConfig] = useLocalStorageState('blocklet:sessionManager:config', {
|
6
|
-
defaultValue: {
|
7
|
-
accounts: [],
|
8
|
-
expandAccount: true,
|
9
|
-
expandBlocklet: true,
|
10
|
-
},
|
11
|
-
});
|
12
|
-
|
13
|
-
const connectAccount = useMemoizedFn((account) => {
|
14
|
-
const cloneConfig = cloneDeep(config);
|
15
|
-
const accountIndex = cloneConfig.accounts.findIndex((x) => x.did === account.did);
|
16
|
-
if (accountIndex >= 0) {
|
17
|
-
cloneConfig.accounts.splice(accountIndex, 1);
|
18
|
-
}
|
19
|
-
cloneConfig.accounts.unshift(account);
|
20
|
-
setConfig(cloneConfig);
|
21
|
-
});
|
22
|
-
|
23
|
-
const deleteAccount = useMemoizedFn((account) => {
|
24
|
-
const cloneConfig = cloneDeep(config);
|
25
|
-
const findIndex = cloneConfig.accounts.findIndex((item) => item.did === account.did);
|
26
|
-
if (findIndex >= 0) {
|
27
|
-
cloneConfig.accounts.splice(findIndex, 1);
|
28
|
-
}
|
29
|
-
setConfig(cloneConfig);
|
30
|
-
});
|
31
|
-
|
32
|
-
return { config, setConfig, connectAccount, deleteAccount };
|
33
|
-
}
|
@@ -1,52 +0,0 @@
|
|
1
|
-
/* eslint-disable import/prefer-default-export */
|
2
|
-
export const translations = {
|
3
|
-
en: {
|
4
|
-
switch: 'Switch',
|
5
|
-
account: 'account',
|
6
|
-
switchDid: 'Switch DID',
|
7
|
-
switchTo: 'Switch to',
|
8
|
-
switchProfile: 'Switch Profile',
|
9
|
-
switchPassport: 'Switch Passport',
|
10
|
-
disconnect: 'Disconnect',
|
11
|
-
connect: 'Connect',
|
12
|
-
openInWallet: 'Open DID Wallet',
|
13
|
-
alreadyBindOAuth: 'Already bind Auth0',
|
14
|
-
bind: 'Bind ',
|
15
|
-
thirdParty: 'Third Party Login',
|
16
|
-
addAppAccount: 'Add {appName} account',
|
17
|
-
accounts: 'Accounts',
|
18
|
-
blocklet: 'Blocklet',
|
19
|
-
from: 'From',
|
20
|
-
addAnotherAccount: 'Add another account',
|
21
|
-
deleteAccountTitle: 'Remove this account ?',
|
22
|
-
deleteAccountContent: 'After delete account, you can add it again',
|
23
|
-
confirm: 'Confirm',
|
24
|
-
cancel: 'Cancel',
|
25
|
-
noneMenu: 'Empty menu, maybe you should switch to another role',
|
26
|
-
},
|
27
|
-
zh: {
|
28
|
-
switch: '切换',
|
29
|
-
account: '账号',
|
30
|
-
switchDid: '切换账户',
|
31
|
-
switchTo: '切换至',
|
32
|
-
switchProfile: '切换用户信息',
|
33
|
-
switchPassport: '切换通行证',
|
34
|
-
disconnect: '退出登录',
|
35
|
-
connect: '登录',
|
36
|
-
openInWallet: '打开 DID 钱包',
|
37
|
-
// NOTE: 目前只有 Auth0,展示出具体的第三方名字会更好
|
38
|
-
alreadyBindOAuth: '已绑定 Auth0 账号',
|
39
|
-
bind: '绑定',
|
40
|
-
thirdParty: '第三方登录',
|
41
|
-
addAppAccount: '添加 {appName} 账户',
|
42
|
-
accounts: '账户',
|
43
|
-
blocklet: '应用',
|
44
|
-
from: '连接至',
|
45
|
-
addAnotherAccount: '添加账号',
|
46
|
-
deleteAccountTitle: '是否删除账户?',
|
47
|
-
deleteAccountContent: '账户删除后,可再次添加',
|
48
|
-
confirm: '确认',
|
49
|
-
cancel: '取消',
|
50
|
-
noneMenu: '无操作项,请尝试切换角色',
|
51
|
-
},
|
52
|
-
};
|