From c33dfcfddddfed0902f3fa9b1d8a1d3e1560262f Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Tue, 18 Apr 2023 20:38:01 +0200 Subject: [PATCH 1/5] Implemented Async loading of cards via pagination (500 cards per request) ref #175 --- src/components/cards/CardsOverview.svelte | 33 +++++++++++++++++------ 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/components/cards/CardsOverview.svelte b/src/components/cards/CardsOverview.svelte index 287df51f..49f96d04 100644 --- a/src/components/cards/CardsOverview.svelte +++ b/src/components/cards/CardsOverview.svelte @@ -32,7 +32,7 @@ export let original_data = {}; export let current_cards = []; export const addCards = (cards) => { - console.log(cards) + console.log(cards); current_cards = current_cards.concat(...cards); options.update((options) => ({ ...options, @@ -155,15 +155,29 @@ }).showToast(); } - onMount(() => { - RunnerCardService.runnerCardControllerGetAll().then((val) => { - current_cards = val; + onMount(async () => { + let page = 0; + while (page >= 0) { + const cards = await RunnerCardService.runnerCardControllerGetAll( + page, + 500 + ); + if (cards.length == 0) { + page = -2; + } + + current_cards = current_cards.concat(...cards); options.update((options) => ({ ...options, data: current_cards, })); - dataLoaded = true; - }); + + if (page == 0) { + dataLoaded = true; + } + page++; + } + console.log("All cards loaded"); }); @@ -229,7 +243,7 @@ ...options, data: current_cards, })); - $table.resetRowSelection() + $table.resetRowSelection(); }} > {$_("delete-cards")} @@ -249,7 +263,10 @@ {/if} - 0} bind:generate_cards={selectedCards} /> + 0} + bind:generate_cards={selectedCards} + />
-- 2.47.2 From faf3893180bb735bea6f1ea58c896686b89949fe Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Tue, 18 Apr 2023 20:40:28 +0200 Subject: [PATCH 2/5] Paginated runner loading (1000 per page) ref #175 --- src/components/runners/RunnersOverview.svelte | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/components/runners/RunnersOverview.svelte b/src/components/runners/RunnersOverview.svelte index 3c2cf750..3665bb12 100644 --- a/src/components/runners/RunnersOverview.svelte +++ b/src/components/runners/RunnersOverview.svelte @@ -50,7 +50,6 @@ })); }; - //Section table const columns = [ { @@ -157,16 +156,7 @@ }).showToast(); } - onMount(() => { - RunnerService.runnerControllerGetAll().then((val) => { - current_runners = val; - dataLoaded = true; - - options.update((options) => ({ - ...options, - data: current_runners, - })); - }); + onMount(async () => { RunnerTeamService.runnerTeamControllerGetAll().then((val) => { teams = val; }); @@ -175,6 +165,26 @@ orgs = val; } ); + + let page = 0; + while (page >= 0) { + const runners = await RunnerService.runnerControllerGetAll(page, 1000); + if (runners.length == 0) { + page = -2; + } + + current_runners = current_runners.concat(...runners); + options.update((options) => ({ + ...options, + data: current_runners, + })); + + if (page == 0) { + dataLoaded = true; + } + page++; + } + console.log("All runners loaded"); }); -- 2.47.2 From cac34db1fd3bf5dc7c7be64b3a76ca4c8c77938d Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Tue, 18 Apr 2023 20:43:04 +0200 Subject: [PATCH 3/5] Paginated scan loading ref #175 --- src/components/scans/ScansOverview.svelte | 222 +++++++++++----------- 1 file changed, 114 insertions(+), 108 deletions(-) diff --git a/src/components/scans/ScansOverview.svelte b/src/components/scans/ScansOverview.svelte index f19f5e1a..35b05bc6 100644 --- a/src/components/scans/ScansOverview.svelte +++ b/src/components/scans/ScansOverview.svelte @@ -30,6 +30,7 @@ $table?.getSelectedRowModel().rows.map((row) => row.index) || []; $: active_delete = undefined; + $: dataLoaded = false; export let current_scans = []; export const addScans = (scans) => { current_scans = current_scans.concat(...scans); @@ -39,15 +40,6 @@ })); }; - const scans_promise = ScanService.scanControllerGetAll().then((val) => { - current_scans = val; - // handler.setRows(val); - current_scans = val; - options.update((options) => ({ - ...options, - data: current_scans, - })); - }); let allTracks = []; TrackService.trackControllerGetAll().then((val) => { allTracks = val; @@ -99,7 +91,7 @@ accessorKey: "timestamp", header: () => $_("timestamp"), cell: (info) => { - return (new Date(parseInt(info.getValue())*1000)).toLocaleString() + return new Date(parseInt(info.getValue()) * 1000).toLocaleString(); }, enableColumnFilter: false, }, @@ -183,6 +175,29 @@ backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)", }).showToast(); } + + onMount(async () => { + let page = 0; + while (page >= 0) { + const scans = await ScanService.scanControllerGetAll(page, 500); + if (scans.length == 0) { + page = -2; + dataLoaded = true; + } + + current_scans = current_scans.concat(...scans); + options.update((options) => ({ + ...options, + data: current_scans, + })); + + if (page == 0) { + dataLoaded = true; + } + page++; + } + console.log("All scans loaded"); + }); {#if store.state.jwtinfo.userdetails.permissions.includes("SCAN:GET")} - {#await scans_promise} + {#if !dataLoaded} - {:then} - {#if current_scans.length === 0} - - {:else} - {#if selected.length > 0} - - {/if} -
-
- - {#each $table.getHeaderGroups() as headerGroup} - - - {#each headerGroup.headers as header} - - {/each} - - {/each} - - - {#each $table.getRowModel().rows as row} - - + {/each} + +
- $table.toggleAllRowsSelected()} - /> -
- row.toggleSelected()} + + + + {/if} +
+ + + {#each $table.getHeaderGroups() as headerGroup} + + + {#each headerGroup.headers as header} + + {/each} + + {/each} + + + {#each $table.getRowModel().rows as row} + + + {#each row.getVisibleCells() as cell} + - {#each row.getVisibleCells() as cell} - - {/each} - - {/each} - -
+ $table.toggleAllRowsSelected()} + /> +
+ row.toggleSelected()} + /> + + - -
-
- - {/if} - {:catch error} -
- - {$_("general_promise_error")} - {error} - + {/each} +
- {/await} + + {/if} {/if} -- 2.47.2 From ccf865687b34016931a702c0a9b98a0a18e2b03a Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Tue, 18 Apr 2023 20:46:18 +0200 Subject: [PATCH 4/5] Donation paginated loading ref #175 --- .../donations/DonationsOverview.svelte | 434 ++++++++++-------- 1 file changed, 237 insertions(+), 197 deletions(-) diff --git a/src/components/donations/DonationsOverview.svelte b/src/components/donations/DonationsOverview.svelte index c509f98f..c989a6d5 100644 --- a/src/components/donations/DonationsOverview.svelte +++ b/src/components/donations/DonationsOverview.svelte @@ -5,18 +5,16 @@ import Toastify from "toastify-js"; import DonationsEmptyState from "./DonationsEmptyState.svelte"; import AddDonationPaymentModal from "./AddDonationPaymentModal.svelte"; + import { onMount } from "svelte"; $: searchvalue = ""; $: active_deletes = []; + $: dataLoaded = false; export let current_donations = []; export let payment_modal_open = false; export let editable = {}; export let original_data = {}; export let paid_amount_input = 0; - const donations_promise = DonationService.donationControllerGetAll().then( - (val) => { - current_donations = val; - } - ); + function should_display_based_on_id(id) { if (searchvalue.toString().slice(-1) === "*") { return id.toString().startsWith(searchvalue.replace("*", "")); @@ -26,210 +24,252 @@ function open_payment_modal(donation) { editable = Object.assign({}, donation); original_data = Object.assign({}, donation); - paid_amount_input = (donation.paidAmount/100).toFixed(2); + paid_amount_input = (donation.paidAmount / 100).toFixed(2); payment_modal_open = true; } + + onMount(async () => { + let page = 0; + while (page >= 0) { + const donations = await DonationService.donationControllerGetAll( + page, + 500 + ); + if (donations.length == 0) { + page = -2; + } + + current_donations = current_donations.concat(...donations); + + if (page == 0) { + dataLoaded = true; + } + page++; + } + console.log("All donations loaded"); + }); - -{#if store.state.jwtinfo.userdetails.permissions.includes('DONATION:GET')} - {#await donations_promise} + +{#if store.state.jwtinfo.userdetails.permissions.includes("DONATION:GET")} + {#if !dataLoaded} - {:then} - {#if current_donations.length === 0} - - {:else} - -
- - - - - - - - - - - - - - {#each current_donations as donation} - {#if donation.donor.firstname + {:else if current_donations.length === 0} + + {:else} + +
+
- {$_('donor')} - - {$_('runner')} - - {$_('amount-per-kilometer')} - - {$_('donation-amount')} - - {$_('paid-amount')} - - {$_('status')} - - {$_('action')} -
+ + + + + + + + + + + + + {#each current_donations as donation} + {#if donation.donor.firstname + .toLowerCase() + .includes(searchvalue.toLowerCase()) || donation.donor.lastname .toLowerCase() - .includes( - searchvalue.toLowerCase() - ) || donation.donor.lastname - .toLowerCase() - .includes( - searchvalue.toLowerCase() - ) || donation.runner?.firstname - .toLowerCase() - .includes( - searchvalue.toLowerCase() - ) || donation.runner?.lastname - .toLowerCase() - .includes( - searchvalue.toLowerCase() - ) || should_display_based_on_id(donation.id)} - - + + - - - - - - {#if active_deletes[donation.id] === true} - {:else} - +
+ {$_("fixed-donation")} +
{/if} - - {/if} - {/each} - -
+ {$_("donor")} + + {$_("runner")} + + {$_("amount-per-kilometer")} + + {$_("donation-amount")} + + {$_("paid-amount")} + + {$_("status")} + + {$_("action")} +
-
+ .includes(searchvalue.toLowerCase()) || donation.runner?.firstname + .toLowerCase() + .includes(searchvalue.toLowerCase()) || donation.runner?.lastname + .toLowerCase() + .includes(searchvalue.toLowerCase()) || should_display_based_on_id(donation.id)} +
+ + + {#if donation.runner} +
{donation.donor.firstname} - {donation.donor.middlename || ''} - {donation.donor.lastname} + href="../runners/{donation.runner.id}" + class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800" + >{donation.runner.firstname} + {donation.runner.middlename || ""} + {donation.runner.lastname}
-
- {#if donation.runner} - - {:else} -
- {$_('fixed-donation')} -
- {/if} -
- {#if donation.amountPerDistance} -
- {(donation.amountPerDistance / 100) - .toFixed(2) - .toLocaleString('de-DE', { valute: 'EUR' })}€ -
- {:else} -
- {$_('fixed-donation')} -
- {/if} -
-
- {(donation.amount / 100) - .toFixed(2) - .toLocaleString('de-DE', { valute: 'EUR' })}€ -
-
-
- {(donation.paidAmount / 100) - .toFixed(2) - .toLocaleString('de-DE', { valute: 'EUR' })}€ -
-
- {#if donation.status =="PAID"} - {$_('paid')} - {:else} - {$_('open')} - {/if} - - - - - - {$_('details')} - {#if store.state.jwtinfo.userdetails.permissions.includes('DONATION:DELETE')} - - {/if} -
-
- {/if} - {:catch error} -
- - {$_('general_promise_error')} - {error} - + + + {#if donation.amountPerDistance} +
+ {(donation.amountPerDistance / 100) + .toFixed(2) + .toLocaleString("de-DE", { valute: "EUR" })}€ +
+ {:else} +
+ {$_("fixed-donation")} +
+ {/if} + + +
+ {(donation.amount / 100) + .toFixed(2) + .toLocaleString("de-DE", { valute: "EUR" })}€ +
+ + +
+ {(donation.paidAmount / 100) + .toFixed(2) + .toLocaleString("de-DE", { valute: "EUR" })}€ +
+ + + {#if donation.status == "PAID"} + {$_("paid")} + {:else} + {$_("open")} + {/if} + + {#if active_deletes[donation.id] === true} + + + + + {:else} + + + {$_("details")} + {#if store.state.jwtinfo.userdetails.permissions.includes("DONATION:DELETE")} + + {/if} + + {/if} + + {/if} + {/each} + +
- {/await} + {/if} {/if} -- 2.47.2 From 52439aa5bc8cfb1d78d5dfce55b1a0df640ad8f5 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Tue, 18 Apr 2023 20:47:42 +0200 Subject: [PATCH 5/5] Allways set loaded to true ref #175 --- src/components/cards/CardsOverview.svelte | 4 +--- src/components/donations/DonationsOverview.svelte | 4 +--- src/components/runners/RunnersOverview.svelte | 4 +--- src/components/scans/ScansOverview.svelte | 5 +---- 4 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/components/cards/CardsOverview.svelte b/src/components/cards/CardsOverview.svelte index 49f96d04..d511c445 100644 --- a/src/components/cards/CardsOverview.svelte +++ b/src/components/cards/CardsOverview.svelte @@ -172,9 +172,7 @@ data: current_cards, })); - if (page == 0) { - dataLoaded = true; - } + dataLoaded = true; page++; } console.log("All cards loaded"); diff --git a/src/components/donations/DonationsOverview.svelte b/src/components/donations/DonationsOverview.svelte index c989a6d5..44c674c1 100644 --- a/src/components/donations/DonationsOverview.svelte +++ b/src/components/donations/DonationsOverview.svelte @@ -41,9 +41,7 @@ current_donations = current_donations.concat(...donations); - if (page == 0) { - dataLoaded = true; - } + dataLoaded = true; page++; } console.log("All donations loaded"); diff --git a/src/components/runners/RunnersOverview.svelte b/src/components/runners/RunnersOverview.svelte index 3665bb12..b0d33670 100644 --- a/src/components/runners/RunnersOverview.svelte +++ b/src/components/runners/RunnersOverview.svelte @@ -179,9 +179,7 @@ data: current_runners, })); - if (page == 0) { - dataLoaded = true; - } + dataLoaded = true; page++; } console.log("All runners loaded"); diff --git a/src/components/scans/ScansOverview.svelte b/src/components/scans/ScansOverview.svelte index 35b05bc6..c6b118e2 100644 --- a/src/components/scans/ScansOverview.svelte +++ b/src/components/scans/ScansOverview.svelte @@ -182,7 +182,6 @@ const scans = await ScanService.scanControllerGetAll(page, 500); if (scans.length == 0) { page = -2; - dataLoaded = true; } current_scans = current_scans.concat(...scans); @@ -191,9 +190,7 @@ data: current_scans, })); - if (page == 0) { - dataLoaded = true; - } + dataLoaded = true; page++; } console.log("All scans loaded"); -- 2.47.2