From edff6dca05f77e7a3058dfdf059fadd6b5d85dc3 Mon Sep 17 00:00:00 2001 From: pandablue0809 Date: Mon, 8 Sep 2025 23:18:27 +0900 Subject: [PATCH 1/5] update balance change history --- pages/admin/pro/history.js | 601 ++++++++++++++++++------------------- 1 file changed, 298 insertions(+), 303 deletions(-) diff --git a/pages/admin/pro/history.js b/pages/admin/pro/history.js index 51833ab7..e7177eaf 100644 --- a/pages/admin/pro/history.js +++ b/pages/admin/pro/history.js @@ -195,6 +195,15 @@ const platformList = [ { value: 'CryptoTax', label: 'CryptoTax' } ] +const defaultWalletList = [ + 'rhWTXC2m2gGGA9WozUaoMm6kLAVPb1tcS3', + 'rDLNm4ehD7XQCtYKWuMjEKY7TCfmf3CwzH', + 'r3sQYvXxc82iSNs5DnUUvXtcQQQqigCdW', + 'raWYT6DD2XFAvjCqRPsCCzr1CMBzJydf9E', + 'rakZprdzwsUJ1rD2ouhYYAVP7tPbhrCbtz', + 'r3LAichpcBeZWk7LLSZcfSQcqYsvQ6beBc' +] + export default function History({ queryAddress, selectedCurrency, @@ -544,58 +553,69 @@ export default function History({ const getVerifiedAddresses = async () => { setLoadingVerifiedAddresses(true) - const response = await axiosAdmin.get('user/addresses').catch((error) => { + if(!sessionToken) { + // Create hardcoded wallet data for non-authenticated users + const walletDatas = defaultWalletList.map((address, index) => ({ + address: address, + name: `Test Wallet ${index + 1}`, + crawler: { status: "synced" } + })) + setVerifiedAddresses(walletDatas) setLoadingVerifiedAddresses(false) - if (error.response?.data?.error === 'errors.token.required') { - router.push('/admin') - return - } - if (error && error.message !== 'canceled') { - setErrorMessage(t(error.response?.data?.error || 'error.' + error.message)) + // Set first hardcoded wallet as default selection + if (addressesToCheck?.length === 0 && walletDatas[0]?.address) { + setAddressesToCheck([walletDatas[0].address]) } - }) - setLoadingVerifiedAddresses(false) - const data = response?.data - /* - { - "total": 1, - "count": 1, - "addresses": [ - { - "id": 28, - "createdAt": 1721741550, - "address": "raN6cSu", - "name": "vasia", - "crawler": { - "status": "queued", - "createdAt": 1728212999, - "updatedAt": 1728212999, - "lastCrawledAt": null, - "firstLedgerIndex": null, - "currentLedgerIndex": null, - "lastLedgerIndex": null + } else { + const response = await axiosAdmin.get('user/addresses').catch((error) => { + setLoadingVerifiedAddresses(false) + if (error.response?.data?.error === 'errors.token.required') { + router.push('/admin') + return + } + if (error && error.message !== 'canceled') { + setErrorMessage(t(error.response?.data?.error || 'error.' + error.message)) + } + }) + const data = response?.data + /* + { + "total": 1, + "count": 1, + "addresses": [ + { + "id": 28, + "createdAt": 1721741550, + "address": "raN6cSu", + "name": "vasia", + "crawler": { + "status": "queued", + "createdAt": 1728212999, + "updatedAt": 1728212999, + "lastCrawledAt": null, + "firstLedgerIndex": null, + "currentLedgerIndex": null, + "lastLedgerIndex": null + } } - } - ] + ] + } + */ + setVerifiedAddresses(data?.addresses) + setLoadingVerifiedAddresses(false) + if (addressesToCheck?.length === 0 && data?.addresses?.[0]?.address) { + setAddressesToCheck([data.addresses[0].address]) } - */ - setVerifiedAddresses(data?.addresses) - if (addressesToCheck?.length === 0 && data?.addresses?.[0]?.address) { - setAddressesToCheck([data.addresses[0].address]) } } useEffect(() => { - if (sessionToken) { - getVerifiedAddresses() - } + getVerifiedAddresses() // eslint-disable-next-line react-hooks/exhaustive-deps }, [sessionToken]) useEffect(() => { - if (sessionToken) { - getProAddressHistory() - } + getProAddressHistory() // eslint-disable-next-line react-hooks/exhaustive-deps }, [addressesToCheck, selectedCurrency, period, order, sessionToken]) @@ -630,285 +650,260 @@ export default function History({ - {sessionToken ? ( + <> - + {verifiedAddresses?.length > 0 && data && activities && data.total > activities.length && ( +
+ +
+
+
+ )} +
Addresses
+ {verifiedAddresses?.length > 0 ? ( <> - {verifiedAddresses?.length > 0 && data && activities && data.total > activities.length && ( -
- -
-
+ + + + + + + +
+ avatar + + {address.name} -{' '} + {crawlerStatus(address.crawler, { inline: true })} +
+ {addressLink(address.address, { short: 10 })} +
+
- )} -
Addresses
- {verifiedAddresses?.length > 0 ? ( - <> - {verifiedAddresses.map((address, i) => ( -
- { - setAddressesToCheck( - addressesToCheck.includes(address.address) - ? addressesToCheck.filter((a) => a !== address.address) - : [...addressesToCheck, address.address] - ) - }} - outline - checkmarkStyle={{ top: '10px' }} - > - - - - - - - -
- avatar - - {address.name} -{' '} - {crawlerStatus(address.crawler, { inline: true })} -
- {addressLink(address.address, { short: 10 })} -
-
-
- ))} - + ))} + + ) : ( + <> + {loadingVerifiedAddresses ? ( + 'Loading data...' ) : ( - <> - {loadingVerifiedAddresses ? ( - 'Loading data...' - ) : ( -
-
- - Add - -
- )} - +
+
+ + Add + +
)} -
- Period - -
-
- - Remove dust transactions - -
-
- Tax Export Platform - - {rendered && ( - header.platform.toLowerCase() === platformCSVExport.toLowerCase() - )?.headers || [] - } - filename={'export ' + platformCSVExport + ' ' + new Date().toISOString() + '.csv'} - className={'button-action' + (!(activities?.length > 0) ? ' disabled' : '')} - uFEFF={platformCSVExport === 'BlockPit' ? false : undefined} - > - CSV for {platformCSVExport} - - )} - {platformCSVExport === 'Koinly' && ( - <> -
-
- Let us know if we miss koinlyIDs for your tokens. We will add them to the system. - - )} -
+ )} +
+ Period + +
+
+ + Remove dust transactions + +
+
+ Tax Export Platform + + {rendered && ( + header.platform.toLowerCase() === platformCSVExport.toLowerCase() + )?.headers || [] + } + filename={'export ' + platformCSVExport + ' ' + new Date().toISOString() + '.csv'} + className={'button-action' + (!(activities?.length > 0) ? ' disabled' : '')} + uFEFF={platformCSVExport === 'BlockPit' ? false : undefined} + > + CSV for {platformCSVExport} + + )} + {platformCSVExport === 'Koinly' && ( + <> +
+
+ Let us know if we miss koinlyIDs for your tokens. We will add them to the system. + + )} +
+ + <> + {addressesToCheck.length > 0 && ( <> - {addressesToCheck.length > 0 && ( - <> - {!width || width > 800 ? ( - 800 ? { width: 780 } : {}}> - - - - - {addressesToCheck.length > 1 && } - - - - - - - - - {currentList?.length > 0 ? ( - <> - {currentList.map((a, i) => ( - - - - {addressesToCheck.length > 1 && } - - - - - - - ))} - - ) : ( - - + + + )} + +
#TimestampAddressTxMemoTransfer FeeTx FeeBalance change
{a.index}{fullDateAndTime(a.timestamp)}{addressName(a.address)} - - - - -
- 20 ? 'tooltip' : ''}> - {a.memo && a.memo?.slice(0, 20) + (a.memo?.length > 20 ? '...' : '')} - {a.memo?.length > 20 && {a.memo}} - -
-
- {/* showAmount(a.transferFee) */} -
- {a.transferFee ? ( - niceNumber(a.transferFeeInFiats?.[selectedCurrency], 0, selectedCurrency, 6) - ) : ( -
- )} -
- {showAmount(a.txFee)} -
- {a.txFee ? ( - niceNumber(a.txFeeInFiats?.[selectedCurrency], 0, selectedCurrency, 6) - ) : ( -
- )} -
- {showAmount(a.amount)} -
- {showFiat(a.amountInFiats?.[selectedCurrency], selectedCurrency) ||
} -
- {loading ? 'Loading data...' : 'There is no data to show here.'} + {!width || width > 800 ? ( + 800 ? { width: 780 } : {}}> + + + + + {addressesToCheck.length > 1 && } + + + + + + + + + {currentList?.length > 0 ? ( + <> + {currentList.map((a, i) => ( + + + + {addressesToCheck.length > 1 && } + + + + + - )} - -
#TimestampAddressTxMemoTransfer FeeTx FeeBalance change
{a.index}{fullDateAndTime(a.timestamp)}{addressName(a.address)} + + + + +
+ 20 ? 'tooltip' : ''}> + {a.memo && a.memo?.slice(0, 20) + (a.memo?.length > 20 ? '...' : '')} + {a.memo?.length > 20 && {a.memo}} + +
+
+ {/* showAmount(a.transferFee) */} +
+ {a.transferFee ? ( + niceNumber(a.transferFeeInFiats?.[selectedCurrency], 0, selectedCurrency, 6) + ) : ( +
+ )} +
+ {showAmount(a.txFee)} +
+ {a.txFee ? ( + niceNumber(a.txFeeInFiats?.[selectedCurrency], 0, selectedCurrency, 6) + ) : ( +
+ )} +
+ {showAmount(a.amount)} +
+ {showFiat(a.amountInFiats?.[selectedCurrency], selectedCurrency) ||
}
- ) : ( - - - {currentList?.length > 0 ? ( - <> - {currentList.map((a, i) => ( - - - - - ))} - - ) : ( - - + + + )} + +
#{a.index} -

- Timestamp: {fullDateAndTime(a.timestamp)} -

- {addressesToCheck.length > 1 && ( -

- Address: {addressName(a.address)} -

- )} -

Type: {a.txType}

-

- Ledger Amount: {showAmount(a.amount)} -

-

- {selectedCurrency.toUpperCase()} equavalent:{' '} - {showFiat(a.amountInFiats?.[selectedCurrency], selectedCurrency)} -

- {a.memo && ( -

Memo: {a.memo?.slice(0, 197) + (a.memo?.length > 197 ? '...' : '')}

- )} -

- Tx: -

-
- {loading ? 'Loading data...' : 'There is no data to show here.'} + ))} + + ) : ( +
+ {loading ? 'Loading data...' : 'There is no data to show here.'} +
+ ) : ( + + + {currentList?.length > 0 ? ( + <> + {currentList.map((a, i) => ( + + + - )} - -
#{a.index} +

+ Timestamp: {fullDateAndTime(a.timestamp)} +

+ {addressesToCheck.length > 1 && ( +

+ Address: {addressName(a.address)} +

+ )} +

Type: {a.txType}

+

+ Ledger Amount: {showAmount(a.amount)} +

+

+ {selectedCurrency.toUpperCase()} equavalent:{' '} + {showFiat(a.amountInFiats?.[selectedCurrency], selectedCurrency)} +

+ {a.memo && ( +

Memo: {a.memo?.slice(0, 197) + (a.memo?.length > 197 ? '...' : '')}

+ )} +

+ Tx: +

- )} - + ))} + + ) : ( +
+ {loading ? 'Loading data...' : 'There is no data to show here.'} +
)} -
-
- {errorMessage ?
{errorMessage}
:
} -
- - ) : ( - <> -
-
-

- View detailed balance history for your verified addresses.

-

- Export data for tax reporting and analysis.

-
-
- Read how it works: XRP and XAH Taxes -
-
-
-
-
- -
-
+ )} +

