diff --git a/apps/web/features/issues/components/issue-detail.tsx b/apps/web/features/issues/components/issue-detail.tsx
index f770639c..e7509aa9 100644
--- a/apps/web/features/issues/components/issue-detail.tsx
+++ b/apps/web/features/issues/components/issue-detail.tsx
@@ -1,6 +1,6 @@
"use client";
-import { useState, useEffect, useCallback } from "react";
+import { useState, useEffect, useCallback, useRef } from "react";
import { useDefaultLayout, usePanelRef } from "react-resizable-panels";
import Link from "next/link";
import { useRouter } from "next/navigation";
@@ -198,8 +198,8 @@ export function IssueDetail({ issueId, onDelete }: IssueDetailProps) {
const [loading, setLoading] = useState(true);
const [submitting, setSubmitting] = useState(false);
const [deleting, setDeleting] = useState(false);
- const [editingTitle, setEditingTitle] = useState(false);
const [titleDraft, setTitleDraft] = useState("");
+ const titleFocusedRef = useRef(false);
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
const [propertiesOpen, setPropertiesOpen] = useState(true);
const [detailsOpen, setDetailsOpen] = useState(true);
@@ -210,17 +210,22 @@ export function IssueDetail({ issueId, onDelete }: IssueDetailProps) {
useEffect(() => {
if (storeIssue) {
setIssue(storeIssue);
+ if (!titleFocusedRef.current) {
+ setTitleDraft(storeIssue.title);
+ }
}
}, [storeIssue]);
useEffect(() => {
setIssue(null);
+ setTitleDraft("");
setTimeline([]);
setSubscribers([]);
setLoading(true);
Promise.all([api.getIssue(id), api.listTimeline(id), api.listIssueSubscribers(id)])
.then(([iss, entries, subs]) => {
setIssue(iss);
+ setTitleDraft(iss.title);
setTimeline(entries);
setSubscribers(subs);
})
@@ -479,10 +484,6 @@ export function IssueDetail({ issueId, onDelete }: IssueDetailProps) {