@arcblock/ux 2.9.90 → 2.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (337) hide show
  1. package/lib/ActionButton/index.js +36 -48
  2. package/lib/ActivityIndicator/index.js +122 -75
  3. package/lib/Address/compact-text.js +48 -66
  4. package/lib/Address/did-address.js +114 -87
  5. package/lib/Address/index.js +15 -27
  6. package/lib/Address/responsive-did-address.js +48 -50
  7. package/lib/Alert/index.js +58 -52
  8. package/lib/AnimationWaiter/index.js +123 -69
  9. package/lib/Async/index.js +8 -22
  10. package/lib/Avatar/did-motif.js +38 -52
  11. package/lib/Avatar/etherscan-blockies.js +4 -10
  12. package/lib/Avatar/index.js +71 -77
  13. package/lib/Badge/index.js +49 -56
  14. package/lib/Blocklet/blocklet.js +181 -97
  15. package/lib/Blocklet/index.js +4 -24
  16. package/lib/Blocklet/utils.js +50 -13
  17. package/lib/BlockletContext/index.js +21 -31
  18. package/lib/BlockletNFT/index.js +255 -115
  19. package/lib/Button/index.js +5 -11
  20. package/lib/Button/wrap.js +45 -56
  21. package/lib/ButtonGroup/index.js +3 -9
  22. package/lib/CardSelector/index.js +67 -43
  23. package/lib/Center/index.js +19 -20
  24. package/lib/ClickToCopy/copy-button.js +37 -50
  25. package/lib/ClickToCopy/hook.js +10 -18
  26. package/lib/ClickToCopy/index.js +54 -66
  27. package/lib/CodeBlock/LightBox.js +84 -11
  28. package/lib/CodeBlock/index.js +175 -101
  29. package/lib/Colors/index.js +3 -20
  30. package/lib/Colors/themes/default.js +1 -7
  31. package/lib/Colors/themes/temp.js +1 -7
  32. package/lib/ContactForm/index.js +95 -60
  33. package/lib/CookieConsent/index.js +58 -52
  34. package/lib/CountDown/index.js +90 -59
  35. package/lib/DID/index.js +80 -96
  36. package/lib/Datatable/CustomToolbar.js +188 -137
  37. package/lib/Datatable/DatatableContext.js +14 -21
  38. package/lib/Datatable/TableSearch.js +99 -58
  39. package/lib/Datatable/index.js +312 -139
  40. package/lib/Datatable/utils.js +9 -17
  41. package/lib/Dialog/confirm.js +46 -58
  42. package/lib/Dialog/dialog.js +110 -66
  43. package/lib/Dialog/index.js +4 -27
  44. package/lib/Dialog/use-confirm.js +40 -65
  45. package/lib/DidLogo/index.js +14 -22
  46. package/lib/DriftBot/index.js +34 -19
  47. package/lib/Earth/index.js +214 -110
  48. package/lib/Earth/util.js +6 -19
  49. package/lib/Empty/index.js +33 -38
  50. package/lib/ErrorBoundary/fallback.js +45 -43
  51. package/lib/ErrorBoundary/index.js +1 -16
  52. package/lib/Footer/index.js +96 -48
  53. package/lib/Header/auto-hidden.js +28 -31
  54. package/lib/Header/header.js +151 -69
  55. package/lib/Header/index.js +2 -20
  56. package/lib/Header/responsive-header.js +67 -60
  57. package/lib/Icon/image.js +41 -45
  58. package/lib/Icon/index.js +51 -53
  59. package/lib/Img/index.js +77 -88
  60. package/lib/InfoRow/index.js +66 -48
  61. package/lib/Layout/dashboard/external-link.js +38 -53
  62. package/lib/Layout/dashboard/full-page.js +27 -41
  63. package/lib/Layout/dashboard/index.js +177 -132
  64. package/lib/Layout/dashboard/sidebar.js +164 -61
  65. package/lib/Layout/dashboard-legacy/header.js +119 -66
  66. package/lib/Layout/dashboard-legacy/index.js +90 -79
  67. package/lib/Layout/dashboard-legacy/sidebar.js +95 -62
  68. package/lib/Layout/index.js +200 -106
  69. package/lib/LoadingMask/index.js +31 -38
  70. package/lib/Locale/browser-lang.js +2 -8
  71. package/lib/Locale/context.js +46 -69
  72. package/lib/Locale/languages.js +6 -15
  73. package/lib/Locale/selector.js +116 -92
  74. package/lib/Locale/util.js +7 -16
  75. package/lib/Logo/index.js +54 -57
  76. package/lib/Metric/index.js +103 -40
  77. package/lib/NFTDisplay/aspect-ratio-container.js +33 -40
  78. package/lib/NFTDisplay/broken.js +68 -52
  79. package/lib/NFTDisplay/index.js +140 -129
  80. package/lib/NFTDisplay/loading.js +14 -13
  81. package/lib/NFTDisplay/svg-embedder/img.js +18 -33
  82. package/lib/NFTDisplay/svg-embedder/inline-svg.js +28 -32
  83. package/lib/NavMenu/index.js +2 -13
  84. package/lib/NavMenu/nav-menu.js +133 -148
  85. package/lib/NavMenu/style.js +179 -12
  86. package/lib/PageScroller/index.js +82 -93
  87. package/lib/PageScroller/story/FifthComponent.js +4 -10
  88. package/lib/PageScroller/story/FirstComponent.js +4 -10
  89. package/lib/PageScroller/story/FourthComponent.js +4 -10
  90. package/lib/PageScroller/story/FullPage.js +21 -28
  91. package/lib/PageScroller/story/PageContain.js +23 -30
  92. package/lib/PageScroller/story/SecondComponent.js +4 -10
  93. package/lib/PageScroller/story/ThirdComponent.js +4 -10
  94. package/lib/PageScroller/usePrevValue.js +4 -11
  95. package/lib/Passport/index.js +2 -9
  96. package/lib/Passport/passport.js +38 -51
  97. package/lib/PoweredByArcBlock/index.js +19 -33
  98. package/lib/PricingTable/PricingPlan.js +90 -34
  99. package/lib/PricingTable/index.js +28 -26
  100. package/lib/QRCode/index.js +38 -50
  101. package/lib/RelativeTime/index.js +44 -59
  102. package/lib/Result/common.js +85 -107
  103. package/lib/Result/index.js +22 -34
  104. package/lib/Result/result.js +35 -41
  105. package/lib/Result/translations.js +1 -7
  106. package/lib/Screenshot/BaseScreenshot/index.js +65 -43
  107. package/lib/Screenshot/BaseScreenshot/shells/Macbook.js +17 -27
  108. package/lib/Screenshot/BaseScreenshot/shells/Phone.js +14 -25
  109. package/lib/Screenshot/index.js +103 -92
  110. package/lib/SessionBlocklet/index.js +125 -143
  111. package/lib/SessionManager/index.js +2 -9
  112. package/lib/SessionPermission/index.js +13 -23
  113. package/lib/SessionUser/components/logged-in.js +139 -158
  114. package/lib/SessionUser/components/session-user-item.js +44 -58
  115. package/lib/SessionUser/components/session-user-switch.js +133 -152
  116. package/lib/SessionUser/components/un-login.js +27 -35
  117. package/lib/SessionUser/components/user-info.js +62 -74
  118. package/lib/SessionUser/index.js +26 -34
  119. package/lib/SessionUser/libs/translation.js +1 -7
  120. package/lib/SessionUser/libs/utils.js +13 -34
  121. package/lib/Sparkline/index.js +4 -10
  122. package/lib/Spinner/index.js +11 -17
  123. package/lib/SplitButton/index.js +72 -68
  124. package/lib/Success/index.js +28 -34
  125. package/lib/Switch/index.js +64 -75
  126. package/lib/Tabs/index.js +84 -103
  127. package/lib/Tag/index.js +52 -56
  128. package/lib/TextCollapse/index.js +57 -50
  129. package/lib/Theme/index.js +8 -47
  130. package/lib/Theme/theme-provider.js +19 -26
  131. package/lib/Theme/theme.js +49 -62
  132. package/lib/Toast/index.js +41 -73
  133. package/lib/Typography/index.js +44 -55
  134. package/lib/Util/constant.js +16 -22
  135. package/lib/Util/deprecate.js +14 -26
  136. package/lib/Util/federated.js +16 -38
  137. package/lib/Util/index.js +63 -113
  138. package/lib/Util/passport.js +23 -33
  139. package/lib/Util/wallet.js +5 -14
  140. package/lib/Video/index.js +34 -34
  141. package/lib/Wallet/Action.js +72 -49
  142. package/lib/Wallet/Download.js +132 -115
  143. package/lib/Wallet/Open.js +26 -25
  144. package/lib/WalletOSIcon/index.js +33 -42
  145. package/lib/WebWalletSWKeeper/index.js +42 -55
  146. package/lib/WechatPrompt/index.js +53 -33
  147. package/lib/index.js +38 -265
  148. package/lib/withTheme/index.js +53 -33
  149. package/lib/withTracker/error_boundary.js +7 -18
  150. package/lib/withTracker/index.js +25 -34
  151. package/package.json +9 -316
  152. package/src/WalletOSIcon/index.jsx +1 -1
  153. package/es/ActionButton/index.js +0 -99
  154. package/es/ActivityIndicator/index.js +0 -180
  155. package/es/Address/compact-text.js +0 -105
  156. package/es/Address/did-address.js +0 -222
  157. package/es/Address/index.js +0 -23
  158. package/es/Address/responsive-did-address.js +0 -87
  159. package/es/Alert/index.js +0 -134
  160. package/es/AnimationWaiter/default-animation.json +0 -1
  161. package/es/AnimationWaiter/index.js +0 -240
  162. package/es/Async/index.js +0 -38
  163. package/es/Avatar/did-motif.js +0 -68
  164. package/es/Avatar/etherscan-blockies.js +0 -83
  165. package/es/Avatar/index.js +0 -179
  166. package/es/Badge/index.js +0 -98
  167. package/es/Blocklet/blocklet.js +0 -298
  168. package/es/Blocklet/index.js +0 -4
  169. package/es/Blocklet/utils.js +0 -52
  170. package/es/BlockletContext/index.js +0 -65
  171. package/es/BlockletNFT/index.js +0 -412
  172. package/es/Button/index.js +0 -8
  173. package/es/Button/wrap.js +0 -140
  174. package/es/ButtonGroup/index.js +0 -6
  175. package/es/CardSelector/index.js +0 -149
  176. package/es/Center/index.js +0 -41
  177. package/es/ClickToCopy/copy-button.js +0 -72
  178. package/es/ClickToCopy/hook.js +0 -39
  179. package/es/ClickToCopy/index.js +0 -92
  180. package/es/CodeBlock/LightBox.js +0 -85
  181. package/es/CodeBlock/index.js +0 -222
  182. package/es/Colors/index.js +0 -3
  183. package/es/Colors/themes/default.js +0 -77
  184. package/es/Colors/themes/temp.js +0 -41
  185. package/es/ContactForm/index.js +0 -230
  186. package/es/CookieConsent/index.js +0 -113
  187. package/es/CountDown/index.js +0 -178
  188. package/es/DID/index.js +0 -249
  189. package/es/Datatable/CustomToolbar.js +0 -396
  190. package/es/Datatable/DatatableContext.js +0 -34
  191. package/es/Datatable/TableSearch.js +0 -166
  192. package/es/Datatable/index.js +0 -629
  193. package/es/Datatable/utils.js +0 -132
  194. package/es/Dialog/confirm.js +0 -123
  195. package/es/Dialog/dialog.js +0 -201
  196. package/es/Dialog/index.js +0 -4
  197. package/es/Dialog/types.d.ts +0 -17
  198. package/es/Dialog/use-confirm.js +0 -133
  199. package/es/DidLogo/index.js +0 -31
  200. package/es/DriftBot/index.js +0 -70
  201. package/es/Earth/countries.json +0 -8057
  202. package/es/Earth/index.js +0 -521
  203. package/es/Earth/util.js +0 -51
  204. package/es/Empty/index.js +0 -65
  205. package/es/ErrorBoundary/fallback.js +0 -73
  206. package/es/ErrorBoundary/index.js +0 -1
  207. package/es/Footer/index.js +0 -172
  208. package/es/Header/auto-hidden.js +0 -35
  209. package/es/Header/header.js +0 -223
  210. package/es/Header/index.js +0 -2
  211. package/es/Header/responsive-header.js +0 -146
  212. package/es/Icon/image.js +0 -65
  213. package/es/Icon/index.js +0 -84
  214. package/es/Img/index.js +0 -218
  215. package/es/InfoRow/index.js +0 -87
  216. package/es/Layout/dashboard/external-link.js +0 -58
  217. package/es/Layout/dashboard/full-page.js +0 -53
  218. package/es/Layout/dashboard/index.js +0 -282
  219. package/es/Layout/dashboard/sidebar.js +0 -209
  220. package/es/Layout/dashboard-legacy/header.js +0 -174
  221. package/es/Layout/dashboard-legacy/index.js +0 -148
  222. package/es/Layout/dashboard-legacy/sidebar.js +0 -129
  223. package/es/Layout/index.js +0 -335
  224. package/es/LoadingMask/index.js +0 -102
  225. package/es/Locale/browser-lang.js +0 -52
  226. package/es/Locale/context.js +0 -139
  227. package/es/Locale/languages.js +0 -60
  228. package/es/Locale/selector.js +0 -186
  229. package/es/Locale/util.js +0 -21
  230. package/es/Logo/images/logo-dark-text.svg +0 -3
  231. package/es/Logo/images/logo-dark-top.svg +0 -6
  232. package/es/Logo/images/logo-light-text.svg +0 -3
  233. package/es/Logo/images/logo-light-top.svg +0 -6
  234. package/es/Logo/index.js +0 -136
  235. package/es/Metric/index.js +0 -132
  236. package/es/NFTDisplay/NFTBroken.svg +0 -34
  237. package/es/NFTDisplay/README.md +0 -59
  238. package/es/NFTDisplay/aspect-ratio-container.js +0 -39
  239. package/es/NFTDisplay/broken.js +0 -132
  240. package/es/NFTDisplay/demo/data/asset-state-display-url.json +0 -7
  241. package/es/NFTDisplay/demo/data/asset-state-gzipped-svg-1-1.json +0 -10
  242. package/es/NFTDisplay/demo/data/asset-state-gzipped-svg-374-130.json +0 -10
  243. package/es/NFTDisplay/demo/data/asset-state-gzipped-svg-with-foreign-object.json +0 -20
  244. package/es/NFTDisplay/demo/data/asset-state-svg.json +0 -29
  245. package/es/NFTDisplay/demo/data/asset-state-url.json +0 -10
  246. package/es/NFTDisplay/index.js +0 -328
  247. package/es/NFTDisplay/loading.js +0 -18
  248. package/es/NFTDisplay/svg-embedder/img.js +0 -45
  249. package/es/NFTDisplay/svg-embedder/inline-svg.js +0 -39
  250. package/es/NavMenu/index.js +0 -2
  251. package/es/NavMenu/nav-menu.js +0 -358
  252. package/es/NavMenu/style.js +0 -181
  253. package/es/PageScroller/index.js +0 -286
  254. package/es/PageScroller/story/FifthComponent.js +0 -9
  255. package/es/PageScroller/story/FirstComponent.js +0 -9
  256. package/es/PageScroller/story/FourthComponent.js +0 -12
  257. package/es/PageScroller/story/FullPage.js +0 -47
  258. package/es/PageScroller/story/PageContain.js +0 -59
  259. package/es/PageScroller/story/SecondComponent.js +0 -9
  260. package/es/PageScroller/story/ThirdComponent.js +0 -9
  261. package/es/PageScroller/story/index.css +0 -115
  262. package/es/PageScroller/usePrevValue.js +0 -9
  263. package/es/Passport/index.js +0 -2
  264. package/es/Passport/passport.js +0 -103
  265. package/es/PoweredByArcBlock/index.js +0 -31
  266. package/es/PricingTable/PricingPlan.js +0 -124
  267. package/es/PricingTable/index.js +0 -53
  268. package/es/QRCode/index.js +0 -73
  269. package/es/RelativeTime/index.js +0 -107
  270. package/es/Result/common.js +0 -140
  271. package/es/Result/demo/fixtures/result-image-404.svg +0 -1
  272. package/es/Result/index.js +0 -33
  273. package/es/Result/result.js +0 -59
  274. package/es/Result/translations.js +0 -54
  275. package/es/Screenshot/BaseScreenshot/index.js +0 -91
  276. package/es/Screenshot/BaseScreenshot/shells/Macbook.js +0 -51
  277. package/es/Screenshot/BaseScreenshot/shells/Phone.js +0 -36
  278. package/es/Screenshot/demo/images/bg-00.jpg +0 -0
  279. package/es/Screenshot/demo/images/bg-01.jpg +0 -0
  280. package/es/Screenshot/demo/images/bg-02.jpg +0 -0
  281. package/es/Screenshot/demo/images/bg-03.jpg +0 -0
  282. package/es/Screenshot/demo/images/bg-04.jpg +0 -0
  283. package/es/Screenshot/demo/images/bg-05.jpg +0 -0
  284. package/es/Screenshot/demo/images/bg-06.jpg +0 -0
  285. package/es/Screenshot/demo/images/bg-07.jpg +0 -0
  286. package/es/Screenshot/demo/images/bg-08.jpg +0 -0
  287. package/es/Screenshot/demo/images/bg-09.jpg +0 -0
  288. package/es/Screenshot/devices.css +0 -1366
  289. package/es/Screenshot/index.js +0 -299
  290. package/es/SessionBlocklet/index.js +0 -173
  291. package/es/SessionManager/index.js +0 -2
  292. package/es/SessionPermission/index.js +0 -28
  293. package/es/SessionUser/components/logged-in.js +0 -229
  294. package/es/SessionUser/components/session-user-item.js +0 -102
  295. package/es/SessionUser/components/session-user-switch.js +0 -223
  296. package/es/SessionUser/components/un-login.js +0 -64
  297. package/es/SessionUser/components/user-info.js +0 -167
  298. package/es/SessionUser/index.js +0 -49
  299. package/es/SessionUser/libs/translation.js +0 -19
  300. package/es/SessionUser/libs/utils.js +0 -29
  301. package/es/Sparkline/index.js +0 -193
  302. package/es/Spinner/index.js +0 -28
  303. package/es/SplitButton/index.js +0 -145
  304. package/es/Success/index.js +0 -175
  305. package/es/Switch/index.js +0 -96
  306. package/es/Tabs/index.js +0 -214
  307. package/es/Tag/index.js +0 -108
  308. package/es/TextCollapse/index.js +0 -92
  309. package/es/Theme/index.js +0 -16
  310. package/es/Theme/theme-provider.js +0 -39
  311. package/es/Theme/theme.js +0 -145
  312. package/es/Toast/index.js +0 -97
  313. package/es/Typography/index.js +0 -95
  314. package/es/Util/constant.js +0 -42
  315. package/es/Util/deprecate.js +0 -28
  316. package/es/Util/federated.js +0 -91
  317. package/es/Util/index.js +0 -363
  318. package/es/Util/passport.js +0 -62
  319. package/es/Util/wallet.js +0 -32
  320. package/es/Video/index.js +0 -89
  321. package/es/Wallet/Action.js +0 -119
  322. package/es/Wallet/Download.js +0 -331
  323. package/es/Wallet/Open.js +0 -45
  324. package/es/Wallet/images/abtwallet.png +0 -0
  325. package/es/Wallet/images/android_download.svg +0 -23
  326. package/es/Wallet/images/app-store.svg +0 -20
  327. package/es/Wallet/images/google-play.svg +0 -70
  328. package/es/WalletOSIcon/index.js +0 -82
  329. package/es/WebWalletSWKeeper/index.js +0 -117
  330. package/es/WechatPrompt/images/android.png +0 -0
  331. package/es/WechatPrompt/images/ios.png +0 -0
  332. package/es/WechatPrompt/index.js +0 -88
  333. package/es/index.js +0 -38
  334. package/es/withTheme/index.js +0 -69
  335. package/es/withTracker/README.md +0 -34
  336. package/es/withTracker/error_boundary.js +0 -34
  337. package/es/withTracker/index.js +0 -55
