@arcblock/ux 2.7.15 → 2.7.17

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.
Files changed (57) hide show
  1. package/es/Dialog/confirm.js +10 -8
  2. package/es/Img/index.js +7 -7
  3. package/es/SessionManager/account-item.js +133 -0
  4. package/es/SessionManager/add-account-item.js +100 -0
  5. package/es/SessionManager/federated-login-detecter.js +37 -33
  6. package/es/SessionManager/index.js +119 -259
  7. package/es/SessionManager/manage-accounts.js +156 -0
  8. package/es/SessionManager/manage-blocklet.js +70 -0
  9. package/es/SessionManager/menu-accordion.js +104 -0
  10. package/es/SessionManager/translation.js +52 -0
  11. package/es/SessionManager/use-config.js +34 -0
  12. package/es/SessionManager/user-info.js +147 -0
  13. package/es/SessionManager/user-popper.js +10 -53
  14. package/es/SessionManager/utils.js +2 -0
  15. package/es/Typography/index.js +89 -0
  16. package/es/Util/federated.js +65 -0
  17. package/es/Util/index.js +7 -0
  18. package/lib/Dialog/confirm.js +9 -7
  19. package/lib/Img/index.js +7 -7
  20. package/lib/SessionManager/account-item.js +141 -0
  21. package/lib/SessionManager/add-account-item.js +108 -0
  22. package/lib/SessionManager/federated-login-detecter.js +38 -33
  23. package/lib/SessionManager/index.js +122 -272
  24. package/lib/SessionManager/manage-accounts.js +168 -0
  25. package/lib/SessionManager/manage-blocklet.js +86 -0
  26. package/lib/SessionManager/menu-accordion.js +112 -0
  27. package/lib/SessionManager/translation.js +59 -0
  28. package/lib/SessionManager/use-config.js +41 -0
  29. package/lib/SessionManager/user-info.js +163 -0
  30. package/lib/SessionManager/user-popper.js +8 -8
  31. package/lib/SessionManager/utils.js +16 -0
  32. package/lib/Typography/index.js +100 -0
  33. package/lib/Util/federated.js +85 -0
  34. package/lib/Util/index.js +11 -2
  35. package/package.json +12 -5
  36. package/src/Dialog/confirm.js +9 -6
  37. package/src/Img/index.js +5 -5
  38. package/src/SessionManager/account-item.jsx +109 -0
  39. package/src/SessionManager/add-account-item.jsx +97 -0
  40. package/src/SessionManager/federated-login-detecter.jsx +42 -29
  41. package/src/SessionManager/index.jsx +131 -259
  42. package/src/SessionManager/manage-accounts.jsx +157 -0
  43. package/src/SessionManager/manage-blocklet.jsx +70 -0
  44. package/src/SessionManager/menu-accordion.jsx +94 -0
  45. package/src/SessionManager/translation.js +52 -0
  46. package/src/SessionManager/use-config.js +33 -0
  47. package/src/SessionManager/user-info.jsx +116 -0
  48. package/src/SessionManager/user-popper.jsx +6 -51
  49. package/src/SessionManager/utils.js +3 -0
  50. package/src/Typography/index.jsx +79 -0
  51. package/src/Util/federated.js +73 -0
  52. package/src/Util/index.js +8 -0
  53. /package/src/Avatar/{did-motif.js → did-motif.jsx} +0 -0
  54. /package/src/Avatar/{index.js → index.jsx} +0 -0
  55. /package/src/Header/{auto-hidden.js → auto-hidden.jsx} +0 -0
  56. /package/src/Header/{header.js → header.jsx} +0 -0
  57. /package/src/Header/{responsive-header.js → responsive-header.jsx} +0 -0
@@ -7,26 +7,25 @@ exports.default = void 0;
7
7
  var _react = require("react");
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _material = require("@mui/material");
10
- var _PersonOutline = _interopRequireDefault(require("@mui/icons-material/PersonOutline"));
11
- var _Link = _interopRequireDefault(require("@mui/icons-material/Link"));
12
- var _VpnKeyOutlined = _interopRequireDefault(require("@mui/icons-material/VpnKeyOutlined"));
13
- var _ShieldCheck = _interopRequireDefault(require("mdi-material-ui/ShieldCheck"));
14
10
  var _Account = _interopRequireDefault(require("@arcblock/icons/lib/Account"));
