'use client' import React, { useEffect, useState } from "react"; import { Accordion, AccordionItem, AccordionTrigger, AccordionContent, } from "@/components/ui/accordion"; import { Input } from "@/components/ui/input"; import ScriptItem from "@/components/Script"; interface Script { title: string; scriptID: string; } interface Category { id: string; Catagory_Title: string; Items: Script[]; } export default function Page() { // set the items as a state const [selectedItem, setSelectedItem] = useState(""); const [links, setLinks] = useState([]); const [searchTerm, setSearchTerm] = useState(""); const [accordionExpanded, setAccordionExpanded] = useState(true); // Initially expanded useEffect(() => { const fetchData = async () => { try { const data = await getLinks(); setLinks(data); } catch (error) { console.error("Error fetching links:", error); } }; fetchData(); }, []); 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); setAccordionExpanded(!!value); // Expand accordion if search term is not empty, otherwise collapse it }; const filteredLinks = searchTerm ? links.filter((category) => category.Items.some((script) => script.scriptID.toLowerCase().includes(searchTerm.toLowerCase()), ), ) : links; return ( <>

Scripts

handleSearch(e.target.value)} /> {filteredLinks.map((category) => ( setAccordionExpanded(!accordionExpanded)} > {category.Catagory_Title} {category.Items.filter((script) => script.scriptID .toLowerCase() .includes(searchTerm.toLowerCase()), ).map((script, index) => (

setSelectedItem(script.scriptID)} key={index} > {script.title}

))}
))}
); }