UNPKG

@swrve/core

Version:

Core set of Swrve UI Components

56 lines (44 loc) 1.37 kB
import React, { Component } from 'react' import classnames from 'classnames' import { string, object, array, node, oneOfType, number } from 'prop-types' import AccordionItem from './AccordionItem' class Accordion extends Component { state = { activeKey: this.props.defaultActiveKey } setActiveKey = index => { const { activeKey } = this.state const newIndex = activeKey === index ? -1 : index this.setState({ activeKey: newIndex }) } render() { const { children, className, defaultActiveKey, ...props } = this.props const accordionStyles = classnames('sw-accordion', className) const childItems = React.Children.map(children, (child, i) => React.cloneElement(child, { open: this.state.activeKey === i, onToggle: () => this.setActiveKey(i) }) ) return ( <div className={accordionStyles} role="tablist" {...props}> {childItems} </div> ) } } Accordion.propTypes = { /** Child Content */ children: node, /** Additional externs classnames */ className: oneOfType([string, object, array]), /** Default accordion item to display as open */ defaultActiveKey: number } Accordion.defaultProps = { defaultActiveKey: -1 } Accordion.displayName = 'Accordion' Accordion.Item = AccordionItem Accordion.Item.displayName = 'Accordion.Item' export default Accordion