fix: preserve file editor position on save (#1057)

This commit is contained in:
ZacharyZcR
2026-07-16 11:52:12 +08:00
committed by GitHub
parent b2328ce2f7
commit 7da5c24457
2 changed files with 9 additions and 2 deletions
@@ -88,6 +88,7 @@ interface FileViewerProps {
content?: string; content?: string;
savedContent?: string; savedContent?: string;
isLoading?: boolean; isLoading?: boolean;
isSaving?: boolean;
isEditable?: boolean; isEditable?: boolean;
resetKey?: number; resetKey?: number;
onContentChange?: (content: string) => void; onContentChange?: (content: string) => void;
@@ -271,6 +272,7 @@ export function FileViewer({
content = "", content = "",
savedContent = "", savedContent = "",
isLoading = false, isLoading = false,
isSaving = false,
isEditable = false, isEditable = false,
resetKey, resetKey,
onContentChange, onContentChange,
@@ -353,6 +355,7 @@ export function FileViewer({
}; };
const handleSave = () => { const handleSave = () => {
if (isSaving) return;
onSave?.(editedContent); onSave?.(editedContent);
}; };
@@ -490,6 +493,7 @@ export function FileViewer({
variant="outline" variant="outline"
size="sm" size="sm"
onClick={handleRevert} onClick={handleRevert}
disabled={isSaving}
className="flex items-center gap-2" className="flex items-center gap-2"
> >
<RotateCcw className="w-4 h-4" /> <RotateCcw className="w-4 h-4" />
@@ -499,6 +503,7 @@ export function FileViewer({
variant="default" variant="default"
size="sm" size="sm"
onClick={handleSave} onClick={handleSave}
disabled={isSaving}
className="flex items-center gap-2" className="flex items-center gap-2"
> >
<Save className="w-4 h-4" /> <Save className="w-4 h-4" />
@@ -81,6 +81,7 @@ export function FileWindow({
const [content, setContent] = useState<string>(""); const [content, setContent] = useState<string>("");
const [isLoading, setIsLoading] = useState(false); const [isLoading, setIsLoading] = useState(false);
const [isSaving, setIsSaving] = useState(false);
const [isEditable, setIsEditable] = useState(false); const [isEditable, setIsEditable] = useState(false);
const [pendingContent, setPendingContent] = useState<string>(""); const [pendingContent, setPendingContent] = useState<string>("");
const [resetKey, setResetKey] = useState(0); const [resetKey, setResetKey] = useState(0);
@@ -309,7 +310,7 @@ export function FileWindow({
const handleSave = async (newContent: string) => { const handleSave = async (newContent: string) => {
try { try {
setIsLoading(true); setIsSaving(true);
await ensureSSHConnection(); await ensureSSHConnection();
@@ -340,7 +341,7 @@ export function FileWindow({
); );
} }
} finally { } finally {
setIsLoading(false); setIsSaving(false);
} }
}; };
@@ -553,6 +554,7 @@ export function FileWindow({
content={pendingContent || content} content={pendingContent || content}
savedContent={content} savedContent={content}
isLoading={isLoading} isLoading={isLoading}
isSaving={isSaving}
resetKey={resetKey} resetKey={resetKey}
onRevert={handleRevert} onRevert={handleRevert}
isEditable={isEditable} isEditable={isEditable}