import { useEffect, useMemo, useRef } from "react"; import { useWAClient } from "./context"; import { useMutation, useQuery } from "@tanstack/react-query"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Dialog, DialogClose, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { createDisclosure } from "@/lib/utils"; import { FileTerminalIcon } from "lucide-react"; import { Textarea } from "@/components/ui/textarea"; import { Badge } from "@/components/ui/badge"; type Props = { curDeviceId: string; setDeviceId: (id: string) => void; }; const commandDlg = createDisclosure<{ deviceId: string }>(); export default function DevicesSection({ curDeviceId, setDeviceId }: Props) { const { client, isReady } = useWAClient(); const { data: devices } = useQuery({ queryKey: ["devices"], queryFn: () => client.listDevices(), enabled: isReady, refetchInterval: 10_000, }); useEffect(() => { if (!curDeviceId && devices?.length && devices[0].id) { setDeviceId(devices[0].id); } }, [curDeviceId, devices]); const deviceList = useMemo(() => { return devices?.map((i, idx) => { const lastAlive = i.lastAlive || 0; const isOnline = Date.now() - lastAlive <= 60_000; return { label: i.name || i.id || "Unknown", value: i.id || String(idx), lastAlive, isOnline, }; }); }, [devices]); const curDevice = useMemo(() => { return deviceList?.find((i) => i.value === curDeviceId); }, [deviceList, curDeviceId]); return (
); } const cmdPreset = [ { title: "Status", command: "status" }, { title: "Has Focus", command: "return document.hasFocus();" }, { title: "Reload", command: "window.location.reload(); return true;" }, ]; function CommandModal() { const { data, isOpen } = commandDlg.useStore(); const { client } = useWAClient(); const cmdTextRef = useRef(null); const cmd = useMutation({ async mutationFn(cmd: string) { if (cmd === "status") { return client.status(); } return client.exec(cmd, data?.deviceId); }, }); const onSubmit = () => { const command = cmdTextRef.current?.value || ""; cmd.mutate(command); }; return ( Execute Command