diff --git a/src/components/cards/CardRunner.svelte b/src/components/cards/CardRunner.svelte
new file mode 100644
index 00000000..4b87829e
--- /dev/null
+++ b/src/components/cards/CardRunner.svelte
@@ -0,0 +1,16 @@
+
+
+{#if !runner}
+ {$_("non-blanko")}
+{:else}
+
+ {#if runner.middlename}
+ {runner.firstname} {runner.middlename} {runner.lastname}
+ {:else}
+ {runner.firstname} {runner.lastname}
+ {/if}
+
+{/if}
diff --git a/src/components/cards/CardStatus.svelte b/src/components/cards/CardStatus.svelte
new file mode 100644
index 00000000..6e90f495
--- /dev/null
+++ b/src/components/cards/CardStatus.svelte
@@ -0,0 +1,16 @@
+
+
+{#if enabled}
+ {$_("enabled")}
+{:else}
+ {$_("disabled")}
+{/if}
diff --git a/src/components/cards/CardsOverview.svelte b/src/components/cards/CardsOverview.svelte
index 04dad4c6..8eea5f76 100644
--- a/src/components/cards/CardsOverview.svelte
+++ b/src/components/cards/CardsOverview.svelte
@@ -6,22 +6,45 @@
import CardsEmptyState from "./CardsEmptyState.svelte";
import CardDetailModal from "./CardDetailModal.svelte";
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
- import ThFilterStatus from "./ThFilterStatus.svelte";
- import ThFilterRunner from "./ThFilterRunner.svelte";
+ import InputElement from "../shared/InputElement.svelte";
+ import { groupFilter } from "../shared/tablefilters";
+ import {
+ createSvelteTable,
+ flexRender,
+ getCoreRowModel,
+ getFilteredRowModel,
+ getPaginationRowModel,
+ getSortedRowModel,
+ renderComponent,
+ } from "@tanstack/svelte-table";
+ import { writable } from "svelte/store";
+ import TableBottom from "../shared/TableBottom.svelte";
+ import TableActions from "../shared/TableActions.svelte";
+ import TableHeader from "../shared/TableHeader.svelte";
+ import CardStatus from "./CardStatus.svelte";
+ import CardRunner from "./CardRunner.svelte";
+
export let edit_modal_open = false;
export let runner = {};
export let editable = {};
export let original_data = {};
export let current_cards = [];
- const handler = new DataHandler(current_cards, { rowsPerPage: 50 });
- const rows = handler.getRows();
- $: active_deletes = [];
+
+ $: selected =
+ $table?.getSelectedRowModel().rows.map((row) => row.index) || [];
+ $: selectedCards =
+ $table?.getSelectedRowModel().rows.map((row) => row.original) || [];
+ $: active_delete = undefined;
$: cards_show = generate_cards.length > 0;
$: generate_cards = [];
+
const cards_promise = RunnerCardService.runnerCardControllerGetAll().then(
(val) => {
current_cards = val;
- handler.setRows(val);
+ options.update((options) => ({
+ ...options,
+ data: current_cards,
+ }));
}
);
const getRunnerLabel = (option) =>
@@ -30,6 +53,68 @@
(option?.middlename || "") +
" " +
(option?.lastname || "{$_('non-blanko')}");
+
+ const columns = [
+ {
+ accessorKey: "id",
+ header: () => "id",
+ filterFn: `equalsString`,
+ },
+ {
+ accessorKey: "runner",
+ header: () => $_("name"),
+ cell: (info) => {
+ return renderComponent(CardRunner, { runner: info.getValue() });
+ },
+ filterFn: `includesString`,
+ },
+ {
+ accessorKey: "enabled",
+ cell: (info) => {
+ return renderComponent(CardStatus, { enabled: info.getValue() });
+ },
+ header: () => $_("status"),
+ filterFn: `includesString`,
+ },
+ {
+ accessorKey: "actions",
+ header: () => $_("action"),
+ cell: (info) => {
+ return renderComponent(TableActions, {
+ detailsLink: `./${info.row.original.id}`,
+ deleteAction: () => {
+ active_delete =
+ current_cards[
+ current_cards.findIndex((r) => r.id == info.row.original.id)
+ ];
+ },
+ deleteEnabled:
+ store.state.jwtinfo.userdetails.permissions.includes("CARD:DELETE"),
+ });
+ },
+ enableColumnFilter: false,
+ enableSorting: false,
+ },
+ ];
+ const options = writable({
+ data: [],
+ columns: columns,
+ filterFns: {
+ group: groupFilter,
+ },
+ initialState: {
+ pagination: {
+ pageSize: 50,
+ },
+ },
+ enableRowSelection: true,
+ getCoreRowModel: getCoreRowModel(),
+ getFilteredRowModel: getFilteredRowModel(),
+ getPaginationRowModel: getPaginationRowModel(),
+ getSortedRowModel: getSortedRowModel(),
+ });
+ const table = createSvelteTable(options);
+
function open_edit_modal(card) {
if (card.runner?.id) {
runner = Object.assign(
@@ -54,7 +139,9 @@
bind:runner
bind:editable
bind:original_data
- on:dataUpdated={handler.setRows(current_cards)}
+ on:dataUpdated={() => {
+ //TODO:
+ }}
/>
{/if}
@@ -112,131 +199,49 @@
{/if}
- { - if (generate_cards.length != current_cards.length) { - generate_cards = current_cards; - } else { - generate_cards = []; - } - }} - /> - | -{$_("code")} | -{$_("runner")} | -{$_("status")} | -{$_("action")} | -|
---|---|---|---|---|---|
- | - | ||||
+ |
+ {#each headerGroup.headers as header}
+ |||||
-
+ |
- {row.code} | -- {#if row.runner} - {row.runner.firstname} - {row.runner.middlename || ""} - {row.runner.lastname} - {:else}{$_("non-blanko")}{/if} - | -- {#if row.enabled} - {$_("enabled")} - {:else} - {$_("disabled")} - {/if} - | -- {#if active_deletes[row.id] === true} - - - {:else} - - {#if store.state.jwtinfo.userdetails.permissions.includes("CARD:DELETE")} - - {/if} - {/if} - | + {#each row.getVisibleCells() as cell} +
+ |
+ {/each}