@blocklet/ui-react 3.4.14 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/lib/common/org-switch/use-org.d.ts +4 -4
  2. package/lib/common/ws.d.ts +22 -1
  3. package/package.json +10 -7
  4. package/.aigne/doc-smith/.local/afs-storage.sqlite3 +0 -0
  5. package/.aigne/doc-smith/config.yaml +0 -78
  6. package/.aigne/doc-smith/history.yaml +0 -14
  7. package/.aigne/doc-smith/media-description.yaml +0 -11
  8. package/.aigne/doc-smith/output/structure-plan.json +0 -255
  9. package/.aigne/doc-smith/translation-cache.yaml +0 -11
  10. package/.aigne/doc-smith/upload-cache.yaml +0 -528
  11. package/build.config.ts +0 -24
  12. package/docs/_sidebar.md +0 -19
  13. package/docs/assets/diagram/component-installer-diagram-0.ja.jpg +0 -0
  14. package/docs/assets/diagram/component-installer-diagram-0.jpg +0 -0
  15. package/docs/assets/diagram/component-installer-diagram-0.zh-TW.jpg +0 -0
  16. package/docs/assets/diagram/component-installer-diagram-0.zh.jpg +0 -0
  17. package/docs/assets/diagram/component-management-diagram-0.ja.jpg +0 -0
  18. package/docs/assets/diagram/component-management-diagram-0.jpg +0 -0
  19. package/docs/assets/diagram/component-management-diagram-0.zh-TW.jpg +0 -0
  20. package/docs/assets/diagram/component-management-diagram-0.zh.jpg +0 -0
  21. package/docs/assets/diagram/core-concepts-diagram-0.ja.jpg +0 -0
  22. package/docs/assets/diagram/core-concepts-diagram-0.jpg +0 -0
  23. package/docs/assets/diagram/core-concepts-diagram-0.zh-TW.jpg +0 -0
  24. package/docs/assets/diagram/core-concepts-diagram-0.zh.jpg +0 -0
  25. package/docs/assets/diagram/dashboard-diagram-0.ja.jpg +0 -0
  26. package/docs/assets/diagram/dashboard-diagram-0.jpg +0 -0
  27. package/docs/assets/diagram/dashboard-diagram-0.zh-TW.jpg +0 -0
  28. package/docs/assets/diagram/dashboard-diagram-0.zh.jpg +0 -0
  29. package/docs/assets/diagram/header-diagram-0.ja.jpg +0 -0
  30. package/docs/assets/diagram/header-diagram-0.jpg +0 -0
  31. package/docs/assets/diagram/header-diagram-0.zh-TW.jpg +0 -0
  32. package/docs/assets/diagram/header-diagram-0.zh.jpg +0 -0
  33. package/docs/assets/diagram/layout-diagram-0.ja.jpg +0 -0
  34. package/docs/assets/diagram/layout-diagram-0.jpg +0 -0
  35. package/docs/assets/diagram/layout-diagram-0.zh-TW.jpg +0 -0
  36. package/docs/assets/diagram/layout-diagram-0.zh.jpg +0 -0
  37. package/docs/assets/diagram/notifications-diagram-0.ja.jpg +0 -0
  38. package/docs/assets/diagram/notifications-diagram-0.jpg +0 -0
  39. package/docs/assets/diagram/notifications-diagram-0.zh-TW.jpg +0 -0
  40. package/docs/assets/diagram/notifications-diagram-0.zh.jpg +0 -0
  41. package/docs/assets/diagram/overview-diagram-0.ja.jpg +0 -0
  42. package/docs/assets/diagram/overview-diagram-0.jpg +0 -0
  43. package/docs/assets/diagram/overview-diagram-0.zh-TW.jpg +0 -0
  44. package/docs/assets/diagram/overview-diagram-0.zh.jpg +0 -0
  45. package/docs/assets/diagram/user-center-diagram-0.ja.jpg +0 -0
  46. package/docs/assets/diagram/user-center-diagram-0.jpg +0 -0
  47. package/docs/assets/diagram/user-center-diagram-0.zh-TW.jpg +0 -0
  48. package/docs/assets/diagram/user-center-diagram-0.zh.jpg +0 -0
  49. package/docs/assets/diagram/user-management-diagram-0.ja.jpg +0 -0
  50. package/docs/assets/diagram/user-management-diagram-0.jpg +0 -0
  51. package/docs/assets/diagram/user-management-diagram-0.zh-TW.jpg +0 -0
  52. package/docs/assets/diagram/user-management-diagram-0.zh.jpg +0 -0
  53. package/docs/assets/diagram/user-sessions-diagram-0.ja.jpg +0 -0
  54. package/docs/assets/diagram/user-sessions-diagram-0.jpg +0 -0
  55. package/docs/assets/diagram/user-sessions-diagram-0.zh-TW.jpg +0 -0
  56. package/docs/assets/diagram/user-sessions-diagram-0.zh.jpg +0 -0
  57. package/docs/components-component-management-blocklet-studio.ja.md +0 -194
  58. package/docs/components-component-management-blocklet-studio.md +0 -194
  59. package/docs/components-component-management-blocklet-studio.zh-TW.md +0 -194
  60. package/docs/components-component-management-blocklet-studio.zh.md +0 -194
  61. package/docs/components-component-management-component-installer.ja.md +0 -182
  62. package/docs/components-component-management-component-installer.md +0 -182
  63. package/docs/components-component-management-component-installer.zh-TW.md +0 -182
  64. package/docs/components-component-management-component-installer.zh.md +0 -182
  65. package/docs/components-component-management.ja.md +0 -30
  66. package/docs/components-component-management.md +0 -30
  67. package/docs/components-component-management.zh-TW.md +0 -30
  68. package/docs/components-component-management.zh.md +0 -30
  69. package/docs/components-layout-dashboard.ja.md +0 -185
  70. package/docs/components-layout-dashboard.md +0 -187
  71. package/docs/components-layout-dashboard.zh-TW.md +0 -185
  72. package/docs/components-layout-dashboard.zh.md +0 -185
  73. package/docs/components-layout-footer.ja.md +0 -165
  74. package/docs/components-layout-footer.md +0 -165
  75. package/docs/components-layout-footer.zh-TW.md +0 -165
  76. package/docs/components-layout-footer.zh.md +0 -165
  77. package/docs/components-layout-header.ja.md +0 -183
  78. package/docs/components-layout-header.md +0 -183
  79. package/docs/components-layout-header.zh-TW.md +0 -183
  80. package/docs/components-layout-header.zh.md +0 -183
  81. package/docs/components-layout.ja.md +0 -31
  82. package/docs/components-layout.md +0 -31
  83. package/docs/components-layout.zh-TW.md +0 -31
  84. package/docs/components-layout.zh.md +0 -31
  85. package/docs/components-notifications.ja.md +0 -125
  86. package/docs/components-notifications.md +0 -125
  87. package/docs/components-notifications.zh-TW.md +0 -125
  88. package/docs/components-notifications.zh.md +0 -125
  89. package/docs/components-user-management-user-center.ja.md +0 -148
  90. package/docs/components-user-management-user-center.md +0 -147
  91. package/docs/components-user-management-user-center.zh-TW.md +0 -148
  92. package/docs/components-user-management-user-center.zh.md +0 -148
  93. package/docs/components-user-management-user-sessions.ja.md +0 -121
  94. package/docs/components-user-management-user-sessions.md +0 -123
  95. package/docs/components-user-management-user-sessions.zh-TW.md +0 -121
  96. package/docs/components-user-management-user-sessions.zh.md +0 -121
  97. package/docs/components-user-management.ja.md +0 -49
  98. package/docs/components-user-management.md +0 -51
  99. package/docs/components-user-management.zh-TW.md +0 -49
  100. package/docs/components-user-management.zh.md +0 -49
  101. package/docs/components-utilities-icon.ja.md +0 -106
  102. package/docs/components-utilities-icon.md +0 -106
  103. package/docs/components-utilities-icon.zh-TW.md +0 -106
  104. package/docs/components-utilities-icon.zh.md +0 -106
  105. package/docs/components-utilities.ja.md +0 -136
  106. package/docs/components-utilities.md +0 -136
  107. package/docs/components-utilities.zh-TW.md +0 -136
  108. package/docs/components-utilities.zh.md +0 -136
  109. package/docs/components.ja.md +0 -27
  110. package/docs/components.md +0 -27
  111. package/docs/components.zh-TW.md +0 -27
  112. package/docs/components.zh.md +0 -27
  113. package/docs/core-concepts.ja.md +0 -134
  114. package/docs/core-concepts.md +0 -135
  115. package/docs/core-concepts.zh-TW.md +0 -134
  116. package/docs/core-concepts.zh.md +0 -134
  117. package/docs/getting-started.ja.md +0 -132
  118. package/docs/getting-started.md +0 -132
  119. package/docs/getting-started.zh-TW.md +0 -132
  120. package/docs/getting-started.zh.md +0 -132
  121. package/docs/hooks-api.ja.md +0 -214
  122. package/docs/hooks-api.md +0 -214
  123. package/docs/hooks-api.zh-TW.md +0 -214
  124. package/docs/hooks-api.zh.md +0 -214
  125. package/docs/how-to-guides.ja.md +0 -413
  126. package/docs/how-to-guides.md +0 -413
  127. package/docs/how-to-guides.zh-TW.md +0 -413
  128. package/docs/how-to-guides.zh.md +0 -413
  129. package/docs/overview.ja.md +0 -51
  130. package/docs/overview.md +0 -51
  131. package/docs/overview.zh-TW.md +0 -51
  132. package/docs/overview.zh.md +0 -51
  133. package/glossary.md +0 -12
  134. package/src/@types/index.ts +0 -230
  135. package/src/@types/shims.d.ts +0 -18
  136. package/src/BlockletStudio/README.md +0 -116
  137. package/src/BlockletStudio/index.tsx +0 -145
  138. package/src/ComponentInstaller/ComponentInstaller.stories.jsx +0 -16
  139. package/src/ComponentInstaller/index.jsx +0 -207
  140. package/src/ComponentInstaller/installer-item.jsx +0 -129
  141. package/src/ComponentInstaller/locales.js +0 -22
  142. package/src/ComponentInstaller/use-component-installed.js +0 -88
  143. package/src/ComponentManager/components/add-component.tsx +0 -136
  144. package/src/ComponentManager/components/check-component.tsx +0 -3
  145. package/src/ComponentManager/components/publish-component.tsx +0 -90
  146. package/src/ComponentManager/components/resource-dialog.tsx +0 -91
  147. package/src/ComponentManager/index.tsx +0 -3
  148. package/src/ComponentManager/libs/locales.ts +0 -15
  149. package/src/Dashboard/Dashboard.stories.jsx +0 -20
  150. package/src/Dashboard/app-shell/app-badge.stories.tsx +0 -64
  151. package/src/Dashboard/app-shell/app-badge.tsx +0 -94
  152. package/src/Dashboard/app-shell/app-header.tsx +0 -104
  153. package/src/Dashboard/app-shell/app-info-context.tsx +0 -182
  154. package/src/Dashboard/app-shell/badges/app-badge-default.tsx +0 -130
  155. package/src/Dashboard/app-shell/badges/app-badge-did.tsx +0 -28
  156. package/src/Dashboard/app-shell/badges/app-badge-state.tsx +0 -40
  157. package/src/Dashboard/app-shell/badges/app-badge-switch.tsx +0 -72
  158. package/src/Dashboard/app-shell/badges/app-badge-version.tsx +0 -60
  159. package/src/Dashboard/app-shell/index.ts +0 -5
  160. package/src/Dashboard/index.jsx +0 -184
  161. package/src/Footer/Footer.stories.jsx +0 -33
  162. package/src/Footer/brand.jsx +0 -81
  163. package/src/Footer/copyright.jsx +0 -22
  164. package/src/Footer/index.jsx +0 -111
  165. package/src/Footer/internal-footer.jsx +0 -139
  166. package/src/Footer/layout/plain.jsx +0 -55
  167. package/src/Footer/layout/row.jsx +0 -43
  168. package/src/Footer/layout/standard.jsx +0 -114
  169. package/src/Footer/links.jsx +0 -321
  170. package/src/Footer/social-media.jsx +0 -55
  171. package/src/Header/Header.stories.jsx +0 -30
  172. package/src/Header/index.tsx +0 -259
  173. package/src/Icon/Icon.stories.jsx +0 -12
  174. package/src/Icon/index.tsx +0 -87
  175. package/src/Notifications/Snackbar.tsx +0 -261
  176. package/src/Notifications/hooks/use-title.tsx +0 -254
  177. package/src/Notifications/hooks/use-width.tsx +0 -16
  178. package/src/Notifications/utils.ts +0 -246
  179. package/src/UserCenter/assets/banner.png +0 -0
  180. package/src/UserCenter/components/config-inviter.tsx +0 -48
  181. package/src/UserCenter/components/config-profile.tsx +0 -99
  182. package/src/UserCenter/components/danger-zone.tsx +0 -82
  183. package/src/UserCenter/components/editable-field.tsx +0 -273
  184. package/src/UserCenter/components/fallback.tsx +0 -57
  185. package/src/UserCenter/components/nft-preview.tsx +0 -84
  186. package/src/UserCenter/components/nft.tsx +0 -279
  187. package/src/UserCenter/components/notification.tsx +0 -319
  188. package/src/UserCenter/components/passport.tsx +0 -107
  189. package/src/UserCenter/components/privacy.tsx +0 -120
  190. package/src/UserCenter/components/settings.tsx +0 -170
  191. package/src/UserCenter/components/status-dialog/date-picker.tsx +0 -77
  192. package/src/UserCenter/components/status-dialog/index.tsx +0 -293
  193. package/src/UserCenter/components/status-selector/duration-menu.tsx +0 -90
  194. package/src/UserCenter/components/status-selector/index.tsx +0 -58
  195. package/src/UserCenter/components/status-selector/menu-item.tsx +0 -56
  196. package/src/UserCenter/components/storage/action.tsx +0 -49
  197. package/src/UserCenter/components/storage/connected.tsx +0 -61
  198. package/src/UserCenter/components/storage/delete.tsx +0 -72
  199. package/src/UserCenter/components/storage/disconnect.tsx +0 -40
  200. package/src/UserCenter/components/storage/icons/empty-spaces-nft.svg +0 -1
  201. package/src/UserCenter/components/storage/icons/long-arrow.svg +0 -5
  202. package/src/UserCenter/components/storage/icons/space-connected.svg +0 -3
  203. package/src/UserCenter/components/storage/icons/space-disconnect.svg +0 -3
  204. package/src/UserCenter/components/storage/index.tsx +0 -41
  205. package/src/UserCenter/components/storage/preview-nft.tsx +0 -72
  206. package/src/UserCenter/components/third-party-login/index.tsx +0 -199
  207. package/src/UserCenter/components/third-party-login/third-party-item.tsx +0 -296
  208. package/src/UserCenter/components/user-center.tsx +0 -787
  209. package/src/UserCenter/components/user-info/address.tsx +0 -143
  210. package/src/UserCenter/components/user-info/index.tsx +0 -4
  211. package/src/UserCenter/components/user-info/link-preview-input.tsx +0 -274
  212. package/src/UserCenter/components/user-info/metadata.tsx +0 -658
  213. package/src/UserCenter/components/user-info/social-actions/chat.tsx +0 -43
  214. package/src/UserCenter/components/user-info/social-actions/follow.tsx +0 -23
  215. package/src/UserCenter/components/user-info/social-actions/index.tsx +0 -17
  216. package/src/UserCenter/components/user-info/switch-role.tsx +0 -42
  217. package/src/UserCenter/components/user-info/timezone-select.tsx +0 -119
  218. package/src/UserCenter/components/user-info/user-basic-info.tsx +0 -292
  219. package/src/UserCenter/components/user-info/user-info-item.tsx +0 -54
  220. package/src/UserCenter/components/user-info/user-info.tsx +0 -91
  221. package/src/UserCenter/components/user-info/user-status.tsx +0 -234
  222. package/src/UserCenter/components/user-info/utils.ts +0 -320
  223. package/src/UserCenter/components/webhook-item.tsx +0 -248
  224. package/src/UserCenter/index.tsx +0 -1
  225. package/src/UserCenter/libs/locales.ts +0 -378
  226. package/src/UserCenter/libs/utils.ts +0 -30
  227. package/src/UserSessions/components/user-session-info.tsx +0 -78
  228. package/src/UserSessions/components/user-sessions.tsx +0 -545
  229. package/src/UserSessions/index.tsx +0 -1
  230. package/src/UserSessions/libs/locales.ts +0 -60
  231. package/src/UserSessions/libs/utils.ts +0 -82
  232. package/src/blocklets.js +0 -195
  233. package/src/common/domain-warning.jsx +0 -178
  234. package/src/common/header-addons.jsx +0 -119
  235. package/src/common/link-blocker.jsx +0 -20
  236. package/src/common/notification-addon.jsx +0 -135
  237. package/src/common/org-switch/avatar-uploader.jsx +0 -271
  238. package/src/common/org-switch/create.jsx +0 -267
  239. package/src/common/org-switch/index.jsx +0 -407
  240. package/src/common/org-switch/locales.js +0 -52
  241. package/src/common/org-switch/use-org.jsx +0 -79
  242. package/src/common/overridable-theme-provider.jsx +0 -17
  243. package/src/common/wallet-hidden-topbar.js +0 -14
  244. package/src/common/wizard-modal.jsx +0 -200
  245. package/src/common/ws.js +0 -68
  246. package/src/contexts/config-user-space.tsx +0 -88
  247. package/src/contexts/user-followers.tsx +0 -54
  248. package/src/hooks/use-follow.tsx +0 -75
  249. package/src/hooks/use-mobile.tsx +0 -6
  250. package/src/index.ts +0 -16
  251. package/src/libs/constant.ts +0 -1
  252. package/src/libs/spaces.tsx +0 -18
  253. package/src/libs/with-hide-when-embed.tsx +0 -24
  254. package/src/types.js +0 -45
  255. package/src/utils.js +0 -161
  256. package/vite.config.mjs +0 -34