15
- var _OpenIn = _interopRequireDefault(require("@arcblock/icons/lib/OpenIn"));
16
- var _Disconnect = _interopRequireDefault(require("@arcblock/icons/lib/Disconnect"));
17
- var _Switch = _interopRequireDefault(require("@arcblock/icons/lib/Switch"));
18
- var _useBrowser = _interopRequireDefault(require("@arcblock/react-hooks/lib/useBrowser"));
19
11
  var _noop = _interopRequireDefault(require("lodash/noop"));
20
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
12
+ var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
13
+ var _ahooks = require("ahooks");
21
14
  var _Avatar = _interopRequireDefault(require("../Avatar"));
22
- var _Address = _interopRequireDefault(require("../Address"));
23
15
  var _Util = require("../Util");
24
16
  var _federatedLoginDetecter = _interopRequireDefault(require("./federated-login-detecter"));
25
17
  var _userPopper = _interopRequireDefault(require("./user-popper"));
18
+ var _userInfo = _interopRequireDefault(require("./user-info"));
19
+ var _util = require("../Locale/util");
20
+ var _manageAccounts = _interopRequireDefault(require("./manage-accounts"));
21
+ var _manageBlocklet = _interopRequireDefault(require("./manage-blocklet"));
22
+ var _translation = require("./translation");
23
+ var _utils = require("./utils");
24
+ var _useConfig = _interopRequireDefault(require("./use-config"));
25
+ var _federated = require("../Util/federated");
26
26
  var _jsxRuntime = require("react/jsx-runtime");
27
- const _excluded = ["session", "locale", "showText", "showRole", "switchDid", "switchProfile", "switchPassport", "disableLogout", "onLogin", "onLogout", "onSwitchDid", "onSwitchProfile", "onSwitchPassport", "onBindWallet", "menu", "menuRender", "dark", "size"],
28
- _excluded2 = ["svgIcon"];
29
- /* eslint-disable react/no-array-index-key */
27
+ const _excluded = ["session", "locale", "showText", "showRole", "switchDid", "switchProfile", "switchPassport", "disableLogout", "onLogin", "onLogout", "onSwitchDid", "onSwitchProfile", "onSwitchPassport", "onBindWallet", "menu", "menuRender", "dark", "size", "showManageBlocklet"];
28
+ /* eslint-disable react/prop-types */
30
29
  /* eslint-disable react/jsx-no-bind */
31
30
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
32
31
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -36,47 +35,8 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typ
36
35
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
37
36
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
38
37
  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; }
