mirror of
https://github.com/Permissionless-Software-Foundation/bch-dex-taker-v2.git
synced 2026-09-21 16:52:01 -07:00
feat(update): Added update button
This commit is contained in:
@@ -301,8 +301,34 @@ function NftsForSale (props) {
|
||||
return url
|
||||
}
|
||||
|
||||
const updateOffer = useCallback(async (offer) => {
|
||||
try {
|
||||
if (!offer) return
|
||||
setOffersAreLoaded(false)
|
||||
const processedOffer = await processTokenData(offer)
|
||||
const processedOfferMetadata = await processOfferMetadata(processedOffer)
|
||||
|
||||
setOffers(offers => {
|
||||
// find offer
|
||||
const index = offers.findIndex((val) => { return val.tokenId === offer.tokenId })
|
||||
// Save existing token data
|
||||
processedOfferMetadata.tokenData = offers[index].tokenData
|
||||
// replace with the new data
|
||||
offers[index] = processedOfferMetadata
|
||||
return offers
|
||||
})
|
||||
|
||||
// Re-render tokens cards , to load the new data.
|
||||
setTimeout(() => {
|
||||
setOffersAreLoaded(true)
|
||||
}, 500)
|
||||
} catch (error) {
|
||||
console.warn(error)
|
||||
}
|
||||
}, [processOfferMetadata, processTokenData])
|
||||
|
||||
// This function generates a Token Card for each token in the wallet.
|
||||
function generateCards (offers) {
|
||||
const generateCards = useCallback(() => {
|
||||
console.log('generateCards() offerData: ', offers)
|
||||
|
||||
const tokens = offers
|
||||
@@ -318,13 +344,14 @@ function NftsForSale (props) {
|
||||
token={thisToken}
|
||||
handleRefresh={handleRefresh}
|
||||
key={`${thisToken.tokenId + i}`}
|
||||
updateOffer={updateOffer}
|
||||
/>
|
||||
)
|
||||
tokenCards.push(thisTokenCard)
|
||||
}
|
||||
|
||||
return tokenCards
|
||||
}
|
||||
}, [offers, appData, handleRefresh, updateOffer])
|
||||
|
||||
return (
|
||||
<Container>
|
||||
|
||||
@@ -7,11 +7,18 @@
|
||||
|
||||
// Global npm libraries
|
||||
import React, { useEffect, useState } from 'react'
|
||||
import { Button, Modal, Container, Row, Col } from 'react-bootstrap'
|
||||
import { Button, Modal, Container, Row, Col, Spinner } from 'react-bootstrap'
|
||||
import axios from 'axios'
|
||||
|
||||
// Local libraries
|
||||
import config from '../../../config'
|
||||
// Global variables and constants
|
||||
const SERVER = config.dexServer
|
||||
|
||||
function InfoButton (props) {
|
||||
const [show, setShow] = useState(false)
|
||||
const [mutableDataCid, setMutableDataCid] = useState(null)
|
||||
const [loading, setLoading] = useState(false)
|
||||
|
||||
const handleClose = () => {
|
||||
console.log('handleClose()')
|
||||
@@ -50,6 +57,22 @@ function InfoButton (props) {
|
||||
}
|
||||
}, [props.token, show])
|
||||
|
||||
// Update offer data
|
||||
const updateOffer = async () => {
|
||||
try {
|
||||
setLoading(true)
|
||||
const inputObj = { tokenId: props.token.tokenId }
|
||||
const result = await axios.post(`${SERVER}/offer/mutable/sync/`, inputObj)
|
||||
const offerData = result.data
|
||||
console.log('offerData: ', offerData)
|
||||
|
||||
if (props.updateOffer) await props.updateOffer(offerData)
|
||||
setLoading(false)
|
||||
} catch (error) {
|
||||
setLoading(false)
|
||||
}
|
||||
}
|
||||
|
||||
// Replace with dummy button until token data is loaded.
|
||||
if (!props.token.tokenData) {
|
||||
return (
|
||||
@@ -105,6 +128,7 @@ function InfoButton (props) {
|
||||
href={`/user-data/${props.token.tokenId}#single-view`}
|
||||
target='_blank'
|
||||
rel='noopener noreferrer'
|
||||
variant='success'
|
||||
>
|
||||
View User Data
|
||||
</Button>
|
||||
@@ -114,7 +138,10 @@ function InfoButton (props) {
|
||||
|
||||
</Container>
|
||||
</Modal.Body>
|
||||
<Modal.Footer />
|
||||
<Modal.Footer style={{ justifyContent: 'center'}}>
|
||||
{!loading && <Button style={{ width: '135px' }} onClick={updateOffer}>Update</Button>}
|
||||
{loading && <Spinner />}
|
||||
</Modal.Footer>
|
||||
</Modal>
|
||||
</>
|
||||
)
|
||||
|
||||
@@ -20,6 +20,7 @@ function TokenCard (props) {
|
||||
|
||||
// Update icon state every token.icon and token.tokenData changes
|
||||
useEffect(() => {
|
||||
console.log('setting icon')
|
||||
setIcon(token.icon)
|
||||
setTokenData(token.tokenData)
|
||||
}, [token.icon, token.tokenData])
|
||||
@@ -66,7 +67,7 @@ function TokenCard (props) {
|
||||
|
||||
<Row className='text-center'>
|
||||
<Col>
|
||||
<InfoButton token={token} disabled={!token.tokenData} />
|
||||
<InfoButton token={token} disabled={!token.tokenData} {...props} />
|
||||
</Col>
|
||||
|
||||
{!hideBuyBtn && (
|
||||
|
||||
Reference in New Issue
Block a user