+ {errorMessage ?
{errorMessage}
:
} - )} +
) From 441d75f93d5a4941de05d04103920533174e3156 Mon Sep 17 00:00:00 2001 From: pandablue0809 Date: Wed, 17 Sep 2025 05:51:56 +0900 Subject: [PATCH 2/5] add explanations on the page --- components/Layout/Header/MobileMenu.js | 3 +++ components/Layout/Header/index.js | 1 + pages/admin/pro/history.js | 13 ++++++++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/components/Layout/Header/MobileMenu.js b/components/Layout/Header/MobileMenu.js index a397c351..78121486 100644 --- a/components/Layout/Header/MobileMenu.js +++ b/components/Layout/Header/MobileMenu.js @@ -186,6 +186,9 @@ export default function MobileMenu({ {t('menu.services.tax-reports')} + + Try Out Tax Reports + {t('menu.project-registration')} diff --git a/components/Layout/Header/index.js b/components/Layout/Header/index.js index 13da1cc9..b5feaac6 100644 --- a/components/Layout/Header/index.js +++ b/components/Layout/Header/index.js @@ -202,6 +202,7 @@ export default function Header({ {t('menu.services.nft-mint')} {t('menu.usernames')} {t('menu.services.tax-reports')} + Try Out Tax Reports {t('menu.project-registration')} {!devNet && {t('menu.price-alerts', { nativeCurrency })}} {t('menu.submit-offline-tx')} diff --git a/pages/admin/pro/history.js b/pages/admin/pro/history.js index e7177eaf..792683f4 100644 --- a/pages/admin/pro/history.js +++ b/pages/admin/pro/history.js @@ -544,7 +544,7 @@ export default function History({ } setData(res) // last request data if (options?.marker) { - setActivities(activities.concat(res.activities)) // joines data + setActivities(prevActivities => prevActivities.concat(res.activities)) // joins data } else { setActivities(res.activities) // rewrite old data } @@ -632,6 +632,17 @@ export default function History({

Pro address balances history

+ + {!sessionToken && ( +
+

+ Use these test wallets to try all features of the page. Want to add your address?{' '} + + Sign in here + +

+
+ )} From 5b444e6923bd16e5f9de603738f95f37f385a13f Mon Sep 17 00:00:00 2001 From: pandablue0809 Date: Mon, 29 Sep 2025 23:37:54 +0900 Subject: [PATCH 3/5] fix LP token --- pages/admin/pro/history.js | 1 + 1 file changed, 1 insertion(+) diff --git a/pages/admin/pro/history.js b/pages/admin/pro/history.js index 792683f4..a3217ae1 100644 --- a/pages/admin/pro/history.js +++ b/pages/admin/pro/history.js @@ -48,6 +48,7 @@ const showAmount = (amount) => { } const showFiat = (fiat, selectedCurrency) => { + if (isNaN(fiat)) return '' if (!fiat && fiat !== 0) return '' return ( 0 ? 'green' : fiat < 0 ? 'red' : '')}> From 6a8577a05ac0f6484351372ef4e5a44187b315c6 Mon Sep 17 00:00:00 2001 From: pandablue0809 Date: Tue, 30 Sep 2025 17:54:56 +0900 Subject: [PATCH 4/5] disable sorting and remove some wallets --- components/Layout/FiltersFrame.js | 15 ++++++---- components/UI/SimpleSelect.js | 3 +- pages/admin/pro/history.js | 46 ++++++++++++++++++++++++++----- 3 files changed, 51 insertions(+), 13 deletions(-) diff --git a/components/Layout/FiltersFrame.js b/components/Layout/FiltersFrame.js index 0fd97358..8e3358d7 100644 --- a/components/Layout/FiltersFrame.js +++ b/components/Layout/FiltersFrame.js @@ -68,7 +68,8 @@ export default function FiltersFrame({ rowsPerPage, setRowsPerPage, onlyCsv, - filters + filters, + sortingDisabled }) { const { t } = useTranslation() const router = useRouter() @@ -157,8 +158,8 @@ export default function FiltersFrame({ {orderList && ( <> - - @@ -203,8 +204,12 @@ export default function FiltersFrame({ {orderList?.map((item, i) => (
  • hideMobileSortMenu(item.value)} + style={{ + fontWeight: item.value === order ? 'bold' : 'normal', + opacity: sortingDisabled ? 0.5 : 1, + pointerEvents: sortingDisabled ? 'none' : 'auto' + }} + onClick={() => !sortingDisabled && hideMobileSortMenu(item.value)} suppressHydrationWarning > {item.label} diff --git a/components/UI/SimpleSelect.js b/components/UI/SimpleSelect.js index 10ef9d1d..b494ba6f 100644 --- a/components/UI/SimpleSelect.js +++ b/components/UI/SimpleSelect.js @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react' import Select from 'react-select' -export default function SimpleSelect({ value, setValue, optionsList, className }) { +export default function SimpleSelect({ value, setValue, optionsList, className, disabled }) { const [rendered, setRendered] = useState(false) const [choosenOption, setChoosenOption] = useState() @@ -36,6 +36,7 @@ export default function SimpleSelect({ value, setValue, optionsList, className } setValue(a.value) }} isSearchable={false} + isDisabled={disabled} className={`dropdown dropdown--desktop ${className}`} classNamePrefix="react-select" /> diff --git a/pages/admin/pro/history.js b/pages/admin/pro/history.js index a3217ae1..544a4a53 100644 --- a/pages/admin/pro/history.js +++ b/pages/admin/pro/history.js @@ -197,12 +197,9 @@ const platformList = [ ] const defaultWalletList = [ - 'rhWTXC2m2gGGA9WozUaoMm6kLAVPb1tcS3', 'rDLNm4ehD7XQCtYKWuMjEKY7TCfmf3CwzH', 'r3sQYvXxc82iSNs5DnUUvXtcQQQqigCdW', 'raWYT6DD2XFAvjCqRPsCCzr1CMBzJydf9E', - 'rakZprdzwsUJ1rD2ouhYYAVP7tPbhrCbtz', - 'r3LAichpcBeZWk7LLSZcfSQcqYsvQ6beBc' ] export default function History({ @@ -234,6 +231,7 @@ export default function History({ const [removeDust, setRemoveDust] = useState(false) const [filteredActivities, setFilteredActivities] = useState([]) const [platformCSVExport, setPlatformCSVExport] = useState('Koinly') + const [reloadNotification, setReloadNotification] = useState('') const platformCSVHeaders = useMemo( () => [ @@ -477,6 +475,7 @@ export default function History({ ) .catch((error) => { setLoading(false) + setReloadNotification('') if (error.response?.data?.error === 'errors.token.required') { openEmailLogin() return @@ -549,16 +548,28 @@ export default function History({ } else { setActivities(res.activities) // rewrite old data } + + let notificationText = '' + const totalCount = res?.total || 0 + const loadedCount = options?.marker ? activities.length + res.activities.length : res.activities.length + if (loadedCount > 0 && totalCount > 0) { + notificationText = `loaded 1 ~ ${loadedCount} of ${totalCount} transactions` + } + setReloadNotification(notificationText) + + setTimeout(() => { + setReloadNotification('') + }, 2000) // Clear notification when loading is complete } } const getVerifiedAddresses = async () => { setLoadingVerifiedAddresses(true) - if(!sessionToken) { + if (!sessionToken) { // Create hardcoded wallet data for non-authenticated users const walletDatas = defaultWalletList.map((address, index) => ({ - address: address, - name: `Test Wallet ${index + 1}`, + address: address, + name: `Test Wallet ${index + 1}`, crawler: { status: "synced" } })) setVerifiedAddresses(walletDatas) @@ -633,7 +644,7 @@ export default function History({

    Pro address balances history

    - + {!sessionToken && (

    @@ -647,6 +658,26 @@ export default function History({ + {reloadNotification && ( +

    + {reloadNotification} +
    + )} +
    @@ -686,6 +717,7 @@ export default function History({ setPage={setPage} rowsPerPage={rowsPerPage} setRowsPerPage={setRowsPerPage} + sortingDisabled={data?.marker ? true : false} > <> {verifiedAddresses?.length > 0 && data && activities && data.total > activities.length && ( From ef797afc78b992e6255518ba9371ab4903c5996d Mon Sep 17 00:00:00 2001 From: pandablue0809 Date: Sun, 5 Oct 2025 19:16:12 +0900 Subject: [PATCH 5/5] fix sorting and loading datas --- components/Layout/FiltersFrame.js | 15 +++++--- pages/admin/pro/history.js | 64 ++++++++++++------------------- 2 files changed, 33 insertions(+), 46 deletions(-) diff --git a/components/Layout/FiltersFrame.js b/components/Layout/FiltersFrame.js index 8e3358d7..a8f86a51 100644 --- a/components/Layout/FiltersFrame.js +++ b/components/Layout/FiltersFrame.js @@ -69,7 +69,8 @@ export default function FiltersFrame({ setRowsPerPage, onlyCsv, filters, - sortingDisabled + loading, + setLoading }) { const { t } = useTranslation() const router = useRouter() @@ -105,6 +106,8 @@ export default function FiltersFrame({ }, [activeView]) const handleChangePage = (event, newPage) => { + if(loading) return + setLoading(true) setPage(newPage) } @@ -149,6 +152,7 @@ export default function FiltersFrame({ rowsPerPage={rowsPerPage} onRowsPerPageChange={handleChangeRowsPerPage} rowsPerPageOptions={width <= 440 ? [] : rowsPerPageOptions} + disabled={loading} //slotProps={{ select: }} /> @@ -158,8 +162,8 @@ export default function FiltersFrame({ {orderList && ( <> - - @@ -183,6 +187,7 @@ export default function FiltersFrame({ rowsPerPage={rowsPerPage} onRowsPerPageChange={handleChangeRowsPerPage} rowsPerPageOptions={rowsPerPageOptions} + disabled={loading} //slotProps={{ select: }} /> @@ -206,10 +211,8 @@ export default function FiltersFrame({ key={i} style={{ fontWeight: item.value === order ? 'bold' : 'normal', - opacity: sortingDisabled ? 0.5 : 1, - pointerEvents: sortingDisabled ? 'none' : 'auto' }} - onClick={() => !sortingDisabled && hideMobileSortMenu(item.value)} + onClick={() => hideMobileSortMenu(item.value)} suppressHydrationWarning > {item.label} diff --git a/pages/admin/pro/history.js b/pages/admin/pro/history.js index 544a4a53..ac824281 100644 --- a/pages/admin/pro/history.js +++ b/pages/admin/pro/history.js @@ -231,7 +231,6 @@ export default function History({ const [removeDust, setRemoveDust] = useState(false) const [filteredActivities, setFilteredActivities] = useState([]) const [platformCSVExport, setPlatformCSVExport] = useState('Koinly') - const [reloadNotification, setReloadNotification] = useState('') const platformCSVHeaders = useMemo( () => [ @@ -376,6 +375,7 @@ export default function History({ }, []) useEffect(() => { + setLoading(true) if (filteredActivities.length > 0) { if (rowsPerPage === -1) { setCurrentList(filteredActivities) @@ -385,8 +385,14 @@ export default function History({ } else { setCurrentList([]) } - if ((page + 2) * rowsPerPage > filteredActivities.length && data?.marker) { + + if(page * rowsPerPage > data?.total) { + setPage(0) + getProAddressHistory() + }else if ((page + 2) * rowsPerPage > filteredActivities.length && data?.marker) { getProAddressHistory({ marker: data.marker }) + } else { + setLoading(false) } // eslint-disable-next-line react-hooks/exhaustive-deps }, [filteredActivities, page, rowsPerPage]) @@ -438,8 +444,12 @@ export default function History({ ] const getProAddressHistory = async (options) => { - if (addressesToCheck.length === 0) return - setLoading(true) + if (addressesToCheck.length === 0) { + setLoading(false) + setActivities([]) + setData(null) + return + } let orderPart = order let sortCurrency = null @@ -475,7 +485,6 @@ export default function History({ ) .catch((error) => { setLoading(false) - setReloadNotification('') if (error.response?.data?.error === 'errors.token.required') { openEmailLogin() return @@ -484,7 +493,6 @@ export default function History({ setErrorMessage(t(error.response?.data?.error || 'error.' + error.message)) } }) - setLoading(false) let res = response?.data /* { @@ -548,18 +556,6 @@ export default function History({ } else { setActivities(res.activities) // rewrite old data } - - let notificationText = '' - const totalCount = res?.total || 0 - const loadedCount = options?.marker ? activities.length + res.activities.length : res.activities.length - if (loadedCount > 0 && totalCount > 0) { - notificationText = `loaded 1 ~ ${loadedCount} of ${totalCount} transactions` - } - setReloadNotification(notificationText) - - setTimeout(() => { - setReloadNotification('') - }, 2000) // Clear notification when loading is complete } } @@ -627,6 +623,7 @@ export default function History({ }, [sessionToken]) useEffect(() => { + setLoading(true) getProAddressHistory() // eslint-disable-next-line react-hooks/exhaustive-deps }, [addressesToCheck, selectedCurrency, period, order, sessionToken]) @@ -658,26 +655,6 @@ export default function History({ - {reloadNotification && ( -
    - {reloadNotification} -
    - )} -
    @@ -717,7 +694,8 @@ export default function History({ setPage={setPage} rowsPerPage={rowsPerPage} setRowsPerPage={setRowsPerPage} - sortingDisabled={data?.marker ? true : false} + loading={loading} + setLoading={setLoading} > <> {verifiedAddresses?.length > 0 && data && activities && data.total > activities.length && ( @@ -725,8 +703,12 @@ export default function History({

    @@ -740,6 +722,7 @@ export default function History({ { + setLoading(true) setAddressesToCheck( addressesToCheck.includes(address.address) ? addressesToCheck.filter((a) => a !== address.address) @@ -748,6 +731,7 @@ export default function History({ }} outline checkmarkStyle={{ top: '10px' }} + disabled={loading} >