import { Button, Card, Input, Kbd, Modal, ModalBody, ModalContent, ModalFooter, useDisclosure, } from "@nextui-org/react"; import { useEffect, useState } from "react"; import { ArrowTopRightOnSquare, MagnifyingGlassIcon } from "../icons"; import config from "../config"; import instance from "../security/http"; import EcoconnectFullLogo from "./EcoconnectFullLogo"; import { useNavigate } from "react-router-dom"; export default function EcoconnectSearch() { const [searchQuery, setSearchQuery] = useState(""); const [aiResponseRoute, setAiResponseRoute] = useState(""); const [aiResponseRouteDescription, setAiResponseRouteDescription] = useState(""); const [isQueryLoading, setIsQueryLoading] = useState(false); const navigate = useNavigate(); const { isOpen: isAiDialogOpen, onOpen: onAiDialogOpen, onOpenChange: onAiDialogOpenChange, } = useDisclosure(); const dialogOpenChange = () => { onAiDialogOpenChange(); setSearchQuery(""); setAiResponseRoute(""); }; const handleKeyPress = (event: KeyboardEvent) => { if (event.ctrlKey && event.key === "s") { event.preventDefault(); onAiDialogOpen(); } }; const executeSearch = async () => { if (searchQuery.length <= 0) return; setIsQueryLoading(true); instance .get(`${config.serverAddress}/connections/nls/${searchQuery}`) .then((response) => { const rawResponse = response.data.response; const parsedResponse = JSON.parse(rawResponse); const resolvedRoute = parsedResponse.route; setAiResponseRoute(resolvedRoute); setAiResponseRouteDescription(getRouteDescription(resolvedRoute)); }) .finally(() => { setIsQueryLoading(false); }); }; const routeDescriptions: { [key: string]: string } = { "/": "Go home", "/springboard": "Go to the Dashboard", "/manage-account": "Manage your account", "/events": "Browse events", "/karang-guni-schedules": "Browse available Karang Guni", "/home-bill-contest": "Take part in a contest", "/home-bill-contest/new-submission": "Submit your bill", "/community-posts": "Browse community posts", "/community-posts/create": "Create a post", }; const getRouteDescription = (route: string) => { return routeDescriptions[route] || "Unknown"; }; useEffect(() => { window.addEventListener("keydown", handleKeyPress); return () => { window.removeEventListener("keydown", handleKeyPress); }; }, []); return (
} placement="top" > {(onClose) => { return ( <>
{ if (keyEvent.key == "Enter") { executeSearch(); } }} endContent={ } /> {aiResponseRoute.length > 0 && (

{aiResponseRouteDescription}

https://ecoconnect.gov{aiResponseRoute}

)}

Natural Language Search

); }}
); }