@@ -2,7 +2,8 @@ import styles from './Donations.module.scss'
22import { useEffect , useRef , useState } from 'react'
33import cn from 'classnames'
44import { Scrollable } from '../Scrollable'
5- import { ListHeader } from '../ListHeader/ListHeader'
5+ import { Button } from '../../common/Button/Button'
6+ import { Fieldset } from '../Fieldset'
67
78const get_href_from_url_like_string = ( text : string ) : string | null => {
89 if ( / \s / . test ( text ) ) {
@@ -62,7 +63,6 @@ const parse_support_message = (
6263 return { username, href, after_text }
6364 }
6465
65- // Fallback for when no tags are found
6666 const username = message . trim ( )
6767 const href = get_href_from_url_like_string ( username )
6868 return { username : href ? username : message , href, after_text : '' }
@@ -79,12 +79,12 @@ export type DonationsProps = {
7979 is_revalidating ?: boolean
8080 on_fetch_next_page : ( ) => void
8181 has_more ?: boolean
82+ on_show_qr_code : ( wallet : { name : string ; address : string } ) => void
8283}
8384
8485export const Donations : React . FC < DonationsProps > = ( props ) => {
8586 const observer_target = useRef < HTMLDivElement > ( null )
86- const [ is_wallets_collapsed , set_is_wallets_collapsed ] = useState ( true )
87- const [ is_donations_collapsed , set_is_donations_collapsed ] = useState ( false )
87+ const [ is_wallets_collapsed , set_wallets_collapsed ] = useState ( true )
8888
8989 useEffect ( ( ) => {
9090 if ( ! observer_target . current ) return
@@ -104,38 +104,53 @@ export const Donations: React.FC<DonationsProps> = (props) => {
104104 return ( ) => observer . unobserve ( target )
105105 } , [ props . on_fetch_next_page ] )
106106
107+ const wallets = [
108+ {
109+ name : 'Bitcoin' ,
110+ address : 'bc1qfzajl0fc4347knr6n5hhuk52ufr4sau04su5te'
111+ } ,
112+ {
113+ name : 'Ethereum' ,
114+ address : '0x532eA8CA70aBfbA6bfE35e6B3b7b301b175Cf86D'
115+ } ,
116+ {
117+ name : 'Monero' ,
118+ address :
119+ '84whVjApZJtSeRb2eEbZ1pJ7yuBoGoWHGA4JuiFvdXVBXnaRYyQ3S4kTEuzgKjpxyr3nxn1XHt9yWTRqZ3XGfY35L4yDm6R'
120+ }
121+ ]
122+
107123 return (
108- < Scrollable >
109- < div className = { styles . container } >
110- < ListHeader
111- title = "Crypto wallets"
112- is_collapsed = { is_wallets_collapsed }
113- on_toggle_collapsed = { ( ) => set_is_wallets_collapsed ( ( v ) => ! v ) }
114- />
115- { ! is_wallets_collapsed && (
124+ < >
125+ < Scrollable >
126+ < div className = { styles . container } >
116127 < div className = { styles . wallets } >
117- < div className = { styles . wallets__wallet } >
118- < strong > Bitcoin</ strong >
119- < span > bc1qfzajl0fc4347knr6n5hhuk52ufr4sau04su5te</ span >
120- </ div >
121- < div className = { styles . wallets__wallet } >
122- < strong > Ethereum</ strong >
123- < span > 0x532eA8CA70aBfbA6bfE35e6B3b7b301b175Cf86D</ span >
124- </ div >
125- < div className = { styles . wallets__wallet } >
126- < strong > Monero</ strong >
127- < span >
128- 84whVjApZJtSeRb2eEbZ1pJ7yuBoGoWHGA4JuiFvdXVBXnaRYyQ3S4kTEuzgKjpxyr3nxn1XHt9yWTRqZ3XGfY35L4yDm6R
129- </ span >
130- </ div >
128+ < Fieldset
129+ is_collapsed = { is_wallets_collapsed }
130+ label = "Crypto wallets"
131+ on_toggle_collapsed = { ( ) =>
132+ set_wallets_collapsed ( ! is_wallets_collapsed )
133+ }
134+ >
135+ { wallets . map ( ( wallet ) => (
136+ < div className = { styles . wallets__wallet } key = { wallet . name } >
137+ < strong > { wallet . name } </ strong >
138+ < div className = { styles . wallets__wallet__right } >
139+ < span className = { styles . wallets__wallet__hash } >
140+ { wallet . address }
141+ </ span >
142+ < Button
143+ is_small
144+ on_click = { ( ) => props . on_show_qr_code ( wallet ) }
145+ >
146+ Show QR
147+ </ Button >
148+ </ div >
149+ </ div >
150+ ) ) }
151+ </ Fieldset >
131152 </ div >
132- ) }
133- < ListHeader
134- title = "Recent coffees"
135- is_collapsed = { is_donations_collapsed }
136- on_toggle_collapsed = { ( ) => set_is_donations_collapsed ( ( v ) => ! v ) }
137- />
138- { ! is_donations_collapsed && (
153+
139154 < div className = { styles . donations } >
140155 { props . is_fetching ? (
141156 < >
@@ -202,7 +217,14 @@ export const Donations: React.FC<DonationsProps> = (props) => {
202217 < div
203218 className = { styles . donations__inner__donation__note }
204219 >
205- { donation . support_note }
220+ { donation . support_note
221+ . split ( / < b r \s * \/ ? > / i)
222+ . map ( ( line , i , arr ) => (
223+ < span key = { i } >
224+ { line }
225+ { i < arr . length - 1 && < br /> }
226+ </ span >
227+ ) ) }
206228 </ div >
207229 ) }
208230 </ div >
@@ -212,8 +234,8 @@ export const Donations: React.FC<DonationsProps> = (props) => {
212234 </ >
213235 ) }
214236 </ div >
215- ) }
216- </ div >
217- </ Scrollable >
237+ </ div >
238+ </ Scrollable >
239+ </ >
218240 )
219241}
0 commit comments