Skip to content

Commit 4014447

Browse files
feat: pagination with caching (#312)
1 parent c5ed225 commit 4014447

File tree

12 files changed

+861
-378
lines changed

12 files changed

+861
-378
lines changed

package-lock.json

+786-178
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"dependencies": {
3232
"@changesets/cli": "^2.27.10",
3333
"@requestnetwork/currency": "0.22.0",
34+
"@tanstack/svelte-query": "^5.64.2",
3435
"bits-ui": "^0.21.12"
3536
}
3637
}

packages/add-stakeholder/CHANGELOG.md

-7
This file was deleted.

packages/create-invoice-form/CHANGELOG.md

-61
This file was deleted.

packages/create-invoice-form/package.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@requestnetwork/create-invoice-form",
3-
"version": "0.12.1",
3+
"version": "0.12.2",
44
"main": "./dist/web-component.umd.cjs",
55
"scripts": {
66
"dev": "vite dev",
@@ -33,8 +33,8 @@
3333
"!dist/**/*.spec.*"
3434
],
3535
"dependencies": {
36-
"@requestnetwork/data-format": "0.19.5",
37-
"@requestnetwork/request-client.js": "0.54.0",
36+
"@requestnetwork/data-format": "0.19.7",
37+
"@requestnetwork/request-client.js": "0.56.0",
3838
"@wagmi/core": "^2.15.2",
3939
"validator": "^13.12.0",
4040
"viem": "^2.21.53"

packages/invoice-dashboard/CHANGELOG.md

-61
This file was deleted.

packages/invoice-dashboard/package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@requestnetwork/invoice-dashboard",
3-
"version": "0.13.0",
3+
"version": "0.14.0",
44
"main": "./dist/web-component.umd.cjs",
55
"scripts": {
66
"dev": "vite dev",
@@ -37,9 +37,9 @@
3737
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
3838
},
3939
"dependencies": {
40-
"@requestnetwork/payment-detection": "0.49.0",
41-
"@requestnetwork/payment-processor": "0.52.0",
42-
"@requestnetwork/request-client.js": "0.54.0",
40+
"@requestnetwork/payment-detection": "0.51.0",
41+
"@requestnetwork/payment-processor": "0.54.0",
42+
"@requestnetwork/request-client.js": "0.56.0",
4343
"@wagmi/connectors": "^5.5.3",
4444
"@wagmi/core": "^2.15.2",
4545
"ethers": "^5.7.2",

packages/invoice-dashboard/src/lib/view-requests.svelte

+49-31
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import { getPaymentNetworkExtension } from "@requestnetwork/payment-detection";
5454
import { CipherProviderTypes, CurrencyTypes } from "@requestnetwork/types";
5555
import { ethers } from "ethers";
56+
import { queryClient } from "@requestnetwork/shared-utils/queryClient";
5657
5758
interface CipherProvider extends CipherProviderTypes.ICipherProvider {
5859
getSessionSignatures: (
@@ -111,6 +112,9 @@
111112
let sortOrder = "desc";
112113
let sortColumn = "timestamp";
113114
115+
const itemsPerPage = 10;
116+
let currentPage = 1;
117+
let hasMoreRequests = false;
114118
let selectedNetworks: string[] = [];
115119
let networkOptions: { value: string; checked: boolean }[] = [];
116120
@@ -190,21 +194,52 @@
190194
currencyManager = await initializeCurrencyManager();
191195
});
192196
197+
const getRequestsQueryKey = (address: string, currentPage: number) => ["requestsData", address, currentPage];
198+
199+
const fetchRequests = async (address: string, page: number, pageSize: number) => {
200+
if (!address || !requestNetwork) return null;
201+
try {
202+
const requestsData = await requestNetwork.fromIdentity({
203+
type: Types.Identity.TYPE.ETHEREUM_ADDRESS,
204+
value: address,
205+
}, undefined, {
206+
page: page,
207+
pageSize: pageSize,
208+
});
209+
return requestsData;
210+
} catch (error) {
211+
console.error("Failed to fetch requests:", error);
212+
throw error;
213+
}
214+
};
215+
193216
const getRequests = async (
194217
account: GetAccountReturnType,
195218
requestNetwork: RequestNetwork | undefined | null
196219
) => {
197220
if (!account?.address || !requestNetwork) return;
198221
loading = true;
199222
try {
200-
const requestsData = await requestNetwork?.fromIdentity({
201-
type: Types.Identity.TYPE.ETHEREUM_ADDRESS,
202-
value: account?.address,
223+
const data = await queryClient.fetchQuery({
224+
queryKey: getRequestsQueryKey(account.address, currentPage),
225+
queryFn: () => fetchRequests(account.address, currentPage, itemsPerPage)
203226
});
204227
205-
requests = requestsData
206-
?.map((request) => request.getData())
228+
if (data) {
229+
requests = data.requests?.map((request) => request.getData())
207230
.sort((a, b) => b.timestamp - a.timestamp);
231+
hasMoreRequests = data?.meta?.pagination?.hasMore || false;
232+
} else {
233+
requests = [];
234+
hasMoreRequests = false;
235+
}
236+
237+
if (hasMoreRequests) {
238+
queryClient.prefetchQuery({
239+
queryKey: getRequestsQueryKey(account.address, currentPage + 1),
240+
queryFn: () => fetchRequests(account.address, currentPage + 1, itemsPerPage)
241+
});
242+
}
208243
209244
const uniqueNetworks = new Set<string>();
210245
requests?.forEach((request) => {
@@ -243,10 +278,6 @@
243278
}
244279
};
245280
246-
const itemsPerPage = 10;
247-
let currentPage = 1;
248-
let totalPages = 1;
249-
250281
$: {
251282
if (sortColumn && sortOrder) {
252283
requests = [...(requests ?? [])].sort((a, b) => {
@@ -317,14 +348,7 @@
317348
return false;
318349
});
319350
320-
$: totalPages = Math.ceil(filteredRequests?.length! / itemsPerPage);
321-
322-
$: paginatedRequests = (filteredRequests ?? []).slice(
323-
(currentPage - 1) * itemsPerPage,
324-
currentPage * itemsPerPage
325-
);
326-
327-
$: processedRequests = paginatedRequests?.map(
351+
$: processedRequests = filteredRequests?.map(
328352
(
329353
request
330354
): Types.IRequestDataWithEvents & {
@@ -403,8 +427,9 @@
403427
);
404428
405429
const goToPage = (page: number) => {
406-
if (page >= 1 && page <= totalPages) {
430+
if (page >= 1) {
407431
currentPage = page;
432+
getRequests(account, requestNetwork);
408433
}
409434
};
410435
@@ -501,6 +526,9 @@
501526
} finally {
502527
loading = false;
503528
}
529+
queryClient.invalidateQueries()
530+
await getRequests(currentAccount, currentRequestNetwork);
531+
loading = false;
504532
};
505533
506534
$: loadRequests(sliderValueForDecryption, account, requestNetwork);
@@ -913,7 +941,7 @@
913941
{/if}
914942
</Drawer>
915943
</div>
916-
{#if paginatedRequests.length > 0}
944+
{#if processedRequests.length > 0}
917945
<div class="pagination">
918946
<button
919947
class="chevron-button"
@@ -925,19 +953,9 @@
925953
</i>
926954
</button>
927955

928-
{#each Array(totalPages).fill(null) as _, i}
929-
<button
930-
class={`active-page page-${currentPage === i + 1 ? "on" : "off"}`}
931-
class:active={currentPage === i + 1}
932-
on:click={() => goToPage(i + 1)}
933-
>
934-
{i + 1}
935-
</button>
936-
{/each}
937-
938956
<button
939957
class="chevron-button"
940-
disabled={currentPage === totalPages}
958+
disabled={!hasMoreRequests}
941959
on:click={() => goToPage(currentPage + 1)}
942960
>
943961
<i>
@@ -947,7 +965,7 @@
947965
</div>
948966
{/if}
949967
</div>
950-
{#if !loading && paginatedRequests.length === 0}
968+
{#if !loading && processedRequests.length === 0}
951969
<div class="no-requests">
952970
<p>No requests found</p>
953971
<span>(Please connect a wallet or create a request)</span>

packages/payment-widget/CHANGELOG.md

-25
This file was deleted.

packages/payment-widget/package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@requestnetwork/payment-widget",
3-
"version": "0.3.7",
3+
"version": "0.3.8",
44
"main": "./dist/web-component.umd.cjs",
55
"scripts": {
66
"dev": "vite dev",
@@ -56,9 +56,9 @@
5656
"access": "public"
5757
},
5858
"dependencies": {
59-
"@requestnetwork/payment-processor": "0.52.0",
60-
"@requestnetwork/request-client.js": "0.54.0",
61-
"@requestnetwork/web3-signature": "0.8.5",
59+
"@requestnetwork/payment-processor": "0.54.0",
60+
"@requestnetwork/request-client.js": "0.56.0",
61+
"@requestnetwork/web3-signature": "0.8.7",
6262
"@web3modal/ethers5": "^5.0.11",
6363
"ethers": "^5.7.2",
6464
"vite-plugin-node-polyfills": "^0.22.0"

0 commit comments

Comments
 (0)