added filter option to timetrack page
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -15,12 +15,14 @@
|
|||||||
let router = useTinyRouter();
|
let router = useTinyRouter();
|
||||||
|
|
||||||
let times = $state(null);
|
let times = $state(null);
|
||||||
|
let filter = $state("");
|
||||||
|
let lc_filter = $derived(filter.toLowerCase());
|
||||||
let closed = $state(false);
|
let closed = $state(false);
|
||||||
let tasks = {};
|
let tasks = {};
|
||||||
let projects = {};
|
let projects = {};
|
||||||
let project_filter = $state(null);
|
let project_filter = $state(null);
|
||||||
if (router.hasQueryParam('project')) project_filter = router.getQueryParam('project');
|
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,
|
...time,
|
||||||
start: display(time.start_time),
|
start: display(time.start_time),
|
||||||
end: display(time.end_time),
|
end: display(time.end_time),
|
||||||
@@ -111,7 +113,17 @@
|
|||||||
return false;
|
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(){
|
async function loadTimes(){
|
||||||
const url = api('time');
|
const url = api('time');
|
||||||
@@ -234,6 +246,11 @@
|
|||||||
<title>Umbrella – {t('timetracking')}</title>
|
<title>Umbrella – {t('timetracking')}</title>
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.filter{
|
||||||
|
margin: 0 0 0 30%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
<h1>{t('timetracking')}</h1>
|
<h1>{t('timetracking')}</h1>
|
||||||
{#if times}
|
{#if times}
|
||||||
@@ -250,6 +267,10 @@
|
|||||||
<input type="checkbox" bind:checked={closed} onchange={reload} />
|
<input type="checkbox" bind:checked={closed} onchange={reload} />
|
||||||
{t('show_closed')}
|
{t('show_closed')}
|
||||||
</label>
|
</label>
|
||||||
|
<label class="filter">
|
||||||
|
<input type="text" bind:value={filter} />
|
||||||
|
{t('filter')}
|
||||||
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<table class="timetracks">
|
<table class="timetracks">
|
||||||
<thead>
|
<thead>
|
||||||
|
|||||||
Reference in New Issue
Block a user