Merge pull request #1038 from JoeMakuta/fix/narrow-effect-use-lazy-state-init-add-memo

fix : narrow effect, use lazy state init and add memo
This commit is contained in:
Rohan Verma 2026-03-30 15:22:44 -07:00 committed by GitHub
commit 25b068f420
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 17 additions and 23 deletions

View file

@ -9,7 +9,7 @@ import {
TrashIcon, TrashIcon,
} from "lucide-react"; } from "lucide-react";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { useCallback, useEffect, useState } from "react"; import { memo, useCallback, useEffect, useState } from "react";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { import {
DropdownMenu, DropdownMenu,
@ -215,7 +215,7 @@ interface ThreadListItemComponentProps {
onDelete: () => void; onDelete: () => void;
} }
function ThreadListItemComponent({ const ThreadListItemComponent = memo(function ThreadListItemComponent({
thread, thread,
isActive, isActive,
isArchived, isArchived,
@ -272,7 +272,7 @@ function ThreadListItemComponent({
</DropdownMenu> </DropdownMenu>
</button> </button>
); );
} });
/** /**
* Format a date as relative time (e.g., "2 hours ago", "Yesterday") * Format a date as relative time (e.g., "2 hours ago", "Yesterday")

View file

@ -47,7 +47,7 @@ export function GeneralSettingsManager({ searchSpaceId }: GeneralSettingsManager
setName(searchSpace.name || ""); setName(searchSpace.name || "");
setDescription(searchSpace.description || ""); setDescription(searchSpace.description || "");
} }
}, [searchSpace]); }, [searchSpace?.name, searchSpace?.description]);
// Derive hasChanges during render // Derive hasChanges during render
const hasChanges = !!searchSpace && ((searchSpace.name || "") !== name || (searchSpace.description || "") !== description); const hasChanges = !!searchSpace && ((searchSpace.name || "") !== name || (searchSpace.description || "") !== description);

View file

@ -112,11 +112,11 @@ export function LLMRoleManager({ searchSpaceId }: LLMRoleManagerProps) {
const { mutateAsync: updatePreferences } = useAtomValue(updateLLMPreferencesMutationAtom); const { mutateAsync: updatePreferences } = useAtomValue(updateLLMPreferencesMutationAtom);
const [assignments, setAssignments] = useState({ const [assignments, setAssignments] = useState(() => ({
agent_llm_id: preferences.agent_llm_id ?? "", agent_llm_id: preferences.agent_llm_id ?? "",
document_summary_llm_id: preferences.document_summary_llm_id ?? "", document_summary_llm_id: preferences.document_summary_llm_id ?? "",
image_generation_config_id: preferences.image_generation_config_id ?? "", image_generation_config_id: preferences.image_generation_config_id ?? "",
}); }));
const [hasChanges, setHasChanges] = useState(false); const [hasChanges, setHasChanges] = useState(false);
const [isSaving, setIsSaving] = useState(false); const [isSaving, setIsSaving] = useState(false);
@ -129,7 +129,7 @@ export function LLMRoleManager({ searchSpaceId }: LLMRoleManagerProps) {
}; };
setAssignments(newAssignments); setAssignments(newAssignments);
setHasChanges(false); setHasChanges(false);
}, [preferences]); }, [preferences?.agent_llm_id, preferences?.document_summary_llm_id, preferences?.image_generation_config_id]);
const handleRoleAssignment = (prefKey: string, configId: string) => { const handleRoleAssignment = (prefKey: string, configId: string) => {
const newAssignments = { const newAssignments = {

View file

@ -38,7 +38,7 @@ export function PromptConfigManager({ searchSpaceId }: PromptConfigManagerProps)
if (searchSpace) { if (searchSpace) {
setCustomInstructions(searchSpace.qna_custom_instructions || ""); setCustomInstructions(searchSpace.qna_custom_instructions || "");
} }
}, [searchSpace]); }, [searchSpace?.qna_custom_instructions]);
// Derive hasChanges during render // Derive hasChanges during render
const hasChanges = !!searchSpace && (searchSpace.qna_custom_instructions || "") !== customInstructions; const hasChanges = !!searchSpace && (searchSpace.qna_custom_instructions || "") !== customInstructions;

View file

@ -149,17 +149,15 @@ function ApprovalCard({
const context = interruptData.context; const context = interruptData.context;
const page = context?.page; const page = context?.page;
const initialEditState = { const [isPanelOpen, setIsPanelOpen] = useState(false);
const [editedArgs, setEditedArgs] = useState(() => ({
title: actionArgs.new_title title: actionArgs.new_title
? String(actionArgs.new_title) ? String(actionArgs.new_title)
: (page?.page_title ?? args.new_title ?? ""), : (page?.page_title ?? args.new_title ?? ""),
content: actionArgs.new_content content: actionArgs.new_content
? String(actionArgs.new_content) ? String(actionArgs.new_content)
: (page?.body ?? args.new_content ?? ""), : (page?.body ?? args.new_content ?? ""),
}; }));
const [isPanelOpen, setIsPanelOpen] = useState(false);
const [editedArgs, setEditedArgs] = useState(initialEditState);
const [hasPanelEdits, setHasPanelEdits] = useState(false); const [hasPanelEdits, setHasPanelEdits] = useState(false);
const openHitlEditPanel = useSetAtom(openHitlEditPanelAtom); const openHitlEditPanel = useSetAtom(openHitlEditPanelAtom);

View file

@ -173,7 +173,8 @@ function ApprovalCard({
const issue = context?.issue; const issue = context?.issue;
const priorities = context?.priorities ?? []; const priorities = context?.priorities ?? [];
const initialEditState = { const [isPanelOpen, setIsPanelOpen] = useState(false);
const [editedArgs, setEditedArgs] = useState(() => ({
summary: actionArgs.new_summary summary: actionArgs.new_summary
? String(actionArgs.new_summary) ? String(actionArgs.new_summary)
: (issue?.issue_title ?? args.new_summary ?? ""), : (issue?.issue_title ?? args.new_summary ?? ""),
@ -183,10 +184,7 @@ function ApprovalCard({
priority: actionArgs.new_priority priority: actionArgs.new_priority
? String(actionArgs.new_priority) ? String(actionArgs.new_priority)
: (issue?.priority ?? args.new_priority ?? "__none__"), : (issue?.priority ?? args.new_priority ?? "__none__"),
}; }));
const [isPanelOpen, setIsPanelOpen] = useState(false);
const [editedArgs, setEditedArgs] = useState(initialEditState);
const [hasPanelEdits, setHasPanelEdits] = useState(false); const [hasPanelEdits, setHasPanelEdits] = useState(false);
const openHitlEditPanel = useSetAtom(openHitlEditPanelAtom); const openHitlEditPanel = useSetAtom(openHitlEditPanelAtom);

View file

@ -182,7 +182,8 @@ function ApprovalCard({
const priorities = context?.priorities ?? []; const priorities = context?.priorities ?? [];
const issue = context?.issue; const issue = context?.issue;
const initialEditState = { const [isPanelOpen, setIsPanelOpen] = useState(false);
const [editedArgs, setEditedArgs] = useState(() => ({
title: actionArgs.new_title title: actionArgs.new_title
? String(actionArgs.new_title) ? String(actionArgs.new_title)
: (issue?.title ?? args.new_title ?? ""), : (issue?.title ?? args.new_title ?? ""),
@ -202,10 +203,7 @@ function ApprovalCard({
labelIds: Array.isArray(actionArgs.new_label_ids) labelIds: Array.isArray(actionArgs.new_label_ids)
? (actionArgs.new_label_ids as string[]) ? (actionArgs.new_label_ids as string[])
: (issue?.current_labels?.map((l) => l.id) ?? []), : (issue?.current_labels?.map((l) => l.id) ?? []),
}; }));
const [isPanelOpen, setIsPanelOpen] = useState(false);
const [editedArgs, setEditedArgs] = useState(initialEditState);
const [hasPanelEdits, setHasPanelEdits] = useState(false); const [hasPanelEdits, setHasPanelEdits] = useState(false);
const openHitlEditPanel = useSetAtom(openHitlEditPanelAtom); const openHitlEditPanel = useSetAtom(openHitlEditPanelAtom);