@@ -1,319 +0,0 @@
1
- import { ChangeEvent } from 'react';
2
- import { Alert, Box, CircularProgress, Stack, Typography } from '@mui/material';
3
- import { useCreation, useMemoizedFn, useReactive, useRequest } from 'ahooks';
4
- import { Icon } from '@iconify/react';
5
- import AddRoundedIcon from '@iconify-icons/material-symbols/add-rounded';
6
- import Switch from '@arcblock/ux/lib/Switch';
7
- import Button from '@arcblock/ux/lib/Button';
8
- import Toast from '@arcblock/ux/lib/Toast';
9
- import { getWalletDid } from '@arcblock/ux/lib/SessionUser/libs/utils';
10
- import { translate } from '@arcblock/ux/lib/Locale/util';
11
- import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
12
- import { AxiosError } from 'axios';
13
- import DID from '@arcblock/ux/lib/DID';
14
- import { getBlockletSDK } from '@blocklet/js-sdk';
15
-
16
- import { translations } from '../libs/locales';
17
- import WebhookItem from './webhook-item';
18
- import { User, WebhookItemData } from '../../@types';
19
- import { formatAxiosError } from '../libs/utils';
20
-
21
- function NotificationItem({
22
- title = undefined,
23
- description = undefined,
24
- value,
25
- onChange,
26
- isMobile,
27
- }: {
28
- title?: string;
29
- description?: React.ReactNode;
30
- value: boolean;
31
- onChange: (event: ChangeEvent<HTMLInputElement>) => void;
32
- isMobile: boolean;
33
- }) {
34
- const handleClick = useMemoizedFn((event: React.MouseEvent) => {
35
- event.stopPropagation();
36
- });
37
-
38
- return (
39
- <Box
40
- sx={{
41
- display: 'flex',
42
- alignItems: 'center',
43
- gap: 1,
44
- }}>
45
- <Switch checked={value} size="small" onChange={onChange} />
46
- <Typography
47
- component="div"
48
- onClick={handleClick}
49
- sx={{
50
- color: 'text.primary',
51
- fontSize: 14,
52
- display: 'flex',
53
- flexWrap: isMobile ? 'wrap' : 'nowrap',
54
- columnGap: 1,
55
- flex: 1,
56
- whiteSpace: isMobile ? 'normal' : 'nowrap',
57
- }}>
58
- {title}
59
- {description}
60
- </Typography>
61
- </Box>
62
- );
63
- }
64
-
65
- export default function Notification({ user, isMobile }: { user: User; isMobile: boolean }) {
66
- const { locale } = useLocaleContext();
67
- const client = getBlockletSDK();
68
- const t = useMemoizedFn((key, data = {}) => {
69
- return translate(translations, key, locale, 'en', data);
70
- });
71
- const currentState = useReactive({
72
- showAdd: false,
73
- });
74
-
75
- const notificationConfigState = useRequest(
76
- async () => {
77
- const data = await client.user.getUserNotificationConfig();
78
- return data;
79
- },
80
- {
81
- refreshDeps: [user],
82
- loadingDelay: 300,
83
- }
84
- );
85
- const notifications = useCreation(() => {
86
- return {
87
- wallet: true,
88
- email: true,
89
- phone: false,
90
- push: true,
91
- ...(notificationConfigState?.data?.notifications || {}),
92
- };
93
- }, [notificationConfigState?.data?.notifications]);
94
-
95
- const webhooks = useCreation(() => {
96
- return notificationConfigState?.data?.webhooks || [];
97
- }, [notificationConfigState?.data?.webhooks]);
98
-
99
- const onSaveChanges = useMemoizedFn(async (values) => {
100
- try {
101
- await client.user.saveUserNotificationConfig(values);
102
- Toast.success(t('saveSuccess'));
103
- notificationConfigState.run();
104
- } catch (err) {
105
- Toast.error(formatAxiosError(err as AxiosError));
106
- }
107
- });
108
-
109
- const handleChangeSwitch = useMemoizedFn(async (channel, value) => {
110
- await onSaveChanges({
111
- notifications: {
112
- [channel]: value,
113
- },
114
- });
115
- });
116
- const handleTestWebhook = async (data: WebhookItemData) => {
117
- try {
118
- await client.user.testNotificationWebhook(data);
119
- Toast.success(t('webhookTested'));
120
- } catch (err) {
121
- Toast.error(formatAxiosError(err as AxiosError));
122
- }
123
- };
124
- const handleDeleteWebhook = useMemoizedFn(async (index) => {
125
- await onSaveChanges({
126
- webhooks: webhooks.filter((_: WebhookItemData, i: number) => i !== index),
127
- });
128
- });
129
- const handleEditWebhook = useMemoizedFn(async (index, webhook) => {
130
- await onSaveChanges({
131
- webhooks: webhooks.map((item: WebhookItemData, i: number) => (i === index ? webhook : item)),
132
- });
133
- });
134
- const handleAddWebhook = useMemoizedFn(async (webhook) => {
135
- await onSaveChanges({
136
- webhooks: [...webhooks, webhook],
137
- });
138
- currentState.showAdd = false;
139
- });
140
-
141
- if (notificationConfigState.error) {
142
- return <Alert severity="error">{notificationConfigState.error.message}</Alert>;
143
- }
144
-
145
- if (notificationConfigState.loading || !notificationConfigState.data) {
146
- return (
147
- <Box
148
- sx={{
149
- display: 'flex',
150
- justifyContent: 'center',
151
- alignItems: 'center',
152
- height: '100px',
153
- }}>
154
- <CircularProgress />
155
- </Box>
156
- );
157
- }
158
-
159
- return (
160
- <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
161
- <Box
162
- sx={{
163
- display: 'flex',
164
- flexDirection: 'column',
165
- gap: 1,
166
- alignItems: 'start',
167
- '.MuiFormControlLabel-root': {
168
- gap: 1,
169
- m: 0,
170
- flexDirection: {
171
- xs: 'row-reverse',
172
- md: 'row',
173
- },
174
- width: {
175
- xs: '100%',
176
- md: 'unset',
177
- },
178
- },
179
-
180
- '.MuiSwitch-track': {
181
- borderRadius: '100vw',
182
- },
183
- '.MuiSwitch-thumb': {
184
- borderRadius: '100%',
185
- },
186
- '.MuiSwitch-root.MuiSwitch-sizeSmall': {
187
- height: '20px',
188
- width: '36px',
189
- '.MuiSwitch-thumb': {
190
- width: '16px',
191
- height: '16px',
192
- },
193
- },
194
- }}>
195
- <NotificationItem
196
- value={notifications.wallet}
197
- isMobile={isMobile}
198
- title={t('walletNotification')}
199
- onChange={(event: ChangeEvent<HTMLInputElement>) => handleChangeSwitch('wallet', event.target.checked)}
200
- description={
201
- getWalletDid(user) && (
202
- <DID
203
- did={getWalletDid(user)}
204
- showQrcode={false}
205
- showAvatar={!isMobile}
206
- copyable
207
- compact
208
- responsive
209
- locale={locale}
210
- startChars={isMobile ? 2 : 6}
211
- />
212
- )
213
- }
214
- />
215
- <NotificationItem
216
- value={notifications.email}
217
- isMobile={isMobile}
218
- onChange={(event: ChangeEvent<HTMLInputElement>) => handleChangeSwitch('email', event.target.checked)}
219
- title={t('emailNotification')}
220
- description={
221
- user?.email && (
222
- <Typography
223
- component="span"
224
- sx={{
225
- color: 'text.secondary',
226
- fontSize: 13,
227
- }}>
228
- {user?.email}
229
- </Typography>
230
- )
231
- }
232
- />
233
- <NotificationItem
234
- isMobile={isMobile}
235
- value={notifications.push}
236
- title={t('pushNotification')}
237
- onChange={(event: ChangeEvent<HTMLInputElement>) => handleChangeSwitch('push', event.target.checked)}
238
- />
239
- {/* TODO: @zhanghan 实现短信通知后展示此配置项 */}
240
- {/* <Switch
241
- disabled
242
- checked={notifications.phone}
243
- labelProps={{
244
- label: (
245
- <Typography
246
- color="text.primary"
247
- sx={{
248
- fontSize: 14,
249
- display: 'flex',
250
- flexFlow: 'wrap',
251
- columnGap: 1,
252
- flex: 1,
253
- }}>
254
- {t('phoneNotification')}
255
- {user?.phone && (
256
- <Typography component="span" color="text.secondary" fontSize={13}>
257
- {user?.phone}
258
- </Typography>
259
- )}
260
- </Typography>
261
- ),
262
- }}
263
- size="small"
264
- onChange={(event: ChangeEvent<HTMLInputElement>) => handleChangeSwitch('phone', event.target.checked)}
265
- /> */}
266
- </Box>
267
- <Stack
268
- spacing={1.5}
269
- useFlexGap
270
- direction="column"
271
- sx={{
272
- alignItems: 'start',
273
- }}>
274
- {webhooks.map((item: WebhookItemData, index: number) => (
275
- <WebhookItem
276
- // eslint-disable-next-line react/no-array-index-key
277
- key={`${index}_${item.url}`}
278
- onTest={handleTestWebhook}
279
- onDelete={() => handleDeleteWebhook(index)}
280
- onSave={(...args) => handleEditWebhook(index, ...args)}
281
- type={item.type}
282
- url={item.url}
283
- edit={false}
284
- />
285
- ))}
286
- {currentState.showAdd && (
287
- <WebhookItem
288
- key="add"
289
- onTest={handleTestWebhook}
290
- onCancel={() => {
291
- currentState.showAdd = false;
292
- }}
293
- onSave={(...args) => handleAddWebhook(...args)}
294
- edit
295
- />
296
- )}
297
-
298
- <Button
299
- variant="outlined"
300
- size="small"
301
- sx={{
302
- color: 'text.primary',
303
- borderColor: 'divider',
304
- '&:hover': {
305
- borderColor: 'divider',
306
- },
307
- py: 0.5,
308
- borderRadius: 1,
309
- }}
310
- startIcon={<Icon icon={AddRoundedIcon} />}
311
- onClick={() => {
312
- currentState.showAdd = true;
313
- }}>
314
- {t('addWebhook')}
315
- </Button>
316
- </Stack>
317
- </Box>
318
- );
319
- }
@@ -1,107 +0,0 @@
1
- import { Box } from '@mui/material';
2
- import type { BoxProps } from '@mui/material';
3
- import Empty from '@arcblock/ux/lib/Empty';
4
- import { useTheme } from '@arcblock/ux/lib/Theme';
5
- import PassportItem from '@arcblock/ux/lib/Passport';
6
- import { PASSPORT_STATUS } from '@arcblock/ux/lib/Util/constant';
7
- import { useCreation, useMemoizedFn } from 'ahooks';
8
- import uniqBy from 'lodash/uniqBy';
9
- import { translate } from '@arcblock/ux/lib/Locale/util';
10
- import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
11
-
12
- import { translations } from '../libs/locales';
13
- import { createPassportSvg } from '../libs/utils';
14
- import type { User } from '../../@types';
15
-
16
- export default function Passport({ user, ...rest }: { user: User } & BoxProps) {
17
- const { locale } = useLocaleContext();
18
- const t = useMemoizedFn((key, data = {}) => {
19
- return translate(translations, key, locale, 'en', data);
20
- });
21
- const theme = useTheme();
22
- const passports = useCreation(() => {
23
- const passportList = (user?.passports || []).map((x) => ({
24
- ...x,
25
- revoked: x.status === PASSPORT_STATUS.REVOKED,
26
- }));
27
- passportList.sort((a, b) => {
28
- if (a.revoked === b.revoked) {
29
- return 0;
30
- }
31
- if (a.revoked) {
32
- return 1;
33
- }
34
- return -1;
35
- });
36
-
37
- return uniqBy(
38
- passportList.filter((x) => !x.display),
39
- 'role'
40
- ).concat(
41
- uniqBy(
42
- passportList.filter((x) => x.display),
43
- 'display.content'
44
- )
45
- );
46
- }, [user?.passports]);
47
-
48
- const currentRole = useCreation(() => passports?.find((item) => item.name === user.role), [passports, user?.role]);
49
- const activeColor = theme.palette.primary.main;
50
-
51
- if (passports.length === 0) {
52
- return (
53
- <Box>
54
- <Empty>{t('noPassport')}</Empty>
55
- </Box>
56
- );
57
- }
58
-
59
- return (
60
- <Box
61
- {...rest}
62
- sx={{
63
- display: 'grid',
64
- justifyItems: 'start',
65
- gridTemplateColumns: {
66
- xs: 'repeat(2, 1fr)',
67
- sm: 'repeat(2, 1fr)',
68
- md: 'repeat(3, 1fr)',
69
- lg: 'repeat(5, 1fr)',
70
- },
71
- gap: 2.5,
72
- ...rest.sx,
73
- }}>
74
- {passports.map((x) => (
75
- <PassportItem
76
- key={x.id}
77
- passport={x}
78
- user={user}
79
- color={window.blocklet.passportColor}
80
- createPassportSvg={createPassportSvg}
81
- title={currentRole && currentRole.role === x.role ? t('currentPassport') : ''}
82
- sx={{
83
- flexDirection: 'column',
84
- alignItems: 'center',
85
- gap: 1,
86
- '.passport-item__display': {
87
- width: 166,
88
- height: 166,
89
- borderRadius: 1,
90
- px: 2,
91
- display: 'flex',
92
- justifyContent: 'center',
93
- backgroundColor: 'grey.50',
94
- boxShadow:
95
- currentRole && currentRole.role === x.role
96
- ? `0px 2px 4px 0px ${activeColor}, 0px 1px 2px -1px ${activeColor}, 0px 0px 0px 1px ${activeColor} !important`
97
- : 'unset',
98
- },
99
- '.passport-item__body': {
100
- marginLeft: '0 !important',
101
- },
102
- }}
103
- />
104
- ))}
105
- </Box>
106
- );
107
- }
@@ -1,120 +0,0 @@
1
- import { Box, Typography } from '@mui/material';
2
- import Switch from '@arcblock/ux/lib/Switch';
3
- import { ChangeEvent, useState } from 'react';
4
- import { useMemoizedFn } from 'ahooks';
5
- import { translate } from '@arcblock/ux/lib/Locale/util';
6
- import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
7
- import Toast from '@arcblock/ux/lib/Toast';
8
- import type { AxiosError } from 'axios';
9
- import { getBlockletSDK } from '@blocklet/js-sdk';
10
-
11
- import { translations } from '../libs/locales';
12
- import { formatAxiosError } from '../libs/utils';
13
-
14
- type PrivacyConfig = {
15
- key: string;
16
- name: string;
17
- value: boolean;
18
- isPrivate?: boolean;
19
- };
20
-
21
- export default function Privacy({
22
- configList,
23
- onSave,
24
- }: {
25
- configList: PrivacyConfig[];
26
- onSave: (type: 'privacy') => void;
27
- }) {
28
- const client = getBlockletSDK();
29
- const [dataList, setDataList] = useState(configList);
30
- const { locale } = useLocaleContext();
31
- const t = useMemoizedFn((key, data = {}) => {
32
- return translate(translations, key, locale, 'en', data);
33
- });
34
- const handleChangeSwitch = useMemoizedFn(async (type: string, value: boolean) => {
35
- try {
36
- const result = await client.user.saveUserPrivacyConfig({
37
- [type]: !value,
38
- });
39
-
40
- setDataList(
41
- dataList.map((item) => {
42
- return {
43
- ...item,
44
- value: result?.[item.key] ?? item.value,
45
- };
46
- })
47
- );
48
- Toast.success(t('saveSuccess'));
49
- onSave('privacy');
50
- } catch (err) {
51
- Toast.error(formatAxiosError(err as AxiosError));
52
- }
53
- });
54
-
55
- return (
56
- <Box
57
- sx={{
58
- display: 'flex',
59
- flexDirection: 'column',
60
- gap: 1,
61
- alignItems: 'start',
62
- '.MuiFormControlLabel-root': {
63
- gap: 1,
64
- m: 0,
65
- flexDirection: {
66
- xs: 'row-reverse',
67
- md: 'row',
68
- },
69
- width: {
70
- xs: '100%',
71
- md: 'unset',
72
- },
73
- },
74
-
75
- '.MuiSwitch-track': {
76
- borderRadius: '100vw',
77
- },
78
- '.MuiSwitch-thumb': {
79
- borderRadius: '100%',
80
- },
81
- '.MuiSwitch-root.MuiSwitch-sizeSmall': {
82
- height: '20px',
83
- width: '36px',
84
- '.MuiSwitch-thumb': {
85
- width: '16px',
86
- height: '16px',
87
- },
88
- },
89
- }}>
90
- {dataList.map((item) => {
91
- if (item.isPrivate) {
92
- return null;
93
- }
94
- return (
95
- <Switch
96
- key={item.key}
97
- checked={!item.value}
98
- labelProps={{
99
- label: (
100
- <Typography
101
- sx={{
102
- color: 'text.primary',
103
- fontSize: 14,
104
- display: 'flex',
105
- flexFlow: 'wrap',
106
- columnGap: 1,
107
- flex: 1,
108
- }}>
109
- {t('toPublic', { name: item.name })}
110
- </Typography>
111
- ),
112
- }}
113
- size="small"
114
- onChange={(event: ChangeEvent<HTMLInputElement>) => handleChangeSwitch(item.key, event.target.checked)}
115
- />
116
- );
117
- })}
118
- </Box>
119
- );
120
- }