diff --git a/components/cycle-day/select-box-group.js b/components/cycle-day/select-box-group.js new file mode 100644 index 0000000000000000000000000000000000000000..bde91772748ae18283a673567a373b0ef9c39e7e --- /dev/null +++ b/components/cycle-day/select-box-group.js @@ -0,0 +1,34 @@ +import React, { Component } from 'react' +import { + View, + TouchableOpacity, +} from 'react-native' +import styles from '../../styles' +import { AppText } from '../app-text' + +export default class SelectBoxGroup extends Component { + render() { + return ( + <View flexDirection='row' flexWrap='wrap'> + {this.props.data.map(({ label, stateKey }) => { + const style = [styles.selectBox] + const textStyle = [] + if (this.props.optionsState[stateKey]) { + style.push(styles.selectBoxActive) + textStyle.push(styles.selectBoxTextActive) + } + return ( + <TouchableOpacity + onPress={() => this.props.onSelect(stateKey)} + key={stateKey} + > + <View style={style}> + <AppText style={textStyle}>{label}</AppText> + </View> + </TouchableOpacity> + ) + })} + </View> + ) + } +} \ No newline at end of file diff --git a/components/cycle-day/select-box.js b/components/cycle-day/select-box.js deleted file mode 100644 index 62daeceb3a182fef206d6d362dfbe6128322215a..0000000000000000000000000000000000000000 --- a/components/cycle-day/select-box.js +++ /dev/null @@ -1,25 +0,0 @@ -import React, { Component } from 'react' -import { - View, - TouchableOpacity, -} from 'react-native' -import styles from '../../styles' -import { AppText } from '../app-text' - -export default class SelectBox extends Component { - render () { - const style = [styles.selectBox] - const textStyle = [] - if (this.props.value) { - style.push(styles.selectBoxActive) - textStyle.push(styles.selectBoxTextActive) - } - return ( - <TouchableOpacity onPress={this.props.onPress}> - <View style={style}> - <AppText style={textStyle}>{this.props.children}</AppText> - </View> - </TouchableOpacity> - ) - } -} \ No newline at end of file diff --git a/components/cycle-day/symptoms/sex.js b/components/cycle-day/symptoms/sex.js index 248ef40731556ea708750af136b4c8b9e518d469..0019eb4b9f7d11821d5f18d7efe7578a4fd73b0c 100644 --- a/components/cycle-day/symptoms/sex.js +++ b/components/cycle-day/symptoms/sex.js @@ -11,7 +11,7 @@ import { contraceptives as contraceptiveLabels } from '../labels/labels' import ActionButtonFooter from './action-button-footer' -import SelectBox from '../select-box' +import SelectBoxGroup from '../select-box-group' import { SymptomSectionHeader } from '../../app-text' const sexBoxes = [{ @@ -40,6 +40,9 @@ const contraceptiveBoxes = [{ }, { label: contraceptiveLabels.implant, stateKey: 'implant' +}, { + label: contraceptiveLabels.other, + stateKey: 'other' }] export default class Sex extends Component { @@ -57,23 +60,12 @@ export default class Sex extends Component { } } - makeSelectBoxes(boxes) { - return boxes.map(({ label, stateKey }) => { - return ( - <SelectBox - value={this.state[stateKey]} - onPress={() => this.toggleState(stateKey)} - key={stateKey} - > - {label} - </SelectBox> - ) - }) - } - - toggleState(key) { + toggleState = (key) => { const curr = this.state[key] this.setState({[key]: !curr}) + if (key === 'other' && !curr) { + this.setState({focusTextArea: true}) + } } render() { @@ -81,18 +73,17 @@ export default class Sex extends Component { <View style={{ flex: 1 }}> <ScrollView style={styles.page}> <SymptomSectionHeader>Activity</SymptomSectionHeader> - {this.makeSelectBoxes(sexBoxes)} + <SelectBoxGroup + data={sexBoxes} + onSelect={this.toggleState} + optionsState={this.state} + /> <SymptomSectionHeader>Contraceptives</SymptomSectionHeader> - {this.makeSelectBoxes(contraceptiveBoxes)} - <SelectBox - value={this.state.other} - onPress={() => { - this.toggleState('other') - this.setState({ focusTextArea: true }) - }} - > - {contraceptiveLabels.other} - </SelectBox> + <SelectBoxGroup + data={contraceptiveBoxes} + onSelect={this.toggleState} + optionsState={this.state} + /> {this.state.other && <TextInput