fix: hide todo list/status when all todos complete, fix notifications (#124)
This commit is contained in:
@@ -121,7 +121,7 @@ export const StatusRow: React.FC<StatusRowProps> = ({
|
||||
return { completed, total };
|
||||
}, [todos]);
|
||||
|
||||
const hasTodos = visibleTodos.length > 0;
|
||||
const hasActiveTodos = visibleTodos.some((t) => t.status === "in_progress" || t.status === "pending");
|
||||
// Original logic from ChatInput
|
||||
const shouldRenderPlaceholder = !showAbortStatus && (wasAborted || !abortActive);
|
||||
|
||||
@@ -133,8 +133,8 @@ export const StatusRow: React.FC<StatusRowProps> = ({
|
||||
// - isComplete (showing "Done" result)
|
||||
// - wasAborted (showing "Aborted" result)
|
||||
// - placeholderShowingResult (placeholder still displaying result)
|
||||
// - hasTodos or showAbortStatus
|
||||
const hasContent = isWorking || isComplete || wasAborted || placeholderShowingResult || hasTodos || showAbortStatus;
|
||||
// - hasActiveTodos or showAbortStatus
|
||||
const hasContent = isWorking || isComplete || wasAborted || placeholderShowingResult || hasActiveTodos || showAbortStatus;
|
||||
|
||||
// Close popover when clicking outside
|
||||
const popoverRef = React.useRef<HTMLDivElement>(null);
|
||||
@@ -171,7 +171,7 @@ export const StatusRow: React.FC<StatusRowProps> = ({
|
||||
) : null;
|
||||
|
||||
// Todo trigger button
|
||||
const todoTrigger = hasTodos ? (
|
||||
const todoTrigger = hasActiveTodos ? (
|
||||
<button
|
||||
type="button"
|
||||
onClick={toggleExpanded}
|
||||
@@ -229,7 +229,7 @@ export const StatusRow: React.FC<StatusRowProps> = ({
|
||||
{todoTrigger}
|
||||
|
||||
{/* Popover dropdown */}
|
||||
{isExpanded && hasTodos && (
|
||||
{isExpanded && hasActiveTodos && (
|
||||
<div
|
||||
style={{ maxWidth: "calc(100cqw - 4ch)" }}
|
||||
className={cn(
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import React from 'react';
|
||||
import { useUIStore } from '@/stores/useUIStore';
|
||||
import { isWebRuntime } from '@/lib/desktop';
|
||||
import { getRegisteredRuntimeAPIs } from '@/contexts/runtimeAPIRegistry';
|
||||
import { toast } from 'sonner';
|
||||
|
||||
export const NotificationSettings: React.FC = () => {
|
||||
|
||||
@@ -1048,7 +1048,8 @@ export const useEventStream = () => {
|
||||
|
||||
completeStreamingMessage(sessionId, messageId);
|
||||
|
||||
if (isWebRuntime() && nativeNotificationsEnabled) {
|
||||
// Only notify when entire message is finished (finish === 'stop')
|
||||
if (finish === 'stop' && isWebRuntime() && nativeNotificationsEnabled) {
|
||||
const notifiedMessages = notifiedMessagesRef.current;
|
||||
|
||||
if (!notifiedMessages.has(messageId)) {
|
||||
@@ -1288,6 +1289,7 @@ export const useEventStream = () => {
|
||||
}
|
||||
}, [
|
||||
currentSessionId,
|
||||
nativeNotificationsEnabled,
|
||||
addStreamingPart,
|
||||
completeStreamingMessage,
|
||||
updateMessageInfo,
|
||||
@@ -1711,6 +1713,7 @@ export const useEventStream = () => {
|
||||
cooldownTimers.forEach((timer) => clearTimeout(timer));
|
||||
cooldownTimers.clear();
|
||||
messageCache.clear();
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps -- Intentionally accessing current ref value at cleanup time
|
||||
notifiedMessagesRef.current.clear();
|
||||
|
||||
pendingResumeRef.current = false;
|
||||
|
||||
Reference in New Issue
Block a user