diff --git a/web/cashtab/src/components/Receive/Receive.js b/web/cashtab/src/components/Receive/Receive.js index b3ee1e862..53dc4e25c 100644 --- a/web/cashtab/src/components/Receive/Receive.js +++ b/web/cashtab/src/components/Receive/Receive.js @@ -1,137 +1,149 @@ import React from 'react'; import styled from 'styled-components'; import PropTypes from 'prop-types'; import { WalletContext } from 'utils/context'; import OnBoarding from 'components/OnBoarding/OnBoarding'; import { QRCode } from 'components/Common/QRCode'; import { currency } from 'components/Common/Ticker.js'; import { LoadingCtn } from 'components/Common/Atoms'; import BalanceHeader from 'components/Common/BalanceHeader'; import BalanceHeaderFiat from 'components/Common/BalanceHeaderFiat'; import { WalletInfoCtn, ZeroBalanceHeader } from 'components/Common/Atoms'; import WalletLabel from 'components/Common/WalletLabel'; import { getWalletState } from 'utils/cashMethods'; +import { Alert } from 'antd'; export const ReceiveCtn = styled.div` width: 100%; h2 { color: ${props => props.theme.contrast}; margin: 0 0 20px; margin-top: 10px; } `; +const InfoContainer = styled.div` + width: 80%; + margin: auto; +`; const ReceiveWithWalletPresent = ({ wallet, cashtabSettings, balances, fiatPrice, changeCashtabSettings, }) => { return ( <ReceiveCtn> <WalletInfoCtn> <WalletLabel name={wallet.name} cashtabSettings={cashtabSettings} changeCashtabSettings={changeCashtabSettings} ></WalletLabel> {!balances.totalBalance ? ( <ZeroBalanceHeader> You currently have 0 {currency.ticker} <br /> Deposit some funds to use this feature </ZeroBalanceHeader> ) : ( <> <BalanceHeader balance={balances.totalBalance} ticker={currency.ticker} cashtabSettings={cashtabSettings} /> <BalanceHeaderFiat balance={balances.totalBalance} settings={cashtabSettings} fiatPrice={fiatPrice} /> </> )} </WalletInfoCtn> {wallet && ((wallet.Path245 && wallet.Path145) || wallet.Path1899) && ( <> {wallet.Path1899 ? ( <> <QRCode id="borderedQRCode" address={wallet.Path1899.cashAddress} /> </> ) : ( <> <QRCode id="borderedQRCode" address={wallet.Path245.cashAddress} /> </> )} </> )} + <InfoContainer> + <Alert + message="Cashtab now supports receiving eTokens at your eCash address" + type="info" + closable + /> + </InfoContainer> </ReceiveCtn> ); }; const Receive = () => { const ContextValue = React.useContext(WalletContext); const { wallet, previousWallet, loading, cashtabSettings, changeCashtabSettings, fiatPrice, } = ContextValue; const walletState = getWalletState(wallet); const { balances } = walletState; return ( <> {loading ? ( <LoadingCtn /> ) : ( <> {(wallet && wallet.Path1899) || (previousWallet && previousWallet.path1899) ? ( <ReceiveWithWalletPresent wallet={wallet} cashtabSettings={cashtabSettings} balances={balances} fiatPrice={fiatPrice} changeCashtabSettings={changeCashtabSettings} /> ) : ( <OnBoarding /> )} </> )} </> ); }; ReceiveWithWalletPresent.propTypes = { balances: PropTypes.oneOfType([PropTypes.string, PropTypes.object]), fiatPrice: PropTypes.number, wallet: PropTypes.object, cashtabSettings: PropTypes.oneOfType([ PropTypes.shape({ fiatCurrency: PropTypes.string, sendModal: PropTypes.bool, autoCameraOn: PropTypes.bool, hideMessagesFromUnknownSender: PropTypes.bool, toggleShowHideBalance: PropTypes.bool, }), PropTypes.bool, ]), changeCashtabSettings: PropTypes.func, }; export default Receive; diff --git a/web/cashtab/src/components/Receive/__tests__/__snapshots__/Receive.test.js.snap b/web/cashtab/src/components/Receive/__tests__/__snapshots__/Receive.test.js.snap index f73938415..b3563e539 100644 --- a/web/cashtab/src/components/Receive/__tests__/__snapshots__/Receive.test.js.snap +++ b/web/cashtab/src/components/Receive/__tests__/__snapshots__/Receive.test.js.snap @@ -1,735 +1,919 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP @generated exports[`Wallet with BCH balances 1`] = ` <div className="sc-cJSrbW hAenpB" > <div className="sc-bRBYWo kVYmei" > <div className="sc-TOsTZ eYrqmp" > <h4 className="sc-kgAjT cKPgvU" > MigrationTestAlpha </h4> <a href="/configure" onClick={[Function]} > <svg className="sc-jTzLTM bTdWCF" > edit.svg </svg> </a> <div> <button aria-checked={false} className="ant-switch ant-switch-small" onClick={[Function]} onKeyDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} role="switch" type="button" > <div className="ant-switch-handle" /> <span className="ant-switch-inner" > <svg className="sc-chPdSV gzfndC" > eye-invisible.svg </svg> </span> </button> </div> </div> <div className="sc-fBuWsC hgNVpd" > You currently have 0 XEC <br /> Deposit some funds to use this feature </div> </div> <div onClick={[Function]} > <div onCopy={[Function]} style={ Object { "display": "inline-block", "position": "relative", "width": "100%", } } > <div onClick={[Function]} style={ Object { "position": "relative", } } > <div className="sc-jAaTju gtTnsd" style={ Object { "display": "none", } } > Copied <br /> <span style={ Object { "fontSize": "12px", } } > ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd </span> </div> <svg className="sc-cMljjf pSHwe" height={210} id="borderedQRCode" shapeRendering="crispEdges" viewBox="0 0 37 37" width={210} > <path d="M0,0 h37v37H0z" fill="#FFFFFF" /> <path d="M4 4h7v1H4zM12 4h1v1H12zM14 4h1v1H14zM16 4h1v1H16zM18 4h1v1H18zM21 4h4v1H21zM26,4 h7v1H26zM4 5h1v1H4zM10 5h1v1H10zM13 5h5v1H13zM20 5h1v1H20zM22 5h1v1H22zM26 5h1v1H26zM32,5 h1v1H32zM4 6h1v1H4zM6 6h3v1H6zM10 6h1v1H10zM12 6h3v1H12zM17 6h1v1H17zM19 6h2v1H19zM26 6h1v1H26zM28 6h3v1H28zM32,6 h1v1H32zM4 7h1v1H4zM6 7h3v1H6zM10 7h1v1H10zM12 7h3v1H12zM16 7h4v1H16zM21 7h2v1H21zM26 7h1v1H26zM28 7h3v1H28zM32,7 h1v1H32zM4 8h1v1H4zM6 8h3v1H6zM10 8h1v1H10zM12 8h1v1H12zM15 8h3v1H15zM19 8h5v1H19zM26 8h1v1H26zM28 8h3v1H28zM32,8 h1v1H32zM4 9h1v1H4zM10 9h1v1H10zM14 9h2v1H14zM17 9h1v1H17zM21 9h1v1H21zM23 9h1v1H23zM26 9h1v1H26zM32,9 h1v1H32zM4 10h7v1H4zM12 10h1v1H12zM14 10h1v1H14zM16 10h1v1H16zM18 10h1v1H18zM20 10h1v1H20zM22 10h1v1H22zM24 10h1v1H24zM26,10 h7v1H26zM14 11h1v1H14zM16 11h1v1H16zM19 11h1v1H19zM21 11h3v1H21zM4 12h4v1H4zM10 12h1v1H10zM12 12h1v1H12zM14 12h2v1H14zM19 12h7v1H19zM28 12h3v1H28zM32,12 h1v1H32zM5 13h1v1H5zM7 13h2v1H7zM12 13h1v1H12zM14 13h1v1H14zM16 13h1v1H16zM18 13h1v1H18zM20 13h1v1H20zM22 13h3v1H22zM26 13h1v1H26zM28 13h1v1H28zM32,13 h1v1H32zM4 14h2v1H4zM7 14h4v1H7zM12 14h4v1H12zM17 14h1v1H17zM21 14h1v1H21zM25 14h1v1H25zM27 14h1v1H27zM29 14h1v1H29zM31 14h1v1H31zM4 15h2v1H4zM8 15h2v1H8zM12 15h3v1H12zM16 15h3v1H16zM20 15h1v1H20zM22 15h1v1H22zM25 15h1v1H25zM27 15h1v1H27zM31,15 h2v1H31zM5 16h4v1H5zM10 16h2v1H10zM13 16h2v1H13zM21 16h1v1H21zM23 16h1v1H23zM27 16h1v1H27zM30 16h2v1H30zM5 17h1v1H5zM7 17h1v1H7zM9 17h1v1H9zM11 17h1v1H11zM13 17h1v1H13zM21 17h1v1H21zM23 17h1v1H23zM26 17h2v1H26zM32,17 h1v1H32zM5 18h1v1H5zM9 18h2v1H9zM12 18h1v1H12zM14 18h1v1H14zM21 18h1v1H21zM23 18h1v1H23zM25 18h1v1H25zM27 18h1v1H27zM29 18h1v1H29zM31,18 h2v1H31zM5 19h5v1H5zM12 19h1v1H12zM15 19h1v1H15zM32,19 h1v1H32zM8 20h4v1H8zM14 20h1v1H14zM22 20h2v1H22zM25 20h1v1H25zM28 20h2v1H28zM6 21h1v1H6zM12 21h1v1H12zM15 21h3v1H15zM19 21h1v1H19zM21 21h1v1H21zM24 21h2v1H24zM27 21h1v1H27zM29 21h2v1H29zM4 22h1v1H4zM7 22h1v1H7zM9 22h3v1H9zM13 22h2v1H13zM16 22h2v1H16zM19 22h1v1H19zM21 22h2v1H21zM24 22h1v1H24zM27 22h1v1H27zM30 22h1v1H30zM8 23h2v1H8zM13 23h2v1H13zM16 23h1v1H16zM19 23h1v1H19zM21 23h1v1H21zM24 23h1v1H24zM26 23h1v1H26zM29 23h3v1H29zM5 24h2v1H5zM8 24h1v1H8zM10 24h1v1H10zM16 24h1v1H16zM18 24h1v1H18zM21 24h8v1H21zM30,24 h3v1H30zM12 25h1v1H12zM15 25h4v1H15zM20 25h5v1H20zM28 25h1v1H28zM31,25 h2v1H31zM4 26h7v1H4zM13 26h1v1H13zM15 26h1v1H15zM18 26h1v1H18zM20 26h1v1H20zM22 26h3v1H22zM26 26h1v1H26zM28 26h4v1H28zM4 27h1v1H4zM10 27h1v1H10zM14 27h2v1H14zM17 27h1v1H17zM19 27h2v1H19zM24 27h1v1H24zM28 27h1v1H28zM32,27 h1v1H32zM4 28h1v1H4zM6 28h3v1H6zM10 28h1v1H10zM13 28h2v1H13zM17 28h5v1H17zM24 28h8v1H24zM4 29h1v1H4zM6 29h3v1H6zM10 29h1v1H10zM12 29h3v1H12zM16 29h4v1H16zM22 29h1v1H22zM25 29h1v1H25zM27 29h2v1H27zM31,29 h2v1H31zM4 30h1v1H4zM6 30h3v1H6zM10 30h1v1H10zM12 30h1v1H12zM14 30h1v1H14zM21 30h1v1H21zM27 30h1v1H27zM29 30h2v1H29zM32,30 h1v1H32zM4 31h1v1H4zM10 31h1v1H10zM12 31h2v1H12zM15 31h2v1H15zM18 31h1v1H18zM20 31h1v1H20zM22 31h8v1H22zM31 31h1v1H31zM4 32h7v1H4zM12 32h1v1H12zM14 32h4v1H14zM20 32h1v1H20zM24 32h1v1H24zM27 32h1v1H27zM31 32h1v1H31z" fill="#000000" /> <image height={4.228571428571429} preserveAspectRatio="none" width={4.228571428571429} x={16.385714285714286} xlinkHref="logo_primary.png" y={16.385714285714286} /> </svg> <div className="sc-iRbamj kKGwqm notranslate" > <input readOnly={true} spellCheck="false" type="text" value="ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd" /> <span className="sc-jDwBTQ dYvcEx" > ecash: </span> <span className="sc-gPEVay lexnxF" > qzagy47m </span> vh6qxkvcn3acjnz73rkhkc6y7c <span className="sc-gPEVay lexnxF" > cxkrr6zd </span> </div> </div> </div> </div> + <div + className="sc-ksYbfQ ewTDBH" + > + <div + className="ant-alert ant-alert-info ant-alert-no-icon" + data-show={true} + role="alert" + style={Object {}} + > + <div + className="ant-alert-content" + > + <div + className="ant-alert-message" + > + Cashtab now supports receiving eTokens at your eCash address + </div> + </div> + <button + className="ant-alert-close-icon" + onClick={[Function]} + tabIndex={0} + type="button" + > + <span + aria-label="close" + className="anticon anticon-close" + role="img" + > + <svg + aria-hidden="true" + data-icon="close" + fill="currentColor" + focusable="false" + height="1em" + viewBox="64 64 896 896" + width="1em" + > + <path + d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z" + /> + </svg> + </span> + </button> + </div> + </div> </div> `; exports[`Wallet with BCH balances and tokens 1`] = ` <div className="sc-cJSrbW hAenpB" > <div className="sc-bRBYWo kVYmei" > <div className="sc-TOsTZ eYrqmp" > <h4 className="sc-kgAjT cKPgvU" > MigrationTestAlpha </h4> <a href="/configure" onClick={[Function]} > <svg className="sc-jTzLTM bTdWCF" > edit.svg </svg> </a> <div> <button aria-checked={false} className="ant-switch ant-switch-small" onClick={[Function]} onKeyDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} role="switch" type="button" > <div className="ant-switch-handle" /> <span className="ant-switch-inner" > <svg className="sc-chPdSV gzfndC" > eye-invisible.svg </svg> </span> </button> </div> </div> <div className="sc-fBuWsC hgNVpd" > You currently have 0 XEC <br /> Deposit some funds to use this feature </div> </div> <div onClick={[Function]} > <div onCopy={[Function]} style={ Object { "display": "inline-block", "position": "relative", "width": "100%", } } > <div onClick={[Function]} style={ Object { "position": "relative", } } > <div className="sc-jAaTju gtTnsd" style={ Object { "display": "none", } } > Copied <br /> <span style={ Object { "fontSize": "12px", } } > ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd </span> </div> <svg className="sc-cMljjf pSHwe" height={210} id="borderedQRCode" shapeRendering="crispEdges" viewBox="0 0 37 37" width={210} > <path d="M0,0 h37v37H0z" fill="#FFFFFF" /> <path d="M4 4h7v1H4zM12 4h1v1H12zM14 4h1v1H14zM16 4h1v1H16zM18 4h1v1H18zM21 4h4v1H21zM26,4 h7v1H26zM4 5h1v1H4zM10 5h1v1H10zM13 5h5v1H13zM20 5h1v1H20zM22 5h1v1H22zM26 5h1v1H26zM32,5 h1v1H32zM4 6h1v1H4zM6 6h3v1H6zM10 6h1v1H10zM12 6h3v1H12zM17 6h1v1H17zM19 6h2v1H19zM26 6h1v1H26zM28 6h3v1H28zM32,6 h1v1H32zM4 7h1v1H4zM6 7h3v1H6zM10 7h1v1H10zM12 7h3v1H12zM16 7h4v1H16zM21 7h2v1H21zM26 7h1v1H26zM28 7h3v1H28zM32,7 h1v1H32zM4 8h1v1H4zM6 8h3v1H6zM10 8h1v1H10zM12 8h1v1H12zM15 8h3v1H15zM19 8h5v1H19zM26 8h1v1H26zM28 8h3v1H28zM32,8 h1v1H32zM4 9h1v1H4zM10 9h1v1H10zM14 9h2v1H14zM17 9h1v1H17zM21 9h1v1H21zM23 9h1v1H23zM26 9h1v1H26zM32,9 h1v1H32zM4 10h7v1H4zM12 10h1v1H12zM14 10h1v1H14zM16 10h1v1H16zM18 10h1v1H18zM20 10h1v1H20zM22 10h1v1H22zM24 10h1v1H24zM26,10 h7v1H26zM14 11h1v1H14zM16 11h1v1H16zM19 11h1v1H19zM21 11h3v1H21zM4 12h4v1H4zM10 12h1v1H10zM12 12h1v1H12zM14 12h2v1H14zM19 12h7v1H19zM28 12h3v1H28zM32,12 h1v1H32zM5 13h1v1H5zM7 13h2v1H7zM12 13h1v1H12zM14 13h1v1H14zM16 13h1v1H16zM18 13h1v1H18zM20 13h1v1H20zM22 13h3v1H22zM26 13h1v1H26zM28 13h1v1H28zM32,13 h1v1H32zM4 14h2v1H4zM7 14h4v1H7zM12 14h4v1H12zM17 14h1v1H17zM21 14h1v1H21zM25 14h1v1H25zM27 14h1v1H27zM29 14h1v1H29zM31 14h1v1H31zM4 15h2v1H4zM8 15h2v1H8zM12 15h3v1H12zM16 15h3v1H16zM20 15h1v1H20zM22 15h1v1H22zM25 15h1v1H25zM27 15h1v1H27zM31,15 h2v1H31zM5 16h4v1H5zM10 16h2v1H10zM13 16h2v1H13zM21 16h1v1H21zM23 16h1v1H23zM27 16h1v1H27zM30 16h2v1H30zM5 17h1v1H5zM7 17h1v1H7zM9 17h1v1H9zM11 17h1v1H11zM13 17h1v1H13zM21 17h1v1H21zM23 17h1v1H23zM26 17h2v1H26zM32,17 h1v1H32zM5 18h1v1H5zM9 18h2v1H9zM12 18h1v1H12zM14 18h1v1H14zM21 18h1v1H21zM23 18h1v1H23zM25 18h1v1H25zM27 18h1v1H27zM29 18h1v1H29zM31,18 h2v1H31zM5 19h5v1H5zM12 19h1v1H12zM15 19h1v1H15zM32,19 h1v1H32zM8 20h4v1H8zM14 20h1v1H14zM22 20h2v1H22zM25 20h1v1H25zM28 20h2v1H28zM6 21h1v1H6zM12 21h1v1H12zM15 21h3v1H15zM19 21h1v1H19zM21 21h1v1H21zM24 21h2v1H24zM27 21h1v1H27zM29 21h2v1H29zM4 22h1v1H4zM7 22h1v1H7zM9 22h3v1H9zM13 22h2v1H13zM16 22h2v1H16zM19 22h1v1H19zM21 22h2v1H21zM24 22h1v1H24zM27 22h1v1H27zM30 22h1v1H30zM8 23h2v1H8zM13 23h2v1H13zM16 23h1v1H16zM19 23h1v1H19zM21 23h1v1H21zM24 23h1v1H24zM26 23h1v1H26zM29 23h3v1H29zM5 24h2v1H5zM8 24h1v1H8zM10 24h1v1H10zM16 24h1v1H16zM18 24h1v1H18zM21 24h8v1H21zM30,24 h3v1H30zM12 25h1v1H12zM15 25h4v1H15zM20 25h5v1H20zM28 25h1v1H28zM31,25 h2v1H31zM4 26h7v1H4zM13 26h1v1H13zM15 26h1v1H15zM18 26h1v1H18zM20 26h1v1H20zM22 26h3v1H22zM26 26h1v1H26zM28 26h4v1H28zM4 27h1v1H4zM10 27h1v1H10zM14 27h2v1H14zM17 27h1v1H17zM19 27h2v1H19zM24 27h1v1H24zM28 27h1v1H28zM32,27 h1v1H32zM4 28h1v1H4zM6 28h3v1H6zM10 28h1v1H10zM13 28h2v1H13zM17 28h5v1H17zM24 28h8v1H24zM4 29h1v1H4zM6 29h3v1H6zM10 29h1v1H10zM12 29h3v1H12zM16 29h4v1H16zM22 29h1v1H22zM25 29h1v1H25zM27 29h2v1H27zM31,29 h2v1H31zM4 30h1v1H4zM6 30h3v1H6zM10 30h1v1H10zM12 30h1v1H12zM14 30h1v1H14zM21 30h1v1H21zM27 30h1v1H27zM29 30h2v1H29zM32,30 h1v1H32zM4 31h1v1H4zM10 31h1v1H10zM12 31h2v1H12zM15 31h2v1H15zM18 31h1v1H18zM20 31h1v1H20zM22 31h8v1H22zM31 31h1v1H31zM4 32h7v1H4zM12 32h1v1H12zM14 32h4v1H14zM20 32h1v1H20zM24 32h1v1H24zM27 32h1v1H27zM31 32h1v1H31z" fill="#000000" /> <image height={4.228571428571429} preserveAspectRatio="none" width={4.228571428571429} x={16.385714285714286} xlinkHref="logo_primary.png" y={16.385714285714286} /> </svg> <div className="sc-iRbamj kKGwqm notranslate" > <input readOnly={true} spellCheck="false" type="text" value="ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd" /> <span className="sc-jDwBTQ dYvcEx" > ecash: </span> <span className="sc-gPEVay lexnxF" > qzagy47m </span> vh6qxkvcn3acjnz73rkhkc6y7c <span className="sc-gPEVay lexnxF" > cxkrr6zd </span> </div> </div> </div> </div> + <div + className="sc-ksYbfQ ewTDBH" + > + <div + className="ant-alert ant-alert-info ant-alert-no-icon" + data-show={true} + role="alert" + style={Object {}} + > + <div + className="ant-alert-content" + > + <div + className="ant-alert-message" + > + Cashtab now supports receiving eTokens at your eCash address + </div> + </div> + <button + className="ant-alert-close-icon" + onClick={[Function]} + tabIndex={0} + type="button" + > + <span + aria-label="close" + className="anticon anticon-close" + role="img" + > + <svg + aria-hidden="true" + data-icon="close" + fill="currentColor" + focusable="false" + height="1em" + viewBox="64 64 896 896" + width="1em" + > + <path + d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z" + /> + </svg> + </span> + </button> + </div> + </div> </div> `; exports[`Wallet with BCH balances and tokens and state field 1`] = ` <div className="sc-cJSrbW hAenpB" > <div className="sc-bRBYWo kVYmei" > <div className="sc-TOsTZ eYrqmp" > <h4 className="sc-kgAjT cKPgvU" > MigrationTestAlpha </h4> <a href="/configure" onClick={[Function]} > <svg className="sc-jTzLTM bTdWCF" > edit.svg </svg> </a> <div> <button aria-checked={false} className="ant-switch ant-switch-small" onClick={[Function]} onKeyDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} role="switch" type="button" > <div className="ant-switch-handle" /> <span className="ant-switch-inner" > <svg className="sc-chPdSV gzfndC" > eye-invisible.svg </svg> </span> </button> </div> </div> <div className="sc-jhAzac dVfipN" > <span className="sc-gisBJw plqbj" > 0.06 XEC </span> </div> </div> <div onClick={[Function]} > <div onCopy={[Function]} style={ Object { "display": "inline-block", "position": "relative", "width": "100%", } } > <div onClick={[Function]} style={ Object { "position": "relative", } } > <div className="sc-jAaTju gtTnsd" style={ Object { "display": "none", } } > Copied <br /> <span style={ Object { "fontSize": "12px", } } > ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd </span> </div> <svg className="sc-cMljjf pSHwe" height={210} id="borderedQRCode" shapeRendering="crispEdges" viewBox="0 0 37 37" width={210} > <path d="M0,0 h37v37H0z" fill="#FFFFFF" /> <path d="M4 4h7v1H4zM12 4h1v1H12zM14 4h1v1H14zM16 4h1v1H16zM18 4h1v1H18zM21 4h4v1H21zM26,4 h7v1H26zM4 5h1v1H4zM10 5h1v1H10zM13 5h5v1H13zM20 5h1v1H20zM22 5h1v1H22zM26 5h1v1H26zM32,5 h1v1H32zM4 6h1v1H4zM6 6h3v1H6zM10 6h1v1H10zM12 6h3v1H12zM17 6h1v1H17zM19 6h2v1H19zM26 6h1v1H26zM28 6h3v1H28zM32,6 h1v1H32zM4 7h1v1H4zM6 7h3v1H6zM10 7h1v1H10zM12 7h3v1H12zM16 7h4v1H16zM21 7h2v1H21zM26 7h1v1H26zM28 7h3v1H28zM32,7 h1v1H32zM4 8h1v1H4zM6 8h3v1H6zM10 8h1v1H10zM12 8h1v1H12zM15 8h3v1H15zM19 8h5v1H19zM26 8h1v1H26zM28 8h3v1H28zM32,8 h1v1H32zM4 9h1v1H4zM10 9h1v1H10zM14 9h2v1H14zM17 9h1v1H17zM21 9h1v1H21zM23 9h1v1H23zM26 9h1v1H26zM32,9 h1v1H32zM4 10h7v1H4zM12 10h1v1H12zM14 10h1v1H14zM16 10h1v1H16zM18 10h1v1H18zM20 10h1v1H20zM22 10h1v1H22zM24 10h1v1H24zM26,10 h7v1H26zM14 11h1v1H14zM16 11h1v1H16zM19 11h1v1H19zM21 11h3v1H21zM4 12h4v1H4zM10 12h1v1H10zM12 12h1v1H12zM14 12h2v1H14zM19 12h7v1H19zM28 12h3v1H28zM32,12 h1v1H32zM5 13h1v1H5zM7 13h2v1H7zM12 13h1v1H12zM14 13h1v1H14zM16 13h1v1H16zM18 13h1v1H18zM20 13h1v1H20zM22 13h3v1H22zM26 13h1v1H26zM28 13h1v1H28zM32,13 h1v1H32zM4 14h2v1H4zM7 14h4v1H7zM12 14h4v1H12zM17 14h1v1H17zM21 14h1v1H21zM25 14h1v1H25zM27 14h1v1H27zM29 14h1v1H29zM31 14h1v1H31zM4 15h2v1H4zM8 15h2v1H8zM12 15h3v1H12zM16 15h3v1H16zM20 15h1v1H20zM22 15h1v1H22zM25 15h1v1H25zM27 15h1v1H27zM31,15 h2v1H31zM5 16h4v1H5zM10 16h2v1H10zM13 16h2v1H13zM21 16h1v1H21zM23 16h1v1H23zM27 16h1v1H27zM30 16h2v1H30zM5 17h1v1H5zM7 17h1v1H7zM9 17h1v1H9zM11 17h1v1H11zM13 17h1v1H13zM21 17h1v1H21zM23 17h1v1H23zM26 17h2v1H26zM32,17 h1v1H32zM5 18h1v1H5zM9 18h2v1H9zM12 18h1v1H12zM14 18h1v1H14zM21 18h1v1H21zM23 18h1v1H23zM25 18h1v1H25zM27 18h1v1H27zM29 18h1v1H29zM31,18 h2v1H31zM5 19h5v1H5zM12 19h1v1H12zM15 19h1v1H15zM32,19 h1v1H32zM8 20h4v1H8zM14 20h1v1H14zM22 20h2v1H22zM25 20h1v1H25zM28 20h2v1H28zM6 21h1v1H6zM12 21h1v1H12zM15 21h3v1H15zM19 21h1v1H19zM21 21h1v1H21zM24 21h2v1H24zM27 21h1v1H27zM29 21h2v1H29zM4 22h1v1H4zM7 22h1v1H7zM9 22h3v1H9zM13 22h2v1H13zM16 22h2v1H16zM19 22h1v1H19zM21 22h2v1H21zM24 22h1v1H24zM27 22h1v1H27zM30 22h1v1H30zM8 23h2v1H8zM13 23h2v1H13zM16 23h1v1H16zM19 23h1v1H19zM21 23h1v1H21zM24 23h1v1H24zM26 23h1v1H26zM29 23h3v1H29zM5 24h2v1H5zM8 24h1v1H8zM10 24h1v1H10zM16 24h1v1H16zM18 24h1v1H18zM21 24h8v1H21zM30,24 h3v1H30zM12 25h1v1H12zM15 25h4v1H15zM20 25h5v1H20zM28 25h1v1H28zM31,25 h2v1H31zM4 26h7v1H4zM13 26h1v1H13zM15 26h1v1H15zM18 26h1v1H18zM20 26h1v1H20zM22 26h3v1H22zM26 26h1v1H26zM28 26h4v1H28zM4 27h1v1H4zM10 27h1v1H10zM14 27h2v1H14zM17 27h1v1H17zM19 27h2v1H19zM24 27h1v1H24zM28 27h1v1H28zM32,27 h1v1H32zM4 28h1v1H4zM6 28h3v1H6zM10 28h1v1H10zM13 28h2v1H13zM17 28h5v1H17zM24 28h8v1H24zM4 29h1v1H4zM6 29h3v1H6zM10 29h1v1H10zM12 29h3v1H12zM16 29h4v1H16zM22 29h1v1H22zM25 29h1v1H25zM27 29h2v1H27zM31,29 h2v1H31zM4 30h1v1H4zM6 30h3v1H6zM10 30h1v1H10zM12 30h1v1H12zM14 30h1v1H14zM21 30h1v1H21zM27 30h1v1H27zM29 30h2v1H29zM32,30 h1v1H32zM4 31h1v1H4zM10 31h1v1H10zM12 31h2v1H12zM15 31h2v1H15zM18 31h1v1H18zM20 31h1v1H20zM22 31h8v1H22zM31 31h1v1H31zM4 32h7v1H4zM12 32h1v1H12zM14 32h4v1H14zM20 32h1v1H20zM24 32h1v1H24zM27 32h1v1H27zM31 32h1v1H31z" fill="#000000" /> <image height={4.228571428571429} preserveAspectRatio="none" width={4.228571428571429} x={16.385714285714286} xlinkHref="logo_primary.png" y={16.385714285714286} /> </svg> <div className="sc-iRbamj kKGwqm notranslate" > <input readOnly={true} spellCheck="false" type="text" value="ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd" /> <span className="sc-jDwBTQ dYvcEx" > ecash: </span> <span className="sc-gPEVay lexnxF" > qzagy47m </span> vh6qxkvcn3acjnz73rkhkc6y7c <span className="sc-gPEVay lexnxF" > cxkrr6zd </span> </div> </div> </div> </div> + <div + className="sc-ksYbfQ ewTDBH" + > + <div + className="ant-alert ant-alert-info ant-alert-no-icon" + data-show={true} + role="alert" + style={Object {}} + > + <div + className="ant-alert-content" + > + <div + className="ant-alert-message" + > + Cashtab now supports receiving eTokens at your eCash address + </div> + </div> + <button + className="ant-alert-close-icon" + onClick={[Function]} + tabIndex={0} + type="button" + > + <span + aria-label="close" + className="anticon anticon-close" + role="img" + > + <svg + aria-hidden="true" + data-icon="close" + fill="currentColor" + focusable="false" + height="1em" + viewBox="64 64 896 896" + width="1em" + > + <path + d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z" + /> + </svg> + </span> + </button> + </div> + </div> </div> `; exports[`Wallet without BCH balance 1`] = ` <div className="sc-cJSrbW hAenpB" > <div className="sc-bRBYWo kVYmei" > <div className="sc-TOsTZ eYrqmp" > <h4 className="sc-kgAjT cKPgvU" > MigrationTestAlpha </h4> <a href="/configure" onClick={[Function]} > <svg className="sc-jTzLTM bTdWCF" > edit.svg </svg> </a> <div> <button aria-checked={false} className="ant-switch ant-switch-small" onClick={[Function]} onKeyDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} role="switch" type="button" > <div className="ant-switch-handle" /> <span className="ant-switch-inner" > <svg className="sc-chPdSV gzfndC" > eye-invisible.svg </svg> </span> </button> </div> </div> <div className="sc-fBuWsC hgNVpd" > You currently have 0 XEC <br /> Deposit some funds to use this feature </div> </div> <div onClick={[Function]} > <div onCopy={[Function]} style={ Object { "display": "inline-block", "position": "relative", "width": "100%", } } > <div onClick={[Function]} style={ Object { "position": "relative", } } > <div className="sc-jAaTju gtTnsd" style={ Object { "display": "none", } } > Copied <br /> <span style={ Object { "fontSize": "12px", } } > ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd </span> </div> <svg className="sc-cMljjf pSHwe" height={210} id="borderedQRCode" shapeRendering="crispEdges" viewBox="0 0 37 37" width={210} > <path d="M0,0 h37v37H0z" fill="#FFFFFF" /> <path d="M4 4h7v1H4zM12 4h1v1H12zM14 4h1v1H14zM16 4h1v1H16zM18 4h1v1H18zM21 4h4v1H21zM26,4 h7v1H26zM4 5h1v1H4zM10 5h1v1H10zM13 5h5v1H13zM20 5h1v1H20zM22 5h1v1H22zM26 5h1v1H26zM32,5 h1v1H32zM4 6h1v1H4zM6 6h3v1H6zM10 6h1v1H10zM12 6h3v1H12zM17 6h1v1H17zM19 6h2v1H19zM26 6h1v1H26zM28 6h3v1H28zM32,6 h1v1H32zM4 7h1v1H4zM6 7h3v1H6zM10 7h1v1H10zM12 7h3v1H12zM16 7h4v1H16zM21 7h2v1H21zM26 7h1v1H26zM28 7h3v1H28zM32,7 h1v1H32zM4 8h1v1H4zM6 8h3v1H6zM10 8h1v1H10zM12 8h1v1H12zM15 8h3v1H15zM19 8h5v1H19zM26 8h1v1H26zM28 8h3v1H28zM32,8 h1v1H32zM4 9h1v1H4zM10 9h1v1H10zM14 9h2v1H14zM17 9h1v1H17zM21 9h1v1H21zM23 9h1v1H23zM26 9h1v1H26zM32,9 h1v1H32zM4 10h7v1H4zM12 10h1v1H12zM14 10h1v1H14zM16 10h1v1H16zM18 10h1v1H18zM20 10h1v1H20zM22 10h1v1H22zM24 10h1v1H24zM26,10 h7v1H26zM14 11h1v1H14zM16 11h1v1H16zM19 11h1v1H19zM21 11h3v1H21zM4 12h4v1H4zM10 12h1v1H10zM12 12h1v1H12zM14 12h2v1H14zM19 12h7v1H19zM28 12h3v1H28zM32,12 h1v1H32zM5 13h1v1H5zM7 13h2v1H7zM12 13h1v1H12zM14 13h1v1H14zM16 13h1v1H16zM18 13h1v1H18zM20 13h1v1H20zM22 13h3v1H22zM26 13h1v1H26zM28 13h1v1H28zM32,13 h1v1H32zM4 14h2v1H4zM7 14h4v1H7zM12 14h4v1H12zM17 14h1v1H17zM21 14h1v1H21zM25 14h1v1H25zM27 14h1v1H27zM29 14h1v1H29zM31 14h1v1H31zM4 15h2v1H4zM8 15h2v1H8zM12 15h3v1H12zM16 15h3v1H16zM20 15h1v1H20zM22 15h1v1H22zM25 15h1v1H25zM27 15h1v1H27zM31,15 h2v1H31zM5 16h4v1H5zM10 16h2v1H10zM13 16h2v1H13zM21 16h1v1H21zM23 16h1v1H23zM27 16h1v1H27zM30 16h2v1H30zM5 17h1v1H5zM7 17h1v1H7zM9 17h1v1H9zM11 17h1v1H11zM13 17h1v1H13zM21 17h1v1H21zM23 17h1v1H23zM26 17h2v1H26zM32,17 h1v1H32zM5 18h1v1H5zM9 18h2v1H9zM12 18h1v1H12zM14 18h1v1H14zM21 18h1v1H21zM23 18h1v1H23zM25 18h1v1H25zM27 18h1v1H27zM29 18h1v1H29zM31,18 h2v1H31zM5 19h5v1H5zM12 19h1v1H12zM15 19h1v1H15zM32,19 h1v1H32zM8 20h4v1H8zM14 20h1v1H14zM22 20h2v1H22zM25 20h1v1H25zM28 20h2v1H28zM6 21h1v1H6zM12 21h1v1H12zM15 21h3v1H15zM19 21h1v1H19zM21 21h1v1H21zM24 21h2v1H24zM27 21h1v1H27zM29 21h2v1H29zM4 22h1v1H4zM7 22h1v1H7zM9 22h3v1H9zM13 22h2v1H13zM16 22h2v1H16zM19 22h1v1H19zM21 22h2v1H21zM24 22h1v1H24zM27 22h1v1H27zM30 22h1v1H30zM8 23h2v1H8zM13 23h2v1H13zM16 23h1v1H16zM19 23h1v1H19zM21 23h1v1H21zM24 23h1v1H24zM26 23h1v1H26zM29 23h3v1H29zM5 24h2v1H5zM8 24h1v1H8zM10 24h1v1H10zM16 24h1v1H16zM18 24h1v1H18zM21 24h8v1H21zM30,24 h3v1H30zM12 25h1v1H12zM15 25h4v1H15zM20 25h5v1H20zM28 25h1v1H28zM31,25 h2v1H31zM4 26h7v1H4zM13 26h1v1H13zM15 26h1v1H15zM18 26h1v1H18zM20 26h1v1H20zM22 26h3v1H22zM26 26h1v1H26zM28 26h4v1H28zM4 27h1v1H4zM10 27h1v1H10zM14 27h2v1H14zM17 27h1v1H17zM19 27h2v1H19zM24 27h1v1H24zM28 27h1v1H28zM32,27 h1v1H32zM4 28h1v1H4zM6 28h3v1H6zM10 28h1v1H10zM13 28h2v1H13zM17 28h5v1H17zM24 28h8v1H24zM4 29h1v1H4zM6 29h3v1H6zM10 29h1v1H10zM12 29h3v1H12zM16 29h4v1H16zM22 29h1v1H22zM25 29h1v1H25zM27 29h2v1H27zM31,29 h2v1H31zM4 30h1v1H4zM6 30h3v1H6zM10 30h1v1H10zM12 30h1v1H12zM14 30h1v1H14zM21 30h1v1H21zM27 30h1v1H27zM29 30h2v1H29zM32,30 h1v1H32zM4 31h1v1H4zM10 31h1v1H10zM12 31h2v1H12zM15 31h2v1H15zM18 31h1v1H18zM20 31h1v1H20zM22 31h8v1H22zM31 31h1v1H31zM4 32h7v1H4zM12 32h1v1H12zM14 32h4v1H14zM20 32h1v1H20zM24 32h1v1H24zM27 32h1v1H27zM31 32h1v1H31z" fill="#000000" /> <image height={4.228571428571429} preserveAspectRatio="none" width={4.228571428571429} x={16.385714285714286} xlinkHref="logo_primary.png" y={16.385714285714286} /> </svg> <div className="sc-iRbamj kKGwqm notranslate" > <input readOnly={true} spellCheck="false" type="text" value="ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd" /> <span className="sc-jDwBTQ dYvcEx" > ecash: </span> <span className="sc-gPEVay lexnxF" > qzagy47m </span> vh6qxkvcn3acjnz73rkhkc6y7c <span className="sc-gPEVay lexnxF" > cxkrr6zd </span> </div> </div> </div> </div> + <div + className="sc-ksYbfQ ewTDBH" + > + <div + className="ant-alert ant-alert-info ant-alert-no-icon" + data-show={true} + role="alert" + style={Object {}} + > + <div + className="ant-alert-content" + > + <div + className="ant-alert-message" + > + Cashtab now supports receiving eTokens at your eCash address + </div> + </div> + <button + className="ant-alert-close-icon" + onClick={[Function]} + tabIndex={0} + type="button" + > + <span + aria-label="close" + className="anticon anticon-close" + role="img" + > + <svg + aria-hidden="true" + data-icon="close" + fill="currentColor" + focusable="false" + height="1em" + viewBox="64 64 896 896" + width="1em" + > + <path + d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z" + /> + </svg> + </span> + </button> + </div> + </div> </div> `; exports[`Without wallet defined 1`] = ` <div className="sc-cvbbAY iRzyBn" > <h2> Welcome to Cashtab! </h2> <p className="sc-jWBwVP cwtNsa" > Cashtab is an <a className="sc-brqgnP iIywyg" href="https://github.com/bitcoin-abc/bitcoin-abc" rel="noreferrer" target="_blank" > open source, </a> non-custodial web wallet for eCash . <br /> <br /> Want to learn more? <a className="sc-brqgnP iIywyg" href="https://docs.cashtab.com/docs/" rel="noreferrer" target="_blank" > Check out the Cashtab documentation. </a> </p> <button className="sc-kkGfuU ORPKP" onClick={[Function]} > <span aria-label="plus-square" className="anticon anticon-plus-square" role="img" > <svg aria-hidden="true" data-icon="plus-square" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z" /> <path d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z" /> </svg> </span> New Wallet </button> <button className="sc-iAyFgw jNlDQp" onClick={[Function]} > <span aria-label="import" className="anticon anticon-import" role="img" > <svg aria-hidden="true" data-icon="import" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M888.3 757.4h-53.8c-4.2 0-7.7 3.5-7.7 7.7v61.8H197.1V197.1h629.8v61.8c0 4.2 3.5 7.7 7.7 7.7h53.8c4.2 0 7.7-3.4 7.7-7.7V158.7c0-17-13.7-30.7-30.7-30.7H158.7c-17 0-30.7 13.7-30.7 30.7v706.6c0 17 13.7 30.7 30.7 30.7h706.6c17 0 30.7-13.7 30.7-30.7V765.1c0-4.3-3.5-7.7-7.7-7.7zM902 476H588v-76c0-6.7-7.8-10.5-13-6.3l-141.9 112a8 8 0 000 12.6l141.9 112c5.3 4.2 13 .4 13-6.3v-76h314c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8z" /> </svg> </span> Import Wallet </button> </div> `;