Added ability to fetch beyond first 1000 txs

This commit is contained in:
sairaj mote 2023-05-16 03:54:27 +05:30
parent f8efd6d9a2
commit 841fae6a17

View File

@ -1218,18 +1218,24 @@
pagesData.params = params pagesData.params = params
switch (pageId) { switch (pageId) {
case 'search': { case 'search': {
const { type, query, page = 1 } = params let { type, query, page = 1 } = params
switch (type) { switch (type) {
case 'address': case 'address':
try { try {
page = parseInt(page)
if (floGlobals.query.string !== query) { if (floGlobals.query.string !== query) {
checkBalance(query) checkBalance(query)
fetchTransactions(query).then(() => { fetchTransactions(query).then(() => {
filterFetchedTransactions() filterFetchedTransactions()
render.paginatedTransactions(parseInt(page)) render.paginatedTransactions(page)
})
} else if (page % Math.ceil(1000 / txsPerPage) === 0 && floGlobals.query.transactions.length <= page * txsPerPage) {
fetchTransactions(query, true).then(() => {
filterFetchedTransactions()
render.paginatedTransactions(page)
}) })
} else { } else {
render.paginatedTransactions(parseInt(page)) render.paginatedTransactions(page)
} }
} catch (err) { } catch (err) {
notify(err, 'error') notify(err, 'error')
@ -1908,9 +1914,13 @@
return clone return clone
}, },
paginatedTransactions(page = 1) { paginatedTransactions(page = 1) {
const startingIndex = ((page - 1) * 20)
const endingIndex = startingIndex + 20
const { transactions, string: address, filteredTransactions } = floGlobals.query const { transactions, string: address, filteredTransactions } = floGlobals.query
let startingIndex = ((page - 1) * txsPerPage)
if (filteredTransactions && startingIndex > filteredTransactions.length) {
startingIndex = 0;
window.history.replaceState({}, '', `#/search?type=address&query=${address}&page=1`)
}
const endingIndex = startingIndex + txsPerPage
const renderedTransactions = (filteredTransactions || transactions) const renderedTransactions = (filteredTransactions || transactions)
.slice(startingIndex, endingIndex) .slice(startingIndex, endingIndex)
.map(transaction => render.transactionCard(transaction)) .map(transaction => render.transactionCard(transaction))
@ -1924,7 +1934,7 @@
} else { } else {
getRef('filter_selector').classList.add('hidden') getRef('filter_selector').classList.add('hidden')
} }
const paginationSegments = (filteredTransactions || transactions) ? Math.ceil((filteredTransactions || transactions).length / renderTransactions) : 0; const paginationSegments = (filteredTransactions || transactions) ? Math.ceil((filteredTransactions || transactions).length / txsPerPage) : 0;
let pagination = [] let pagination = []
let startingPage = page - 2; let startingPage = page - 2;
let showTill = page + 2; let showTill = page + 2;
@ -2540,13 +2550,13 @@
} }
}) })
} }
let renderTransactions = 20;
floGlobals.query = { floGlobals.query = {
transactions: [], transactions: [],
string: '', string: '',
filteredTransactions: null
} }
async function fetchTransactions(address) { const txsPerPage = 25;
async function fetchTransactions(address, loadOlder = false) {
try { try {
renderElem(getRef('pagination_wrapper'), html``) renderElem(getRef('pagination_wrapper'), html``)
renderElem(getRef('queried_address_transactions'), html` renderElem(getRef('queried_address_transactions'), html`
@ -2555,10 +2565,24 @@
<span>Loading transactions...</span> <span>Loading transactions...</span>
</div> </div>
`) `)
const { items, lastItem, initItem } = await floWebWallet.listTransactions(address); if (loadOlder) {
floGlobals.query.transactions = items; const { items, initItem } = await floWebWallet.listTransactions.syncOld(address, floGlobals.query.initItem)
floGlobals.query.string = address; floGlobals.query = {
floGlobals.query.filteredTransactions = null transactions: [...items, ...floGlobals.query.transactions],
string: address,
initItem,
filteredTransactions: null
}
} else {
const { items, lastItem, initItem } = await floWebWallet.listTransactions(address)
floGlobals.query = {
transactions: items,
string: address,
lastItem,
initItem,
filteredTransactions: null
}
}
} catch (err) { } catch (err) {
renderElem(getRef('queried_address_transactions'), html` <span>Failed to load transactions</span> `) renderElem(getRef('queried_address_transactions'), html` <span>Failed to load transactions</span> `)
throw err; throw err;
@ -2568,6 +2592,8 @@
const filter = getRef('filter_selector').value; const filter = getRef('filter_selector').value;
if (filter !== 'all') { if (filter !== 'all') {
floGlobals.query.filteredTransactions = floGlobals.query.transactions.filter(t => filter === 'sent' ? t.sender === floGlobals.query.string : t.receiver === floGlobals.query.string) floGlobals.query.filteredTransactions = floGlobals.query.transactions.filter(t => filter === 'sent' ? t.sender === floGlobals.query.string : t.receiver === floGlobals.query.string)
} else {
floGlobals.query.filteredTransactions = null
} }
} }
async function processQuery() { async function processQuery() {