@arcblock/ux 2.8.26 → 2.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. package/es/Address/did-address.js +33 -21
  2. package/es/AnimationWaiter/index.js +2 -1
  3. package/es/Avatar/index.js +1 -1
  4. package/es/BlockletContext/index.js +1 -1
  5. package/es/CardSelector/index.js +2 -1
  6. package/es/Colors/index.js +2 -1
  7. package/es/Colors/themes/temp.js +17 -0
  8. package/es/Datatable/TableSearch.js +2 -1
  9. package/es/Img/index.js +7 -6
  10. package/es/Locale/selector.js +15 -13
  11. package/es/NFTDisplay/index.js +2 -1
  12. package/es/QRCode/index.js +2 -1
  13. package/es/SessionBlocklet/index.js +169 -0
  14. package/es/SessionManager/index.js +2 -381
  15. package/es/SessionPermission/index.js +28 -0
  16. package/es/SessionUser/components/logged-in.js +224 -0
  17. package/es/SessionUser/components/session-user-item.js +148 -0
  18. package/es/SessionUser/components/session-user-switch.js +213 -0
  19. package/es/SessionUser/components/un-login.js +64 -0
  20. package/es/SessionUser/components/user-info.js +163 -0
  21. package/es/SessionUser/index.js +49 -0
  22. package/es/SessionUser/libs/translation.js +19 -0
  23. package/es/SessionUser/libs/utils.js +4 -0
  24. package/es/SplitButton/index.js +2 -1
  25. package/es/Toast/index.js +1 -1
  26. package/es/Util/constant.js +10 -0
  27. package/es/Util/index.js +11 -0
  28. package/lib/Address/did-address.js +36 -22
  29. package/lib/AnimationWaiter/index.js +2 -1
  30. package/lib/Avatar/index.js +1 -1
  31. package/lib/BlockletContext/index.js +1 -1
  32. package/lib/CardSelector/index.js +2 -1
  33. package/lib/Colors/index.js +7 -0
  34. package/lib/Colors/themes/temp.js +24 -0
  35. package/lib/Datatable/TableSearch.js +2 -1
  36. package/lib/Img/index.js +7 -6
  37. package/lib/Locale/selector.js +14 -13
  38. package/lib/NFTDisplay/index.js +2 -1
  39. package/lib/QRCode/index.js +2 -1
  40. package/lib/SessionBlocklet/index.js +187 -0
  41. package/lib/SessionManager/index.js +2 -390
  42. package/lib/SessionPermission/index.js +38 -0
  43. package/lib/SessionUser/components/logged-in.js +243 -0
  44. package/lib/SessionUser/components/session-user-item.js +163 -0
  45. package/lib/SessionUser/components/session-user-switch.js +232 -0
  46. package/lib/SessionUser/components/un-login.js +72 -0
  47. package/lib/SessionUser/components/user-info.js +175 -0
  48. package/lib/SessionUser/index.js +57 -0
  49. package/lib/SessionUser/libs/translation.js +26 -0
  50. package/lib/{SessionManager → SessionUser}/libs/utils.js +8 -1
  51. package/lib/SplitButton/index.js +2 -1
  52. package/lib/Toast/index.js +5 -5
  53. package/lib/Util/constant.js +26 -0
  54. package/lib/Util/index.js +16 -3
  55. package/package.json +19 -7
  56. package/src/Address/did-address.jsx +34 -20
  57. package/src/AnimationWaiter/index.js +2 -1
  58. package/src/Avatar/index.jsx +1 -1
  59. package/src/BlockletContext/index.jsx +1 -1
  60. package/src/CardSelector/index.jsx +2 -1
  61. package/src/Colors/index.js +1 -0
  62. package/src/Colors/themes/temp.js +18 -0
  63. package/src/Datatable/TableSearch.js +3 -1
  64. package/src/Img/{index.js → index.jsx} +8 -6
  65. package/src/Locale/selector.jsx +11 -8
  66. package/src/NFTDisplay/index.js +2 -1
  67. package/src/QRCode/index.js +2 -1
  68. package/src/SessionBlocklet/index.jsx +181 -0
  69. package/src/SessionManager/index.jsx +2 -369
  70. package/src/SessionPermission/index.jsx +28 -0
  71. package/src/SessionUser/components/logged-in.jsx +194 -0
  72. package/src/SessionUser/components/session-user-item.jsx +96 -0
  73. package/src/SessionUser/components/session-user-switch.jsx +222 -0
  74. package/src/SessionUser/components/un-login.jsx +55 -0
  75. package/src/SessionUser/components/user-info.jsx +165 -0
  76. package/src/SessionUser/index.jsx +38 -0
  77. package/src/SessionUser/libs/translation.js +19 -0
  78. package/src/{SessionManager → SessionUser}/libs/utils.js +4 -0
  79. package/src/SplitButton/index.js +2 -1
  80. package/src/Toast/index.js +1 -1
  81. package/src/Util/constant.js +12 -0
  82. package/src/Util/index.js +13 -0
  83. package/es/SessionManager/components/account-item.js +0 -212
  84. package/es/SessionManager/components/add-account-item.js +0 -57
  85. package/es/SessionManager/components/federated-login-detecter.js +0 -183
  86. package/es/SessionManager/components/manage-accounts.js +0 -219
  87. package/es/SessionManager/components/manage-blocklet.js +0 -70
  88. package/es/SessionManager/components/menu-accordion.js +0 -103
  89. package/es/SessionManager/components/responsive-popper.js +0 -24
  90. package/es/SessionManager/components/user-drawer.js +0 -68
  91. package/es/SessionManager/components/user-info.js +0 -143
  92. package/es/SessionManager/components/user-popper.js +0 -110
  93. package/es/SessionManager/hooks/use-config.js +0 -34
  94. package/es/SessionManager/libs/translation.js +0 -52
  95. package/es/SessionManager/libs/utils.js +0 -2
  96. package/lib/SessionManager/components/account-item.js +0 -219
  97. package/lib/SessionManager/components/add-account-item.js +0 -66
  98. package/lib/SessionManager/components/federated-login-detecter.js +0 -193
  99. package/lib/SessionManager/components/manage-accounts.js +0 -232
  100. package/lib/SessionManager/components/manage-blocklet.js +0 -86
  101. package/lib/SessionManager/components/menu-accordion.js +0 -111
  102. package/lib/SessionManager/components/responsive-popper.js +0 -34
  103. package/lib/SessionManager/components/user-drawer.js +0 -75
  104. package/lib/SessionManager/components/user-info.js +0 -160
  105. package/lib/SessionManager/components/user-popper.js +0 -104
  106. package/lib/SessionManager/hooks/use-config.js +0 -41
  107. package/lib/SessionManager/libs/translation.js +0 -59
  108. package/src/SessionManager/components/account-item.jsx +0 -156
  109. package/src/SessionManager/components/add-account-item.jsx +0 -49
  110. package/src/SessionManager/components/federated-login-detecter.jsx +0 -167
  111. package/src/SessionManager/components/manage-accounts.jsx +0 -228
  112. package/src/SessionManager/components/manage-blocklet.jsx +0 -70
  113. package/src/SessionManager/components/menu-accordion.jsx +0 -93
  114. package/src/SessionManager/components/responsive-popper.jsx +0 -26
  115. package/src/SessionManager/components/user-drawer.jsx +0 -57
  116. package/src/SessionManager/components/user-info.jsx +0 -117
  117. package/src/SessionManager/components/user-popper.jsx +0 -95
  118. package/src/SessionManager/hooks/use-config.js +0 -33
  119. package/src/SessionManager/libs/translation.js +0 -52
