fix(app): stabilize archive button hover in grouped agent row

This commit is contained in:
Mohamed Boudra
2026-02-06 21:57:08 +07:00
parent 6e58d49207
commit d236c18ae5
@@ -204,6 +204,7 @@ function GroupedAgentRow({
}: GroupedAgentRowProps) { }: GroupedAgentRowProps) {
const { theme } = useUnistyles(); const { theme } = useUnistyles();
const [isHovered, setIsHovered] = useState(false); const [isHovered, setIsHovered] = useState(false);
const [isArchiveHovered, setIsArchiveHovered] = useState(false);
const [isArchiveConfirmVisible, setIsArchiveConfirmVisible] = useState(false); const [isArchiveConfirmVisible, setIsArchiveConfirmVisible] = useState(false);
const hoverOutTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null); const hoverOutTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
@@ -228,6 +229,7 @@ function GroupedAgentRow({
clearHoverOutTimeout(); clearHoverOutTimeout();
hoverOutTimeoutRef.current = setTimeout(() => { hoverOutTimeoutRef.current = setTimeout(() => {
setIsHovered(false); setIsHovered(false);
setIsArchiveHovered(false);
setIsArchiveConfirmVisible(false); setIsArchiveConfirmVisible(false);
}, 50); }, 50);
}, [clearHoverOutTimeout]); }, [clearHoverOutTimeout]);
@@ -246,7 +248,9 @@ function GroupedAgentRow({
: null; : null;
const canArchive = agent.status !== "running" && !agent.requiresAttention; const canArchive = agent.status !== "running" && !agent.requiresAttention;
const showArchive = canArchive && shortcutNumber === null && (isHovered || isArchiveConfirmVisible); const showArchive = canArchive &&
shortcutNumber === null &&
(isHovered || isArchiveHovered || isArchiveConfirmVisible);
return ( return (
<Pressable <Pressable
@@ -293,6 +297,14 @@ function GroupedAgentRow({
styles.branchBadge, styles.branchBadge,
isArchiveConfirmVisible && styles.archiveConfirmBadge, isArchiveConfirmVisible && styles.archiveConfirmBadge,
]} ]}
onHoverIn={() => {
clearHoverOutTimeout();
setIsHovered(true);
setIsArchiveHovered(true);
}}
onHoverOut={() => {
setIsArchiveHovered(false);
}}
onPress={(e) => { onPress={(e) => {
e.stopPropagation(); e.stopPropagation();
if (!isArchiveConfirmVisible) { if (!isArchiveConfirmVisible) {