UNPKG

react-native-accordion-wrapper

Version:

A handy wrapper of accordion behavior for react native components

29 lines (28 loc) 1.95 kB
import React from 'react'; import { FlatList } from 'react-native'; import AccordionItem from './AccordionItem'; const Accordion = ({ dataSource, useFlatList = false, rightChevronIcon, itemWrapperStyle, headerItemsStyle, initialActiveIndex, childrenWrapperStyle, listHeaderComponent, headerTitleLabelStyle, shouldSelectOneItemAtATime = true, }) => { const [activeIndex, setActiveIndex] = React.useState(initialActiveIndex); React.useEffect(() => { if (activeIndex !== initialActiveIndex) { setActiveIndex(initialActiveIndex); } }, [initialActiveIndex]); const renderAccordionItem = ({ item, index, }) => { let initialForceExpandedState = initialActiveIndex === index; if (shouldSelectOneItemAtATime) { initialForceExpandedState = index === activeIndex; } return (React.createElement(AccordionItem, { title: item.title, itemWrapperStyle: itemWrapperStyle, isExpandable: !item.nonExpandable, childrenWrapperStyle: childrenWrapperStyle, titleStyle: headerTitleLabelStyle, rightChevronIcon: rightChevronIcon, initialExpandedState: initialForceExpandedState, key: `${item.title}-${index}`, headerStyle: headerItemsStyle, onPress: item.onPress, onExpandStateChange: (isExpanded) => { if (isExpanded) { setActiveIndex(index); } } }, item.child)); }; return useFlatList ? (React.createElement(FlatList, { data: dataSource, showsHorizontalScrollIndicator: false, ListHeaderComponent: listHeaderComponent, showsVerticalScrollIndicator: false, nestedScrollEnabled: false, horizontal: false, keyExtractor: (item, index) => `${item.title}-${index}`, renderItem: renderAccordionItem })) : (React.createElement(React.Fragment, null, listHeaderComponent, dataSource.map((item, index) => { return renderAccordionItem({ item, index }); }))); }; export default Accordion;