add group filtering to table

ref #146
This commit is contained in:
Philipp Dormann 2023-02-16 15:05:41 +01:00
parent 81b8fbf4e3
commit 14d64b6070
2 changed files with 86 additions and 56 deletions

View File

@ -5,25 +5,20 @@
RunnerTeamService, RunnerTeamService,
RunnerOrganizationService, RunnerOrganizationService,
} from "@odit/lfk-client-js"; } from "@odit/lfk-client-js";
import ThFilterGroup from "./ThFilterGroup.svelte";
import { DataHandler, Datatable, Th, ThFilter } from "@vincjo/datatables";
import store from "../../store"; import store from "../../store";
import RunnersEmptyState from "./RunnersEmptyState.svelte";
import Select from "svelte-select";
import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte"; import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte";
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";
let pageLoaded = false;
$: searchvalue = "";
$: active_deletes = []; $: active_deletes = [];
export let current_runners = []; export let current_runners = [];
const handler = new DataHandler(current_runners, { rowsPerPage: 50 });
const rows = handler.getRows();
const runners_promise = RunnerService.runnerControllerGetAll().then((val) => { const runners_promise = RunnerService.runnerControllerGetAll().then((val) => {
console.log(val);
current_runners = val; current_runners = val;
pageLoaded = true;
}); });
$: selectedFilter_teams = null;
$: selectedFilter = null;
$: filter__teams = selectedFilter_teams || [];
$: filter__orgs = selectedFilter || [];
$: filterGroupIDs = filter__teams.concat(filter__orgs).map((i) => i.value);
$: sponsoring_contracts_show = current_runners.some( $: sponsoring_contracts_show = current_runners.some(
(r) => r.is_selected === true (r) => r.is_selected === true
); );
@ -47,10 +42,6 @@
RunnerOrganizationService.runnerOrganizationControllerGetAll().then((val) => { RunnerOrganizationService.runnerOrganizationControllerGetAll().then((val) => {
orgs = val; orgs = val;
}); });
// ===
import { DataHandler, Datatable, Th, ThFilter } from "@vincjo/datatables";
const handler = new DataHandler(current_runners, { rowsPerPage: 50 });
const rows = handler.getRows();
</script> </script>
{#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:GET")} {#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:GET")}
@ -98,7 +89,7 @@
<ThFilter {handler} filterBy="firstname" /> <ThFilter {handler} filterBy="firstname" />
<ThFilter {handler} filterBy="middlename" /> <ThFilter {handler} filterBy="middlename" />
<ThFilter {handler} filterBy="lastname" /> <ThFilter {handler} filterBy="lastname" />
<ThFilter {handler} filterBy="group" /> <ThFilterGroup groups={selectgroups} {handler} />
<th /> <th />
<th /> <th />
</tr> </tr>
@ -133,8 +124,7 @@
{/if}</td {/if}</td
> >
<td>{row.distance / 1000} km</td> <td>{row.distance / 1000} km</td>
<td /> <td>
<!-- <td>
{#if active_deletes[row.id] === true} {#if active_deletes[row.id] === true}
<button <button
on:click={() => { on:click={() => {
@ -159,7 +149,9 @@
>{$_("confirm-delete")}</button >{$_("confirm-delete")}</button
> >
{:else} {:else}
<a href="./{row.id}" class="text-indigo-600 hover:text-indigo-900" <a
href="./{row.id}"
class="text-indigo-600 hover:text-indigo-900"
>{$_("details")}</a >{$_("details")}</a
> >
{#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:DELETE")} {#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:DELETE")}
@ -173,7 +165,7 @@
> >
{/if} {/if}
{/if} {/if}
</td> --> </td>
</tr> </tr>
{/each} {/each}
</tbody> </tbody>
@ -186,6 +178,10 @@
thead { thead {
background: #fff; background: #fff;
} }
thead {
position: sticky;
inset-block-start: 0;
}
tbody td { tbody td {
padding: 4px; padding: 4px;
} }

View File

@ -0,0 +1,34 @@
<script>
export let groups;
export let handler;
let selected = "all";
</script>
<th>
<select
on:input={() => {
setTimeout(() => {
if (`${selected}`.trim()) {
const value = selected;
handler.filter(value, (runner) => {
if (
runner.group.id === value ||
runner?.group?.parentGroup?.id === value ||
value === "all"
)
return runner;
return "";
});
}
}, 50);
}}
bind:value={selected}
name="groupfilter"
id="groupfilter"
>
<option value="all">Alle</option>
{#each groups as g}
<option value={g.value}>{g.label}</option>
{/each}
</select>
</th>