diff --git a/app/soapbox/features/crypto_donate/components/crypto_address.js b/app/soapbox/features/crypto_donate/components/crypto_address.js deleted file mode 100644 index d3115853e..000000000 --- a/app/soapbox/features/crypto_donate/components/crypto_address.js +++ /dev/null @@ -1,60 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import ImmutablePureComponent from 'react-immutable-pure-component'; -import { connect } from 'react-redux'; - -import { openModal } from 'soapbox/actions/modals'; -import Icon from 'soapbox/components/icon'; -import { CopyableInput } from 'soapbox/features/forms'; - -import { getExplorerUrl } from '../utils/block_explorer'; -import CoinDB from '../utils/coin_db'; - -import CryptoIcon from './crypto_icon'; - -export default @connect() -class CryptoAddress extends ImmutablePureComponent { - - static propTypes = { - address: PropTypes.string.isRequired, - ticker: PropTypes.string.isRequired, - note: PropTypes.string, - } - - handleModalClick = e => { - this.props.dispatch(openModal('CRYPTO_DONATE', this.props)); - e.preventDefault(); - } - - render() { - const { address, ticker, note } = this.props; - const title = CoinDB.getIn([ticker, 'name']); - const explorerUrl = getExplorerUrl(ticker, address); - - return ( -
-
- -
{title || ticker.toUpperCase()}
-
- - - - {explorerUrl && - - } -
-
- {note &&
{note}
} -
- -
-
- ); - } - -} diff --git a/app/soapbox/features/crypto_donate/components/crypto_address.tsx b/app/soapbox/features/crypto_donate/components/crypto_address.tsx new file mode 100644 index 000000000..d84962206 --- /dev/null +++ b/app/soapbox/features/crypto_donate/components/crypto_address.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { useDispatch } from 'react-redux'; + +import { openModal } from 'soapbox/actions/modals'; +import Icon from 'soapbox/components/icon'; +import { CopyableInput } from 'soapbox/features/forms'; + +import { getExplorerUrl } from '../utils/block_explorer'; +import { getTitle } from '../utils/coin_db'; + +import CryptoIcon from './crypto_icon'; + +interface ICryptoAddress { + address: string, + ticker: string, + note?: string, +} + +const CryptoAddress: React.FC = (props): JSX.Element => { + const { address, ticker, note } = props; + + const dispatch = useDispatch(); + + const handleModalClick = (e: React.MouseEvent): void => { + dispatch(openModal('CRYPTO_DONATE', props)); + e.preventDefault(); + }; + + const title = getTitle(ticker); + const explorerUrl = getExplorerUrl(ticker, address); + + return ( +
+
+ +
{title || ticker.toUpperCase()}
+
+ + + + {explorerUrl && + + } +
+
+ {note &&
{note}
} +
+ +
+
+ ); +}; + +export default CryptoAddress; diff --git a/app/soapbox/features/crypto_donate/components/detailed_crypto_address.tsx b/app/soapbox/features/crypto_donate/components/detailed_crypto_address.tsx index 7d58d4e33..053ea16c7 100644 --- a/app/soapbox/features/crypto_donate/components/detailed_crypto_address.tsx +++ b/app/soapbox/features/crypto_donate/components/detailed_crypto_address.tsx @@ -5,7 +5,7 @@ import Icon from 'soapbox/components/icon'; import { CopyableInput } from 'soapbox/features/forms'; import { getExplorerUrl } from '../utils/block_explorer'; -import CoinDB from '../utils/coin_db'; +import { getTitle } from '../utils/coin_db'; import CryptoIcon from './crypto_icon'; @@ -15,11 +15,6 @@ interface IDetailedCryptoAddress { note?: string, } -const getTitle = (ticker: string): string => { - const title = CoinDB.getIn([ticker, 'name']); - return typeof title === 'string' ? title : ''; -}; - const DetailedCryptoAddress: React.FC = ({ address, ticker, note }): JSX.Element => { const title = getTitle(ticker); const explorerUrl = getExplorerUrl(ticker, address); diff --git a/app/soapbox/features/crypto_donate/components/site_wallet.tsx b/app/soapbox/features/crypto_donate/components/site_wallet.tsx index 062f9f78d..4814d8342 100644 --- a/app/soapbox/features/crypto_donate/components/site_wallet.tsx +++ b/app/soapbox/features/crypto_donate/components/site_wallet.tsx @@ -32,7 +32,9 @@ const SiteWallet: React.FC = ({ limit }): JSX.Element => { {coinList.map(coin => ( ))} diff --git a/app/soapbox/features/crypto_donate/utils/coin_db.ts b/app/soapbox/features/crypto_donate/utils/coin_db.ts index 3ca2d3a18..582ace540 100644 --- a/app/soapbox/features/crypto_donate/utils/coin_db.ts +++ b/app/soapbox/features/crypto_donate/utils/coin_db.ts @@ -5,3 +5,9 @@ import manifestMap from './manifest_map'; // All this does is converts the result from manifest_map.js into an ImmutableMap const coinDB = fromJS(manifestMap); export default coinDB; + +/** Get title from CoinDB based on ticker symbol */ +export const getTitle = (ticker: string): string => { + const title = coinDB.getIn([ticker, 'name']); + return typeof title === 'string' ? title : ''; +};