@@ -1,132 +0,0 @@
1
- import find from 'lodash/find';
2
- function escapeDangerousCSVCharacters(data) {
3
- if (typeof data === 'string') {
4
- // Places single quote before the appearance of dangerous characters if they
5
- // are the first in the data string.
6
- // eslint-disable-next-line no-useless-escape
7
- return data.replace(/^\+|^\-|^\=|^\@/g, "'$&");
8
- }
9
- return data;
10
- }
11
- function buildCSV(columns, data, options) {
12
- const replaceDoubleQuoteInString = columnData => typeof columnData === 'string' ? columnData.replace(/"/g, '""') : columnData;
13
-
14
- // eslint-disable-next-line no-shadow
15
- const buildHead = columns => {
16
- return `${columns.reduce((soFar, column) => column.download ? `${soFar}"${escapeDangerousCSVCharacters(replaceDoubleQuoteInString(column.label || column.name))}"${options.downloadOptions.separator}` : soFar, '').slice(0, -1)}\r\n`;
17
- };
18
- const CSVHead = buildHead(columns);
19
-
20
- // eslint-disable-next-line no-shadow
21
- const buildBody = data => {
22
- if (!data.length) return '';
23
- return data.reduce((soFar, row) => `${soFar}"${row.data.filter((_, index) => columns[index].download).map(columnData => escapeDangerousCSVCharacters(replaceDoubleQuoteInString(columnData))).join(`"${options.downloadOptions.separator}"`)}"\r\n`, '').trim();
24
- };
25
- const CSVBody = buildBody(data);
26
- const csv = options.onDownload ? options.onDownload(buildHead, buildBody, columns, data) : `${CSVHead}${CSVBody}`.trim();
27
- return csv;
28
- }
29
- function downloadCSV(csv, filename) {
30
- const blob = new Blob([csv], {
31
- type: 'text/csv'
32
- });
33
-
34
- /* taken from react-csv */
35
- if (navigator && navigator.msSaveOrOpenBlob) {
36
- navigator.msSaveOrOpenBlob(blob, filename);
37
- } else {
38
- const dataURI = `data:text/csv;charset=utf-8,${csv}`;
39
- const URL = window.URL || window.webkitURL;
40
- const downloadURI = typeof URL.createObjectURL === 'undefined' ? dataURI : URL.createObjectURL(blob);
41
- const link = document.createElement('a');
42
- link.setAttribute('href', downloadURI);
43
- link.setAttribute('download', filename);
44
- document.body.appendChild(link);
45
- link.click();
46
- document.body.removeChild(link);
47
- }
48
- }
49
-
50
- // eslint-disable-next-line no-shadow
51
- function createCSVDownload(columns, data, options, downloadCSV) {
52
- const csv = buildCSV(columns, data, options);
53
- if (options.onDownload && csv === false) {
54
- return;
55
- }
56
- downloadCSV(csv, options.downloadOptions.filename);
57
- }
58
- export function handleCSVDownload(props) {
59
- const {
60
- data,
61
- displayData,
62
- columns,
63
- options,
64
- columnOrder
65
- } = props;
66
- let dataToDownload = [];
67
- let columnsToDownload = [];
68
- let columnOrderCopy = Array.isArray(columnOrder) ? columnOrder.slice(0) : [];
69
- if (columnOrderCopy.length === 0) {
70
- columnOrderCopy = columns.map((item, idx) => idx);
71
- }
72
- data.forEach(row => {
73
- const newRow = {
74
- index: row.index,
75
- data: []
76
- };
77
- columnOrderCopy.forEach(idx => {
78
- newRow.data.push(row.data[idx]);
79
- });
80
- dataToDownload.push(newRow);
81
- });
82
- columnOrderCopy.forEach(idx => {
83
- columnsToDownload.push(columns[idx]);
84
- });
85
- if (options.downloadOptions && options.downloadOptions.filterOptions) {
86
- // check rows first:
87
- if (options.downloadOptions.filterOptions.useDisplayedRowsOnly) {
88
- const filteredDataToDownload = displayData.map((row, index) => {
89
- let i = -1;
90
-
91
- // Help to preserve sort order in custom render columns
92
- row.index = index;
93
- return {
94
- data: row.data.map(column => {
95
- i += 1;
96
-
97
- // if we have a custom render, which will appear as a react element, we must grab the actual value from data
98
- // that matches the dataIndex and column
99
- // TODO: Create a utility function for checking whether or not something is a react object
100
- let val = typeof column === 'object' && column !== null && !Array.isArray(column) ? find(data, d => d.index === row.dataIndex).data[i] : column;
101
- val = typeof val === 'function' ? find(data, d => d.index === row.dataIndex).data[i] : val;
102
- return val;
103
- })
104
- };
105
- });
106
- dataToDownload = [];
107
- filteredDataToDownload.forEach(row => {
108
- const newRow = {
109
- index: row.index,
110
- data: []
111
- };
112
- columnOrderCopy.forEach(idx => {
113
- newRow.data.push(row.data[idx]);
114
- });
115
- dataToDownload.push(newRow);
116
- });
117
- }
118
-
119
- // now, check columns:
120
- if (options.downloadOptions.filterOptions.useDisplayedColumnsOnly) {
121
- columnsToDownload = columnsToDownload.filter(_ => _.display === 'true');
122
- dataToDownload = dataToDownload.map(row => {
123
- row.data = row.data.filter((_, index) => columns[columnOrderCopy[index]].display === 'true');
124
- return row;
125
- });
126
- }
127
- }
128
- createCSVDownload(columnsToDownload, dataToDownload, options, downloadCSV);
129
- }
130
- export default {
131
- handleCSVDownload
132
- };
@@ -1,123 +0,0 @@
1
- import PropTypes from 'prop-types';
2
- import { useMemoizedFn } from 'ahooks';
3
- import Button from '../Button';
4
- import Dialog from './dialog';
5
-
6
- /**
7
- @typedef {Object} ConfirmProps
8
- @property {boolean} open
9
- @property {React.ReactNode} title
10
- @property {React.ReactNode} children
11
- @property {() => void | Promise<void>} onConfirm
12
- @property {() => void | Promise<void>} onCancel
13
- @property {boolean} [showCancelButton=true]
14
- @property {{text: string, props?: import('../Button/wrap').ButtonProps}} [confirmButton={text: 'Confirm'}]
15
- @property {{text: string, props?: import('../Button/wrap').ButtonProps}} [cancelButton={text: 'Cancel'}]
16
- @property {import('@mui/material').PaperProps} [PaperProps={}]
17
- */
18
-
19
- // 注意排在 {...rest} 之后的 props 优先级更高
20
- /**
21
- *
22
- * @param {ConfirmProps} props
23
- * @returns {import('react').ReactComponentElement}
24
- */
25
- import { jsx as _jsx } from "react/jsx-runtime";
26
- import { Fragment as _Fragment } from "react/jsx-runtime";
27
- import { jsxs as _jsxs } from "react/jsx-runtime";
28
- export default function Confirm({
29
- title,
30
- children,
31
- onConfirm,
32
- onCancel,
33
- showCloseButton,
34
- showCancelButton,
35
- confirmButton,
36
- cancelButton,
37
- PaperProps,
38
- ...rest
39
- }) {
40
- // 去除 dialog 默认的 300 最小高度
41
- PaperProps.style = Object.assign({
42
- minHeight: 0
43
- }, PaperProps.style);
44
- const handleClose = useMemoizedFn((e, reason) => {
45
- if (['backdropClick', 'escapeKeyDown'].includes(reason)) {
46
- return;
47
- }
48
- e.stopPropagation();
49
- onCancel(e, reason);
50
- });
51
- return /*#__PURE__*/_jsx(Dialog, {
52
- title: title,
53
- PaperProps: PaperProps,
54
- ...rest,
55
- onClose: handleClose,
56
- showCloseButton: showCloseButton,
57
- slotProps: {
58
- header: {
59
- sx: {
60
- '.ux-dialog_title': {
61
- lineHeight: 1
62
- }
63
- }
64
- },
65
- content: {
66
- sx: {
67
- paddingTop: '0!important',
68
- border: 'none!important'
69
- }
70
- }
71
- },
72
- actions: /*#__PURE__*/_jsxs(_Fragment, {
73
- children: [showCancelButton && /*#__PURE__*/_jsx(Button, {
74
- onClick: e => {
75
- e.stopPropagation();
76
- onCancel(e, 'closeButton');
77
- },
78
- color: "primary",
79
- ...cancelButton.props,
80
- children: cancelButton.text
81
- }), /*#__PURE__*/_jsx(Button, {
82
- onClick: e => {
83
- e.stopPropagation();
84
- onConfirm(e);
85
- },
86
- color: "primary",
87
- autoFocus: true,
88
- ...confirmButton.props,
89
- children: confirmButton.text
90
- })]
91
- }),
92
- children: children
93
- });
94
- }
95
- Confirm.propTypes = {
96
- title: PropTypes.node.isRequired,
97
- children: PropTypes.node.isRequired,
98
- onConfirm: PropTypes.func.isRequired,
99
- onCancel: PropTypes.func.isRequired,
100
- showCancelButton: PropTypes.bool,
101
- showCloseButton: PropTypes.bool,
102
- // 可以传入 {text: ..., props: ...}
103
- confirmButton: PropTypes.shape({
104
- text: PropTypes.string.isRequired,
105
- props: PropTypes.object
106
- }),
107
- cancelButton: PropTypes.shape({
108
- text: PropTypes.string.isRequired,
109
- props: PropTypes.object
110
- }),
111
- PaperProps: PropTypes.object
112
- };
113
- Confirm.defaultProps = {
114
- showCloseButton: true,
115
- showCancelButton: true,
116
- confirmButton: {
117
- text: 'Confirm'
118
- },
119
- cancelButton: {
120
- text: 'Cancel'
121
- },
122
- PaperProps: {}
123
- };
@@ -1,201 +0,0 @@
1
- import PropTypes from 'prop-types';
2
- import CloseIcon from '@mui/icons-material/Close';
3
- import { Typography, Dialog as MuiDialog, DialogContent as MuiDialogContent, DialogActions, IconButton, useMediaQuery, Box } from '@mui/material';
4
- import { styled, useTheme } from '../Theme';
5
-
6
- /**
7
- @typedef {import('@mui/material').PaperProps & {
8
- minWidth: number | string,
9
- minHeight: number | string,
10
- }} PaperStyle
11
- */
12
-
13
- /**
14
- @typedef {Object} DialogProps
15
- @property {React.ReactNode} children - The content of the dialog.
16
- @property {React.ReactNode} [title] - The title of the dialog.
17
- @property {React.ReactNode} [prepend] - Content to be displayed before the dialog title.
18
- @property {React.ReactNode} [toolbar] - Content to be displayed in the top toolbar of the dialog.
19
- @property {React.ReactNode} [actions] - Content to be displayed in the bottom actions toolbar of the dialog.
20
- @property {boolean} [showCloseButton=true] - Whether or not to show the close button.
21
- @property {'left'|'center'|'right'} [actionsPosition='right'] - The position of the actions toolbar.
22
- @property {PaperStyle} [PaperProps] - Props to be passed down to the dialog paper.
23
- @property {(event: React.SyntheticEvent, reason: string) => void} [onClose] - Callback function fired when the dialog is closed.
24
- */
25
-
26
- /**
27
- * Dialog
28
- *
29
- * - 固定尺寸或特殊的尺寸控制需求, 可使用 PaperProps.style (不再提供 width/height 等 props)
30
- * 注意: 当设置明确的 width 时, 可能需要同时设置 maxWidth=false (mui dialog 默认 maxWidth=sm, 设置的 width 可能受限)
31
- * - 添加默认最小尺寸 (300x300), 在需要 先展示 loading 再展示异步数据 的时候避免 loading 阶段窗口过小
32
- */
33
- /**
34
- * @description
35
- * @param {DialogProps} props
36
- * @return {React.ReactComponentElement<any, DialogProps>}
37
- */
38
- import { jsx as _jsx } from "react/jsx-runtime";
39
- import { jsxs as _jsxs } from "react/jsx-runtime";
40
- function Dialog({
41
- children,
42
- title,
43
- prepend,
44
- toolbar,
45
- actions,
46
- showCloseButton,
47
- actionsPosition,
48
- PaperProps,
49
- slotProps,
50
- ...rest
51
- }) {
52
- const theme = useTheme();
53
- // 不管是否是 mobile 设备, 只要屏宽 < sm, dialog 就处于 mobile 模式
54
- const isMobile = useMediaQuery(theme.breakpoints.down('md'));
55
- const showHeader = title || showCloseButton || toolbar;
56
- const handleOnClose = (e, reason) => {
57
- // escapeKeyDown/backdropClick
58
- const {
59
- onClose
60
- } = rest;
61
- if (onClose) {
62
- onClose(e, reason);
63
- }
64
- };
65
- // 添加默认最小尺寸 (300x300)
66
- PaperProps.style = Object.assign({
67
- minWidth: 300,
68
- minHeight: 300
69
- }, PaperProps.style);
70
- const closeButton = /*#__PURE__*/_jsx(IconButton, {
71
- className: "ux-dialog_closeButton",
72
- onClick: e => handleOnClose(e, 'closeButton'),
73
- children: /*#__PURE__*/_jsx(CloseIcon, {})
74
- });
75
- return /*#__PURE__*/_jsxs(StyledMuiDialog, {
76
- fullScreen: isMobile,
77
- onClose: handleOnClose,
78
- PaperProps: PaperProps,
79
- ...rest,
80
- children: [showHeader && /*#__PURE__*/_jsxs(Header, {
81
- ...slotProps.header,
82
- className: "ux-dialog_header",
83
- isMobile: isMobile,
84
- children: [/*#__PURE__*/_jsxs("div", {
85
- className: "ux-dialog_left",
86
- children: [showCloseButton && isMobile && closeButton, prepend && /*#__PURE__*/_jsx("div", {
87
- className: "ux-dialog_prepend",
88
- children: prepend
89
- }), title && /*#__PURE__*/_jsx(Typography, {
90
- variant: "h6",
91
- className: "ux-dialog_title",
92
- children: title
93
- })]
94
- }), /*#__PURE__*/_jsxs("div", {
95
- className: "ux-dialog_right",
96
- children: [/*#__PURE__*/_jsx("div", {
97
- className: "ux-dialog_toolbar",
98
- children: toolbar
99
- }), showCloseButton && !isMobile && closeButton]
100
- })]
101
- }), /*#__PURE__*/_jsx(MuiDialogContent, {
102
- ...slotProps.content,
103
- children: children
104
- }), actions && /*#__PURE__*/_jsx(DialogActions, {
105
- className: `ux-dialog_actions--${actionsPosition}`,
106
- children: actions
107
- })]
108
- });
109
- }
110
- Dialog.propTypes = {
111
- children: PropTypes.node.isRequired,
112
- title: PropTypes.node,
113
- // 在 title 之前追加内容, 比如返回按钮
114
- prepend: PropTypes.node,
115
- // 顶部工具栏, 在 close button 另一侧
116
- toolbar: PropTypes.node,
117
- actions: PropTypes.node,
118
- showCloseButton: PropTypes.bool,
119
- actionsPosition: PropTypes.oneOf(['left', 'center', 'right']),
120
- PaperProps: PropTypes.object,
121
- slotProps: PropTypes.shape({
122
- content: PropTypes.object,
123
- header: PropTypes.object
124
- })
125
- };
126
- Dialog.defaultProps = {
127
- showCloseButton: true,
128
- title: '',
129
- prepend: null,
130
- toolbar: null,
131
- actions: null,
132
- actionsPosition: 'right',
133
- PaperProps: {},
134
- slotProps: {}
135
- };
136
- /**
137
- * @type {import('@emotion/styled').StyledComponent<import('@mui/material').DialogProps, {}, { ref?: React.Ref<any> | undefined;}>}
138
- */
139
- const StyledMuiDialog = styled(MuiDialog)`
140
- .MuiDialog-paper {
141
- ${props => props.fullScreen ? 'border-radius: 0;' : ''};
142
- }
143
- .MuiDialogContent-root {
144
- padding: 16px 24px;
145
- }
146
- .MuiDialogActions-root {
147
- padding: 8px 24px 16px 24px;
148
- }
149
- .MuiDialogActions-root.ux-dialog_actions--left {
150
- justify-content: flex-start;
151
- }
152
- .MuiDialogActions-root.ux-dialog_actions--right {
153
- justify-content: flex-end;
154
- }
155
- .MuiDialogActions-root.ux-dialog_actions--center {
156
- justify-content: center;
157
- }
158
- `;
159
-
160
- /** @type {import('@emotion/styled').StyledComponent<import('react').ComponentPropsWithoutRef<"div">, {}, { ref?: React.Ref<any> | undefined;}>} */
161
- const Header = styled(Box, {
162
- shouldForwardProp: prop => prop !== 'isMobile'
163
- })`
164
- display: flex;
165
- justify-content: space-between;
166
- align-items: center;
167
- padding: 16px 24px;
168
- .ux-dialog_left {
169
- display: flex;
170
- justify-content: flex-start;
171
- align-items: center;
172
- min-width: 0;
173
- }
174
- .ux-dialog_right {
175
- display: flex;
176
- justify-content: flex-end;
177
- align-items: center;
178
- }
179
- .ux-dialog_toolbar {
180
- display: flex;
181
- align-items: center;
182
- }
183
- .ux-dialog_title {
184
- margin: 0;
185
- font-size: 18px;
186
- font-weight: 500;
187
- white-space: nowrap;
188
- overflow: hidden;
189
- text-overflow: ellipsis;
190
- }
191
- .ux-dialog_closeButton {
192
- /* 使 closeButton 与 content 左/右对齐 */
193
- ${props => props.isMobile ? 'margin-left: -12px;' : 'margin-right: -12px;'}
194
- transition: transform 0.3s;
195
- transform: rotate(0deg);
196
- &:hover {
197
- transform: rotate(90deg);
198
- }
199
- }
200
- `;
201
- export default Dialog;
@@ -1,4 +0,0 @@
1
- // eslint-disable-next-line no-restricted-exports
2
- export { default } from './dialog';
3
- export { default as Confirm } from './confirm';
4
- export { default as useConfirm } from './use-confirm';
@@ -1,17 +0,0 @@
1
- import type { ReactNode } from 'react';
2
-
3
- export type OpenConfirmProps = {
4
- title: ReactNode;
5
- content: ReactNode;
6
- onConfirm: (close: () => void) => void;
7
- onCancel: () => void;
8
- showCancelButton: boolean;
9
- confirmButtonText: string;
10
- cancelButtonText: string;
11
- };
12
-
13
- export type UpdateConfirmProps = Partial<Pick<OpenConfirmProps, 'title' | 'content'>>;
14
-
15
- export type OpenConfirm = (params: OpenConfirmProps) => void;
16
- export type CloseConfirm = () => void;
17
- export type UpdateConfirm = (params: UpdateConfirmProps) => void;
@@ -1,133 +0,0 @@
1
- import { forwardRef, useImperativeHandle, useRef, useState } from 'react';
2
- import { useMemoizedFn, useReactive } from 'ahooks';
3
- import noop from 'lodash/noop';
4
- import Confirm from './confirm';
5
- import { jsx as _jsx } from "react/jsx-runtime";
6
- const ConfirmHolder = /*#__PURE__*/forwardRef((props, ref) => {
7
- // HACK: 这里默认值不使用 null,来避免开发环境中的字段必填警告
8
- // HACK: useReactive 无法存储 react-node,所以只能使用 useState
9
- const [title, setTitle] = useState('');
10
- const [content, setContent] = useState('');
11
- const state = useReactive({
12
- show: false,
13
- onConfirm: noop,
14
- onCancel: noop,
15
- loading: false,
16
- showCancelButton: true,
17
- showCloseButton: true,
18
- confirmButtonText: 'Confirm',
19
- cancelButtonText: 'Cancel'
20
- });
21
- const open = useMemoizedFn((params = {}) => {
22
- setTitle(params.title);
23
- setContent(params.content);
24
- state.onConfirm = params.onConfirm || noop;
25
- state.onCancel = params.onCancel || noop;
26
- state.showCloseButton = params.showCloseButton ?? true;
27
- state.showCancelButton = params.showCancelButton ?? true;
28
- if (params.confirmButtonText) state.confirmButtonText = params.confirmButtonText;
29
- if (params.cancelButtonText) state.cancelButtonText = params.cancelButtonText;
30
- state.loading = false;
31
- state.show = true;
32
- });
33
- const reset = useMemoizedFn(() => {
34
- setTitle('');
35
- setContent('');
36
- state.onConfirm = noop;
37
- state.onCancel = noop;
38
- state.confirmButtonText = 'Confirm';
39
- state.cancelButtonText = 'Cancel';
40
- });
41
- const close = useMemoizedFn(() => {
42
- state.show = false;
43
- setTimeout(() => {
44
- reset();
45
- }, 300);
46
- });
47
- const update = useMemoizedFn(params => {
48
- if (params.title) setTitle(params.title);
49
- if (params.content) setContent(params.content);
50
- });
51
- const onCancel = useMemoizedFn((e, reason) => {
52
- close();
53
- state?.onCancel(e, reason);
54
- }, []);
55
- const onConfirm = useMemoizedFn(async e => {
56
- state.loading = true;
57
- try {
58
- await state?.onConfirm(close, e);
59
- } finally {
60
- state.loading = false;
61
- }
62
- }, []);
63
- useImperativeHandle(ref, () => {
64
- return {
65
- open,
66
- close,
67
- update
68
- };
69
- }, [open, close, update]);
70
- return /*#__PURE__*/_jsx(Confirm, {
71
- ...props,
72
- open: state.show,
73
- title: title,
74
- onConfirm: onConfirm,
75
- onCancel: onCancel,
76
- confirmButton: {
77
- text: state.confirmButtonText,
78
- props: {
79
- variant: 'contained',
80
- color: 'primary',
81
- loading: state.loading
82
- }
83
- },
84
- showCloseButton: state.showCloseButton,
85
- showCancelButton: state.showCancelButton,
86
- cancelButton: {
87
- text: state.cancelButtonText,
88
- props: {
89
- variant: 'outlined',
90
- color: 'primary'
91
- }
92
- },
93
- children: content
94
- });
95
- });
96
- export default function useConfirm(props = {}) {
97
- const confirmRef = useRef(null);
98
-
99
- /**
100
- * 打开一个弹窗
101
- * @type {import('./types').OpenConfirm}
102
- */
103
- const open = useMemoizedFn((...args) => {
104
- confirmRef.current?.open(...args);
105
- });
106
- /**
107
- * 关闭一个弹窗
108
- * @type {import('./types').CloseConfirm}
109
- */
110
- const close = useMemoizedFn((...args) => {
111
- confirmRef.current?.close(...args);
112
- });
113
-
114
- /**
115
- * 更新弹窗的 title 和 content
116
- * @type {import('./types').UpdateConfirm}
117
- */
118
- const update = useMemoizedFn((...args) => {
119
- confirmRef.current?.update(...args);
120
- });
121
- const confirmApi = {
122
- open,
123
- close,
124
- update
125
- };
126
- return {
127
- confirmHolder: /*#__PURE__*/_jsx(ConfirmHolder, {
128
- ...props,
129
- ref: confirmRef
130
- }),
131
- confirmApi
132
- };
133
- }
@@ -1,31 +0,0 @@
1
- import PropTypes from 'prop-types';
2
- import DidLogoIcon from '@arcblock/icons/lib/DidLogo';
3
- import { jsx as _jsx } from "react/jsx-runtime";
4
- const defaultStyle = {
5
- width: 'auto',
6
- height: '1em',
7
- fill: 'currentColor'
8
- };
9
- export default function DidLogo({
10
- style,
11
- size,
12
- className
13
- }) {
14
- const height = Number(size) > 0 ? `${Number(size)}px` : size;
15
- return /*#__PURE__*/_jsx(DidLogoIcon, {
16
- className: `${className}`.trim(),
17
- style: Object.assign({}, defaultStyle, style, height ? {
18
- height
19
- } : {})
20
- });
21
- }
22
- DidLogo.propTypes = {
23
- style: PropTypes.object,
24
- size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
25
- className: PropTypes.string
26
- };
27
- DidLogo.defaultProps = {
28
- style: defaultStyle,
29
- size: 0,
30
- className: ''
31
- };