import React, { useState } from "react"; import { View, Text, TouchableOpacity, Animated, LayoutAnimation, Platform, UIManager, useColorScheme, } from "react-native"; import { Ionicons } from "@expo/vector-icons"; import ExpandableItem, { FeedItem } from "./ExpandableItem"; if (Platform.OS === "android") { UIManager.setLayoutAnimationEnabledExperimental?.(true); } export interface Category { id: string; label: string; icon: keyof typeof Ionicons.glyphMap; color: string; // accent hex for the icon badge darkColor: string; items: FeedItem[]; } interface CollapsibleCategoryProps { category: Category; defaultOpen?: boolean; } export default function CollapsibleCategory({ category, defaultOpen = false, }: CollapsibleCategoryProps) { const [open, setOpen] = useState(defaultOpen); const scheme = useColorScheme(); const dark = scheme === "dark"; const accentColor = dark ? category.darkColor : category.color; const toggle = () => { LayoutAnimation.configureNext({ duration: 260, create: { type: "easeInEaseOut", property: "opacity" }, update: { type: "spring", springDamping: 0.85 }, }); setOpen((v) => !v); }; return ( {/* Icon badge */} {category.label} {/* Count badge */} {category.items.length} {/* Items */} {open && ( {category.items.map((item) => ( ))} )} ); }