@arcblock/ux 2.7.16 → 2.7.18

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 (43) hide show
  1. package/es/SessionManager/account-item.js +5 -4
  2. package/es/SessionManager/add-account-item.js +13 -31
  3. package/es/SessionManager/federated-login-detecter.js +32 -26
  4. package/es/SessionManager/index.js +44 -57
  5. package/es/SessionManager/manage-accounts.js +30 -17
  6. package/es/SessionManager/manage-blocklet.js +12 -4
  7. package/es/SessionManager/menu-accordion.js +14 -5
  8. package/es/SessionManager/translation.js +10 -10
  9. package/es/SessionManager/use-config.js +34 -0
  10. package/es/SessionManager/user-info.js +51 -43
  11. package/es/SessionManager/user-popper.js +1 -18
  12. package/es/Typography/index.js +89 -0
  13. package/es/Util/federated.js +65 -0
  14. package/lib/SessionManager/account-item.js +5 -4
  15. package/lib/SessionManager/add-account-item.js +14 -32
  16. package/lib/SessionManager/federated-login-detecter.js +33 -26
  17. package/lib/SessionManager/index.js +45 -58
  18. package/lib/SessionManager/manage-accounts.js +29 -16
  19. package/lib/SessionManager/manage-blocklet.js +12 -4
  20. package/lib/SessionManager/menu-accordion.js +14 -5
  21. package/lib/SessionManager/translation.js +10 -10
  22. package/lib/SessionManager/use-config.js +41 -0
  23. package/lib/SessionManager/user-info.js +50 -42
  24. package/lib/SessionManager/user-popper.js +1 -6
  25. package/lib/Typography/index.js +100 -0
  26. package/lib/Util/federated.js +85 -0
  27. package/package.json +11 -7
  28. package/src/SessionManager/account-item.jsx +6 -8
  29. package/src/SessionManager/add-account-item.jsx +12 -30
  30. package/src/SessionManager/federated-login-detecter.jsx +39 -26
  31. package/src/SessionManager/index.jsx +48 -68
  32. package/src/SessionManager/manage-accounts.jsx +27 -13
  33. package/src/SessionManager/manage-blocklet.jsx +8 -2
  34. package/src/SessionManager/menu-accordion.jsx +10 -3
  35. package/src/SessionManager/translation.js +10 -10
  36. package/src/SessionManager/use-config.js +33 -0
  37. package/src/SessionManager/user-info.jsx +34 -34
  38. package/src/SessionManager/user-popper.jsx +1 -16
  39. package/src/Typography/index.jsx +79 -0
  40. package/src/Util/federated.js +73 -0
  41. package/es/SessionManager/use-accounts.js +0 -19
  42. package/lib/SessionManager/use-accounts.js +0 -25
  43. package/src/SessionManager/use-accounts.js +0 -18
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = Typography;
7
+ var _propTypes = _interopRequireDefault(require("prop-types"));
8
+ var _material = require("@mui/material");
9
+ var _ahooks = require("ahooks");
10
+ var _react = require("react");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ const _excluded = ["minFontSize", "fontSize", "children", "sx"];
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ 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; }
15
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
16
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
18
+ 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); }
19
+ 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; }
20
+ 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; }
21
+ function Typography(_ref) {
22
+ let {
23
+ minFontSize,
24
+ fontSize,
25
+ children,
26
+ sx
27
+ } = _ref,
28
+ rest = _objectWithoutProperties(_ref, _excluded);
29
+ const refMock = (0, _react.useRef)(null);
30
+ const refContainer = (0, _react.useRef)(null);
31
+ const state = (0, _ahooks.useReactive)({
32
+ fontSize,
33
+ loading: true,
34
+ initialSize: undefined
35
+ });
36
+ const mockSize = (0, _ahooks.useSize)(refMock.current);
37
+ const containerSize = (0, _ahooks.useSize)(refContainer.current);
38
+ (0, _react.useEffect)(() => {
39
+ if (state.loading) {
40
+ if (fontSize === 'auto') {
41
+ if (mockSize && !state.initialSize) {
42
+ const styleSize = getComputedStyle(refMock.current).fontSize;
43
+ state.initialSize = Number(styleSize.replace('px', ''));
44
+ state.fontSize = state.initialSize;
45
+ }
46
+ if (containerSize && mockSize) {
47
+ if (containerSize.width < mockSize.width && state.fontSize > minFontSize) {
48
+ state.fontSize--;
49
+ } else {
50
+ state.loading = false;
51
+ }
52
+ }
53
+ } else {
54
+ state.loading = false;
55
+ }
56
+ }
57
+ // eslint-disable-next-line react-hooks/exhaustive-deps
58
+ }, [fontSize, mockSize === null || mockSize === void 0 ? void 0 : mockSize.width, containerSize === null || containerSize === void 0 ? void 0 : containerSize.width]);
59
+ return state.loading ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Box, {
60
+ ref: refContainer,
61
+ flex: 1,
62
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Typography, _objectSpread(_objectSpread({}, rest), {}, {
63
+ sx: sx,
64
+ noWrap: true,
65
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Skeleton, {
66
+ variant: "text",
67
+ sx: {
68
+ fontSize: '1rem'
69
+ }
70
+ })
71
+ })), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Typography, _objectSpread(_objectSpread({
72
+ ref: refMock
73
+ }, rest), {}, {
74
+ sx: _objectSpread(_objectSpread({}, sx), {}, {
75
+ fontSize: "".concat(state.fontSize, "px !important"),
76
+ position: 'fixed',
77
+ top: -1000,
78
+ left: -1000
79
+ }),
80
+ noWrap: true,
81
+ children: children
82
+ }))]
83
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Typography, _objectSpread(_objectSpread({}, rest), {}, {
84
+ sx: _objectSpread(_objectSpread({}, sx), {}, {
85
+ fontSize: "".concat(state.fontSize, "px !important")
86
+ }),
87
+ children: children
88
+ }));
89
+ }
90
+ Typography.propTypes = {
91
+ fontSize: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
92
+ children: _propTypes.default.any.isRequired,
93
+ minFontSize: _propTypes.default.number,
94
+ sx: _propTypes.default.object
95
+ };
96
+ Typography.defaultProps = {
97
+ fontSize: undefined,
98
+ minFontSize: 12,
99
+ sx: {}
100
+ };
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getAutoLoginFederated = getAutoLoginFederated;
7
+ exports.getConfig = getConfig;
8
+ exports.getCurrentApp = getCurrentApp;
9
+ exports.getFederatedApp = getFederatedApp;
10
+ exports.getMaster = getMaster;
11
+ exports.getSourceAppPid = getSourceAppPid;
12
+ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ function getMaster() {
15
+ var _blocklet$settings;
16
+ let blocklet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.blocklet;
17
+ const federated = (blocklet === null || blocklet === void 0 ? void 0 : (_blocklet$settings = blocklet.settings) === null || _blocklet$settings === void 0 ? void 0 : _blocklet$settings.federated) || {};
18
+ return federated.master;
19
+ }
20
+ function getConfig() {
21
+ var _blocklet$settings2;
22
+ let blocklet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.blocklet;
23
+ const federated = (blocklet === null || blocklet === void 0 ? void 0 : (_blocklet$settings2 = blocklet.settings) === null || _blocklet$settings2 === void 0 ? void 0 : _blocklet$settings2.federated) || {};
24
+ return federated.config;
25
+ }
26
+ function getAutoLoginFederated() {
27
+ let blocklet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.blocklet;
28
+ const config = getConfig(blocklet);
29
+ return Boolean(config === null || config === void 0 ? void 0 : config.autoLogin) && (config === null || config === void 0 ? void 0 : config.status) === 'approved';
30
+ }
31
+ function getSourceAppPid() {
32
+ let blocklet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.blocklet;
33
+ const master = getMaster(blocklet);
34
+ return master === null || master === void 0 ? void 0 : master.appPid;
35
+ }
36
+ function getFederatedApp() {
37
+ let blocklet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.blocklet;
38
+ const master = getMaster(blocklet);
39
+ const isFederatedMode = !(0, _isEmpty.default)(master);
40
+ return isFederatedMode ? {
41
+ appId: master.appId,
42
+ appName: master.appName,
43
+ appDescription: master.appDescription,
44
+ appLogo: master.appLogo,
45
+ appPid: master.appPid,
46
+ appUrl: master.appUrl,
47
+ version: master.version,
48
+ sourceAppPid: master.appPid,
49
+ provider: 'wallet'
50
+ } : null;
51
+ }
52
+ function getCurrentApp() {
53
+ let blocklet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.blocklet;
54
+ // 适用于 blocklet 项目
55
+ if (blocklet) {
56
+ return {
57
+ appId: blocklet.appId,
58
+ appName: blocklet.appName,
59
+ appDescription: blocklet.appDescription,
60
+ appLogo: blocklet.appLogo,
61
+ appPid: blocklet.appPid,
62
+ appUrl: blocklet.appUrl,
63
+ version: blocklet.version,
64
+ // NOTICE: null 代表该值置空
65
+ sourceAppPid: null,
66
+ provider: 'wallet'
67
+ };
68
+ }
69
+ // HACK: 适用于 blockelt-server
70
+ if (window.env) {
71
+ // eslint-disable-next-line no-param-reassign
72
+ blocklet = window.env;
73
+ return {
74
+ appId: blocklet.appId,
75
+ appName: blocklet.appName,
76
+ appDescription: blocklet.appDescription,
77
+ appUrl: blocklet.baseUrl,
78
+ // NOTICE: null 代表该值置空
79
+ sourceAppPid: null,
80
+ provider: 'wallet',
81
+ type: 'server'
82
+ };
83
+ }
84
+ return null;
85
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcblock/ux",
3
- "version": "2.7.16",
3
+ "version": "2.7.18",
4
4
  "description": "Common used react components for arcblock products",
5
5
  "keywords": [
6
6
  "react",
@@ -277,6 +277,10 @@
277
277
  "import": "./es/Toast/index.js",
278
278
  "require": "./lib/Toast/index.js"
279
279
  },
280
+ "./lib/Typography": {
281
+ "import": "./es/Typography/index.js",
282
+ "require": "./lib/Typography/index.js"
283
+ },
280
284
  "./lib/Util": {
281
285
  "import": "./es/Util/index.js",
282
286
  "require": "./lib/Util/index.js"
@@ -318,11 +322,11 @@
318
322
  "peerDependencies": {
319
323
  "react": ">=18.1.0"
320
324
  },
321
- "gitHead": "8adb844a1067ecca748cd70c5978c9f7497e3658",
325
+ "gitHead": "2866b3fba4076f10ffcfb9b3c8bd68ab68c3eb88",
322
326
  "dependencies": {
323
327
  "@arcblock/did-motif": "^1.1.13",
324
- "@arcblock/icons": "^2.7.16",
325
- "@arcblock/react-hooks": "^2.7.16",
328
+ "@arcblock/icons": "^2.7.18",
329
+ "@arcblock/react-hooks": "^2.7.18",
326
330
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
327
331
  "@emotion/react": "^11.10.4",
328
332
  "@emotion/styled": "^11.10.4",
@@ -331,8 +335,8 @@
331
335
  "@iconify-icons/ion": "^1.2.10",
332
336
  "@iconify-icons/mdi": "^1.2.47",
333
337
  "@iconify/react": "^4.1.1",
334
- "@mui/icons-material": "^5.10.6",
335
- "@mui/material": "^5.10.8",
338
+ "@mui/icons-material": "^5.14.8",
339
+ "@mui/material": "^5.14.8",
336
340
  "@solana/qr-code-styling": "^1.6.0-beta.0",
337
341
  "@testing-library/react": "^14.0.0",
338
342
  "ahooks": "^3.7.8",
@@ -348,7 +352,7 @@
348
352
  "is-svg": "^4.3.2",
349
353
  "js-cookie": "^2.2.1",
350
354
  "lodash": "^4.17.21",
351
- "mui-datatables": "^4.2.2",
355
+ "mui-datatables": "^4.3.0",
352
356
  "notistack": "^2.0.5",
353
357
  "pako": "^2.1.0",
354
358
  "react-cookie-consent": "^6.4.1",
@@ -54,7 +54,7 @@ export default function AccountItem({ account, active, onDelete, onChoose, local
54
54
  },
55
55
  }}
56
56
  className="session-manager-menu-item">
57
- <Avatar did={account.did} />
57
+ <Avatar did={account.did} size={42} />
58
58
  <Box
59
59
  sx={{
60
60
  flex: 1,
@@ -65,16 +65,14 @@ export default function AccountItem({ account, active, onDelete, onChoose, local
65
65
  },
66
66
  }}>
67
67
  <DID did={account.did} copyable={false} size={14} responsive={false} compact sx={{ lineHeight: 1 }} />
68
- <Typography variant="caption">
69
- {t('from')}{' '}
70
- {account.provider === 'federated' ? (
68
+ {account.sourceAppPid && (
69
+ <Typography variant="caption">
70
+ {t('from')}{' '}
71
71
  <Link href={account.appUrl} target="_blank" underline="none">
72
72
  {account.appName}
73
73
  </Link>
74
- ) : (
75
- account.appName
76
- )}
77
- </Typography>
74
+ </Typography>
75
+ )}
78
76
  </Box>
79
77
  <Box className="account-item-actions">
80
78
  {active ? (
@@ -2,11 +2,11 @@ import { Icon } from '@iconify/react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { Menu, MenuItem, Typography } from '@mui/material';
4
4
  import AddIcon from '@iconify-icons/ion/ios-add-circle-outline';
5
- import isEmpty from 'lodash/isEmpty';
6
5
  import { useCreation, useMemoizedFn, useReactive } from 'ahooks';
7
6
  import { useRef } from 'react';
8
7
  import { translate } from '../Locale/util';
9
8
  import { translations } from './translation';
9
+ import { getCurrentApp, getFederatedApp } from '../Util/federated';
10
10
 
11
11
  export default function AddAccountItem({ onAdd, locale }) {
12
12
  const addRef = useRef(null);
@@ -23,36 +23,18 @@ export default function AddAccountItem({ onAdd, locale }) {
23
23
  return appList;
24
24
  }
25
25
  const blocklet = window?.blocklet;
26
- if (!blocklet) {
27
- return appList;
26
+
27
+ const masterApp = getFederatedApp(blocklet);
28
+ const currentApp = getCurrentApp(blocklet);
29
+
30
+ if (currentApp) {
31
+ appList.push(currentApp);
28
32
  }
29
- const currentApp = {
30
- appId: blocklet.appId,
31
- appName: blocklet.appName,
32
- appDescription: blocklet.appDescription,
33
- appLogo: blocklet.appLogo,
34
- appPid: blocklet.appPid,
35
- appUrl: blocklet.appUrl,
36
- version: blocklet.version,
37
- provider: 'wallet',
38
- };
39
- appList.push(currentApp);
40
- const isFederatedMember = !isEmpty(blocklet.settings?.federated?.master);
41
- if (isFederatedMember) {
42
- const federatedMaster = blocklet.settings.federated.master;
43
- const masterApp = {
44
- appId: federatedMaster.appId,
45
- appName: federatedMaster.appName,
46
- appDescription: federatedMaster.appDescription,
47
- appLogo: federatedMaster.appLogo,
48
- appPid: federatedMaster.appPid,
49
- appUrl: federatedMaster.appUrl,
50
- version: federatedMaster.version,
51
- provider: 'federated',
52
- };
53
- return [masterApp, currentApp];
33
+ if (masterApp && masterApp?.appId !== currentApp?.appId) {
34
+ appList.push(masterApp);
54
35
  }
55
- return appList;
36
+ // NOTICE: masterApp 应该排在前面
37
+ return appList.reverse();
56
38
  }, [window.blocklet]);
57
39
 
58
40
  const _onAdd = useMemoizedFn(() => {
@@ -96,7 +78,7 @@ export default function AddAccountItem({ onAdd, locale }) {
96
78
  }}>
97
79
  {apps.map((app) => (
98
80
  <MenuItem key={app.appId} onClick={() => onAdd(app)}>
99
- Connect with {app.appName} account
81
+ {t('connectWithAccount', { name: app.appName })}
100
82
  </MenuItem>
101
83
  ))}
102
84
  </Menu>
@@ -1,10 +1,11 @@
1
1
  import PropTypes from 'prop-types';
2
- import { useCallback, useState } from 'react';
2
+ import { useCallback } from 'react';
3
3
  import Box from '@mui/material/Box';
4
4
  import Chip from '@mui/material/Chip';
5
5
  import Divider from '@mui/material/Divider';
6
6
  import ShieldCheckIcon from '@iconify-icons/mdi/shield-check';
7
7
  import { Icon } from '@iconify/react';
8
+ import { useCreation, useReactive } from 'ahooks';
8
9
 
9
10
  import UserPopper from './user-popper';
10
11
  import DidAvatar from '../Avatar';
@@ -39,10 +40,13 @@ const translations = {
39
40
  };
40
41
 
41
42
  export default function FederatedLoginDetecter({ session, anchorEl, dark, locale: _locale }) {
42
- const [federatedLoginOpen, setFederatedLoginOpen] = useState(true);
43
+ const state = useReactive({
44
+ open: true,
45
+ });
43
46
 
44
- const siteInfo = session.federatedMaster?.site;
45
- const userInfo = session.federatedMaster?.user;
47
+ const federatedMaster = useCreation(() => {
48
+ return session.federatedMaster;
49
+ }, [session?.federatedMaster]);
46
50
 
47
51
  const localeList = Object.keys(translations);
48
52
  const locale = localeList.includes(_locale) ? _locale : localeList[0];
@@ -53,19 +57,19 @@ export default function FederatedLoginDetecter({ session, anchorEl, dark, locale
53
57
  if (err) {
54
58
  Toast.error(err || translations[_locale].loginFederatedFailed);
55
59
  } else {
56
- setFederatedLoginOpen(false);
60
+ state.open = false;
57
61
  }
58
62
  },
59
63
  {
60
- provider: 'federated',
61
- mode: userInfo ? 'auto' : 'manual',
64
+ sourceAppPid: federatedMaster?.site?.appPid,
65
+ mode: federatedMaster?.user ? 'auto' : 'manual',
62
66
  }
63
67
  );
64
- }, [session, userInfo, _locale]);
68
+ }, [session, federatedMaster?.site?.appPid, federatedMaster?.user, _locale, state]);
65
69
 
66
70
  let appLogoUrl;
67
- if (siteInfo) {
68
- appLogoUrl = new URL(siteInfo.appLogo, siteInfo.appUrl);
71
+ if (federatedMaster?.site) {
72
+ appLogoUrl = new URL(federatedMaster.site.appLogo, federatedMaster.site.appUrl);
69
73
  appLogoUrl.searchParams.set('imageFilter', 'resize');
70
74
  // HACK: 保持跟其他地方使用的尺寸一致,可以复用同一资源的缓存,减少网络请求
71
75
  appLogoUrl.searchParams.set('w', '80');
@@ -73,26 +77,35 @@ export default function FederatedLoginDetecter({ session, anchorEl, dark, locale
73
77
  }
74
78
 
75
79
  return (
76
- siteInfo && (
80
+ federatedMaster?.site && (
77
81
  <UserPopper
78
- open={federatedLoginOpen}
82
+ open={state.open}
79
83
  anchorEl={anchorEl}
80
84
  dark={dark}
81
85
  autoClose={false}
82
- onClose={() => setFederatedLoginOpen(false)}>
86
+ onClose={() => {
87
+ state.open = false;
88
+ }}>
83
89
  <Box p={2}>
84
- {siteInfo && (
90
+ {federatedMaster.site && (
85
91
  <Box display="flex" alignItems="center">
86
- <Box component="img" mr={2} src={appLogoUrl.href} alt={siteInfo.appName} width="30px" height="30px" />
92
+ <Box
93
+ component="img"
94
+ mr={2}
95
+ src={appLogoUrl.href}
96
+ alt={federatedMaster.site.appName}
97
+ width="30px"
98
+ height="30px"
99
+ />
87
100
  <Box sx={{ maxWidth: '260px' }}>
88
101
  {translations[locale].useToConnect({
89
102
  master: (
90
103
  <Box
91
104
  component="a"
92
- href={siteInfo.appUrl}
105
+ href={federatedMaster.site.appUrl}
93
106
  target="_blank"
94
107
  sx={{ textDecoration: 'none', fontWeight: 'bold', color: 'primary.main', fontSize: '1.2em' }}>
95
- {siteInfo.appName}
108
+ {federatedMaster.site.appName}
96
109
  </Box>
97
110
  ),
98
111
  member: window.blocklet.appName,
@@ -100,22 +113,22 @@ export default function FederatedLoginDetecter({ session, anchorEl, dark, locale
100
113
  </Box>
101
114
  </Box>
102
115
  )}
103
- {siteInfo && userInfo && <Divider style={{ margin: '15px 0 10px 0' }} />}
104
- {userInfo && (
116
+ {federatedMaster?.site && federatedMaster?.user && <Divider style={{ margin: '15px 0 10px 0' }} />}
117
+ {federatedMaster?.user && (
105
118
  <Box display="flex" alignItems="center">
106
119
  <DidAvatar
107
120
  variant="circle"
108
- did={userInfo.did}
109
- src={getUserAvatar(userInfo.avatar)}
121
+ did={federatedMaster.user.did}
122
+ src={getUserAvatar(federatedMaster.user.avatar)}
110
123
  size={28}
111
124
  shape="circle"
112
125
  />
113
126
  <Box ml={2}>
114
127
  <Box display="flex" justifyContent="space-between" alignItems="center">
115
- <Box fontSize={18}>{userInfo.fullName}</Box>
116
- {userInfo.role?.toUpperCase() && (
128
+ <Box fontSize={18}>{federatedMaster.user.fullName}</Box>
129
+ {federatedMaster.user.role?.toUpperCase() && (
117
130
  <Chip
118
- label={userInfo.role?.toUpperCase()}
131
+ label={federatedMaster.user.role?.toUpperCase()}
119
132
  size="small"
120
133
  variant="outlined"
121
134
  sx={{ height: 'auto', marginRight: 0, fontSize: 12 }}
@@ -123,11 +136,11 @@ export default function FederatedLoginDetecter({ session, anchorEl, dark, locale
123
136
  />
124
137
  )}
125
138
  </Box>
126
- <DidAddress responsive={false}>{userInfo.did}</DidAddress>
139
+ <DidAddress responsive={false}>{federatedMaster.user.did}</DidAddress>
127
140
  </Box>
128
141
  </Box>
129
142
  )}
130
- {siteInfo && (
143
+ {federatedMaster?.site && (
131
144
  <Box display="flex" justifyContent="center" mt={2}>
132
145
  <Button variant="contained" size="small" onClick={onLoginFederated}>
133
146
  {translations[locale].connect}