39
- const translations = {
40
- en: {
41
- account: 'account',
42
- switchDid: 'Switch DID',
43
- switchTo: 'Switch to',
44
- switchProfile: 'Switch Profile',
45
- switchPassport: 'Switch Passport',
46
- disconnect: 'Disconnect',
47
- connect: 'Connect',
48
- openInWallet: 'Open DID Wallet',
49
- alreadyBindOAuth: 'Already bind Auth0',
50
- bind: 'Bind ',
51
- thirdParty: 'Third Party Login',
52
- connectedWith: 'Connected with'
53
- },
54
- zh: {
55
- account: '账号',
56
- switchDid: '切换账户',
57
- switchTo: '切换至',
58
- switchProfile: '切换用户信息',
59
- switchPassport: '切换通行证',
60
- disconnect: '退出',
61
- connect: '登录',
62
- openInWallet: '打开 DID 钱包',
63
- // NOTE: 目前只有 Auth0,展示出具体的第三方名字会更好
64
- alreadyBindOAuth: '已绑定 Auth0 账号',
65
- bind: '绑定',
66
- thirdParty: '第三方登录',
67
- connectedWith: '连接至'
68
- }
69
- };
70
- const getConnectedAccounts = user => {
71
- var _user$extraConfigs;
72
- return (user === null || user === void 0 ? void 0 : user.connectedAccounts) || (user === null || user === void 0 ? void 0 : (_user$extraConfigs = user.extraConfigs) === null || _user$extraConfigs === void 0 ? void 0 : _user$extraConfigs.connectedAccounts) || [];
73
- };
74
- const getSourceProvider = user => {
75
- var _user$extraConfigs2;
76
- return (user === null || user === void 0 ? void 0 : user.sourceProvider) || (user === null || user === void 0 ? void 0 : (_user$extraConfigs2 = user.extraConfigs) === null || _user$extraConfigs2 === void 0 ? void 0 : _user$extraConfigs2.sourceProvider) || 'wallet';
77
- };
78
38
  function SessionManager(_ref) {
79
- var _session$user, _session$user$avatar, _window$blocklet, _window$blocklet$sett, _window$blocklet$sett2, _session$user3, _session$user4, _session$user5;
39
+ var _session$user, _session$user$avatar;
80
40
  let {
81
41
  session,
82
42
  locale,
@@ -95,36 +55,34 @@ function SessionManager(_ref) {
95
55
  menu,
96
56
  menuRender,
97
57
  dark,
98
- size
58
+ size,
59
+ showManageBlocklet
99
60
  } = _ref,
100
61
  rest = _objectWithoutProperties(_ref, _excluded);
101
- const translation = translations[locale] || translations.en;
62
+ const latestSession = (0, _ahooks.useLatest)(session);
63
+ const {
64
+ connectAccount,
65
+ config,
66
+ setConfig
67
+ } = (0, _useConfig.default)();
68
+ const t = (0, _ahooks.useMemoizedFn)(function (key) {
69
+ let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
70
+ return (0, _util.translate)(_translation.translations, key, locale, 'en', data);
71
+ });
102
72
  const userAnchorRef = (0, _react.useRef)(null);
103
- // eslint-disable-next-line react/prop-types
104
73
  const {
105
74
  logoutOAuth,
106
- bindOAuth,
107
- configs: oauthConfigs,
108
75
  switchOAuthPassport
109
76
  } = session.useOAuth();
110
77
  const [userOpen, setUserOpen] = (0, _react.useState)(false);
111
78
 
112
79
  // base64 img maybe have some blank char, need encodeURIComponent to transform it
113
80
  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(' ')));
114
- const currentRole = (0, _react.useMemo)(() => {
115
- var _session$user2, _session$user2$passpo;
116
- 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);
117
- }, [session.user]);
118
- const browser = (0, _useBrowser.default)();
119
- // eslint-disable-next-line react/prop-types
120
- const {
121
- walletDid
122
- } = session.useDid({
123
- session
124
- });
125
- const isRawWalletAccount = getSourceProvider(session.user) === 'wallet';
126
- const connectedAccounts = getConnectedAccounts(session.user);
127
- const federatedAccount = connectedAccounts.find(item => item.provider === 'federated');
81
+ const isRawWalletAccount = (0, _utils.getSourceProvider)(session.user) === 'wallet';
82
+ const connectedAccounts = (0, _utils.getConnectedAccounts)(session.user);
83
+ const isFirstLoading = (0, _react.useMemo)(() => {
84
+ return (session === null || session === void 0 ? void 0 : session.initialized) === false && (session === null || session === void 0 ? void 0 : session.loading) === true;
85
+ }, [session === null || session === void 0 ? void 0 : session.initialized, session === null || session === void 0 ? void 0 : session.loading]);
128
86
  let hasBindWallet = false;
129
87
  let hasBindAccount = false;
