feat: topic page

This commit is contained in:
2025-01-25 19:53:15 +01:00
parent 4631b44d82
commit 5ded908c99
3 changed files with 56 additions and 18 deletions

View File

@@ -80,26 +80,32 @@
<div class="flex justify-center flex-wrap gap-2 my-1 relative"> <div class="flex justify-center flex-wrap gap-2 my-1 relative">
{#if data.task?.tasksToTopics} {#if data.task?.tasksToTopics}
{#each data.task?.tasksToTopics as topic} {#each data.task?.tasksToTopics as topic}
<div <a href="/progress/topics/{topic.topic.id}">
class="relative bg-blue-500 text-white rounded-full px-2 py-1 shadow font-medium hover:bg-blue-600 transition cursor-pointer group" <div
title="Click for more details about {topic.topic.name}" class="relative bg-blue-500 text-white rounded-full px-2 py-1 shadow font-medium hover:bg-blue-600 transition cursor-pointer group"
> title="Click for more details about {topic.topic.name}"
{topic.topic.name}
<form
action="?/removeTopic"
method="post"
class="absolute -top-1 -right-1 opacity-0 group-hover:opacity-100 transition"
> >
<input type="hidden" name="topic-id" value={topic.topic.id} /> {topic.topic.name}
<button <form
type="submit" action="?/removeTopic"
class="bg-white text-red-500 hover:text-red-700 hover:bg-red-50 font-bold rounded-full w-5 h-5 flex items-center justify-center shadow-sm" method="post"
aria-label="Remove topic" class="absolute -top-1 -right-1 opacity-0 group-hover:opacity-100 transition"
> >
&times; <input type="hidden" name="topic-id" value={topic.topic.id} />
</button> <button
</form> type="submit"
</div> onclick={(e) => {
e.preventDefault();
e.target.closest('form')?.submit();
}}
class="bg-white text-red-500 hover:text-red-700 hover:bg-red-50 font-bold rounded-full w-5 h-5 flex items-center justify-center shadow-sm"
aria-label="Remove topic"
>
&times;
</button>
</form>
</div>
</a>
{/each} {/each}
{/if} {/if}
</div> </div>

View File

@@ -0,0 +1,18 @@
import { db } from '$lib/db';
import { topics } from '$lib/db/schema';
import { eq } from 'drizzle-orm';
export const load = async ({ params }) => {
return {
topic: await db.query.topics.findFirst({
with: {
topicsToTasks: {
with: {
task: true
}
}
},
where: eq(topics.id, params.id)
})
};
};

View File

@@ -0,0 +1,14 @@
<script lang="ts">
let { data } = $props();
</script>
<h1 class="my-4 text-2xl font-bold text-center">{data.topic.name}</h1>
<h2 class="text-xl font-bold">Tasks ({data.topic?.topicsToTasks.length})</h2>
{#each data.topic?.topicsToTasks as task}
<div class="flex gap-4 items-center relative">
<a href="/progress/{task.task.id}" class="text-lg font-semibold hover:underline"
>{task.task.name}</a
>
</div>
{/each}