|
|
|
@ -6,6 +6,9 @@ |
|
|
|
import { error, yikes } from '../../warn.svelte'; |
|
|
|
import { error, yikes } from '../../warn.svelte'; |
|
|
|
import { t } from '../../translations.svelte.js'; |
|
|
|
import { t } from '../../translations.svelte.js'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let filter = $state(null); |
|
|
|
|
|
|
|
let lower_filter = $derived(filter.toLowerCase()); |
|
|
|
|
|
|
|
let inverted_filter = $state(false); |
|
|
|
let projects = $state({}); |
|
|
|
let projects = $state({}); |
|
|
|
let router = useTinyRouter(); |
|
|
|
let router = useTinyRouter(); |
|
|
|
let tasks = $state(null); |
|
|
|
let tasks = $state(null); |
|
|
|
@ -44,6 +47,19 @@ |
|
|
|
router.navigate(`/task/${tid}/edit`); |
|
|
|
router.navigate(`/task/${tid}/edit`); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function filterApplies(task){ |
|
|
|
|
|
|
|
if (!filter) return !inverted_filter; |
|
|
|
|
|
|
|
if (task.name.toLowerCase().includes(lower_filter)) return !inverted_filter; |
|
|
|
|
|
|
|
if (task.description.source.toLowerCase().includes(lower_filter)) return !inverted_filter; |
|
|
|
|
|
|
|
if (projects[task.project_id].name.toLowerCase().includes(lower_filter)) return !inverted_filter; |
|
|
|
|
|
|
|
if (task.parent_task_id){ |
|
|
|
|
|
|
|
const parent = map[task.parent_task_id]; |
|
|
|
|
|
|
|
if (parent && parent.name.toLowerCase().includes(lower_filter)) return !inverted_filter; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return inverted_filter; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function go(module, id){ |
|
|
|
function go(module, id){ |
|
|
|
router.navigate(`/${module}/${id}/view`); |
|
|
|
router.navigate(`/${module}/${id}/view`); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -103,6 +119,17 @@ |
|
|
|
|
|
|
|
|
|
|
|
<fieldset> |
|
|
|
<fieldset> |
|
|
|
<legend>{loading ? t('loading_object',{object:t('task_list')}) : t('task_list')}</legend> |
|
|
|
<legend>{loading ? t('loading_object',{object:t('task_list')}) : t('task_list')}</legend> |
|
|
|
|
|
|
|
<div class="filter"> |
|
|
|
|
|
|
|
<label> |
|
|
|
|
|
|
|
{t('filter')}: <input type="text" bind:value={filter} > |
|
|
|
|
|
|
|
</label> |
|
|
|
|
|
|
|
{#if filter} |
|
|
|
|
|
|
|
<label> |
|
|
|
|
|
|
|
<input type="checkbox" bind:checked={inverted_filter} /> |
|
|
|
|
|
|
|
{t('invert_filter')} |
|
|
|
|
|
|
|
</label> |
|
|
|
|
|
|
|
{/if} |
|
|
|
|
|
|
|
</div> |
|
|
|
{#if tasks} |
|
|
|
{#if tasks} |
|
|
|
<table> |
|
|
|
<table> |
|
|
|
<thead> |
|
|
|
<thead> |
|
|
|
@ -117,7 +144,7 @@ |
|
|
|
</thead> |
|
|
|
</thead> |
|
|
|
<tbody> |
|
|
|
<tbody> |
|
|
|
{#each tasks as task,idx} |
|
|
|
{#each tasks as task,idx} |
|
|
|
{#if task.status > 10 && task.status < 60 && !task.no_index && projects[task.project_id]?.status < 60 && !hidden[task.id]} |
|
|
|
{#if task.status > 10 && task.status < 60 && !task.no_index && projects[task.project_id]?.status < 60 && !hidden[task.id] && filterApplies(task)} |
|
|
|
<tr> |
|
|
|
<tr> |
|
|
|
<td onclick={() => go('task',task.id)}>{task.name}</td> |
|
|
|
<td onclick={() => go('task',task.id)}>{task.name}</td> |
|
|
|
<td> |
|
|
|
<td> |
|
|
|
@ -138,7 +165,7 @@ |
|
|
|
<td> |
|
|
|
<td> |
|
|
|
<button class="symbol" onclick={() => edit(task.id)} title={t('edit')} ></button> |
|
|
|
<button class="symbol" onclick={() => edit(task.id)} title={t('edit')} ></button> |
|
|
|
<button class="symbol" onclick={() => postpone(idx)} title={t('postpone')} ></button> |
|
|
|
<button class="symbol" onclick={() => postpone(idx)} title={t('postpone')} ></button> |
|
|
|
<button class="symbol" onclick={() => open(idx)} title={t('open')}></button> |
|
|
|
<button class="symbol" onclick={() => open(idx)} title={t('state_open')}></button> |
|
|
|
<button class="symbol" onclick={() => start(idx)} title={t('start')} ></button> |
|
|
|
<button class="symbol" onclick={() => start(idx)} title={t('start')} ></button> |
|
|
|
<button class="symbol" onclick={() => complete(idx)} title={t('complete')} ></button> |
|
|
|
<button class="symbol" onclick={() => complete(idx)} title={t('complete')} ></button> |
|
|
|
<button class="symbol" onclick={() => abort(idx)} title={t('abort')} ></button> |
|
|
|
<button class="symbol" onclick={() => abort(idx)} title={t('abort')} ></button> |
|
|
|
|