'use client' import { Accordion, AccordionItem, AccordionTrigger, AccordionContent, } from "@/components/ui/accordion"; import { Input } from "@/components/ui/input"; import Link from "next/link"; import React, { useState, useEffect, useRef, useMemo } from "react"; import { Category } from "@/lib/types"; import { Badge } from "./ui/badge"; import clsx from "clsx"; const ScriptBrowser = ({ items }: { items: Category[] }) => { const [links, setLinks] = useState([]); const [searchTerm, setSearchTerm] = useState(""); const inputRef = useRef(null); const [expandedItems, setExpandedItems] = useState([]); const [selectedScript, setSelectedScript] = useState(null); useEffect(() => { if (items) { setLinks(items); } }, [items]); useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { if (event.key === "/") { inputRef.current?.focus(); event.preventDefault(); } }; document.addEventListener("keydown", handleKeyDown); return () => { document.removeEventListener("keydown", handleKeyDown); }; }, []); const handleSearch = (value: string) => { setSearchTerm(value); }; const filteredLinks = useMemo(() => { return links.filter((category) => category.expand.items.some((script) => script.title.toLowerCase().includes(searchTerm.toLowerCase()), ), ); }, [links, searchTerm]); useEffect(() => { if (searchTerm) { const expanded = filteredLinks.map((category) => category.catagoryName); setExpandedItems(expanded); } else { setExpandedItems([]); } }, [searchTerm, filteredLinks]); const handleAccordionChange = (value: string[]) => { setExpandedItems(value); }; const accordionProps = useMemo(() => { return searchTerm ? { type: "multiple" as const, value: expandedItems, onValueChange: handleAccordionChange, } : { type: "single" as const, collapsible: true, value: expandedItems[0], onValueChange: (value: string) => handleAccordionChange([value]), }; }, [searchTerm, expandedItems]); const handleSelected = (title: string) => { setSelectedScript(title); }; return (

Scripts

handleSearch(e.target.value)} ref={inputRef} /> {filteredLinks.map((category) => ( {category.catagoryName} {category.expand.items .filter((script) => script.title.toLowerCase().includes(searchTerm.toLowerCase()), ) .map((script, index) => (

handleSelected(script.title)} > {script.title}{" "} {script.item_type}

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