@@ -1,75 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = UserDrawer;
7
- var _propTypes = _interopRequireDefault(require("prop-types"));
8
- var _material = require("@mui/material");
9
- var _close = _interopRequireDefault(require("@iconify-icons/mdi/close"));
10
- var _react = require("@iconify/react");
11
- var _noop = _interopRequireDefault(require("lodash/noop"));
12
- var _jsxRuntime = require("react/jsx-runtime");
13
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
- function UserDrawer(_ref) {
15
- let {
16
- children,
17
- open,
18
- onOpen,
19
- onClose
20
- } = _ref;
21
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Drawer, {
22
- anchor: "bottom",
23
- open: open,
24
- onClose: onClose,
25
- onOpen: onOpen,
26
- sx: theme => ({
27
- '& .MuiDrawer-paper.MuiPaper-root': {
28
- width: '100%',
29
- height: '90vh',
30
- borderTopLeftRadius: '16px',
31
- borderTopRightRadius: '16px'
32
- },
33
- '& .MuiChip-root .MuiChip-icon': {
34
- color: theme.palette.success.main
35
- },
36
- '& .session-manager-menu-item': {
37
- padding: '15px',
38
- color: '#777',
39
- fontSize: '16px',
40
- '&:hover': {
41
- backgroundColor: '#fbfbfb'
42
- }
43
- },
44
- '& .session-manager-menu-icon': {
45
- color: '#999',
46
- marginRight: '8px'
47
- }
48
- }),
49
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.IconButton, {
50
- sx: {
51
- cursor: 'pointer',
52
- position: 'absolute',
53
- right: '8px',
54
- top: '8px',
55
- zIndex: 1
56
- },
57
- onClick: onClose,
58
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Icon, {
59
- icon: _close.default,
60
- width: 28,
61
- height: 28
62
- })
63
- }), children]
64
- });
65
- }
66
- UserDrawer.propTypes = {
67
- children: _propTypes.default.any.isRequired,
68
- open: _propTypes.default.bool.isRequired,
69
- onOpen: _propTypes.default.func,
70
- onClose: _propTypes.default.func
71
- };
72
- UserDrawer.defaultProps = {
73
- onOpen: _noop.default,
74
- onClose: _noop.default
75
- };
@@ -1,160 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = UserInfo;
7
- var _material = require("@mui/material");
8
- var _shieldCheck = _interopRequireDefault(require("@iconify-icons/mdi/shield-check"));
9
- var _expandMore = _interopRequireDefault(require("@iconify-icons/mdi/expand-more"));
10
- var _react = require("@iconify/react");
11
- var _ahooks = require("ahooks");
12
- var _Avatar = _interopRequireDefault(require("../../Avatar"));
13
- var _Address = _interopRequireDefault(require("../../Address"));
14
- var _DID = _interopRequireDefault(require("../../DID"));
15
- var _Util = require("../../Util");
16
- var _util = require("../../Locale/util");
17
- var _translation = require("../libs/translation");
18
- var _Typography = _interopRequireDefault(require("../../Typography"));
19
- var _jsxRuntime = require("react/jsx-runtime");
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
- /* eslint-disable react/jsx-no-bind */
22
- /* eslint-disable react/prop-types */
23
-
24
- function UserInfo(_ref) {
25
- var _session$user, _session$user$avatar, _session$user3, _session$user4, _session$user6;
26
- let {
27
- session,
28
- locale,
29
- onSwitchProfile,
30
- onSwitchPassport,
31
- switchProfile,
32
- hasBindWallet
33
- } = _ref;
34
- const t = function t(key) {
35
- let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
36
- return (0, _util.t)(_translation.translations, key, locale, 'en', data);
37
- };
38
- const avatar = (0, _Util.getUserAvatar)((_session$user = session.user) === null || _session$user === void 0 ? void 0 : (_session$user$avatar = _session$user.avatar) === null || _session$user$avatar === void 0 ? void 0 : _session$user$avatar.replace(/\s/g, encodeURIComponent(' ')), 64);
39
- const {
40
- walletDid
41
- } = session.useDid({
42
- session
43
- });
44
- const currentRole = (0, _ahooks.useCreation)(() => {
45
- var _session$user2, _session$user2$passpo;
46
- return (_session$user2 = session.user) === null || _session$user2 === void 0 ? void 0 : (_session$user2$passpo = _session$user2.passports) === null || _session$user2$passpo === void 0 ? void 0 : _session$user2$passpo.find(item => item.name === session.user.role);
47
- }, [session === null || session === void 0 ? void 0 : (_session$user3 = session.user) === null || _session$user3 === void 0 ? void 0 : _session$user3.passports, session === null || session === void 0 ? void 0 : (_session$user4 = session.user) === null || _session$user4 === void 0 ? void 0 : _session$user4.role]);
48
- const userEmail = (0, _ahooks.useCreation)(() => {
49
- var _session$user5;
50
- return (_session$user5 = session.user) === null || _session$user5 === void 0 ? void 0 : _session$user5.email;
51
- }, [session === null || session === void 0 ? void 0 : session.user]);
52
- const canEdit = (0, _ahooks.useCreation)(() => {
53
- if (onSwitchProfile instanceof Function) {
54
- if (switchProfile && hasBindWallet) {
55
- return true;
56
- }
57
- }
58
- return false;
59
- }, [onSwitchProfile, switchProfile, hasBindWallet, session.provider]);
60
- const _onSwitchProfile = (0, _ahooks.useMemoizedFn)(() => {
61
- var _window$blocklet;
62
- if ((_window$blocklet = window.blocklet) !== null && _window$blocklet !== void 0 && _window$blocklet.appPid) {
63
- window.location.href = '/.well-known/service/user/profile';
64
- } else if (canEdit) {
65
- onSwitchProfile();
66
- }
67
- });
68
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Box, {
69
- sx: {
70
- display: 'flex',
71
- alignItems: 'center',
72
- gap: '12px',
73
- padding: '15px'
74
- },
75
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
76
- onClick: _onSwitchProfile,
77
- "data-cy": "sessionManager-switch-profile-trigger",
78
- sx: {
79
- cursor: canEdit ? 'pointer' : 'default',
80
- position: 'relative',
81
- borderRadius: '100%',
82
- overflow: 'hidden',
83
- fontSize: 0,
84
- '&:hover': canEdit ? {
85
- '&::after': {
86
- content: "\"".concat(t('switch'), "\""),
87
- position: 'absolute',
88
- bottom: 0,
89
- background: 'rgba(0, 0, 0, 0.2)',
90
- left: 0,
91
- right: 0,
92
- height: '2.2em',
93
- color: 'white',
94
- textAlign: 'center',
95
- fontSize: '12px',
96
- lineHeight: '2em'
97
- }
98
- } : {}
99
- },
100
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Avatar.default, {
101
- variant: "circle",
102
- did: session.user.did,
103
- src: avatar,
104
- size: 64,
105
- shape: "circle"
106
- })
107
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Box, {
108
- sx: {
109
- flex: 1,
110
- position: 'static',
111
- overflow: 'hidden',
112
- fontSize: '14px'
113
- },
114
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
115
- variant: "h5",
116
- fontWeight: "bold",
117
- sx: {
118
- wordBreak: 'break-all',
119
- lineHeight: 1
120
- },
121
- children: session.user.fullName
122
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Chip, {
123
- label: (currentRole === null || currentRole === void 0 ? void 0 : currentRole.title) || ((_session$user6 = session.user) === null || _session$user6 === void 0 ? void 0 : _session$user6.role.toUpperCase()),
124
- size: "small",
125
- variant: "outlined",
126
- sx: {
127
- height: 'auto',
128
- marginRight: 0,
129
- fontWeight: 'bold',
130
- fontSize: '12px',
131
- margin: '6px 0 4px 0'
132
- },
133
- icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Icon, {
134
- icon: _shieldCheck.default,
135
- height: "0.8em"
136
- }),
137
- deleteIcon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Icon, {
138
- icon: _expandMore.default,
139
- height: "1em"
140
- })
141
- // HACK: 必须设置 onDelete 函数,deleteIcon 才能显示出来
142
- ,
143
- onDelete: onSwitchPassport,
144
- onClick: onSwitchPassport,
145
- "data-cy": "sessionManager-switch-passport-trigger"
146
- }), session.provider === 'auth0' ? walletDid ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_DID.default, {
147
- responsive: false,
148
- compact: true,
149
- did: walletDid
150
- }) : null : /*#__PURE__*/(0, _jsxRuntime.jsx)(_DID.default, {
151
- responsive: false,
152
- compact: true,
153
- did: session.user.did
154
- }), userEmail ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Address.default, {
155
- responsive: false,
156
- children: userEmail
157
- }) : null]
158
- })]
159
- });
160
- }
@@ -1,104 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = UserPopper;
7
- var _propTypes = _interopRequireDefault(require("prop-types"));
8
- var _material = require("@mui/material");
9
- var _close = _interopRequireDefault(require("@iconify-icons/mdi/close"));
10
- var _react = require("@iconify/react");
11
- var _Theme = require("../../Theme");
12
- var _jsxRuntime = require("react/jsx-runtime");
13
- var _templateObject;
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
- function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
16
- function UserPopper(_ref) {
17
- let {
18
- anchorEl,
19
- dark,
20
- children,
21
- open,
22
- onClose,
23
- autoClose
24
- } = _ref;
25
- return anchorEl && /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledPopper, {
26
- open: open,
27
- disablePortal: true,
28
- anchorEl: anchorEl,
29
- placement: "bottom-end",
30
- $dark: dark,
31
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Paper, {
32
- sx: [theme => ({
33
- borderColor: '#F0F0F0',
34
- boxShadow: '0px 8px 12px rgba(92, 92, 92, 0.04)',
35
- borderRadius: theme.spacing(2),
36
- overflow: 'auto',
37
- maxWidth: 'calc(100vw - 10px)',
38
- maxHeight: 'calc(100vh - 80px)',
39
- '& .MuiChip-root .MuiChip-icon': {
40
- color: theme.palette.success.main
41
- },
42
- '& .MuiList-root': {
43
- width: '320px'
44
- }
45
- }), dark && {
46
- backgroundColor: '#27282c',
47
- color: '#fff',
48
- border: 0,
49
- '& .MuiChip-root': {
50
- borderColor: '#aaa'
51
- },
52
- '& .MuiListItem-root, & .MuiChip-label': {
53
- color: '#aaa'
54
- },
55
- '& .MuiListItem-root:hover': {
56
- backgroundColor: '#363434'
57
- }
58
- }],
59
- variant: "outlined",
60
- children: autoClose ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.ClickAwayListener, {
61
- onClickAway: onClose,
62
- children: children
63
- }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
64
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.IconButton, {
65
- size: "small",
66
- sx: {
67
- cursor: 'pointer',
68
- position: 'absolute',
69
- right: 0,
70
- top: 0,
71
- zIndex: 1
72
- },
73
- onClick: onClose,
74
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Icon, {
75
- icon: _close.default,
76
- width: 20,
77
- height: 20
78
- })
79
- }), children]
80
- })
81
- })
82
- });
83
- }
84
- UserPopper.propTypes = {
85
- anchorEl: _propTypes.default.instanceOf(Element),
86
- dark: _propTypes.default.bool,
87
- open: _propTypes.default.bool,
88
- children: _propTypes.default.any.isRequired,
89
- onClose: _propTypes.default.func,
90
- autoClose: _propTypes.default.bool
91
- };
92
- UserPopper.defaultProps = {
93
- anchorEl: null,
94
- dark: false,
95
- open: false,
96
- onClose: () => {},
97
- autoClose: true
98
- };
99
- const StyledPopper = (0, _Theme.styled)(_material.Popper)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n z-index: ", ";\n\n .session-manager-menu-item {\n padding: 15px;\n color: #777;\n font-size: 16px;\n &:hover {\n background-color: #fbfbfb;\n }\n }\n .session-manager-menu-icon {\n color: #999;\n margin-right: 8px;\n }\n"])), _ref2 => {
100
- let {
101
- theme
102
- } = _ref2;
103
- return theme.zIndex.tooltip;
104
- });
@@ -1,41 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = useConfig;
7
- var _ahooks = require("ahooks");
8
- var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
- function useConfig() {
11
- const [config, setConfig] = (0, _ahooks.useLocalStorageState)('blocklet:sessionManager:config', {
12
- defaultValue: {
13
- accounts: [],
14
- expandAccount: true,
15
- expandBlocklet: true
16
- }
17
- });
18
- const connectAccount = (0, _ahooks.useMemoizedFn)(account => {
19
- const cloneConfig = (0, _cloneDeep.default)(config);
20
- const accountIndex = cloneConfig.accounts.findIndex(x => x.did === account.did);
21
- if (accountIndex >= 0) {
22
- cloneConfig.accounts.splice(accountIndex, 1);
23
- }
24
- cloneConfig.accounts.unshift(account);
25
- setConfig(cloneConfig);
26
- });
27
- const deleteAccount = (0, _ahooks.useMemoizedFn)(account => {
28
- const cloneConfig = (0, _cloneDeep.default)(config);
29
- const findIndex = cloneConfig.accounts.findIndex(item => item.did === account.did);
30
- if (findIndex >= 0) {
31
- cloneConfig.accounts.splice(findIndex, 1);
32
- }
33
- setConfig(cloneConfig);
34
- });
35
- return {
36
- config,
37
- setConfig,
38
- connectAccount,
39
- deleteAccount
40
- };
41
- }
@@ -1,59 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.translations = void 0;
7
- /* eslint-disable import/prefer-default-export */
8
- const translations = {
9
- en: {
10
- switch: 'Switch',
11
- account: 'account',
12
- switchDid: 'Switch DID',
13
- switchTo: 'Switch to',
14
- switchProfile: 'Switch Profile',
15
- switchPassport: 'Switch Passport',
16
- disconnect: 'Disconnect',
17
- connect: 'Connect',
18
- openInWallet: 'Open DID Wallet',
19
- alreadyBindOAuth: 'Already bind Auth0',
20
- bind: 'Bind ',
21
- thirdParty: 'Third Party Login',
22
- addAppAccount: 'Add {appName} account',
23
- accounts: 'Accounts',
24
- blocklet: 'Blocklet',
25
- from: 'From',
26
- addAnotherAccount: 'Add another account',
27
- deleteAccountTitle: 'Remove this account ?',
28
- deleteAccountContent: 'After delete account, you can add it again',
29
- confirm: 'Confirm',
30
- cancel: 'Cancel',
31
- noneMenu: 'Empty menu, maybe you should switch to another role'
32
- },
33
- zh: {
34
- switch: '切换',
35
- account: '账号',
36
- switchDid: '切换账户',
37
- switchTo: '切换至',
38
- switchProfile: '切换用户信息',
39
- switchPassport: '切换通行证',
40
- disconnect: '退出登录',
41
- connect: '登录',
42
- openInWallet: '打开 DID 钱包',
43
- // NOTE: 目前只有 Auth0,展示出具体的第三方名字会更好
44
- alreadyBindOAuth: '已绑定 Auth0 账号',
45
- bind: '绑定',
46
- thirdParty: '第三方登录',
47
- addAppAccount: '添加 {appName} 账户',
48
- accounts: '账户',
49
- blocklet: '应用',
50
- from: '连接至',
51
- addAnotherAccount: '添加账号',
52
- deleteAccountTitle: '是否删除账户?',
53
- deleteAccountContent: '账户删除后,可再次添加',
54
- confirm: '确认',
55
- cancel: '取消',
56
- noneMenu: '无操作项,请尝试切换角色'
57
- }
58
- };
59
- exports.translations = translations;
@@ -1,156 +0,0 @@
1
- import { Box, IconButton, Link, MenuItem, Typography } from '@mui/material';
2
- import PropTypes from 'prop-types';
3
- import { Icon } from '@iconify/react';
4
- import CheckIcon from '@iconify-icons/mdi/check';
5
- import AppleIOSIcon from '@iconify-icons/mdi/apple-ios';
6
- import AndroidIcon from '@iconify-icons/mdi/android';
7
- import WebIcon from '@iconify-icons/mdi/web';
8
- import ApiIcon from '@iconify-icons/mdi/api';
9
- import Auth0Icon from '@iconify-icons/logos/auth0-icon';
10
- import TrashCanOutlineIcon from '@iconify-icons/mdi/trash-can-outline';
11
- import { useCreation, useMemoizedFn } from 'ahooks';
12
-
13
- import Avatar from '../../Avatar';
14
- import DID from '../../DID';
15
- import { translate } from '../../Locale/util';
16
- import { translations } from '../libs/translation';
17
- import { getFederatedEnabled } from '../../Util/federated';
18
-
19
- export default function AccountItem({ account, active, onDelete, onChoose, locale }) {
20
- const t = useMemoizedFn((key, data = {}) => {
21
- return translate(translations, key, locale, 'en', data);
22
- });
23
-
24
- const federatedEnabled = getFederatedEnabled();
25
-
26
- const _onChoose = useMemoizedFn(() => onChoose(account, { active }));
27
-
28
- const _onDelete = useMemoizedFn((e) => {
29
- e.preventDefault();
30
- e.stopPropagation();
31
- onDelete(account, { active });
32
- });
33
-
34
- const stopPropagation = useMemoizedFn((e) => {
35
- e.stopPropagation();
36
- });
37
-
38
- const walletIcon = useCreation(() => {
39
- const { walletOS, provider } = account;
40
- if (provider === 'auth0') {
41
- return <Icon icon={Auth0Icon} width={10} height={10} style={{ color: 'black' }} />;
42
- }
43
- if (walletOS === 'ios') {
44
- return <Icon icon={AppleIOSIcon} width={16} height={16} style={{ color: 'black' }} />;
45
- }
46
- if (walletOS === 'android') {
47
- return <Icon icon={AndroidIcon} width={14} height={14} style={{ color: 'black' }} />;
48
- }
49
- if (walletOS === 'web') {
50
- return <Icon icon={WebIcon} style={{ color: 'black' }} />;
51
- }
52
- if (walletOS === 'api') {
53
- return <Icon icon={ApiIcon} width={14} height={14} style={{ color: 'black' }} />;
54
- }
55
- return null;
56
- }, [account.walletOS]);
57
-
58
- if (!account?.did || !account?.appName) {
59
- return null;
60
- }
61
-
62
- return (
63
- <MenuItem
64
- onClick={_onChoose}
65
- sx={{
66
- display: 'flex',
67
- alignItems: 'center',
68
- overflow: 'hidden',
69
- gap: '8px',
70
- position: 'relative',
71
- '.account-item-actions': {
72
- position: 'absolute',
73
- right: 0,
74
- top: 0,
75
- bottom: 0,
76
- marginRight: '12px',
77
- display: 'flex',
78
- alignItems: 'center',
79
- },
80
- '.account-item-action': {
81
- alignItems: 'center',
82
- display: 'none',
83
- },
84
- '&:hover .account-item-action': {
85
- display: 'flex',
86
- },
87
- }}
88
- className="session-manager-menu-item">
89
- <Avatar did={account.did} size={42} />
90
- <Box
91
- sx={{
92
- flex: 1,
93
- overflow: 'hidden',
94
- fontSize: 0,
95
- '.did-address-avatar': {
96
- display: 'none !important',
97
- },
98
- }}>
99
- <DID did={account.did} copyable={false} size={14} responsive={false} compact sx={{ lineHeight: 1 }} />
100
- <Typography variant="caption" display="flex" alignItems="center" gap={0.5}>
101
- {walletIcon}
102
- {federatedEnabled ? (
103
- <>
104
- {t('from')}{' '}
105
- <Link
106
- href={account.appUrl}
107
- target="_blank"
108
- onClick={stopPropagation}
109
- sx={{
110
- textDecoration: 'none',
111
- '&:hover': {
112
- textDecoration: 'underline',
113
- },
114
- }}>
115
- {account.appName}
116
- </Link>
117
- </>
118
- ) : (
119
- // HACK: 用于在有 icon 的情况下,该该行的高度撑高为文字高度
120
- walletIcon && ' '
121
- )}
122
- </Typography>
123
- </Box>
124
- <Box className="account-item-actions">
125
- {active ? (
126
- <Box className="account-item-action" style={{ display: 'flex' }} key="CheckIcon">
127
- <IconButton color="success">
128
- <Icon icon={CheckIcon} color="success" />
129
- </IconButton>
130
- </Box>
131
- ) : (
132
- <Box className="account-item-action" key="TrashCanOutlineIcon">
133
- <IconButton color="error" onClick={_onDelete}>
134
- <Icon icon={TrashCanOutlineIcon} color="error" />
135
- </IconButton>
136
- </Box>
137
- )}
138
- </Box>
139
- </MenuItem>
140
- );
141
- }
142
-
143
- AccountItem.propTypes = {
144
- account: PropTypes.object,
145
- active: PropTypes.bool,
146
- locale: PropTypes.string,
147
- onChoose: PropTypes.func,
148
- onDelete: PropTypes.func,
149
- };
150
- AccountItem.defaultProps = {
151
- account: null,
152
- active: false,
153
- locale: 'en',
154
- onChoose: () => {},
155
- onDelete: () => {},
156
- };
@@ -1,49 +0,0 @@
1
- import { Icon } from '@iconify/react';
2
- import PropTypes from 'prop-types';
3
- import { MenuItem, Typography } from '@mui/material';
4
- import AddIcon from '@iconify-icons/ion/ios-add-circle-outline';
5
- import { useCreation, useMemoizedFn } from 'ahooks';
6
- import { translate } from '../../Locale/util';
7
- import { translations } from '../libs/translation';
8
- import { getApps } from '../../Util/federated';
9
-
10
- export default function AddAccountItem({ onAdd, locale, session }) {
11
- const t = useMemoizedFn((key, data = {}) => {
12
- return translate(translations, key, locale, 'en', data);
13
- });
14
- const apps = useCreation(() => {
15
- return getApps();
16
- }, []);
17
-
18
- const _onAdd = useMemoizedFn(() => {
19
- // HACK: 如果是非统一登录应用,则 sourceAppPid 的值为 null
20
- const sourceAppPid = session?.user?.sourceAppPid || null;
21
- const app = apps.find((x) => x.appPid === sourceAppPid);
22
- if (app) {
23
- onAdd(app);
24
- } else {
25
- onAdd(apps[0]);
26
- }
27
- });
28
-
29
- return (
30
- <MenuItem
31
- onClick={_onAdd}
32
- className="session-manager-menu-item"
33
- sx={{ display: 'flex', gap: '8px' }}
34
- data-cy="sessionManager-switch-trigger">
35
- <Icon icon={AddIcon} width={24} height={24} />
36
- <Typography>{t('addAnotherAccount')}</Typography>
37
- </MenuItem>
38
- );
39
- }
40
-
41
- AddAccountItem.propTypes = {
42
- onAdd: PropTypes.func,
43
- locale: PropTypes.string,
44
- session: PropTypes.object.isRequired,
45
- };
46
- AddAccountItem.defaultProps = {
47
- onAdd: () => {},
48
- locale: 'en',
49
- };