avoid edge case with undo (#78)

This commit is contained in:
Will Chen
2025-05-02 16:27:45 -07:00
committed by GitHub
parent 4e4bf51bba
commit 30662118d7

View File

@@ -11,7 +11,7 @@ import { Loader2, RefreshCw, Undo } from "lucide-react";
import { Button } from "@/components/ui/button";
import { useVersions } from "@/hooks/useVersions";
import { selectedAppIdAtom } from "@/atoms/appAtoms";
import { showError } from "@/lib/toast";
import { showError, showSuccess } from "@/lib/toast";
import { IpcClient } from "@/ipc/ipc_client";
import { chatMessagesAtom } from "@/atoms/chatAtoms";
@@ -26,10 +26,11 @@ export const MessagesList = forwardRef<HTMLDivElement, MessagesListProps>(
const { versions, revertVersion } = useVersions(appId);
const { streamMessage, isStreaming, error, setError } = useStreamChat();
const { isAnyProviderSetup } = useSettings();
const selectedChatId = useAtomValue(selectedChatIdAtom);
const setMessages = useSetAtom(chatMessagesAtom);
const [isUndoLoading, setIsUndoLoading] = useState(false);
const [isRetryLoading, setIsRetryLoading] = useState(false);
const [selectedChatId, setSelectedChatId] = useAtom(selectedChatIdAtom);
return (
<div className="flex-1 overflow-y-auto p-4" ref={ref}>
@@ -45,9 +46,10 @@ export const MessagesList = forwardRef<HTMLDivElement, MessagesListProps>(
{!isAnyProviderSetup() && <SetupBanner />}
</div>
)}
{messages.length > 0 && !isStreaming && (
{messages.length > 3 && !isStreaming && (
<div className="flex max-w-3xl mx-auto gap-2">
{messages[messages.length - 1].role === "assistant" && (
{messages[messages.length - 1].role === "assistant" &&
messages[messages.length - 1].commitHash && (
<Button
variant="outline"
size="sm"
@@ -70,22 +72,19 @@ export const MessagesList = forwardRef<HTMLDivElement, MessagesListProps>(
previousAssistantMessage?.role === "assistant" &&
previousAssistantMessage?.commitHash
) {
console.debug("Reverting to previous assistant version");
console.debug(
"Reverting to previous assistant version"
);
await revertVersion({
versionId: previousAssistantMessage.commitHash,
});
} else {
// Revert to the previous version
await revertVersion({
versionId: versions[1].oid,
});
}
if (selectedChatId) {
const chat = await IpcClient.getInstance().getChat(
selectedChatId
);
setMessages(chat.messages);
}
}
} catch (error) {
console.error("Error during undo operation:", error);
showError("Failed to undo changes");
@@ -138,10 +137,9 @@ export const MessagesList = forwardRef<HTMLDivElement, MessagesListProps>(
});
reverted = true;
} else {
console.debug("Reverting to previous version");
await revertVersion({
versionId: versions[1].oid,
});
showSuccess(
"You will need to manually revert to an earlier revision"
);
}
}