import React, { useState, useCallback } from "react"; import { Box, VStack, HStack, Text, Spacer, Input, InputLeftElement, InputGroup, Badge, CardHeader,CardFooter,Button,Card,Heading } from "@chakra-ui/react"; import { IoSearchOutline } from "react-icons/io5"; import debounce from "lodash.debounce"; import { __ } from '@wordpress/i18n'; interface SidebarProps { categories: { name: string; count: number }[]; selectedCategory: string; onCategorySelect: (category: string) => void; onSearchChange: (searchTerm: string) => void; } const Sidebar: React.FC = React.memo(({ categories, selectedCategory, onCategorySelect, onSearchChange }) => { const [searchTerm, setSearchTerm] = useState(""); const debouncedSearchChange = useCallback( debounce((value: string) => { onSearchChange(value); }, 300), [onSearchChange] ); const handleSearchChange = (e: React.ChangeEvent) => { const value = e.target.value; setSearchTerm(value); debouncedSearchChange(value); }; const favorites = categories.find(cat => cat.name === 'Favorites'); const orderedCategories = favorites && favorites.count > 0 ? [favorites, ...categories.filter(cat => cat.name !== 'Favorites')] : categories; return ( {orderedCategories.map((category) => ( .badge": { bg: selectedCategory === category.name ? "#FFFFFF" : "#FFFFFF" } }} borderRadius="md" cursor="pointer" bg={selectedCategory === category.name ? "#F7F4FB" : "transparent"} onClick={() => onCategorySelect(category.name)} > {category.name} {category.count} ))} {__("Can't Find The Form Template You Need?", "everest-forms")} ); }); export default Sidebar;