@@ -31,12 +77,67 @@ export function IssueDetailPane({
{issueData.Issue.title}
{issueData.Issue.description}
- {issueData.Assignee && (
-
- Assignee:
-
-
- )}
+
+
Assignee:
+
+
diff --git a/packages/frontend/src/lib/server/issue/index.ts b/packages/frontend/src/lib/server/issue/index.ts
index 4ce8fcc..67080ff 100644
--- a/packages/frontend/src/lib/server/issue/index.ts
+++ b/packages/frontend/src/lib/server/issue/index.ts
@@ -1,2 +1,3 @@
export { byProject } from "@/lib/server/issue/byProject";
export { create } from "@/lib/server/issue/create";
+export { update } from "@/lib/server/issue/update";
diff --git a/packages/frontend/src/lib/server/issue/update.ts b/packages/frontend/src/lib/server/issue/update.ts
new file mode 100644
index 0000000..acc698e
--- /dev/null
+++ b/packages/frontend/src/lib/server/issue/update.ts
@@ -0,0 +1,36 @@
+import { getAuthHeaders, getServerURL } from "@/lib/utils";
+import type { ServerQueryInput } from "..";
+
+export async function update({
+ issueId,
+ title,
+ description,
+ assigneeId,
+ onSuccess,
+ onError,
+}: {
+ issueId: number;
+ title?: string;
+ description?: string;
+ assigneeId?: number | null;
+} & ServerQueryInput) {
+ const url = new URL(`${getServerURL()}/issue/update`);
+ url.searchParams.set("id", `${issueId}`);
+ if (title !== undefined) url.searchParams.set("title", title);
+ if (description !== undefined) url.searchParams.set("description", description);
+ if (assigneeId !== undefined) {
+ url.searchParams.set("assigneeId", assigneeId === null ? "null" : `${assigneeId}`);
+ }
+
+ const res = await fetch(url.toString(), {
+ headers: getAuthHeaders(),
+ });
+
+ if (!res.ok) {
+ const error = await res.text();
+ onError?.(error || `failed to update issue (${res.status})`);
+ } else {
+ const data = await res.json();
+ onSuccess?.(data, res);
+ }
+}
diff --git a/todo.md b/todo.md
index 552a6bc..f41ff4f 100644
--- a/todo.md
+++ b/todo.md
@@ -1,8 +1,6 @@
- org settings
- sprints
- issues
- - issue creator
- - issue assignee
- deadline
- comments
- status