Files
kandev/apps/web/components/threads/use-thread-focus-request.ts
2026-09-12 16:54:56 +02:00

25 lines
891 B
TypeScript

import { useState } from "react";
/** Keeps visual dismissal separate from the initial conversation's mount lifetime. */
export function useThreadFocusRequest(
focusedTaskId: string | null,
focusRequestKey: string | null,
) {
const [retired, setRetired] = useState(false);
const [requested, setRequested] = useState(focusRequestKey);
const [activationTaskId, setActivationTaskId] = useState(focusedTaskId);
if (requested !== focusRequestKey) {
setRequested(focusRequestKey);
setRetired(false);
setActivationTaskId(focusedTaskId);
} else if ((!retired || !focusedTaskId) && activationTaskId !== focusedTaskId) {
// A consumed request loses its fallback only when its target leaves the deck.
setActivationTaskId(focusedTaskId);
}
return {
markedTaskId: retired ? null : focusedTaskId,
activationTaskId,
retire: () => setRetired(true),
};
}