import React from 'react'; import {StyleProp, Text, View, ViewStyle} from 'react-native'; import RNAccordion, {AccordionProps} from 'react-native-collapsible/Accordion'; import Icon from '../icon'; import {WithTheme, WithThemeStyles} from '../style'; import AccordionStyles, {AccordionStyle} from './style'; export interface AccordionPanelProps { key?: string; header: any; } export interface AccordionNativeProps extends WithThemeStyles, Partial> { style?: StyleProp; } export interface AccordionHeader { title: string; content: React.ReactElement; style: StyleProp; } class AccordionPanel extends React.Component { render() { return null; } } class Accordion extends React.Component, any> { static Panel: any; renderHeader = (styles: ReturnType) => (section: T, _: number, isActive: boolean) => { return ( {React.isValidElement(section.title) ? ( section.title ) : ( {section.title} )} ); }; renderContent = (styles: ReturnType) => (section: T) => { return React.isValidElement(section.content) ? ( section.content ) : ( {section.content} ); }; render() { const {children, style, activeSections = [], ...rest} = this.props; const styles = this.props.styles!; const headers = React.Children.map(children, (child: any) => { return { title: child.props.header, content: child.props.children, style: child.props.style || {}, } as AccordionHeader; }); return ( {(s) => ( )} /> )} ); } } Accordion.Panel = AccordionPanel; export default Accordion;