|
|
|
|
@ -2,6 +2,7 @@
|
|
|
|
|
import TaskItem from "$lib/ui/data/TaskItem.svelte";
|
|
|
|
|
import Card from "$lib/ui/layout/Card.svelte";
|
|
|
|
|
import { onMount } from "svelte";
|
|
|
|
|
import { slide, fade } from "svelte/transition";
|
|
|
|
|
|
|
|
|
|
type GroupItem = {
|
|
|
|
|
id: string;
|
|
|
|
|
@ -162,23 +163,27 @@
|
|
|
|
|
<span class="badge warn">🙅♂️: {g.counts.unassigned}</span>
|
|
|
|
|
</span>
|
|
|
|
|
</summary>
|
|
|
|
|
<Card>
|
|
|
|
|
<ul class="list">
|
|
|
|
|
{#each itemsByGroup[g.id] || [] as t (t.id)}
|
|
|
|
|
<TaskItem
|
|
|
|
|
id={t.id}
|
|
|
|
|
description={t.description}
|
|
|
|
|
due_date={t.due_date}
|
|
|
|
|
display_code={t.display_code}
|
|
|
|
|
assignees={t.assignees || []}
|
|
|
|
|
currentUserId={data.userId}
|
|
|
|
|
groupName={g.name ?? g.id}
|
|
|
|
|
groupId={t.group_id ?? g.id}
|
|
|
|
|
on:changed={(e) => updateGroupTask(g.id, e.detail)}
|
|
|
|
|
/>
|
|
|
|
|
{/each}
|
|
|
|
|
</ul>
|
|
|
|
|
</Card>
|
|
|
|
|
{#if isOpen(g.id)}
|
|
|
|
|
<div in:slide={{ duration: 180 }} out:slide={{ duration: 180 }}>
|
|
|
|
|
<Card in:fade={{ duration: 120 }} out:fade={{ duration: 120 }}>
|
|
|
|
|
<ul class="list">
|
|
|
|
|
{#each itemsByGroup[g.id] || [] as t (t.id)}
|
|
|
|
|
<TaskItem
|
|
|
|
|
id={t.id}
|
|
|
|
|
description={t.description}
|
|
|
|
|
due_date={t.due_date}
|
|
|
|
|
display_code={t.display_code}
|
|
|
|
|
assignees={t.assignees || []}
|
|
|
|
|
currentUserId={data.userId}
|
|
|
|
|
groupName={g.name ?? g.id}
|
|
|
|
|
groupId={t.group_id ?? g.id}
|
|
|
|
|
on:changed={(e) => updateGroupTask(g.id, e.detail)}
|
|
|
|
|
/>
|
|
|
|
|
{/each}
|
|
|
|
|
</ul>
|
|
|
|
|
</Card>
|
|
|
|
|
</div>
|
|
|
|
|
{/if}
|
|
|
|
|
</details>
|
|
|
|
|
{/each}
|
|
|
|
|
{/if}
|
|
|
|
|
|