diff --git a/src/basic/Accordion.js b/src/basic/Accordion.js index 02805dce9..229d9ccda 100644 --- a/src/basic/Accordion.js +++ b/src/basic/Accordion.js @@ -16,39 +16,42 @@ import { Icon } from './Icon'; class DefaultHeader extends React.Component { render() { + const { + expanded, + expandedIcon, + expandedIconStyle, + headerStyle, + icon, + iconStyle, + title + } = this.props; + const variables = this.context.theme ? this.context.theme['@@shoutem.theme/themeStyle'].variables : variable; + return ( - {this.props.title} + {title} @@ -58,19 +61,18 @@ class DefaultHeader extends React.Component { class DefaultContent extends React.Component { render() { + const { content, contentStyle } = this.props; const variables = this.context.theme ? this.context.theme['@@shoutem.theme/themeStyle'].variables : variable; return ( - {this.props.content} + {content} ); } @@ -88,10 +90,11 @@ class AccordionSubItem extends React.Component { }).start(); } render() { + const { children, style } = this.props; const { fadeAnim } = this.state; return ( - - {this.props.children} + + {children} ); } @@ -99,35 +102,56 @@ class AccordionSubItem extends React.Component { class AccordionItem extends React.Component { render() { + const { + contentStyle, + expanded, + expandedIcon, + expandedIconStyle, + headerStyle, + icon, + iconStyle, + index, + item, + onAccordionClose, + onAccordionOpen, + renderContent, + renderHeader, + setSelected + } = this.props; + return ( this.props.setSelected(this.props.index)} + onPress={() => { + onAccordionOpen && !expanded && onAccordionOpen(item, index); + onAccordionClose && expanded && onAccordionClose(item, index); + setSelected(index); + }} > - {this.props.renderHeader ? ( - this.props.renderHeader(this.props.item, this.props.expanded) + {renderHeader ? ( + renderHeader(item, expanded) ) : ( )} - {this.props.expanded ? ( + {expanded ? ( - {this.props.renderContent ? ( - this.props.renderContent(this.props.item) + {renderContent ? ( + renderContent(item) ) : ( )} @@ -154,36 +178,53 @@ export class Accordion extends React.Component { } render() { + const { + contentStyle, + dataArray, + expandedIcon, + expandedIconStyle, + headerStyle, + icon, + iconStyle, + onAccordionClose, + onAccordionOpen, + renderContent, + renderHeader, + style + } = this.props; + const variables = this.context.theme ? this.context.theme['@@shoutem.theme/themeStyle'].variables : variable; return ( String(index)} renderItem={({ item, index }) => ( this.setSelected(i)} - headerStyle={this.props.headerStyle} - contentStyle={this.props.contentStyle} - renderHeader={this.props.renderHeader} - renderContent={this.props.renderContent} - icon={this.props.icon} - iconStyle={this.props.iconStyle} - expandedIcon={this.props.expandedIcon} - expandedIconStyle={this.props.expandedIconStyle} /> )} {...this.props} @@ -195,7 +236,7 @@ export class Accordion extends React.Component { const styles = StyleSheet.create({ defaultHeader: { flexDirection: 'row', - padding: 10, + padding: variable.accordionContentPadding, justifyContent: 'space-between', alignItems: 'center' } diff --git a/src/theme/variables/platform.js b/src/theme/variables/platform.js index f3ad9c6ca..f8e569dc4 100644 --- a/src/theme/variables/platform.js +++ b/src/theme/variables/platform.js @@ -21,11 +21,13 @@ export default { platform, // Accordion - headerStyle: '#edebed', - iconStyle: '#000', + accordionBorderColor: '#d3d3d3', + accordionContentPadding: 10, + accordionIconFontSize: 18, contentStyle: '#f5f4f5', expandedIconStyle: '#000', - accordionBorderColor: '#d3d3d3', + headerStyle: '#edebed', + iconStyle: '#000', // Android androidRipple: true,