import { useQueryClient } from "@tanstack/react-query"; import { Info, KeyRound } from "lucide-react"; import { type FC, useEffect, useRef, useState } from "react"; import { getListPairedClientsQueryKey } from "@/api/gen/clients/clients"; import type { PairingStatus } from "@/api/gen/model/pairingStatus"; import { getGetPairingStatusQueryKey, useGetPairingStatus, useSubmitPairingPin, } from "@/api/gen/pairing/pairing"; import { QueryState } from "@/components/query-state"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import type { Loadable } from "@/lib/query"; import { m } from "@/paraglide/messages"; /** Container: GameStream/Moonlight pairing — poll status, own the PIN entry, submit it. */ export const MoonlightPairingSection: FC = () => { const qc = useQueryClient(); const [pin, setPin] = useState(""); const pairing = useGetPairingStatus({ query: { refetchInterval: 2_000 } }); const submit = useSubmitPairingPin(); // Clear the previous attempt's outcome when a NEW pairing knock arrives. // // The mutation's success flag outlives the form — the section never unmounts, only the inner //