working on kanban filter and tag sorting
This commit is contained in:
@@ -19,6 +19,8 @@
|
|||||||
let router = useTinyRouter();
|
let router = useTinyRouter();
|
||||||
let states = $state(null);
|
let states = $state(null);
|
||||||
let tasks = $state({});
|
let tasks = $state({});
|
||||||
|
let filter_input = $state('');
|
||||||
|
let filter = $derived(filter_input.toLowerCase());
|
||||||
let users = {};
|
let users = {};
|
||||||
|
|
||||||
let columns = $derived(states?Object.keys(states).length+1:1);
|
let columns = $derived(states?Object.keys(states).length+1:1);
|
||||||
@@ -184,6 +186,10 @@
|
|||||||
|
|
||||||
{#if ready}
|
{#if ready}
|
||||||
<div class="kanban" style="display: grid; grid-template-columns: {`repeat(${columns}, auto)`}">
|
<div class="kanban" style="display: grid; grid-template-columns: {`repeat(${columns}, auto)`}">
|
||||||
|
<span class="filter">
|
||||||
|
<input type="text" bind:value={filter_input} />
|
||||||
|
{t('filter')}
|
||||||
|
</span>
|
||||||
<div class="head">{t('user')}</div>
|
<div class="head">{t('user')}</div>
|
||||||
{#if states}
|
{#if states}
|
||||||
{#each Object.entries(states) as [sid,state]}
|
{#each Object.entries(states) as [sid,state]}
|
||||||
@@ -196,7 +202,9 @@
|
|||||||
<div class={[state, highlight.user == uid && highlight.state == state ? 'highlight':'']} ondragover={ev => hover(ev,uid,state)} ondrop={ev => drop(uid,state)} >
|
<div class={[state, highlight.user == uid && highlight.state == state ? 'highlight':'']} ondragover={ev => hover(ev,uid,state)} ondrop={ev => drop(uid,state)} >
|
||||||
{#if stateList[state]}
|
{#if stateList[state]}
|
||||||
{#each Object.values(stateList[state]).sort((a,b) => a.name.localeCompare(b.name)) as task}
|
{#each Object.values(stateList[state]).sort((a,b) => a.name.localeCompare(b.name)) as task}
|
||||||
|
{#if !filter || task.name.toLowerCase().includes(filter) || (task.tags && task.tags.filter(tag => tag.toLowerCase().includes(filter)).length)}
|
||||||
<Card onclick={() => router.navigate(`/task/${task.id}/view`)} ondragstart={ev => dragged=task} {task} />
|
<Card onclick={() => router.navigate(`/task/${task.id}/view`)} ondragstart={ev => dragged=task} {task} />
|
||||||
|
{/if}
|
||||||
{/each}
|
{/each}
|
||||||
{/if}
|
{/if}
|
||||||
<div class="add_task">
|
<div class="add_task">
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
tag = await resp.text();
|
tag = await resp.text();
|
||||||
tags.push(tag);
|
tags.push(tag);
|
||||||
|
tags = tags.sort();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error = await resp.text();
|
||||||
}
|
}
|
||||||
@@ -49,6 +50,7 @@
|
|||||||
const resp = await fetch(url,{credentials:'include'});
|
const resp = await fetch(url,{credentials:'include'});
|
||||||
if (resp.ok) {
|
if (resp.ok) {
|
||||||
tags = await resp.json();
|
tags = await resp.json();
|
||||||
|
tags = tags.sort();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error = await resp.text();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,6 +70,7 @@
|
|||||||
|
|
||||||
"failed": "fehlgeschlagen",
|
"failed": "fehlgeschlagen",
|
||||||
"files": "Dateien",
|
"files": "Dateien",
|
||||||
|
"filter": "Filter",
|
||||||
"footer": "Fuß-Text",
|
"footer": "Fuß-Text",
|
||||||
"foreign_id": "externe Kennung",
|
"foreign_id": "externe Kennung",
|
||||||
"forgot_pass" : "Password vergessen?",
|
"forgot_pass" : "Password vergessen?",
|
||||||
|
|||||||
@@ -198,6 +198,12 @@ textarea{
|
|||||||
z-index: 20;
|
z-index: 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.kanban .filter{
|
||||||
|
position: absolute;
|
||||||
|
top: 60px;
|
||||||
|
right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
.project th,
|
.project th,
|
||||||
.task th{
|
.task th{
|
||||||
text-align: right;
|
text-align: right;
|
||||||
|
|||||||
Reference in New Issue
Block a user