diff --git a/src/components/scans/ScansOverview.svelte b/src/components/scans/ScansOverview.svelte
index 96fa9ba7..dd2d004a 100644
--- a/src/components/scans/ScansOverview.svelte
+++ b/src/components/scans/ScansOverview.svelte
@@ -2,19 +2,42 @@
import { _ } from "svelte-i18n";
import { ScanService, TrackService } from "@odit/lfk-client-js";
import store from "../../store";
+ import {
+ createSvelteTable,
+ flexRender,
+ getCoreRowModel,
+ getFilteredRowModel,
+ getPaginationRowModel,
+ getSortedRowModel,
+ renderComponent,
+ } from "@tanstack/svelte-table";
+ import { onMount } from "svelte";
+ import { writable } from "svelte/store";
import Toastify from "toastify-js";
+ import TableBottom from "../shared/TableBottom.svelte";
+ import TableHeader from "../shared/TableHeader.svelte";
import ScansEmptyState from "./ScansEmptyState.svelte";
- import ThFilterRunner from "./ThFilterRunner.svelte";
- import ThFilterTrack from "./ThFilterTrack.svelte";
+ import InputElement from "../shared/InputElement.svelte";
+ import TableActions from "../shared/TableActions.svelte";
+
+ $: selectedScans =
+ $table?.getSelectedRowModel().rows.map((row) => row.original) || [];
+ $: selected =
+ $table?.getSelectedRowModel().rows.map((row) => row.index) || [];
+
+ $: active_delete = undefined;
$: active_deletes = [];
export let current_scans = [];
- const handler = new DataHandler(current_scans, { rowsPerPage: 20 });
- const rows = handler.getRows();
const scans_promise = ScanService.scanControllerGetAll().then((val) => {
current_scans = val;
- handler.setRows(val);
+ // handler.setRows(val);
+ current_scans = val;
+ options.update((options) => ({
+ ...options,
+ data: current_scans,
+ }));
});
- $: allTracks = [];
+ let allTracks = [];
TrackService.trackControllerGetAll().then((val) => {
allTracks = val;
});
@@ -38,6 +61,85 @@
Math.floor(laptime / 60) * 60
}`;
}
+
+ const columns = [
+ {
+ accessorKey: "id",
+ header: () => "id",
+ filterFn: `equalsString`,
+ },
+ {
+ accessorKey: "runner",
+ header: () => $_("runner"),
+ cell: (info) => {
+ const runner = info.getValue();
+ return `#${runner.id} - ${runner.firstname} ${runner.lastname}`;
+ },
+ enableColumnFilter: true,
+ },
+ {
+ accessorKey: "lapTime",
+ header: () => $_("laptime"),
+ cell: (info) => {
+ return format_laptime(info.getValue());
+ },
+ enableColumnFilter: false,
+ },
+ {
+ accessorKey: "distance",
+ header: () => $_("distance"),
+ cell: (info) => {
+ if (info.getValue() < 1000) {
+ return `${info.getValue()}m`;
+ }
+ return `${(info.getValue() / 1000).toFixed(1)}km`;
+ },
+ enableColumnFilter: false,
+ },
+ {
+ accessorKey: "track",
+ header: () => $_("track"),
+ cell: (info) => {
+ const track = info.getValue();
+ return track.name;
+ },
+ enableColumnFilter: true,
+ },
+ {
+ accessorKey: "actions",
+ header: () => $_("action"),
+ cell: (info) => {
+ return renderComponent(TableActions, {
+ detailsLink: `./${info.row.original.id}`,
+ deleteAction: () => {
+ active_delete =
+ current_scans[
+ current_scans.findIndex((r) => r.id == info.row.original.id)
+ ];
+ },
+ deleteEnabled:
+ store.state.jwtinfo.userdetails.permissions.includes("SCAN:DELETE"),
+ });
+ },
+ enableColumnFilter: false,
+ enableSorting: false,
+ },
+ ];
+ const options = writable({
+ data: [],
+ columns: columns,
+ initialState: {
+ pagination: {
+ pageSize: 50,
+ },
+ },
+ enableRowSelection: true,
+ getCoreRowModel: getCoreRowModel(),
+ getFilteredRowModel: getFilteredRowModel(),
+ getPaginationRowModel: getPaginationRowModel(),
+ getSortedRowModel: getSortedRowModel(),
+ });
+ const table = createSvelteTable(options);
{#if store.state.jwtinfo.userdetails.permissions.includes("SCAN:GET")}
@@ -53,171 +155,51 @@
{#if current_scans.length === 0}
| ID | -- {$_("runner")} - | -- {$_("distance")} - | -- {$_("track")} - | -- {$_("laptime")} - | -- {$_("status")} - | -- {$_("action")} - | -||
|---|---|---|---|---|---|---|---|---|
| - | - | - - | - |
|
+ |
+ {#each headerGroup.headers as header}
+ ||||||||
|---|---|---|---|---|---|---|---|---|
|
-
- {scan.id}
-
+ | ||||||||
|
+ |
- - - | -
-
- {#if scan.distance < 1000}
- {scan.distance}m
- {:else}{scan.distance / 1000}km{/if}
-
- |
-
-
- {#if scan.track}
- {scan.track.name}
-
- {/if}
-
- |
-
- {#if scan.responseType === "TRACKSCAN"}
-
- {format_laptime(scan.lapTime)}
-
- {:else}
-
- {$_("scan-with-fixed-distance")}
-
- {/if}
- |
-
-
- {#if scan.valid}
- {$_("valid")}
- {:else}
- {$_("invalid")}
- {/if}
-
- |
-
- {#if active_deletes[scan.id] === true}
- - - + {#each row.getVisibleCells() as cell} + |
+ |
- {:else}
- - {$_("details")} - {#if store.state.jwtinfo.userdetails.permissions.includes("SCAN:DELETE")} - - {/if} - | - {/if} + {/each}