diff --git a/src/routes/questions/[id]/+page.svelte b/src/routes/questions/[id]/+page.svelte
index 16d8184..d17441a 100644
--- a/src/routes/questions/[id]/+page.svelte
+++ b/src/routes/questions/[id]/+page.svelte
@@ -6,6 +6,7 @@
import { get } from "svelte/store";
import VoteStack from "$lib/components/VoteStack.svelte";
import Markdown from "$lib/components/Markdown.svelte";
+ import MarkdownEditor from "$lib/components/MarkdownEditor.svelte";
import { timeAgo } from "$lib/time";
import type { QuestionDoc, CommentDoc, TopicDoc, UnitDoc } from "$lib/types";
@@ -20,6 +21,12 @@
let answerError = $state("");
let answerLoading = $state(false);
+ let editMode = $state(false);
+ let editTitle = $state("");
+ let editContent = $state("");
+ let editError = $state("");
+ let editLoading = $state(false);
+
onMount(async () => {
const id = page.params.id;
const result = await query("details:getQuestionWithDetails", { id });
@@ -73,6 +80,55 @@
alert(err.message ?? "Failed");
}
}
+
+ function startEdit() {
+ if (!question) return;
+ editTitle = question.title;
+ editContent = question.content;
+ editError = "";
+ editMode = true;
+ }
+
+ function cancelEdit() {
+ editMode = false;
+ editError = "";
+ }
+
+ async function saveEdit() {
+ if (!question) return;
+ if (!editTitle.trim() || !editContent.trim()) {
+ editError = "Title and content are required";
+ return;
+ }
+ const token = getToken();
+ if (!token) {
+ editError = "You must be signed in";
+ return;
+ }
+
+ editLoading = true;
+ editError = "";
+ try {
+ await mutation("questions:update", {
+ token,
+ id: question._id,
+ title: editTitle.trim(),
+ content: editContent.trim(),
+ });
+ const updated = await query("details:getQuestionWithDetails", { id: question._id });
+ if (updated) {
+ question = { ...(updated as any), answers: undefined } as QuestionDoc;
+ topic = (updated as any).topic ?? null;
+ unit = (updated as any).unit ?? null;
+ answers = (updated as any).answers ?? [];
+ }
+ editMode = false;
+ } catch (err: any) {
+ editError = err.message ?? "Failed to save";
+ } finally {
+ editLoading = false;
+ }
+ }
@@ -95,28 +151,74 @@
{#if question.solved}
· Solved{/if}
-
- {question.title}
-
-
- {question.authorName} · {timeAgo(question.createdAt)}
- {#if isAuthor && !question.solved}
- ·
-
+ {#if editMode}
+
+ {:else}
+
+ {question.title}
+
+ {#if question.updatedAt > question.createdAt}
+ Edited
{/if}
-
+ {/if}
+ {#if !editMode}
+
+ {question.authorName} · {timeAgo(question.createdAt)}
+ {#if isAuthor}
+ ·
+
+ {#if !question.solved}
+ ·
+
+ {/if}
+ {/if}
+
+ {/if}