130
88
  if (isRawWalletAccount) {
@@ -136,19 +94,38 @@ function SessionManager(_ref) {
136
94
  hasBindAccount = true;
137
95
  hasBindWallet = true;
138
96
  }
139
- const oauthConfigList = Object.entries(oauthConfigs).map(_ref2 => {
140
- let [key, value] = _ref2;
141
- return _objectSpread(_objectSpread({}, value), {}, {
142
- provider: key
143
- });
144
- }).filter(item => item.enabled);
145
- const isFirstLoading = (0, _react.useMemo)(() => {
146
- // eslint-disable-next-line react/prop-types
147
- return (session === null || session === void 0 ? void 0 : session.initialized) === false && (session === null || session === void 0 ? void 0 : session.loading) === true;
148
- // eslint-disable-next-line react/prop-types
149
- }, [session === null || session === void 0 ? void 0 : session.initialized, session === null || session === void 0 ? void 0 : session.loading]);
150
- const masterSiteInfo = (_window$blocklet = window.blocklet) === null || _window$blocklet === void 0 ? void 0 : (_window$blocklet$sett = _window$blocklet.settings) === null || _window$blocklet$sett === void 0 ? void 0 : (_window$blocklet$sett2 = _window$blocklet$sett.federated) === null || _window$blocklet$sett2 === void 0 ? void 0 : _window$blocklet$sett2.master;
151
- const currentSiteInfo = window.blocklet;
97
+ const _connectAccount = (0, _ahooks.useMemoizedFn)(async () => {
98
+ var _latestSession$curren, _window;
99
+ // HACK: 强制等待组件渲染一轮,以拿到最新的 session
100
+ await (0, _Util.sleep)();
101
+ if (!((_latestSession$curren = latestSession.current) !== null && _latestSession$curren !== void 0 && _latestSession$curren.user)) {
102
+ return;
103
+ }
104
+ if (typeof window === 'undefined') {
105
+ return;
106
+ }
107
+ const blocklet = (_window = window) === null || _window === void 0 ? void 0 : _window.blocklet;
108
+ const currentApp = (0, _federated.getCurrentApp)(blocklet);
109
+ const masterApp = (0, _federated.getFederatedApp)(blocklet);
110
+ const targetApp = latestSession.current.user.sourceAppPid ? masterApp : currentApp;
111
+ if (targetApp) {
112
+ const loginAccount = _objectSpread({
113
+ did: latestSession.current.user.did,
114
+ avatar: latestSession.current.user.avatar,
115
+ provider: latestSession.current.provider
116
+ }, targetApp);
117
+ connectAccount(loginAccount);
118
+ }
119
+ });
120
+
121
+ // HACK: 用于处理 统一登录 的自动登录情况,添加一个已连接的账号
122
+ // 同时可用于以前的站点,会自动生成一个已连接的账号
123
+ (0, _react.useEffect)(() => {
124
+ if (session.user) {
125
+ _connectAccount();
126
+ }
127
+ // eslint-disable-next-line react-hooks/exhaustive-deps
128
+ }, [session.user]);
152
129
  if (!session.user) {
153
130
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
154
131
  children: [showText ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Button, _objectSpread(_objectSpread({
@@ -169,7 +146,7 @@ function SessionManager(_ref) {
169
146
  style: {
170
147
  lineHeight: '25px'
171
148
  },
172
- children: translation.connect
149
+ children: t('connect')
173
150
  })]
174
151
  })) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.IconButton, _objectSpread(_objectSpread({
175
152
  ref: userAnchorRef
@@ -210,15 +187,21 @@ function SessionManager(_ref) {
210
187
  function onToggleUser() {
211
188
  setUserOpen(prevOpen => !prevOpen);
212
189
  }
190
+ function close() {
191
+ setUserOpen(false);
192
+ }
213
193
  function onCloseUser(e) {
214
194
  if (userAnchorRef.current && userAnchorRef.current.contains(e.target)) {
215
195
  return;
216
196
  }
217
- setUserOpen(false);
197
+ close();
218
198
  }
219
199
  function _onLogin() {
220
200
  if (!isFirstLoading) {
221
- session.login(onLogin);
201
+ session.login(function () {
202
+ _connectAccount();
203
+ onLogin(...arguments);
204
+ });
222
205
  }
223
206
  }
224
207
  function _onLogout() {
@@ -234,7 +217,7 @@ function SessionManager(_ref) {
234
217
  }).catch(err => {
235
218
  console.error(err);
236
219
  }).finally(() => {
237
- setUserOpen(false);
220
+ close();
238
221
  });
239
222
  });
240
223
  }
@@ -242,29 +225,10 @@ function SessionManager(_ref) {
242
225
  * @name 切换账户
243
226
  * @description 该功能仅在登录后才能使用,目前仅用于切换普通登录和统一登录的账户,所以会增加一些与统一登录相关的逻辑
244
227
  */
245
- function _onSwitchDid() {
246
- const {
247
- provider,
248
- user
249
- } = session;
250
- if (!user) return;
251
- let targetProvider = provider;
252
- if (provider === 'federated') {
253
- targetProvider = 'wallet';
254
- } else if (['auth0', 'wallet'].includes(provider)) {
255
- targetProvider = 'federated';
256
- }
257
- session.switchDid(function () {
258
- setUserOpen(false);
259
- onSwitchDid(...arguments);
260
- }, {
261
- provider: targetProvider,
262
- providerMode: 'paramsFirst'
263
- });
264
- }
228
+
265
229
  function _onSwitchProfile() {
266
230
  session.switchProfile(function () {
267
- setUserOpen(false);
231
+ close();
268
232
  onSwitchProfile(...arguments);
269
233
  });
270
234
  }
@@ -273,28 +237,16 @@ function SessionManager(_ref) {
273
237
  user,
274
238
  provider
275
239
  } = session;
276
- if (!isRawWalletAccount && provider !== 'federated') {
240
+ if (['auth0'].includes(provider)) {
277
241
  switchOAuthPassport(user);
278
242
  } else {
279
- setUserOpen(false);
243
+ close();
280
244
  session.switchPassport(function () {
281
- setUserOpen(false);
245
+ close();
282
246
  onSwitchPassport(...arguments);
283
247
  });
284
248
  }
285
249
  }
286
- function _onBindWallet() {
287
- setUserOpen(false);
288
- // FIXME: @zhanghan 暂时切换回 isRawWalletAccount 的方式来判断,在 did-connect 改版时,简化这里的关系判断
289
- if (!isRawWalletAccount) {
290
- session.bindWallet(function () {
291
- setUserOpen(false);
292
- onBindWallet(...arguments);
293
- });
294
- } else {
295
- bindOAuth();
296
- }
297
- }
298
250
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
299
251
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.IconButton, _objectSpread(_objectSpread({
300
252
  ref: userAnchorRef,
@@ -323,151 +275,47 @@ function SessionManager(_ref) {
323
275
  sx: {
324
276
  p: 0
325
277
  },
326
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
327
- className: "session-manager-user",
328
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
329
- className: "session-manager-user-name",
330
- role: "button",
331
- "aria-label": "User info panel",
332
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
333
- children: session.user.fullName
334
- }), !!showRole && ((currentRole === null || currentRole === void 0 ? void 0 : currentRole.title) || ((_session$user3 = session.user) === null || _session$user3 === void 0 ? void 0 : _session$user3.role.toUpperCase())) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Chip, {
335
- label: (currentRole === null || currentRole === void 0 ? void 0 : currentRole.title) || ((_session$user4 = session.user) === null || _session$user4 === void 0 ? void 0 : _session$user4.role.toUpperCase()),
336
- size: "small",
337
- variant: "outlined",
338
- sx: {
339
- height: 'auto',
340
- marginRight: 0
341
- },
342
- icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.SvgIcon, {
343
- component: _ShieldCheck.default,
344
- size: "small"
345
- })
346
- })]
347
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
348
- className: "session-manager-id-list",
349
- "aria-label": "User DID list",
350
- children: [walletDid && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
351
- className: "session-manager-id-item",
352
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Address.default, {
353
- responsive: false,
354
- children: walletDid
355
- })
356
- }), federatedAccount && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
357
- className: "session-manager-id-item",
358
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Address.default, {
359
- responsive: false,
360
- children: federatedAccount.did
361
- })
362
- }), (session === null || session === void 0 ? void 0 : (_session$user5 = session.user) === null || _session$user5 === void 0 ? void 0 : _session$user5.email) && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
363
- className: "session-manager-id-item",
364
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Address.default, {
365
- responsive: false,
366
- children: session.user.email
367
- })
368
- })]
369
- })]
370
- }), Array.isArray(menu) && menu.map((menuItem, index) => {
371
- const {
372
- svgIcon
373
- } = menuItem,
374
- menuProps = _objectWithoutProperties(menuItem, _excluded2);
375
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.MenuItem, _objectSpread(_objectSpread({
376
- className: "session-manager-menu-item"
377
- }, _objectSpread(_objectSpread({}, menuProps), {}, {
378
- icon: undefined,
379
- label: undefined
380
- })), {}, {
381
- children: [svgIcon ? svgIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.SvgIcon, {
382
- component: svgIcon,
383
- className: "session-manager-menu-icon"
384
- }) : menuItem.icon, menuItem.label]
385
- }), index);
386
- }), menuRender({
387
- classes: {
388
- menuItem: 'session-manager-menu-item',
389
- menuIcon: 'session-manager-menu-icon'
278
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_userInfo.default, {
279
+ session: session,
280
+ size: size,
281
+ locale: locale,
282
+ onSwitchProfile: () => {
283
+ close();
284
+ _onSwitchProfile();
285
+ },
286
+ onSwitchPassport: () => {
287
+ close();
288
+ _onSwitchPassport();
289
+ },
290
+ close: close,
291
+ switchProfile: switchProfile,
292
+ hasBindWallet: hasBindWallet
293
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Divider, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_manageAccounts.default, {
294
+ session: session,
295
+ locale: locale,
296
+ onBindWallet: onBindWallet,
297
+ onSwitchDid: onSwitchDid,
298
+ connectAccount: _connectAccount,
299
+ close: close,
300
+ hasBindAccount: hasBindAccount,
301
+ onLogout: _onLogout,
302
+ expanded: config.expandAccount,
303
+ onExpand: value => {
304
+ const cloneConfig = (0, _cloneDeep.default)(config);
305
+ cloneConfig.expandAccount = value;
306
+ setConfig(cloneConfig);
390
307
  }
391
- }), !browser.wallet && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.MenuItem, {
392
- component: "a",
393
- className: "session-manager-menu-item",
394
- "data-cy": "sessionManager-openInWallet",
395
- href: "https://www.abtwallet.io/",
396
- "aria-label": translation.openInWallet,
397
- target: "_blank",
398
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.SvgIcon, {
399
- component: _OpenIn.default,
400
- className: "session-manager-menu-icon"
401
- }), translation.openInWallet]
402
- }), !(0, _isEmpty.default)(masterSiteInfo) && !!switchDid && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.MenuItem, {
403
- className: "session-manager-menu-item",
404
- onClick: _onSwitchDid,
405
- "aria-label": translation.switchDid,
406
- "data-cy": "sessionManager-switch-trigger",
407
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.SvgIcon, {
408
- component: _Switch.default,
409
- className: "session-manager-menu-icon"
410
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Box, {
411
- sx: {
412
- whiteSpace: 'normal',
413
- wordBreak: 'break-all'
414
- },
415
- children: [translation.switchTo, session.provider === 'federated' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Link, {
416
- mx: 1,
417
- href: currentSiteInfo.appUrl,
418
- underline: "hover",
419
- target: "_blank",
420
- title: currentSiteInfo.appName,
421
- "aria-label": "Open current site url",
422
- children: currentSiteInfo.appName
423
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Link, {
424
- mx: 1,
425
- href: masterSiteInfo.appUrl,
426
- underline: "hover",
427
- target: "_blank",
428
- title: masterSiteInfo.appName,
429
- "aria-label": "Open federated master site url",
430
- children: masterSiteInfo.appName
431
- }), translation.account]
432
- })]
433
- }), !!switchProfile && hasBindWallet && session.provider !== 'federated' && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.MenuItem, {
434
- className: "session-manager-menu-item",
435
- onClick: _onSwitchProfile,
436
- "aria-label": translation.switchProfile,
437
- "data-cy": "sessionManager-switch-profile-trigger",
438
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.SvgIcon, {
439
- component: _PersonOutline.default,
440
- className: "session-manager-menu-icon"
441
- }), translation.switchProfile]
442
- }), !!switchPassport && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.MenuItem, {
443
- className: "session-manager-menu-item",
444
- onClick: _onSwitchPassport,
445
- "aria-label": translation.switchPassport,
446
- "data-cy": "sessionManager-switch-passport-trigger",
447
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.SvgIcon, {
448
- component: _VpnKeyOutlined.default,
449
- className: "session-manager-menu-icon"
450
- }), translation.switchPassport]
451
- }), oauthConfigList.length > 0 && !hasBindAccount && session.provider !== 'federated' && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.MenuItem, {
452
- className: "session-manager-menu-item",
453
- onClick: _onBindWallet,
454
- "aria-label": !isRawWalletAccount ? "".concat(translation.bind, "DID Wallet") : "".concat(translation.bind).concat(translation.thirdParty),
455
- "data-cy": "sessionManager-bind-trigger",
456
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.SvgIcon, {
457
- component: _Link.default,
458
- className: "session-manager-menu-icon"
459
- }), !isRawWalletAccount ? "".concat(translation.bind, "DID Wallet") : "".concat(translation.bind).concat(translation.thirdParty)]
460
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.MenuItem, {
461
- className: "session-manager-menu-item",
462
- onClick: _onLogout,
463
- disabled: disableLogout,
464
- "aria-label": "Logout account",
465
- "data-cy": "sessionManager-logout-trigger",
466
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.SvgIcon, {
467
- component: _Disconnect.default,
468
- className: "session-manager-menu-icon"
469
- }), translation.disconnect]
470
- })]
308
+ }), showManageBlocklet ? [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Divider, {}, "divider"), /*#__PURE__*/(0, _jsxRuntime.jsx)(_manageBlocklet.default, {
309
+ menu: menu,
310
+ menuRender: menuRender,
311
+ locale: locale,
312
+ expanded: config.expandBlocklet,
313
+ onExpand: value => {
314
+ const cloneConfig = (0, _cloneDeep.default)(config);
315
+ cloneConfig.expandBlocklet = value;
316
+ setConfig(cloneConfig);
317
+ }
318
+ }, "manageBlocklet")] : null]
471
319
  })
