added filter option to timetrack page
Build Docker Image / Docker-Build (push) Successful in 4m38s
Build Docker Image / Clean-Registry (push) Successful in 6s

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2026-09-07 22:08:03 +02:00
parent 067db76abe
commit 5d081916df
+23 -2
View File
@@ -15,12 +15,14 @@
let router = useTinyRouter();
let times = $state(null);
let filter = $state("");
let lc_filter = $derived(filter.toLowerCase());
let closed = $state(false);
let tasks = {};
let projects = {};
let project_filter = $state(null);
if (router.hasQueryParam('project')) project_filter = router.getQueryParam('project');
let sortedTimes = $derived.by(() => Object.values(times).filter(match_prj_filter).map(time => ({
let sortedTimes = $derived.by(() => Object.values(times).filter(match_prj_filter).filter(key_filter).map(time => ({
...time,
start: display(time.start_time),
end: display(time.end_time),
@@ -111,7 +113,17 @@
return false;
}
function key_filter(time){
if (!filter) return true;
if (users[time.user_id].name.toLowerCase().includes(lc_filter)) return true;
if (time.subject.toLowerCase().includes(lc_filter)) return true;
for (var tid of time.task_ids){
var task = tasks[tid];
if (tasks[tid].name.toLowerCase().includes(lc_filter)) return true;
if (projects[tasks[tid].project_id].name.toLowerCase().includes(lc_filter)) return true;
}
return false;
}
async function loadTimes(){
const url = api('time');
@@ -234,6 +246,11 @@
<title>Umbrella {t('timetracking')}</title>
</svelte:head>
<style>
.filter{
margin: 0 0 0 30%;
}
</style>
<h1>{t('timetracking')}</h1>
{#if times}
@@ -250,6 +267,10 @@
<input type="checkbox" bind:checked={closed} onchange={reload} />
{t('show_closed')}
</label>
<label class="filter">
<input type="text" bind:value={filter} />
{t('filter')}
</label>
</div>
<table class="timetracks">
<thead>