'use client' import { Accordion, AccordionItem, AccordionTrigger, AccordionContent, } from "@/components/ui/accordion"; import { Input } from "@/components/ui/input"; import Link from "next/link"; import React, { useEffect, useState, useRef } from "react"; import { Category } from "@/lib/types"; function ScriptBrowser() { const [selectedItem, setSelectedItem] = useState(""); const [links, setLinks] = useState([]); const [searchTerm, setSearchTerm] = useState(""); const inputRef = useRef(null); const [isSearch, setIsSearch] = useState(false); useEffect(() => { const handleKeyDown = (event: any) => { if (event.key === "/") { if (inputRef.current) { inputRef.current.focus(); } event.preventDefault(); } }; const fetchData = async () => { try { const data = await getLinks(); setLinks(data); } catch (error) { console.error("Error fetching links:", error); } }; fetchData(); document.addEventListener("keydown", handleKeyDown); return () => { document.removeEventListener("keydown", handleKeyDown); }; }, []); const getLinks = async () => { const res = await fetch( `${process.env.NEXT_PUBLIC_POCKETBASE_URL}/api/collections/proxmox_items/records`, ); const data = await res.json(); return data.items as Category[]; }; const handleSearch = (value: string) => { setSearchTerm(value); if (value.length > 0) { setIsSearch(true); } else { setIsSearch(false); } }; return ( <> {" "}

Scripts

handleSearch(e.target.value)} ref={inputRef} /> {links.map( (category) => category.Items.filter( (script) => !searchTerm || script.title.toLowerCase().includes(searchTerm.toLowerCase()), ).length > 0 && ( {category.Catagory_Title} {category.Items.filter( (script) => !searchTerm || script.title .toLowerCase() .includes(searchTerm.toLowerCase()), ).map((script, index) => (

{script.title}

))}
), )}
); } export default ScriptBrowser