|
1 | 1 | // @flow |
2 | 2 |
|
3 | | -import React from 'react'; |
| 3 | +import React, { Component } from 'react'; |
4 | 4 | import type { ElementProps } from 'react'; |
5 | 5 |
|
6 | 6 | import { Subscribe } from 'unstated'; |
7 | 7 | import AccordionContainer from '../AccordionContainer/AccordionContainer'; |
8 | 8 | import ItemContainer from '../ItemContainer/ItemContainer'; |
9 | 9 | import AccordionItemBody from './AccordionItemBody'; |
10 | 10 |
|
11 | | -const defaultProps = { |
12 | | - className: 'accordion__body', |
13 | | - hideBodyClassName: 'accordion__body--hidden', |
14 | | -}; |
15 | | - |
16 | 11 | type AccordionItemBodyWrapperProps = ElementProps<'div'> & { |
17 | 12 | hideBodyClassName: string, |
18 | 13 | }; |
19 | 14 |
|
20 | | -const AccordionItemBodyWrapper = (props: AccordionItemBodyWrapperProps) => ( |
21 | | - <Subscribe to={[AccordionContainer, ItemContainer]}> |
22 | | - {(accordionStore, itemStore) => { |
23 | | - const { uuid } = itemStore.state; |
24 | | - const { items, accordion } = accordionStore.state; |
25 | | - const item = items.filter(stateItem => stateItem.uuid === uuid)[0]; |
26 | | - return ( |
27 | | - <AccordionItemBody {...props} {...item} accordion={accordion} /> |
28 | | - ); |
29 | | - }} |
30 | | - </Subscribe> |
31 | | -); |
32 | | -AccordionItemBodyWrapper.defaultProps = defaultProps; |
| 15 | +class AccordionItemBodyWrapper extends Component< |
| 16 | + AccordionItemBodyWrapperProps, |
| 17 | +> { |
| 18 | + static defaultProps = { |
| 19 | + className: 'accordion__body', |
| 20 | + hideBodyClassName: 'accordion__body--hidden', |
| 21 | + }; |
| 22 | + |
| 23 | + renderItemBody = ( |
| 24 | + accordionStore: AccordionContainer, |
| 25 | + itemStore: ItemContainer, |
| 26 | + ) => { |
| 27 | + const { uuid } = itemStore.state; |
| 28 | + const { items, accordion } = accordionStore.state; |
| 29 | + const item = items.filter(stateItem => stateItem.uuid === uuid)[0]; |
| 30 | + return ( |
| 31 | + <AccordionItemBody |
| 32 | + {...this.props} |
| 33 | + {...item} |
| 34 | + accordion={accordion} |
| 35 | + /> |
| 36 | + ); |
| 37 | + }; |
| 38 | + |
| 39 | + render() { |
| 40 | + return ( |
| 41 | + <Subscribe to={[AccordionContainer, ItemContainer]}> |
| 42 | + {this.renderItemBody} |
| 43 | + </Subscribe> |
| 44 | + ); |
| 45 | + } |
| 46 | +} |
33 | 47 |
|
34 | 48 | export default AccordionItemBodyWrapper; |
0 commit comments