import { useEffect } from "react"; /** UI-only input for opening help with a scoped reference; it never submits anything. */ export interface SupportTicketRequest { reference: string; viewer: string; organizationId: string; opening: string; } /** Reports the observed form outcome once, including a preserved draft or refusal to open. */ export type SupportTicketOutcome = "filled" | "existing-draft" | "refused"; type Taker = (request: SupportTicketRequest, onOutcome?: (outcome: SupportTicketOutcome) => void) => boolean; let taker: Taker | undefined; /** Opens help through the mounted widget; false means no widget accepted the request. */ export const requestSupportTicket = (request: SupportTicketRequest, onOutcome?: (outcome: SupportTicketOutcome) => void): boolean => taker?.(request, onOutcome) ?? false; /** The help widget's side: it takes requests while it is mounted, and stops when it unmounts. */ export const useSupportTicketRequests = (take: Taker): void => { useEffect(() => { taker = take; return () => { if (taker === take) taker = undefined; }; }, [take]); };