import { useState, ReactNode } from 'react'; import { Plus, LucideIcon } from 'lucide-react'; import { ScrollArea, Button, SearchInput, FeatureSidebarItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from '@/components'; interface FeatureSidebarProps { title: string; items: string[]; selectedItem?: string; onItemSelect: (itemName: string) => void; loading?: boolean; onNewItem?: () => void; onEditItem?: (itemName: string) => void; onDeleteItem?: (itemName: string) => void; searchPlaceholder?: string; newItemTooltip?: string; editLabel?: string; deleteLabel?: string; icon: LucideIcon; filterItems?: (itemNames: string[]) => string[]; renderSkeleton: () => ReactNode; renderEmptyState: (searchTerm: string) => ReactNode; } export function FeatureSidebar({ title, items, selectedItem, onItemSelect, loading, onNewItem, onEditItem, onDeleteItem, searchPlaceholder = 'Search...', newItemTooltip = 'Add new', editLabel = 'Edit', deleteLabel = 'Delete', icon, filterItems, renderSkeleton, renderEmptyState, }: FeatureSidebarProps) { const [searchTerm, setSearchTerm] = useState(''); let itemNames = items; if (filterItems) { itemNames = filterItems(itemNames); } const normalizedSearch = searchTerm.toLowerCase().replace(/\s+/g, ''); const filteredItems = itemNames.filter((name) => name.toLowerCase().replace(/\s+/g, '').includes(normalizedSearch) ); return (
{newItemTooltip}