diff --git a/src/components/cards/CardsOverview.svelte b/src/components/cards/CardsOverview.svelte index e23a3073..20a97ab0 100644 --- a/src/components/cards/CardsOverview.svelte +++ b/src/components/cards/CardsOverview.svelte @@ -3,6 +3,7 @@ import { RunnerCardService } from "@odit/lfk-client-js"; import store from "../../store"; import Toastify from "toastify-js"; + import { DataHandler, Datatable, Th, ThFilter } from "@vincjo/datatables"; import CardsEmptyState from "./CardsEmptyState.svelte"; import CardDetailModal from "./CardDetailModal.svelte"; import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte"; @@ -11,271 +12,192 @@ export let editable = {}; export let original_data = {}; export let current_cards = []; - $: filtered_cards = current_cards.filter(function (c) { - if ( - c.code.toLowerCase().includes(searchvalue_lowercase) || - c.runner?.firstname.toLowerCase().includes(searchvalue_lowercase) || - c.runner?.middlename.toLowerCase().includes(searchvalue_lowercase) || - c.runner?.lastname.toLowerCase().includes(searchvalue_lowercase) || - should_display_based_on_id(c.id) - ) { - return true; - } - }); - $: searchvalue = ""; - $: searchvalue_lowercase = searchvalue.toLowerCase(); + const handler = new DataHandler(current_cards, { rowsPerPage: 50 }); + const rows = handler.getRows(); $: active_deletes = []; - $: cards_show = current_cards.some((r) => r.is_selected === true); - $: generate_cards = current_cards.filter((r) => r.is_selected === true); + $: cards_show = generate_cards.length > 0; + $: generate_cards = []; const cards_promise = RunnerCardService.runnerCardControllerGetAll().then( (val) => { current_cards = val; + handler.setRows(val); } ); - function should_display_based_on_id(id) { - if (searchvalue.toString().slice(-1) === "*") { - return id.toString().startsWith(searchvalue.replace("*", "")); - } - return id.toString() === searchvalue; - } const getRunnerLabel = (option) => - option?.firstname + " " + (option?.middlename || "") + " " + (option?.lastname || "{$_('non-blanko')}"); + option?.firstname + + " " + + (option?.middlename || "") + + " " + + (option?.lastname || "{$_('non-blanko')}"); function open_edit_modal(card) { - if(card.runner?.id){ + if (card.runner?.id) { runner = Object.assign( { runner }, { label: getRunnerLabel(card.runner), value: card.runner } ); card.runner = card.runner.id; - } - else{ - card.runner=null; - runner = null + } else { + card.runner = null; + runner = null; } editable = Object.assign(editable, card); original_data = Object.assign(original_data, card); edit_modal_open = true; } -// ----------------- - let scrollTop = 0; - $: rendered = filtered_cards; - let innerHeight = 0; - let ele; - $: updateSlice(scrollTop); - $: innerHeight = `${filtered_cards.length * 25}px`; - $: if (ele) updateSlice(); - function updateSlice() { - const height = ele ? parseInt(ele.clientHeight) : 100; - const init = scrollTop / 25; - const end = Math.ceil((scrollTop + height) / 25); - rendered = filtered_cards.slice(init, end + 15); - } - function updateScroll($event) { - scrollTop = $event.target.scrollTop; - } - - -{#if store.state.jwtinfo.userdetails.permissions.includes('CARD:UPDATE')} +{#if store.state.jwtinfo.userdetails.permissions.includes("CARD:UPDATE")} + bind:original_data + /> {/if} -{#if store.state.jwtinfo.userdetails.permissions.includes('CARD:GET')} +{#if store.state.jwtinfo.userdetails.permissions.includes("CARD:GET")} {#await cards_promise} {:then} {#if current_cards.length === 0} {:else} - -
- -
-
- - +
+ +
+ +
+ - - - - - + + + + + + + - - {#each filtered_cards as card, index} - {#if card.code - .toLowerCase() - .includes( - searchvalue.toLowerCase() - ) || card.runner?.firstname - .toLowerCase() - .includes( - searchvalue.toLowerCase() - ) || card.runner?.middlename - .toLowerCase() - .includes( - searchvalue.toLowerCase() - ) || card.runner?.lastname - .toLowerCase() - .includes( - searchvalue.toLowerCase() - ) || should_display_based_on_id(card.id)} - - - - - - - {#if active_deletes[card.id] === true} - - {:else} - - {/if} - - {/if} - {/each} + + {#each $rows as row} + + + + + + + + {/each}
- + { - const newstate = !current_cards.some((r) => r.is_selected === true); - current_cards = current_cards.map((r) => { - r.is_selected = newstate; - return r; - }); + if (generate_cards.length != current_cards.length) { + generate_cards = current_cards; + } else { + generate_cards = []; + } }} - class="underline cursor-pointer select-none">{#if current_cards.some((r) => r.is_selected === true)} - {$_('deselect-all')} - {:else}{$_('select-all')}{/if} - - - {$_('code')} - - {$_('runner')} - - {$_('status')} - - {$_('action')} + /> {$_('code')}{$_('runner')}{$_('status')}{$_("action")}
+ + + +
- - -
{card.code}
-
-
- {#if card.runner} - {card.runner.firstname} - {card.runner.middlename || ''} - {card.runner.lastname} - {:else}{$_('non-blanko')}{/if} -
-
-
- {#if card.enabled} - {$_('enabled')} - {:else} - {$_('disabled')} - {/if} -
-
- - - - - {#if store.state.jwtinfo.userdetails.permissions.includes('CARD:DELETE')} - - {/if} -
+ i.id == row.id) + .length > 0} + on:click={() => { + if ( + generate_cards.findIndex((i) => i.id == row.id) == -1 + ) { + generate_cards.push(row); + generate_cards = generate_cards; + } else { + generate_cards = generate_cards.filter( + (r) => r.id != row.id + ); + } + console.log(generate_cards); + }} + /> + {row.code}{row.runner}{row.enabled} + {#if active_deletes[row.id] === true} + + + {:else} + {$_("details")} + {#if store.state.jwtinfo.userdetails.permissions.includes("CARD:DELETE")} + + {/if} + {/if} +
-
+ {/if} {:catch error}
- {$_('general_promise_error')} + {$_("general_promise_error")} {error}
{/await} {/if} + +