feat(RunnersOverview): row selection

This commit is contained in:
Philipp Dormann 2023-04-12 16:18:45 +02:00
parent c5e8409079
commit 6993511c67
Signed by: philipp
GPG Key ID: 3BB9ADD52DCA4314
2 changed files with 44 additions and 0 deletions

View File

@ -11,6 +11,9 @@
getSortedRowModel, getSortedRowModel,
} from "@tanstack/svelte-table"; } from "@tanstack/svelte-table";
$: selected =
$table?.getSelectedRowModel().rows.map((row) => row.index) || [];
const columns = [ const columns = [
{ {
accessorKey: "id", accessorKey: "id",
@ -51,6 +54,7 @@
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte"; import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
import GenerateRunnerCertificates from "../pdf_generation/GenerateRunnerCertificates.svelte"; import GenerateRunnerCertificates from "../pdf_generation/GenerateRunnerCertificates.svelte";
import { onMount } from "svelte"; import { onMount } from "svelte";
import InputElement from "../shared/InputElement.svelte";
$: active_deletes = []; $: active_deletes = [];
let dataLoaded = false; let dataLoaded = false;
export let current_runners = []; export let current_runners = [];
@ -76,6 +80,7 @@
pageSize: tablePageCount[0], pageSize: tablePageCount[0],
}, },
}, },
enableRowSelection: true,
getCoreRowModel: getCoreRowModel(), getCoreRowModel: getCoreRowModel(),
getFilteredRowModel: getFilteredRowModel(), getFilteredRowModel: getFilteredRowModel(),
getPaginationRowModel: getPaginationRowModel(), getPaginationRowModel: getPaginationRowModel(),
@ -128,6 +133,14 @@
<thead> <thead>
{#each $table.getHeaderGroups() as headerGroup} {#each $table.getHeaderGroups() as headerGroup}
<tr class="select-none"> <tr class="select-none">
<th class="inset-y-0 left-0 px-4 py-2 text-left bg-stone-100 w-px">
<InputElement
type="checkbox"
checked={$table.getIsAllRowsSelected()}
indeterminate={$table.getIsSomeRowsSelected()}
on:change={() => $table.toggleAllRowsSelected()}
/>
</th>
{#each headerGroup.headers as header} {#each headerGroup.headers as header}
<th class="cursor-pointer"> <th class="cursor-pointer">
{#if !header.isPlaceholder} {#if !header.isPlaceholder}
@ -183,6 +196,13 @@
<tbody> <tbody>
{#each $table.getRowModel().rows as row} {#each $table.getRowModel().rows as row}
<tr> <tr>
<td class="inset-y-0 left-0 px-4 py-2">
<InputElement
type="checkbox"
checked={row.getIsSelected()}
on:change={() => row.toggleSelected()}
/>
</td>
{#each row.getVisibleCells() as cell} {#each row.getVisibleCells() as cell}
<td> <td>
<svelte:component <svelte:component
@ -260,6 +280,10 @@
</select> </select>
</div> </div>
<pre>{JSON.stringify($table.getState(), null, 2)}</pre> <pre>{JSON.stringify($table.getState(), null, 2)}</pre>
<div>
{Object.keys(selected).length} of{" "}
{$table.getPreFilteredRowModel().rows.length} Total Rows Selected
</div>
{/if} {/if}
{/if} {/if}

View File

@ -0,0 +1,20 @@
<script>
let className = "";
export { className as class };
export let type;
</script>
<input
class={`border-1 border-stone-300 border rounded-md shadow ${className} ${
type === "checkbox" && "w-5 h-5 text-orange-400"
}`}
{type}
{...$$restProps}
on:click
on:change
on:keydown
on:keyup
on:mouseenter
on:mouseleave
/>