From 811f13d3306555f45256e51fa7db25c96375818f Mon Sep 17 00:00:00 2001 From: TheLeoB Date: Wed, 24 Jun 2020 10:42:34 -0400 Subject: [PATCH 01/34] feat(eth): add correct color code for withdrawal success --- .../src/data/components/interest/sagas.ts | 7 ++++--- .../modals/Interest/AccountSummary/template.success.tsx | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.ts index 48f7bfb50a7..22b73db35e7 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.ts @@ -50,9 +50,10 @@ export default ({ return yield put( A.fetchInterestBalanceSuccess(DEFAULT_INTEREST_BALANCE) ) - const response: ReturnType = yield call( - api.getInterestAccountBalance - ) + // const response: ReturnType = yield call( + // api.getInterestAccountBalance + // ) + const response = yield call(api.getInterestAccountBalance) yield put(A.fetchInterestBalanceSuccess(response)) } catch (e) { const error = errorHandler(e) diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/AccountSummary/template.success.tsx b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/AccountSummary/template.success.tsx index 2b10cc97c4c..f44325ec924 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/AccountSummary/template.success.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/AccountSummary/template.success.tsx @@ -194,8 +194,8 @@ const AccountSummary: React.FC = props => { )} {stepMetadata && stepMetadata.withdrawSuccess && ( - - + + Date: Wed, 24 Jun 2020 18:04:48 +0200 Subject: [PATCH 02/34] feat(algo): display in left nav --- config/mocks/wallet-options-v4.json | 24 + .../src/Colors/DarkMode.ts | 1 + .../src/Colors/Default.ts | 1 + .../src/Fonts/Icomoon/fonts/icomoon.eot | Bin 25296 -> 25464 bytes .../src/Fonts/Icomoon/fonts/icomoon.svg | 1 + .../src/Fonts/Icomoon/fonts/icomoon.ttf | Bin 25132 -> 25300 bytes .../src/Fonts/Icomoon/fonts/icomoon.woff | Bin 25208 -> 25376 bytes .../src/Fonts/Icomoon/selection.json | 632 ++++++++++++------ .../src/Icons/Icomoon.ts | 1 + .../Wallet/MenuLeft/Navigation/template.tsx | 1 + .../src/exchange/currencies/ALGO.ts | 20 + .../src/exchange/currencies/index.ts | 2 + .../src/redux/rootSaga.ts | 2 +- .../{actionTypes.js => actionTypes.ts} | 0 .../walletOptions/{actions.js => actions.ts} | 0 .../{reducers.js => reducers.ts} | 0 .../{sagaRegister.js => sagaRegister.ts} | 2 +- .../walletOptions/{sagas.js => sagas.ts} | 2 +- .../{selectors.spec.js => selectors.spec.ts} | 1 + .../{selectors.js => selectors.ts} | 13 +- .../src/redux/walletOptions/types.ts | 3 + .../blockchain-wallet-v4/src/types/index.ts | 1 + 22 files changed, 496 insertions(+), 211 deletions(-) create mode 100644 packages/blockchain-wallet-v4/src/exchange/currencies/ALGO.ts rename packages/blockchain-wallet-v4/src/redux/walletOptions/{actionTypes.js => actionTypes.ts} (100%) rename packages/blockchain-wallet-v4/src/redux/walletOptions/{actions.js => actions.ts} (100%) rename packages/blockchain-wallet-v4/src/redux/walletOptions/{reducers.js => reducers.ts} (100%) rename packages/blockchain-wallet-v4/src/redux/walletOptions/{sagaRegister.js => sagaRegister.ts} (81%) rename packages/blockchain-wallet-v4/src/redux/walletOptions/{sagas.js => sagas.ts} (90%) rename packages/blockchain-wallet-v4/src/redux/walletOptions/{selectors.spec.js => selectors.spec.ts} (99%) rename packages/blockchain-wallet-v4/src/redux/walletOptions/{selectors.js => selectors.ts} (87%) diff --git a/config/mocks/wallet-options-v4.json b/config/mocks/wallet-options-v4.json index 95e116cc430..31f66e7f02e 100644 --- a/config/mocks/wallet-options-v4.json +++ b/config/mocks/wallet-options-v4.json @@ -16,6 +16,30 @@ "url": "https://games.bitcoin.com/slots?cma=20190619_blockchainwalletS&utm_source=blockchainwallet_S&utm_medium=banner&utm_campaign=20190619_blockchainwalletS" }, "coins": { + "ALGO": { + "availability": { + "send": true, + "request": true, + "lockbox": false, + "exchangeTo": false, + "exchangeFrom": false, + "syncToPit": false + }, + "coinCode": "ALGO", + "coinTicker": "ALGO", + "colorCode": "algo", + "displayName": "Algorand", + "hasLockboxSupport": false, + "icons": { + "default": "algo", + "circle": "algo", + "circleFilled": "algo" + }, + "learnMoreLink": "", + "minConfirmations": 3, + "txExplorerBaseUrl": "", + "txListAppRoute": "/algo/transactions" + }, "BTC": { "availability": { "send": true, diff --git a/packages/blockchain-info-components/src/Colors/DarkMode.ts b/packages/blockchain-info-components/src/Colors/DarkMode.ts index 04ba5b43759..f92a380845d 100644 --- a/packages/blockchain-info-components/src/Colors/DarkMode.ts +++ b/packages/blockchain-info-components/src/Colors/DarkMode.ts @@ -68,6 +68,7 @@ const DarkTheme: DefaultTheme = { red700: '#B2251B', red800: '#99180F', red900: '#800900', + algo: '#000000', btc: '#FF9B22', 'btc-light': '#FFF2E5', bch: '#8DC351', diff --git a/packages/blockchain-info-components/src/Colors/Default.ts b/packages/blockchain-info-components/src/Colors/Default.ts index 1b878f152a3..49ea5ed1ff7 100644 --- a/packages/blockchain-info-components/src/Colors/Default.ts +++ b/packages/blockchain-info-components/src/Colors/Default.ts @@ -65,6 +65,7 @@ const Default = { red700: '#B2251B', red800: '#99180F', red900: '#800900', + algo: '#000000', btc: '#FF9B22', 'btc-light': 'rgba(255, 155, 34, 0.15)', bch: '#8DC351', diff --git a/packages/blockchain-info-components/src/Fonts/Icomoon/fonts/icomoon.eot b/packages/blockchain-info-components/src/Fonts/Icomoon/fonts/icomoon.eot index d93dc376d85cf237eada906f5af4ebb071417cc6..4b2281412219e2df91dda827ddcb152d34c4b7dd 100644 GIT binary patch delta 530 zcmca`l<~(gM%IdC28JsWSs{kRHg}X^UekGe=sn_m}I0TrYQXm3}Rr2(*eqxWdH>PbNMuY{1hNx zB_p?_Vwb4QF(AJKsAo-1esZGJ3F8Q$RVG0B8@Y)U1q>B>j6lgm9-x3iUSe+QOfSyg zKt9kw#M`91f9*Er+yDN4_?5bD-&@jfyg-qI;=Q7o3@G>zl{6E0L zzR9{Pe4S}KjZ3QV2B4|hHJTr6$K3CdW=BL2`NAUg}lVv z)R|tKzk&P~poX@B{NfS@W}pm15)Vk8ftkg8atdR$-~k{{2gqk(;9+27P?CM`8_X0bnFKgGU_eG_{t_FC+f*mJRmVh_abi`^5uBX(Qtida0*NXE&9Oe&Kb zm^e32WvbEGyjNS=SVmw07k@mz%~u9)7NGGA47WKwro-sTU*gOevnK1rf7`5)lT>HO2}(>(&TkP(Qp7~6ne0|6$W MONBRIPF%_e0DYc(_5c6? diff --git a/packages/blockchain-info-components/src/Fonts/Icomoon/fonts/icomoon.svg b/packages/blockchain-info-components/src/Fonts/Icomoon/fonts/icomoon.svg index cb44c1b2721..eec0bfc63f8 100644 --- a/packages/blockchain-info-components/src/Fonts/Icomoon/fonts/icomoon.svg +++ b/packages/blockchain-info-components/src/Fonts/Icomoon/fonts/icomoon.svg @@ -64,6 +64,7 @@ + diff --git a/packages/blockchain-info-components/src/Fonts/Icomoon/fonts/icomoon.ttf b/packages/blockchain-info-components/src/Fonts/Icomoon/fonts/icomoon.ttf index 690278ce9ae379ff865ab8f01561d2fa16beafad..fbb8caf7d61c5357863cb099c0d904e9cfac138a 100644 GIT binary patch delta 532 zcmZ2;gz?Hz#(D-u1_lOhh6V;^1_S?KeItG$_AH>t9w1Ig&P^;xO;P&5z`!U2>H0oP3c{WAiu0dJSGC28RC!SQwZO zFi104Ox|ZIC&p~gEYHZ#WNa?aXspjFVke8$mES&QW6Rc4Gp5AAvz5Whn;~;#dxj^KIXp-4V#O!vCLvo#zp42RPqTS>X$SO mG&X74Xx3>y&??e;qg|k5p>sz!ME8lF6gUNBZ_Y|M#0UWPE|LoX delta 449 zcmca|lyS`w#(D-u1_lOhh6V;^1_S?KeItG$_H3ZY9w1Ig&P^<^m~W}Zz`!U2==y#D0o>7yBmmR_wLdE3xNd55*pc-50wjc1P^C*cGvOpoxr=FET1je!$4P`6FYE z#%4)vX=53I1zh~`{5D@1xLJV4Gcerd^q3B#CkMotGiFWhi2Js=DPEs3J3u5uq)t>x z)JoJxG(}8C{F#J{M1#a9$q30CQZ7;r(mQ0n$wtU6k?&EEQixL2Qe307Lb*$&Pi>ak z8Fd!*8ueQmF&fV_H8i`lWVEJfOKCsSY18?q+oyX3Xdx(qvKZTdUIPIppi6}}>nAQ{ F1OP#Pc&=HCHiYXQYs7`TA` zR+v14QGfDDMoks5zhb|{eu#Y+dnfir?6uenu}5ML#U6;=7rQHVN9?Lt0s}KRSX3q( zFtKlTWvbEOWny6Xe}IL7`2d47gT-VnGdVG4duDk?ekNmcc}8P>CUa$dCS`tRDLtuKQrBeoWPN1U$^DXlq)?!+L9s!J zN$H>R1C=LgAJmo9qtq{H7-($Lw9%~7e4tgN^+vlu$3o|hZiwy^Jt<(QF)(BULz@R= QKLZmmtq5>;h0@8wk(z;{08ZUt9w8O$1yWGmyp1Vm_INv0Cr|kgWsM&%(e1^tHlE zi^lwUWq*ydnoom?7rANu{&b7#jc3OPv&FN z-)zlPr?ELzTiRGgU;!6@JipCX25uIhu?!5iIX$Ms=*e^9%o(#LUy1v+`CPm{V`6|v zhDe>LlBkuak7$aRjQBGN7l{UmPm&RmH>6yo8l-o~e3OlkTO!}1Af*tcsHM0@X@zo^ zN}t*+wKM80>NV=OG-5QKX=-S8X~}3!)0WbHq|>JJPq$C^2+%@CAkNwxmw1Q~0HWY~ AGXMYp diff --git a/packages/blockchain-info-components/src/Fonts/Icomoon/selection.json b/packages/blockchain-info-components/src/Fonts/Icomoon/selection.json index 61539ca83bf..26482db8c50 100644 --- a/packages/blockchain-info-components/src/Fonts/Icomoon/selection.json +++ b/packages/blockchain-info-components/src/Fonts/Icomoon/selection.json @@ -4,22 +4,50 @@ { "icon": { "paths": [ - "M1152 0h-1024c-71.040 0-127.36 56.96-127.36 128l-0.64 768c0 71.040 56.96 128 128 128h1024c71.040 0 128-56.96 128-128v-768c0-71.040-56.96-128-128-128zM1152 896h-1024v-384h1024v384zM1152 256h-1024v-128h1024v128z" + "M512 1024c282.771 0 512-229.229 512-512 0-282.77-229.229-512-512-512-282.77 0-512 229.23-512 512 0 282.771 229.23 512 512 512z", + "M312.807 736l74.307-128.227 74.31-127.773 73.853-128.227 12.234-20.317 5.437 20.317 22.656 84.432-25.373 43.795-74.307 127.773-73.856 128.227h88.806l112.822-194.595 18.125 66.368 34.435 128.227h79.744l-34.435-128.227-34.435-127.773-9.062-32.96 55.277-95.267h-80.65l-2.72-9.482-28.093-104.746-3.622-13.545h-77.482l-1.811 2.709-146.803 253.291-73.855 127.773-74.308 128.227h88.807z" ], "attrs": [], - "width": 1280, + "isMulticolor": false, + "isMulticolor2": false, "grid": 0, - "tags": ["credit-card-sb"] + "tags": ["algo"], + "colorPermutations": {} + }, + "attrs": [], + "properties": { + "order": 3, + "id": 1, + "name": "algo", + "prevSize": 32, + "code": 59705, + "codes": [59705, 59722] + }, + "setIdx": 0, + "setId": 4, + "iconIdx": 0 + }, + { + "icon": { + "paths": [ + "M1152 0h-1024c-71.040 0-127.36 56.96-127.36 128l-0.64 768c0 71.040 56.96 128 128 128h1024c71.040 0 128-56.96 128-128v-768c0-71.040-56.96-128-128-128zM1152 896h-1024v-384h1024v384zM1152 256h-1024v-128h1024v128z" + ], + "width": 1280, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": ["credit-card-sb"], + "grid": 0 }, "attrs": [], "properties": { "order": 2, - "id": 98, + "id": 0, "name": "credit-card-sb", "prevSize": 32, "code": 59694 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 0 }, @@ -29,18 +57,20 @@ "M610.498 40.617l235.518 236.159-332.798 165.121-330.88-165.121 236.16-236.159c12.469-12.851 27.39-23.068 43.88-30.045s34.214-10.572 52.12-10.572c17.906 0 35.629 3.595 52.119 10.572s31.412 17.194 43.881 30.045zM87.617 372.137l-46.719 46.72c-12.931 12.422-23.219 27.329-30.247 43.826s-10.65 34.243-10.65 52.174c0 17.931 3.623 35.678 10.65 52.174s17.316 31.403 30.247 43.826l376.383 380.095c8.921 9.128 19.304 16.696 30.72 22.4v-460.735l-360.383-180.48zM936.384 372.137l46.72 46.72c12.928 12.422 23.216 27.329 30.248 43.826 7.024 16.497 10.648 34.243 10.648 52.174s-3.624 35.678-10.648 52.174c-7.032 16.497-17.32 31.403-30.248 43.826l-376.384 380.095c-8.921 9.128-19.304 16.696-30.72 22.4v-460.735l360.384-180.48z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["logo-diamond"], "grid": 0 }, "attrs": [], "properties": { "order": 15, - "id": 0, + "id": 1, "name": "blockchain-logo", "prevSize": 32, "code": 59673 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 1 }, @@ -50,18 +80,20 @@ "M511.999 37.926c-261.689 0-474.074 212.385-474.074 474.074s212.385 474.072 474.074 474.072c261.689 0 474.073-212.383 474.073-474.072s-212.383-474.074-474.073-474.074zM749.039 559.408h-189.632v189.631h-94.814v-189.631h-189.63v-94.815h189.63v-189.629h94.814v189.629h189.632v94.815z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["plus-in-circle-filled"], "grid": 0 }, "attrs": [], "properties": { "order": 14, - "id": 1, + "id": 2, "name": "plus-in-circle-filled", "prevSize": 32, "code": 59693 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 2 }, @@ -73,18 +105,20 @@ "M512 1024c282.769 0 512-229.231 512-512s-229.231-512-512-512c-282.77 0-512 229.23-512 512s229.23 512 512 512zM256 362.667c0-58.91 47.756-106.667 106.667-106.667s106.667 47.756 106.667 106.667c0 58.91-47.756 106.667-106.667 106.667s-106.667-47.756-106.667-106.667zM554.667 661.333c0-58.91 47.757-106.667 106.667-106.667s106.667 47.757 106.667 106.667c0 58.91-47.757 106.667-106.667 106.667s-106.667-47.757-106.667-106.667zM768 307.2l-460.8 460.8-51.2-51.2 460.8-460.8 51.2 51.2z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["percentage"], "grid": 0 }, "attrs": [], "properties": { "order": 8, - "id": 2, + "id": 3, "name": "percentage", "prevSize": 32, "code": 59692 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 3 }, @@ -95,18 +129,20 @@ ], "width": 1920, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["key"], "grid": 0 }, "attrs": [], "properties": { "order": 7, - "id": 3, + "id": 4, "name": "key", "prevSize": 32, "code": 59691 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 4 }, @@ -116,18 +152,20 @@ "M512 1024c282.769 0 512-229.231 512-512s-229.231-512-512-512c-282.77 0-512 229.23-512 512s229.23 512 512 512zM198.693 540.028l90.51-90.513 128 128 336.159-336.155 90.509 90.51-426.668 426.668-218.51-218.509z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["checkmark-circle-filled"], "grid": 0 }, "attrs": [], "properties": { "order": 6, - "id": 4, + "id": 5, "name": "checkmark-circle-filled", "prevSize": 32, "code": 59690 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 5 }, @@ -137,18 +175,20 @@ "M819.802 310.857h-571.802c-13.26 0-24-11.251-24-25.143s10.74-25.143 24-25.143h576c13.261 0 24-11.251 24-25.143 0-41.659-32.235-75.429-72-75.429h-552c-53.025 0-96 45.021-96 100.571v502.859c0 55.548 42.975 100.57 96 100.57h595.802c42.027 0 76.198-33.835 76.198-75.43v-402.284c0-41.596-34.172-75.429-76.198-75.429zM752 637.713c-26.505 0-48-22.519-48-50.283 0-27.767 21.495-50.287 48-50.287s48 22.519 48 50.287c0 27.763-21.495 50.283-48 50.283z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["Icon-Wallet"], "grid": 0 }, "attrs": [], "properties": { "order": 5, - "id": 5, + "id": 6, "name": "wallet-filled", "prevSize": 32, "code": 59689 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 6 }, @@ -158,18 +198,20 @@ "M512 1024c282.771 0 512-229.229 512-512 0-282.77-229.229-512-512-512-282.77 0-512 229.23-512 512 0 282.771 229.23 512 512 512zM473.6 266.531v-74.531h76.8v73.125c87.846 10.872 145.235 64.766 146.762 137.611h-87.206c-4.643-41.11-40.307-65.443-94.291-65.443-56.672 0-90.381 26.698-90.627 63.078-0.486 40.4 43.971 57.174 85.008 66.624l46.902 11.341c75.235 17.245 146.81 55.517 147.053 139.386-0.218 76.304-55.968 130.669-153.6 141.277v73.002h-76.8v-73.491c-92.893-11.408-150.381-63.421-153.6-147.875h89.162c3.664 50.794 47.632 75.363 104.304 75.363 59.114 0 99.664-27.642 99.907-68.982-0.243-37.565-35.907-53.866-89.891-67.098l-56.915-14.173c-82.323-20.554-133.376-60.48-133.376-129.939-0.208-73.296 57.718-125.77 140.41-139.274z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["usd-d"], "grid": 0 }, "attrs": [], "properties": { "order": 4, - "id": 6, + "id": 7, "name": "usd-d", "prevSize": 32, "code": 59720 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 7 }, @@ -180,18 +222,20 @@ ], "width": 3584, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["Vector"], "grid": 0 }, "attrs": [], "properties": { "order": 2, - "id": 7, + "id": 8, "name": "ellipsis", "prevSize": 32, "code": 59719 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 8 }, @@ -201,18 +245,20 @@ "M0 438.857h438.857v-438.857h-438.857v438.857zM73.143 73.143h292.572v292.572h-292.572v-292.572zM585.142 0v438.857h438.858v-438.857h-438.858zM950.858 365.714h-292.574v-292.572h292.574v292.572zM0 1024h438.857v-438.858h-438.857v438.858zM73.143 658.284h292.572v292.574h-292.572v-292.574zM146.286 146.286h146.286v146.286h-146.286v-146.286zM877.716 292.572h-146.29v-146.286h146.29v146.286zM146.286 731.426h146.286v146.29h-146.286v-146.29zM950.858 585.142h73.142v292.574h-292.574v-73.142h-73.142v219.426h-73.142v-438.858h219.432v73.142h146.284v-73.142zM950.858 950.858h73.142v73.142h-73.142v-73.142zM804.574 950.858h73.142v73.142h-73.142v-73.142z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["Vector"], "grid": 0 }, "attrs": [], "properties": { "order": 2, - "id": 8, + "id": 9, "name": "qr-code", "prevSize": 32, "code": 59718 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 9 }, @@ -223,18 +269,20 @@ ], "width": 975, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["Vector"], "grid": 0 }, "attrs": [], "properties": { "order": 2, - "id": 9, + "id": 10, "name": "timer", "prevSize": 32, "code": 59717 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 10 }, @@ -244,18 +292,20 @@ "M460.8 0v1024c-259.584-25.6-460.8-245.248-460.8-512s201.216-486.4 460.8-512zM564.736 0v460.288h459.264c-24.064-242.688-217.088-436.224-459.264-460.288zM564.736 563.712v460.288c242.688-24.064 435.2-217.6 459.264-460.288h-459.264z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["Vector"], "grid": 0 }, "attrs": [], "properties": { "order": 2, - "id": 10, + "id": 11, "name": "borrow", "prevSize": 32, "code": 59716 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 11 }, @@ -266,18 +316,20 @@ ], "width": 843, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["download"], "grid": 0 }, "attrs": [], "properties": { "order": 329, - "id": 11, + "id": 12, "name": "download", "prevSize": 32, "code": 59665 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 12 }, @@ -287,18 +339,20 @@ "M670.015 585.313c43.816-60.83 69.541-135.348 69.541-215.535 0-204.231-165.547-369.778-369.778-369.778s-369.778 165.547-369.778 369.778c0 204.231 165.547 369.778 369.778 369.778 80.166 0 154.666-25.714 215.489-69.513l324.955 324.944 84.764-84.764-324.972-324.91zM369.778 625.778c-141.653 0-256-114.347-256-256s114.347-256 256-256c141.653 0 256 114.347 256 256s-114.347 256-256 256z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["magnifier"], "grid": 0 }, "attrs": [], "properties": { "order": 328, - "id": 12, + "id": 13, "name": "magnifier", "prevSize": 32, "code": 59715 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 13 }, @@ -308,18 +362,20 @@ "M695.253 670.080l60.16-60.16-256-256-256.002 256 60.16 60.16 195.842-195.413 195.84 195.413z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["chevron-up"], "grid": 0 }, "attrs": [], "properties": { "order": 327, - "id": 13, + "id": 14, "name": "chevron-up", "prevSize": 32, "code": 59703 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 14 }, @@ -329,18 +385,20 @@ "M890.598 666.735l-74.526 74.53-309.474-309.474-309.472 309.474-74.527-74.53 384-383.998 384 383.998z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["chevron-up-large"], "grid": 0 }, "attrs": [], "properties": { "order": 326, - "id": 14, + "id": 15, "name": "chevron-up-large", "prevSize": 32, "code": 59704 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 15 }, @@ -350,18 +408,20 @@ "M426.665 256l-60.16 60.16 195.415 195.84-195.415 195.84 60.16 60.16 256.001-256-256.001-256z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["chevron-right"], "grid": 0 }, "attrs": [], "properties": { "order": 325, - "id": 15, + "id": 16, "name": "chevron-right", "prevSize": 32, "code": 59706 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 16 }, @@ -371,18 +431,20 @@ "M351.865 128l-74.527 74.527 309.474 309.473-309.474 309.474 74.527 74.526 383.999-384-383.999-384z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["chevron-right-large"], "grid": 0 }, "attrs": [], "properties": { "order": 324, - "id": 16, + "id": 17, "name": "chevron-right-large", "prevSize": 32, "code": 59707 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 17 }, @@ -392,18 +454,20 @@ "M657.493 316.16l-60.16-60.16-256 256 256 256 60.16-60.16-195.413-195.84 195.413-195.84z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["chevron-left"], "grid": 0 }, "attrs": [], "properties": { "order": 323, - "id": 17, + "id": 18, "name": "chevron-left", "prevSize": 32, "code": 59708 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 18 }, @@ -413,18 +477,20 @@ "M661.333 128l74.526 74.527-309.472 309.473 309.472 309.474-74.526 74.526-384-384 384-384z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["chevron-left-large"], "grid": 0 }, "attrs": [], "properties": { "order": 322, - "id": 18, + "id": 19, "name": "chevron-left-large", "prevSize": 32, "code": 59710 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 19 }, @@ -434,18 +500,20 @@ "M780.582 414.080l-60.16-60.16-195.84 195.413-195.839-195.413-60.16 60.16 255.999 256 256-256z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["chevron-down"], "grid": 0 }, "attrs": [], "properties": { "order": 321, - "id": 19, + "id": 20, "name": "chevron-down", "prevSize": 32, "code": 59711 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 20 }, @@ -455,18 +523,20 @@ "M890.598 357.263l-74.526-74.527-309.474 309.472-309.472-309.472-74.527 74.527 384 384.002 384-384.002z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["chevron-down-large"], "grid": 0 }, "attrs": [], "properties": { "order": 320, - "id": 20, + "id": 21, "name": "chevron-down-large", "prevSize": 32, "code": 59712 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 21 }, @@ -476,18 +546,20 @@ "M512 938.667c235.639 0 426.667-191.027 426.667-426.667 0-235.642-191.027-426.667-426.667-426.667-235.642 0-426.667 191.025-426.667 426.667 0 235.639 191.025 426.667 426.667 426.667zM722.88 466.88l45.12 45.12-256 256-256-256 45.44-45.44 178.56 178.88v-389.44h64v389.44l178.88-178.56z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["arrow-down-circle (1)"], "grid": 0 }, "attrs": [], "properties": { "order": 302, - "id": 21, + "id": 22, "name": "arrow-down-circle", "prevSize": 32, "code": 59701 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 22 }, @@ -497,18 +569,20 @@ "M512 938.667c235.639 0 426.667-191.027 426.667-426.667 0-235.642-191.027-426.667-426.667-426.667-235.642 0-426.667 191.025-426.667 426.667 0 235.639 191.025 426.667 426.667 426.667zM301.12 557.12l-45.12-45.12 256-256 256 256-45.44 45.44-178.56-178.88v389.44h-64v-389.44l-178.88 178.56z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["arrow-up-circle (1)"], "grid": 0 }, "attrs": [], "properties": { "order": 303, - "id": 22, + "id": 23, "name": "arrow-up-circle", "prevSize": 32, "code": 59702 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 23 }, @@ -518,18 +592,20 @@ "M853.333 512l-60.16 60.16-238.507-238.080v519.253h-85.333v-519.253l-238.080 238.507-60.587-60.587 341.333-341.333 341.333 341.333z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["arrow-up"], "grid": 0 }, "attrs": [], "properties": { "order": 203, - "id": 23, + "id": 24, "name": "arrow-up", "prevSize": 32, "code": 59676 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 24 }, @@ -539,18 +615,20 @@ "M853.333 512l-60.16-60.16-238.507 238.080v-519.253h-85.333v519.253l-238.080-238.507-60.587 60.587 341.333 341.333 341.333-341.333z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["arrow-down"], "grid": 0 }, "attrs": [], "properties": { "order": 204, - "id": 24, + "id": 25, "name": "arrow-down", "prevSize": 32, "code": 59677 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 25 }, @@ -560,18 +638,20 @@ "M853.333 469.333h-519.253l238.507-238.507-60.587-60.16-341.333 341.333 341.333 341.333 60.16-60.16-238.080-238.507h519.253v-85.333z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["arrow-left"], "grid": 0 }, "attrs": [], "properties": { "order": 199, - "id": 25, + "id": 26, "name": "arrow-left", "prevSize": 32, "code": 59663 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 26 }, @@ -581,18 +661,20 @@ "M512 170.667l-60.16 60.16 238.080 238.507h-519.253v85.333h519.253l-238.080 238.507 60.16 60.16 341.333-341.333-341.333-341.333z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["arrow-right"], "grid": 0 }, "attrs": [], "properties": { "order": 200, - "id": 26, + "id": 27, "name": "arrow-right", "prevSize": 32, "code": 59687 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 27 }, @@ -602,18 +684,20 @@ "M512 85.334c-235.947 0-426.667 190.72-426.667 426.666s190.72 426.667 426.667 426.667c235.947 0 426.667-190.72 426.667-426.667s-190.72-426.666-426.667-426.666zM725.333 665.173l-60.16 60.16-153.173-153.173-153.173 153.173-60.16-60.16 153.173-153.173-153.173-153.172 60.16-60.16 153.173 153.172 153.173-153.172 60.16 60.16-153.173 153.172 153.173 153.173z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["close-circle"], "grid": 0 }, "attrs": [], "properties": { "order": 196, - "id": 27, + "id": 28, "name": "close-circle", "prevSize": 32, "code": 59651 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 28 }, @@ -623,18 +707,20 @@ "M853.333 239.421l-68.753-68.754-272.58 272.58-272.579-272.58-68.754 68.754 272.58 272.579-272.58 272.58 68.754 68.753 272.579-272.58 272.58 272.58 68.753-68.753-272.58-272.58 272.58-272.579z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["close"], "grid": 0 }, "attrs": [], "properties": { "order": 195, - "id": 28, + "id": 29, "name": "close", "prevSize": 32, "code": 59661 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 29 }, @@ -645,18 +731,20 @@ ], "width": 2987, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["bitpay"], "grid": 0 }, "attrs": [], "properties": { "order": 3, - "id": 29, + "id": 30, "name": "bitpay-logo", "prevSize": 32, "code": 59684 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 30 }, @@ -666,18 +754,20 @@ "M853.334 170.666h-682.665c-46.933 0-84.907 38.4-84.907 85.333l-0.427 512.001c0 46.931 38.4 85.331 85.333 85.331h682.665c46.934 0 85.334-38.4 85.334-85.331v-512.001c0-46.933-38.4-85.333-85.334-85.333zM853.334 341.331l-341.331 213.334-341.334-213.334v-85.332l341.334 213.332 341.331-213.332v85.332z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["email"], "grid": 0 }, "attrs": [], "properties": { "order": 6, - "id": 30, + "id": 31, "name": "email", "prevSize": 32, "code": 59700 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 31 }, @@ -695,6 +785,8 @@ "strokeWidth": 37.9259 } ], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["exchange-logo"], "grid": 0 }, @@ -708,12 +800,12 @@ ], "properties": { "order": 18, - "id": 31, + "id": 32, "name": "line-graph-up", "prevSize": 32, "code": 59699 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 32 }, @@ -723,18 +815,20 @@ "M12.633 92.598c-12.633 29.193-12.633 66.42-12.633 140.874l0 278.528 0 278.528c0 74.454-0 111.68 12.633 140.874 15.516 35.856 44.111 64.451 79.965 79.965 29.193 12.634 66.42 12.634 140.874 12.634h557.056c74.454 0 111.68 0 140.874-12.634 35.856-15.514 64.451-44.109 79.965-79.965 12.634-29.194 12.634-66.419 12.634-140.874v-557.056c0-74.454 0-111.681-12.634-140.874-15.514-35.854-44.109-64.45-79.965-79.965-29.194-12.633-66.419-12.633-140.874-12.633l-557.056 0c-74.454 0-113.472 0-140.874 12.633-35.854 15.516-64.449 44.111-79.965 79.965zM675.469 441.142c-51.101 0-92.538-41.434-92.538-92.547 0-51.086 41.437-92.52 92.538-92.52s92.538 41.434 92.538 92.52c0 51.114-41.437 92.547-92.538 92.547zM440.992 348.589c0 51.078-41.414 92.493-92.506 92.493-51.064 0-92.48-41.414-92.48-92.493 0-51.080 41.416-92.497 92.48-92.497 51.091 0 92.506 41.417 92.506 92.497zM675.478 583.219c-51.114 0-92.547 41.434-92.547 92.538 0 51.098 41.434 92.534 92.547 92.534 51.088 0 92.522-41.437 92.522-92.534 0-51.104-41.434-92.538-92.522-92.538zM348.493 583.309c51.078 0 92.496 41.414 92.496 92.506 0 51.062-41.418 92.477-92.496 92.477-51.076 0-92.493-41.414-92.493-92.477 0-51.091 41.417-92.506 92.493-92.506z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["logo-stx"], "grid": 0 }, "attrs": [], "properties": { "order": 3, - "id": 32, + "id": 33, "name": "stx", "prevSize": 32, "code": 59698 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 33 }, @@ -746,18 +840,20 @@ ], "width": 768, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["Vector"], "grid": 0 }, "attrs": [], "properties": { "order": 2, - "id": 33, + "id": 34, "name": "parachute", "prevSize": 32, "code": 59697 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 34 }, @@ -768,18 +864,20 @@ "M832 375.386l-640 325.958v55.264l539.651-274.97c1.261 9.661 1.891 19.392 1.894 29.136-0.022 38.666-10.16 76.653-29.402 110.189-19.245 33.536-46.925 61.456-80.291 80.989-33.37 19.533-71.267 29.997-109.933 30.358-38.662 0.358-76.749-9.402-110.474-28.314l-2.707 1.437-47.818 24.368c40.397 29.328 88.115 46.918 137.885 50.826 49.766 3.91 99.645-6.019 144.125-28.682 44.48-22.666 81.83-57.184 107.92-99.744 26.090-42.563 39.907-91.507 39.923-141.427 0-6.96-0.272-13.92-0.787-20.797-0.73-9.683 1.414-19.37 6.17-27.84 4.755-8.467 11.907-15.344 20.557-19.76l23.286-11.862v-55.13z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["logo-xlm"], "grid": 0 }, "attrs": [], "properties": { "order": 188, - "id": 34, + "id": 35, "name": "xlm", "prevSize": 32, "code": 59696 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 35 }, @@ -789,18 +887,20 @@ "M903.177 407.704c-217.705-173.827-360.934-355.556-391.489-407.704-30.556 52.148-173.785 233.876-391.491 407.704-145.139 126.42-162.326 292.345-32.466 395.062 124.132 101.136 273.090 30.025 359.026-25.284-1.91 36.346-17.187 143.803-137.499 246.519h408.679c-122.222-102.716-137.499-211.753-137.499-246.519 84.027 55.309 232.985 126.42 359.023 25.284 126.046-102.717 108.86-270.223-36.284-395.062z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["icon-spade"], "grid": 0 }, "attrs": [], "properties": { "order": 2, - "id": 35, + "id": 36, "name": "spade", "prevSize": 32, "code": 59695 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 36 }, @@ -811,18 +911,20 @@ ], "width": 640, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["lightning-bolt"], "grid": 0 }, "attrs": [], "properties": { "order": 5, - "id": 36, + "id": 37, "name": "lightning-bolt", "prevSize": 32, "code": 59681 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 37 }, @@ -833,18 +935,20 @@ ], "width": 1229, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["users"], "grid": 0 }, "attrs": [], "properties": { "order": 2, - "id": 37, + "id": 38, "name": "users", "prevSize": 32, "code": 59688 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 38 }, @@ -855,18 +959,20 @@ ], "width": 896, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["Vector"], "grid": 0 }, "attrs": [], "properties": { "order": 2, - "id": 38, + "id": 39, "name": "copy-clipboard", "prevSize": 32, "code": 59667 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 39 }, @@ -876,18 +982,20 @@ "M445.331 85.35h133.331c22.17 0 40.003 17.833 40.003 40v280h146.166c29.665 0 44.503 35.833 23.501 56.834l-253.501 253.664c-12.498 12.503-32.999 12.503-45.499 0l-253.833-253.664c-21-21-6.167-56.834 23.5-56.834h146.334v-280c0-22.167 17.833-40 40-40zM938.665 712.018v186.665c0 22.17-17.833 40.003-40.003 40.003h-773.331c-22.167 0-40-17.833-40-40.003v-186.665c0-22.17 17.833-40.003 40-40.003h244.5l81.667 81.669c33.5 33.5 87.5 33.5 121 0l81.669-81.669h244.495c22.17 0 40.003 17.833 40.003 40.003z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["icon-request"], "grid": 0 }, "attrs": [], "properties": { "order": 187, - "id": 39, + "id": 40, "name": "request", "prevSize": 32, "code": 59666 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 40 }, @@ -897,18 +1005,20 @@ "M878.735 90.734l-772.585 445.576c-30.17 17.331-26.336 59.32 3.667 71.987l177.185 74.317 478.883-421.915c9.17-8.165 22.17 4.333 14.336 13.831l-401.542 489.067v134.139c0 39.327 47.505 54.825 70.841 26.332l105.846-128.809 207.688 86.984c23.67 9.994 50.673-4.833 55.004-30.331l120.013-719.853c5.668-33.66-30.5-57.989-59.336-41.325z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["icon-send"], "grid": 0 }, "attrs": [], "properties": { "order": 186, - "id": 40, + "id": 41, "name": "send", "prevSize": 32, "code": 59685 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 41 }, @@ -918,18 +1028,20 @@ "M512 128c-211.968 0-384 172.032-384 384s172.032 384 384 384c211.968 0 384-172.032 384-384s-172.032-384-384-384zM550.4 780.8h-76.8v-76.8h76.8v76.8zM629.888 483.2l-34.56 35.328c-27.648 28.032-44.928 51.072-44.928 108.672h-76.8v-19.2c0-42.24 17.28-80.64 44.928-108.672l47.616-48.384c14.208-13.824 22.656-33.024 22.656-54.144 0-42.24-34.56-76.8-76.8-76.8s-76.8 34.56-76.8 76.8h-76.8c0-84.864 68.736-153.6 153.6-153.6s153.6 68.736 153.6 153.6c0 33.792-13.824 64.512-35.712 86.4z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["ios-icon-question"], "grid": 0 }, "attrs": [], "properties": { "order": 6, - "id": 41, + "id": 42, "name": "question-in-circle-filled", "prevSize": 32, "code": 59657 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 42 }, @@ -939,18 +1051,20 @@ "M753.058 270.933c-61.867-61.867-146.773-100.267-241.067-100.267-188.588 0-340.908 152.747-340.908 341.333s152.32 341.333 340.908 341.333c159.147 0 291.84-108.8 329.813-256h-88.747c-34.987 99.413-129.707 170.667-241.067 170.667-141.228 0-256.001-114.773-256.001-256s114.773-256 256.001-256c70.827 0 133.973 29.44 180.053 75.947l-137.387 137.387h298.667v-298.667l-100.267 100.267z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["Icon-Refresh"], "grid": 0 }, "attrs": [], "properties": { "order": 5, - "id": 42, + "id": 43, "name": "refresh", "prevSize": 32, "code": 59658 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 43 }, @@ -960,18 +1074,20 @@ "M512 938.667c46.933 0 85.333-38.4 85.333-85.333h-170.667c0 46.933 37.973 85.333 85.333 85.333zM768 682.667v-213.333c0-130.987-69.973-240.64-192-269.653v-29.013c0-35.413-28.587-64-64-64s-64 28.587-64 64v29.013c-122.453 29.013-192 138.24-192 269.653v213.333l-85.333 85.333v42.667h682.667v-42.667l-85.333-85.333z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["Icon-Bell"], "grid": 0 }, "attrs": [], "properties": { "order": 4, - "id": 43, + "id": 44, "name": "bell", "prevSize": 32, "code": 59660 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 44 }, @@ -981,18 +1097,20 @@ "M512 42.667l-384 170.667v256c0 236.8 163.84 458.24 384 512 220.16-53.76 384-275.2 384-512v-256l-384-170.667zM512 511.573h298.667c-22.613 175.787-139.947 332.373-298.667 381.44v-381.013h-298.667v-243.2l298.667-132.693v375.467z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["Icon-Shield"], "grid": 0 }, "attrs": [], "properties": { "order": 4, - "id": 44, + "id": 45, "name": "shield", "prevSize": 32, "code": 59656 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 45 }, @@ -1002,18 +1120,20 @@ "M512 0c-281.6 0-512 230.4-512 512s230.4 512 512 512c281.6 0 512-230.4 512-512s-230.4-512-512-512zM832 432l-22.4 12.8c-9.6 3.2-16 12.8-19.2 19.2-3.2 9.6-6.4 19.2-6.4 28.8 0 6.4 0 12.8 0 19.2 0 51.2-12.8 99.2-38.4 140.8s-64 76.8-108.8 99.2c-44.8 22.4-92.8 32-144 28.8s-96-22.4-137.6-51.2l48-25.6h3.2c35.2 19.2 70.4 28.8 112 28.8 38.4 0 76.8-9.6 108.8-28.8s60.8-48 80-80c19.2-32 28.8-70.4 28.8-108.8 0-9.6 0-19.2-3.2-28.8l-451.2 224-89.6 44.8v-54.4l134.4-67.2 505.6-256v54.4zM832 320l-89.6 48-44.8 22.4-393.6 198.4-22.4 9.6-22.4 12.8-67.2 35.2v-54.4l22.4-12.8c9.6-3.2 16-12.8 22.4-19.2s6.4-19.2 6.4-28.8c0-6.4 0-12.8 0-19.2 0-51.2 12.8-99.2 38.4-140.8s64-76.8 108.8-99.2 92.8-32 144-28.8 96 22.4 137.6 51.2l-51.2 25.6c-35.2-22.4-73.6-32-112-32s-76.8 9.6-108.8 32c-32 19.2-60.8 48-80 80s-28.8 73.6-28.8 112c0 9.6 0 19.2 3.2 28.8l371.2-188.8 76.8-38.4 89.6-48v54.4z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["icon_xlm"], "grid": 0 }, "attrs": [], "properties": { "order": 5, - "id": 45, + "id": 46, "name": "xlm-circle-filled", "prevSize": 32, "code": 59679 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 46 }, @@ -1023,18 +1143,20 @@ "M298.667 768c-46.933 0-84.907 38.4-84.907 85.333s37.973 85.333 84.907 85.333c46.933 0 85.333-38.4 85.333-85.333s-38.4-85.333-85.333-85.333zM42.667 85.333v85.333h85.333l153.6 323.84-57.6 104.533c-6.827 11.947-10.667 26.027-10.667 40.96 0 46.933 38.4 85.333 85.333 85.333h512v-85.333h-494.080c-5.973 0-10.667-4.693-10.667-10.667l1.28-5.12 38.4-69.547h317.867c32 0 60.16-17.493 74.667-43.947l152.747-276.907c3.413-5.973 5.12-13.227 5.12-20.48 0-23.467-19.2-42.667-42.667-42.667h-631.040l-40.107-85.333h-139.52zM725.333 768c-46.933 0-84.907 38.4-84.907 85.333s37.973 85.333 84.907 85.333c46.933 0 85.333-38.4 85.333-85.333s-38.4-85.333-85.333-85.333z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["Icon-Shopping"], "grid": 0 }, "attrs": [], "properties": { "order": 3, - "id": 46, + "id": 47, "name": "cart-filled", "prevSize": 32, "code": 59680 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 47 }, @@ -1045,18 +1167,20 @@ "M626.918 560.179v130.633c0 21.717-17.472 39.189-39.189 39.189h-274.326v143.202c0 29.065-35.107 43.597-55.681 23.023l-248.524-248.363c-12.247-12.245-12.247-32.329 0-44.574l248.525-248.689c20.574-20.574 55.681-6.042 55.681 23.024v143.366h274.326c21.717 0 39.189 17.472 39.189 39.189z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["ios-icon-Swap"], "grid": 0 }, "attrs": [], "properties": { "order": 4, - "id": 47, + "id": 48, "name": "arrow-switch-thick", "prevSize": 32, "code": 59682 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 48 }, @@ -1067,18 +1191,20 @@ ], "width": 931, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["Exclude"], "grid": 0 }, "attrs": [], "properties": { "order": 4, - "id": 48, + "id": 49, "name": "hardware", "prevSize": 32, "code": 59678 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 49 }, @@ -1089,18 +1215,20 @@ ], "width": 1247, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["Shape (1)"], "grid": 0 }, "attrs": [], "properties": { "order": 3, - "id": 49, + "id": 50, "name": "twitter", "prevSize": 32, "code": 59670 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 50 }, @@ -1110,18 +1238,20 @@ "M985.143 0h-943.427c-22.463 0-41.716 19.2-41.716 41.6v937.6c0 25.6 19.254 44.8 41.716 44.8h503.803v-384h-128.358v-160h128.358v-128c0-131.2 83.43-198.4 202.163-198.4 57.758 0 105.894 6.4 118.729 6.4v137.6h-83.43c-64.179 0-80.226 32-80.226 76.8v105.6h160.448l-32.090 160h-128.358l3.209 384h275.968c22.464 0 41.719-19.2 41.719-41.6v-940.8c3.209-22.4-16.047-41.6-38.507-41.6z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["Shape"], "grid": 0 }, "attrs": [], "properties": { "order": 4, - "id": 50, + "id": 51, "name": "facebook", "prevSize": 32, "code": 59672 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 51 }, @@ -1132,18 +1262,20 @@ ], "width": 2048, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["Vector"], "grid": 0 }, "attrs": [], "properties": { "order": 2, - "id": 51, + "id": 52, "name": "copy", "prevSize": 32, "code": 59674 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 52 }, @@ -1153,18 +1285,20 @@ "M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM641.887 435.541c27.906-26.006 39.932-61.178 21.15-108.648-25.555-64.904-89.592-70.756-164.169-56.267l-26.547-92.584-56.357 16.169 25.85 90.143c-14.816 4.25-29.877 8.887-44.835 13.503l-26.008-90.742-56.33 16.152 26.518 92.562c-12.132 3.749-24.050 7.412-35.73 10.77l-0.091-0.286-77.743 22.266 17.272 60.184c0 0 41.393-12.729 40.921-11.766 22.831-6.54 34.060 4.582 39.499 15.397l30.245 105.47c1.577-0.443 3.651-0.967 6.069-1.315-0.603 0.175-1.221 0.351-1.851 0.53-1.325 0.38-2.702 0.772-4.1 1.185l42.348 147.759c1.057 7.471 0.118 20.137-15.823 24.739 0.904 0.431-40.972 11.737-40.972 11.737l8.097 70.514 73.344-21.037c8.178-2.334 16.299-4.569 24.336-6.78 5.382-1.481 10.724-2.952 16.022-4.435l26.87 93.629 56.3-16.136-26.565-92.646c15.092-3.998 30.141-8.159 45.145-12.481l26.417 92.227 56.355-16.169-26.782-93.475c93.194-32.608 152.669-75.496 135.392-166.827-13.891-73.549-56.761-95.848-114.249-93.34zM479.557 528.827c46.964-14.677 143.216-44.757 162.036 20.896 18.434 64.191-82.82 91.713-129.152 104.306-4.171 1.134-7.895 2.146-11.047 3.054l-35.556-124.067c3.84-1.101 8.472-2.548 13.72-4.189zM428.794 360.17c39.136-12.355 119.278-37.656 136.401 22.034 16.717 58.362-67.655 81.065-106.336 91.473-3.517 0.947-6.656 1.792-9.307 2.552l-32.258-112.52c3.216-0.924 7.097-2.148 11.5-3.539z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["bch-circle-filled"], "grid": 0 }, "attrs": [], "properties": { "order": 2, - "id": 52, + "id": 53, "name": "bch-circle-filled", "prevSize": 32, "code": 59653 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 53 }, @@ -1174,18 +1308,20 @@ "M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM675.308 525.158c37.171-8.568 65.172-33.016 72.641-83.517 10.323-68.988-42.21-106.075-114.040-130.814l23.302-93.454-56.891-14.175-22.686 90.99c-14.956-3.728-30.318-7.243-45.58-10.724l22.847-91.589-56.86-14.176-23.316 93.42c-12.381-2.82-24.533-5.608-36.328-8.539l0.065-0.293-78.46-19.588-15.134 60.757c0 0 42.21 9.673 41.32 10.272 23.042 5.75 27.207 20.996 26.508 33.083l-26.541 106.463c1.589 0.406 3.647 0.989 5.914 1.896-0.608-0.152-1.231-0.307-1.865-0.467-1.339-0.335-2.727-0.683-4.147-1.024l-37.203 149.138c-2.82 6.999-9.966 17.497-26.073 13.513 0.567 0.825-41.352-10.321-41.352-10.321l-28.243 65.115 74.035 18.454c8.249 2.068 16.402 4.192 24.468 6.296 5.4 1.408 10.762 2.806 16.089 4.169l-23.542 94.523 56.826 14.175 23.316-93.517c15.071 4.084 30.182 8.005 45.338 11.764l-23.237 93.078 56.891 14.176 23.544-94.344c97.012 18.357 169.962 10.953 200.667-76.78 24.743-70.64-1.231-111.388-52.273-137.958zM488.084 524.782c48.012 10.772 146.408 32.847 129.881 99.113-16.13 64.807-117.581 38.016-164.003 25.758-4.177-1.105-7.908-2.089-11.093-2.881l31.242-125.223c3.875 0.967 8.609 2.030 13.974 3.233zM528.451 353.339c40.072 8.869 122.126 27.030 107.11 87.282-14.706 58.902-99.123 36.378-137.828 26.051-3.517-0.939-6.658-1.778-9.334-2.444l28.323-113.575c3.245 0.809 7.221 1.69 11.729 2.686z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["btc-circle-filled"], "grid": 0 }, "attrs": [], "properties": { "order": 3, - "id": 53, + "id": 54, "name": "btc-circle-filled", "prevSize": 32, "code": 59654 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 54 }, @@ -1195,18 +1331,20 @@ "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512s229.23 512 512 512zM512.437 609.967c-0.232 0.124-0.512 0.124-0.746 0l-193.026-103.558c-0.382-0.207-0.528-0.683-0.321-1.067l193.044-325.013c0.221-0.374 0.705-0.497 1.079-0.275 0.112 0.067 0.207 0.162 0.274 0.275l192.9 324.983c0.223 0.374 0.098 0.857-0.276 1.079l-192.928 103.576zM511.342 842.876l-191.829-292.021c-0.154-0.232-0.171-0.528-0.049-0.776 0.189-0.392 0.662-0.555 1.052-0.364l191.484 93.2 191.484-93.2c0.25-0.122 0.545-0.102 0.778 0.049 0.362 0.24 0.465 0.729 0.224 1.091l-191.829 292.021c-0.032 0.049-0.069 0.095-0.112 0.136-0.033 0.033-0.073 0.063-0.112 0.091-0.364 0.238-0.853 0.138-1.091-0.226z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["eth-circle-filled"], "grid": 0 }, "attrs": [], "properties": { "order": 4, - "id": 54, + "id": 55, "name": "eth-circle-filled", "prevSize": 32, "code": 59655 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 55 }, @@ -1216,18 +1354,20 @@ "M512 0c92.648 0 177.981 23.162 256 69.486s140.19 108.495 186.514 186.514 69.486 163.352 69.486 256-23.162 177.981-69.486 256-108.495 140.19-186.514 186.514-163.352 69.486-256 69.486-177.981-23.162-256-69.486-140.19-108.495-186.514-186.514-69.486-163.352-69.486-256 23.162-177.981 69.486-256 108.495-140.19 186.514-186.514 163.352-69.486 256-69.486zM512 226.743c-23.162 0-43.886 8.533-60.952 25.6s-25.6 37.79-25.6 60.952 8.533 43.886 25.6 60.952 37.79 25.6 60.952 25.6 43.886-8.533 60.952-25.6c17.067-17.067 25.6-37.79 25.6-60.952s-8.533-43.886-25.6-60.952c-17.067-17.067-37.79-25.6-60.952-25.6zM627.81 750.933v-49.981c0-7.314-2.438-12.19-7.314-17.067s-10.971-7.314-17.067-7.314h-24.381v-206.019c0-7.314-2.438-12.19-7.314-17.067s-10.971-7.314-17.067-7.314h-134.095c-7.314 0-12.19 2.438-17.067 7.314s-7.314 10.971-7.314 17.067v49.981c0 7.314 2.438 12.19 7.314 17.067s10.971 7.314 17.067 7.314h24.381v131.657h-24.381c-7.314 0-12.19 2.438-17.067 7.314s-7.314 10.971-7.314 17.067v49.981c0 7.314 2.438 12.19 7.314 17.067s10.971 7.314 17.067 7.314h181.638c7.314 0 12.19-2.438 17.067-7.314 6.095-3.657 8.533-9.752 8.533-17.067z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["info"], "grid": 0 }, "attrs": [], "properties": { "order": 3, - "id": 55, + "id": 56, "name": "info", "prevSize": 32, "code": 59650 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 56 }, @@ -1237,18 +1377,20 @@ "M1000 16h-55.422c-13.478 0-24.314 11.096-23.994 24.572l4.694 197.15c-88.854-133.636-240.766-221.722-413.278-221.722-242.374 0-444.134 173.848-487.408 403.648-2.776 14.738 8.616 28.352 23.614 28.352h57.152c11.348 0 21.084-7.964 23.474-19.058 38.050-176.686 195.002-308.942 383.168-308.942 159.090 0 295.884 94.564 357.352 230.604l-252.78-6.018c-13.474-0.32-24.572 10.514-24.572 23.994v55.42c0 13.254 10.746 24 24 24h384c13.254 0 24-10.746 24-24v-384c0-13.254-10.746-24-24-24zM975.794 576h-57.152c-11.348 0-21.084 7.964-23.474 19.058-38.050 176.686-195.002 308.942-383.168 308.942-159.092 0-295.884-94.564-357.352-230.604l252.78 6.018c13.474 0.32 24.572-10.514 24.572-23.994v-55.42c0-13.254-10.746-24-24-24h-384c-13.254 0-24 10.746-24 24v384c0 13.254 10.746 24 24 24h55.422c13.478 0 24.314-11.096 23.994-24.572l-4.694-197.15c88.854 133.636 240.766 221.722 413.278 221.722 242.374 0 444.134-173.848 487.408-403.648 2.776-14.738-8.616-28.352-23.614-28.352z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["sync-regular"], "grid": 0 }, "attrs": [], "properties": { "order": 3, - "id": 56, + "id": 57, "name": "sync-regular", "prevSize": 32, "code": 59709 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 57 }, @@ -1259,18 +1401,20 @@ ], "width": 569, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["caret"], "grid": 0 }, "attrs": [], "properties": { "order": 4, - "id": 57, + "id": 58, "name": "caret", "prevSize": 32, "code": 59671 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 58 }, @@ -1280,18 +1424,20 @@ "M512 0c-282.771 0-512 229.229-512 512s229.229 512 512 512c282.771 0 512-229.229 512-512s-229.229-512-512-512zM803.966 220.034c151.073 151.071 159.071 386.686 32.958 546.818l-579.776-579.776c160.182-126.152 395.786-118.076 546.818 32.958zM220.034 803.966c-151.073-151.071-159.071-386.686-32.958-546.818l579.776 579.776c-160.182 126.152-395.786 118.076-546.818-32.958z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["forbidden"], "grid": 0 }, "attrs": [], "properties": { "order": 3, - "id": 58, + "id": 59, "name": "forbidden", "prevSize": 32, "code": 59652 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 59 }, @@ -1301,18 +1447,20 @@ "M512 0c-282.839 0-512 229.161-512 512s229.161 512 512 512c282.839 0 512-229.161 512-512s-229.161-512-512-512zM512 924.903c-228.129 0-412.903-184.774-412.903-412.903s184.774-412.903 412.903-412.903c228.129 0 412.903 184.774 412.903 412.903s-184.774 412.903-412.903 412.903zM639.587 709.368l-175.277-127.381c-6.4-4.748-10.116-12.181-10.116-20.026v-338.994c0-13.626 11.148-24.774 24.774-24.774h66.065c13.626 0 24.774 11.148 24.774 24.774v292.542l137.91 100.336c11.148 8.052 13.419 23.535 5.368 34.684l-38.813 53.471c-8.052 10.942-23.535 13.419-34.684 5.368z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["pending"], "grid": 0 }, "attrs": [], "properties": { "order": 2, - "id": 59, + "id": 60, "name": "pending", "prevSize": 32, "code": 59669 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 60 }, @@ -1322,18 +1470,20 @@ "M721.445 505.943l-208.974 112.189c-0.252 0.135-0.555 0.135-0.807 0l-209.112-112.189c-0.415-0.223-0.571-0.74-0.349-1.155 0.006-0.011 0.012-0.022 0.018-0.032l209.112-352.065c0.241-0.405 0.764-0.539 1.169-0.298 0.123 0.073 0.225 0.175 0.298 0.298l208.974 352.065c0.241 0.405 0.107 0.929-0.298 1.169-0.011 0.006-0.021 0.012-0.032 0.018zM303.471 554.094l207.814 316.356c0.259 0.394 0.788 0.503 1.182 0.245 0.097-0.064 0.181-0.147 0.245-0.245l207.814-316.356c0.259-0.394 0.149-0.923-0.245-1.182-0.251-0.165-0.571-0.186-0.842-0.054l-207.441 100.967-207.441-100.967c-0.424-0.206-0.934-0.030-1.141 0.394-0.132 0.271-0.111 0.59 0.054 0.842z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["eth"], "grid": 0 }, "attrs": [], "properties": { "order": 7, - "id": 60, + "id": 61, "name": "eth", "prevSize": 32, "code": 59771 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 61 }, @@ -1343,18 +1493,20 @@ "M778.725 432.464c-8.444 57.089-40.097 84.725-82.116 94.41 57.699 30.037 87.063 76.099 59.091 155.954-34.709 99.177-117.175 107.547-226.84 86.795l-26.615 106.649-64.311-16.025 26.268-105.219c-17.131-4.248-34.216-8.681-51.252-13.298l-26.357 105.716-64.238-16.025 26.615-106.85c-15.019-3.845-30.278-7.929-45.847-11.83l-83.693-20.861 31.928-73.608c0 0 47.386 12.601 46.745 11.667 18.207 4.504 26.284-7.364 29.472-15.276l42.057-168.59c2.363 0.567 4.653 1.153 6.797 1.685-2.564-1.026-4.89-1.685-6.686-2.143l30.004-120.349c0.789-13.662-3.918-30.897-29.966-37.399 1.007-0.676-46.71-11.611-46.71-11.611l17.108-68.681 88.693 22.144-0.073 0.331c13.334 3.313 27.071 6.464 41.066 9.652l26.357-105.605 64.276 16.025-25.828 103.534c17.254 3.937 34.619 7.91 51.526 12.124l25.644-102.859 64.311 16.025-26.341 105.643c81.199 27.967 140.583 69.891 128.916 147.876zM631.785 638.491c20.771-83.279-119.026-104.818-162.618-115.696l-35.317 141.557c43.595 10.824 178.060 53.993 197.935-25.861zM651.676 431.311c18.885-75.771-98.033-92.656-134.34-101.703l-32.017 128.389c36.304 9.047 148.224 45.951 166.357-26.686z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["btc"], "grid": 0 }, "attrs": [], "properties": { "order": 8, - "id": 61, + "id": 62, "name": "btc", "prevSize": 32, "code": 59772 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 62 }, @@ -1364,18 +1516,20 @@ "M704.998 302.749c21.232 53.663 7.637 93.423-23.91 122.82 64.987-2.837 113.448 22.373 129.151 105.515 19.529 103.244-47.703 151.726-153.051 188.587l30.275 105.668-63.708 18.277-29.861-104.257c-16.96 4.887-33.973 9.59-51.035 14.11l30.032 104.731-63.645 18.241-30.376-105.842c-14.929 4.179-30.186 8.273-45.62 12.678l-82.91 23.781-9.154-79.711c0 0 47.338-12.78 46.316-13.268 18.020-5.202 19.081-19.519 17.886-27.966l-47.873-167.032c2.33-0.69 4.606-1.328 6.729-1.939-2.733 0.394-5.077 0.986-6.862 1.487l-34.19-119.227c-6.147-12.226-18.842-24.799-44.651-17.405 0.534-1.089-46.257 13.3-46.257 13.3l-19.525-68.033 87.882-25.17 0.102 0.323c13.204-3.797 26.676-7.938 40.39-12.175l-29.976-104.635 63.677-18.26 29.399 102.578c16.911-5.217 33.936-10.46 50.685-15.264l-29.221-101.9 63.708-18.277 30.009 104.66c84.304-16.38 156.694-9.764 185.583 63.607zM680.757 554.644c-23.652-82.507-155.488-31.262-198.68-18.886l40.193 140.25c43.166-12.424 181.201-42.27 158.486-121.364zM594.393 365.275c-21.531-75.062-131.227-31.226-167.193-20.908l36.467 127.197c35.964-10.318 151.341-34.317 130.726-106.289z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["bch"], "grid": 0 }, "attrs": [], "properties": { "order": 9, - "id": 62, + "id": 63, "name": "bch", "prevSize": 32, "code": 59788 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 63 }, @@ -1385,18 +1539,20 @@ "M822.033 262.4h-531.534l-11.376-57.99c-2.873-14.643-15.744-25.21-30.707-25.21h-130.37c-8.64 0-15.644 6.985-15.644 15.6v31.2c0 8.615 7.005 15.6 15.644 15.6h104.609l90.73 462.411c-14.39 14.95-23.25 35.231-23.25 57.589 0 45.95 37.356 83.2 83.437 83.2s83.437-37.25 83.437-83.2c0.016-14.608-3.844-28.961-11.19-41.6h189.255c-7.345 12.639-11.206 26.992-11.19 41.6 0 45.95 37.356 83.2 83.437 83.2s83.437-37.25 83.437-83.2c0-23.577-9.851-44.845-25.652-59.985l1.349-6.184c4.242-19.448-10.615-37.831-30.574-37.831h-367.837l-12.242-62.4h407.284c14.719 0 27.448-10.23 30.574-24.573l58.948-270.4c4.24-19.447-10.617-37.827-30.574-37.827zM373.57 792.8c-17.253 0-31.289-13.996-31.289-31.2s14.036-31.2 31.289-31.2c17.253 0 31.289 13.996 31.289 31.2s-14.036 31.2-31.289 31.2zM707.319 792.8c-17.253 0-31.289-13.996-31.289-31.2s14.036-31.2 31.289-31.2c17.253 0 31.289 13.996 31.289 31.2s-14.036 31.2-31.289 31.2zM737.875 532.8h-394.316l-40.819-208h480.477l-45.343 208z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["nav-buy"], "grid": 0 }, "attrs": [], "properties": { "order": 3, - "id": 63, + "id": 64, "name": "cart", "prevSize": 32, "code": 59784 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 64 }, @@ -1407,18 +1563,20 @@ "M658.376 507.886l-145.925 78.341c-0.252 0.135-0.555 0.135-0.807 0l-146.021-78.341c-0.415-0.223-0.571-0.74-0.349-1.155 0.006-0.011 0.012-0.022 0.018-0.032l146.021-245.845c0.241-0.405 0.764-0.539 1.169-0.298 0.123 0.073 0.225 0.175 0.298 0.298l145.925 245.845c0.241 0.405 0.107 0.929-0.298 1.169-0.011 0.006-0.021 0.012-0.032 0.018zM366.541 542.244l144.745 220.345c0.259 0.394 0.788 0.503 1.182 0.245 0.097-0.064 0.181-0.147 0.245-0.245l144.745-220.345c0.259-0.394 0.149-0.923-0.245-1.182-0.251-0.165-0.571-0.186-0.842-0.054l-144.371 70.27-144.371-70.27c-0.424-0.206-0.934-0.030-1.141 0.394-0.132 0.271-0.111 0.59 0.054 0.842z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["eth-circle"], "grid": 0 }, "attrs": [], "properties": { "order": 4, - "id": 64, + "id": 65, "name": "eth-circle", "prevSize": 32, "code": 59785 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 65 }, @@ -1429,18 +1587,20 @@ "M698.708 456.325c-5.911 39.963-28.068 59.308-57.481 66.087 40.389 21.026 60.944 53.27 41.364 109.168-24.296 69.424-82.023 75.283-158.788 60.757l-18.631 74.654-45.018-11.218 18.387-73.654c-11.992-2.974-23.951-6.077-35.876-9.309l-18.45 74.001-44.967-11.218 18.631-74.795c-10.513-2.692-21.195-5.55-32.093-8.281l-58.585-14.602 22.349-51.526c0 0 33.17 8.821 32.722 8.167 12.745 3.153 18.399-5.155 20.631-10.693l29.44-118.013c1.654 0.397 3.257 0.807 4.758 1.18-1.795-0.718-3.423-1.18-4.68-1.5l21.003-84.244c0.553-9.563-2.743-21.628-20.976-26.179 0.705-0.473-32.697-8.127-32.697-8.127l11.975-48.077 62.085 15.501-0.051 0.232c9.333 2.319 18.95 4.524 28.746 6.756l18.45-73.923 44.993 11.218-18.080 72.474c12.078 2.756 24.234 5.537 36.068 8.486l17.951-72.001 45.018 11.218-18.439 73.95c56.84 19.577 98.408 48.924 90.241 103.513zM595.849 600.544c14.539-58.295-83.318-73.372-113.833-80.987l-24.722 99.090c30.517 7.577 124.642 37.795 138.554-18.103zM609.773 455.518c13.219-53.040-68.623-64.859-94.038-71.192l-22.412 89.872c25.413 6.333 103.757 32.166 116.45-18.68z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["btc-circle"], "grid": 0 }, "attrs": [], "properties": { "order": 5, - "id": 65, + "id": 66, "name": "btc-circle", "prevSize": 32, "code": 59786 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 66 }, @@ -1451,18 +1611,20 @@ "M647.098 365.524c14.862 37.564 5.346 65.396-16.737 85.974 45.491-1.986 79.414 15.661 90.406 73.86 13.67 72.271-33.392 106.208-107.136 132.011l21.193 73.968-44.596 12.794-20.903-72.98c-11.872 3.421-23.781 6.713-35.724 9.877l21.022 73.312-44.551 12.769-21.263-74.090c-10.45 2.926-21.13 5.791-31.934 8.875l-58.037 16.646-6.408-55.797c0 0 33.136-8.946 32.421-9.288 12.614-3.642 13.357-13.664 12.52-19.576l-33.511-116.922c1.631-0.483 3.225-0.93 4.71-1.357-1.913 0.276-3.554 0.69-4.803 1.041l-23.933-83.459c-4.303-8.558-13.189-17.359-31.256-12.184 0.374-0.762-32.38 9.31-32.38 9.31l-13.667-47.623 61.518-17.619 0.071 0.226c9.243-2.658 18.673-5.557 28.273-8.522l-20.983-73.245 44.574-12.782 20.58 71.804c11.838-3.652 23.755-7.322 35.479-10.685l-20.455-71.33 44.596-12.794 21.007 73.262c59.013-11.466 109.686-6.835 129.908 44.525zM630.13 541.85c-16.556-57.755-108.842-21.883-139.076-13.22l28.135 98.175c30.216-8.697 126.841-29.589 110.94-84.955zM569.675 409.292c-15.071-52.543-91.859-21.858-117.035-14.635l25.527 89.038c25.175-7.222 105.939-24.022 91.509-74.402z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["bch-circle"], "grid": 0 }, "attrs": [], "properties": { "order": 6, - "id": 66, + "id": 67, "name": "bch-circle", "prevSize": 32, "code": 59787 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 67 }, @@ -1473,18 +1635,20 @@ ], "width": 1138, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["arrow-switch"], "grid": 0 }, "attrs": [], "properties": { "order": 145, - "id": 67, + "id": 68, "name": "arrow-switch", "prevSize": 32, "code": 59774 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 68 }, @@ -1496,18 +1660,20 @@ ], "width": 878, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["vertical-arrow-switch"], "grid": 0 }, "attrs": [], "properties": { "order": 173, - "id": 68, + "id": 69, "name": "vertical-arrow-switch", "prevSize": 32, "code": 59776 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 69 }, @@ -1517,18 +1683,20 @@ "M810.667 810.667h-597.333v-597.333h298.667v-85.333h-298.667c-47.36 0-85.333 38.4-85.333 85.333v597.333c0 46.933 37.973 85.333 85.333 85.333h597.333c46.933 0 85.333-38.4 85.333-85.333v-298.667h-85.333v298.667zM597.333 128v85.333h153.173l-419.413 419.413 60.16 60.16 419.413-419.413v153.173h85.333v-298.667h-298.667z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["open-in-new-tab"], "grid": 0 }, "attrs": [], "properties": { "order": 176, - "id": 69, + "id": 70, "name": "open-in-new-tab", "prevSize": 32, "code": 59769 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 70 }, @@ -1538,18 +1706,20 @@ "M957.44 840.96l-404.48-696.576c-8.354-14.203-23.561-23.585-40.96-23.585s-32.606 9.382-40.839 23.363l-0.121 0.222-404.48 696.576c-1.36 4.307-2.143 9.259-2.143 14.395 0 23.234 16.037 42.722 37.645 47.999l0.338 0.070h819.2c21.947-5.347 37.983-24.835 37.983-48.069 0-5.136-0.784-10.088-2.238-14.745l0.094 0.35zM512 819.2c-0.055 0-0.12 0-0.185 0-28.277 0-51.2-22.923-51.2-51.2 0-1.532 0.067-3.049 0.199-4.546l-0.014 0.194c0-28.843 23.381-52.224 52.224-52.224s52.224 23.381 52.224 52.224v0c0.121 1.318 0.189 2.852 0.189 4.401 0 28.277-22.923 51.2-51.2 51.2-0.787 0-1.57-0.018-2.348-0.053l0.11 0.004zM563.2 416.768l-13.056 212.736c0 16.896-23.040 29.952-39.936 29.952-0.203 0.004-0.443 0.006-0.683 0.006-18.215 0-33.468-12.683-37.41-29.699l-0.051-0.259-11.264-211.712v-78.592c1.668-26.924 23.911-48.128 51.108-48.128 0.032 0 0.065 0 0.097 0l-0.005-0c0.027-0 0.060-0 0.092-0 27.196 0 49.44 21.204 51.101 47.982l0.007 0.146z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["alert-filled"], "grid": 0 }, "attrs": [], "properties": { "order": 179, - "id": 70, + "id": 71, "name": "alert-filled", "prevSize": 32, "code": 59648 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 71 }, @@ -1564,18 +1734,20 @@ "M455.424 86.272l-439.808 193.792c-8.754 3.65-14.794 12.137-14.794 22.036 0 13.149 10.659 23.808 23.808 23.808 0.341 0 0.681-0.007 1.019-0.021l-0.048 0.002h970.752c1.578 0.339 3.39 0.532 5.248 0.532 14.433 0 26.132-11.7 26.132-26.132 0-12.575-8.882-23.075-20.714-25.57l-0.17-0.030-429.312-188.416c-17.971-8.115-38.961-12.843-61.056-12.843s-43.085 4.728-62.015 13.228l0.959-0.385z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["bank-filled"], "grid": 0 }, "attrs": [], "properties": { "order": 180, - "id": 71, + "id": 72, "name": "bank-filled", "prevSize": 32, "code": 59649 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 72 }, @@ -1585,18 +1757,20 @@ "M512 41.472c-259.865 0-470.528 210.663-470.528 470.528s210.663 470.528 470.528 470.528c259.865 0 470.528-210.663 470.528-470.528v0c0-259.865-210.663-470.528-470.528-470.528l-0-0zM789.248 269.056l-332.8 491.008c-10.876 15.903-28.93 26.204-49.39 26.204-12.529 0-24.157-3.863-33.755-10.463l0.202 0.131-130.56-88.576c-6.862-5.535-11.214-13.943-11.214-23.367 0-16.542 13.41-29.952 29.952-29.952 5.442 0 10.545 1.451 14.943 3.988l-0.145-0.077 118.784 78.848c2.184 1.511 4.889 2.414 7.805 2.414 4.71 0 8.869-2.355 11.365-5.952l0.030-0.046 325.376-477.696c5.251-9.116 14.941-15.154 26.041-15.154 16.542 0 29.952 13.41 29.952 29.952 0 7.118-2.483 13.656-6.63 18.795l0.045-0.057z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["checkmark-in-circle-filled"], "grid": 0 }, "attrs": [], "properties": { "order": 35, - "id": 72, + "id": 73, "name": "checkmark-in-circle-filled", "prevSize": 32, "code": 59659 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 73 }, @@ -1607,18 +1781,20 @@ "M43.008 486.4c0 1.792 0 32.768 0 33.536 0 80.128 0 174.080 0 254.208 1.196 11.292 6.909 21.054 15.271 27.581l0.089 0.067c8.541 5.036 18.817 8.011 29.789 8.011 1.048 0 2.089-0.027 3.124-0.081l-0.145 0.006c272.64 0 574.464 0 847.104 0 1.644 0.243 3.541 0.381 5.471 0.381 21.773 0 39.424-17.651 39.424-39.424 0-1.85-0.127-3.67-0.374-5.452l0.023 0.206c0-67.584 0-149.248 0-216.832 0-10.752 0-51.2 0-62.72zM822.528 727.296q-70.912 0-142.080 0c-17.152 0-29.184-5.376-28.416-20.736s13.056-20.224 30.72-20.48h138.24c17.92 0 29.44 4.864 29.696 20.736s-10.496 20.736-28.16 20.992z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["credit-card-filled"], "grid": 0 }, "attrs": [], "properties": { "order": 38, - "id": 73, + "id": 74, "name": "credit-card-filled", "prevSize": 32, "code": 59662 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 74 }, @@ -1630,18 +1806,20 @@ "M0 136.96h1024v132.096h-1024v-132.096z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["hamburger-menu"], "grid": 0 }, "attrs": [], "properties": { "order": 48, - "id": 74, + "id": 75, "name": "hamburger-menu", "prevSize": 32, "code": 59675 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 75 }, @@ -1653,18 +1831,20 @@ "M150.016 712.704c-30.208 80.896-62.72 163.328-93.44 244.736-0.213 0.556-0.337 1.2-0.337 1.873 0 2.969 2.407 5.376 5.376 5.376 0.673 0 1.316-0.123 1.91-0.349l-0.037 0.012c81.408-30.976 163.584-63.744 243.712-93.952l-82.176-82.688z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["pencil-filled"], "grid": 0 }, "attrs": [], "properties": { "order": 58, - "id": 75, + "id": 76, "name": "pencil-filled", "prevSize": 32, "code": 59683 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 76 }, @@ -1681,18 +1861,20 @@ "M429.824 478.72h164.864v-193.536h-164.864z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["present-filled"], "grid": 0 }, "attrs": [], "properties": { "order": 61, - "id": 76, + "id": 77, "name": "present-filled", "prevSize": 32, "code": 59686 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 77 }, @@ -1705,18 +1887,20 @@ "M628.736 210.944v37.376h-234.752v-37.376z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["camera"], "grid": 0 }, "attrs": [], "properties": { "order": 88, - "id": 77, + "id": 78, "name": "camera", "prevSize": 32, "code": 59737 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 78 }, @@ -1727,18 +1911,20 @@ "M227.84 832.256c0.135 0.001 0.294 0.001 0.454 0.001 53.019 0 96-42.981 96-96 0-25.859-10.224-49.33-26.851-66.591l0.029 0.030 79.104-104.704c12.835 6.954 28.099 11.042 44.319 11.042 25.45 0 48.549-10.064 65.535-26.43l-0.029 0.028 107.264 80.896c-6.181 12.161-9.854 26.501-9.984 41.686l-0 0.042c-0 0.035-0 0.077-0 0.119 0 53.161 43.095 96.256 96.256 96.256s96.256-43.095 96.256-96.256c0-32.56-16.167-61.344-40.911-78.763l-0.305-0.204 109.824-214.272c8.533 2.939 18.37 4.707 28.598 4.863l0.074 0.001c0.31 0.004 0.676 0.006 1.043 0.006 53.726 0 97.28-43.554 97.28-97.28s-43.554-97.28-97.28-97.28c-53.726 0-97.28 43.554-97.28 97.28 0 30.684 14.206 58.049 36.399 75.879l0.19 0.147-109.824 216.32c-7.132-1.953-15.321-3.075-23.773-3.075-25.303 0-48.257 10.057-65.082 26.393l0.023-0.022-108.288-81.152c6.098-12.179 9.685-26.53 9.728-41.714l0-0.014c0-0.072 0-0.157 0-0.243 0-53.161-43.095-96.256-96.256-96.256s-96.256 43.095-96.256 96.256c0 24.73 9.326 47.282 24.654 64.331l-0.078-0.088-79.872 105.728c-12.174-5.975-26.496-9.47-41.633-9.47-53.161 0-96.256 43.095-96.256 96.256s43.095 96.256 96.256 96.256c0.237 0 0.473-0.001 0.71-0.003l-0.036 0zM872.704 226.304c33.932-0 61.44 27.508 61.44 61.44s-27.508 61.44-61.44 61.44c-33.932 0-61.44-27.508-61.44-61.44v0c0-33.932 27.508-61.44 61.44-61.44v0zM679.936 610.304c33.932 0 61.44 27.508 61.44 61.44s-27.508 61.44-61.44 61.44c-33.932 0-61.44-27.508-61.44-61.44v0c0.433-33.6 27.773-60.672 61.435-60.672 0.002 0 0.003 0 0.005 0l-0-0zM420.608 418.304c33.932 0 61.44 27.508 61.44 61.44s-27.508 61.44-61.44 61.44c-33.932 0-61.44-27.508-61.44-61.44v0c0-33.932 27.508-61.44 61.44-61.44v0zM227.84 674.304c33.932 0 61.44 27.508 61.44 61.44s-27.508 61.44-61.44 61.44c-33.932 0-61.44-27.508-61.44-61.44v0c0.145-33.822 27.597-61.184 61.439-61.184 0 0 0 0 0.001 0l-0-0z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["chart"], "grid": 0 }, "attrs": [], "properties": { "order": 90, - "id": 78, + "id": 79, "name": "chart", "prevSize": 32, "code": 59739 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 79 }, @@ -1749,18 +1935,20 @@ "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512c282.77 0 512-229.23 512-512v0c0-282.77-229.23-512-512-512v0zM512 982.528c-259.865 0-470.528-210.663-470.528-470.528s210.663-470.528 470.528-470.528c259.865 0 470.528 210.663 470.528 470.528v-0c0 259.865-210.663 470.528-470.528 470.528h-0z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["checkmark-in-circle"], "grid": 0 }, "attrs": [], "properties": { "order": 91, - "id": 79, + "id": 80, "name": "checkmark-in-circle", "prevSize": 32, "code": 59740 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 80 }, @@ -1770,18 +1958,20 @@ "M1008.128 6.912v0c-14.336-9.216-26.88-3.584-47.36 22.784l-612.864 903.424c-4.697 6.56-12.294 10.784-20.877 10.784-5.183 0-10.006-1.54-14.036-4.188l0.097 0.060-265.472-179.2c-5.024-3.248-11.164-5.179-17.755-5.179-9.302 0-17.706 3.846-23.708 10.035l-0.008 0.008c-3.038 4.157-4.861 9.37-4.861 15.009 0 7.283 3.041 13.856 7.923 18.518l0.010 0.009 310.016 210.176c6.095 4.203 13.64 6.714 21.771 6.714 13.247 0 24.938-6.664 31.904-16.822l0.085-0.132 2.304-3.328 638.208-944.384c12.032-18.432 10.496-33.792-5.376-44.288z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["checkmark"], "grid": 0 }, "attrs": [], "properties": { "order": 92, - "id": 80, + "id": 81, "name": "checkmark", "prevSize": 32, "code": 59741 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 81 }, @@ -1792,18 +1982,20 @@ "M752.64 686.848h68.352c17.92 0 29.44 4.864 29.696 20.736s-10.496 20.224-28.16 20.48q-70.912 0-142.080 0c-17.152 0-29.184-5.376-28.416-20.736s13.056-20.224 30.72-20.48z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["credit-card"], "grid": 0 }, "attrs": [], "properties": { "order": 96, - "id": 81, + "id": 82, "name": "credit-card", "prevSize": 32, "code": 59713 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 82 }, @@ -1816,18 +2008,20 @@ "M638.464 645.12c-16.873-47.523-56.264-83.19-104.995-94.526l-0.989-0.194h-3.072l-12.288-2.048h-34.56c-27.952 3.42-52.858 14.35-73.246 30.685l0.286-0.221c-34.342 27.002-56.196 68.549-56.196 115.2s21.854 88.198 55.882 114.962l0.314 0.238c13.417 10.967 29.171 19.695 46.334 25.309l1.026 0.291c12.968 4.183 27.887 6.594 43.369 6.594 80.589 0 145.92-65.331 145.92-145.92 0-6.385-0.41-12.675-1.205-18.843l0.077 0.73c-1.095-11.904-3.449-22.856-6.955-33.28l0.299 1.024zM474.88 793.6l2.816-23.296c-13.221-2.823-24.896-7.979-35.139-15.059l0.323 0.211c-7.296-4.832-13.603-10.325-19.113-16.54l-0.087-0.1 12.288-18.688 2.304-3.328 1.28 1.28c8.189 9.181 18.053 16.671 29.14 22.029l0.556 0.243c3.211 1.576 7.033 3.057 10.991 4.219l0.529 0.133 1.28-11.52v-9.984l2.816-24.32-7.168-3.072c-19.712-8.96-38.144-20.992-35.072-48.128s23.552-38.4 52.736-38.4v0l1.792-15.616c5.549 1.18 12.375 2.177 19.315 2.771l0.653 0.045-1.28 11.776v4.096l5.632 1.536c8.597 2.362 16.080 5.419 23.087 9.239l-0.559-0.279c4.808 2.555 8.912 5.186 12.783 8.109l-0.239-0.173 4.096 3.072-13.824 22.528c-7.366-5.886-15.813-10.88-24.916-14.601l-0.684-0.247-7.168-3.072v1.536l-3.072 25.6-1.536 13.312c12.65 4.746 23.53 11.427 32.864 19.797l-0.096-0.085c6.609 6.737 10.688 15.976 10.688 26.167 0 1.333-0.070 2.65-0.206 3.947l0.014-0.162s0 2.048 0 3.072c-3.862 23.040-23.656 40.379-47.5 40.379-2.298 0-4.558-0.161-6.771-0.473l0.255 0.029-2.048 16.896z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["dollars"], "grid": 0 }, "attrs": [], "properties": { "order": 97, - "id": 82, + "id": 83, "name": "dollars", "prevSize": 32, "code": 59714 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 83 }, @@ -1837,18 +2031,20 @@ "M739.962 403.2h-41.448v-60.58c0-103.48-82.895-188.76-185.996-189.020s-187.032 83.85-187.032 187.2v62.4h-41.448c-34.324 0-62.171 27.95-62.171 62.4v291.2c0 34.45 27.848 62.4 62.171 62.4h455.924c34.324 0 62.171-27.95 62.171-62.4v-291.2c0-34.45-27.848-62.4-62.171-62.4zM387.657 340.8c0-68.77 55.825-124.8 124.343-124.8s124.343 56.030 124.343 124.8v62.4h-248.686v-62.4zM739.962 756.8h-455.924v-291.2h455.924v291.2z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["lock"], "grid": 0 }, "attrs": [], "properties": { "order": 112, - "id": 83, + "id": 84, "name": "lock", "prevSize": 32, "code": 59721 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 84 }, @@ -1860,18 +2056,20 @@ "M536.064 848.128h-48.128c-12.583 0-22.784 10.201-22.784 22.784v0 48.384c0 12.583 10.201 22.784 22.784 22.784v0h48.384c12.583 0 22.784-10.201 22.784-22.784v0-48.896c-0.286-12.362-10.375-22.274-22.778-22.274-0.092 0-0.184 0.001-0.276 0.002l0.014-0zM545.792 917.504c-0 6.362-5.158 11.52-11.52 11.52h-44.544c-6.362 0-11.52-5.158-11.52-11.52h-0v-44.544c0-6.362 5.158-11.52 11.52-11.52h44.544c6.362 0 11.52 5.158 11.52 11.52v0z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["mobile"], "grid": 0 }, "attrs": [], "properties": { "order": 19, - "id": 84, + "id": 85, "name": "mobile", "prevSize": 32, "code": 59751 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 85 }, @@ -1881,18 +2079,20 @@ "M1008.64 165.376l-146.432-146.688c-9.326-9.666-22.394-15.669-36.864-15.669s-27.538 6.002-36.849 15.653l-0.015 0.015-95.232 94.72-23.296 23.040c-165.12 165.12-354.048 347.136-519.168 512l-25.6 25.6-125.184 333.824c-0.419 1.030-0.661 2.225-0.661 3.477 0 5.231 4.241 9.472 9.472 9.472 1.252 0 2.447-0.243 3.541-0.684l-0.064 0.023 332.8-125.184 27.904-20.992 540.672-538.624 94.976-96.256c9.666-9.326 15.669-22.394 15.669-36.864s-6.002-27.538-15.653-36.849l-0.015-0.015zM63.744 950.528c30.72-81.408 63.232-164.096 93.44-244.736l157.696 157.696c-80.64 30.208-162.816 63.232-244.224 93.952-0.556 0.213-1.2 0.337-1.873 0.337-2.969 0-5.376-2.407-5.376-5.376 0-0.673 0.123-1.316 0.349-1.91l-0.012 0.037zM351.744 836.864l-164.608-164.864c165.12-165.12 340.736-332.8 505.856-499.2l161.792 160zM966.144 222.464l-80.64 80.64-161.28-161.28 79.616-79.616c6.065-6.049 14.436-9.789 23.68-9.789s17.615 3.74 23.681 9.79l-0.001-0.001 113.92 113.92c6.049 6.065 9.789 14.436 9.789 23.68s-3.74 17.615-9.79 23.681l0.001-0.001z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["pencil"], "grid": 0 }, "attrs": [], "properties": { "order": 117, - "id": 85, + "id": 86, "name": "pencil", "prevSize": 32, "code": 59754 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 86 }, @@ -1902,18 +2102,20 @@ "M328.96 3.072c33.891 15.52 60.639 41.771 76.394 74.334l0.406 0.93c29.44 46.080 60.416 90.88 90.368 136.704 11.504 14.155 18.471 32.4 18.471 52.272 0 31.627-17.647 59.132-43.631 73.207l-0.44 0.218c-30.72 20.736-62.208 40.448-96.256 62.464 47.714 113.181 112.673 209.988 192.698 292.032l-0.186-0.192c33.024-22.272 63.744-43.264 94.72-63.488 14.423-12.224 33.243-19.656 53.8-19.656 32.141 0 60.038 18.169 73.981 44.796l0.219 0.459c31.232 46.592 61.44 93.952 93.184 140.288 20.435 23.675 33.813 53.957 36.571 87.253l0.037 0.555-5.376 25.6c-12.751 15.037-25.801 28.655-39.627 41.446l-0.309 0.282c-16.128 13.312-36.096 22.528-51.2 35.584-27.821 20.94-62.957 33.536-101.034 33.536-3.272 0-6.523-0.093-9.749-0.277l0.447 0.020h-25.6l-71.424-14.592c-31.461-12.424-57.076-24.461-81.864-37.832l4.040 1.992c-136.539-85.68-246.476-202.010-322.202-339.799l-2.406-4.777c-50.543-86.545-87.268-187.688-104.080-295.427l-0.624-4.861c-3.84-28.16-3.072-57.088-4.352-85.504l16.384-80.384c23.022-57.791 65.609-103.697 119.405-130.43l1.427-0.642c20.887-15.231 46.214-25.643 73.706-29.103l0.79-0.081zM160.512 215.808c-2.921 18.377-4.59 39.566-4.59 61.145 0 44.839 7.205 87.995 20.52 128.374l-0.827-2.895c55.899 193.625 166.827 356.531 314.607 475.519l1.809 1.409c42.717 37.187 94.181 65.521 150.824 81.507l2.776 0.669c56.576 14.080 112.128 19.2 161.28-22.784 11.255-8.296 24.212-16.759 37.632-24.509l2.048-1.091c13.173-6.2 22.129-19.364 22.129-34.619 0-9.719-3.635-18.588-9.619-25.324l0.034 0.039q-56.32-85.248-112.64-169.472c-15.872-23.808-28.672-25.6-52.992-11.008s-54.528 35.84-81.664 53.76c-45.056 29.952-51.2 29.44-89.856-8.192q-11.52-11.008-22.016-22.784c-56.938-62.952-105.746-134.838-143.787-212.933l-2.389-5.435c-9.204-19.846-18.596-44.458-26.447-69.748l-1.201-4.492c-1.336-3.226-2.112-6.973-2.112-10.901 0-11.881 7.099-22.103 17.287-26.657l0.185-0.074c35.584-21.76 69.888-45.312 104.448-68.608 20.48-13.824 25.6-27.904 13.056-45.824q-58.88-90.624-119.296-179.2c-6.583-10.366-18.003-17.146-31.006-17.146-8.633 0-16.568 2.988-22.827 7.987l0.073-0.057c-11.861 8.554-25.577 17.283-39.785 25.237l-2.199 1.131c-51.712 25.344-71.168 71.424-83.456 126.976z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["phone"], "grid": 0 }, "attrs": [], "properties": { "order": 119, - "id": 86, + "id": 87, "name": "phone", "prevSize": 32, "code": 59756 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 87 }, @@ -1923,18 +2125,20 @@ "M517.12 220.672c30.976-53.76 60.416-111.104 95.488-164.608 22.934-34.239 61.468-56.478 105.196-56.478 12.878 0 25.306 1.929 37.010 5.513l-0.894-0.236c54.323 10.615 96.518 52.552 107.372 105.881l0.148 0.871c2.225 9.799 3.5 21.052 3.5 32.603 0 40.462-15.645 77.27-41.216 104.705l0.084-0.092c29.184 0 51.2 0 75.008 0 0.613-0.038 1.328-0.060 2.049-0.060 19.37 0 35.072 15.702 35.072 35.072 0 0.111-0.001 0.222-0.002 0.333l0-0.017c0 68.096 1.792 135.936-1.536 204.8v5.376c-1.216 19.088-16.995 34.11-36.283 34.11-0.745 0-1.484-0.022-2.218-0.067l0.101 0.005h-2.304q0 219.648 0 439.040c0 56.832 0 57.088-55.040 57.088h-646.912c-51.2 0-51.2 0-51.2-52.992 0-147.712 0-295.168 0-444.672-37.888-2.56-42.496-25.6-41.728-57.088q2.304-87.296 0-174.848c0-32.768 9.728-49.408 44.8-46.080 19.712 1.792 39.68 0 64.768 0l-17.92-29.696c-13.27-21.465-21.133-47.489-21.133-75.35 0-48.595 23.922-91.602 60.632-117.888l0.437-0.298c22.463-16.9 50.829-27.066 81.57-27.066 46.648 0 87.828 23.408 112.435 59.119l0.299 0.459c36.096 52.736 61.696 110.080 92.416 162.56zM393.472 983.040v-457.216h-211.712v457.216zM641.792 524.544v457.472h211.712v-457.472zM435.2 524.544v457.216h165.632v-457.216zM139.776 482.816h253.952v-192h-253.952zM894.72 482.816v-191.744h-253.184v192.512zM458.24 244.48l7.68-11.264c-28.672-51.2-55.040-102.4-86.784-149.248-15.295-20.189-39.288-33.097-66.295-33.097-13.737 0-26.694 3.339-38.103 9.251l0.462-0.218c-32.149 14.395-54.143 46.108-54.143 82.957 0 3.785 0.232 7.515 0.683 11.178l-0.044-0.439c1.709 38.722 30.222 70.305 67.355 76.731l0.485 0.069c55.808 8.448 112.64 9.984 168.704 14.080zM569.088 232.448l8.448 12.032c55.552-3.84 111.36-5.376 166.4-12.8 39.453-6.393 69.234-40.146 69.376-80.881l0-0.015c0.203-2.293 0.319-4.96 0.319-7.654 0-37.934-22.983-70.501-55.784-84.534l-0.599-0.228c-10.1-4.609-21.907-7.295-34.341-7.295-27.823 0-52.505 13.45-67.897 34.203l-0.161 0.227c-31.744 47.36-57.6 97.792-85.76 146.944zM600.064 484.096v-193.792h-164.864v193.536z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["present"], "grid": 0 }, "attrs": [], "properties": { "order": 120, - "id": 87, + "id": 88, "name": "present", "prevSize": 32, "code": 59757 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 88 }, @@ -1944,18 +2148,20 @@ "M512 0c92.215 0 177.548 23.054 256 69.161s140.731 108.387 186.839 186.839c46.108 78.452 69.161 163.785 69.161 256s-23.054 177.548-69.161 256c-46.108 78.452-108.387 140.731-186.839 186.839s-163.785 69.161-256 69.161c-92.215 0-177.548-23.054-256-69.161s-140.731-108.387-186.839-186.839c-46.108-78.452-69.161-163.785-69.161-256s23.054-177.548 69.161-256c46.108-78.452 108.387-140.731 186.839-186.839s163.785-69.161 256-69.161zM512 924.903c74.323 0 143.14-18.581 206.452-55.742s113.548-87.398 150.71-150.71c37.161-63.312 55.742-132.129 55.742-206.452s-18.581-143.14-55.742-206.452c-37.161-63.312-87.398-113.548-150.71-150.71s-132.129-55.742-206.452-55.742c-74.323 0-143.14 18.581-206.452 55.742s-113.548 87.398-150.71 150.71c-37.161 63.312-55.742 132.129-55.742 206.452s18.581 143.14 55.742 206.452c37.161 63.312 87.398 113.548 150.71 150.71s132.129 55.742 206.452 55.742zM732.903 398.452c0 37.161-11.011 68.817-33.032 94.968-13.763 15.14-36.473 31.656-68.129 49.548-16.516 9.634-27.527 17.204-33.032 22.71-9.634 6.882-14.452 15.14-14.452 24.774v12.387c0 6.882-2.409 12.731-7.226 17.548s-10.667 7.226-17.548 7.226h-94.968c-6.882 0-12.731-2.409-17.548-7.226s-7.226-10.667-7.226-17.548v-18.581c0-31.656 11.011-58.495 33.032-80.516 12.387-12.387 33.032-26.839 61.935-43.355l4.129-2.065c20.645-12.387 35.097-22.022 43.355-28.903 9.634-9.634 14.452-20.645 14.452-33.032 0-16.516-8.602-30.28-25.806-41.29s-36.473-16.516-57.806-16.516c-21.333 0-39.57 4.817-54.71 14.452-12.387 8.258-27.527 24.086-45.419 47.484-4.129 4.129-9.29 6.882-15.484 8.258s-12.043 0-17.548-4.129l-57.806-43.355c-5.505-4.129-8.602-9.634-9.29-16.516s0.344-13.075 3.097-18.581c26.151-37.161 55.742-65.032 88.774-83.613s72.946-27.871 119.742-27.871c33.032 0 66.065 8.258 99.097 24.774s59.527 38.538 79.484 66.065c19.957 27.527 29.935 58.495 29.935 92.903zM598.71 743.226c0 23.398-8.602 43.699-25.806 60.903s-37.505 25.806-60.903 25.806c-23.398 0-43.699-8.602-60.903-25.806s-25.806-37.505-25.806-60.903c0-23.398 8.602-43.699 25.806-60.903s37.505-25.806 60.903-25.806c23.398 0 43.699 8.602 60.903 25.806s25.806 37.505 25.806 60.903z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["question-in-circle"], "grid": 0 }, "attrs": [], "properties": { "order": 184, - "id": 88, + "id": 89, "name": "question-in-circle", "prevSize": 32, "code": 59758 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 89 }, @@ -1965,18 +2171,20 @@ "M146.944 841.728c-11.912-20.252-18.948-44.612-18.948-70.615 0-0.375 0.001-0.749 0.004-1.123l-0 0.057c0-22.784 0-45.824 0-68.608 1.442-17.229 4.161-33.023 8.115-48.319l-0.435 1.983c1.536-6.4 0-8.448-4.096-11.52-20.992-13.056-42.496-25.6-62.464-40.96-24.721-18.618-44.188-42.932-56.636-71.048l-0.452-1.144c-3.978-10.211-8.101-23.279-11.489-36.639l-0.543-2.529q0-53.504 0-107.264c0.708-1.595 1.406-3.552 1.971-5.566l0.077-0.322c5.856-29.83 19.214-55.88 38.027-76.958l-0.139 0.158c22.933-25.56 50.146-46.725 80.606-62.493l1.57-0.739c4.805-2.307 8.224-6.829 8.951-12.206l0.009-0.082c4.935-24.47 15.244-45.972 29.671-64.043l-0.231 0.299c28.342-35.362 64.296-63.439 105.474-81.968l1.79-0.72c47.176-22.732 101.963-38.913 159.644-45.597l2.404-0.227 42.752-5.632h78.592c2.395 0.699 5.34 1.325 8.349 1.751l0.355 0.041c72.008 4.714 138.763 22.532 199.466 51.089l-3.37-1.425c40.526 18.506 74.684 44.468 102.070 76.406l0.33 0.394c23.395 26.811 37.66 62.115 37.66 100.751 0 1.030-0.010 2.057-0.030 3.082l0.002-0.154c0 19.968 0 40.192 0 59.904-1.665 19.248-4.472 36.717-8.434 53.742l0.498-2.542c-1.28 6.144 0 8.192 4.096 11.008 22.016 14.080 44.544 27.648 65.792 43.52 21.842 16.095 39.225 37.004 50.779 61.228l0.421 0.98c4.9 12.361 9.984 28.15 14.174 44.3l0.674 3.060v104.96c-0.5 0.949-0.937 2.055-1.253 3.211l-0.027 0.117c-6.945 40.252-27.898 74.689-57.56 98.839l-0.296 0.233c-19.712 16.896-41.984 29.952-62.976 45.312-3.739 2.586-6.704 6.042-8.638 10.086l-0.066 0.154c-6.144 14.336-11.776 28.928-17.152 43.776 0 3.328-2.816 0 0 3.328-86.016 131.072-247.552 152.32-369.408 151.040-184.32-2.048-326.144-83.456-359.68-154.368zM512 435.2c18.176 0 36.608 0 54.784 0 47.203-3.061 91.242-12.196 132.785-26.662l-3.505 1.062c47.773-15.437 88.904-39.715 123.401-71.15l-0.265 0.238c16.783-14.985 30.024-33.568 38.558-54.567l0.354-0.985c3.34-9.52 5.27-20.496 5.27-31.923 0-25.32-9.474-48.427-25.070-65.97l0.088 0.101c-25.833-30.556-57.898-54.994-94.319-71.51l-1.681-0.682c-58.852-28.015-127.673-45.178-200.292-47.090l-0.668-0.014c-11.221-0.849-24.305-1.332-37.501-1.332-87.594 0-170.209 21.314-242.942 59.039l2.939-1.387c-35.675 18.041-64.957 44.125-86.273 75.989l-0.511 0.811c-10.584 14.777-16.924 33.22-16.924 53.144 0 12.4 2.456 24.226 6.907 35.018l-0.223-0.611c8.955 20.821 21.795 38.42 37.739 52.606l0.149 0.13c37.137 33.331 82.098 58.743 131.744 73.132l2.4 0.596c44.215 14.371 95.091 22.657 147.902 22.657 8.848 0 17.641-0.233 26.375-0.692l-1.221 0.051zM435.2 696.832v3.84c27.648 7.68 55.040 16.896 83.2 23.040 36.841 8.364 79.149 13.158 122.577 13.158 21.298 0 42.326-1.153 63.026-3.399l-2.563 0.226c64.014-5.421 122.943-22.035 176.573-47.898l-3.005 1.306c36.081-16.651 66.479-39.919 90.831-68.497l0.305-0.367c12.961-15.296 22.046-34.267 25.508-55.139l0.092-0.669c0.522-3.709 0.819-7.993 0.819-12.347 0-21.909-7.54-42.057-20.168-57.991l0.148 0.194c-25.468-32.869-58.121-58.958-95.695-76.15l-1.585-0.65c-5.632-2.816-8.704-1.536-12.288 3.328-5.88 7.381-11.827 13.977-18.146 20.195l-0.030 0.029c-20.514 19.71-43.828 36.737-69.232 50.376l-1.68 0.824c-3.759 2.481-6.508 6.229-7.652 10.626l-0.028 0.126c-5.889 27.364-18.175 51.237-35.235 70.847l0.163-0.191c-25.917 30.129-57.636 54.477-93.52 71.463l-1.712 0.729c-43.949 22.525-94.996 39.125-148.868 47.036l-2.684 0.324zM128 276.992l-4.608 2.048c-31.148 17.185-56.894 40.558-76.318 68.639l-0.482 0.737c-10.010 14.553-15.988 32.557-15.988 51.957 0 15.53 3.831 30.165 10.599 43.013l-0.243-0.505c11.401 21.85 26.628 40.185 44.968 54.776l0.344 0.264c32.618 26.491 70.965 47.468 112.738 60.764l2.462 0.676c52.054 17.535 112.001 27.654 174.312 27.654 0.908 0 1.816-0.002 2.723-0.006l-0.139 0.001c3.869 0.099 8.424 0.155 12.993 0.155 71.034 0 138.894-13.589 201.122-38.31l-3.684 1.291c2.604-1.196 4.703-2.307 6.738-3.513l-0.338 0.185c-1.617-1.176-3.643-1.882-5.834-1.882-0.471 0-0.934 0.033-1.387 0.096l0.052-0.006c-17.408 1.536-34.816 3.328-51.2 4.352-8.908 0.495-19.333 0.776-29.823 0.776-38.167 0-75.462-3.73-111.542-10.846l3.637 0.598c-55.438-9.719-105.033-27.558-150.191-52.453l2.479 1.253c-35.747-18.677-65.701-43.724-89.411-73.908l-0.445-0.588c-18.759-22.008-31.016-50.075-33.503-80.901l-0.033-0.507c0-18.688 0-36.352 0-55.808zM722.432 844.8v-2.56h-13.568c-21.317 2.513-46.011 3.947-71.040 3.947s-49.723-1.434-74.004-4.224l2.964 0.277c-80.814-7.23-154.306-33.248-217.776-73.618l1.968 1.17c-30.832-19.625-56.039-45.404-74.43-75.772l-0.578-1.028c-2.452-3.243-5.757-5.723-9.582-7.121l-0.146-0.047c-1.038-0.058-2.252-0.091-3.474-0.091-2.383 0-4.736 0.126-7.054 0.372l0.288-0.025-86.016-23.296c-6.028 10.984-9.574 24.069-9.574 37.982 0 12.727 2.967 24.761 8.247 35.447l-0.209-0.469c15.291 32.023 38.588 58.115 67.353 76.36l0.743 0.44c58.171 38.041 127.957 63.255 203.063 70.018l1.737 0.126c21.056 2.68 45.417 4.209 70.136 4.209 41.139 0 81.288-4.236 120.036-12.294l-3.804 0.662c35.983-7.514 67.653-18.021 97.609-31.64l-2.889 1.176z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["stack-of-coins-2"], "grid": 0 }, "attrs": [], "properties": { "order": 131, - "id": 89, + "id": 90, "name": "stack-of-coins", "prevSize": 32, "code": 59762 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 90 }, @@ -1988,18 +2196,20 @@ "M414.208 867.584c2.111 7.563 8.939 13.019 17.042 13.019 2.344 0 4.581-0.457 6.628-1.286l-0.118 0.042c9.599-0.706 17.12-8.667 17.12-18.385 0-1.011-0.081-2.002-0.238-2.969l0.014 0.106q0-134.4 0-268.544t0-267.776c0.251-1.692 0.394-3.645 0.394-5.632s-0.143-3.94-0.42-5.85l0.026 0.218c-2.816-9.472-9.728-14.592-23.040-12.288s-17.408 8.448-17.408 21.76q0 268.544 0 537.6c-0.236 1.5-0.371 3.23-0.371 4.992s0.135 3.492 0.395 5.181l-0.024-0.189z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["trash"], "grid": 0 }, "attrs": [], "properties": { "order": 136, - "id": 90, + "id": 91, "name": "trash", "prevSize": 32, "code": 59729 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 91 }, @@ -2009,18 +2219,20 @@ "M980.736 969.728l12.544 54.272h-962.56c-0.001-0.276-0.002-0.602-0.002-0.928 0-45.649 11.467-88.62 31.676-126.19l-0.699 1.421c5.36-9.885 10.703-18.253 16.562-26.218l-0.434 0.618c32.732-38.351 74.892-67.725 122.925-84.634l2.003-0.614c38.912-16.896 79.104-31.232 116.48-51.2 19.788-8.73 35.471-23.751 44.82-42.486l0.236-0.522c22.016-75.264-34.048-130.56-57.088-194.56 0-1.28-2.304-2.048-3.328-3.328-20.1-21.665-32.432-50.781-32.432-82.779 0-6.018 0.436-11.935 1.279-17.72l-0.079 0.658c1.536-20.736 16.64-37.632 10.24-61.44-8.386-28.896-13.21-62.088-13.21-96.407 0-16.919 1.172-33.565 3.44-49.86l-0.215 1.883c10.496-72.96 43.008-130.816 113.152-160.512 19.435-10.606 41.954-19.393 65.644-25.198l1.94-0.402c12.885-2.653 27.694-4.172 42.858-4.172 22.036 0 43.323 3.208 63.419 9.181l-1.573-0.401 7.424 3.072c32.768 15.616 66.048 30.976 98.048 47.872l23.808 18.432c24.865 19.166 43.418 45.422 52.709 75.728l0.283 1.072 1.792 6.912c4.364 22.446 6.861 48.258 6.861 74.654 0 40.157-5.779 78.963-16.55 115.634l0.729-2.896c-0.532 2.211-0.837 4.749-0.837 7.358 0 4.164 0.777 8.146 2.193 11.81l-0.076-0.224c6.87 13.673 10.893 29.797 10.893 46.86 0 24.712-8.437 47.452-22.588 65.499l0.175-0.231c-15.602 22.129-29.068 47.48-39.172 74.473l-0.764 2.327c-5.632 12.544-12.288 25.6-18.944 37.12-5.283 6.826-9.987 14.565-13.775 22.811l-0.305 0.741c-15.616 60.416 1.536 97.536 56.832 125.696 4.096 2.048 8.192 4.352 12.288 6.4 64 28.416 132.608 47.36 188.416 92.672v0c34.994 33.851 60.579 77.222 72.584 125.94l0.376 1.804zM929.536 982.528c0-5.12-2.048-32.256-3.072-35.84-17.664-59.648-57.6-88.832-109.824-113.408-48.128-22.784-83.2-32.256-130.56-56.32-34.304-17.408-69.12-40.96-71.68-84.224-1.792-30.976 0-62.208 0-93.184-0.080-0.716-0.125-1.546-0.125-2.387 0-4.636 1.384-8.948 3.762-12.546l-0.053 0.085c27.237-28.067 45.381-65.093 49.601-106.245l0.063-0.763c2.352-7.446 7.618-13.38 14.426-16.57l0.166-0.070c15.222-9.061 25.262-25.43 25.262-44.144 0-10.437-3.123-20.144-8.485-28.238l0.118 0.19c-6.411-4.962-10.499-12.66-10.499-21.312 0-4.161 0.945-8.101 2.633-11.617l-0.070 0.161c13.598-40.428 21.444-86.984 21.444-135.373 0-4.609-0.071-9.201-0.213-13.776l0.016 0.669c-2.107-61.504-44.457-112.559-101.443-127.782l-0.957-0.218c-6.449-2.882-12.008-6.308-17.045-10.356l0.149 0.116c-13.44-10.073-29.107-18.116-46.032-23.271l-1.072-0.281c-12.38-1.737-26.682-2.729-41.216-2.729s-28.836 0.992-42.842 2.912l1.626-0.182c-88.297 9.995-156.296 84.206-156.416 174.323l-0 0.013c2.918 52.958 8.578 101.876 16.96 149.859l-1.088-7.523c1.536 11.52 3.328 18.944-7.168 27.904-18.176 16.128-9.984 66.56 12.544 71.68 17.152 3.84 17.664 14.336 19.712 25.6 4.832 38.562 21.903 72.45 47.139 98.34l-0.035-0.036c3.399 3.707 5.519 8.635 5.632 14.057l0 0.023c0 28.416 0 57.088 0 85.248 1.001 4.241 1.576 9.11 1.576 14.114 0 19.97-9.146 37.803-23.478 49.54l-0.113 0.090c-23.134 14.787-49.833 28.614-77.785 40.003l-3.367 1.213c-46.848 24.32-97.792 43.264-144.128 69.12-39.168 21.248-59.136 76.8-67.328 123.136z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["user"], "grid": 0 }, "attrs": [], "properties": { "order": 140, - "id": 91, + "id": 92, "name": "user", "prevSize": 32, "code": 59733 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 92 }, @@ -2031,18 +2243,20 @@ ], "width": 1109, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["wallet"], "grid": 0 }, "attrs": [], "properties": { "order": 141, - "id": 92, + "id": 93, "name": "wallet", "prevSize": 32, "code": 59734 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 93 }, @@ -2053,18 +2267,20 @@ ], "width": 1293, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["id-card"], "grid": 0 }, "attrs": [], "properties": { "order": 3, - "id": 93, + "id": 94, "name": "id-card", "prevSize": 32, "code": 59777 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 94 }, @@ -2075,18 +2291,20 @@ ], "width": 1067, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["comment-alt-regular"], "grid": 0 }, "attrs": [], "properties": { "order": 4, - "id": 94, + "id": 95, "name": "comment-alt-regular", "prevSize": 32, "code": 59778 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 95 }, @@ -2096,18 +2314,20 @@ "M953.138 45.8l-188.033-43.4c-43.116-10-87.030 12.4-104.396 53.2l-86.83 203c-15.969 37.2-5.19 81.2 26.149 106.8l79.844 65.4c-57.088 104.8-143.32 191.2-247.916 248.2l-65.273-80c-25.55-31.4-69.464-42.2-106.592-26.2l-202.804 87c-40.72 17.4-62.877 61.4-53.096 104.6l43.315 188.4c9.581 41.8 46.31 71 89.026 71 488.845 0.2 887.467-396.4 887.467-888.8 0-42.8-29.143-79.6-70.862-89.2zM140.326 928l-41.719-181.4 196.017-84.2 111.183 136.2c197.215-92.8 300.613-196 393.232-394l-135.935-111.4 84.036-196.4 181.046 41.8c-1.996 435.2-353.51 787.4-787.861 789.4z" ], "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["phone-regular"], "grid": 0 }, "attrs": [], "properties": { "order": 7, - "id": 95, + "id": 96, "name": "phone-regular", "prevSize": 32, "code": 59781 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 96 }, @@ -2118,18 +2338,20 @@ ], "width": 939, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["birthday-cake-light"], "grid": 0 }, "attrs": [], "properties": { "order": 8, - "id": 96, + "id": 97, "name": "birthday-cake-light", "prevSize": 32, "code": 59782 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 97 }, @@ -2140,18 +2362,20 @@ ], "width": 1365, "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, "tags": ["check"], "grid": 0 }, "attrs": [], "properties": { "order": 185, - "id": 97, + "id": 98, "name": "check", "prevSize": 32, "code": 59664 }, - "setIdx": 0, + "setIdx": 1, "setId": 3, "iconIdx": 98 }, @@ -2174,7 +2398,7 @@ "prevSize": 32, "code": 59668 }, - "setIdx": 1, + "setIdx": 2, "setId": 2, "iconIdx": 0 }, @@ -2199,7 +2423,7 @@ "prevSize": 32, "code": 59914 }, - "setIdx": 1, + "setIdx": 2, "setId": 2, "iconIdx": 1 }, @@ -2232,7 +2456,7 @@ "prevSize": 32, "code": 59796 }, - "setIdx": 1, + "setIdx": 2, "setId": 2, "iconIdx": 2 } diff --git a/packages/blockchain-info-components/src/Icons/Icomoon.ts b/packages/blockchain-info-components/src/Icons/Icomoon.ts index 381aac84d81..b3c8058ed3b 100644 --- a/packages/blockchain-info-components/src/Icons/Icomoon.ts +++ b/packages/blockchain-info-components/src/Icons/Icomoon.ts @@ -1,5 +1,6 @@ const IcoMoon = { 'alert-filled': '\\e900', + algo: '\\e939', 'arrow-down': '\\e91d', 'arrow-down-circle': '\\e935', 'arrow-left': '\\e90f', diff --git a/packages/blockchain-wallet-v4-frontend/src/layouts/Wallet/MenuLeft/Navigation/template.tsx b/packages/blockchain-wallet-v4-frontend/src/layouts/Wallet/MenuLeft/Navigation/template.tsx index 88485c50a3a..7b5a340841b 100644 --- a/packages/blockchain-wallet-v4-frontend/src/layouts/Wallet/MenuLeft/Navigation/template.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/layouts/Wallet/MenuLeft/Navigation/template.tsx @@ -75,6 +75,7 @@ const Navigation = (props: OwnProps & Props) => { supportedCoins.BTC, supportedCoins.ETH, supportedCoins.BCH, + supportedCoins.ALGO, supportedCoins.XLM ] diff --git a/packages/blockchain-wallet-v4/src/exchange/currencies/ALGO.ts b/packages/blockchain-wallet-v4/src/exchange/currencies/ALGO.ts new file mode 100644 index 00000000000..98d856fdad2 --- /dev/null +++ b/packages/blockchain-wallet-v4/src/exchange/currencies/ALGO.ts @@ -0,0 +1,20 @@ +export default { + base: 'microAlgo', + code: 'ALGO', + displayName: 'Bitcoin', + trade: 'ALGO', + units: { + mALGO: { + rate: '1', + symbol: 'microAlgo', + decimal_digits: 0, + currency: 'ALGO' + }, + ALGO: { + rate: '1000000', + symbol: 'ALGO', + decimal_digits: 6, + currency: 'ALGO' + } + } +} diff --git a/packages/blockchain-wallet-v4/src/exchange/currencies/index.ts b/packages/blockchain-wallet-v4/src/exchange/currencies/index.ts index 8a48eec072e..b8839af5da1 100755 --- a/packages/blockchain-wallet-v4/src/exchange/currencies/index.ts +++ b/packages/blockchain-wallet-v4/src/exchange/currencies/index.ts @@ -1,3 +1,4 @@ +import ALGO from './ALGO' import AUD from './AUD' import BCH from './BCH' import BRL from './BRL' @@ -52,6 +53,7 @@ const FiatCurrencies = { } const CryptoCurrencies = { + ALGO, BCH, BTC, ETH, diff --git a/packages/blockchain-wallet-v4/src/redux/rootSaga.ts b/packages/blockchain-wallet-v4/src/redux/rootSaga.ts index 3aa43ea7577..ea6c08ec157 100755 --- a/packages/blockchain-wallet-v4/src/redux/rootSaga.ts +++ b/packages/blockchain-wallet-v4/src/redux/rootSaga.ts @@ -10,7 +10,7 @@ export default ({ api, networks, options }) => yield all([ fork(data({ api, options, networks })), fork(kvStore({ api, networks })), - fork(walletOptions({ api, options })), + fork(walletOptions({ options })), fork(settings({ api })), fork(wallet({ api, networks })) ]) diff --git a/packages/blockchain-wallet-v4/src/redux/walletOptions/actionTypes.js b/packages/blockchain-wallet-v4/src/redux/walletOptions/actionTypes.ts similarity index 100% rename from packages/blockchain-wallet-v4/src/redux/walletOptions/actionTypes.js rename to packages/blockchain-wallet-v4/src/redux/walletOptions/actionTypes.ts diff --git a/packages/blockchain-wallet-v4/src/redux/walletOptions/actions.js b/packages/blockchain-wallet-v4/src/redux/walletOptions/actions.ts similarity index 100% rename from packages/blockchain-wallet-v4/src/redux/walletOptions/actions.js rename to packages/blockchain-wallet-v4/src/redux/walletOptions/actions.ts diff --git a/packages/blockchain-wallet-v4/src/redux/walletOptions/reducers.js b/packages/blockchain-wallet-v4/src/redux/walletOptions/reducers.ts similarity index 100% rename from packages/blockchain-wallet-v4/src/redux/walletOptions/reducers.js rename to packages/blockchain-wallet-v4/src/redux/walletOptions/reducers.ts diff --git a/packages/blockchain-wallet-v4/src/redux/walletOptions/sagaRegister.js b/packages/blockchain-wallet-v4/src/redux/walletOptions/sagaRegister.ts similarity index 81% rename from packages/blockchain-wallet-v4/src/redux/walletOptions/sagaRegister.js rename to packages/blockchain-wallet-v4/src/redux/walletOptions/sagaRegister.ts index e5e726fef76..0182cb7c6c6 100755 --- a/packages/blockchain-wallet-v4/src/redux/walletOptions/sagaRegister.js +++ b/packages/blockchain-wallet-v4/src/redux/walletOptions/sagaRegister.ts @@ -1,7 +1,7 @@ import * as A from './actions' import { put } from 'redux-saga/effects' -export default ({ api, options }) => { +export default ({ options }) => { return function * coreWalletOptionsSaga () { yield put(A.fetchOptionsSuccess(options)) } diff --git a/packages/blockchain-wallet-v4/src/redux/walletOptions/sagas.js b/packages/blockchain-wallet-v4/src/redux/walletOptions/sagas.ts similarity index 90% rename from packages/blockchain-wallet-v4/src/redux/walletOptions/sagas.js rename to packages/blockchain-wallet-v4/src/redux/walletOptions/sagas.ts index 2512796b7a7..0573ec596bc 100755 --- a/packages/blockchain-wallet-v4/src/redux/walletOptions/sagas.js +++ b/packages/blockchain-wallet-v4/src/redux/walletOptions/sagas.ts @@ -1,7 +1,7 @@ import * as A from './actions' import { call, put } from 'redux-saga/effects' -export default ({ api, options }) => { +export default ({ api }) => { const fetchOptions = function * () { try { yield put(A.fetchOptionsLoading()) diff --git a/packages/blockchain-wallet-v4/src/redux/walletOptions/selectors.spec.js b/packages/blockchain-wallet-v4/src/redux/walletOptions/selectors.spec.ts similarity index 99% rename from packages/blockchain-wallet-v4/src/redux/walletOptions/selectors.spec.js rename to packages/blockchain-wallet-v4/src/redux/walletOptions/selectors.spec.ts index 26c825187a3..19508662758 100644 --- a/packages/blockchain-wallet-v4/src/redux/walletOptions/selectors.spec.js +++ b/packages/blockchain-wallet-v4/src/redux/walletOptions/selectors.spec.ts @@ -4,6 +4,7 @@ import MockWalletOptions from '../../../../../config/mocks/wallet-options-v4.jso import Remote from '../../remote' jest.mock('../settings/selectors') +// @ts-ignore getInvitations.mockReturnValue(Remote.of({})) describe('walletOptions selectors', () => { diff --git a/packages/blockchain-wallet-v4/src/redux/walletOptions/selectors.js b/packages/blockchain-wallet-v4/src/redux/walletOptions/selectors.ts similarity index 87% rename from packages/blockchain-wallet-v4/src/redux/walletOptions/selectors.js rename to packages/blockchain-wallet-v4/src/redux/walletOptions/selectors.ts index 923527598ab..d0f8f75ce42 100755 --- a/packages/blockchain-wallet-v4/src/redux/walletOptions/selectors.js +++ b/packages/blockchain-wallet-v4/src/redux/walletOptions/selectors.ts @@ -12,10 +12,11 @@ import { toUpper } from 'ramda' import { getInvitations } from '../settings/selectors' -import { walletOptionsPath } from '../paths' +import { RootState } from 'data/rootReducer' +import { SupportedCoinType } from './types' // general -export const getOptions = path([walletOptionsPath]) +export const getOptions = (state: RootState) => state.walletOptionsPath export const getDomains = state => getOptions(state).map(prop('domains')) export const getWebOptions = state => getOptions(state).map(path(['platforms', 'web'])) @@ -36,6 +37,7 @@ export const getSupportedCoins = createDeepEqualSelector( [getInvitations, getWebOptions], (invitationsR, webOptionsR) => { const addInvited = (obj, coin) => { + // @ts-ignore const invited = invitationsR.map(propOr(true, coin)).getOrElse(false) return set(lensProp('invited'), invited, obj) } @@ -45,7 +47,7 @@ export const getSupportedCoins = createDeepEqualSelector( ) export const getSyncToExchangeList = state => getSupportedCoins(state) - .map(filter(path(['availability', 'syncToPit']))) + .map(filter((value: SupportedCoinType) => value.availability.syncToPit)) .map(keys) export const getBtcNetwork = state => getSupportedCoins(state).map(path(['BTC', 'config', 'network'])) @@ -61,10 +63,13 @@ export const getCoinAvailability = curry((state, coin) => getSupportedCoins(state).map(path([toUpper(coin), 'availability'])) ) export const getErc20CoinList = state => - getSupportedCoins(state).map(x => keys(filter(c => c.contractAddress, x))) + getSupportedCoins(state).map(x => + keys(filter((c: SupportedCoinType) => !!c.contractAddress, x)) + ) export const getCoinModel = (state, coin) => getSupportedCoins(state).map(x => prop(toUpper(coin), x)) export const getCoinIcons = (state, coin) => + // @ts-ignore getCoinModel(state, coin).map(path(['icons'])) // domains diff --git a/packages/blockchain-wallet-v4/src/redux/walletOptions/types.ts b/packages/blockchain-wallet-v4/src/redux/walletOptions/types.ts index f46c0ff6219..9fc41da6592 100644 --- a/packages/blockchain-wallet-v4/src/redux/walletOptions/types.ts +++ b/packages/blockchain-wallet-v4/src/redux/walletOptions/types.ts @@ -1,6 +1,9 @@ +import * as WalletOptions from '../../../../../config/mocks/wallet-options-v4.json' import { CoinType } from '../../types' import { IcoMoonType } from 'blockchain-info-components/src/Icons/Icomoon' +export type WalletOptionsType = typeof WalletOptions + export type SupportedCoinType = { availability: { exchangeFrom: boolean diff --git a/packages/blockchain-wallet-v4/src/types/index.ts b/packages/blockchain-wallet-v4/src/types/index.ts index c94175e4e84..d13bdc4646a 100755 --- a/packages/blockchain-wallet-v4/src/types/index.ts +++ b/packages/blockchain-wallet-v4/src/types/index.ts @@ -43,6 +43,7 @@ export { } export enum CoinTypeEnum { + ALGO, BTC, BCH, ETH, From c80cd7940dee9815fb9f2ec81dfb61c537e3b554 Mon Sep 17 00:00:00 2001 From: Philip London Date: Wed, 24 Jun 2020 19:01:57 +0200 Subject: [PATCH 03/34] feat(algo): core wip --- .../src/redux/common/algo/selectors.ts | 4 ++++ .../src/redux/common/selectors.js | 3 ++- .../src/redux/data/algo/actionTypes.ts | 9 ++++++++ .../src/redux/data/algo/actions.ts | 23 +++++++++++++++++++ .../src/redux/data/algo/reducers.ts | 16 +++++++++++++ .../src/redux/data/algo/types.ts | 11 +++++++++ .../redux/data/{reducers.js => reducers.ts} | 0 7 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 packages/blockchain-wallet-v4/src/redux/common/algo/selectors.ts create mode 100644 packages/blockchain-wallet-v4/src/redux/data/algo/actionTypes.ts create mode 100644 packages/blockchain-wallet-v4/src/redux/data/algo/actions.ts create mode 100644 packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts create mode 100644 packages/blockchain-wallet-v4/src/redux/data/algo/types.ts rename packages/blockchain-wallet-v4/src/redux/data/{reducers.js => reducers.ts} (100%) diff --git a/packages/blockchain-wallet-v4/src/redux/common/algo/selectors.ts b/packages/blockchain-wallet-v4/src/redux/common/algo/selectors.ts new file mode 100644 index 00000000000..364e7e80ed3 --- /dev/null +++ b/packages/blockchain-wallet-v4/src/redux/common/algo/selectors.ts @@ -0,0 +1,4 @@ +import { RootState } from 'data/rootReducer' + +export const getWalletTransactions = (state: RootState) => + state.dataPath.algo.transactions diff --git a/packages/blockchain-wallet-v4/src/redux/common/selectors.js b/packages/blockchain-wallet-v4/src/redux/common/selectors.js index 91c692e60be..af9899e47df 100755 --- a/packages/blockchain-wallet-v4/src/redux/common/selectors.js +++ b/packages/blockchain-wallet-v4/src/redux/common/selectors.js @@ -1,7 +1,8 @@ +import * as algo from './algo/selectors' import * as bch from './bch/selectors' import * as btc from './btc/selectors' import * as eth from './eth/selectors' import * as stx from './stx/selectors' import * as xlm from './xlm/selectors' -export { bch, btc, eth, stx, xlm } +export { algo, bch, btc, eth, stx, xlm } diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/actionTypes.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/actionTypes.ts new file mode 100644 index 00000000000..a04fe19ab0b --- /dev/null +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/actionTypes.ts @@ -0,0 +1,9 @@ +// FETCH_ALGO_TRANSACTIONS +export const FETCH_ALGO_TRANSACTIONS = '@CORE.FETCH_ALGO_TRANSACTIONS' +export const FETCH_ALGO_TRANSACTIONS_LOADING = + '@CORE.FETCH_ALGO_TRANSACTIONS_LOADING' +export const FETCH_ALGO_TRANSACTIONS_SUCCESS = + '@CORE.FETCH_ALGO_TRANSACTIONS_SUCCESS' +export const FETCH_ALGO_TRANSACTIONS_FAILURE = + '@CORE.FETCH_ALGO_TRANSACTIONS_FAILURE' +export const ALGO_TRANSACTIONS_AT_BOUND = '@CORE.ALGO_TRANSACTIONS_AT_BOUND' diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/actions.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/actions.ts new file mode 100644 index 00000000000..ada2d4ee42c --- /dev/null +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/actions.ts @@ -0,0 +1,23 @@ +import * as AT from './actionTypes' + +// FETCH_ALGO_TRANSACTIONS +export const fetchTransactions = (address, reset) => ({ + type: AT.FETCH_ALGO_TRANSACTIONS, + payload: { address, reset } +}) +export const fetchTransactionsLoading = reset => ({ + type: AT.FETCH_ALGO_TRANSACTIONS_LOADING, + payload: { reset } +}) +export const fetchTransactionsSuccess = (transactions, reset, isFinalPage) => ({ + type: AT.FETCH_ALGO_TRANSACTIONS_SUCCESS, + payload: { transactions, reset, isFinalPage } +}) +export const fetchTransactionsFailure = error => ({ + type: AT.FETCH_ALGO_TRANSACTIONS_FAILURE, + payload: error +}) +export const transactionsAtBound = payload => ({ + type: AT.ALGO_TRANSACTIONS_AT_BOUND, + payload +}) diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts new file mode 100644 index 00000000000..8cad0513866 --- /dev/null +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts @@ -0,0 +1,16 @@ +import { AlgoState } from './types' +import { Remote } from 'core' + +const INITIAL_STATE: AlgoState = { + rates: Remote.NotAsked, + transactions: [], + transactions_at_bound: false +} + +export const algoReducer = (state = INITIAL_STATE, action): AlgoState => { + switch (action.payload) { + default: { + return state + } + } +} diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/types.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/types.ts new file mode 100644 index 00000000000..dbdd429c9d6 --- /dev/null +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/types.ts @@ -0,0 +1,11 @@ +import { RatesType } from 'data/types' +import { RemoteDataType } from 'core/types' + +// state +export type AlgoState = { + rates: RemoteDataType + transactions: Array + transactions_at_bound: boolean +} + +// actions diff --git a/packages/blockchain-wallet-v4/src/redux/data/reducers.js b/packages/blockchain-wallet-v4/src/redux/data/reducers.ts similarity index 100% rename from packages/blockchain-wallet-v4/src/redux/data/reducers.js rename to packages/blockchain-wallet-v4/src/redux/data/reducers.ts From ae5a854d8f87a0633d8233da234f52fc524ba129 Mon Sep 17 00:00:00 2001 From: Philip London Date: Wed, 24 Jun 2020 19:19:30 +0200 Subject: [PATCH 04/34] fix(algo): conflicts --- packages/blockchain-info-components/src/Icons/Icomoon.ts | 1 - .../blockchain-wallet-v4/src/redux/common/algo/selectors.ts | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/blockchain-info-components/src/Icons/Icomoon.ts b/packages/blockchain-info-components/src/Icons/Icomoon.ts index d57263c0a6d..8668a486fdd 100644 --- a/packages/blockchain-info-components/src/Icons/Icomoon.ts +++ b/packages/blockchain-info-components/src/Icons/Icomoon.ts @@ -1,5 +1,4 @@ const IcoMoon = { - algo: '\\e939', 'alert-filled': '\\e900', algo: '\\e939', 'arrow-down': '\\e91d', diff --git a/packages/blockchain-wallet-v4/src/redux/common/algo/selectors.ts b/packages/blockchain-wallet-v4/src/redux/common/algo/selectors.ts index 364e7e80ed3..5718b7d5802 100644 --- a/packages/blockchain-wallet-v4/src/redux/common/algo/selectors.ts +++ b/packages/blockchain-wallet-v4/src/redux/common/algo/selectors.ts @@ -1,4 +1,4 @@ -import { RootState } from 'data/rootReducer' +// import { RootState } from 'data/rootReducer' -export const getWalletTransactions = (state: RootState) => - state.dataPath.algo.transactions +// export const getWalletTransactions = (state: RootState) => +// state.dataPath.algo.transactions From 1d983faa7cdf6aa420ca1d43e5ca054281fa0457 Mon Sep 17 00:00:00 2001 From: TheLeoB Date: Wed, 24 Jun 2020 14:57:34 -0400 Subject: [PATCH 05/34] fix(withdrawal-mins): wip 1, adding redux and selectors --- .../src/data/components/interest/actionTypes.ts | 1 + .../src/data/components/interest/actions.ts | 10 +++++++++- .../src/data/components/interest/reducers.ts | 17 ++++++++++++++++- .../src/data/components/interest/sagas.ts | 11 +++++++---- .../src/data/components/interest/selectors.ts | 13 +++++++++++++ .../src/data/components/interest/types.ts | 10 +++++++++- .../modals/Interest/WithdrawalForm/index.tsx | 2 ++ .../modals/Interest/WithdrawalForm/selectors.ts | 16 ++++++++++++++-- .../WithdrawalForm/template.success.tsx | 1 - .../src/network/api/interest/index.ts | 11 ++++++++++- .../src/network/api/interest/types.ts | 5 +++++ 11 files changed, 86 insertions(+), 11 deletions(-) diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actionTypes.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actionTypes.ts index 253e5950801..144f61b37aa 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actionTypes.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actionTypes.ts @@ -34,6 +34,7 @@ export const FETCH_INTEREST_LIMITS_LOADING = '@EVENT.INTEREST.FETCH_INTEREST_LIMITS_LOADING' export const FETCH_INTEREST_LIMITS_SUCCESS = '@EVENT.INTEREST.FETCH_INTEREST_LIMITS_SUCCESS' +export const SET_WITHDRAWAL_MINIMUMS = '@EVENT.INTEREST.SET_WITHDRAWAL_MINIMUMS' // ACCOUNT export const FETCH_INTEREST_PAYMENT_ACCOUNT = diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actions.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actions.ts index 6a9e56d2d77..e454267f4a7 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actions.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actions.ts @@ -6,7 +6,8 @@ import { InterestInstrumentsType, InterestLimitsType, InterestRateType, - InterestTransactionType + InterestTransactionType, + WithdrawalMinimumType } from 'core/network/api/interest/types' import * as AT from './actionTypes' @@ -100,6 +101,13 @@ export const fetchInterestLimitsSuccess = ( payload: { interestLimits } }) +export const setWithdrawalMinimimums = ( + withdrawalMinimums: WithdrawalMinimumType +) => ({ + type: AT.SET_WITHDRAWAL_MINIMUMS, + payload: { withdrawalMinimums } +}) + // ACCOUNT export const fetchInterestAccount = (coin?: CoinType) => ({ type: AT.FETCH_INTEREST_PAYMENT_ACCOUNT, diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/reducers.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/reducers.ts index 010d5d090a6..0ba13702c61 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/reducers.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/reducers.ts @@ -26,7 +26,17 @@ const INITIAL_STATE: InterestState = { name: 'ACCOUNT_SUMMARY' }, transactions: [], - transactionsNextPage: null + transactionsNextPage: null, + withdrawalMinimums: [ + { + symbol: 'BTC', + value: '.0005' + }, + { + symbol: 'ETH', + value: '.002' + } + ] } export function interestReducer ( @@ -200,6 +210,11 @@ export function interestReducer ( payment: Remote.Success(payload.payment) } + case AT.SET_WITHDRAWAL_MINIMUMS: + return { + ...state, + withdrawalMinimums: payload.withdrawalMinimums.minAmounts + } case AT.SHOW_INTEREST_MODAL: return { ...state, diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.ts index 22b73db35e7..b57643d148c 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.ts @@ -50,10 +50,9 @@ export default ({ return yield put( A.fetchInterestBalanceSuccess(DEFAULT_INTEREST_BALANCE) ) - // const response: ReturnType = yield call( - // api.getInterestAccountBalance - // ) - const response = yield call(api.getInterestAccountBalance) + const response: ReturnType = yield call( + api.getInterestAccountBalance + ) yield put(A.fetchInterestBalanceSuccess(response)) } catch (e) { const error = errorHandler(e) @@ -247,6 +246,10 @@ export default ({ payload }: ReturnType) { try { + const response: ReturnType = yield call( + api.getWithdrawalMinsAndFees + ) + yield put(A.setWithdrawalMinimimums(response)) // init form for analytics yield put(initialize('interestWithdrawalForm', {})) } catch (e) { diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/selectors.ts index 23d649c20ed..c86b094cc3b 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/selectors.ts @@ -1,4 +1,6 @@ import { FiatType, RemoteDataType } from 'core/types' + +import { propEq } from 'ramda' import { Remote } from 'blockchain-wallet-v4/src' import { RootState } from 'data/rootReducer' import { selectors } from 'data' @@ -69,3 +71,14 @@ export const getWalletCurrency = ( ): RemoteDataType => { return selectors.core.settings.getCurrency(state) } + +export const getWithdrawalMinimums = (state: RootState, coin) => + state.components.interest.withdrawalMinimums.find(propEq('symbol', coin)) + +// export const getWithdrawalMinimumCoin: ( +// state: RootState, +// coin: CoinType +// ) => WithdrawalMinimumType = (state, coin) => +// createSelector(getWithdrawalMinimums, withdrawalMins => { +// return find(propEq('symbol', coin))(withdrawalMins) +// })(state) diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/types.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/types.ts index 0dc9ee5bbfe..3050cd79138 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/types.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/types.ts @@ -10,7 +10,8 @@ import { InterestRateType, InterestTransactionType, PaymentValue, - RemoteDataType + RemoteDataType, + WithdrawalMinimumType } from 'core/types' // @@ -70,6 +71,7 @@ export interface InterestState { } transactions: Array transactionsNextPage: string | null + withdrawalMinimums: WithdrawalMinimumType } // @@ -129,6 +131,11 @@ interface FetchInterestLimitsSuccess { type: typeof AT.FETCH_INTEREST_LIMITS_SUCCESS } +interface SetWithdrawalMinimums { + payload: { withdrawalMinimums: WithdrawalMinimumType } + type: typeof AT.SET_WITHDRAWAL_MINIMUMS +} + // ACCOUNT interface fetchInterestAccountFailure { payload: { error: string } @@ -276,6 +283,7 @@ export type InterestActionTypes = | RequestWithdrawal | RouteToTxHash | SetInterestStep + | SetWithdrawalMinimums | ShowInterestModal | SetCoinDisplay | SetDepositLimitsAction diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/index.tsx b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/index.tsx index 912fec70352..77a1072e247 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/index.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/index.tsx @@ -10,6 +10,7 @@ import { InterestLimitsType, RemoteDataType, SupportedCoinsType + // WithdrawalMinimumType } from 'core/types' import { RatesType } from 'data/types' import DataError from 'components/DataError' @@ -78,6 +79,7 @@ export type SuccessStateType = { rates: RatesType supportedCoins: SupportedCoinsType walletCurrency: FiatType + withdrawalMinimums: any } type LinkStatePropsType = { diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/selectors.ts index 22b44a2ddfb..14eecf1bdf3 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/selectors.ts @@ -10,8 +10,11 @@ export const getData = state => { ) const ratesR = selectors.components.interest.getRates(state) const supportedCoinsR = selectors.core.walletOptions.getSupportedCoins(state) - const walletCurrencyR = selectors.core.settings.getCurrency(state) + const withdrawalMinimumsR = selectors.components.interest.getWithdrawalMinimums( + state, + coin + ) const interestLimitsR = selectors.components.interest.getInterestLimits(state) return lift( @@ -20,6 +23,7 @@ export const getData = state => { rates, supportedCoins, walletCurrency, + withdrawalMinimums, interestLimits ) => ({ accountBalances, @@ -31,7 +35,15 @@ export const getData = state => { rates, supportedCoins, walletCurrency, + withdrawalMinimums, interestLimits }) - )(accountBalancesR, ratesR, supportedCoinsR, walletCurrencyR, interestLimitsR) + )( + accountBalancesR, + ratesR, + supportedCoinsR, + walletCurrencyR, + withdrawalMinimumsR, + interestLimitsR + ) } diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/template.success.tsx b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/template.success.tsx index 1fbfbf52581..ca168fe31e0 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/template.success.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/template.success.tsx @@ -103,7 +103,6 @@ const WithdrawalForm: React.FC & rates ) if (!account) return null - return submitting ? ( diff --git a/packages/blockchain-wallet-v4/src/network/api/interest/index.ts b/packages/blockchain-wallet-v4/src/network/api/interest/index.ts index 86be1b5e68e..f8047a43e69 100644 --- a/packages/blockchain-wallet-v4/src/network/api/interest/index.ts +++ b/packages/blockchain-wallet-v4/src/network/api/interest/index.ts @@ -7,7 +7,8 @@ import { InterestLimitsType, InterestRateType, InterestTransactionResponseType, - InterestWithdrawalResponseType + InterestWithdrawalResponseType, + WithdrawalMinimumType } from './types' export default ({ nabuUrl, authorizedGet, authorizedPost }) => { @@ -68,6 +69,13 @@ export default ({ nabuUrl, authorizedGet, authorizedPost }) => { endPoint: `/payments/accounts/savings?ccy=${ccy}` }) + const getWithdrawalMinsAndFees = (): WithdrawalMinimumType => + authorizedGet({ + url: nabuUrl, + ignoreQueryParams: true, + endPoint: '/payments/withdrawals/fees?product=SAVINGS' + }) + const initiateInterestWithdrawal = ( amount: number, currency: CoinType, @@ -92,6 +100,7 @@ export default ({ nabuUrl, authorizedGet, authorizedPost }) => { getInterestAccount, getInterestSavingsRate, getInterestTransactions, + getWithdrawalMinsAndFees, initiateInterestWithdrawal } } diff --git a/packages/blockchain-wallet-v4/src/network/api/interest/types.ts b/packages/blockchain-wallet-v4/src/network/api/interest/types.ts index 5d17e34d1f7..6151db4db9d 100644 --- a/packages/blockchain-wallet-v4/src/network/api/interest/types.ts +++ b/packages/blockchain-wallet-v4/src/network/api/interest/types.ts @@ -76,3 +76,8 @@ export type InterestWithdrawalResponseType = { state: string user: string } + +export type WithdrawalMinimumType = Array<{ + symbol: CoinType | FiatType + value: string +}> From a390efe1db46f5f5103bfeca5e976791a35e83f7 Mon Sep 17 00:00:00 2001 From: TheLeoB Date: Wed, 24 Jun 2020 16:13:47 -0400 Subject: [PATCH 06/34] fix(widrawals): remote data type and add to validation template --- .../data/components/interest/actionTypes.ts | 7 ++++- .../src/data/components/interest/actions.ts | 14 +++++++-- .../src/data/components/interest/reducers.ts | 30 +++++++++++-------- .../src/data/components/interest/sagas.ts | 10 +++++-- .../src/data/components/interest/selectors.ts | 14 ++------- .../src/data/components/interest/types.ts | 18 ++++++++--- .../modals/Interest/WithdrawalForm/index.tsx | 12 ++++---- .../Interest/WithdrawalForm/selectors.ts | 3 +- .../Interest/WithdrawalForm/validation.tsx | 7 ++--- 9 files changed, 70 insertions(+), 45 deletions(-) diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actionTypes.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actionTypes.ts index 144f61b37aa..f35b9905fa6 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actionTypes.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actionTypes.ts @@ -34,7 +34,12 @@ export const FETCH_INTEREST_LIMITS_LOADING = '@EVENT.INTEREST.FETCH_INTEREST_LIMITS_LOADING' export const FETCH_INTEREST_LIMITS_SUCCESS = '@EVENT.INTEREST.FETCH_INTEREST_LIMITS_SUCCESS' -export const SET_WITHDRAWAL_MINIMUMS = '@EVENT.INTEREST.SET_WITHDRAWAL_MINIMUMS' +export const SET_WITHDRAWAL_MINIMUMS_FAILURE = + '@EVENT.INTEREST.SET_WITHDRAWAL_MINIMUMS_FAILURE' +export const SET_WITHDRAWAL_MINIMUMS_LOADING = + '@EVENT.INTEREST.SET_WITHDRAWAL_MINIMUMS_LOADING' +export const SET_WITHDRAWAL_MINIMUMS_SUCCESS = + '@EVENT.INTEREST.SET_WITHDRAWAL_MINIMUMS_SUCCESS' // ACCOUNT export const FETCH_INTEREST_PAYMENT_ACCOUNT = diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actions.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actions.ts index e454267f4a7..f34c50ad365 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actions.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/actions.ts @@ -101,10 +101,20 @@ export const fetchInterestLimitsSuccess = ( payload: { interestLimits } }) -export const setWithdrawalMinimimums = ( +export const setWithdrawalMinimimumsFailure = (error: string) => ({ + type: AT.SET_WITHDRAWAL_MINIMUMS_FAILURE, + payload: { + error + } +}) + +export const setWithdrawalMinimimumsLoading = () => ({ + type: AT.SET_WITHDRAWAL_MINIMUMS_LOADING +}) +export const setWithdrawalMinimimumsSuccess = ( withdrawalMinimums: WithdrawalMinimumType ) => ({ - type: AT.SET_WITHDRAWAL_MINIMUMS, + type: AT.SET_WITHDRAWAL_MINIMUMS_SUCCESS, payload: { withdrawalMinimums } }) diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/reducers.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/reducers.ts index 0ba13702c61..e05071624e2 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/reducers.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/reducers.ts @@ -27,16 +27,7 @@ const INITIAL_STATE: InterestState = { }, transactions: [], transactionsNextPage: null, - withdrawalMinimums: [ - { - symbol: 'BTC', - value: '.0005' - }, - { - symbol: 'ETH', - value: '.002' - } - ] + withdrawalMinimums: Remote.NotAsked } export function interestReducer ( @@ -209,11 +200,24 @@ export function interestReducer ( ...state, payment: Remote.Success(payload.payment) } - - case AT.SET_WITHDRAWAL_MINIMUMS: + case AT.SET_WITHDRAWAL_MINIMUMS_FAILURE: { + return { + ...state, + withdrawalMinimums: Remote.Failure(payload.error) + } + } + case AT.SET_WITHDRAWAL_MINIMUMS_LOADING: { + return { + ...state, + withdrawalMinimums: Remote.Loading + } + } + case AT.SET_WITHDRAWAL_MINIMUMS_SUCCESS: return { ...state, - withdrawalMinimums: payload.withdrawalMinimums.minAmounts + withdrawalMinimums: Remote.Success( + payload.withdrawalMinimums.minAmounts + ) } case AT.SHOW_INTEREST_MODAL: return { diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.ts index b57643d148c..1175bb0d1b3 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.ts @@ -249,8 +249,14 @@ export default ({ const response: ReturnType = yield call( api.getWithdrawalMinsAndFees ) - yield put(A.setWithdrawalMinimimums(response)) - // init form for analytics + yield put(A.setWithdrawalMinimimumsLoading()) + yield put(A.setWithdrawalMinimimumsSuccess(response)) + // setWithdrawalMinimimumsSuccess init form for analytics + } catch (e) { + const error = errorHandler(e) + yield put(A.setWithdrawalMinimimumsFailure(error)) + } + try { yield put(initialize('interestWithdrawalForm', {})) } catch (e) { // TODO? diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/selectors.ts index c86b094cc3b..a37895bf214 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/selectors.ts @@ -1,6 +1,4 @@ import { FiatType, RemoteDataType } from 'core/types' - -import { propEq } from 'ramda' import { Remote } from 'blockchain-wallet-v4/src' import { RootState } from 'data/rootReducer' import { selectors } from 'data' @@ -72,13 +70,5 @@ export const getWalletCurrency = ( return selectors.core.settings.getCurrency(state) } -export const getWithdrawalMinimums = (state: RootState, coin) => - state.components.interest.withdrawalMinimums.find(propEq('symbol', coin)) - -// export const getWithdrawalMinimumCoin: ( -// state: RootState, -// coin: CoinType -// ) => WithdrawalMinimumType = (state, coin) => -// createSelector(getWithdrawalMinimums, withdrawalMins => { -// return find(propEq('symbol', coin))(withdrawalMins) -// })(state) +export const getWithdrawalMinimums = (state: RootState) => + state.components.interest.withdrawalMinimums diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/types.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/types.ts index 3050cd79138..7205c9eb7a1 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/types.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/types.ts @@ -71,7 +71,7 @@ export interface InterestState { } transactions: Array transactionsNextPage: string | null - withdrawalMinimums: WithdrawalMinimumType + withdrawalMinimums: RemoteDataType } // @@ -131,9 +131,17 @@ interface FetchInterestLimitsSuccess { type: typeof AT.FETCH_INTEREST_LIMITS_SUCCESS } -interface SetWithdrawalMinimums { +interface SetWithdrawalMinimumsFailure { + payload: { error: string } + type: typeof AT.SET_WITHDRAWAL_MINIMUMS_FAILURE +} + +interface SetWithdrawalMinimumsLoading { + type: typeof AT.SET_WITHDRAWAL_MINIMUMS_LOADING +} +interface SetWithdrawalMinimumsSuccess { payload: { withdrawalMinimums: WithdrawalMinimumType } - type: typeof AT.SET_WITHDRAWAL_MINIMUMS + type: typeof AT.SET_WITHDRAWAL_MINIMUMS_SUCCESS } // ACCOUNT @@ -283,7 +291,9 @@ export type InterestActionTypes = | RequestWithdrawal | RouteToTxHash | SetInterestStep - | SetWithdrawalMinimums + | SetWithdrawalMinimumsFailure + | SetWithdrawalMinimumsLoading + | SetWithdrawalMinimumsSuccess | ShowInterestModal | SetCoinDisplay | SetDepositLimitsAction diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/index.tsx b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/index.tsx index 77a1072e247..99b7dc21117 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/index.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/index.tsx @@ -9,8 +9,8 @@ import { InterestAccountBalanceType, InterestLimitsType, RemoteDataType, - SupportedCoinsType - // WithdrawalMinimumType + SupportedCoinsType, + WithdrawalMinimumType } from 'core/types' import { RatesType } from 'data/types' import DataError from 'components/DataError' @@ -21,7 +21,8 @@ import WithdrawalForm from './template.success' class WithdrawalFormContainer extends PureComponent { componentDidMount () { - this.props.interestActions.initializeWithdrawalForm('BTC') + const { coin } = this.props + this.props.interestActions.initializeWithdrawalForm(coin) } handleDisplayToggle = isCoin => { @@ -39,7 +40,8 @@ class WithdrawalFormContainer extends PureComponent { } handleRefresh = () => { - this.props.interestActions.initializeWithdrawalForm('BTC') + const { coin } = this.props + this.props.interestActions.initializeWithdrawalForm(coin) } render () { @@ -79,7 +81,7 @@ export type SuccessStateType = { rates: RatesType supportedCoins: SupportedCoinsType walletCurrency: FiatType - withdrawalMinimums: any + withdrawalMinimums: WithdrawalMinimumType } type LinkStatePropsType = { diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/selectors.ts index 14eecf1bdf3..9888a05cb17 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/selectors.ts @@ -12,8 +12,7 @@ export const getData = state => { const supportedCoinsR = selectors.core.walletOptions.getSupportedCoins(state) const walletCurrencyR = selectors.core.settings.getCurrency(state) const withdrawalMinimumsR = selectors.components.interest.getWithdrawalMinimums( - state, - coin + state ) const interestLimitsR = selectors.components.interest.getInterestLimits(state) diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/validation.tsx b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/validation.tsx index 5947725b17e..645b2f9ac7c 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/validation.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/validation.tsx @@ -1,6 +1,7 @@ import { convertBaseToStandard } from 'data/components/exchange/services' import { Exchange } from 'blockchain-wallet-v4/src' import { FormattedMessage } from 'react-intl' +import { propEq } from 'ramda' import BigNumber from 'bignumber.js' import React from 'react' @@ -32,10 +33,8 @@ export const minimumWithdrawalAmount = ( allValues: InterestWithdrawalFormType, props: any ) => { - // withdrawal min across all products .0005 BTC - const { coin, displayCoin, rates, walletCurrency } = props - // todo: remove hardcode of this value, use min endpoint - const MIN_WITHDRAWAL = coin === 'BTC' ? 0.0005 : 0.002 + const { coin, displayCoin, rates, walletCurrency, withdrawalMinimums } = props + const MIN_WITHDRAWAL = withdrawalMinimums.find(propEq('symbol', coin)).value const withdrawalMin = displayCoin ? MIN_WITHDRAWAL : Exchange.convertCoinToFiat(MIN_WITHDRAWAL, coin, walletCurrency, rates) From 6de14d6d45c7340302505bb1afd3ba0e0ffb6862 Mon Sep 17 00:00:00 2001 From: TheLeoB Date: Wed, 24 Jun 2020 18:15:04 -0400 Subject: [PATCH 07/34] feat(eth-interest): add interest wallet to eth balance dropdown --- .../Form/SelectBoxEthAddresses/selectors.ts | 36 +++++++++++++++++-- .../WalletBalanceDropdown/selectors.ts | 3 +- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxEthAddresses/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxEthAddresses/selectors.ts index ce6ab56fd03..9cd4285a7ff 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxEthAddresses/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxEthAddresses/selectors.ts @@ -1,8 +1,9 @@ import { ADDRESS_TYPES } from 'blockchain-wallet-v4/src/redux/payment/btc/utils' // @ts-ignore import { concat, curry, filter, has, map, prop, reduce, sequence } from 'ramda' -import { Erc20CoinType } from 'core/types' +import { Erc20CoinType , InterestAccountBalanceType } from 'core/types' import { Exchange, Remote } from 'blockchain-wallet-v4/src' + import { selectors } from 'data' export const getEthData = ( @@ -12,13 +13,15 @@ export const getEthData = ( excludeLockbox?: boolean includeCustodial?: boolean includeExchangeAddress?: boolean + includeInterest?: boolean } ) => { const { exclude = [], excludeLockbox, includeExchangeAddress, - includeCustodial + includeCustodial, + includeInterest } = ownProps const displayEthFixed = data => { const etherAmount = Exchange.convertEtherToEther(data) @@ -49,6 +52,16 @@ export const getEthData = ( })})` ) } + const buildInterestDisplay = (x: InterestAccountBalanceType['ETH']) => { + return ( + `ETH Interest Wallet` + + ` (${Exchange.displayEtherToEther({ + value: x ? x.balance : 0, + fromUnit: 'WEI', + toUnit: 'ETH' + })})` + ) + } // @ts-ignore const excluded = filter(x => !exclude.includes(x.label)) const toDropdown = map(x => ({ label: buildDisplay(x), value: x })) @@ -65,6 +78,17 @@ export const getEthData = ( } ] + const toInterestDropdown = x => [ + { + label: buildInterestDisplay(x), + value: { + ...x, + type: ADDRESS_TYPES.INTEREST, + label: 'ETH Interest Wallet' + } + } + ] + const exchangeAddress = selectors.components.send.getPaymentsAccountExchange( 'ETH', state @@ -88,6 +112,13 @@ export const getEthData = ( .map(toCustodialDropdown) .map(toGroup('Custodial Wallet')) : Remote.of([]), + includeInterest + ? selectors.components.interest + .getInterestAccountBalance(state) + .map(prop('ETH')) + .map(toInterestDropdown) + .map(toGroup('Interest Wallet')) + : Remote.of([]), excludeLockbox ? Remote.of([]) : selectors.core.common.eth @@ -141,6 +172,7 @@ export const getErc20Data = ( })})` ) } + // @ts-ignore const excluded = filter(x => !exclude.includes(x.label)) const buildDisplay = wallet => { diff --git a/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts index 2d89e080fe2..5084b9a15b6 100644 --- a/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts @@ -54,7 +54,8 @@ export const getData = ( case 'ETH': addressDataR = getEthAddressData(state, { excludeLockbox: true, - includeCustodial: true + includeCustodial: true, + includeInterest: true }) balanceDataR = balanceSelectors.getEthBalance(state) coinRatesR = selectors.core.data.eth.getRates(state) From ffb5efdc3613059a9627f9860fc28c79fcabaf3b Mon Sep 17 00:00:00 2001 From: Philip London Date: Thu, 25 Jun 2020 10:47:00 +0200 Subject: [PATCH 08/34] feat(algo): set up basic dataPath redux actions, types, and reducer --- .../src/redux/common/algo/selectors.ts | 6 ++-- .../data/{actionTypes.js => actionTypes.ts} | 3 +- .../src/redux/data/{actions.js => actions.ts} | 3 +- .../src/redux/data/algo/reducers.ts | 28 +++++++++++++++++-- .../src/redux/data/algo/selectors.ts | 5 ++++ .../src/redux/data/algo/types.ts | 23 +++++++++++++++ .../src/redux/data/reducers.ts | 2 ++ .../data/{sagaRegister.js => sagaRegister.ts} | 2 +- .../redux/data/{selectors.js => selectors.ts} | 3 +- .../src/redux/rootSaga.ts | 2 +- 10 files changed, 66 insertions(+), 11 deletions(-) rename packages/blockchain-wallet-v4/src/redux/data/{actionTypes.js => actionTypes.ts} (73%) rename packages/blockchain-wallet-v4/src/redux/data/{actions.js => actions.ts} (72%) create mode 100644 packages/blockchain-wallet-v4/src/redux/data/algo/selectors.ts rename packages/blockchain-wallet-v4/src/redux/data/{sagaRegister.js => sagaRegister.ts} (91%) rename packages/blockchain-wallet-v4/src/redux/data/{selectors.js => selectors.ts} (70%) diff --git a/packages/blockchain-wallet-v4/src/redux/common/algo/selectors.ts b/packages/blockchain-wallet-v4/src/redux/common/algo/selectors.ts index 5718b7d5802..364e7e80ed3 100644 --- a/packages/blockchain-wallet-v4/src/redux/common/algo/selectors.ts +++ b/packages/blockchain-wallet-v4/src/redux/common/algo/selectors.ts @@ -1,4 +1,4 @@ -// import { RootState } from 'data/rootReducer' +import { RootState } from 'data/rootReducer' -// export const getWalletTransactions = (state: RootState) => -// state.dataPath.algo.transactions +export const getWalletTransactions = (state: RootState) => + state.dataPath.algo.transactions diff --git a/packages/blockchain-wallet-v4/src/redux/data/actionTypes.js b/packages/blockchain-wallet-v4/src/redux/data/actionTypes.ts similarity index 73% rename from packages/blockchain-wallet-v4/src/redux/data/actionTypes.js rename to packages/blockchain-wallet-v4/src/redux/data/actionTypes.ts index 75d7db082b3..a81c9ddcec8 100755 --- a/packages/blockchain-wallet-v4/src/redux/data/actionTypes.js +++ b/packages/blockchain-wallet-v4/src/redux/data/actionTypes.ts @@ -1,3 +1,4 @@ +import * as algo from './algo/actionTypes' import * as bch from './bch/actionTypes' import * as btc from './btc/actionTypes' import * as eth from './eth/actionTypes' @@ -5,4 +6,4 @@ import * as misc from './misc/actionTypes' import * as stx from './stx/actionTypes' import * as xlm from './xlm/actionTypes' -export { bch, btc, eth, misc, stx, xlm } +export { algo, bch, btc, eth, misc, stx, xlm } diff --git a/packages/blockchain-wallet-v4/src/redux/data/actions.js b/packages/blockchain-wallet-v4/src/redux/data/actions.ts similarity index 72% rename from packages/blockchain-wallet-v4/src/redux/data/actions.js rename to packages/blockchain-wallet-v4/src/redux/data/actions.ts index 78be158f837..e0b5e5eebf9 100755 --- a/packages/blockchain-wallet-v4/src/redux/data/actions.js +++ b/packages/blockchain-wallet-v4/src/redux/data/actions.ts @@ -1,3 +1,4 @@ +import * as algo from './algo/actions' import * as bch from './bch/actions' import * as btc from './btc/actions' import * as eth from './eth/actions' @@ -5,4 +6,4 @@ import * as misc from './misc/actions' import * as stx from './stx/actions' import * as xlm from './xlm/actions' -export { bch, btc, eth, misc, stx, xlm } +export { algo, bch, btc, eth, misc, stx, xlm } diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts index 8cad0513866..d55ce84fad2 100644 --- a/packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts @@ -1,4 +1,6 @@ -import { AlgoState } from './types' +import * as AT from './actionTypes' + +import { AlgoActionTypes, AlgoState } from './types' import { Remote } from 'core' const INITIAL_STATE: AlgoState = { @@ -7,10 +9,30 @@ const INITIAL_STATE: AlgoState = { transactions_at_bound: false } -export const algoReducer = (state = INITIAL_STATE, action): AlgoState => { - switch (action.payload) { +export const algoReducer = ( + state = INITIAL_STATE, + action: AlgoActionTypes +): AlgoState => { + switch (action.type) { + case AT.FETCH_ALGO_TRANSACTIONS_FAILURE: + return { + ...state, + transactions: [Remote.Failure(action.payload)] + } + case AT.FETCH_ALGO_TRANSACTIONS_LOADING: + return { + ...state, + transactions: [...state.transactions, Remote.Loading()] + } + case AT.FETCH_ALGO_TRANSACTIONS_SUCCESS: + return { + ...state, + transactions: [...state.transactions, Remote.Success(action.payload)] + } default: { return state } } } + +export default algoReducer diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/selectors.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/selectors.ts new file mode 100644 index 00000000000..6c6320ba234 --- /dev/null +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/selectors.ts @@ -0,0 +1,5 @@ +import { RootState } from 'data/rootReducer' + +export const getTransactions = (state: RootState) => { + return state.dataPath.algo.transactions +} diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/types.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/types.ts index dbdd429c9d6..4622d0c1120 100644 --- a/packages/blockchain-wallet-v4/src/redux/data/algo/types.ts +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/types.ts @@ -1,6 +1,8 @@ import { RatesType } from 'data/types' import { RemoteDataType } from 'core/types' +import * as AT from './actionTypes' + // state export type AlgoState = { rates: RemoteDataType @@ -9,3 +11,24 @@ export type AlgoState = { } // actions +interface FetchTransactionsFailureActionType { + payload: string + type: typeof AT.FETCH_ALGO_TRANSACTIONS_FAILURE +} +interface FetchTransactionsLoadingActionType { + payload: { reset: boolean } + type: typeof AT.FETCH_ALGO_TRANSACTIONS_LOADING +} +interface FetchTransactionsSuccessActionType { + payload: { + isFinalPage: boolean + reset: boolean + transactions: AlgoState['transactions'] + } + type: typeof AT.FETCH_ALGO_TRANSACTIONS_SUCCESS +} + +export type AlgoActionTypes = + | FetchTransactionsFailureActionType + | FetchTransactionsLoadingActionType + | FetchTransactionsSuccessActionType diff --git a/packages/blockchain-wallet-v4/src/redux/data/reducers.ts b/packages/blockchain-wallet-v4/src/redux/data/reducers.ts index f75df7343d9..6a6db89bbda 100755 --- a/packages/blockchain-wallet-v4/src/redux/data/reducers.ts +++ b/packages/blockchain-wallet-v4/src/redux/data/reducers.ts @@ -1,4 +1,5 @@ import { combineReducers } from 'redux' +import algo from './algo/reducers' import bch from './bch/reducers' import btc from './btc/reducers' import eth from './eth/reducers' @@ -6,6 +7,7 @@ import misc from './misc/reducers' import xlm from './xlm/reducers' const dataReducer = combineReducers({ + algo, bch, btc, eth, diff --git a/packages/blockchain-wallet-v4/src/redux/data/sagaRegister.js b/packages/blockchain-wallet-v4/src/redux/data/sagaRegister.ts similarity index 91% rename from packages/blockchain-wallet-v4/src/redux/data/sagaRegister.js rename to packages/blockchain-wallet-v4/src/redux/data/sagaRegister.ts index 05a8270b048..25ac0a3b060 100755 --- a/packages/blockchain-wallet-v4/src/redux/data/sagaRegister.js +++ b/packages/blockchain-wallet-v4/src/redux/data/sagaRegister.ts @@ -6,7 +6,7 @@ import misc from './misc/sagaRegister' import stx from './stx/sagaRegister' import xlm from './xlm/sagaRegister' -export default ({ api, options, networks }) => +export default ({ api, networks }) => function * coreDataSaga () { yield fork(bch({ api })) yield fork(btc({ api })) diff --git a/packages/blockchain-wallet-v4/src/redux/data/selectors.js b/packages/blockchain-wallet-v4/src/redux/data/selectors.ts similarity index 70% rename from packages/blockchain-wallet-v4/src/redux/data/selectors.js rename to packages/blockchain-wallet-v4/src/redux/data/selectors.ts index 4206455bdb4..f5d3d8e698a 100755 --- a/packages/blockchain-wallet-v4/src/redux/data/selectors.js +++ b/packages/blockchain-wallet-v4/src/redux/data/selectors.ts @@ -1,7 +1,8 @@ +import * as algo from './algo/selectors' import * as bch from './bch/selectors' import * as btc from './btc/selectors' import * as eth from './eth/selectors' import * as misc from './misc/selectors' import * as xlm from './xlm/selectors' -export { bch, btc, eth, xlm, misc } +export { algo, bch, btc, eth, xlm, misc } diff --git a/packages/blockchain-wallet-v4/src/redux/rootSaga.ts b/packages/blockchain-wallet-v4/src/redux/rootSaga.ts index ea6c08ec157..ed00b1f0145 100755 --- a/packages/blockchain-wallet-v4/src/redux/rootSaga.ts +++ b/packages/blockchain-wallet-v4/src/redux/rootSaga.ts @@ -8,7 +8,7 @@ import walletOptions from './walletOptions/sagaRegister' export default ({ api, networks, options }) => function * coreSaga () { yield all([ - fork(data({ api, options, networks })), + fork(data({ api, networks })), fork(kvStore({ api, networks })), fork(walletOptions({ options })), fork(settings({ api })), From 8419ea8b65f11742bb63394455cb617019317fbf Mon Sep 17 00:00:00 2001 From: Philip London Date: Thu, 25 Jun 2020 13:14:38 +0200 Subject: [PATCH 09/34] feat(algo): tx list page --- .../components/Balances/wallet/selectors.ts | 29 +++ .../components/Display/FiatDisplay/index.tsx | 3 +- .../src/data/components/actionTypes.ts | 2 + .../src/data/components/actions.ts | 2 + .../algoTransactions/actionTypes.ts | 5 + .../components/algoTransactions/actions.ts | 7 + .../algoTransactions/sagaRegister.ts | 18 ++ .../data/components/algoTransactions/sagas.ts | 26 +++ .../src/data/components/sagaRegister.js | 2 + .../src/data/components/sagas.js | 2 + .../WalletBalanceDropdown/selectors.ts | 2 + .../src/exchange/index.ts | 171 +++++++++++++++++- .../src/network/api/coin/index.ts | 13 ++ .../src/network/api/index.ts | 3 + .../src/redux/data/algo/actionTypes.ts | 6 + .../src/redux/data/algo/actions.ts | 24 ++- .../src/redux/data/algo/reducers.ts | 19 +- .../src/redux/data/algo/sagaRegister.ts | 11 ++ .../src/redux/data/algo/sagas.ts | 21 +++ .../src/redux/data/algo/selectors.ts | 4 + .../src/redux/data/algo/types.ts | 16 ++ .../src/redux/data/sagaRegister.ts | 2 + .../src/redux/data/sagas.ts | 2 + 23 files changed, 381 insertions(+), 9 deletions(-) create mode 100644 packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/actionTypes.ts create mode 100644 packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/actions.ts create mode 100644 packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/sagaRegister.ts create mode 100644 packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/sagas.ts create mode 100644 packages/blockchain-wallet-v4/src/network/api/coin/index.ts create mode 100644 packages/blockchain-wallet-v4/src/redux/data/algo/sagaRegister.ts create mode 100644 packages/blockchain-wallet-v4/src/redux/data/algo/sagas.ts diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Balances/wallet/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/components/Balances/wallet/selectors.ts index b0f6d1aeeed..77250b4b282 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Balances/wallet/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/components/Balances/wallet/selectors.ts @@ -172,6 +172,17 @@ export const getXlmBalance = createDeepEqualSelector( } ) +export const getAlgoBalance = createDeepEqualSelector( + [selectors.components.simpleBuy.getSBBalances], + (sbBalancesR: RemoteDataType) => { + const sbAlgoBalance = sbBalancesR.getOrElse({ ALGO: { available: '0' } }) + .ALGO + const sbBalance = sbAlgoBalance ? sbAlgoBalance.available : '0' + + return Remote.of(new BigNumber(sbBalance)) + } +) + export const getBtcBalanceInfo = createDeepEqualSelector( [ getBtcBalance, @@ -267,6 +278,24 @@ export const getXlmBalanceInfo = createDeepEqualSelector( } ) +export const getAlgoBalanceInfo = createDeepEqualSelector( + [ + getAlgoBalance, + selectors.core.data.algo.getRates, + selectors.core.settings.getCurrency + ], + (algoBalanceR, algoRatesR, currencyR) => { + const transform = (value, rates, toCurrency) => + Exchange.convertAlgoToFiat({ + value, + fromUnit: 'mALGO', + toCurrency, + rates + }).value + return lift(transform)(algoBalanceR, algoRatesR, currencyR) + } +) + export const getTotalBalance = createDeepEqualSelector( [ getBchBalanceInfo, diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/index.tsx b/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/index.tsx index f99414970e2..3b7913ef36c 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/index.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/index.tsx @@ -48,7 +48,8 @@ const mapDispatchToProps = dispatch => ({ bchActions: bindActionCreators(actions.core.data.bch, dispatch), btcActions: bindActionCreators(actions.core.data.btc, dispatch), ethActions: bindActionCreators(actions.core.data.eth, dispatch), - xlmActions: bindActionCreators(actions.core.data.xlm, dispatch) + xlmActions: bindActionCreators(actions.core.data.xlm, dispatch), + algoActions: bindActionCreators(actions.core.data.algo, dispatch) }) const connector = connect(mapStateToProps, mapDispatchToProps) diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/actionTypes.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/actionTypes.ts index e81d1337de3..d5e8e7b175e 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/actionTypes.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/actionTypes.ts @@ -1,4 +1,5 @@ import * as activityList from './activityList/actionTypes' +import * as algoTransactions from './algoTransactions/actionTypes' import * as bchTransactions from './bchTransactions/actionTypes' import * as borrow from './borrow/actionTypes' import * as btcTransactions from './btcTransactions/actionTypes' @@ -36,6 +37,7 @@ import * as xlmTransactions from './xlmTransactions/actionTypes' export { activityList, + algoTransactions, bchTransactions, borrow, btcTransactions, diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/actions.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/actions.ts index a470d02f821..19c34518dd7 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/actions.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/actions.ts @@ -1,4 +1,5 @@ import * as activityList from './activityList/actions' +import * as algoTransactions from './algoTransactions/actions' import * as bchTransactions from './bchTransactions/actions' import * as borrow from './borrow/actions' import * as btcTransactions from './btcTransactions/actions' @@ -36,6 +37,7 @@ import * as xlmTransactions from './xlmTransactions/actions' export { activityList, + algoTransactions, bchTransactions, borrow, btcTransactions, diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/actionTypes.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/actionTypes.ts new file mode 100644 index 00000000000..eaffc6c0c4e --- /dev/null +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/actionTypes.ts @@ -0,0 +1,5 @@ +export const TRANSACTIONS_INITIALIZED = + '@EVENT.ALGO_TX.TRANSACTIONS_INITIALIZED' + +export const ALGO_TRANSACTIONS_LOAD_MORE = + '@EVENT.ALGO_TX.TRANSACTIONS_LOAD_MORE' diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/actions.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/actions.ts new file mode 100644 index 00000000000..eedf719f633 --- /dev/null +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/actions.ts @@ -0,0 +1,7 @@ +import * as AT from './actionTypes' + +export const initialized = () => ({ type: AT.TRANSACTIONS_INITIALIZED }) + +export const loadMore = () => ({ + type: AT.ALGO_TRANSACTIONS_LOAD_MORE +}) diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/sagaRegister.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/sagaRegister.ts new file mode 100644 index 00000000000..0795b57fa98 --- /dev/null +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/sagaRegister.ts @@ -0,0 +1,18 @@ +import * as AT from './actionTypes' +import { takeEvery, takeLatest } from 'redux-saga/effects' +import sagas from './sagas' + +export default () => { + const algoTransactionsSagas = sagas() + + return function * algoTransactionsSaga () { + yield takeEvery( + AT.TRANSACTIONS_INITIALIZED, + algoTransactionsSagas.initialized + ) + yield takeLatest( + AT.ALGO_TRANSACTIONS_LOAD_MORE, + algoTransactionsSagas.loadMore + ) + } +} diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/sagas.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/sagas.ts new file mode 100644 index 00000000000..844868d3c86 --- /dev/null +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/algoTransactions/sagas.ts @@ -0,0 +1,26 @@ +import { actions } from 'data' +import { put } from 'redux-saga/effects' + +export const logLocation = 'components/btcTransactions/sagas' + +export default () => { + const initialized = function * () { + try { + yield put(actions.core.data.algo.fetchTransactions('', true)) + } catch (e) { + yield put(actions.logs.logErrorMessage(logLocation, 'initialized', e)) + } + } + + const loadMore = function * () { + try { + yield put(actions.core.data.algo.fetchTransactions()) + } catch (e) { + yield put(actions.logs.logErrorMessage(logLocation, 'loadMore', e)) + } + } + return { + initialized, + loadMore + } +} diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/sagaRegister.js b/packages/blockchain-wallet-v4-frontend/src/data/components/sagaRegister.js index 4631e9c4474..b95599e0e6f 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/sagaRegister.js +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/sagaRegister.js @@ -1,5 +1,6 @@ import { fork } from 'redux-saga/effects' import activityList from './activityList/sagaRegister' +import algoTransactions from './algoTransactions/sagaRegister' import bchTransactions from './bchTransactions/sagaRegister' import borrow from './borrow/sagaRegister' import btcTransactions from './btcTransactions/sagaRegister' @@ -34,6 +35,7 @@ import xlmTransactions from './xlmTransactions/sagaRegister' export default ({ api, coreSagas, networks }) => function * componentsSaga () { yield fork(activityList()) + yield fork(algoTransactions()) yield fork(borrow({ api, coreSagas, networks })) yield fork(bchTransactions()) yield fork(btcTransactions()) diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/sagas.js b/packages/blockchain-wallet-v4-frontend/src/data/components/sagas.js index 55bd523293e..6bcb5f08b97 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/sagas.js +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/sagas.js @@ -1,4 +1,5 @@ import activityList from './activityList/sagas' +import algoTransactions from './algoTransactions/sagas' import bchTransactions from './bchTransactions/sagas' import borrow from './borrow/sagas' import btcTransactions from './btcTransactions/sagas' @@ -31,6 +32,7 @@ import xlmTransactions from './xlmTransactions/sagas' export default ({ api, coreSagas, networks }) => ({ activityList: activityList(), + algoTransactions: algoTransactions(), bchTransactions: bchTransactions(), borrow: borrow({ api, coreSagas, networks }), btcTransactions: btcTransactions(), diff --git a/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts index 2d89e080fe2..ea64f6b03c5 100644 --- a/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts @@ -77,6 +77,8 @@ export const getData = ( break default: addressDataR = Remote.Success({ data: [] }) + balanceDataR = Remote.Success(0) + coinRatesR = selectors.core.data.eth.getErc20Rates(state, 'pax') } const priceIndexSeriesR = selectors.core.data.misc.getPriceIndexSeries(state) const currencyR = selectors.core.settings.getCurrency(state) diff --git a/packages/blockchain-wallet-v4/src/exchange/index.ts b/packages/blockchain-wallet-v4/src/exchange/index.ts index f994c39fb43..bfc9b878681 100755 --- a/packages/blockchain-wallet-v4/src/exchange/index.ts +++ b/packages/blockchain-wallet-v4/src/exchange/index.ts @@ -11,7 +11,7 @@ export type UnitType = KeysOfUnion< CurrenciesType[keyof CurrenciesType]['units'] > -const { BCH, BTC, ETH, PAX, XLM } = Currencies +const { BCH, BTC, ETH, PAX, XLM, ALGO } = Currencies const DefaultConversion = { value: '0', @@ -328,6 +328,74 @@ const transformXlmToXlm = ({ ) } +const transformFiatToAlgo = ({ + value, + fromCurrency, + toUnit, + rates +}: { + fromCurrency: keyof CurrenciesType + rates: RatesType + toUnit: any + value: number | string +}) => { + const pairs = Pairs.create(ALGO.code, rates) + const sourceCurrency = prop(fromCurrency, Currencies) + const sourceCurrencyCode = prop('code', sourceCurrency) + const sourceCurrencyUnit = path(['units', sourceCurrencyCode], sourceCurrency) + const targetUnit = path(['units', toUnit], ALGO) + return Currency.fromUnit({ value: value, unit: sourceCurrencyUnit }) + .chain(Currency.convert(pairs, ALGO)) + .chain(Currency.toUnit(targetUnit)) +} + +const transformAlgoToFiat = ({ + value, + fromUnit, + toCurrency, + rates, + digits = 2 +}: { + digits?: number + fromUnit: UnitType + rates: RatesType + toCurrency: keyof CurrenciesType + value: number | string +}) => { + const pairs = Pairs.create(ALGO.code, rates) + const targetCurrency = prop(toCurrency, Currencies) + const targetCurrencyCode = prop('code', targetCurrency) + const updatedTargetCurrency = assocPath( + ['units', targetCurrencyCode, 'decimal_digits'], + digits, + prop(toCurrency, Currencies) + ) + const targetCurrencyUnit = path( + ['units', targetCurrencyCode], + updatedTargetCurrency + ) + const sourceUnit = path(['units', fromUnit], ALGO) + return Currency.fromUnit({ value, unit: sourceUnit }) + .chain(Currency.convert(pairs, updatedTargetCurrency)) + .chain(Currency.toUnit(targetCurrencyUnit)) +} + +const transformAlgoToAlgo = ({ + value, + fromUnit, + toUnit +}: { + fromUnit: UnitType + toUnit: UnitType + value: number | string +}) => { + const sourceUnit = path(['units', fromUnit], ALGO) + const targetUnit = path(['units', toUnit], ALGO) + return Currency.fromUnit({ value, unit: sourceUnit }).chain( + Currency.toUnit(targetUnit) + ) +} + // ===================================================================== // ============================== DECIMALS ============================= // ===================================================================== @@ -567,6 +635,52 @@ const convertXlmToXlm = ({ ) } +const convertFiatToAlgo = ({ + value, + fromCurrency, + toUnit, + rates +}: { + fromCurrency: keyof CurrenciesType + rates: RatesType + toUnit: any + value: number | string +}) => { + return transformFiatToAlgo({ value, fromCurrency, toUnit, rates }).getOrElse( + DefaultConversion + ) +} + +const convertAlgoToFiat = ({ + value, + fromUnit, + toCurrency, + rates +}: { + fromUnit: UnitType + rates: RatesType + toCurrency: keyof CurrenciesType + value: number | string +}) => { + return transformAlgoToFiat({ value, fromUnit, toCurrency, rates }).getOrElse( + DefaultConversion + ) +} + +const convertAlgoToAlgo = ({ + value, + fromUnit, + toUnit +}: { + fromUnit: UnitType + toUnit: UnitType + value: number | string +}) => { + return transformAlgoToAlgo({ value, fromUnit, toUnit }).getOrElse( + DefaultConversion + ) +} + const convertCoinUnitToFiat = ({ coin, value, @@ -651,6 +765,10 @@ const convertCoinToCoin = ({ return baseToStandard ? convertXlmToXlm({ value, fromUnit: 'STROOP', toUnit: 'XLM' }) : convertXlmToXlm({ value, fromUnit: 'XLM', toUnit: 'STROOP' }) + case 'ALGO': + return baseToStandard + ? convertAlgoToAlgo({ value, fromUnit: 'mALGO', toUnit: 'ALGO' }) + : convertAlgoToAlgo({ value, fromUnit: 'ALGO', toUnit: 'mALGO' }) case 'FIAT': return baseToStandard ? { value: new BigNumber(value).dividedBy(100).valueOf() } @@ -824,6 +942,33 @@ const displayXlmToXlm = ({ .getOrElse(DefaultDisplay) } +const displayAlgoToFiat = ({ + value, + fromUnit, + toCurrency, + rates, + digits = 2 +}) => { + return transformAlgoToFiat({ value, fromUnit, toCurrency, rates, digits }) + .map(assoc('digits', digits)) + .map(Currency.unsafe_deprecated_fiatToString) + .getOrElse(DefaultDisplay) +} + +const displayAlgoToAlgo = ({ + value, + fromUnit, + toUnit +}: { + fromUnit: UnitType + toUnit: UnitType + value: number | string +}) => { + return transformAlgoToAlgo({ value, fromUnit, toUnit }) + .map(Currency.coinToString) + .getOrElse(DefaultDisplay) +} + const displayCoinToFiat = ({ fromCoin, value, @@ -848,6 +993,8 @@ const displayCoinToFiat = ({ return displayBchToFiat({ value, fromUnit, toCurrency, rates }) case 'XLM': return displayXlmToFiat({ value, fromUnit, toCurrency, rates }) + case 'ALGO': + return displayAlgoToFiat({ value, fromUnit, toCurrency, rates }) default: return 'Unsupported Coin Code' } @@ -905,6 +1052,13 @@ const convertFiatToCoin = ( toUnit: unit, rates: rates }).value + case unit === 'ALGO': + return convertFiatToAlgo({ + value, + fromCurrency: currency, + toUnit: unit, + rates: rates + }).value default: return 'Unsupported Coin Code' } @@ -952,6 +1106,13 @@ const convertCoinToFiat = ( fromUnit: unit, rates: rates }).value + case unit === 'ALGO': + return convertAlgoToFiat({ + value, + toCurrency: currency, + fromUnit: unit, + rates: rates + }).value default: return 'Unsupported Coin Code' } @@ -991,6 +1152,12 @@ const displayCoinToCoin = (value: number | string, toUnit: CoinType) => { toUnit, value }) + case 'ALGO': + return displayAlgoToAlgo({ + fromUnit: 'mALGO', + toUnit, + value + }) } } // TODO: clean up public vs private exports, should just export the following @@ -1005,6 +1172,8 @@ export { DefaultDisplay, convertFiatToCoin, convertCoinToFiat, + convertAlgoToFiat, + convertAlgoToAlgo, convertBtcToFiat, convertBtcToBtc, convertBchToFiat, diff --git a/packages/blockchain-wallet-v4/src/network/api/coin/index.ts b/packages/blockchain-wallet-v4/src/network/api/coin/index.ts new file mode 100644 index 00000000000..4412dafb262 --- /dev/null +++ b/packages/blockchain-wallet-v4/src/network/api/coin/index.ts @@ -0,0 +1,13 @@ +import { CoinType } from 'core/types' + +export default ({ apiUrl, get }) => { + const getCoinTicker = (coin: CoinType) => + get({ + url: apiUrl, + endPoint: '/ticker', + data: { base: coin } + }) + return { + getCoinTicker + } +} diff --git a/packages/blockchain-wallet-v4/src/network/api/index.ts b/packages/blockchain-wallet-v4/src/network/api/index.ts index 5b8f9ba5984..312c0ed66a9 100755 --- a/packages/blockchain-wallet-v4/src/network/api/index.ts +++ b/packages/blockchain-wallet-v4/src/network/api/index.ts @@ -4,6 +4,7 @@ import bch from './bch' import bitpay from './bitpay' import borrow from './borrow' import btc from './btc' +import coin from './coin' import eth from './eth' import httpService from './http' import interest from './interest' @@ -47,6 +48,7 @@ const api = ({ authorizedPost: authorizedHttp.post }), ...btc({ rootUrl, apiUrl, ...http }), + ...coin({ apiUrl, ...http }), ...eth({ apiUrl, ...http }), ...kvStore({ apiUrl, networks, ...http }), ...kyc({ @@ -94,6 +96,7 @@ export default api export type APIType = ReturnType & ReturnType & ReturnType & + ReturnType & ReturnType & ReturnType & ReturnType & diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/actionTypes.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/actionTypes.ts index a04fe19ab0b..69e5af9b79c 100644 --- a/packages/blockchain-wallet-v4/src/redux/data/algo/actionTypes.ts +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/actionTypes.ts @@ -1,3 +1,9 @@ +// FETCH_ALGO_TRANSACTIONS +export const FETCH_ALGO_RATES = '@CORE.FETCH_ALGO_RATES' +export const FETCH_ALGO_RATES_LOADING = '@CORE.FETCH_ALGO_RATES_LOADING' +export const FETCH_ALGO_RATES_SUCCESS = '@CORE.FETCH_ALGO_RATES_SUCCESS' +export const FETCH_ALGO_RATES_FAILURE = '@CORE.FETCH_ALGO_RATES_FAILURE' + // FETCH_ALGO_TRANSACTIONS export const FETCH_ALGO_TRANSACTIONS = '@CORE.FETCH_ALGO_TRANSACTIONS' export const FETCH_ALGO_TRANSACTIONS_LOADING = diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/actions.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/actions.ts index ada2d4ee42c..2fb0f1ce31e 100644 --- a/packages/blockchain-wallet-v4/src/redux/data/algo/actions.ts +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/actions.ts @@ -1,10 +1,28 @@ import * as AT from './actionTypes' +// RATES +export const fetchRates = () => ({ type: AT.FETCH_ALGO_RATES }) +export const fetchRatesLoading = () => ({ + type: AT.FETCH_ALGO_RATES_LOADING +}) +export const fetchRatesSuccess = data => ({ + type: AT.FETCH_ALGO_RATES_SUCCESS, + payload: data +}) +export const fetchRatesFailure = error => ({ + type: AT.FETCH_ALGO_RATES_FAILURE, + payload: error +}) + // FETCH_ALGO_TRANSACTIONS -export const fetchTransactions = (address, reset) => ({ +export const fetchTransactions = (address?, reset?) => ({ type: AT.FETCH_ALGO_TRANSACTIONS, payload: { address, reset } }) +export const fetchTransactionsFailure = error => ({ + type: AT.FETCH_ALGO_TRANSACTIONS_FAILURE, + payload: error +}) export const fetchTransactionsLoading = reset => ({ type: AT.FETCH_ALGO_TRANSACTIONS_LOADING, payload: { reset } @@ -13,10 +31,6 @@ export const fetchTransactionsSuccess = (transactions, reset, isFinalPage) => ({ type: AT.FETCH_ALGO_TRANSACTIONS_SUCCESS, payload: { transactions, reset, isFinalPage } }) -export const fetchTransactionsFailure = error => ({ - type: AT.FETCH_ALGO_TRANSACTIONS_FAILURE, - payload: error -}) export const transactionsAtBound = payload => ({ type: AT.ALGO_TRANSACTIONS_AT_BOUND, payload diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts index d55ce84fad2..afbd546e293 100644 --- a/packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts @@ -1,7 +1,7 @@ import * as AT from './actionTypes' import { AlgoActionTypes, AlgoState } from './types' -import { Remote } from 'core' +import Remote from '../../../remote' const INITIAL_STATE: AlgoState = { rates: Remote.NotAsked, @@ -14,6 +14,21 @@ export const algoReducer = ( action: AlgoActionTypes ): AlgoState => { switch (action.type) { + case AT.FETCH_ALGO_RATES_FAILURE: + return { + ...state, + rates: Remote.Failure(action.payload) + } + case AT.FETCH_ALGO_RATES_LOADING: + return { + ...state, + rates: Remote.Loading + } + case AT.FETCH_ALGO_RATES_SUCCESS: + return { + ...state, + rates: Remote.Success(action.payload) + } case AT.FETCH_ALGO_TRANSACTIONS_FAILURE: return { ...state, @@ -22,7 +37,7 @@ export const algoReducer = ( case AT.FETCH_ALGO_TRANSACTIONS_LOADING: return { ...state, - transactions: [...state.transactions, Remote.Loading()] + transactions: [...state.transactions, Remote.Loading] } case AT.FETCH_ALGO_TRANSACTIONS_SUCCESS: return { diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/sagaRegister.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/sagaRegister.ts new file mode 100644 index 00000000000..5de3f7d5f6f --- /dev/null +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/sagaRegister.ts @@ -0,0 +1,11 @@ +import * as AT from './actionTypes' +import { takeLatest } from 'redux-saga/effects' +import sagas from './sagas' + +export default ({ api }) => { + const dataAlgoSagas = sagas({ api }) + + return function * coreDataAlgoSaga () { + yield takeLatest(AT.FETCH_ALGO_RATES, dataAlgoSagas.fetchRates) + } +} diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/sagas.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/sagas.ts new file mode 100644 index 00000000000..b1050de8cb2 --- /dev/null +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/sagas.ts @@ -0,0 +1,21 @@ +import { call, put } from 'redux-saga/effects' + +import { APIType } from 'core/network/api' + +import * as A from './actions' + +export default ({ api }: { api: APIType }) => { + const fetchRates = function * () { + try { + yield put(A.fetchRatesLoading()) + const data = yield call(api.getCoinTicker, 'ALGO') + yield put(A.fetchRatesSuccess(data)) + } catch (e) { + yield put(A.fetchRatesFailure(e.message)) + } + } + + return { + fetchRates + } +} diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/selectors.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/selectors.ts index 6c6320ba234..976f2dd28a0 100644 --- a/packages/blockchain-wallet-v4/src/redux/data/algo/selectors.ts +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/selectors.ts @@ -1,5 +1,9 @@ import { RootState } from 'data/rootReducer' +export const getRates = (state: RootState) => { + return state.dataPath.algo.rates +} + export const getTransactions = (state: RootState) => { return state.dataPath.algo.transactions } diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/types.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/types.ts index 4622d0c1120..da8cb00b669 100644 --- a/packages/blockchain-wallet-v4/src/redux/data/algo/types.ts +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/types.ts @@ -11,6 +11,19 @@ export type AlgoState = { } // actions +interface FetchRatesFailureActionType { + payload: string + type: typeof AT.FETCH_ALGO_RATES_FAILURE +} +interface FetchRatesLoadingActionType { + type: typeof AT.FETCH_ALGO_RATES_LOADING +} +interface FetchRatesSuccessActionType { + payload: { + rates: RatesType + } + type: typeof AT.FETCH_ALGO_RATES_SUCCESS +} interface FetchTransactionsFailureActionType { payload: string type: typeof AT.FETCH_ALGO_TRANSACTIONS_FAILURE @@ -29,6 +42,9 @@ interface FetchTransactionsSuccessActionType { } export type AlgoActionTypes = + | FetchRatesFailureActionType + | FetchRatesLoadingActionType + | FetchRatesSuccessActionType | FetchTransactionsFailureActionType | FetchTransactionsLoadingActionType | FetchTransactionsSuccessActionType diff --git a/packages/blockchain-wallet-v4/src/redux/data/sagaRegister.ts b/packages/blockchain-wallet-v4/src/redux/data/sagaRegister.ts index 25ac0a3b060..da30abe65f2 100755 --- a/packages/blockchain-wallet-v4/src/redux/data/sagaRegister.ts +++ b/packages/blockchain-wallet-v4/src/redux/data/sagaRegister.ts @@ -1,4 +1,5 @@ import { fork } from 'redux-saga/effects' +import algo from './algo/sagaRegister' import bch from './bch/sagaRegister' import btc from './btc/sagaRegister' import eth from './eth/sagaRegister' @@ -8,6 +9,7 @@ import xlm from './xlm/sagaRegister' export default ({ api, networks }) => function * coreDataSaga () { + yield fork(algo({ api })) yield fork(bch({ api })) yield fork(btc({ api })) yield fork(eth({ api })) diff --git a/packages/blockchain-wallet-v4/src/redux/data/sagas.ts b/packages/blockchain-wallet-v4/src/redux/data/sagas.ts index 61bb37d78c1..6109c130d58 100755 --- a/packages/blockchain-wallet-v4/src/redux/data/sagas.ts +++ b/packages/blockchain-wallet-v4/src/redux/data/sagas.ts @@ -1,3 +1,4 @@ +import algo from './algo/sagas' import bch from './bch/sagas' import btc from './btc/sagas' import eth from './eth/sagas' @@ -5,6 +6,7 @@ import stx from './stx/sagas' import xlm from './xlm/sagas' export default ({ api, networks }) => ({ + algo: algo({ api }), bch: bch({ api }), btc: btc({ api }), eth: eth({ api }), From b246cd40d62f8a2fafc5644b4e10366bf4238faa Mon Sep 17 00:00:00 2001 From: Philip London Date: Thu, 25 Jun 2020 14:48:55 +0200 Subject: [PATCH 10/34] feat(algo): add dropdown/acct selector --- config/mocks/wallet-options-v4.json | 4 +- .../Form/SelectBoxAlgoAddresses/selectors.ts | 66 +++++++++++++++++++ .../src/data/components/send/reducers.js | 3 +- .../EnterAmount/Checkout/selectors.ts | 18 +++-- .../WalletBalanceDropdown/selectors.ts | 8 +++ .../src/exchange/index.ts | 2 + 6 files changed, 91 insertions(+), 10 deletions(-) create mode 100644 packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxAlgoAddresses/selectors.ts diff --git a/config/mocks/wallet-options-v4.json b/config/mocks/wallet-options-v4.json index 31f66e7f02e..08c4618c43e 100644 --- a/config/mocks/wallet-options-v4.json +++ b/config/mocks/wallet-options-v4.json @@ -18,8 +18,8 @@ "coins": { "ALGO": { "availability": { - "send": true, - "request": true, + "send": false, + "request": false, "lockbox": false, "exchangeTo": false, "exchangeFrom": false, diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxAlgoAddresses/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxAlgoAddresses/selectors.ts new file mode 100644 index 00000000000..5e7f1c75c67 --- /dev/null +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxAlgoAddresses/selectors.ts @@ -0,0 +1,66 @@ +import { ADDRESS_TYPES } from 'blockchain-wallet-v4/src/redux/payment/btc/utils' +// @ts-ignore +import { concat, curry, prop, reduce, sequence } from 'ramda' +import { Exchange, Remote } from 'blockchain-wallet-v4/src' +import { selectors } from 'data' + +export const getData = ( + state, + ownProps: { + exclude?: Array + includeCustodial?: boolean + includeExchangeAddress?: boolean + } +) => { + const { + /* exclude = [], */ includeExchangeAddress, + includeCustodial + } = ownProps + + const buildCustodialDisplay = x => { + return ( + `ALGO Trading Wallet` + + ` (${Exchange.displayAlgoToAlgo({ + value: x ? x.available : 0, + fromUnit: 'mALGO', + toUnit: 'ALGO' + })})` + ) + } + // @ts-ignore + // const excluded = filter(x => !exclude.includes(x.label)) + const toGroup = curry((label, options) => [{ label, options }]) + const toExchange = x => [{ label: `Exchange ALGO Address`, value: x }] + const toCustodialDropdown = x => [ + { + label: buildCustodialDisplay(x), + value: { + ...x, + type: ADDRESS_TYPES.CUSTODIAL, + label: 'ALGO Trading Wallet' + } + } + ] + + const exchangeAddress = selectors.components.send.getPaymentsAccountExchange( + 'ALGO', + state + ) + const hasExchangeAddress = Remote.Success.is(exchangeAddress) + + return sequence(Remote.of, [ + includeExchangeAddress && hasExchangeAddress + ? exchangeAddress.map(toExchange).map(toGroup('Exchange')) + : Remote.of([]), + includeCustodial + ? selectors.components.simpleBuy + .getSBBalances(state) + .map(prop('ALGO')) + .map(toCustodialDropdown) + .map(toGroup('Custodial Wallet')) + : Remote.of([]) + ]).map(([b1, b2]) => ({ + // @ts-ignore + data: reduce(concat, [], [b1, b2]) + })) +} diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/send/reducers.js b/packages/blockchain-wallet-v4-frontend/src/data/components/send/reducers.js index 75a39093d52..aada9d725ee 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/send/reducers.js +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/send/reducers.js @@ -8,7 +8,8 @@ const INITIAL_STATE = { BCH: Remote.NotAsked, ETH: Remote.NotAsked, PAX: Remote.NotAsked, - XLM: Remote.NotAsked + XLM: Remote.NotAsked, + ALGO: Remote.NotAsked } } diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/SimpleBuy/EnterAmount/Checkout/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/modals/SimpleBuy/EnterAmount/Checkout/selectors.ts index 8de50643cf1..e0010fd7f7a 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/SimpleBuy/EnterAmount/Checkout/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/modals/SimpleBuy/EnterAmount/Checkout/selectors.ts @@ -19,14 +19,18 @@ export const getData = (state: RootState) => { const ethRatesR = selectors.core.data.eth.getRates(state) const paxRatesR = selectors.core.data.eth.getErc20Rates(state, 'pax') const xlmRatesR = selectors.core.data.xlm.getRates(state) + const algoRatesR = selectors.core.data.algo.getRates(state) - const ratesR = lift((bchRates, btcRates, ethRates, paxRates, xlmRates) => ({ - BCH: bchRates, - BTC: btcRates, - ETH: ethRates, - PAX: paxRates, - XLM: xlmRates - }))(bchRatesR, btcRatesR, ethRatesR, paxRatesR, xlmRatesR) + const ratesR = lift( + (bchRates, btcRates, ethRates, paxRates, xlmRates, algoRates) => ({ + BCH: bchRates, + BTC: btcRates, + ETH: ethRates, + PAX: paxRates, + XLM: xlmRates, + ALGO: algoRates + }) + )(bchRatesR, btcRatesR, ethRatesR, paxRatesR, xlmRatesR, algoRatesR) return lift( (invitations, rates, suggestedAmounts, supportedCoins, userData) => ({ diff --git a/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts index ea64f6b03c5..925235aad60 100644 --- a/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts @@ -2,6 +2,7 @@ import * as balanceSelectors from 'components/Balances/wallet/selectors' import { CurrenciesType } from 'core/exchange/currencies' import { Exchange, Remote } from 'blockchain-wallet-v4/src' import { FiatType, RemoteDataType } from 'core/types' +import { getData as getAlgoAddressData } from 'components/Form/SelectBoxAlgoAddresses/selectors' import { getData as getBchAddressData } from 'components/Form/SelectBoxBchAddresses/selectors' import { getData as getBtcAddressData } from 'components/Form/SelectBoxBtcAddresses/selectors' import { @@ -75,6 +76,13 @@ export const getData = ( balanceDataR = balanceSelectors.getXlmBalance(state) coinRatesR = selectors.core.data.xlm.getRates(state) break + case 'ALGO': + addressDataR = getAlgoAddressData(state, { + includeCustodial: true + }) + balanceDataR = balanceSelectors.getAlgoBalance(state) + coinRatesR = selectors.core.data.algo.getRates(state) + break default: addressDataR = Remote.Success({ data: [] }) balanceDataR = Remote.Success(0) diff --git a/packages/blockchain-wallet-v4/src/exchange/index.ts b/packages/blockchain-wallet-v4/src/exchange/index.ts index bfc9b878681..9e9cf161f83 100755 --- a/packages/blockchain-wallet-v4/src/exchange/index.ts +++ b/packages/blockchain-wallet-v4/src/exchange/index.ts @@ -1189,6 +1189,8 @@ export { convertXlmToFiat, convertXlmToXlm, convertCoinToCoin, + displayAlgoToFiat, + displayAlgoToAlgo, displayBtcToFiat, displayBtcToBtc, displayBchToFiat, From 34b0918ab44a7edfdc296cd774daf3eff473cf73 Mon Sep 17 00:00:00 2001 From: Philip London Date: Thu, 25 Jun 2020 14:59:42 +0200 Subject: [PATCH 11/34] feat(algo): add to fetch rates --- .../src/data/components/priceTicker/sagas.js | 4 ++++ .../src/scenes/Transactions/WalletBalanceDropdown/index.tsx | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/priceTicker/sagas.js b/packages/blockchain-wallet-v4-frontend/src/data/components/priceTicker/sagas.js index 5a1620c9bbf..18ff16d42aa 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/priceTicker/sagas.js +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/priceTicker/sagas.js @@ -10,6 +10,7 @@ export default ({ coreSagas }) => { const btcRates = yield select(selectors.core.data.bch.getRates) const ethRates = yield select(selectors.core.data.eth.getRates) const xlmRates = yield select(selectors.core.data.xlm.getRates) + const algoRates = yield select(selectors.core.data.algo.getRates) if (Remote.NotAsked.is(bchRates)) { yield put(actions.core.data.bch.fetchRates()) } @@ -22,6 +23,9 @@ export default ({ coreSagas }) => { if (Remote.NotAsked.is(xlmRates)) { yield put(actions.core.data.xlm.fetchRates()) } + if (Remote.NotAsked.is(algoRates)) { + yield put(actions.core.data.algo.fetchRates()) + } } catch (e) { yield put( actions.logs.logErrorMessage( diff --git a/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/index.tsx b/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/index.tsx index 5ae3c652bac..6cfea529f3a 100644 --- a/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/index.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/index.tsx @@ -145,7 +145,7 @@ export class WalletBalanceDropdown extends Component { isTotalBalanceType = selectProps => { // BTC/BCH if (selectProps.value === 'all') return true - // ETH/PAX/STELLAR + // ETH/PAX/STELLAR/ALGO if (!selectProps.value) return true return false From 9e1436491009b93b5df102870411984892cc3535 Mon Sep 17 00:00:00 2001 From: Milan Date: Thu, 25 Jun 2020 15:52:13 +0200 Subject: [PATCH 12/34] feat: implemented basic side option for USDT coin --- config/mocks/wallet-options-v4.json | 25 +++ .../src/Colors/DarkMode.ts | 1 + .../src/Colors/Default.ts | 1 + .../components/Balances/total/selectors.js | 32 +++ .../components/Balances/wallet/selectors.ts | 29 +++ .../Form/SelectBoxEthAddresses/selectors.ts | 10 +- .../src/data/analytics/sagas.js | 5 + .../src/data/auth/sagas.js | 1 + .../src/data/balance/sagas.js | 4 +- .../src/data/components/borrow/sagas.utils.ts | 1 + .../src/data/components/borrow/selectors.ts | 2 + .../data/components/exchange/sagas.utils.ts | 1 + .../data/components/interest/sagas.utils.ts | 8 + .../src/data/components/interest/selectors.ts | 2 + .../src/data/components/refresh/sagas.js | 5 + .../data/components/simpleBuy/sagaRegister.ts | 1 + .../Wallet/MenuLeft/Navigation/template.tsx | 5 +- .../src/modals/Bch/RequestBch/index.js | 6 + .../Borrow/RepayLoanForm/template.success.tsx | 3 +- .../src/modals/Btc/RequestBtc/index.js | 6 + .../EnterAmount/Checkout/selectors.ts | 18 +- .../modals/SimpleBuy/OrderSummary/index.tsx | 1 + .../DownloadTransactions/index.tsx | 12 +- .../DownloadTransactions/selectors.js | 14 ++ .../DownloadTransactions/template.tsx | 2 +- .../src/modals/Xlm/RequestXlm/index.js | 6 + .../Borrow/InitBorrowForm/Amount/selectors.ts | 5 + .../Home/Balances/CoinBalance/selectors.ts | 4 + .../WalletBalanceDropdown/selectors.ts | 8 + .../Transactions/template.headerexplainer.tsx | 21 ++ .../src/exchange/currencies/USDT.ts | 26 +++ .../src/exchange/currencies/index.ts | 7 +- .../src/exchange/index.ts | 195 +++++++++++++++++- .../src/redux/data/eth/reducers.js | 2 +- .../src/redux/data/eth/sagas.ts | 15 +- .../src/redux/payment/types.ts | 4 +- .../src/redux/walletOptions/types.ts | 2 +- .../blockchain-wallet-v4/src/types/index.ts | 3 +- 38 files changed, 457 insertions(+), 36 deletions(-) create mode 100644 packages/blockchain-wallet-v4/src/exchange/currencies/USDT.ts diff --git a/config/mocks/wallet-options-v4.json b/config/mocks/wallet-options-v4.json index 95e116cc430..4a69ea83e89 100644 --- a/config/mocks/wallet-options-v4.json +++ b/config/mocks/wallet-options-v4.json @@ -89,6 +89,31 @@ "minConfirmations": 3, "txExplorerBaseUrl": "https://blockchair.com/bitcoin-sv/transaction" }, + "USDT": { + "availability": { + "send": false, + "request": false, + "lockbox": false, + "exchangeTo": false, + "exchangeFrom": false, + "syncToPit": false + }, + "coinCode": "USDT", + "coinTicker": "USDT", + "colorCode": "usdt", + "contractAddress": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "displayName": "USD Tether", + "hasLockboxSupport": false, + "icons": { + "default": "usdt", + "circle": "usdt", + "circleFilled": "usdt" + }, + "learnMoreLink": " https://support.blockchain.com/hc/en-us/articles/360044952032", + "minConfirmations": 12, + "txExplorerBaseUrl": "https://www.blockchain.com/eth/tx", + "txListAppRoute": "/usdt/transactions" + }, "ETH": { "availability": { "send": true, diff --git a/packages/blockchain-info-components/src/Colors/DarkMode.ts b/packages/blockchain-info-components/src/Colors/DarkMode.ts index 04ba5b43759..354aa23a0ad 100644 --- a/packages/blockchain-info-components/src/Colors/DarkMode.ts +++ b/packages/blockchain-info-components/src/Colors/DarkMode.ts @@ -80,6 +80,7 @@ const DarkTheme: DefaultTheme = { 'usd-d-light': 'rgba(0, 82, 44, 0.15)', xlm: '#797979', 'xlm-light': 'rgba(0, 0, 0, 0.15)', + usdt: '#26A17B', // OLD - AVOID USE \\ // Brand 'brand-yellow': '#665227', diff --git a/packages/blockchain-info-components/src/Colors/Default.ts b/packages/blockchain-info-components/src/Colors/Default.ts index 1b878f152a3..94e031f1116 100644 --- a/packages/blockchain-info-components/src/Colors/Default.ts +++ b/packages/blockchain-info-components/src/Colors/Default.ts @@ -77,6 +77,7 @@ const Default = { 'usd-d-light': 'rgba(0, 82, 44, 0.15)', xlm: '#121D33', 'xlm-light': 'rgba(0, 0, 0, 0.15)', + usdt: '#26A17B', // OLD - AVOID USE \\ // Brand 'brand-yellow': '#FFB266', diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Balances/total/selectors.js b/packages/blockchain-wallet-v4-frontend/src/components/Balances/total/selectors.js index c93634523c0..231bc24b6d8 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Balances/total/selectors.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Balances/total/selectors.js @@ -7,6 +7,7 @@ import { getBtcBalance as getBtcWalletBalance, getEthBalance as getEthWalletBalance, getPaxBalance as getPaxWalletBalance, + getUsdtBalance as getUsdtWalletBalance, getXlmBalance as getXlmWalletBalance } from '../wallet/selectors' import { selectors } from 'data' @@ -58,6 +59,7 @@ export const getBchBalance = createDeepEqualSelector( export const getEthBalance = getEthWalletBalance export const getPaxBalance = getPaxWalletBalance +export const getUsdtBalance = getUsdtWalletBalance export const getXlmBalance = getXlmWalletBalance export const getBtcBalanceInfo = createDeepEqualSelector( @@ -143,6 +145,31 @@ export const getPaxBalanceInfo = createDeepEqualSelector( } ) +export const getUsdtBalanceInfo = createDeepEqualSelector( + [ + getUsdtBalance, + state => selectors.core.data.eth.getErc20Rates(state, 'usdt'), + selectors.core.settings.getCurrency, + selectors.core.settings.getInvitations + ], + (usdtBalanceR, erc20RatesR, currencyR, invitationsR) => { + const invitations = invitationsR.getOrElse({ USDT: false }) + const invited = prop('USDT', invitations) + const transform = (value, rates, toCurrency) => { + return Exchange.convertUsdtToFiat({ + value, + fromUnit: 'WEI', + toCurrency, + rates + }).value + } + + return invited + ? lift(transform)(usdtBalanceR, erc20RatesR, currencyR) + : Remote.Success(0) + } +) + export const getXlmBalanceInfo = createDeepEqualSelector( [ getXlmBalance, @@ -167,6 +194,7 @@ export const getTotalBalance = createDeepEqualSelector( getBtcBalanceInfo, getEthBalanceInfo, getPaxBalanceInfo, + getUsdtBalanceInfo, getXlmBalanceInfo, selectors.core.settings.getCurrency, selectors.router.getPathname @@ -176,6 +204,7 @@ export const getTotalBalance = createDeepEqualSelector( btcBalanceInfoR, ethBalanceInfoR, paxBalanceInfoR, + usdtBalanceInfoR, xlmBalanceInfoR, currency, path @@ -185,6 +214,7 @@ export const getTotalBalance = createDeepEqualSelector( btcBalance, ethBalance, paxBalance, + usdtBalance, xlmBalance, currency ) => { @@ -193,6 +223,7 @@ export const getTotalBalance = createDeepEqualSelector( Number(ethBalance) + Number(bchBalance) + Number(paxBalance) + + Number(usdtBalance) + Number(xlmBalance) ) const totalBalance = `${Exchange.getSymbol(currency)}${total}` @@ -203,6 +234,7 @@ export const getTotalBalance = createDeepEqualSelector( btcBalanceInfoR, ethBalanceInfoR, paxBalanceInfoR, + usdtBalanceInfoR, xlmBalanceInfoR, currency ) diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Balances/wallet/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/components/Balances/wallet/selectors.ts index b0f6d1aeeed..e841e63b2d8 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Balances/wallet/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/components/Balances/wallet/selectors.ts @@ -139,6 +139,35 @@ export const getPaxBalance = createDeepEqualSelector( } ) +export const getUsdtBalance = createDeepEqualSelector( + [ + state => selectors.core.data.eth.getErc20Balance(state, 'usdt'), + selectors.components.interest.getInterestAccountBalance, + selectors.components.simpleBuy.getSBBalances + ], + ( + balanceR, + interestAccountBalanceR: RemoteDataType, + sbBalancesR: RemoteDataType + ) => { + const interestUsdtBalance = interestAccountBalanceR.getOrElse({ + USDT: { balance: '0' } + }).USDT + const interestBalance = interestUsdtBalance + ? interestUsdtBalance.balance + : '0' + const sbUsdtBalance = sbBalancesR.getOrElse({ USDT: { available: '0' } }) + .USDT + const sbBalance = sbUsdtBalance ? sbUsdtBalance.available : '0' + + return Remote.of( + new BigNumber(balanceR.getOrElse(0)) + .plus(new BigNumber(sbBalance)) + .plus(new BigNumber(interestBalance)) + ) + } +) + export const getXlmBalance = createDeepEqualSelector( [ state => diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxEthAddresses/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxEthAddresses/selectors.ts index ce6ab56fd03..c2ba79c7121 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxEthAddresses/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxEthAddresses/selectors.ts @@ -129,6 +129,14 @@ export const getErc20Data = ( toUnit: 'PAX' }) } + if (coin === 'USDT') { + const usdtAmount = Exchange.convertUsdtToUsdt(data) + return Exchange.displayUsdtToUsdt({ + value: Number(usdtAmount.value).toFixed(8), + fromUnit: 'USDT', + toUnit: 'USDT' + }) + } return {} } const buildCustodialDisplay = x => { @@ -190,7 +198,7 @@ export const getErc20Data = ( includeCustodial ? selectors.components.simpleBuy .getSBBalances(state) - .map(prop('PAX')) + .map(prop(coin)) .map(toCustodialDropdown) .map(toGroup('Custodial Wallet')) : Remote.of([]), diff --git a/packages/blockchain-wallet-v4-frontend/src/data/analytics/sagas.js b/packages/blockchain-wallet-v4-frontend/src/data/analytics/sagas.js index 543e8b8e117..5eca1e78f75 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/analytics/sagas.js +++ b/packages/blockchain-wallet-v4-frontend/src/data/analytics/sagas.js @@ -87,6 +87,10 @@ export default ({ api }) => { selectors.core.data.eth.getErc20Balance, 'pax' )).getOrElse(0) + const usdtBalance = (yield select( + selectors.core.data.eth.getErc20Balance, + 'usdt' + )).getOrElse(0) const xlmBalance = (yield select( selectors.core.data.xlm.getTotalBalance )).getOrElse(0) @@ -126,6 +130,7 @@ export default ({ api }) => { BCH: not(equals(bchBalance, 0)), ETH: not(equals(ethBalance, 0)), PAX: not(equals(paxBalance, 0)), + USDT: not(equals(usdtBalance, 0)), XLM: not(equals(xlmBalance, 0)) }), variableScope: 'visit' diff --git a/packages/blockchain-wallet-v4-frontend/src/data/auth/sagas.js b/packages/blockchain-wallet-v4-frontend/src/data/auth/sagas.js index 5a1db7f69e4..0d32b07b3ed 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/auth/sagas.js +++ b/packages/blockchain-wallet-v4-frontend/src/data/auth/sagas.js @@ -94,6 +94,7 @@ export default ({ api, coreSagas }) => { yield put(actions.core.data.eth.fetchData()) yield put(actions.core.data.xlm.fetchData()) yield put(actions.core.data.eth.fetchErc20Data('pax')) + yield put(actions.core.data.eth.fetchErc20Data('usdt')) } const loginRoutineSaga = function * (mobileLogin, firstLogin) { diff --git a/packages/blockchain-wallet-v4-frontend/src/data/balance/sagas.js b/packages/blockchain-wallet-v4-frontend/src/data/balance/sagas.js index 5f7c0816abb..35a7c3ad8d7 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/balance/sagas.js +++ b/packages/blockchain-wallet-v4-frontend/src/data/balance/sagas.js @@ -99,12 +99,14 @@ export const waitForAllBalances = function * () { const bchT = yield fork(getBchBalance) const ethT = yield fork(getEthBalance) const paxT = yield fork(getErc20Balance, 'pax') + const usdtT = yield fork(getErc20Balance, 'usdt') const xlmT = yield fork(getXlmBalance) const btc = yield join(btcT) const bch = yield join(bchT) const eth = yield join(ethT) const pax = yield join(paxT) + const usdt = yield join(usdtT) const xlm = yield join(xlmT) - return { btc, eth, bch, pax, xlm } + return { btc, eth, bch, pax, xlm, usdt } } diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/borrow/sagas.utils.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/borrow/sagas.utils.ts index 0c19d7c880f..ed633e30481 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/borrow/sagas.utils.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/borrow/sagas.utils.ts @@ -32,6 +32,7 @@ export default ({ try { switch (payment.coin) { case 'PAX': + case 'USDT': case 'ETH': case 'XLM': payment = yield payment.amount(convertStandardToBase(coin, amount)) diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/borrow/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/borrow/selectors.ts index 45cb65483ab..e2329d0c57c 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/borrow/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/borrow/selectors.ts @@ -33,6 +33,8 @@ export const getRates = ( return selectors.core.data.btc.getRates(state) case 'PAX': return selectors.core.data.eth.getErc20Rates(state, 'pax') + case 'USDT': + return selectors.core.data.eth.getErc20Rates(state, 'usdt') default: throw Remote.Failure(INVALID_COIN_TYPE) } diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/exchange/sagas.utils.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/exchange/sagas.utils.ts index b28f5135777..9024931fc1e 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/exchange/sagas.utils.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/exchange/sagas.utils.ts @@ -103,6 +103,7 @@ export default ({ coreSagas, networks }) => { .amount(parseInt(amount)) break case 'PAX': + case 'USDT': case 'ETH': payment = coreSagas.payment.eth .create({ network: networks.eth }) diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.utils.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.utils.ts index 72bf86bd8e0..5829fd7a0fd 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.utils.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/sagas.utils.ts @@ -78,6 +78,14 @@ export default ({ coreSagas, networks }: { coreSagas: any; networks: any }) => { rates }).value break + case 'USDT': + maxFiat = Exchange.convertUsdtToFiat({ + value: balance, + fromUnit: 'WEI', + toCurrency: userCurrency, + rates + }).value + break default: throw new Error(INVALID_COIN_TYPE) } diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/selectors.ts index 23d649c20ed..494d5b100e3 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/interest/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/interest/selectors.ts @@ -54,6 +54,8 @@ export const getRates = ( return selectors.core.data.eth.getRates(state) case 'PAX': return selectors.core.data.eth.getErc20Rates(state, 'pax') + case 'USDT': + return selectors.core.data.eth.getErc20Rates(state, 'usdt') default: throw Remote.Failure('INVALID_COIN_TYPE') } diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/refresh/sagas.js b/packages/blockchain-wallet-v4-frontend/src/data/components/refresh/sagas.js index 52f54386b02..8690e4551a8 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/refresh/sagas.js +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/refresh/sagas.js @@ -13,6 +13,7 @@ export default () => { yield put(actions.core.data.eth.fetchData()) yield put(actions.core.data.xlm.fetchData()) yield put(actions.core.data.eth.fetchErc20Data('pax')) + yield put(actions.core.data.eth.fetchErc20Data('usdt')) yield put(actions.components.interest.fetchInterestAccountBalance()) yield put(actions.components.simpleBuy.fetchSBBalances()) yield put(actions.components.simpleBuy.fetchSBOrders()) @@ -22,6 +23,7 @@ export default () => { yield put(actions.core.data.eth.fetchRates()) yield put(actions.core.data.xlm.fetchRates()) yield put(actions.core.data.eth.fetchErc20Rates('pax')) + yield put(actions.core.data.eth.fetchErc20Rates('usdt')) const pathname = yield select(selectors.router.getPathname) switch (true) { case contains('/bch/transactions', pathname): @@ -36,6 +38,9 @@ export default () => { case contains('/usd-d/transactions', pathname): yield call(refreshErc20Transactions, 'pax') break + case contains('/usdt/transactions', pathname): + yield call(refreshErc20Transactions, 'usdt') + break case contains('/xlm/transactions', pathname): yield call(refreshXlmTransactions) break diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/simpleBuy/sagaRegister.ts b/packages/blockchain-wallet-v4-frontend/src/data/components/simpleBuy/sagaRegister.ts index 1900501a266..2d920b3ed60 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/simpleBuy/sagaRegister.ts +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/simpleBuy/sagaRegister.ts @@ -71,6 +71,7 @@ export default ({ api, coreSagas, networks }) => { yield put(actions.core.data.btc.fetchTransactions('', true)) yield put(actions.core.data.eth.fetchTransactions('', true)) yield put(actions.core.data.eth.fetchErc20Transactions('pax', true)) + yield put(actions.core.data.eth.fetchErc20Transactions('usdt', true)) yield put(actions.core.data.xlm.fetchTransactions('', true)) }) } diff --git a/packages/blockchain-wallet-v4-frontend/src/layouts/Wallet/MenuLeft/Navigation/template.tsx b/packages/blockchain-wallet-v4-frontend/src/layouts/Wallet/MenuLeft/Navigation/template.tsx index 88485c50a3a..85f9bfedbec 100644 --- a/packages/blockchain-wallet-v4-frontend/src/layouts/Wallet/MenuLeft/Navigation/template.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/layouts/Wallet/MenuLeft/Navigation/template.tsx @@ -72,12 +72,12 @@ const Navigation = (props: OwnProps & Props) => { const { supportedCoins } = rest const coinOrder = [ supportedCoins.PAX, + supportedCoins.USDT, supportedCoins.BTC, supportedCoins.ETH, supportedCoins.BCH, supportedCoins.XLM ] - return ( @@ -95,8 +95,7 @@ const Navigation = (props: OwnProps & Props) => { mapObjIndexed( (coin: SupportedCoinType, i) => coin && - coin.txListAppRoute && - coin.invited && ( + coin.txListAppRoute && ( & Props> = props => { const principalDisplayName = props.supportedCoins[props.loan.principal.amount[0].currency].displayName const isSufficientEthForErc20 = - props.payment.coin === 'PAX' && props.payment.isSufficientEthForErc20 + (props.payment.coin === 'PAX' || props.payment.coin === 'USDT') && + props.payment.isSufficientEthForErc20 return ( diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/Btc/RequestBtc/index.js b/packages/blockchain-wallet-v4-frontend/src/modals/Btc/RequestBtc/index.js index 8af70667c42..b5b29fdcb99 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/Btc/RequestBtc/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/modals/Btc/RequestBtc/index.js @@ -44,6 +44,12 @@ class RequestBtcContainer extends React.PureComponent { coin: 'PAX', lockboxIndex: this.props.lockboxIndex }) + } else if (equals(prop('coin', x), 'USDT')) { + this.props.modalActions.closeAllModals() + this.props.modalActions.showModal('@MODAL.REQUEST.ETH', { + coin: 'USDT', + lockboxIndex: this.props.lockboxIndex + }) } else if (equals(prop('coin', x), 'ETH')) { this.props.modalActions.closeAllModals() this.props.modalActions.showModal('@MODAL.REQUEST.ETH', { diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/SimpleBuy/EnterAmount/Checkout/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/modals/SimpleBuy/EnterAmount/Checkout/selectors.ts index 8de50643cf1..9a976e5a23d 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/SimpleBuy/EnterAmount/Checkout/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/modals/SimpleBuy/EnterAmount/Checkout/selectors.ts @@ -18,15 +18,19 @@ export const getData = (state: RootState) => { const btcRatesR = selectors.core.data.btc.getRates(state) const ethRatesR = selectors.core.data.eth.getRates(state) const paxRatesR = selectors.core.data.eth.getErc20Rates(state, 'pax') + const usdtRatesR = selectors.core.data.eth.getErc20Rates(state, 'usdt') const xlmRatesR = selectors.core.data.xlm.getRates(state) - const ratesR = lift((bchRates, btcRates, ethRates, paxRates, xlmRates) => ({ - BCH: bchRates, - BTC: btcRates, - ETH: ethRates, - PAX: paxRates, - XLM: xlmRates - }))(bchRatesR, btcRatesR, ethRatesR, paxRatesR, xlmRatesR) + const ratesR = lift( + (bchRates, btcRates, ethRates, paxRates, usdtRatesR, xlmRates) => ({ + BCH: bchRates, + BTC: btcRates, + ETH: ethRates, + PAX: paxRates, + USDT: usdtRatesR, + XLM: xlmRates + }) + )(bchRatesR, btcRatesR, ethRatesR, paxRatesR, usdtRatesR, xlmRatesR) return lift( (invitations, rates, suggestedAmounts, supportedCoins, userData) => ({ diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/SimpleBuy/OrderSummary/index.tsx b/packages/blockchain-wallet-v4-frontend/src/modals/SimpleBuy/OrderSummary/index.tsx index 1572651f687..7cc285a25d5 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/SimpleBuy/OrderSummary/index.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/modals/SimpleBuy/OrderSummary/index.tsx @@ -47,6 +47,7 @@ const mapStateToProps = (state: RootState): LinkStatePropsType => ({ BCH: { colorCode: 'bch' }, ETH: { colorCode: 'eth' }, PAX: { colorCode: 'pax' }, + USDT: { colorCode: 'usdt' }, STX: { colorCode: 'stx' }, XLM: { colorCode: 'xlm' } }) diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/Transactions/DownloadTransactions/index.tsx b/packages/blockchain-wallet-v4-frontend/src/modals/Transactions/DownloadTransactions/index.tsx index 46a926ae9e6..b28bf9478c9 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/Transactions/DownloadTransactions/index.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/modals/Transactions/DownloadTransactions/index.tsx @@ -103,7 +103,7 @@ const mapStateToProps = (state: RootState, ownProps: OwnProps) => ({ }) const mapDispatchToProps = (dispatch: Dispatch, { coin }: OwnProps) => { - const coinCode = coin === 'PAX' ? 'eth' : toLower(coin) + const coinCode = coin === 'PAX' || coin === 'USDT' ? 'eth' : toLower(coin) return { clearTransactions: () => dispatch(actions.core.data[coinCode].clearTransactionHistory()), @@ -118,6 +118,16 @@ const mapDispatchToProps = (dispatch: Dispatch, { coin }: OwnProps) => { ) ) } + if (coin === 'USDT') { + return dispatch( + actions.core.data.eth.fetchErc20TransactionHistory( + address, + startDate, + endDate, + 'usdt' + ) + ) + } return dispatch( actions.core.data[coinCode].fetchTransactionHistory( address, diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/Transactions/DownloadTransactions/selectors.js b/packages/blockchain-wallet-v4-frontend/src/modals/Transactions/DownloadTransactions/selectors.js index a01be0e3de2..11646620c0b 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/Transactions/DownloadTransactions/selectors.js +++ b/packages/blockchain-wallet-v4-frontend/src/modals/Transactions/DownloadTransactions/selectors.js @@ -11,6 +11,8 @@ export const getData = (state, coin) => { return getBchData(state) case 'PAX': return getPaxData(state) + case 'USDT': + return getUsdtData(state) case 'ETH': return getEthData(state) case 'XLM': @@ -45,6 +47,18 @@ const getPaxData = createSelector( } } ) +const getUsdtData = createSelector( + [state => selectors.core.data.eth.getErc20TransactionHistory(state, 'usdt')], + dataR => { + const transform = data => { + const transformedData = map(tx => formatTxData(tx, 'USDT'), data) + return [reportHeaders].concat(transformedData) + } + return { + csvData: dataR.map(transform).getOrElse([]) + } + } +) const getEthData = createSelector( [selectors.core.data.eth.getTransactionHistory], diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/Transactions/DownloadTransactions/template.tsx b/packages/blockchain-wallet-v4-frontend/src/modals/Transactions/DownloadTransactions/template.tsx index 18c4f47bb27..440a98e387e 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/Transactions/DownloadTransactions/template.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/modals/Transactions/DownloadTransactions/template.tsx @@ -136,7 +136,7 @@ const DownloadTransactions: React.FunctionComponent )} - {(coin === 'ETH' || coin === 'PAX') && ( + {(coin === 'ETH' || coin === 'PAX' || coin === 'USDT') && ( { return getEthBalance case 'PAX': return getPaxBalance + case 'USDT': + return getUsdtBalance case 'XLM': return getXlmBalance } @@ -36,6 +39,8 @@ const getRatesSelector = (coin: CoinType, state) => { return selectors.core.data.xlm.getRates(state) case 'PAX': return selectors.core.data.eth.getErc20Rates(state, 'pax') + case 'USDT': + return selectors.core.data.eth.getErc20Rates(state, 'usdt') } } export const getBalance = state => { diff --git a/packages/blockchain-wallet-v4-frontend/src/scenes/Home/Balances/CoinBalance/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/scenes/Home/Balances/CoinBalance/selectors.ts index 6ea1b572328..1ca2d3a5816 100644 --- a/packages/blockchain-wallet-v4-frontend/src/scenes/Home/Balances/CoinBalance/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/scenes/Home/Balances/CoinBalance/selectors.ts @@ -18,6 +18,8 @@ export const getData = (state, ownProps: OwnProps) => { return walletBalanceSelectors.getXlmBalance(state) case 'PAX': return walletBalanceSelectors.getPaxBalance(state) + case 'USDT': + return walletBalanceSelectors.getUsdtBalance(state) default: return Remote.Failure('Unsupported Coin Code') } @@ -46,6 +48,8 @@ export const getData = (state, ownProps: OwnProps) => { return totalBalanceSelectors.getXlmBalance(state) case 'PAX': return totalBalanceSelectors.getPaxBalance(state) + case 'USDT': + return totalBalanceSelectors.getUsdtBalance(state) default: return Remote.Failure('Unsupported Coin Code') } diff --git a/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts index 2d89e080fe2..66dd31e26b2 100644 --- a/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/WalletBalanceDropdown/selectors.ts @@ -67,6 +67,14 @@ export const getData = ( balanceDataR = balanceSelectors.getPaxBalance(state) coinRatesR = selectors.core.data.eth.getErc20Rates(state, 'pax') break + case 'USDT': + addressDataR = getErc20AddressData(state, { + coin: 'USDT', + includeCustodial: true + }) + balanceDataR = balanceSelectors.getUsdtBalance(state) + coinRatesR = selectors.core.data.eth.getErc20Rates(state, 'usdt') + break case 'XLM': addressDataR = getXlmAddressData(state, { excludeLockbox: true, diff --git a/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/template.headerexplainer.tsx b/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/template.headerexplainer.tsx index dee52b6eb7a..dc35d84f87a 100644 --- a/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/template.headerexplainer.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/template.headerexplainer.tsx @@ -105,6 +105,27 @@ export const getHeaderExplainer = coinModel => { ) } + case 'USDT': { + return ( + + + + + + + + + ) + } case 'XLM': { return ( diff --git a/packages/blockchain-wallet-v4/src/exchange/currencies/USDT.ts b/packages/blockchain-wallet-v4/src/exchange/currencies/USDT.ts new file mode 100644 index 00000000000..883ec4b3a79 --- /dev/null +++ b/packages/blockchain-wallet-v4/src/exchange/currencies/USDT.ts @@ -0,0 +1,26 @@ +export default { + base: 'WEI', + code: 'USDT', + displayName: 'USD Tether', + trade: 'USDT', + units: { + WEI: { + rate: '1', + symbol: 'WEI', + decimal_digits: 0, + currency: 'USDT' + }, + GWEI: { + rate: '1000000000', + symbol: 'GWEI', + decimal_digits: 0, + currency: 'UDST' + }, + USDT: { + rate: '1000000000000000000', + symbol: 'Tether', + decimal_digits: 2, + currency: 'USDT' + } + } +} diff --git a/packages/blockchain-wallet-v4/src/exchange/currencies/index.ts b/packages/blockchain-wallet-v4/src/exchange/currencies/index.ts index 8a48eec072e..8cfd8afc418 100755 --- a/packages/blockchain-wallet-v4/src/exchange/currencies/index.ts +++ b/packages/blockchain-wallet-v4/src/exchange/currencies/index.ts @@ -24,6 +24,7 @@ import SGD from './SGD' import THB from './THB' import TWD from './TWD' import USD from './USD' +import USDT from './USDT' import XLM from './XLM' const FiatCurrencies = { @@ -56,11 +57,13 @@ const CryptoCurrencies = { BTC, ETH, PAX, - XLM + XLM, + USDT } const ERC20Currencies = { - PAX + PAX, + USDT } const Currencies = { diff --git a/packages/blockchain-wallet-v4/src/exchange/index.ts b/packages/blockchain-wallet-v4/src/exchange/index.ts index f994c39fb43..720468b2c18 100755 --- a/packages/blockchain-wallet-v4/src/exchange/index.ts +++ b/packages/blockchain-wallet-v4/src/exchange/index.ts @@ -11,7 +11,7 @@ export type UnitType = KeysOfUnion< CurrenciesType[keyof CurrenciesType]['units'] > -const { BCH, BTC, ETH, PAX, XLM } = Currencies +const { BCH, BTC, ETH, PAX, XLM, USDT } = Currencies const DefaultConversion = { value: '0', @@ -128,6 +128,27 @@ const transformFiatToPax = ({ .chain(Currency.toUnit(targetUnit)) } +const transformFiatToUsdt = ({ + value, + fromCurrency, + toUnit, + rates +}: { + fromCurrency: keyof CurrenciesType + rates: RatesType + toUnit: any + value: number | string +}) => { + const pairs = Pairs.create(USDT.code, rates) + const sourceCurrency = prop(fromCurrency, Currencies) + const sourceCurrencyCode = prop('code', sourceCurrency) + const sourceCurrencyUnit = path(['units', sourceCurrencyCode], sourceCurrency) + const targetUnit = path(['units', toUnit], USDT) + return Currency.fromUnit({ value: value, unit: sourceCurrencyUnit }) + .chain(Currency.convert(pairs, USDT)) + .chain(Currency.toUnit(targetUnit)) +} + const transformEtherToFiat = ({ value, fromUnit, @@ -170,6 +191,27 @@ const transformPaxToFiat = ({ .chain(Currency.toUnit(targetCurrencyUnit)) } +const transformUsdtToFiat = ({ + value, + fromUnit, + toCurrency, + rates +}: { + fromUnit: UnitType + rates: RatesType + toCurrency: keyof CurrenciesType + value: number | string +}) => { + const pairs = Pairs.create(USDT.code, rates) + const targetCurrency = prop(toCurrency, Currencies) + const targetCurrencyCode = prop('code', targetCurrency) + const targetCurrencyUnit = path(['units', targetCurrencyCode], targetCurrency) + const sourceUnit = path(['units', fromUnit], USDT) + return Currency.fromUnit({ value, unit: sourceUnit }) + .chain(Currency.convert(pairs, targetCurrency)) + .chain(Currency.toUnit(targetCurrencyUnit)) +} + const transformEtherToEther = ({ value, fromUnit, @@ -202,6 +244,22 @@ const transformPaxToPax = ({ ) } +const transformUsdtToUsdt = ({ + value, + fromUnit, + toUnit +}: { + fromUnit: UnitType + toUnit: UnitType + value: number | string +}) => { + const sourceUnit = path(['units', fromUnit], USDT) + const targetUnit = path(['units', toUnit], USDT) + return Currency.fromUnit({ value, unit: sourceUnit }).chain( + Currency.toUnit(targetUnit) + ) +} + const transformFiatToBch = ({ value, fromCurrency, @@ -414,6 +472,21 @@ const convertFiatToPax = ({ DefaultConversion ) } +const convertFiatToUsdt = ({ + value, + fromCurrency, + toUnit, + rates +}: { + fromCurrency: keyof CurrenciesType + rates: RatesType + toUnit: any + value: number | string +}) => { + return transformFiatToUsdt({ value, fromCurrency, toUnit, rates }).getOrElse( + DefaultConversion + ) +} const convertEthToFiat = ({ value, @@ -447,6 +520,22 @@ const convertPaxToFiat = ({ ) } +const convertUsdtToFiat = ({ + value, + fromUnit, + toCurrency, + rates +}: { + fromUnit: UnitType + rates: RatesType + toCurrency: keyof CurrenciesType + value: number | string +}) => { + return transformUsdtToFiat({ value, fromUnit, toCurrency, rates }).getOrElse( + DefaultConversion + ) +} + const convertEtherToEther = ({ value, fromUnit, @@ -475,6 +564,20 @@ const convertPaxToPax = ({ ) } +const convertUsdtToUsdt = ({ + value, + fromUnit, + toUnit +}: { + fromUnit: UnitType + toUnit: UnitType + value: number | string +}) => { + return transformUsdtToUsdt({ value, fromUnit, toUnit }).getOrElse( + DefaultConversion + ) +} + const convertFiatToBch = ({ value, fromCurrency, @@ -602,6 +705,13 @@ const convertCoinUnitToFiat = ({ toCurrency, rates }).getOrElse(DefaultConversion) + case 'USDT': + return transformUsdtToFiat({ + value, + fromUnit, + toCurrency, + rates + }).getOrElse(DefaultConversion) case 'BCH': return transformBchToFiat({ value, @@ -643,6 +753,10 @@ const convertCoinToCoin = ({ return baseToStandard ? convertPaxToPax({ value, fromUnit: 'WEI', toUnit: 'PAX' }) : convertPaxToPax({ value, fromUnit: 'PAX', toUnit: 'WEI' }) + case 'USDT': + return baseToStandard + ? convertUsdtToUsdt({ value, fromUnit: 'WEI', toUnit: 'USDT' }) + : convertUsdtToUsdt({ value, fromUnit: 'USDT', toUnit: 'WEI' }) case 'BCH': return baseToStandard ? convertBchToBch({ value, fromUnit: 'SAT', toUnit: 'BCH' }) @@ -739,6 +853,22 @@ const displayPaxToFiat = ({ .getOrElse(DefaultDisplay) } +const displayUsdtToFiat = ({ + value, + fromUnit, + toCurrency, + rates +}: { + fromUnit: UnitType + rates: RatesType + toCurrency: keyof CurrenciesType + value: number | string +}) => { + return transformUsdtToFiat({ value, fromUnit, toCurrency, rates }) + .map(Currency.unsafe_deprecated_fiatToString) + .getOrElse(DefaultDisplay) +} + const displayEtherToEther = ({ value, fromUnit, @@ -767,6 +897,20 @@ const displayPaxToPax = ({ .getOrElse(DefaultDisplay) } +const displayUsdtToUsdt = ({ + value, + fromUnit, + toUnit +}: { + fromUnit: UnitType + toUnit: UnitType + value: number | string +}) => { + return transformUsdtToUsdt({ value, fromUnit, toUnit }) + .map(x => Currency.coinToString({ ...x, minDigits: 2, maxDigits: 2 })) + .getOrElse(DefaultDisplay) +} + const displayBchToFiat = ({ value, fromUnit, @@ -844,6 +988,8 @@ const displayCoinToFiat = ({ return displayEtherToFiat({ value, fromUnit, toCurrency, rates }) case 'PAX': return displayPaxToFiat({ value, fromUnit, toCurrency, rates }) + case 'USDT': + return displayUsdtToFiat({ value, fromUnit, toCurrency, rates }) case 'BCH': return displayBchToFiat({ value, fromUnit, toCurrency, rates }) case 'XLM': @@ -891,6 +1037,13 @@ const convertFiatToCoin = ( toUnit: unit, rates: rates }).value + case unit === 'USDT': + return convertFiatToUsdt({ + value, + fromCurrency: currency, + toUnit: unit, + rates: rates + }).value case unit === 'BCH': return convertFiatToBch({ value, @@ -938,6 +1091,13 @@ const convertCoinToFiat = ( fromUnit: unit, rates: rates }).value + case unit === 'USDT': + return convertUsdtToFiat({ + value, + toCurrency: currency, + fromUnit: unit, + rates: rates + }).value case unit === 'BCH': return convertBchToFiat({ value, @@ -978,6 +1138,13 @@ const displayCoinToCoin = (value: number | string, toUnit: CoinType) => { fromUnit: 'PAX', toUnit }) + case 'USDT': + const usdtAmount = convertUsdtToUsdt({ value, fromUnit: 'WEI', toUnit }) + return displayUsdtToUsdt({ + value: Number(usdtAmount.value).toFixed(8), + fromUnit: 'USDT', + toUnit + }) case 'ETH': const ethAmount = convertEtherToEther({ value, fromUnit: 'WEI', toUnit }) return displayEtherToEther({ @@ -993,6 +1160,29 @@ const displayCoinToCoin = (value: number | string, toUnit: CoinType) => { }) } } + +export const convertCoinToCoinFromTransaction = (coin, tx) => { + switch (coin) { + case 'PAX': + return convertPaxToPax({ + value: tx.amount, + fromUnit: 'WEI', + toUnit: 'PAX' + }).value + case 'USDT': + return convertUsdtToUsdt({ + value: tx.amount, + fromUnit: 'WEI', + toUnit: 'USDT' + }).value + default: + return convertEtherToEther({ + value: tx.amount, + fromUnit: 'WEI', + toUnit: 'ETH' + }).value + } +} // TODO: clean up public vs private exports, should just export the following // convertFiatToCoin // convertCoinToFiat @@ -1016,7 +1206,9 @@ export { convertFiatToBch, convertFiatToXlm, convertPaxToFiat, + convertUsdtToFiat, convertPaxToPax, + convertUsdtToUsdt, convertXlmToFiat, convertXlmToXlm, convertCoinToCoin, @@ -1028,6 +1220,7 @@ export { displayEtherToEther, displayFiatToBtc, displayPaxToPax, + displayUsdtToUsdt, displayXlmToFiat, displayXlmToXlm, displayCoinToCoin, diff --git a/packages/blockchain-wallet-v4/src/redux/data/eth/reducers.js b/packages/blockchain-wallet-v4/src/redux/data/eth/reducers.js index cd9a2036e4c..7fd2e824505 100755 --- a/packages/blockchain-wallet-v4/src/redux/data/eth/reducers.js +++ b/packages/blockchain-wallet-v4/src/redux/data/eth/reducers.js @@ -22,7 +22,7 @@ const buildStateWithTokens = defaultValue => compose( reduce((acc, curr) => assoc(curr, defaultValue, acc), {}), prepend('eth') - )(['pax']) + )(['pax', 'usdt']) const INITIAL_STATE = { addresses: Remote.NotAsked, diff --git a/packages/blockchain-wallet-v4/src/redux/data/eth/sagas.ts b/packages/blockchain-wallet-v4/src/redux/data/eth/sagas.ts index e779614a8cb..6d1d80fad09 100755 --- a/packages/blockchain-wallet-v4/src/redux/data/eth/sagas.ts +++ b/packages/blockchain-wallet-v4/src/redux/data/eth/sagas.ts @@ -450,19 +450,8 @@ export default ({ api }) => { prop('price', nth(idx, historicalPrices)) ) const amountBig = new BigNumber( - coin === 'PAX' - ? Exchange.convertPaxToPax({ - // @ts-ignore - value: tx.amount, - fromUnit: 'WEI', - toUnit: 'PAX' - }).value - : Exchange.convertEtherToEther({ - // @ts-ignore - value: tx.amount, - fromUnit: 'WEI', - toUnit: 'ETH' - }).value + // @ts-ignore + Exchange.convertCoinToCoinFromTransaction(coin, tx) ) const valueThen = amountBig.multipliedBy(priceAtTime).toFixed(2) const valueNow = amountBig.multipliedBy(currentPrice).toFixed(2) diff --git a/packages/blockchain-wallet-v4/src/redux/payment/types.ts b/packages/blockchain-wallet-v4/src/redux/payment/types.ts index 8018a85f1a4..33b41430493 100644 --- a/packages/blockchain-wallet-v4/src/redux/payment/types.ts +++ b/packages/blockchain-wallet-v4/src/redux/payment/types.ts @@ -51,7 +51,7 @@ type BtcPaymentValue = IPaymentValue & { type EthPaymentValue = IPaymentValue & { amount?: string - coin: 'ETH' | 'PAX' + coin: 'ETH' | 'PAX' | 'USDT' description?: string from: { address: string @@ -102,7 +102,7 @@ export type BtcPaymentType = IPaymentType & { export type EthPaymentType = IPaymentType & { amount: (n: string) => EthPaymentType - coin: 'ETH' | 'PAX' + coin: 'ETH' | 'PAX' | 'USDT' description: (arg: string) => EthPaymentType fee: (arg: number, account: string) => EthPaymentType init: (arg: { diff --git a/packages/blockchain-wallet-v4/src/redux/walletOptions/types.ts b/packages/blockchain-wallet-v4/src/redux/walletOptions/types.ts index f46c0ff6219..104e319e2fb 100644 --- a/packages/blockchain-wallet-v4/src/redux/walletOptions/types.ts +++ b/packages/blockchain-wallet-v4/src/redux/walletOptions/types.ts @@ -12,7 +12,7 @@ export type SupportedCoinType = { } coinCode: CoinType coinTicker: string - colorCode: 'btc' | 'bch' | 'eth' | 'xlm' | 'pax' | 'stx' + colorCode: 'btc' | 'bch' | 'eth' | 'xlm' | 'pax' | 'stx' | 'usdt' config: { network: string } diff --git a/packages/blockchain-wallet-v4/src/types/index.ts b/packages/blockchain-wallet-v4/src/types/index.ts index c94175e4e84..4380277f2a0 100755 --- a/packages/blockchain-wallet-v4/src/types/index.ts +++ b/packages/blockchain-wallet-v4/src/types/index.ts @@ -47,7 +47,8 @@ export enum CoinTypeEnum { BCH, ETH, PAX, - XLM + XLM, + USDT } export enum FiatTypeEnum { EUR, From 6475dfea1538ec127d1184eddd74fedb96d8719d Mon Sep 17 00:00:00 2001 From: TheLeoB Date: Thu, 25 Jun 2020 10:04:27 -0400 Subject: [PATCH 13/34] fix(interest): add e2e --- .../src/modals/Interest/AccountSummary/template.success.tsx | 1 + .../src/modals/Interest/DepositForm/template.success.tsx | 2 ++ .../src/modals/Interest/WithdrawalForm/template.success.tsx | 2 ++ 3 files changed, 5 insertions(+) diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/AccountSummary/template.success.tsx b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/AccountSummary/template.success.tsx index 2b10cc97c4c..e7f363e470e 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/AccountSummary/template.success.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/AccountSummary/template.success.tsx @@ -89,6 +89,7 @@ const AccountSummary: React.FC = props => { name='close' size='20px' color='grey600' + data-e2e='closeInterest' /> diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/DepositForm/template.success.tsx b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/DepositForm/template.success.tsx index 0e9ab32905c..90e54f8e2f2 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/DepositForm/template.success.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/DepositForm/template.success.tsx @@ -214,6 +214,7 @@ const DepositForm: React.FC & Props> = props => { handleDisplayToggle(false)} + data-e2e='toggleFiat' > {walletCurrency} @@ -221,6 +222,7 @@ const DepositForm: React.FC & Props> = props => { handleDisplayToggle(true)} + data-e2e='toggleCoin' > {coinTicker} diff --git a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/template.success.tsx b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/template.success.tsx index 1fbfbf52581..34af4345352 100644 --- a/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/template.success.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/modals/Interest/WithdrawalForm/template.success.tsx @@ -260,6 +260,7 @@ const WithdrawalForm: React.FC & handleDisplayToggle(false)} + data-e2e='toggleFiat' > {walletCurrency} @@ -267,6 +268,7 @@ const WithdrawalForm: React.FC & handleDisplayToggle(true)} + data-e2e='toggleCoin' > {coinTicker} From 400f4389773cb63a8029d3f5899cd1b1c031b455 Mon Sep 17 00:00:00 2001 From: Milan Date: Thu, 25 Jun 2020 16:33:25 +0200 Subject: [PATCH 14/34] feat: added missing currency --- .../src/data/components/send/reducers.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/send/reducers.js b/packages/blockchain-wallet-v4-frontend/src/data/components/send/reducers.js index 75a39093d52..bb101e0da66 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/send/reducers.js +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/send/reducers.js @@ -8,6 +8,7 @@ const INITIAL_STATE = { BCH: Remote.NotAsked, ETH: Remote.NotAsked, PAX: Remote.NotAsked, + USDT: Remote.NotAsked, XLM: Remote.NotAsked } } From 2f81e44ab613017859496b1a7e1e342ba11b8a08 Mon Sep 17 00:00:00 2001 From: Philip London Date: Thu, 25 Jun 2020 17:48:40 +0200 Subject: [PATCH 15/34] feat(algo): fix refresh --- .../src/data/components/refresh/sagas.js | 11 ++++- .../src/redux/data/algo/reducers.ts | 12 ++++- .../src/redux/data/algo/sagaRegister.ts | 4 ++ .../src/redux/data/algo/sagas.ts | 45 ++++++++++++++++++- .../src/redux/data/algo/selectors.ts | 4 ++ 5 files changed, 71 insertions(+), 5 deletions(-) diff --git a/packages/blockchain-wallet-v4-frontend/src/data/components/refresh/sagas.js b/packages/blockchain-wallet-v4-frontend/src/data/components/refresh/sagas.js index 52f54386b02..c2968e41737 100644 --- a/packages/blockchain-wallet-v4-frontend/src/data/components/refresh/sagas.js +++ b/packages/blockchain-wallet-v4-frontend/src/data/components/refresh/sagas.js @@ -13,7 +13,7 @@ export default () => { yield put(actions.core.data.eth.fetchData()) yield put(actions.core.data.xlm.fetchData()) yield put(actions.core.data.eth.fetchErc20Data('pax')) - yield put(actions.components.interest.fetchInterestAccountBalance()) + yield put(actions.components.interest.fetchInterestBalance()) yield put(actions.components.simpleBuy.fetchSBBalances()) yield put(actions.components.simpleBuy.fetchSBOrders()) // Rates @@ -39,6 +39,9 @@ export default () => { case contains('/xlm/transactions', pathname): yield call(refreshXlmTransactions) break + case contains('/algo/transactions', pathname): + yield call(refreshAlgoTransactions) + break case contains('/lockbox/', pathname): yield put(actions.lockbox.initializeDashboard(pathname.split('/')[3])) break @@ -66,6 +69,8 @@ export default () => { yield put(actions.core.data.xlm.fetchTransactions('', true)) } } catch (e) { + // eslint-disable-next-line + console.log(e) yield put( actions.logs.logErrorMessage( 'components/refresh/sagas', @@ -96,6 +101,10 @@ export default () => { yield put(actions.core.data.xlm.fetchTransactions(null, true)) } + const refreshAlgoTransactions = function * () { + yield put(actions.core.data.algo.fetchTransactions(null, true)) + } + return { refreshClicked, refreshBchTransactions, diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts index afbd546e293..043858dc797 100644 --- a/packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/reducers.ts @@ -35,14 +35,22 @@ export const algoReducer = ( transactions: [Remote.Failure(action.payload)] } case AT.FETCH_ALGO_TRANSACTIONS_LOADING: + const { reset } = action.payload return { ...state, - transactions: [...state.transactions, Remote.Loading] + transactions: reset + ? [Remote.Loading] + : [...state.transactions, Remote.Loading] } case AT.FETCH_ALGO_TRANSACTIONS_SUCCESS: return { ...state, - transactions: [...state.transactions, Remote.Success(action.payload)] + transactions: [ + Remote.Success(action.payload.transactions), + ...state.transactions.filter( + (tx, i) => i !== state.transactions.length - 1 + ) + ] } default: { return state diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/sagaRegister.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/sagaRegister.ts index 5de3f7d5f6f..30dc731f19c 100644 --- a/packages/blockchain-wallet-v4/src/redux/data/algo/sagaRegister.ts +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/sagaRegister.ts @@ -7,5 +7,9 @@ export default ({ api }) => { return function * coreDataAlgoSaga () { yield takeLatest(AT.FETCH_ALGO_RATES, dataAlgoSagas.fetchRates) + yield takeLatest( + AT.FETCH_ALGO_TRANSACTIONS, + dataAlgoSagas.fetchTransactions + ) } } diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/sagas.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/sagas.ts index b1050de8cb2..43737f57988 100644 --- a/packages/blockchain-wallet-v4/src/redux/data/algo/sagas.ts +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/sagas.ts @@ -1,10 +1,20 @@ -import { call, put } from 'redux-saga/effects' +import { call, put, select } from 'redux-saga/effects' +import { flatten, last, length } from 'ramda' import { APIType } from 'core/network/api' +import Remote from '../../../remote' import * as A from './actions' +import * as S from './selectors' +import { SBOrderType } from 'core/types' +import moment from 'moment' +import simpleBuySagas from '../simpleBuy/sagas' + +const TX_PER_PAGE = 10 export default ({ api }: { api: APIType }) => { + const { fetchSBOrders } = simpleBuySagas({ api }) + const fetchRates = function * () { try { yield put(A.fetchRatesLoading()) @@ -15,7 +25,38 @@ export default ({ api }: { api: APIType }) => { } } + const fetchTransactions = function * ( + action: ReturnType + ) { + try { + const { payload } = action + const { reset } = payload + const pages = yield select(S.getTransactions) + const offset = reset ? 0 : length(pages) * TX_PER_PAGE + const transactionsAtBound = yield select(S.getTransactionsAtBound) + if (Remote.Loading.is(last(pages))) return + if (transactionsAtBound && !reset) return + yield put(A.fetchTransactionsLoading(reset)) + let txs: Array = [] + const txPage: Array = txs + const sbPage: Array = yield call( + fetchSBOrders, + txPage, + offset, + true, + 'ALGO' + ) + const page = flatten([txPage, sbPage]).sort((a, b) => { + return moment(b.insertedAt).valueOf() - moment(a.insertedAt).valueOf() + }) + yield put(A.fetchTransactionsSuccess(page, reset, true)) + } catch (e) { + yield put(A.fetchTransactionsFailure(e.message)) + } + } + return { - fetchRates + fetchRates, + fetchTransactions } } diff --git a/packages/blockchain-wallet-v4/src/redux/data/algo/selectors.ts b/packages/blockchain-wallet-v4/src/redux/data/algo/selectors.ts index 976f2dd28a0..94604ba0dcd 100644 --- a/packages/blockchain-wallet-v4/src/redux/data/algo/selectors.ts +++ b/packages/blockchain-wallet-v4/src/redux/data/algo/selectors.ts @@ -7,3 +7,7 @@ export const getRates = (state: RootState) => { export const getTransactions = (state: RootState) => { return state.dataPath.algo.transactions } + +export const getTransactionsAtBound = (state: RootState) => { + return state.dataPath.algo.transactions_at_bound +} From d4c9ad3f907b6c53c8dc7334042a55db7b27544a Mon Sep 17 00:00:00 2001 From: Milan Date: Thu, 25 Jun 2020 21:49:26 +0200 Subject: [PATCH 16/34] feat: improved logic for rendering USDT --- .../src/assets/locales/index.d.ts | 1 + .../src/components/Form/SelectBoxCoin/selectors.js | 2 +- .../Wallet/MenuLeft/Balances/WalletBalance/template.js | 1 + .../src/scenes/Home/Balances/Table/template.tsx | 1 + .../src/scenes/Transactions/template.headerexplainer.tsx | 4 ++-- 5 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/blockchain-wallet-v4-frontend/src/assets/locales/index.d.ts b/packages/blockchain-wallet-v4-frontend/src/assets/locales/index.d.ts index 5644c027150..20b4e05f7be 100644 --- a/packages/blockchain-wallet-v4-frontend/src/assets/locales/index.d.ts +++ b/packages/blockchain-wallet-v4-frontend/src/assets/locales/index.d.ts @@ -2010,6 +2010,7 @@ type MessagesType = { 'scenes.transaction.headertext.explainer.btc1': 'Bitcoin (BTC) is the original crypto and the internet’s digital currency.' 'scenes.transaction.headertext.explainer.eth': 'Ethereum (ETH) is a currency and computing platform. Built for developers and apps.' 'scenes.transaction.headertext.explainer.usdd': 'The USD Digital coin (USD-D) is backed by the US Dollar, making it a Stablecoin.' + 'scenes.transaction.headertext.explainer.usdt': 'The USD Theter coin (USDT) is backed by the US Dollar, making it a Stablecoin.' 'scenes.transaction.headertext.explainer.xlm': 'The Stellar Lumen (XLM) connects banks, payments and you to the Stellar Payment network.' 'scenes.transactions.bitcoin.content.list.listitem.status.received': 'Received' 'scenes.transactions.bitcoin.content.list.listitem.status.sent': 'Sent' diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxCoin/selectors.js b/packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxCoin/selectors.js index 178cbcb73a0..fa12c63c4be 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxCoin/selectors.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/SelectBoxCoin/selectors.js @@ -6,7 +6,7 @@ export const getCoins = (state, { type }) => { const supportedCoins = selectors.core.walletOptions .getSupportedCoins(state) .getOrFail() - const coinOrder = ['PAX', 'BTC', 'BCH', 'ETH', 'XLM'] + const coinOrder = ['PAX', 'USDT', 'BTC', 'BCH', 'ETH', 'XLM'] return values( map( x => ({ text: x.displayName, value: x.coinCode }), diff --git a/packages/blockchain-wallet-v4-frontend/src/layouts/Wallet/MenuLeft/Balances/WalletBalance/template.js b/packages/blockchain-wallet-v4-frontend/src/layouts/Wallet/MenuLeft/Balances/WalletBalance/template.js index 029a842733e..551caf77b5d 100644 --- a/packages/blockchain-wallet-v4-frontend/src/layouts/Wallet/MenuLeft/Balances/WalletBalance/template.js +++ b/packages/blockchain-wallet-v4-frontend/src/layouts/Wallet/MenuLeft/Balances/WalletBalance/template.js @@ -22,6 +22,7 @@ const Template = props => { const { supportedCoins } = props const coinOrder = [ supportedCoins.PAX, + supportedCoins.USDT, supportedCoins.BTC, supportedCoins.ETH, supportedCoins.BCH, diff --git a/packages/blockchain-wallet-v4-frontend/src/scenes/Home/Balances/Table/template.tsx b/packages/blockchain-wallet-v4-frontend/src/scenes/Home/Balances/Table/template.tsx index f00a033c786..fd31a173979 100644 --- a/packages/blockchain-wallet-v4-frontend/src/scenes/Home/Balances/Table/template.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/scenes/Home/Balances/Table/template.tsx @@ -44,6 +44,7 @@ const Success = (props: Props) => { const { viewType, supportedCoins } = props const coinOrder = [ supportedCoins.PAX, + supportedCoins.USDT, supportedCoins.BTC, supportedCoins.ETH, supportedCoins.BCH, diff --git a/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/template.headerexplainer.tsx b/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/template.headerexplainer.tsx index dc35d84f87a..95da5689232 100644 --- a/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/template.headerexplainer.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/scenes/Transactions/template.headerexplainer.tsx @@ -109,8 +109,8 @@ export const getHeaderExplainer = coinModel => { return ( Date: Thu, 25 Jun 2020 16:43:07 -0400 Subject: [PATCH 17/34] fix(e2e): tx id to icon --- .../src/scenes/Interest/TransactionList/template.success.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/blockchain-wallet-v4-frontend/src/scenes/Interest/TransactionList/template.success.tsx b/packages/blockchain-wallet-v4-frontend/src/scenes/Interest/TransactionList/template.success.tsx index 07644a973d0..19afddf99c5 100644 --- a/packages/blockchain-wallet-v4-frontend/src/scenes/Interest/TransactionList/template.success.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/scenes/Interest/TransactionList/template.success.tsx @@ -109,6 +109,7 @@ function TransactionList (props: Props): ReactElement | null { color={colorCode} size='20px' weight={600} + data-e2e={id} /> From 26fd0dd855e197cbf9965d74384b536570317dbd Mon Sep 17 00:00:00 2001 From: Milan Date: Fri, 26 Jun 2020 10:23:48 +0200 Subject: [PATCH 18/34] feat: added proper selector for usdt --- .../src/Badges/Badge.js | 12 +- .../src/Badges/Badge.spec.js | 4 +- .../src/Banners/Banner.js | 4 +- .../src/Banners/Banner.spec.js | 8 +- .../src/Buttons/IconButton.spec.js | 2 +- .../src/Carousels/Carousel/index.js | 18 +- .../src/Carousels/Carousel/template.js | 12 +- .../src/Dropdowns/ComponentDropdown/index.js | 10 +- .../Dropdowns/ComponentDropdown/template.js | 4 +- .../src/Dropdowns/SimpleDropdown/index.js | 10 +- .../src/Dropdowns/SimpleDropdown/template.js | 2 +- .../src/Footer/Select/Select.js | 8 +- .../src/Footer/index.js | 28 +- .../src/Form/AutosizeTextInput.js | 4 +- .../src/Form/CheckBoxInput.spec.js | 2 +- .../src/Form/CreatableInput/index.js | 6 +- .../src/Form/CreatableInput/template.js | 2 +- .../src/Form/DateInput/index.spec.js | 2 +- .../src/Form/PasswordInput.js | 4 +- .../src/Form/RadioButtonInput.spec.js | 2 +- .../src/Form/SelectInput/SelectInput.spec.js | 2 +- .../src/Form/SelectInput/index.js | 4 +- .../src/Form/SelectInput/template.js | 4 +- .../src/Form/TextInput.js | 4 +- .../src/Gauges/ConfirmationGauge.js | 6 +- .../src/Gauges/PasswordGauge.js | 10 +- .../src/Gauges/SecurityGauge.js | 6 +- .../src/Icons/Icon.spec.js | 2 +- .../src/Images/Background.spec.js | 2 +- .../src/Images/Image.spec.js | 2 +- .../src/Loaders/BlockchainLoader.js | 2 +- .../src/Modals/Modal.spec.js | 2 +- .../src/Modals/ModalFooter.spec.js | 2 +- .../src/Modals/ModalHeader.js | 18 +- .../src/Modals/ModalHeader.spec.js | 2 +- .../src/Navigation/Events/index.js | 6 +- .../src/Navigation/MenuButton/index.js | 4 +- .../Navigation/MenuDropdown/DropdownLink.js | 8 +- .../src/Navigation/MenuDropdown/index.js | 12 +- .../src/Navigation/MenuItem/index.js | 2 +- .../src/Navigation/SearchBar/index.js | 6 +- .../src/Navigation/SearchButton/index.js | 2 +- .../src/Navigation/index.js | 124 ++-- .../src/Navigation/throttle.js | 2 +- .../src/Separators/Separator.spec.js | 2 +- .../src/Skeletons/SkeletonCircle.spec.js | 2 +- .../src/Skeletons/SkeletonRectangle.spec.js | 2 +- .../src/Toasts/Toast.js | 8 +- .../src/Tooltip/TooltipHost.js | 4 +- .../src/Tooltip/index.js | 2 +- .../src/Tooltip/template.js | 2 +- .../src/components/Alerts/messages.tsx | 632 +++++++++--------- .../src/components/Alerts/template.tsx | 2 +- .../components/Announcements/Service/index.js | 2 +- .../Announcements/Service/template.js | 22 +- .../components/Announcements/Static/index.js | 2 +- .../Announcements/Static/template.email.tsx | 30 +- .../src/components/Balances/Lockbox.tsx | 18 +- .../src/components/CopyClipboard/index.js | 8 +- .../src/components/CopyClipboard/template.js | 6 +- .../src/components/DataError/ErrorHandler.js | 36 +- .../src/components/DataError/index.tsx | 8 +- .../components/Display/CoinDisplay/index.tsx | 2 +- .../Display/CoinDisplay/template.loading.tsx | 2 +- .../components/Display/ComboDisplay/index.js | 2 +- .../components/Display/FiatDisplay/index.tsx | 4 +- .../Display/FiatDisplay/template.error.tsx | 4 +- .../Display/FiatDisplay/template.loading.tsx | 2 +- .../components/Display/StringDisplay/index.js | 6 +- .../Display/SwitchableDisplay/index.js | 2 +- .../src/components/DropdownLanguage/index.js | 4 +- .../components/EmailRequired/EmailRequired.js | 14 +- .../src/components/EmptyTx/index.js | 36 +- .../ExchangeTimeline/Error/index.js | 20 +- .../ExchangeTimeline/Step1/index.js | 14 +- .../ExchangeTimeline/Step2/index.js | 12 +- .../ExchangeTimeline/Step3/index.js | 16 +- .../src/components/Flyout/index.tsx | 4 +- .../components/Form/AutosizeTextBox/index.js | 10 +- .../src/components/Form/CaptchaBox/index.js | 8 +- .../Form/CaptchaBox/template.error.js | 2 +- .../Form/CaptchaBox/template.loading.js | 2 +- .../Form/CaptchaBox/template.success.js | 10 +- .../src/components/Form/CheckBox/index.js | 4 +- .../Form/CoinBalanceDropdown/index.tsx | 20 +- .../components/Form/CountdownTimer/index.js | 10 +- .../Form/CountdownTimer/template.js | 26 +- .../components/Form/CreditCardBox/index.tsx | 12 +- .../Form/CreditCardCVCBox/index.tsx | 4 +- .../Form/CreditCardExpiryBox/index.tsx | 12 +- .../src/components/Form/DateBox/index.js | 2 +- .../components/Form/DateBoxDebounced/index.js | 18 +- .../src/components/Form/DateInputBox/index.js | 22 +- .../EmailVerification/EmailVerification.js | 48 +- .../Form/FiatConverter/Converter/index.js | 4 +- .../Form/FiatConverter/Converter/template.js | 12 +- .../components/Form/FiatConverter/index.js | 2 +- .../Form/FiatConverter/template.error.js | 2 +- .../Form/FiatConverter/template.loading.js | 2 +- .../src/components/Form/FormError/index.js | 4 +- .../src/components/Form/FormLabel/index.js | 2 +- .../src/components/Form/NumberBox/index.js | 8 +- .../Form/NumberBoxDebounced/index.js | 22 +- .../src/components/Form/PasswordBox/index.js | 8 +- .../components/Form/PhoneNumberBox/index.js | 14 +- .../src/components/Form/RadioButton/index.js | 2 +- .../src/components/Form/SelectBox/index.js | 6 +- .../Form/SelectBoxBankAccountType/index.js | 10 +- .../Form/SelectBoxBchAddresses/index.js | 2 +- .../Form/SelectBoxBchAddresses/template.js | 10 +- .../Form/SelectBoxBtcAddresses/index.tsx | 6 +- .../Form/SelectBoxBtcAddresses/template.js | 10 +- .../components/Form/SelectBoxCoin/index.js | 10 +- .../Form/SelectBoxCoinPriceChart/index.js | 14 +- .../components/Form/SelectBoxCountry/index.js | 6 +- .../Form/SelectBoxCurrency/index.js | 2 +- .../Form/SelectBoxEthAddresses/index.js | 2 +- .../Form/SelectBoxEthAddresses/template.js | 4 +- .../Form/SelectBoxLanguages/index.js | 2 +- .../components/Form/SelectBoxRegion/index.js | 10 +- .../components/Form/SelectBoxTheme/index.js | 22 +- .../components/Form/SelectBoxUSState/index.js | 6 +- .../Form/SelectBoxXlmAddresses/index.js | 2 +- .../Form/SelectBoxXlmAddresses/template.js | 4 +- .../Form/TabMenuTransactionStatus/index.js | 2 +- .../Form/TabMenuTransactionStatus/template.js | 24 +- .../src/components/Form/TextArea/index.js | 2 +- .../Form/TextAreaDebounced/index.js | 16 +- .../src/components/Form/TextBox/index.js | 10 +- .../components/Form/TextBoxDebounced/index.js | 18 +- .../IdentityVerification/TierCard/index.tsx | 52 +- .../IdentityVerification/TierCard/services.js | 112 ++-- .../src/components/LazyLoadContainer/index.js | 4 +- .../components/Lockbox/AppManager/index.js | 44 +- .../components/Lockbox/AppManager/template.js | 52 +- .../src/components/ModalStepper/index.js | 12 +- .../src/components/OrderStatus/index.js | 60 +- .../src/components/QRCodeCapture/index.js | 16 +- .../src/components/QRCodeCapture/template.js | 8 +- .../src/components/QRReader/index.js | 8 +- .../ResizeableFontInputHOC/index.js | 10 +- .../src/components/RotateSync/index.js | 2 +- .../src/components/Security/SecurityIcon.js | 2 +- .../components/Send/ExchangePromo/index.tsx | 62 +- .../components/Send/RecoveryPhrase/index.tsx | 18 +- .../src/components/Send/index.tsx | 4 +- .../src/components/SiftScience/index.js | 6 +- .../src/components/StepIndicator/index.js | 2 +- .../src/components/Terms/index.js | 112 ++-- .../src/components/Tooltips/index.js | 322 ++++----- .../TransactionListItem/Addresses/index.js | 14 +- .../Confirmations/index.js | 40 +- .../TransactionListItem/Description/index.js | 2 +- .../Description/template.js | 20 +- .../TransactionListItem/FiatAtTime/index.js | 4 +- .../FiatAtTime/template.error.js | 2 +- .../FiatAtTime/template.loading.js | 2 +- .../FiatAtTime/template.success.js | 2 +- .../TransactionListItem/Status/index.js | 16 +- .../TransactionFee/index.js | 22 +- .../components/TransactionListItem/index.js | 2 +- .../TransactionListItem/template.js | 100 +-- .../src/components/Tray/index.tsx | 4 +- .../src/components/ZendeskWidget/index.tsx | 6 +- .../src/data/alerts/sagaRegister.js | 2 +- .../src/data/alerts/sagas.js | 2 +- .../src/data/analytics/sagaRegister.js | 2 +- .../src/data/analytics/sagas.js | 20 +- .../src/data/auth/sagaRegister.js | 2 +- .../src/data/auth/sagas.js | 46 +- .../src/data/balance/sagas.js | 12 +- .../src/data/bitpay/sagas.js | 2 +- .../components/activityList/sagaRegister.js | 2 +- .../src/data/components/activityList/sagas.js | 2 +- .../bchTransactions/sagaRegister.js | 2 +- .../data/components/bchTransactions/sagas.js | 6 +- .../src/data/components/borrow/reducers.ts | 2 +- .../data/components/borrow/sagaRegister.ts | 2 +- .../src/data/components/borrow/sagas.ts | 26 +- .../src/data/components/borrow/sagas.utils.ts | 8 +- .../btcTransactions/sagaRegister.js | 2 +- .../data/components/btcTransactions/sagas.js | 6 +- .../ethTransactions/sagaRegister.js | 2 +- .../data/components/ethTransactions/sagas.js | 10 +- .../components/exchange/exchange.sagas.js | 74 +- .../src/data/components/exchange/reducers.ts | 2 +- .../data/components/exchange/sagaRegister.js | 2 +- .../data/components/exchange/sagas.utils.ts | 24 +- .../exchangeHistory/sagaRegister.js | 2 +- .../data/components/exchangeHistory/sagas.js | 28 +- .../identityVerification/reducers.ts | 2 +- .../identityVerification/sagaRegister.js | 2 +- .../components/identityVerification/sagas.ts | 42 +- .../importBtcAddress/sagaRegister.js | 2 +- .../data/components/importBtcAddress/sagas.js | 6 +- .../src/data/components/interest/reducers.ts | 2 +- .../data/components/interest/sagaRegister.ts | 2 +- .../src/data/components/interest/sagas.ts | 28 +- .../data/components/interest/sagas.utils.ts | 6 +- .../data/components/lockbox/sagaRegister.js | 10 +- .../src/data/components/lockbox/sagas.js | 38 +- .../manageAddresses/sagaRegister.js | 2 +- .../data/components/manageAddresses/sagas.js | 18 +- .../components/onboarding/sagaRegister.ts | 2 +- .../src/data/components/onboarding/sagas.ts | 6 +- .../data/components/onfido/sagaRegister.js | 2 +- .../src/data/components/onfido/sagas.js | 4 +- .../components/priceChart/sagaRegister.js | 2 +- .../src/data/components/priceChart/sagas.js | 6 +- .../components/priceTicker/sagaRegister.js | 2 +- .../src/data/components/priceTicker/sagas.js | 2 +- .../components/recoveryPhrase/reducers.ts | 2 +- .../data/components/refresh/sagaRegister.js | 2 +- .../src/data/components/refresh/sagas.js | 12 +- .../components/requestBch/sagaRegister.js | 2 +- .../src/data/components/requestBch/sagas.js | 2 +- .../components/requestBtc/sagaRegister.js | 2 +- .../src/data/components/requestBtc/sagas.js | 6 +- .../components/requestEth/sagaRegister.js | 2 +- .../src/data/components/requestEth/sagas.js | 2 +- .../components/requestXlm/sagaRegister.js | 2 +- .../src/data/components/requestXlm/sagas.js | 2 +- .../src/data/components/sagaRegister.js | 2 +- .../src/data/components/send/sagaRegister.js | 2 +- .../src/data/components/send/sagas.js | 4 +- .../src/data/components/sendBch/reducers.ts | 2 +- .../data/components/sendBch/sagaRegister.ts | 2 +- .../src/data/components/sendBch/sagas.ts | 16 +- .../src/data/components/sendBtc/reducers.ts | 2 +- .../data/components/sendBtc/sagaRegister.ts | 2 +- .../src/data/components/sendBtc/sagas.ts | 26 +- .../src/data/components/sendEth/reducers.ts | 2 +- .../data/components/sendEth/sagaRegister.ts | 2 +- .../src/data/components/sendEth/sagas.ts | 28 +- .../src/data/components/sendXlm/reducers.ts | 2 +- .../data/components/sendXlm/sagaRegister.ts | 2 +- .../src/data/components/sendXlm/sagas.ts | 22 +- .../data/components/settings/sagaRegister.js | 2 +- .../src/data/components/settings/sagas.js | 4 +- .../components/signMessage/sagaRegister.js | 2 +- .../src/data/components/signMessage/sagas.js | 2 +- .../src/data/components/simpleBuy/reducers.ts | 2 +- .../data/components/simpleBuy/sagaRegister.ts | 4 +- .../src/data/components/simpleBuy/sagas.ts | 52 +- .../uploadDocuments/sagaRegister.js | 2 +- .../data/components/uploadDocuments/sagas.js | 4 +- .../src/data/components/utils/sagas.js | 14 +- .../data/components/veriff/sagaRegister.js | 2 +- .../src/data/components/veriff/sagas.js | 4 +- .../xlmTransactions/sagaRegister.js | 2 +- .../data/components/xlmTransactions/sagas.js | 4 +- .../src/data/goals/reducers.ts | 2 +- .../src/data/goals/sagaRegister.ts | 2 +- .../src/data/goals/sagas.ts | 52 +- .../src/data/middleware/sagaRegister.js | 2 +- .../webSocket/coins/sagaRegister.js | 2 +- .../data/middleware/webSocket/coins/sagas.js | 10 +- .../webSocket/rates/sagaRegister.js | 2 +- .../data/middleware/webSocket/rates/sagas.js | 24 +- .../data/middleware/webSocket/sagaRegister.js | 2 +- .../middleware/webSocket/xlm/sagaRegister.js | 2 +- .../data/middleware/webSocket/xlm/sagas.js | 6 +- .../data/modules/addressesBch/sagaRegister.js | 2 +- .../src/data/modules/addressesBch/sagas.js | 4 +- .../src/data/modules/profile/reducers.ts | 2 +- .../src/data/modules/profile/sagaRegister.js | 2 +- .../src/data/modules/profile/sagas.ts | 46 +- .../src/data/modules/rates/rates.spec.js | 2 +- .../src/data/modules/rates/sagaRegister.js | 2 +- .../src/data/modules/rates/sagas.js | 12 +- .../src/data/modules/sagaRegister.js | 2 +- .../modules/securityCenter/sagaRegister.js | 2 +- .../src/data/modules/securityCenter/sagas.js | 24 +- .../src/data/modules/settings/sagaRegister.js | 2 +- .../src/data/modules/settings/sagas.js | 48 +- .../src/data/modules/transferEth/reducers.ts | 2 +- .../data/modules/transferEth/sagaRegister.ts | 2 +- .../src/data/modules/transferEth/sagas.ts | 4 +- .../src/data/preferences/reducers.ts | 2 +- .../src/data/preferences/sagaRegister.ts | 2 +- .../src/data/preferences/sagas.ts | 4 +- .../src/data/rootSaga.js | 6 +- .../src/data/router/sagaRegister.js | 2 +- .../src/data/router/sagas.js | 2 +- .../src/data/wallet/sagaRegister.js | 2 +- .../src/data/wallet/sagas.js | 10 +- .../src/index.error.js | 6 +- .../src/layouts/Public/Footer/index.tsx | 8 +- .../src/layouts/Public/Header/index.tsx | 8 +- .../src/layouts/Public/index.js | 2 +- .../MenuLeft/Balances/CurrencySwitch/index.js | 12 +- .../LockboxBalance/BchLockboxBalance/index.js | 10 +- .../BchLockboxBalance/template.error.js | 6 +- .../BchLockboxBalance/template.success.js | 6 +- .../LockboxBalance/BtcLockboxBalance/index.js | 10 +- .../BtcLockboxBalance/template.error.js | 6 +- .../BtcLockboxBalance/template.success.js | 6 +- .../LockboxBalance/EthLockboxBalance/index.js | 10 +- .../EthLockboxBalance/template.error.js | 6 +- .../EthLockboxBalance/template.success.js | 6 +- .../LockboxBalance/XlmLockboxBalance/index.js | 10 +- .../XlmLockboxBalance/template.error.js | 6 +- .../XlmLockboxBalance/template.success.js | 6 +- .../MenuLeft/Balances/LockboxBalance/index.js | 2 +- .../Balances/LockboxBalance/template.js | 18 +- .../MenuLeft/Balances/TotalBalance/index.js | 16 +- .../Balances/WalletBalance/Balance/index.tsx | 2 +- .../WalletBalance/Balance/selectors.js | 2 + .../WalletBalance/Balance/template.error.js | 6 +- .../MenuLeft/Balances/WalletBalance/index.js | 2 +- .../Balances/WalletBalance/template.js | 18 +- .../Balances/WatchOnlyBalance/Bch/index.js | 16 +- .../Balances/WatchOnlyBalance/Btc/index.js | 16 +- .../Balances/WatchOnlyBalance/index.js | 2 +- .../Balances/WatchOnlyBalance/template.js | 16 +- .../Wallet/MenuLeft/Balances/index.tsx | 6 +- .../layouts/Wallet/MenuLeft/Balances/model.js | 20 +- .../layouts/Wallet/MenuLeft/Footer/index.js | 22 +- .../Wallet/MenuLeft/Navigation/index.tsx | 2 +- .../Wallet/MenuLeft/Navigation/template.tsx | 68 +- .../src/layouts/Wallet/MenuLeft/index.tsx | 2 +- .../Wallet/MenuLeft/template.failure.tsx | 8 +- .../Wallet/MenuLeft/template.loading.tsx | 14 +- .../layouts/Wallet/MenuTop/Features/index.tsx | 2 +- .../MenuTop/Features/template.large.tsx | 60 +- .../MenuTop/Features/template.small.tsx | 52 +- .../layouts/Wallet/MenuTop/Refresh/index.tsx | 2 +- .../Wallet/MenuTop/Refresh/template.tsx | 6 +- .../Wallet/MenuTop/SecurityCenter/index.tsx | 10 +- .../Wallet/MenuTop/Settings/template.tsx | 46 +- .../src/layouts/Wallet/MenuTop/index.tsx | 2 +- .../layouts/Wallet/MenuTop/template.large.tsx | 6 +- .../Wallet/MenuTop/template.medium.tsx | 6 +- .../layouts/Wallet/MenuTop/template.small.tsx | 12 +- .../src/layouts/Wallet/Page/index.js | 8 +- .../src/layouts/Wallet/index.js | 2 +- .../src/layouts/Wallet/template.js | 4 +- .../Addresses/DeleteAddressLabel/index.js | 2 +- .../Addresses/DeleteAddressLabel/template.js | 32 +- .../Addresses/ShowUsedAddresses/index.js | 6 +- .../Addresses/ShowUsedAddresses/template.js | 38 +- .../Addresses/UpgradeAddressLabels/index.js | 2 +- .../UpgradeAddressLabels/template.js | 8 +- .../src/modals/Bch/RequestBch/index.js | 16 +- .../modals/Bch/RequestBch/template.loading.js | 2 +- .../modals/Bch/RequestBch/template.success.js | 72 +- .../FirstStep/MaximumAmountLink/index.js | 8 +- .../src/modals/Bch/SendBch/FirstStep/index.js | 2 +- .../Bch/SendBch/FirstStep/template.error.js | 2 +- .../Bch/SendBch/FirstStep/template.loading.js | 14 +- .../Bch/SendBch/FirstStep/template.success.js | 108 +-- .../SendBch/FirstStep/validationMessages.js | 12 +- .../modals/Bch/SendBch/SecondStep/index.js | 4 +- .../Bch/SendBch/SecondStep/template.error.js | 2 +- .../SendBch/SecondStep/template.loading.js | 26 +- .../SendBch/SecondStep/template.success.js | 78 +-- .../src/modals/Bch/SendBch/index.js | 6 +- .../src/modals/Bch/SendBch/template.js | 10 +- .../src/modals/BitPay/Informational/index.js | 64 +- .../src/modals/BitPay/InvoiceExpired/index.js | 2 +- .../modals/BitPay/InvoiceExpired/template.js | 22 +- .../src/modals/Borrow/AddCollateral/index.tsx | 6 +- .../Borrow/AddCollateral/template.loading.tsx | 6 +- .../Borrow/AddCollateral/template.success.tsx | 96 +-- .../BorrowDetails/ActionButton/index.tsx | 64 +- .../BorrowDetails/CollateralWarning/index.tsx | 50 +- .../CollateralizationBar/index.tsx | 6 +- .../Borrow/BorrowDetails/Header/index.tsx | 16 +- .../Borrow/BorrowDetails/Info/index.tsx | 92 +-- .../Borrow/BorrowDetails/Summary/index.tsx | 32 +- .../src/modals/Borrow/BorrowDetails/index.tsx | 4 +- .../Borrow/BorrowDetails/template.loading.tsx | 2 +- .../Borrow/BorrowForm/Summary/index.tsx | 26 +- .../src/modals/Borrow/BorrowForm/index.tsx | 4 +- .../Borrow/BorrowForm/template.loading.tsx | 2 +- .../Borrow/BorrowForm/template.success.tsx | 64 +- .../modals/Borrow/BorrowForm/validation.tsx | 16 +- .../src/modals/Borrow/ConfirmBorrow/index.tsx | 2 +- .../Borrow/ConfirmBorrow/template.loading.tsx | 6 +- .../Borrow/ConfirmBorrow/template.success.tsx | 54 +- .../TabMenuPaymentMethod/index.tsx | 14 +- .../TabMenuPaymentType/index.tsx | 14 +- .../src/modals/Borrow/RepayLoanForm/index.tsx | 4 +- .../Borrow/RepayLoanForm/template.loading.tsx | 2 +- .../Borrow/RepayLoanForm/template.success.tsx | 104 +-- .../src/modals/Borrow/index.tsx | 8 +- .../src/modals/Btc/AddBtcWallet/index.js | 6 +- .../src/modals/Btc/AddBtcWallet/template.js | 30 +- .../src/modals/Btc/ImportBtcAddress/index.js | 2 +- .../modals/Btc/ImportBtcAddress/template.js | 60 +- .../src/modals/Btc/RequestBtc/index.js | 16 +- .../modals/Btc/RequestBtc/template.loading.js | 2 +- .../Btc/RequestBtc/template.shareLink.js | 44 +- .../modals/Btc/RequestBtc/template.success.js | 118 ++-- .../Btc/RequestBtc/validationMessages.js | 8 +- .../FirstStep/MaximumAmountLink/index.js | 8 +- .../SendBtc/FirstStep/MaximumFeeLink/index.js | 8 +- .../FirstStep/MinimumAmountLink/index.js | 8 +- .../SendBtc/FirstStep/MinimumFeeLink/index.js | 8 +- .../FirstStep/PriorityFeeLink/index.js | 8 +- .../SendBtc/FirstStep/RegularFeeLink/index.js | 8 +- .../src/modals/Btc/SendBtc/FirstStep/index.js | 2 +- .../modals/Btc/SendBtc/FirstStep/selectors.js | 8 +- .../Btc/SendBtc/FirstStep/template.loading.js | 14 +- .../Btc/SendBtc/FirstStep/template.success.js | 158 ++--- .../SendBtc/FirstStep/validationMessages.js | 34 +- .../modals/Btc/SendBtc/SecondStep/index.js | 4 +- .../Btc/SendBtc/SecondStep/template.error.js | 2 +- .../SendBtc/SecondStep/template.loading.js | 26 +- .../SendBtc/SecondStep/template.success.js | 70 +- .../src/modals/Btc/SendBtc/index.tsx | 6 +- .../src/modals/Btc/SendBtc/template.tsx | 10 +- .../src/modals/Btc/ShowBtcPrivateKey/index.js | 8 +- .../modals/Btc/ShowBtcPrivateKey/template.js | 64 +- .../src/modals/Btc/VerifyMessage/index.js | 48 +- .../src/modals/Eth/PaxWelcome/index.js | 18 +- .../src/modals/Eth/RequestEth/index.js | 18 +- .../modals/Eth/RequestEth/template.loading.js | 2 +- .../modals/Eth/RequestEth/template.success.js | 66 +- .../FirstStep/LowBalanceWarning/index.js | 24 +- .../FirstStep/LowEthWarningForErc20/index.js | 20 +- .../FirstStep/MaximumAmountLink/index.js | 6 +- .../SendEth/FirstStep/MaximumFeeLink/index.js | 6 +- .../FirstStep/MinFeeForRetryInvalid/index.tsx | 4 +- .../SendEth/FirstStep/MinimumFeeLink/index.js | 6 +- .../FirstStep/PriorityFeeLink/index.js | 6 +- .../SendEth/FirstStep/RegularFeeLink/index.js | 6 +- .../src/modals/Eth/SendEth/FirstStep/index.js | 2 +- .../modals/Eth/SendEth/FirstStep/selectors.js | 8 +- .../Eth/SendEth/FirstStep/template.error.js | 2 +- .../Eth/SendEth/FirstStep/template.loading.js | 14 +- .../Eth/SendEth/FirstStep/template.success.js | 110 +-- .../SendEth/FirstStep/validationMessages.js | 20 +- .../modals/Eth/SendEth/SecondStep/index.js | 2 +- .../Eth/SendEth/SecondStep/template.error.js | 2 +- .../SendEth/SecondStep/template.loading.js | 26 +- .../SendEth/SecondStep/template.success.js | 66 +- .../src/modals/Eth/SendEth/index.js | 8 +- .../src/modals/Eth/SendEth/template.js | 10 +- .../src/modals/Eth/TransferEth/index.tsx | 6 +- .../src/modals/Eth/TransferEth/template.tsx | 62 +- .../src/modals/Exchange/AirdropError/index.js | 22 +- .../src/modals/Exchange/EthAirdrop/index.js | 30 +- .../ExchangeError/components.js | 100 +-- .../ExchangeConfirm/ExchangeError/index.js | 4 +- .../modals/Exchange/ExchangeConfirm/index.js | 8 +- .../Exchange/ExchangeConfirm/template.js | 40 +- .../modals/Exchange/ExchangeResults/index.js | 82 +-- .../IdentityVerification/MoreInfo/MoreInfo.js | 22 +- .../IdentityVerification/Personal/index.js | 4 +- .../IdentityVerification/Personal/template.js | 182 ++--- .../Personal/template.loading.js | 2 +- .../IdentityVerification/Submitted/index.js | 34 +- .../IdentityVerification/Veriff/index.js | 8 +- .../Veriff/template.failure.js | 34 +- .../Veriff/template.loading.js | 2 +- .../Veriff/template.success.js | 2 +- .../IdentityVerification/Verify/index.js | 4 +- .../Verify/template.highflow.js | 58 +- .../Verify/template.loading.js | 2 +- .../Verify/template.lowflow.js | 114 ++-- .../VerifyMobile/index.js | 4 +- .../VerifyMobile/template.js | 82 +-- .../Exchange/IdentityVerification/index.tsx | 30 +- .../IdentityVerification/template.loading.js | 2 +- .../modals/Exchange/KycDocResubmit/index.js | 22 +- .../Exchange/ShapeshiftTradeDetails/index.js | 6 +- .../ShapeshiftTradeDetails/template.error.js | 2 +- .../template.loading.js | 2 +- .../template.success.js | 84 +-- .../Exchange/SwapUpgrade/SwapUpgrade.js | 28 +- .../src/modals/Exchange/UserExists/index.js | 32 +- .../src/modals/Generic/Confirm/helpers.js | 92 +-- .../src/modals/Generic/Confirm/index.js | 6 +- .../src/modals/Generic/Confirm/template.js | 10 +- .../src/modals/Generic/PromptInput/index.js | 2 +- .../modals/Generic/PromptInput/template.js | 20 +- .../src/modals/Generic/Support/index.js | 26 +- .../modals/Interest/AccountSummary/index.tsx | 4 +- .../AccountSummary/template.loading.tsx | 2 +- .../AccountSummary/template.success.tsx | 224 +++---- .../DepositForm/TabMenuTimeFrame/index.tsx | 16 +- .../src/modals/Interest/DepositForm/index.tsx | 4 +- .../Interest/DepositForm/template.loading.tsx | 6 +- .../Interest/DepositForm/template.success.tsx | 216 +++--- .../modals/Interest/WithdrawalForm/index.tsx | 4 +- .../WithdrawalForm/template.loading.tsx | 6 +- .../WithdrawalForm/template.success.tsx | 106 +-- .../Interest/WithdrawalForm/validation.tsx | 8 +- .../src/modals/Interest/index.tsx | 8 +- .../modals/Lockbox/LockboxAppManager/index.js | 12 +- .../Lockbox/LockboxConnectionPrompt/index.js | 4 +- .../Lockbox/LockboxConnectionPrompt/model.js | 54 +- .../LockboxConnectionPrompt/template.js | 12 +- .../CheckVersionsStep/index.js | 2 +- .../CheckVersionsStep/template.js | 30 +- .../LockboxFirmware/CompleteStep/index.js | 2 +- .../LockboxFirmware/CompleteStep/template.js | 34 +- .../ConnectDeviceStep/index.js | 2 +- .../ConnectDeviceStep/template.js | 22 +- .../InstallFirmwareStep/index.js | 2 +- .../InstallFirmwareStep/template.js | 14 +- .../UninstallAppsStep/index.js | 2 +- .../UninstallAppsStep/template.js | 18 +- .../modals/Lockbox/LockboxFirmware/index.js | 6 +- .../Lockbox/LockboxFirmware/template.js | 6 +- .../LockboxSetup/AppManagerStep/index.js | 4 +- .../LockboxSetup/ConnectDeviceStep/index.js | 4 +- .../ConnectDeviceStep/template.js | 156 ++--- .../LockboxSetup/CustomizeStep/index.js | 20 +- .../LockboxSetup/DeviceSelectStep/index.js | 2 +- .../LockboxSetup/DeviceSelectStep/template.js | 56 +- .../Lockbox/LockboxSetup/ErrorStep/index.js | 22 +- .../LockboxSetup/FinishSetupStep/index.js | 4 +- .../LockboxSetup/FinishSetupStep/template.js | 20 +- .../LockboxSetup/PairDeviceStep/index.js | 6 +- .../LockboxSetup/PairDeviceStep/template.js | 106 +-- .../LockboxSetup/SetupTypeStep/index.js | 2 +- .../LockboxSetup/SetupTypeStep/template.js | 48 +- .../SoftwareDownloadStep/index.js | 2 +- .../SoftwareDownloadStep/template.js | 64 +- .../src/modals/Lockbox/LockboxSetup/index.js | 40 +- .../modals/Lockbox/LockboxSetup/template.js | 2 +- .../modals/Lockbox/LockboxShowXPubs/index.js | 38 +- .../modals/Mobile/MobileNumberChange/index.js | 6 +- .../Mobile/MobileNumberChange/template.js | 36 +- .../modals/Mobile/MobileNumberVerify/index.js | 10 +- .../Mobile/MobileNumberVerify/template.js | 56 +- .../modals/Onboarding/AirdropClaim/index.js | 34 +- .../modals/Onboarding/AirdropSuccess/index.js | 58 +- .../LinkFromExchangeAccount/index.tsx | 4 +- .../LinkFromExchangeAccount/template.tsx | 92 +-- .../Onboarding/LinkToExchangeAccount/index.js | 4 +- .../LinkToExchangeAccount/template.error.js | 18 +- .../LinkToExchangeAccount/template.loading.js | 40 +- .../template.notasked.js | 110 +-- .../LinkToExchangeAccount/template.success.js | 24 +- .../modals/Onboarding/SwapGetStarted/index.js | 36 +- .../Onboarding/UpgradeForAirdrop/index.js | 46 +- .../src/modals/Onboarding/Welcome/index.tsx | 56 +- .../src/modals/Onfido/index.js | 14 +- .../src/modals/Onfido/template.loading.js | 2 +- .../src/modals/QRCode/index.js | 2 +- .../src/modals/QRCode/template.js | 20 +- .../Settings/AutoDisconnection/index.js | 12 +- .../Settings/AutoDisconnection/template.js | 18 +- .../Settings/ConfirmDisable2FA/index.js | 6 +- .../Settings/ConfirmDisable2FA/template.js | 28 +- .../RecoveryPhrase/ConfirmWords/index.tsx | 8 +- .../RecoveryPhrase/ConfirmWords/template.tsx | 44 +- .../ConfirmWordsSuccess/index.tsx | 42 +- .../RecoveryPhraseIntro/index.tsx | 46 +- .../ShowRecoveryWords/index.tsx | 2 +- .../ShowRecoveryWords/template.tsx | 38 +- .../modals/Settings/RecoveryPhrase/index.tsx | 10 +- .../modals/Settings/SecondPassword/index.js | 2 +- .../Settings/SecondPassword/template.js | 40 +- .../TwoStepGoogleAuthenticator/index.js | 6 +- .../TwoStepGoogleAuthenticator/template.js | 42 +- .../src/modals/Settings/TwoStepSetup/index.js | 12 +- .../modals/Settings/TwoStepSetup/template.js | 70 +- .../modals/Settings/TwoStepYubico/index.js | 6 +- .../modals/Settings/TwoStepYubico/template.js | 28 +- .../src/modals/SignMessage/FirstStep/index.js | 2 +- .../modals/SignMessage/FirstStep/template.js | 36 +- .../modals/SignMessage/SecondStep/index.js | 2 +- .../modals/SignMessage/SecondStep/template.js | 36 +- .../src/modals/SignMessage/index.js | 6 +- .../src/modals/SignMessage/template.js | 10 +- .../src/modals/SimpleBuy/AddCard/index.tsx | 4 +- .../src/modals/SimpleBuy/AddCard/model.tsx | 20 +- .../SimpleBuy/AddCard/template.loading.tsx | 6 +- .../SimpleBuy/AddCard/template.success.tsx | 64 +- .../BillingAddress/CountrySelect/index.tsx | 6 +- .../modals/SimpleBuy/BillingAddress/index.tsx | 4 +- .../BillingAddress/template.loading.tsx | 6 +- .../BillingAddress/template.success.tsx | 84 +-- .../modals/SimpleBuy/CancelOrder/index.tsx | 2 +- .../modals/SimpleBuy/CancelOrder/template.tsx | 54 +- .../SimpleBuy/CheckoutConfirm/index.tsx | 4 +- .../CheckoutConfirm/template.loading.tsx | 6 +- .../CheckoutConfirm/template.success.tsx | 78 +-- .../SimpleBuy/CurrencySelection/index.tsx | 30 +- .../Checkout/ActionButton/index.tsx | 70 +- .../EnterAmount/Checkout/CoinSelect/index.tsx | 4 +- .../Checkout/MethodSelect/index.tsx | 12 +- .../SimpleBuy/EnterAmount/Checkout/index.tsx | 4 +- .../EnterAmount/Checkout/template.loading.tsx | 6 +- .../EnterAmount/Checkout/template.success.tsx | 58 +- .../modals/SimpleBuy/EnterAmount/index.tsx | 4 +- .../EnterAmount/template.failure.tsx | 24 +- .../EnterAmount/template.loading.tsx | 6 +- .../EnterAmount/template.unsupported.tsx | 46 +- .../modals/SimpleBuy/OrderSummary/index.tsx | 4 +- .../modals/SimpleBuy/OrderSummary/model.tsx | 22 +- .../OrderSummary/template.loading.tsx | 6 +- .../OrderSummary/template.success.tsx | 108 +-- .../modals/SimpleBuy/ThreeDSHandler/index.tsx | 6 +- .../ThreeDSHandler/template.loading.tsx | 22 +- .../ThreeDSHandler/template.success.tsx | 8 +- .../SimpleBuy/TransferDetails/index.tsx | 4 +- .../TransferDetails/template.loading.tsx | 6 +- .../TransferDetails/template.success.tsx | 164 ++--- .../src/modals/SimpleBuy/index.tsx | 10 +- .../DownloadTransactions/index.tsx | 6 +- .../DownloadTransactions/template.tsx | 74 +- .../Transactions/EditDescription/index.js | 4 +- .../Transactions/EditDescription/template.js | 30 +- .../src/modals/Wallet/PairingCode/index.js | 16 +- .../Wallet/PairingCode/template.loading.js | 2 +- .../src/modals/Wallet/ShowXPub/index.js | 28 +- .../src/modals/Wallet/UpgradeWallet/index.js | 6 +- .../modals/Wallet/UpgradeWallet/template.js | 44 +- .../src/modals/WhatsNew/Content/Borrow.js | 28 +- .../modals/WhatsNew/Content/EmptyContent.js | 8 +- .../WhatsNew/Content/TxHistoryDownload.js | 30 +- .../src/modals/WhatsNew/Content/USDDigital.js | 28 +- .../src/modals/WhatsNew/index.tsx | 10 +- .../src/modals/Xlm/RequestXlm/index.js | 16 +- .../modals/Xlm/RequestXlm/template.loading.js | 2 +- .../modals/Xlm/RequestXlm/template.success.js | 66 +- .../Xlm/SendXlm/FirstStep/InfoBanner/index.js | 6 +- .../FirstStep/MaximumAmountLink/index.js | 4 +- .../Xlm/SendXlm/FirstStep/ModalIcon/index.js | 4 +- .../FirstStep/NoAccountTemplate/index.js | 14 +- .../src/modals/Xlm/SendXlm/FirstStep/index.js | 2 +- .../Xlm/SendXlm/FirstStep/template.error.js | 2 +- .../Xlm/SendXlm/FirstStep/template.loading.js | 14 +- .../Xlm/SendXlm/FirstStep/template.success.js | 136 ++-- .../SendXlm/FirstStep/validationMessages.js | 44 +- .../modals/Xlm/SendXlm/SecondStep/index.js | 4 +- .../Xlm/SendXlm/SecondStep/template.error.js | 2 +- .../SendXlm/SecondStep/template.loading.js | 26 +- .../SendXlm/SecondStep/template.success.js | 80 +-- .../src/modals/Xlm/SendXlm/index.js | 6 +- .../src/modals/Xlm/SendXlm/template.js | 10 +- .../src/modals/Xlm/SunRiverWelcome/index.js | 68 +- .../modals/Xlm/XlmCreateAccountLearn/index.js | 38 +- .../src/modals/Xlm/XlmReserveLearn/index.js | 54 +- .../src/providers/AnalyticsTracker/index.js | 4 +- .../providers/ErrorBoundaryProvider/index.js | 4 +- .../ErrorBoundaryProvider/template.js | 22 +- .../src/providers/MatchMediaProvider/index.js | 10 +- .../src/providers/ModalEnhancer/index.tsx | 2 +- .../providers/TranslationsProvider/index.js | 4 +- .../src/providers/WizardProvider/index.js | 10 +- .../src/scenes/Airdrops/AirdropInfo/index.tsx | 2 +- .../src/scenes/Airdrops/AirdropInfo/model.tsx | 44 +- .../scenes/Airdrops/PastAirdrops/model.tsx | 42 +- .../PastAirdrops/template.success.tsx | 68 +- .../src/scenes/Airdrops/StxAirdrop/index.tsx | 6 +- .../src/scenes/Airdrops/StxAirdrop/model.tsx | 162 ++--- .../src/scenes/Airdrops/index.tsx | 32 +- .../src/scenes/Airdrops/template.loading.tsx | 4 +- .../src/scenes/AuthorizeLogin/index.js | 10 +- .../scenes/AuthorizeLogin/template.error.js | 16 +- .../scenes/AuthorizeLogin/template.loading.js | 6 +- .../scenes/AuthorizeLogin/template.success.js | 78 +-- .../src/scenes/Borrow/BorrowHistory/index.tsx | 2 +- .../src/scenes/Borrow/BorrowHistory/model.tsx | 12 +- .../Borrow/BorrowHistory/template.success.tsx | 68 +- .../src/scenes/Borrow/BorrowPax/index.tsx | 58 +- .../Borrow/InitBorrowForm/Amount/index.tsx | 4 +- .../scenes/Borrow/InitBorrowForm/index.tsx | 48 +- .../src/scenes/Borrow/index.tsx | 16 +- .../Exchange/ExchangeContainer/index.js | 6 +- .../ComplementaryAmount.js | 6 +- .../CurrencySelect/CurrencySelect.js | 24 +- .../Error/CheckConfirmationLink/index.js | 4 +- .../Exchange/ExchangeForm/Error/Error.js | 4 +- .../Error/LimitsUpdateLink/index.js | 8 +- .../Error/MaximumAmountLink/index.js | 12 +- .../Error/MinimumAmountLink/index.js | 12 +- .../ExchangeForm/Error/validationMessages.js | 120 ++-- .../ExchangeForm/LimitInfo/LimitInfo.js | 50 +- .../MinMaxButtons/MinMaxButtons.js | 18 +- .../Notifications/Notifications.js | 34 +- .../ExchangeForm/RatesBox/RatesBox.js | 12 +- .../ExchangeForm/SubmitButton/SubmitButton.js | 12 +- .../Exchange/ExchangeForm/Summary/Summary.js | 62 +- .../Summary/TargetFiatAmount/index.js | 10 +- .../src/scenes/Exchange/ExchangeForm/index.js | 6 +- .../Exchange/ExchangeForm/template.loading.js | 6 +- .../Exchange/ExchangeForm/template.success.js | 54 +- .../StatusBar/Statuses/GetStarted.js | 8 +- .../StatusBar/Statuses/InProgress.js | 6 +- .../GetStarted/StatusBar/Statuses/Pending.js | 12 +- .../GetStarted/StatusBar/Statuses/Rejected.js | 12 +- .../StatusBar/Statuses/UnderReview.js | 12 +- .../src/scenes/Exchange/GetStarted/index.js | 100 +-- .../src/scenes/Exchange/Menu/index.js | 36 +- .../src/scenes/Exchange/template.header.js | 14 +- .../src/scenes/Exchange/template.loading.tsx | 6 +- .../src/scenes/ExchangeHistory/Empty/index.js | 12 +- .../ExchangeHistory/List/TradeItem/index.js | 2 +- .../List/TradeItem/template.js | 28 +- .../src/scenes/ExchangeHistory/List/index.js | 4 +- .../scenes/ExchangeHistory/List/template.js | 76 +-- .../src/scenes/ExchangeHistory/index.js | 6 +- .../scenes/ExchangeHistory/template.error.js | 2 +- .../scenes/ExchangeHistory/template.header.js | 14 +- .../ExchangeHistory/template.loading.js | 6 +- .../IdentityVerification/index.js | 30 +- .../src/scenes/ExchangeProfile/index.js | 2 +- .../src/scenes/Help/index.js | 88 +-- .../Home/Balances/CoinBalance/index.tsx | 6 +- .../Balances/CoinBalance/template.error.tsx | 6 +- .../Balances/CoinBalance/template.success.tsx | 18 +- .../src/scenes/Home/Balances/Table/index.tsx | 2 +- .../src/scenes/Home/Balances/Tabs/index.tsx | 26 +- .../scenes/Home/Balances/TotalRow/index.tsx | 6 +- .../Balances/TotalRow/template.loading.tsx | 2 +- .../Balances/TotalRow/template.success.tsx | 8 +- .../src/scenes/Home/Balances/index.tsx | 2 +- .../src/scenes/Home/Balances/template.tsx | 6 +- .../scenes/Home/Banners/FinishKyc/index.tsx | 22 +- .../scenes/Home/Banners/KycResubmit/index.tsx | 16 +- .../Home/Banners/SBOrderBanner/index.tsx | 28 +- .../src/scenes/Home/Banners/index.tsx | 4 +- .../scenes/Home/PriceChart/Chart/index.tsx | 4 +- .../scenes/Home/PriceChart/Chart/services.ts | 2 +- .../Home/PriceChart/Chart/template.error.tsx | 2 +- .../PriceChart/Chart/template.loading.tsx | 2 +- .../CoinCurrentPrice/CoinTicker/index.js | 4 +- .../CoinTicker/template.error.js | 2 +- .../CoinTicker/template.loading.js | 2 +- .../CoinTicker/template.success.js | 4 +- .../Home/PriceChart/CoinCurrentPrice/index.js | 6 +- .../Home/PriceChart/CoinPerformance/index.tsx | 2 +- .../PriceChart/CoinPerformance/services.tsx | 20 +- .../CoinPerformance/template.loading.tsx | 2 +- .../CoinPerformance/template.success.tsx | 4 +- .../Home/PriceChart/CoinSelectBox/index.js | 6 +- .../scenes/Home/PriceChart/Footer/index.js | 2 +- .../scenes/Home/PriceChart/Footer/template.js | 14 +- .../Home/PriceChart/TimeFilters/template.js | 30 +- .../src/scenes/Interest/IntroCard/index.tsx | 70 +- .../src/scenes/Interest/SummaryCard/index.tsx | 8 +- .../Interest/SummaryCard/template.success.tsx | 108 +-- .../scenes/Interest/TransactionList/index.tsx | 4 +- .../scenes/Interest/TransactionList/model.tsx | 12 +- .../TransactionList/template.success.tsx | 130 ++-- .../src/scenes/Interest/index.tsx | 32 +- .../Dashboard/Menu/CurrencyList/index.js | 2 +- .../Menu/CurrencyList/template.error.js | 4 +- .../Menu/CurrencyList/template.loading.js | 8 +- .../Menu/CurrencyList/template.success.js | 18 +- .../Dashboard/Menu/DeviceTitle/index.js | 8 +- .../scenes/Lockbox/Dashboard/Menu/index.js | 2 +- .../scenes/Lockbox/Dashboard/Menu/template.js | 20 +- .../Dashboard/Settings/AddDevice/index.js | 2 +- .../Dashboard/Settings/AddDevice/template.js | 14 +- .../Settings/DownloadUpdater/index.js | 16 +- .../Dashboard/Settings/RemoveDevice/index.js | 2 +- .../Settings/RemoveDevice/template.js | 14 +- .../Dashboard/Settings/RenameDevice/index.js | 2 +- .../Settings/RenameDevice/template.js | 28 +- .../Dashboard/Settings/RestoreDevice/index.js | 2 +- .../Settings/RestoreDevice/template.js | 16 +- .../Dashboard/Settings/ShowXPubs/index.js | 2 +- .../Dashboard/Settings/ShowXPubs/template.js | 14 +- .../Dashboard/Settings/TakeTour/index.js | 16 +- .../Dashboard/Settings/UpdateDevice/index.js | 2 +- .../Settings/UpdateDevice/template.js | 14 +- .../Lockbox/Dashboard/Settings/index.js | 10 +- .../Lockbox/Dashboard/Transactions/index.js | 2 +- .../Transactions/template.loading.js | 20 +- .../Transactions/template.success.js | 4 +- .../Dashboard/UpdateRequiredNotice/index.js | 40 +- .../src/scenes/Lockbox/Dashboard/index.js | 4 +- .../src/scenes/Lockbox/Onboard/index.js | 4 +- .../src/scenes/Lockbox/Onboard/template.js | 70 +- .../src/scenes/Lockbox/index.js | 12 +- .../src/scenes/Lockbox/model.js | 76 +-- .../src/scenes/Lockbox/template.header.js | 10 +- .../src/scenes/Login/index.tsx | 4 +- .../src/scenes/Login/template.tsx | 156 ++--- .../src/scenes/Logout/index.js | 14 +- .../src/scenes/Logout/template.js | 26 +- .../src/scenes/MobileLogin/index.js | 2 +- .../src/scenes/MobileLogin/template.js | 26 +- .../src/scenes/Recover/FirstStep/index.js | 42 +- .../src/scenes/Recover/SecondStep/index.js | 6 +- .../src/scenes/Recover/SecondStep/template.js | 48 +- .../src/scenes/Recover/index.js | 6 +- .../src/scenes/Register/Header/index.tsx | 16 +- .../Register/LinkExchangeAccount/index.tsx | 48 +- .../src/scenes/Register/SignupForm/index.tsx | 72 +- .../src/scenes/Register/index.tsx | 2 +- .../src/scenes/Register/template.tsx | 162 ++--- .../src/scenes/Reminder/index.tsx | 4 +- .../src/scenes/Reminder/template.tsx | 58 +- .../src/scenes/Reset2FA/FirstStep/index.js | 6 +- .../src/scenes/Reset2FA/FirstStep/template.js | 82 +-- .../src/scenes/Reset2FA/SecondStep/index.js | 6 +- .../scenes/Reset2FA/SecondStep/template.js | 34 +- .../src/scenes/Reset2FA/ThirdStep/index.js | 38 +- .../src/scenes/Reset2FA/index.js | 6 +- .../src/scenes/Reset2FAToken/index.js | 6 +- .../scenes/Reset2FAToken/template.error.js | 10 +- .../scenes/Reset2FAToken/template.loading.js | 6 +- .../scenes/Reset2FAToken/template.success.js | 10 +- .../AdvancedSecurity/APIAccess/index.js | 24 +- .../AdvancedSecurity/IPWhitelist/index.js | 4 +- .../AdvancedSecurity/IPWhitelist/template.js | 28 +- .../LoginIpRestriction/index.js | 2 +- .../LoginIpRestriction/template.js | 34 +- .../PasswordStretching/index.js | 2 +- .../PasswordStretching/template.js | 40 +- .../SecondPasswordWallet/Settings/index.js | 2 +- .../SecondPasswordWallet/Settings/template.js | 98 +-- .../SecondPasswordWallet/index.js | 2 +- .../SecondPasswordWallet/template.js | 20 +- .../Settings/index.js | 2 +- .../Settings/template.js | 10 +- .../TwoStepVerificationRemember/index.js | 2 +- .../TwoStepVerificationRemember/template.js | 20 +- .../AdvancedSecurity/WalletAccessTor/index.js | 2 +- .../WalletAccessTor/template.js | 30 +- .../WalletPassword/Settings/index.js | 2 +- .../WalletPassword/Settings/template.js | 54 +- .../AdvancedSecurity/WalletPassword/index.js | 2 +- .../WalletPassword/template.js | 12 +- .../SecurityCenter/AdvancedSecurity/index.js | 2 +- .../EmailAddress/ChangeEmailSteps/index.js | 26 +- .../BasicSecurity/EmailAddress/index.js | 18 +- .../EmailAddress/template.error.js | 16 +- .../EmailAddress/template.loading.js | 20 +- .../EmailAddress/template.success.js | 50 +- .../TwoStepVerification/Choices/index.js | 44 +- .../TwoStepVerification/GoogleAuth/index.js | 12 +- .../GoogleAuth/template.error.js | 16 +- .../GoogleAuth/template.loading.js | 20 +- .../GoogleAuth/template.success.js | 18 +- .../TwoStepVerification/SMS/index.js | 16 +- .../SMS/template.success.js | 24 +- .../TwoStepVerification/Yubikey/index.js | 14 +- .../Yubikey/template.success.js | 20 +- .../TwoStepVerification/index.js | 24 +- .../TwoStepVerification/template.error.js | 14 +- .../TwoStepVerification/template.loading.js | 14 +- .../TwoStepVerification/template.success.js | 108 +-- .../WalletRecoveryPhrase/index.js | 2 +- .../WalletRecoveryPhrase/template.js | 30 +- .../SecurityCenter/BasicSecurity/index.js | 2 +- .../src/scenes/SecurityCenter/Menu/index.js | 22 +- .../src/scenes/SecurityCenter/index.js | 10 +- .../src/scenes/SecurityCenter/template.js | 42 +- .../Addresses/Bch/ImportedAddresses/index.js | 4 +- .../Bch/ImportedAddresses/template.js | 56 +- .../Settings/Addresses/Bch/Wallets/index.js | 4 +- .../Addresses/Bch/Wallets/template.js | 128 ++-- .../scenes/Settings/Addresses/Bch/index.js | 2 +- .../Settings/Addresses/Btc/AddressRow.js | 28 +- .../Addresses/Btc/ArchivedAddresses/index.js | 2 +- .../Btc/ArchivedAddresses/template.js | 48 +- .../Addresses/Btc/ImportedAddresses/index.js | 4 +- .../Btc/ImportedAddresses/template.js | 98 +-- .../ManageAddresses/UnusedAddresses/index.js | 76 +-- .../UnusedAddresses/template.js | 52 +- .../UsedAddresses/Table/index.js | 8 +- .../UsedAddresses/Table/template.js | 58 +- .../ManageAddresses/UsedAddresses/index.js | 2 +- .../ManageAddresses/UsedAddresses/template.js | 22 +- .../Addresses/Btc/ManageAddresses/index.js | 2 +- .../Settings/Addresses/Btc/Wallets/index.js | 4 +- .../Addresses/Btc/Wallets/template.js | 108 +-- .../scenes/Settings/Addresses/Btc/index.js | 2 +- .../scenes/Settings/Addresses/Eth/index.tsx | 6 +- .../Settings/Addresses/Eth/template.tsx | 2 +- .../scenes/Settings/Addresses/Menu/index.tsx | 60 +- .../Addresses/QrCodeAddressInfo/index.tsx | 32 +- .../Settings/Addresses/ViewKeys/index.tsx | 30 +- .../scenes/Settings/Addresses/Xlm/index.tsx | 4 +- .../Settings/Addresses/Xlm/template.tsx | 2 +- .../src/scenes/Settings/Addresses/index.js | 14 +- .../scenes/Settings/General/About/index.tsx | 14 +- .../Settings/General/LinkedCards/index.tsx | 4 +- .../General/LinkedCards/template.loading.tsx | 6 +- .../General/LinkedCards/template.success.tsx | 26 +- .../Settings/General/PairingCode/index.tsx | 30 +- .../Settings/General/PrivacyPolicy/index.tsx | 14 +- .../Settings/General/TermsOfService/index.tsx | 14 +- .../Settings/General/WalletId/index.tsx | 16 +- .../src/scenes/Settings/General/index.tsx | 10 +- .../Preferences/AutoLogout/Settings/index.js | 16 +- .../AutoLogout/Settings/template.js | 32 +- .../AutoLogout/Settings/validation.js | 12 +- .../Settings/Preferences/AutoLogout/index.js | 8 +- .../Preferences/CryptoLinkHandling/index.js | 20 +- .../LocalCurrency/Settings/index.js | 6 +- .../LocalCurrency/Settings/template.js | 4 +- .../Preferences/LocalCurrency/index.js | 2 +- .../LocalCurrency/template.error.js | 8 +- .../LocalCurrency/template.loading.js | 10 +- .../LocalCurrency/template.success.js | 10 +- .../MobileNumber/Settings/index.js | 2 +- .../MobileNumber/Settings/template.js | 38 +- .../Preferences/MobileNumber/index.js | 2 +- .../MobileNumber/template.error.js | 16 +- .../MobileNumber/template.loading.js | 20 +- .../MobileNumber/template.success.js | 26 +- .../Notifications/Settings/index.js | 4 +- .../Notifications/Settings/template.error.js | 2 +- .../Settings/template.loading.js | 4 +- .../Settings/template.success.js | 20 +- .../Preferences/Notifications/index.js | 2 +- .../Preferences/Notifications/template.js | 8 +- .../Preferences/Themes/Settings/index.js | 6 +- .../Preferences/Themes/Settings/template.js | 2 +- .../Settings/Preferences/Themes/index.js | 8 +- .../WalletLanguage/Settings/index.js | 6 +- .../WalletLanguage/Settings/template.js | 4 +- .../Preferences/WalletLanguage/index.js | 2 +- .../Preferences/WalletLanguage/template.js | 10 +- .../Profile/IdentityVerification/index.js | 44 +- .../src/scenes/Settings/Profile/Menu/index.js | 4 +- .../src/scenes/Settings/Profile/index.js | 2 +- .../src/scenes/TheExchange/index.tsx | 2 +- .../scenes/TheExchange/template.connect.tsx | 48 +- .../src/scenes/TheExchange/template.info.tsx | 40 +- .../TheExchange/template.linktoexchange.tsx | 14 +- .../src/scenes/TheExchange/template.tsx | 10 +- .../Transactions/CoinIntroduction/index.tsx | 2 +- .../CoinIntroduction/template.tsx | 18 +- .../CoinPerformance/CoinChart/index.js | 10 +- .../CoinPerformance/CoinChart/model.js | 2 +- .../CoinPerformance/CoinPrices/index.tsx | 10 +- .../Transactions/TransactionFilters/index.tsx | 2 +- .../TransactionFilters/template.tsx | 28 +- .../Transactions/TransactionList/index.tsx | 2 +- .../Transactions/TransactionList/model.tsx | 36 +- .../TransactionList/template.interest.tsx | 30 +- .../TransactionList/template.loading.tsx | 26 +- .../TransactionList/template.simplebuy.tsx | 20 +- .../WalletBalanceDropdown/index.tsx | 46 +- .../template.loading.tsx | 6 +- .../src/scenes/Transactions/index.tsx | 10 +- .../Transactions/template.headerexplainer.tsx | 84 +-- .../scenes/UploadDocuments/Success/index.js | 2 +- .../UploadDocuments/Success/template.js | 30 +- .../src/scenes/UploadDocuments/index.js | 6 +- .../src/scenes/UploadDocuments/template.js | 98 +-- .../src/scenes/VerifyEmailToken/index.js | 4 +- .../scenes/VerifyEmailToken/template.error.js | 42 +- .../VerifyEmailToken/template.loading.js | 4 +- .../VerifyEmailToken/template.success.js | 24 +- .../src/scenes/app.tsx | 62 +- .../src/scenes/loading.public.tsx | 8 +- .../src/scenes/loading.wallet.tsx | 8 +- .../services/FormHelper/validationMessages.js | 156 ++--- .../src/services/HooksService/index.ts | 2 +- .../src/services/LocalesService/index.js | 10 +- .../src/services/LocalesService/index.spec.js | 6 +- .../src/services/LockboxService/utils.js | 28 +- .../src/services/ResponsiveService/index.ts | 2 +- .../src/services/SagaService/index.js | 12 +- .../services/ValidationHelper/index.spec.js | 2 +- .../src/store/index.js | 2 +- .../src/utils/testbed.js | 4 +- .../src/coinSelection/coin.js | 16 +- .../src/exchange/currency/index.ts | 8 +- .../src/exchange/pairs/index.js | 2 +- .../src/network/ApiSocket.js | 6 +- .../src/network/HorizonStreamingService.js | 6 +- .../src/network/Socket.js | 22 +- .../src/redux/data/bch/sagaRegister.js | 2 +- .../src/redux/data/bch/sagas.ts | 12 +- .../src/redux/data/btc/sagaRegister.js | 2 +- .../src/redux/data/btc/sagas.ts | 14 +- .../src/redux/data/eth/sagaRegister.js | 2 +- .../src/redux/data/eth/sagas.ts | 38 +- .../src/redux/data/misc/sagaRegister.js | 2 +- .../src/redux/data/misc/sagas.js | 14 +- .../src/redux/data/sagaRegister.js | 2 +- .../src/redux/data/simpleBuy/sagas.ts | 2 +- .../src/redux/data/stx/sagaRegister.js | 2 +- .../src/redux/data/stx/sagas.js | 2 +- .../src/redux/data/xlm/sagaRegister.js | 2 +- .../src/redux/data/xlm/sagas.ts | 18 +- .../src/redux/kvStore/bch/sagaRegister.js | 2 +- .../src/redux/kvStore/bch/sagas.js | 8 +- .../src/redux/kvStore/btc/sagaRegister.js | 2 +- .../src/redux/kvStore/btc/sagas.js | 6 +- .../src/redux/kvStore/buySell/sagaRegister.js | 2 +- .../src/redux/kvStore/buySell/sagas.js | 4 +- .../redux/kvStore/contacts/sagaRegister.js | 2 +- .../src/redux/kvStore/contacts/sagas.js | 4 +- .../src/redux/kvStore/eth/sagaRegister.js | 2 +- .../src/redux/kvStore/eth/sagas.js | 14 +- .../src/redux/kvStore/lockbox/sagaRegister.js | 2 +- .../src/redux/kvStore/lockbox/sagas.js | 4 +- .../src/redux/kvStore/root/sagas.js | 6 +- .../src/redux/kvStore/sagaRegister.js | 2 +- .../redux/kvStore/shapeShift/sagaRegister.js | 2 +- .../src/redux/kvStore/shapeShift/sagas.js | 6 +- .../kvStore/userCredentials/sagaRegister.js | 2 +- .../redux/kvStore/userCredentials/sagas.js | 4 +- .../redux/kvStore/whatsNew/sagaRegister.js | 2 +- .../src/redux/kvStore/whatsNew/sagas.js | 4 +- .../src/redux/kvStore/xlm/sagaRegister.js | 2 +- .../src/redux/kvStore/xlm/sagas.js | 4 +- .../src/redux/payment/bch/sagas.js | 52 +- .../src/redux/payment/btc/sagas.js | 50 +- .../src/redux/payment/eth/sagas.ts | 50 +- .../src/redux/payment/eth/utils.js | 2 +- .../src/redux/payment/xlm/sagas.ts | 46 +- .../src/redux/rootSaga.ts | 2 +- .../src/redux/settings/sagaRegister.ts | 2 +- .../src/redux/settings/sagas.ts | 50 +- .../src/redux/wallet/sagaRegister.ts | 2 +- .../src/redux/wallet/sagas.ts | 30 +- .../src/redux/walletOptions/sagaRegister.js | 2 +- .../src/redux/walletOptions/sagas.js | 2 +- .../blockchain-wallet-v4/src/remote/index.js | 12 +- .../blockchain-wallet-v4/src/remote/remote.ts | 12 +- .../blockchain-wallet-v4/src/remote/types.ts | 8 +- .../blockchain-wallet-v4/src/signer/bch.js | 2 +- .../blockchain-wallet-v4/src/signer/btc.js | 2 +- .../blockchain-wallet-v4/src/signer/eth.js | 2 +- .../blockchain-wallet-v4/src/signer/xlm.js | 4 +- .../blockchain-wallet-v4/src/types/List.js | 12 +- .../src/types/Serializer.js | 4 +- .../blockchain-wallet-v4/src/types/Type.ts | 12 +- .../blockchain-wallet-v4/src/utils/btc.js | 6 +- .../src/utils/functional.js | 2 +- .../src/walletCrypto/importExport.js | 4 +- .../src/walletCrypto/utils.js | 20 +- 1028 files changed, 10208 insertions(+), 10206 deletions(-) diff --git a/packages/blockchain-info-components/src/Badges/Badge.js b/packages/blockchain-info-components/src/Badges/Badge.js index 6fc4285a59f..c1fa6e9ae8c 100644 --- a/packages/blockchain-info-components/src/Badges/Badge.js +++ b/packages/blockchain-info-components/src/Badges/Badge.js @@ -10,19 +10,19 @@ const Badge = ({ ...props }) => { case 'applestore': return ( - + ) case 'googleplay': return ( - + ) default: diff --git a/packages/blockchain-info-components/src/Badges/Badge.spec.js b/packages/blockchain-info-components/src/Badges/Badge.spec.js index 73bf9419d6b..b2d867de732 100644 --- a/packages/blockchain-info-components/src/Badges/Badge.spec.js +++ b/packages/blockchain-info-components/src/Badges/Badge.spec.js @@ -6,13 +6,13 @@ import Badge from './Badge' describe('Badge component', () => { it('applestore renders correctly', () => { - const component = render() + const component = render() const tree = toJson(component) expect(tree).toMatchSnapshot() }) it('googleplay renders correctly', () => { - const component = render() + const component = render() const tree = toJson(component) expect(tree).toMatchSnapshot() }) diff --git a/packages/blockchain-info-components/src/Banners/Banner.js b/packages/blockchain-info-components/src/Banners/Banner.js index d9e342ce959..34c08e9c351 100644 --- a/packages/blockchain-info-components/src/Banners/Banner.js +++ b/packages/blockchain-info-components/src/Banners/Banner.js @@ -69,9 +69,9 @@ const Banner = props => { label={label} data-e2e={props['data-e2e']} > - {icon && } + {icon && } { }) it('type alert renders correctly', () => { - const component = shallow(ALERT) + const component = shallow(ALERT) const tree = toJson(component) expect(tree).toMatchSnapshot() }) it('type success renders correctly', () => { - const component = shallow(SUCCESS) + const component = shallow(SUCCESS) const tree = toJson(component) expect(tree).toMatchSnapshot() }) it('type warning renders correctly', () => { - const component = shallow(WARNING) + const component = shallow(WARNING) const tree = toJson(component) expect(tree).toMatchSnapshot() }) it('type caution renders correctly', () => { const component = shallow( - + ALERT ) diff --git a/packages/blockchain-info-components/src/Buttons/IconButton.spec.js b/packages/blockchain-info-components/src/Buttons/IconButton.spec.js index 1601aa90695..d2b494f439f 100644 --- a/packages/blockchain-info-components/src/Buttons/IconButton.spec.js +++ b/packages/blockchain-info-components/src/Buttons/IconButton.spec.js @@ -6,7 +6,7 @@ import IconButton from './IconButton' describe('IconButton component', () => { it('default renders correctly', () => { - const component = shallow() + const component = shallow() const tree = toJson(component) expect(tree).toMatchSnapshot() }) diff --git a/packages/blockchain-info-components/src/Carousels/Carousel/index.js b/packages/blockchain-info-components/src/Carousels/Carousel/index.js index 9f3b2baf29b..82b1a54386f 100644 --- a/packages/blockchain-info-components/src/Carousels/Carousel/index.js +++ b/packages/blockchain-info-components/src/Carousels/Carousel/index.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types' import React from 'react' class Carousel extends React.PureComponent { - constructor (props) { + constructor(props) { super(props) this.state = { index: 0, total: props.children.length - 1 } this.handleClick = this.handleClick.bind(this) @@ -12,7 +12,7 @@ class Carousel extends React.PureComponent { this.interval = undefined } - componentDidMount () { + componentDidMount() { const { auto, delay } = this.props if (auto) { this.interval = setInterval( @@ -22,35 +22,35 @@ class Carousel extends React.PureComponent { } } - componentWillUnmount () { + componentWillUnmount() { if (this.interval) { clearInterval(this.interval) } } - getPreviousIndex () { + getPreviousIndex() { const { index, total } = this.state return index === 0 ? total : index - 1 } - getNextIndex () { + getNextIndex() { const { index, total } = this.state return index === total ? 0 : index + 1 } - handleClick (index) { + handleClick(index) { this.setState({ index }) } - handlePrevious () { + handlePrevious() { this.setState({ index: this.getPreviousIndex() }) } - handleNext () { + handleNext() { this.setState({ index: this.getNextIndex() }) } - render () { + render() { const { children, ...rest } = this.props return ( diff --git a/packages/blockchain-info-components/src/Carousels/Carousel/template.js b/packages/blockchain-info-components/src/Carousels/Carousel/template.js index 289fd9ce58c..d03b25e0214 100644 --- a/packages/blockchain-info-components/src/Carousels/Carousel/template.js +++ b/packages/blockchain-info-components/src/Carousels/Carousel/template.js @@ -126,19 +126,19 @@ const Carousel = props => { {nextButton && ( {index < total && ( - )} {index === total && ( - )} - + {index + 1} of {total + 1} diff --git a/packages/blockchain-info-components/src/Dropdowns/ComponentDropdown/index.js b/packages/blockchain-info-components/src/Dropdowns/ComponentDropdown/index.js index 797c7bcc885..55850e2c58f 100644 --- a/packages/blockchain-info-components/src/Dropdowns/ComponentDropdown/index.js +++ b/packages/blockchain-info-components/src/Dropdowns/ComponentDropdown/index.js @@ -3,7 +3,7 @@ import React from 'react' import Dropdown from './template' class ComponentDropdown extends React.PureComponent { - constructor (props) { + constructor(props) { super(props) this.state = { @@ -13,15 +13,15 @@ class ComponentDropdown extends React.PureComponent { this.handleCallback = this.handleCallback.bind(this) } - handleClick () { + handleClick() { this.setState({ toggled: !this.state.toggled }) } - handleClickOutside () { + handleClickOutside() { this.setState({ toggled: false }) } - handleCallback (item) { + handleCallback(item) { const { toggled } = this.state const { toggleOnCallback } = this.props this.setState({ @@ -35,7 +35,7 @@ class ComponentDropdown extends React.PureComponent { } } - render () { + render() { const { ...rest } = this.props return ( diff --git a/packages/blockchain-info-components/src/Dropdowns/ComponentDropdown/template.js b/packages/blockchain-info-components/src/Dropdowns/ComponentDropdown/template.js index 4006b68df93..f3b758c11d1 100644 --- a/packages/blockchain-info-components/src/Dropdowns/ComponentDropdown/template.js +++ b/packages/blockchain-info-components/src/Dropdowns/ComponentDropdown/template.js @@ -92,8 +92,8 @@ const Dropdown = props => { diff --git a/packages/blockchain-info-components/src/Dropdowns/SimpleDropdown/index.js b/packages/blockchain-info-components/src/Dropdowns/SimpleDropdown/index.js index 97b0174f533..f937d51ee35 100644 --- a/packages/blockchain-info-components/src/Dropdowns/SimpleDropdown/index.js +++ b/packages/blockchain-info-components/src/Dropdowns/SimpleDropdown/index.js @@ -5,7 +5,7 @@ import React from 'react' import Dropdown from './template' class SimpleDropdown extends React.PureComponent { - constructor (props) { + constructor(props) { super(props) this.state = { @@ -18,22 +18,22 @@ class SimpleDropdown extends React.PureComponent { this.handleCallback = this.handleCallback.bind(this) } - handleClick () { + handleClick() { this.setState({ toggled: !this.state.toggled }) } - handleClickOutside () { + handleClickOutside() { this.setState({ toggled: false }) } - handleCallback (item) { + handleCallback(item) { this.setState({ toggled: false, selectedItem: item }) if (this.props.callback) { this.props.callback(item) } } - render () { + render() { const { ...rest } = this.props return ( diff --git a/packages/blockchain-info-components/src/Dropdowns/SimpleDropdown/template.js b/packages/blockchain-info-components/src/Dropdowns/SimpleDropdown/template.js index 110d556e132..b6d8ae50f06 100644 --- a/packages/blockchain-info-components/src/Dropdowns/SimpleDropdown/template.js +++ b/packages/blockchain-info-components/src/Dropdowns/SimpleDropdown/template.js @@ -100,7 +100,7 @@ const Dropdown = props => { - + ) diff --git a/packages/blockchain-info-components/src/Footer/Select/Select.js b/packages/blockchain-info-components/src/Footer/Select/Select.js index 258ae5dce82..486a5299b7b 100644 --- a/packages/blockchain-info-components/src/Footer/Select/Select.js +++ b/packages/blockchain-info-components/src/Footer/Select/Select.js @@ -28,13 +28,13 @@ const SelectElement = styled.select` ` class Select extends PureComponent { - constructor (props) { + constructor(props) { super(props) this.state = { value: null } this.onChange = this.onChange.bind(this) } - static getDerivedStateFromProps (nextProps) { + static getDerivedStateFromProps(nextProps) { if (nextProps.value) { return { val: nextProps.value @@ -43,7 +43,7 @@ class Select extends PureComponent { return null } - onChange (e) { + onChange(e) { if (e.target && this.props.onChange) { let value = e.target.value this.setState({ value }, () => { @@ -52,7 +52,7 @@ class Select extends PureComponent { } } - render () { + render() { let options = null if (this.props.values) { options = this.props.values.map(val => ( diff --git a/packages/blockchain-info-components/src/Footer/index.js b/packages/blockchain-info-components/src/Footer/index.js index f2f88f236ef..3c05f3d1fa5 100644 --- a/packages/blockchain-info-components/src/Footer/index.js +++ b/packages/blockchain-info-components/src/Footer/index.js @@ -214,7 +214,7 @@ let langItems = Object.keys(supportedLanguages).map(langKey => { }) class Footer extends PureComponent { - constructor (props) { + constructor(props) { super(props) this.cookies = new Cookies() @@ -229,7 +229,7 @@ class Footer extends PureComponent { this.handleDropdown = this.handleDropdown.bind(this) } - handleDropdown (value) { + handleDropdown(value) { if (value === 'en') { this.cookies.remove('clang', { path: '/' }) } else { @@ -253,7 +253,7 @@ class Footer extends PureComponent { }, 1) } - render () { + render() { return ( @@ -268,7 +268,7 @@ class Footer extends PureComponent {
  • - + Blockchain Markets
  • @@ -341,7 +341,7 @@ class Footer extends PureComponent {
  • - Blog + Blog
  • @@ -387,10 +387,10 @@ class Footer extends PureComponent {
  • - Support + Support
  • - + Status
  • @@ -398,7 +398,7 @@ class Footer extends PureComponent { - + © {new Date().getFullYear()} BLOCKCHAIN LUXEMBOURG S.A. @@ -412,14 +412,14 @@ class Footer extends PureComponent { onChange={this.handleDropdown} /> - - + + - - + + - - + + diff --git a/packages/blockchain-info-components/src/Form/AutosizeTextInput.js b/packages/blockchain-info-components/src/Form/AutosizeTextInput.js index c55b16b0025..c1d49a41462 100644 --- a/packages/blockchain-info-components/src/Form/AutosizeTextInput.js +++ b/packages/blockchain-info-components/src/Form/AutosizeTextInput.js @@ -61,7 +61,7 @@ class TextInput extends React.Component { minHeight: '40px' } - componentDidUpdate (prevProps) { + componentDidUpdate(prevProps) { if (this.props.active && !prevProps.active && this.input) { this.input.focus() } @@ -71,7 +71,7 @@ class TextInput extends React.Component { this.input = input } - render () { + render() { const { errorState, disabled, ...rest } = this.props return ( { it('default renders correctly', () => { const component = shallow( - + test ) diff --git a/packages/blockchain-info-components/src/Form/CreatableInput/index.js b/packages/blockchain-info-components/src/Form/CreatableInput/index.js index 37930fb742f..5831e55faa4 100644 --- a/packages/blockchain-info-components/src/Form/CreatableInput/index.js +++ b/packages/blockchain-info-components/src/Form/CreatableInput/index.js @@ -17,7 +17,7 @@ class CreatableInputContainer extends React.PureComponent { value: [] } - componentDidMount () { + componentDidMount() { if (!isNil(this.props.defaultValue)) { // eslint-disable-next-line react/no-did-mount-set-state this.setState({ value: this.props.defaultValue }) @@ -28,7 +28,7 @@ class CreatableInputContainer extends React.PureComponent { } } - componentDidUpdate (prevProps) { + componentDidUpdate(prevProps) { const prevValue = pathOr([], ['value', 'value'], prevProps) const newValue = pathOr([], ['value', 'value'], this.props) const diff = head(difference(newValue, prevValue)) @@ -90,7 +90,7 @@ class CreatableInputContainer extends React.PureComponent { } } - render () { + render() { const { inputValue, value } = this.state return ( { { it('default renders correctly', () => { - const component = shallow() + const component = shallow() const tree = toJson(component) expect(tree).toMatchSnapshot() }) diff --git a/packages/blockchain-info-components/src/Form/PasswordInput.js b/packages/blockchain-info-components/src/Form/PasswordInput.js index a329aab2a1a..2d3d7a4d4c3 100644 --- a/packages/blockchain-info-components/src/Form/PasswordInput.js +++ b/packages/blockchain-info-components/src/Form/PasswordInput.js @@ -55,7 +55,7 @@ const BasePasswordInput = styled.input.attrs({ ` class PasswordInput extends React.Component { - componentDidUpdate (prevProps) { + componentDidUpdate(prevProps) { if (this.props.active && !prevProps.active && this.input) { this.input.focus() } @@ -65,7 +65,7 @@ class PasswordInput extends React.Component { this.input = input } - render () { + render() { const { active, errorState, value, ...rest } = this.props return ( diff --git a/packages/blockchain-info-components/src/Form/RadioButtonInput.spec.js b/packages/blockchain-info-components/src/Form/RadioButtonInput.spec.js index bd9946389b7..0f60c3ca572 100644 --- a/packages/blockchain-info-components/src/Form/RadioButtonInput.spec.js +++ b/packages/blockchain-info-components/src/Form/RadioButtonInput.spec.js @@ -7,7 +7,7 @@ import RadioButtonInput from './RadioButtonInput' describe('RadioButtonInput component', () => { it('default renders correctly', () => { const component = shallow( - + test ) diff --git a/packages/blockchain-info-components/src/Form/SelectInput/SelectInput.spec.js b/packages/blockchain-info-components/src/Form/SelectInput/SelectInput.spec.js index 60266cfc6ef..f93e65aa326 100644 --- a/packages/blockchain-info-components/src/Form/SelectInput/SelectInput.spec.js +++ b/packages/blockchain-info-components/src/Form/SelectInput/SelectInput.spec.js @@ -11,7 +11,7 @@ describe('SelectInput component', () => { ) const tree = toJson(component) diff --git a/packages/blockchain-info-components/src/Form/SelectInput/index.js b/packages/blockchain-info-components/src/Form/SelectInput/index.js index 342b707e0ce..3243a156c5e 100644 --- a/packages/blockchain-info-components/src/Form/SelectInput/index.js +++ b/packages/blockchain-info-components/src/Form/SelectInput/index.js @@ -11,7 +11,7 @@ class SelectInputContainer extends React.PureComponent { } /* eslint-disable react/no-did-update-set-state */ - componentDidUpdate (prevProps, prevState) { + componentDidUpdate(prevProps, prevState) { if (!equals(this.props.value, prevProps.value)) { this.setState({ value: this.props.value @@ -47,7 +47,7 @@ class SelectInputContainer extends React.PureComponent { onBlur = () => this.props.onBlur() - render () { + render() { const { elements, label, disabled, grouped, ...rest } = this.props const { search } = this.state const items = grouped ? elements : this.transform(elements, search) diff --git a/packages/blockchain-info-components/src/Form/SelectInput/template.js b/packages/blockchain-info-components/src/Form/SelectInput/template.js index cd368643a9e..d48fed7abc4 100644 --- a/packages/blockchain-info-components/src/Form/SelectInput/template.js +++ b/packages/blockchain-info-components/src/Form/SelectInput/template.js @@ -143,7 +143,7 @@ export const Control = props => { props.selectProps.menuIsOpen ? null : ( {props.children} - + ) } @@ -226,7 +226,7 @@ const SelectInput = props => { { return ( - {nbConfirmations > 0 ? : } - {nbConfirmations > 1 ? : } - {nbConfirmations > 2 ? : } + {nbConfirmations > 0 ? : } + {nbConfirmations > 1 ? : } + {nbConfirmations > 2 ? : } ) } diff --git a/packages/blockchain-info-components/src/Gauges/PasswordGauge.js b/packages/blockchain-info-components/src/Gauges/PasswordGauge.js index b4a9ec11cf8..c7ee0d6e2fb 100644 --- a/packages/blockchain-info-components/src/Gauges/PasswordGauge.js +++ b/packages/blockchain-info-components/src/Gauges/PasswordGauge.js @@ -43,11 +43,11 @@ const PasswordGauge = props => { return ( - {score > 0 ? : } - {score > 1 ? : } - {score > 2 ? : } - {score > 3 ? : } - {score > 4 ? : } + {score > 0 ? : } + {score > 1 ? : } + {score > 2 ? : } + {score > 3 ? : } + {score > 4 ? : } ) } diff --git a/packages/blockchain-info-components/src/Gauges/SecurityGauge.js b/packages/blockchain-info-components/src/Gauges/SecurityGauge.js index 33c1bef9054..8d6f13720ff 100644 --- a/packages/blockchain-info-components/src/Gauges/SecurityGauge.js +++ b/packages/blockchain-info-components/src/Gauges/SecurityGauge.js @@ -36,17 +36,17 @@ const SecurityGauge = props => { return ( {score >= 1 ? ( - + ) : ( )} {score >= 2 ? ( - + ) : ( )} {score === 3 ? ( - + ) : ( )} diff --git a/packages/blockchain-info-components/src/Icons/Icon.spec.js b/packages/blockchain-info-components/src/Icons/Icon.spec.js index a1ae43af309..1151860f8f1 100644 --- a/packages/blockchain-info-components/src/Icons/Icon.spec.js +++ b/packages/blockchain-info-components/src/Icons/Icon.spec.js @@ -6,7 +6,7 @@ import Icon from './Icon' describe('Icon component', () => { it('default renders correctly', () => { - const component = shallow() + const component = shallow() const tree = toJson(component) expect(tree).toMatchSnapshot() }) diff --git a/packages/blockchain-info-components/src/Images/Background.spec.js b/packages/blockchain-info-components/src/Images/Background.spec.js index 48afa92977d..09d7f3ada20 100644 --- a/packages/blockchain-info-components/src/Images/Background.spec.js +++ b/packages/blockchain-info-components/src/Images/Background.spec.js @@ -7,7 +7,7 @@ import Background from './Background' describe('Background component', () => { it('default renders correctly', () => { const component = shallow( - + ) const tree = toJson(component) expect(tree).toMatchSnapshot() diff --git a/packages/blockchain-info-components/src/Images/Image.spec.js b/packages/blockchain-info-components/src/Images/Image.spec.js index edac59251b2..cca09e1d2ae 100644 --- a/packages/blockchain-info-components/src/Images/Image.spec.js +++ b/packages/blockchain-info-components/src/Images/Image.spec.js @@ -7,7 +7,7 @@ import Image from './Image' describe('Image component', () => { it('default renders correctly', () => { const component = shallow( - + ) const tree = toJson(component) expect(tree).toMatchSnapshot() diff --git a/packages/blockchain-info-components/src/Loaders/BlockchainLoader.js b/packages/blockchain-info-components/src/Loaders/BlockchainLoader.js index afde889d831..6550abe007e 100644 --- a/packages/blockchain-info-components/src/Loaders/BlockchainLoader.js +++ b/packages/blockchain-info-components/src/Loaders/BlockchainLoader.js @@ -10,7 +10,7 @@ const Img = styled(Image)` overflow: hidden; ` -const BlockchainLoader = props => +const BlockchainLoader = props => BlockchainLoader.propTypes = { width: PropTypes.string.isRequired, diff --git a/packages/blockchain-info-components/src/Modals/Modal.spec.js b/packages/blockchain-info-components/src/Modals/Modal.spec.js index 7b468060d66..776a473c83e 100644 --- a/packages/blockchain-info-components/src/Modals/Modal.spec.js +++ b/packages/blockchain-info-components/src/Modals/Modal.spec.js @@ -7,7 +7,7 @@ import Modal from './Modal' describe('Modal component', () => { it('default renders correctly', () => { const component = shallow( - + ) const tree = toJson(component) expect(tree).toMatchSnapshot() diff --git a/packages/blockchain-info-components/src/Modals/ModalFooter.spec.js b/packages/blockchain-info-components/src/Modals/ModalFooter.spec.js index 4a6d9f93606..7866b3b6adc 100644 --- a/packages/blockchain-info-components/src/Modals/ModalFooter.spec.js +++ b/packages/blockchain-info-components/src/Modals/ModalFooter.spec.js @@ -6,7 +6,7 @@ import ModalFooter from './ModalFooter' describe('ModalFooter component', () => { it('default renders correctly', () => { - const component = shallow() + const component = shallow() const tree = toJson(component) expect(tree).toMatchSnapshot() }) diff --git a/packages/blockchain-info-components/src/Modals/ModalHeader.js b/packages/blockchain-info-components/src/Modals/ModalHeader.js index 2509e5129bc..5c065c6f304 100644 --- a/packages/blockchain-info-components/src/Modals/ModalHeader.js +++ b/packages/blockchain-info-components/src/Modals/ModalHeader.js @@ -46,14 +46,14 @@ const ModalHeader = props => { >
    {icon && ( - + )} {children} @@ -61,11 +61,11 @@ const ModalHeader = props => {
    {closeButton && ( diff --git a/packages/blockchain-info-components/src/Modals/ModalHeader.spec.js b/packages/blockchain-info-components/src/Modals/ModalHeader.spec.js index 3012affd179..0092dddc515 100644 --- a/packages/blockchain-info-components/src/Modals/ModalHeader.spec.js +++ b/packages/blockchain-info-components/src/Modals/ModalHeader.spec.js @@ -7,7 +7,7 @@ import ModalHeader from './ModalHeader' describe('ModalHeader component', () => { it('default renders correctly', () => { const component = shallow( - {}} icon='x' /> + {}} icon="x" /> ) const tree = toJson(component) expect(tree).toMatchSnapshot() diff --git a/packages/blockchain-info-components/src/Navigation/Events/index.js b/packages/blockchain-info-components/src/Navigation/Events/index.js index ff64743d4fa..4044f77f0b3 100644 --- a/packages/blockchain-info-components/src/Navigation/Events/index.js +++ b/packages/blockchain-info-components/src/Navigation/Events/index.js @@ -1,6 +1,6 @@ import React from 'react' -function _trackEvent (eventName, isButton, props) { +function _trackEvent(eventName, isButton, props) { let properties = Object.assign({}, props || {}, { category: isButton ? 'button' : 'link', label: eventName @@ -13,11 +13,11 @@ function _trackEvent (eventName, isButton, props) { } } -export function trackEvent (eventName, props) { +export function trackEvent(eventName, props) { return _trackEvent(eventName, false, props) } -export function trackButtonEvent (eventName, props) { +export function trackButtonEvent(eventName, props) { return _trackEvent(eventName, true, props) } diff --git a/packages/blockchain-info-components/src/Navigation/MenuButton/index.js b/packages/blockchain-info-components/src/Navigation/MenuButton/index.js index 11cdf3ab050..87ace7b53cc 100644 --- a/packages/blockchain-info-components/src/Navigation/MenuButton/index.js +++ b/packages/blockchain-info-components/src/Navigation/MenuButton/index.js @@ -81,7 +81,7 @@ class MenuButton extends PureComponent { active: false } - static getDerivedStateFromProps (nextProps, prevState) { + static getDerivedStateFromProps(nextProps, prevState) { let active = prevState.active if (nextProps.hasOwnProperty('active')) { active = nextProps.active @@ -97,7 +97,7 @@ class MenuButton extends PureComponent { } } - render () { + render() { let classes = this.state.active ? 'is-active' : '' return ( diff --git a/packages/blockchain-info-components/src/Navigation/MenuDropdown/index.js b/packages/blockchain-info-components/src/Navigation/MenuDropdown/index.js index 44f0e06e21a..8e9dd08341c 100644 --- a/packages/blockchain-info-components/src/Navigation/MenuDropdown/index.js +++ b/packages/blockchain-info-components/src/Navigation/MenuDropdown/index.js @@ -43,7 +43,7 @@ const Dropdown = props => { } class MenuDropdown extends PureComponent { - constructor (props) { + constructor(props) { super(props) this.mouseX = 0 this.mouseY = 0 @@ -64,13 +64,13 @@ class MenuDropdown extends PureComponent { } } - componentDidMount () { + componentDidMount() { if (document) { document.addEventListener('mousemove', this.handleMouseMove) } } - componentWillUnmount () { + componentWillUnmount() { if (document) { document.removeEventListener('mousemove', this.handleMouseMove) } @@ -100,7 +100,7 @@ class MenuDropdown extends PureComponent { this.setState({ dropDown: null }) } - toggleDropdown (name, onlyOn) { + toggleDropdown(name, onlyOn) { return e => { let dropDownVal = null if (typeof name === 'string') { @@ -124,7 +124,7 @@ class MenuDropdown extends PureComponent { } } - getLink (kind, name) { + getLink(kind, name) { return (
  • diff --git a/packages/blockchain-info-components/src/Navigation/SearchBar/index.js b/packages/blockchain-info-components/src/Navigation/SearchBar/index.js index 663e5c11046..ea556b30cd9 100644 --- a/packages/blockchain-info-components/src/Navigation/SearchBar/index.js +++ b/packages/blockchain-info-components/src/Navigation/SearchBar/index.js @@ -103,9 +103,9 @@ const TextField = styled.input` const SearchBar = props => { return ( ) } diff --git a/packages/blockchain-info-components/src/Navigation/SearchButton/index.js b/packages/blockchain-info-components/src/Navigation/SearchButton/index.js index 7209393d51c..a65f4fe6063 100644 --- a/packages/blockchain-info-components/src/Navigation/SearchButton/index.js +++ b/packages/blockchain-info-components/src/Navigation/SearchButton/index.js @@ -33,7 +33,7 @@ const Button = styled.button` ` class SearchButton extends Component { - render () { + render() { return @@ -483,7 +483,7 @@ class Header extends PureComponent { searchURL: SEARCH_URL } - constructor (props) { + constructor(props) { super(props) this.previousScroll = 100 } @@ -495,21 +495,21 @@ class Header extends PureComponent { searchText: '' } - componentDidMount () { + componentDidMount() { if (window) { window.addEventListener('scroll', this.handleScroll, true) window.addEventListener('resize', this.handleResize, true) } } - componentWillUnmount () { + componentWillUnmount() { if (window) { window.removeEventListener('scroll', this.handleScroll) window.removeEventListener('resize', this.handleResize) } } - getScrollTop () { + getScrollTop() { if (window && document) { let supportScrollY = window.scrollY !== undefined let supportPageOffset = window.pageYOffset !== undefined @@ -593,7 +593,7 @@ class Header extends PureComponent { document.location = this.props.searchURL + encodeURIComponent(text) } - render () { + render() { let themeObj = this.props.theme === 'light' ? darkTheme : lightTheme let searchActive = this.state.search ? 'search-active' : '' let navVisibility = this.state.showNav ? 'visible' : 'hidden' @@ -615,8 +615,8 @@ class Header extends PureComponent { > - - + + @@ -627,18 +627,18 @@ class Header extends PureComponent { - + @@ -648,22 +648,22 @@ class Header extends PureComponent { bgColor={themeObj.secondary} textColor={themeObj.main} href={publicRuntimeConfig.walletLoginURL} - event='header_login' + event="header_login" > diff --git a/packages/blockchain-info-components/src/Navigation/throttle.js b/packages/blockchain-info-components/src/Navigation/throttle.js index 588fe664155..a3ca83d7e26 100644 --- a/packages/blockchain-info-components/src/Navigation/throttle.js +++ b/packages/blockchain-info-components/src/Navigation/throttle.js @@ -3,7 +3,7 @@ export default (callback, delay) => { let args let context - function wrapper () { + function wrapper() { if (isThrottled) { args = arguments context = this diff --git a/packages/blockchain-info-components/src/Separators/Separator.spec.js b/packages/blockchain-info-components/src/Separators/Separator.spec.js index e91dc7a8e27..8d0a0139260 100644 --- a/packages/blockchain-info-components/src/Separators/Separator.spec.js +++ b/packages/blockchain-info-components/src/Separators/Separator.spec.js @@ -6,7 +6,7 @@ import Separator from './Separator' describe('Separator component', () => { it('default renders correctly', () => { - const component = shallow() + const component = shallow() const tree = toJson(component) expect(tree).toMatchSnapshot() }) diff --git a/packages/blockchain-info-components/src/Skeletons/SkeletonCircle.spec.js b/packages/blockchain-info-components/src/Skeletons/SkeletonCircle.spec.js index 030fb6423f6..efba119a5b8 100644 --- a/packages/blockchain-info-components/src/Skeletons/SkeletonCircle.spec.js +++ b/packages/blockchain-info-components/src/Skeletons/SkeletonCircle.spec.js @@ -7,7 +7,7 @@ import SkeletonCircle from './SkeletonCircle' describe('SkeletonCircle component', () => { it('default renders correctly', () => { const component = shallow( - + ) const tree = toJson(component) expect(tree).toMatchSnapshot() diff --git a/packages/blockchain-info-components/src/Skeletons/SkeletonRectangle.spec.js b/packages/blockchain-info-components/src/Skeletons/SkeletonRectangle.spec.js index 7c4535d3783..4a560533ac0 100644 --- a/packages/blockchain-info-components/src/Skeletons/SkeletonRectangle.spec.js +++ b/packages/blockchain-info-components/src/Skeletons/SkeletonRectangle.spec.js @@ -7,7 +7,7 @@ import SkeletonRectangle from './SkeletonRectangle' describe('SkeletonRectangle component', () => { it('default renders correctly', () => { const component = shallow( - + Test ) diff --git a/packages/blockchain-info-components/src/Toasts/Toast.js b/packages/blockchain-info-components/src/Toasts/Toast.js index 9288fd19e28..e76bbfeb25b 100644 --- a/packages/blockchain-info-components/src/Toasts/Toast.js +++ b/packages/blockchain-info-components/src/Toasts/Toast.js @@ -84,11 +84,11 @@ const Toast = props => { {children} diff --git a/packages/blockchain-info-components/src/Tooltip/TooltipHost.js b/packages/blockchain-info-components/src/Tooltip/TooltipHost.js index ee4b4101cf1..3cc60d29f6d 100644 --- a/packages/blockchain-info-components/src/Tooltip/TooltipHost.js +++ b/packages/blockchain-info-components/src/Tooltip/TooltipHost.js @@ -9,11 +9,11 @@ const Wrapper = styled.div` ` class TooltipHost extends React.PureComponent { - componentDidMount () { + componentDidMount() { ReactTooltip.rebuild() } - render () { + render() { const { tip, children, id } = this.props const dataTip = tip || [] diff --git a/packages/blockchain-info-components/src/Tooltip/index.js b/packages/blockchain-info-components/src/Tooltip/index.js index 60ec3a75739..5aad6114130 100644 --- a/packages/blockchain-info-components/src/Tooltip/index.js +++ b/packages/blockchain-info-components/src/Tooltip/index.js @@ -15,7 +15,7 @@ export { default as TooltipIcon } from './TooltipIcon' */ export default class TooltipContainer extends React.PureComponent { - render () { + render() { return {this.props.children} } } diff --git a/packages/blockchain-info-components/src/Tooltip/template.js b/packages/blockchain-info-components/src/Tooltip/template.js index 74ab3e27dfd..4e063cae2b0 100644 --- a/packages/blockchain-info-components/src/Tooltip/template.js +++ b/packages/blockchain-info-components/src/Tooltip/template.js @@ -30,7 +30,7 @@ const Tooltip = props => { bgColor={bgColor} opacity={opacity} padding={padding} - effect='solid' + effect="solid" {...rest} > {children} diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Alerts/messages.tsx b/packages/blockchain-wallet-v4-frontend/src/components/Alerts/messages.tsx index a856e2bdf9e..e7699a86f06 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Alerts/messages.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/Alerts/messages.tsx @@ -28,10 +28,10 @@ const IconColumn = styled.div` const buildMessageTemplate = messageText => ( {messageText} @@ -43,20 +43,20 @@ export const getAlertContent = (message, data = undefined) => { return ( - + - + - + @@ -64,13 +64,13 @@ export const getAlertContent = (message, data = undefined) => { href={ 'https://support.blockchain.com/hc/en-us/sections/360004368351-USD-Pax-FAQ' } - target='_blank' + target="_blank" weight={500} - size='12px' + size="12px" > @@ -81,219 +81,219 @@ export const getAlertContent = (message, data = undefined) => { case C.ADDRESS_ADD_ERROR: return buildMessageTemplate( ) case C.ADDRESS_DELETE_ERROR: return buildMessageTemplate( ) case C.ADDRESS_DELETE_SUCCESS: return buildMessageTemplate( ) case C.ADDRESS_DOES_NOT_EXIST_ERROR: return buildMessageTemplate( ) case C.ADDRESS_FORMAT_NOT_SUPPORTED_ERROR: return buildMessageTemplate( ) case C.ADDRESS_LABEL_MAXIMUM_ERROR: return buildMessageTemplate( ) case C.AUTHORIZATION_REQUIRED_INFO: return buildMessageTemplate( ) case C.AUTOLOGOUT_UPDATE_ERROR: return buildMessageTemplate( ) case C.AUTOLOGOUT_UPDATE_SUCCESS: return buildMessageTemplate( ) case C.BANK_ACCOUNT_SET_SUCCESS: return buildMessageTemplate( ) case C.BITPAY_INVOICE_NOT_FOUND_ERROR: return buildMessageTemplate( ) case C.COPY_ADDRESS_CLIPBOARD_SUCCESS: return buildMessageTemplate( ) case C.COPY_LINK_CLIPBOARD_SUCCESS: return buildMessageTemplate( ) case C.CURRENCY_UPDATE_ERROR: return buildMessageTemplate( ) case C.CURRENCY_UPDATE_SUCCESS: return buildMessageTemplate( ) case C.DOCUMENT_UPLOAD_ERROR: return buildMessageTemplate( ) case C.DEAUTHORIZE_BROWSER_SUCCESS: return buildMessageTemplate( ) case C.DEAUTHORIZE_BROWSER_ERROR: return buildMessageTemplate( ) case C.EMAIL_CODE_SENT_SUCCESS: return buildMessageTemplate( ) case C.EMAIL_UPDATE_ERROR: return buildMessageTemplate( ) case C.EMAIL_UPDATE_SUCCESS: return buildMessageTemplate( ) case C.EMAIL_UPDATE_SUCCESS_LINK: return buildMessageTemplate( ) case C.EMAIL_VERIFY_ERROR: return buildMessageTemplate( ) case C.EMAIL_VERIFY_SUCCESS: return buildMessageTemplate( ) case C.EXCHANGE_HISTORY_DOWNLOAD_BLOCKED: return buildMessageTemplate( ) case C.EXCHANGE_HISTORY_DOWNLOAD_ERROR: return buildMessageTemplate( ) case C.EXCHANGE_HISTORY_DOWNLOAD_SUCCESS: return buildMessageTemplate( ) case C.EXCHANGE_REFRESH_TRADES_ERROR: return buildMessageTemplate( ) case C.EXCHANGE_REFRESH_TRADE_ERROR: return buildMessageTemplate( ) case C.EXCHANGE_TRANSACTION_ERROR: return buildMessageTemplate( ) case C.FETCH_USED_ADDRESSES_ERROR: return buildMessageTemplate( ) case C.FIRST_PAX_TRADE_INFO: @@ -301,28 +301,28 @@ export const getAlertContent = (message, data = undefined) => { - + @@ -331,89 +331,89 @@ export const getAlertContent = (message, data = undefined) => { case C.FETCH_UNUSED_ADDRESSES_ERROR: return buildMessageTemplate( ) case C.GET_GOOGLEAUTH_SECRET_ERROR: return buildMessageTemplate( ) case C.GOOGLE_AUTH_VERIFY_ERROR: return buildMessageTemplate( ) case C.GOOGLE_AUTH_VERIFY_SUCCESS: return buildMessageTemplate( ) case C.GUID_SENT_ERROR: return buildMessageTemplate( ) case C.GUID_SENT_SUCCESS: return buildMessageTemplate( ) case C.HINT_UPDATE_ERROR: return buildMessageTemplate( ) case C.HINT_UPDATE_SUCCESS: return buildMessageTemplate( ) case C.IMPORT_LEGACY_SUCCESS: return buildMessageTemplate( ) case C.INCORRECT_BIP38_PASSWORD_ERROR: return buildMessageTemplate( ) case C.IPRESTRICTION_LOGIN_ERROR: return ( - + - - + + @@ -424,745 +424,745 @@ export const getAlertContent = (message, data = undefined) => { case C.IPRESTRICTION_NO_WHITELIST_ERROR: return buildMessageTemplate( ) case C.IPRESTRICTION_UPDATE_ERROR: return buildMessageTemplate( ) case C.IPRESTRICTION_UPDATE_SUCCESS: return buildMessageTemplate( ) case C.IPWHITELIST_UPDATE_ERROR: return buildMessageTemplate( ) case C.IPWHITELIST_UPDATE_SUCCESS: return buildMessageTemplate( ) case C.KYC_START_ERROR: return buildMessageTemplate( ) case C.LANGUAGE_UPDATE_ERROR: return buildMessageTemplate( ) case C.LANGUAGE_UPDATE_SUCCESS: return buildMessageTemplate( ) case C.LOGGINGLEVEL_UPDATE_ERROR: return buildMessageTemplate( ) case C.LOGGINGLEVEL_UPDATE_SUCCESS: return buildMessageTemplate( ) case C.LOGIN_ERROR: return buildMessageTemplate( ) case C.MESSAGE_SIGN_ERROR: return buildMessageTemplate( ) case C.MNEMONIC_VERIFY_SUCCESS: return buildMessageTemplate( ) case C.MOBILE_CODE_SENT_ERROR: return buildMessageTemplate( ) case C.MOBILE_CODE_SENT_SUCCESS: return buildMessageTemplate( ) case C.MOBILE_LOGIN_ERROR: return buildMessageTemplate( ) case C.MOBILE_LOGIN_ERROR_QRCODE_EXPIRED: return buildMessageTemplate( ) case C.MOBILE_LOGIN_SCAN_ERROR: return buildMessageTemplate( ) case C.MOBILE_UPDATE_ERROR: return buildMessageTemplate( ) case C.MOBILE_UPDATE_SUCCESS: return buildMessageTemplate( ) case C.MOBILE_VERIFY_ERROR: return buildMessageTemplate( ) case C.MOBILE_VERIFY_SUCCESS: return buildMessageTemplate( ) case C.NEW_WALLET_CREATE_ERROR: return buildMessageTemplate( ) case C.NEW_ADDRESS_GENERATE_ERROR: return buildMessageTemplate( ) case C.NEW_WALLET_CREATE_SUCCESS: return buildMessageTemplate( ) case C.PAYMENT_RECEIVED_BCH: return buildMessageTemplate( ) case C.PAYMENT_RECEIVED_BTC: return buildMessageTemplate( ) case C.PAYMENT_RECEIVED_ETH: return buildMessageTemplate( ) case C.PAYMENT_RECEIVED_ETH_PENDING: return buildMessageTemplate( ) case C.PAYMENT_RECEIVED_XLM: return buildMessageTemplate( ) case C.PAYMENT_CONFIRMED_SUCCESS: return buildMessageTemplate( ) case C.PBKDF2_UPDATE_SUCCESS: return buildMessageTemplate( ) case C.PLEASE_LOGIN: return buildMessageTemplate( ) case C.PLEASE_TRY_AGAIN: return buildMessageTemplate( ) case C.QR_SCANNER_NOT_ALLOWED: return buildMessageTemplate( ) case C.RECEIVE_BCH_SUCCESS: return buildMessageTemplate( ) case C.RECEIVE_BTC_SUCCESS: return buildMessageTemplate( ) case C.RECEIVE_ETH_SUCCESS: return buildMessageTemplate( ) case C.REGISTER_ERROR: return buildMessageTemplate( ) case C.REGISTER_SUCCESS: return buildMessageTemplate( ) case C.RENAME_BCH_WALLET_ERROR: return buildMessageTemplate( ) case C.RENAME_BCH_WALLET_SUCCESS: return buildMessageTemplate( ) case C.RENAME_BTC_WALLET_SUCCESS: return buildMessageTemplate( ) case C.RESEND_COIN_SUCCESS: return buildMessageTemplate( ) case C.RESET_TWOFA_INFO: return buildMessageTemplate( ) case C.RESTORE_ERROR: return buildMessageTemplate( ) case C.RESTORE_SUCCESS: return buildMessageTemplate( ) case C.RESTORE_WALLET_INFO: return buildMessageTemplate( ) case C.SECOND_PASSWORD_INVALID_ERROR: return buildMessageTemplate( ) case C.SECOND_PASSWORD_ENABLED_SUCCESS: return buildMessageTemplate( ) case C.SECOND_PASSWORD_DISABLED_SUCCESS: return buildMessageTemplate( ) case C.SEND_COIN_SUCCESS: return buildMessageTemplate( ) case C.SEND_COIN_CONFIRMED: return buildMessageTemplate( ) case C.SEND_COIN_ERROR: return buildMessageTemplate( ) case C.SMS_RESEND_ERROR: return buildMessageTemplate( ) case C.SMS_RESEND_SUCCESS: return buildMessageTemplate( ) case C.SWEEP_ERROR: return buildMessageTemplate( ) case C.SWEEP_ERROR_EMPTY_ADDRESS: return buildMessageTemplate( ) case C.SWEEP_SUCCESS: return buildMessageTemplate( ) case C.TOR_UPDATE_ERROR: return buildMessageTemplate( ) case C.TOR_UPDATE_SUCCESS: return buildMessageTemplate( ) case C.TWOFA_GOOGLEAUTH_ENABLE_ERROR: return buildMessageTemplate( ) case C.TWOFA_GOOGLEAUTH_ENABLE_SUCCESS: return buildMessageTemplate( ) case C.TWOFA_MOBILE_ENABLE_ERROR: return buildMessageTemplate( ) case C.TWOFA_MOBILE_ENABLE_SUCCESS: return buildMessageTemplate( ) case C.TWOFA_MOBILE_SET_ERROR: return buildMessageTemplate( ) case C.TWOFA_MOBILE_SET_SUCCESS: return buildMessageTemplate( ) case C.TWOFA_MOBILE_VERIFY_ERROR: return buildMessageTemplate( ) case C.TWOFA_MOBILE_VERIFY_SUCCESS: return buildMessageTemplate( ) case C.TWOFA_REMEMBER_UPDATE_ERROR: return buildMessageTemplate( ) case C.TWOFA_REMEMBER_UPDATE_SUCCESS: return buildMessageTemplate( ) case C.TWOFA_REQUIRED_INFO: return buildMessageTemplate( ) case C.TWOFA_RESET_UNKNOWN_GUID_ERROR: return buildMessageTemplate( ) case C.TWOFA_RESET_ERROR: return buildMessageTemplate( ) case C.TWOFA_RESET_NOT_ENABLED_ERROR: return buildMessageTemplate( ) case C.TWOFA_RESET_EMAIL_ERROR: return buildMessageTemplate( ) case C.TWOFA_UPDATE_ERROR: return buildMessageTemplate( ) case C.TWOFA_UPDATE_SUCCESS: return buildMessageTemplate( ) case C.TWOFA_YUBIKEY_ENABLE_ERROR: return buildMessageTemplate( ) case C.TWOFA_YUBIKEY_ENABLE_SUCCESS: return buildMessageTemplate( ) case C.UPDATE_ADDRESS_LABEL_SUCCESS: return buildMessageTemplate( ) case C.UPDATE_ADDRESS_LABEL_ERROR: return buildMessageTemplate( ) case C.UPDATE_IMPORTED_ADDRESS_LABEL_SUCCESS: return buildMessageTemplate( ) case C.UPDATE_IMPORTED_ADDRESS_LABEL_ERROR: return buildMessageTemplate( ) case C.VERIFY_EMAIL_SENT: return buildMessageTemplate( ) case C.VERIFY_EMAIL_SENT_ERROR: return buildMessageTemplate( ) case C.WALLET_LOADING_ERROR: return buildMessageTemplate( ) case C.WALLET_SESSION_ERROR: return buildMessageTemplate( ) case C.WALLET_UPGRADE_ERROR: return buildMessageTemplate( ) case C.YUBIKEY_VERIFY_ERROR: return buildMessageTemplate( ) case C.YUBIKEY_VERIFY_SUCCESS: return buildMessageTemplate( ) case C.CAPTCHA_CODE_INCORRECT: return buildMessageTemplate( ) case C.BTC_ADDRESS_INVALID: return buildMessageTemplate( ) case C.BCH_ADDRESS_INVALID: return buildMessageTemplate( ) case C.ETH_ADDRESS_INVALID: return buildMessageTemplate( ) case C.XLM_ADDRESS_INVALID: return buildMessageTemplate( ) case C.PRIVATE_KEY_INVALID: return buildMessageTemplate( ) case C.BTC_ADDRESS_AND_PRIVATE_KEY_INVALID: return buildMessageTemplate( ) case C.LOCKBOX_SETUP_SUCCESS: return buildMessageTemplate( ) case C.LOCKBOX_SETUP_ERROR: return buildMessageTemplate( ) case C.LOCKBOX_UPDATE_SUCCESS: return buildMessageTemplate( ) case C.LOCKBOX_UPDATE_ERROR: return buildMessageTemplate( ) case C.LOCKBOX_DELETE_SUCCESS: return buildMessageTemplate( ) case C.LOCKBOX_DELETE_ERROR: return buildMessageTemplate( ) default: return buildMessageTemplate( message || ( ) ) diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Alerts/template.tsx b/packages/blockchain-wallet-v4-frontend/src/components/Alerts/template.tsx index f6ba6be162b..638a8a23a91 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Alerts/template.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/Alerts/template.tsx @@ -50,7 +50,7 @@ const Alerts = props => { return ( diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Service/index.js b/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Service/index.js index a492dae1cc5..38b2e4849a1 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Service/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Service/index.js @@ -17,7 +17,7 @@ class ServiceAnnouncement extends React.PureComponent { this.props.cacheActions.announcementToggled(id, !isCollapsed) } - render () { + render() { const { alertArea, data } = this.props return data.cata({ Success: val => { diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Service/template.js b/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Service/template.js index bc479f03bb1..235cf6398a4 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Service/template.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Service/template.js @@ -104,12 +104,12 @@ const Announcement = props => { {id === 'blockchain-rebrand' && ( - <ServiceBadge type='white' inline> + <ServiceBadge type="white" inline> Update </ServiceBadge> )} - {icon && <Icon name={icon} size='20px' color={textColor} />} - <Text size='16px' color='white' uppercase={uppercase} weight={500}> + {icon && <Icon name={icon} size="20px" color={textColor} />} + <Text size="16px" color="white" uppercase={uppercase} weight={500}> {header[lang] ? header[lang] : header.en} </Text> @@ -120,7 +120,7 @@ const Announcement = props => { {section.body[lang] ? section.body[lang] : section.body.en} @@ -132,8 +132,8 @@ const Announcement = props => {
    {action && action.title && ( - - + + {action.title[lang] ? action.title[lang] : action.title.en} @@ -141,18 +141,18 @@ const Announcement = props => { {hideType === 'collapse' && ( toggleCollapse(id, collapsed)} /> )} {hideType === 'dismiss' && ( handleDismiss(id)} /> )} diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Static/index.js b/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Static/index.js index 856ebcdce8b..6cf2098cede 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Static/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Static/index.js @@ -33,7 +33,7 @@ class StaticAnnouncementsContainer extends React.PureComponent { }, 3000) } - render () { + render() { const { data } = this.props return data.cata({ diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Static/template.email.tsx b/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Static/template.email.tsx index 36ddcaec2d2..a501442e6da 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Static/template.email.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/Announcements/Static/template.email.tsx @@ -48,47 +48,47 @@ const EmailReminder = props => { return ( - +   - onEmailResend(email)}> + onEmailResend(email)}> - + diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Balances/Lockbox.tsx b/packages/blockchain-wallet-v4-frontend/src/components/Balances/Lockbox.tsx index 42081c6bb62..60c80ede5c4 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Balances/Lockbox.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/Balances/Lockbox.tsx @@ -63,30 +63,30 @@ export const CurrencyItem = props => { disableClick={props.disableClick} > - + {props.isSaved ? ( - + {props.balance} - + {props.balance} ) : isBrowserSupported ? ( - + ) : ( - + diff --git a/packages/blockchain-wallet-v4-frontend/src/components/CopyClipboard/index.js b/packages/blockchain-wallet-v4-frontend/src/components/CopyClipboard/index.js index 6c513935f0b..4d966f21ca7 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/CopyClipboard/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/CopyClipboard/index.js @@ -8,18 +8,18 @@ import { actions, selectors } from 'data' import CopyClipboard from './template' class CopyClipboardContainer extends React.PureComponent { - constructor (props) { + constructor(props) { super(props) this.timeout = undefined this.state = { active: false } this.handleClick = this.handleClick.bind(this) } - componentWillUnmount () { + componentWillUnmount() { clearTimeout(this.timeout) } - handleClick () { + handleClick() { const { alertActions, coin, supportedCoins } = this.props this.setState({ active: true }) this.timeout = setTimeout(() => { @@ -34,7 +34,7 @@ class CopyClipboardContainer extends React.PureComponent { } } - render () { + render() { return ( { return ( - {address} + {address} diff --git a/packages/blockchain-wallet-v4-frontend/src/components/DataError/ErrorHandler.js b/packages/blockchain-wallet-v4-frontend/src/components/DataError/ErrorHandler.js index 844047c9aac..0b3a353d998 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/DataError/ErrorHandler.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/DataError/ErrorHandler.js @@ -20,14 +20,14 @@ const ErrorHandler = props => { if (vulnerableAddress) { return ( - + {message} - @@ -35,38 +35,38 @@ const ErrorHandler = props => { ) } else if (errorMessage === FETCH_FEES_FAILURE) { return ( - + ) } else if (typeof errorMessage === 'string') { return ( - + {errorMessage} ) } else { return ( - + - + - + diff --git a/packages/blockchain-wallet-v4-frontend/src/components/DataError/index.tsx b/packages/blockchain-wallet-v4-frontend/src/components/DataError/index.tsx index 3d52e7fdd8f..87637e94c06 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/DataError/index.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/DataError/index.tsx @@ -30,11 +30,11 @@ const DataError = (props: { return ( - -
    + +
    diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Display/CoinDisplay/index.tsx b/packages/blockchain-wallet-v4-frontend/src/components/Display/CoinDisplay/index.tsx index edcaeea133d..30f06d7d72f 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Display/CoinDisplay/index.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/Display/CoinDisplay/index.tsx @@ -7,7 +7,7 @@ import Loading from './template.loading' import Success from './template.success' class CoinDisplayContainer extends React.PureComponent { - render () { + render() { const { data, ...rest } = this.props return data.cata({ Success: value => {value}, diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Display/CoinDisplay/template.loading.tsx b/packages/blockchain-wallet-v4-frontend/src/components/Display/CoinDisplay/template.loading.tsx index 4e5f39c76c3..f8b2d95c833 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Display/CoinDisplay/template.loading.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/Display/CoinDisplay/template.loading.tsx @@ -13,7 +13,7 @@ const Wrapper = styled.div` export default props => { return ( - + ) } diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Display/ComboDisplay/index.js b/packages/blockchain-wallet-v4-frontend/src/components/Display/ComboDisplay/index.js index e4087f6b337..9731ff2276b 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Display/ComboDisplay/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Display/ComboDisplay/index.js @@ -4,7 +4,7 @@ import React from 'react' import ComboDisplay from './template' class ComboDisplayContainer extends React.PureComponent { - render () { + render() { return } } diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/index.tsx b/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/index.tsx index f99414970e2..2be86fd579f 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/index.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/index.tsx @@ -12,7 +12,7 @@ import Loading from './template.loading' import Success from './template.success' class FiatDisplayContainer extends React.PureComponent { - componentDidMount () { + componentDidMount() { if (Remote.NotAsked.is(this.props.data)) { const { coin, erc20List } = this.props if (includes(coin, erc20List)) { @@ -22,7 +22,7 @@ class FiatDisplayContainer extends React.PureComponent { } } - render () { + render() { const { data, ...rest } = this.props return data.cata({ Success: value => {value}, diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/template.error.tsx b/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/template.error.tsx index 65b54c63454..96dab6a0bb0 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/template.error.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/template.error.tsx @@ -25,8 +25,8 @@ export default props => ( diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/template.loading.tsx b/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/template.loading.tsx index 4e5f39c76c3..f8b2d95c833 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/template.loading.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/Display/FiatDisplay/template.loading.tsx @@ -13,7 +13,7 @@ const Wrapper = styled.div` export default props => { return ( - + ) } diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Display/StringDisplay/index.js b/packages/blockchain-wallet-v4-frontend/src/components/Display/StringDisplay/index.js index c0d6afc6599..42865dcd974 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Display/StringDisplay/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Display/StringDisplay/index.js @@ -19,18 +19,18 @@ const Wrapper = styled.div` ` const defaultError = ( - + ) class StringDisplayContainer extends React.PureComponent { - render () { + render() { const { children, skeletonHeight, skeletonWidth, ...rest } = this.props return ( {children.cata({ Success: value => value, Failure: error => ( - + {propOr(defaultError, 'message', error)} ), diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Display/SwitchableDisplay/index.js b/packages/blockchain-wallet-v4-frontend/src/components/Display/SwitchableDisplay/index.js index b6984ad3657..b04fb0ab734 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Display/SwitchableDisplay/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Display/SwitchableDisplay/index.js @@ -7,7 +7,7 @@ import CoinDisplay from '../CoinDisplay' import FiatDisplay from '../FiatDisplay' class SwitchableDisplayContainer extends React.PureComponent { - render () { + render() { return this.props.coinDisplayed ? ( {this.props.children} ) : ( diff --git a/packages/blockchain-wallet-v4-frontend/src/components/DropdownLanguage/index.js b/packages/blockchain-wallet-v4-frontend/src/components/DropdownLanguage/index.js index 4fcab1460fa..f50cda68d03 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/DropdownLanguage/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/DropdownLanguage/index.js @@ -12,7 +12,7 @@ class DropdownLanguageContainer extends React.PureComponent { this.props.preferencesActions.setLanguage(selectedLanguage.language, true) } - render () { + render() { const { currentLanguage, languages } = this.props const languageList = languages.map(lang => { return { @@ -24,7 +24,7 @@ class DropdownLanguageContainer extends React.PureComponent { return ( ( - + - + - + diff --git a/packages/blockchain-wallet-v4-frontend/src/components/EmptyTx/index.js b/packages/blockchain-wallet-v4-frontend/src/components/EmptyTx/index.js index edfb418b93c..7a203eb2860 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/EmptyTx/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/EmptyTx/index.js @@ -15,40 +15,40 @@ const Header = styled(Text)` ` class EmptyTxContainer extends React.PureComponent { - render () { + render() { return ( - - -
    + + +
    - + - + - + diff --git a/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Error/index.js b/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Error/index.js index 1a8a66cef63..841dfee6fb5 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Error/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Error/index.js @@ -36,25 +36,25 @@ const Circle = styled.div` const Error = props => ( - + - + - + - + diff --git a/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Step1/index.js b/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Step1/index.js index 9ba3f61ad43..6774a370eda 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Step1/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Step1/index.js @@ -52,21 +52,21 @@ const Step1 = props => ( {props.status === 'active' ? ( - + ) : ( - + )} - + {props.status === 'active' ? ( ) : ( )} diff --git a/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Step2/index.js b/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Step2/index.js index 29f2700cb88..2e7511b58ee 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Step2/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Step2/index.js @@ -51,22 +51,22 @@ const Step2 = props => ( - + diff --git a/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Step3/index.js b/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Step3/index.js index 3c3fc0878e4..4cd6f40e2d7 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Step3/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/ExchangeTimeline/Step3/index.js @@ -51,25 +51,25 @@ const Step3 = props => { {status === 'refunded' ? ( - + ) : ( )} - + {status === 'refunded' ? ( ) : ( )} diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Flyout/index.tsx b/packages/blockchain-wallet-v4-frontend/src/components/Flyout/index.tsx index 313093eb689..0536ae3bebe 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Flyout/index.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/Flyout/index.tsx @@ -127,7 +127,7 @@ type OwnProps = { } class Flyout extends React.PureComponent { - render () { + render() { const { children, ...rest } = this.props return ( @@ -143,7 +143,7 @@ class Flyout extends React.PureComponent { > diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/AutosizeTextBox/index.js b/packages/blockchain-wallet-v4-frontend/src/components/Form/AutosizeTextBox/index.js index 518510ac494..dac60529ced 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/AutosizeTextBox/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/AutosizeTextBox/index.js @@ -23,7 +23,7 @@ const getErrorState = ({ touched, invalid }) => { } class AutosizeTextBox extends React.Component { - render () { + render() { const { autoComplete, className, @@ -60,9 +60,9 @@ class AutosizeTextBox extends React.Component { /> {touched && error && ( {error} @@ -70,9 +70,9 @@ class AutosizeTextBox extends React.Component { )} {touched && !error && warning && ( {warning} diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/index.js b/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/index.js index d1aafeef3ed..1159e9e21ae 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/index.js @@ -9,20 +9,20 @@ import Loading from './template.loading' import Success from './template.success' class CaptchaBoxContainer extends React.PureComponent { - constructor (props) { + constructor(props) { super(props) this.fetchNewCaptcha = this.fetchNewCaptcha.bind(this) } - componentDidMount () { + componentDidMount() { this.props.actions.fetchCaptcha() } - fetchNewCaptcha () { + fetchNewCaptcha() { this.props.actions.fetchCaptcha() } - render () { + render() { const { data } = this.props return data.cata({ diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/template.error.js b/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/template.error.js index 1ed03d10005..012a49fe742 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/template.error.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/template.error.js @@ -14,7 +14,7 @@ const Wrapper = styled.div` export default props => ( - + {props.children} diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/template.loading.js b/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/template.loading.js index 5d9ab6bfd7a..d9c7382e872 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/template.loading.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/template.loading.js @@ -17,7 +17,7 @@ const Wrapper = styled.div` export default props => { return ( - + ) } diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/template.success.js b/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/template.success.js index e24699089c2..fa1748bc9f3 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/template.success.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/CaptchaBox/template.success.js @@ -57,11 +57,11 @@ const CaptchaBox = field => { return ( - - + + @@ -76,7 +76,7 @@ const CaptchaBox = field => { errorState={errorState} /> {field.meta.touched && field.meta.error && ( - + {field.meta.error} )} diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/CheckBox/index.js b/packages/blockchain-wallet-v4-frontend/src/components/Form/CheckBox/index.js index f6bb7ae8361..eb70c87dd54 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/CheckBox/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/CheckBox/index.js @@ -30,7 +30,7 @@ const CheckBox = ({ children, className, ...field }) => { return ( - + { {field.meta.touched && field.meta.error && !field.hideErrors && ( - + {field.meta.error} )} diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/CoinBalanceDropdown/index.tsx b/packages/blockchain-wallet-v4-frontend/src/components/Form/CoinBalanceDropdown/index.tsx index 629ae125a3c..1118425c5ea 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/CoinBalanceDropdown/index.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/CoinBalanceDropdown/index.tsx @@ -83,16 +83,16 @@ export class CoinBalanceDropdown extends PureComponent { const isItem = !children return ( - + {children || props.value.label} {props.value.balance} @@ -101,11 +101,11 @@ export class CoinBalanceDropdown extends PureComponent { ( {props.value.balance} @@ -118,7 +118,7 @@ export class CoinBalanceDropdown extends PureComponent { ) } - render () { + render() { return this.props.data.cata({ Success: values => { return ( @@ -140,8 +140,8 @@ export class CoinBalanceDropdown extends PureComponent { {typeof e === 'string' ? e : typeof e === 'object' ? e.message : e} ), - Loading: () => ..., - NotAsked: () => ... + Loading: () => ..., + NotAsked: () => ... }) } } diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/CountdownTimer/index.js b/packages/blockchain-wallet-v4-frontend/src/components/Form/CountdownTimer/index.js index 0f96efd974c..0895f98f7f1 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/CountdownTimer/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/CountdownTimer/index.js @@ -4,7 +4,7 @@ import PropTypes from 'prop-types' import React from 'react' class CountdownTimerContainer extends React.PureComponent { - constructor (props) { + constructor(props) { super(props) this.interval = undefined const { expiryDate } = props @@ -14,15 +14,15 @@ class CountdownTimerContainer extends React.PureComponent { this.tick = this.tick.bind(this) } - componentDidMount () { + componentDidMount() { this.interval = setInterval(this.tick, 1000) } - componentWillUnmount () { + componentWillUnmount() { clearInterval(this.interval) } - tick () { + tick() { const { expiryDate, handleExpiry } = this.props const remaining = moment.duration(moment(expiryDate).diff(moment())) @@ -36,7 +36,7 @@ class CountdownTimerContainer extends React.PureComponent { } } - render () { + render() { const timeLeft = moment .utc(this.state.remaining.as('milliseconds')) .format('mm:ss') diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/CountdownTimer/template.js b/packages/blockchain-wallet-v4-frontend/src/components/Form/CountdownTimer/template.js index 72a923173f2..7a7aabc0af5 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/CountdownTimer/template.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/CountdownTimer/template.js @@ -20,40 +20,40 @@ const Wrapper = styled.div` const CountdownTimer = props => ( {!props.payProInvoice ? ( - + ) : ( )} {!props.hideTooltip ? ( - - + + ) : null} - + diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/CreditCardBox/index.tsx b/packages/blockchain-wallet-v4-frontend/src/components/Form/CreditCardBox/index.tsx index 85e06dba194..8badfb392e3 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/CreditCardBox/index.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/CreditCardBox/index.tsx @@ -49,8 +49,8 @@ export const validateCreditCard = (value, allValues, props: AddCardProps) => { if (!cardType) { return ( ) } @@ -58,8 +58,8 @@ export const validateCreditCard = (value, allValues, props: AddCardProps) => { if (value.replace(/[^\d]/g, '').length < cardType.minCardNumberLength) { return ( ) } @@ -67,8 +67,8 @@ export const validateCreditCard = (value, allValues, props: AddCardProps) => { if (!cardMethod?.subTypes.find(subType => subType === cardType.type)) { return ( ) } diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/CreditCardCVCBox/index.tsx b/packages/blockchain-wallet-v4-frontend/src/components/Form/CreditCardCVCBox/index.tsx index 51fff5f3767..5ac6341ace5 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/CreditCardCVCBox/index.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/CreditCardCVCBox/index.tsx @@ -37,8 +37,8 @@ export const validateCreditCardCVC: Validator = ( if (value.length < cvcLength) { return ( ) } diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/CreditCardExpiryBox/index.tsx b/packages/blockchain-wallet-v4-frontend/src/components/Form/CreditCardExpiryBox/index.tsx index 0022f37dbaa..2e36cd602f2 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/CreditCardExpiryBox/index.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/CreditCardExpiryBox/index.tsx @@ -37,8 +37,8 @@ export const validateCreditCardExpiry = (value: string) => { if (!value.match(regex)) { return ( ) } @@ -46,8 +46,8 @@ export const validateCreditCardExpiry = (value: string) => { if (Number(value.split('/')[0]) > 12) { return ( ) } @@ -55,8 +55,8 @@ export const validateCreditCardExpiry = (value: string) => { if (moment(value, 'MM/YY') < moment()) { return ( ) } diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/DateBox/index.js b/packages/blockchain-wallet-v4-frontend/src/components/Form/DateBox/index.js index 71d23e847bd..8f598cf846d 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/DateBox/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/DateBox/index.js @@ -29,7 +29,7 @@ const DateBox = field => { {field.meta.touched && field.meta.error && ( - + {field.meta.error} )} diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/DateBoxDebounced/index.js b/packages/blockchain-wallet-v4-frontend/src/components/Form/DateBoxDebounced/index.js index dccd2d1eebf..f6f0a42e395 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/DateBoxDebounced/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/DateBoxDebounced/index.js @@ -25,7 +25,7 @@ const getErrorState = meta => { } class DateBoxDebounced extends React.Component { - constructor (props) { + constructor(props) { super(props) this.state = { value: props.input.value, open: props.open } this.timeout = undefined @@ -34,18 +34,18 @@ class DateBoxDebounced extends React.Component { this.handleFocus = this.handleFocus.bind(this) } - static getDerivedStateFromProps (nextProps, prevState) { + static getDerivedStateFromProps(nextProps, prevState) { if (!equals(nextProps.input.value, prevState.value)) { return { value: nextProps.input.value } } return null } - componentWillUnmount () { + componentWillUnmount() { clearTimeout(this.timeout) } - handleChange (value) { + handleChange(value) { if (this.timeout) clearTimeout(this.timeout) this.timeout = setTimeout(() => { this.props.input.onChange(value) @@ -53,17 +53,17 @@ class DateBoxDebounced extends React.Component { }, 500) } - handleBlur () { + handleBlur() { this.setState({ open: false }) this.props.input.onBlur(this.state.value) } - handleFocus () { + handleFocus() { this.setState({ open: true }) this.props.input.onFocus(this.state.value) } - render () { + render() { const { meta, input, ...rest } = this.props const { value, open } = this.state const errorState = getErrorState(meta) @@ -83,12 +83,12 @@ class DateBoxDebounced extends React.Component { {...rest} /> {meta.dirty && meta.error && ( - + {meta.error} )} {meta.dirty && !meta.error && meta.warning && ( - + {meta.warning} )} diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/DateInputBox/index.js b/packages/blockchain-wallet-v4-frontend/src/components/Form/DateInputBox/index.js index b2f8a3f0fc3..fe5c84df4df 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/DateInputBox/index.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/DateInputBox/index.js @@ -85,11 +85,11 @@ const MonthBox = ({ input, otherMeta, onBlur, onMonthChange, onFocus }) => ( } - menuPlacement='auto' + menuPlacement="auto" elements={monthElements} input={{ name: 'month', @@ -104,7 +104,7 @@ const MonthBox = ({ input, otherMeta, onBlur, onMonthChange, onFocus }) => ( ) const DateBox = ({ intl, input, otherMeta, onBlur, onDateChange, onFocus }) => ( - + ( onChange: onDateChange, onFocus: onFocus }} - size='16px' + size="16px" meta={otherMeta} /> @@ -137,7 +137,7 @@ const YearBox = ({ intl, input, otherMeta, onBlur, onYearChange, onFocus }) => ( onChange: onYearChange, onFocus: onFocus }} - size='16px' + size="16px" meta={otherMeta} /> @@ -181,7 +181,7 @@ class DateInputBox extends React.PureComponent { date: formatDate(e.target.value) }) - render () { + render() { const { input, meta, @@ -223,9 +223,9 @@ class DateInputBox extends React.PureComponent { {meta.touched && error && ( {meta.error} @@ -233,9 +233,9 @@ class DateInputBox extends React.PureComponent { )} {meta.touched && !error && meta.warning && ( {meta.warning} diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Form/EmailVerification/EmailVerification.js b/packages/blockchain-wallet-v4-frontend/src/components/Form/EmailVerification/EmailVerification.js index c462d48ad41..37d63605942 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Form/EmailVerification/EmailVerification.js +++ b/packages/blockchain-wallet-v4-frontend/src/components/Form/EmailVerification/EmailVerification.js @@ -28,9 +28,9 @@ const InputRow = styled(Row)` ` export const LoadingButton = ({ loading, children, ...rest }) => ( -