472
320
  })]
473
321
  });
@@ -475,7 +323,7 @@ function SessionManager(_ref) {
475
323
  SessionManager.propTypes = {
476
324
  session: _propTypes.default.shape({
477
325
  federatedMaster: _propTypes.default.object,
478
- provider: _propTypes.default.oneOf(['wallet', 'federated', 'auth0', '']),
326
+ provider: _propTypes.default.oneOf(['wallet', 'auth0', '']),
479
327
  user: _propTypes.default.shape({
480
328
  did: _propTypes.default.string.isRequired,
481
329
  role: _propTypes.default.string.isRequired,
@@ -519,7 +367,8 @@ SessionManager.propTypes = {
519
367
  menu: _propTypes.default.array,
520
368
  menuRender: _propTypes.default.func,
521
369
  dark: _propTypes.default.bool,
522
- size: _propTypes.default.number
370
+ size: _propTypes.default.number,
371
+ showManageBlocklet: _propTypes.default.bool
523
372
  };
524
373
  SessionManager.defaultProps = {
525
374
  locale: 'en',
@@ -538,7 +387,8 @@ SessionManager.defaultProps = {
538
387
  onSwitchPassport: _noop.default,
539
388
  onBindWallet: _noop.default,
540
389
  dark: false,
541
- size: 24
390
+ size: 24,
391
+ showManageBlocklet: true
542
392
  };
543
393
  var _default = SessionManager;
544
394
  exports.default = _default;