Convert radio button group to select tab group
This commit is contained in:
@@ -1,36 +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 RadioButton extends Component {
|
|
||||||
render() {
|
|
||||||
return (
|
|
||||||
<View style={styles.radioButtonGroup}>
|
|
||||||
{
|
|
||||||
this.props.buttons.map(({ label, value }) => {
|
|
||||||
const isActive = value === this.props.active
|
|
||||||
return (
|
|
||||||
<TouchableOpacity
|
|
||||||
onPress={() => this.props.onSelect(value)}
|
|
||||||
key={value}
|
|
||||||
activeOpacity={1}
|
|
||||||
>
|
|
||||||
<View style={styles.radioButtonTextGroup}>
|
|
||||||
<View style={styles.radioButton}>
|
|
||||||
{isActive ?
|
|
||||||
<View style={styles.radioButtonActiveDot}/> : null}
|
|
||||||
</View>
|
|
||||||
<AppText>{label}</AppText>
|
|
||||||
</View>
|
|
||||||
</TouchableOpacity>
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
</View>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
import React, { Component } from 'react'
|
||||||
|
import {
|
||||||
|
View,
|
||||||
|
TouchableOpacity,
|
||||||
|
} from 'react-native'
|
||||||
|
import styles from '../../styles'
|
||||||
|
import { AppText } from '../app-text'
|
||||||
|
|
||||||
|
export default class SelectTabGroup extends Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<View style={styles.selectTabGroup}>
|
||||||
|
{
|
||||||
|
this.props.buttons.map(({ label, value }, i) => {
|
||||||
|
let firstOrLastStyle
|
||||||
|
if (i === this.props.buttons.length - 1) {
|
||||||
|
firstOrLastStyle = styles.selectTabLast
|
||||||
|
} else if (i === 0) {
|
||||||
|
firstOrLastStyle = styles.selectTabFirst
|
||||||
|
}
|
||||||
|
let activeStyle
|
||||||
|
const isActive = value === this.props.active
|
||||||
|
if (isActive) activeStyle = styles.selectTabActive
|
||||||
|
return (
|
||||||
|
<TouchableOpacity
|
||||||
|
onPress={() => this.props.onSelect(value)}
|
||||||
|
key={value}
|
||||||
|
activeOpacity={1}
|
||||||
|
>
|
||||||
|
<View style={styles.radioButtonTextGroup}>
|
||||||
|
<View style={[
|
||||||
|
styles.selectTab,
|
||||||
|
firstOrLastStyle,
|
||||||
|
activeStyle
|
||||||
|
]}>
|
||||||
|
<AppText style={activeStyle}>{label}</AppText>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</TouchableOpacity>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</View>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,7 +8,7 @@ import styles from '../../../styles'
|
|||||||
import { saveSymptom } from '../../../db'
|
import { saveSymptom } from '../../../db'
|
||||||
import { bleeding as labels } from '../labels/labels'
|
import { bleeding as labels } from '../labels/labels'
|
||||||
import ActionButtonFooter from './action-button-footer'
|
import ActionButtonFooter from './action-button-footer'
|
||||||
import RadioButtonGroup from '../radio-button-group'
|
import SelectTabGroup from '../select-tab-group'
|
||||||
import { SymptomSectionHeader, AppText } from '../../app-text'
|
import { SymptomSectionHeader, AppText } from '../../app-text'
|
||||||
|
|
||||||
export default class Bleeding extends Component {
|
export default class Bleeding extends Component {
|
||||||
@@ -39,7 +39,7 @@ export default class Bleeding extends Component {
|
|||||||
<View>
|
<View>
|
||||||
<SymptomSectionHeader>Heaviness</SymptomSectionHeader>
|
<SymptomSectionHeader>Heaviness</SymptomSectionHeader>
|
||||||
<AppText>How heavy is the bleeding?</AppText>
|
<AppText>How heavy is the bleeding?</AppText>
|
||||||
<RadioButtonGroup
|
<SelectTabGroup
|
||||||
buttons={bleedingRadioProps}
|
buttons={bleedingRadioProps}
|
||||||
active={this.state.currentValue}
|
active={this.state.currentValue}
|
||||||
onSelect={val => this.setState({ currentValue: val })}
|
onSelect={val => this.setState({ currentValue: val })}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import {
|
|||||||
cervixPosition as positionLabels
|
cervixPosition as positionLabels
|
||||||
} from '../labels/labels'
|
} from '../labels/labels'
|
||||||
import ActionButtonFooter from './action-button-footer'
|
import ActionButtonFooter from './action-button-footer'
|
||||||
import RadioButtonGroup from '../radio-button-group'
|
import SelectTabGroup from '../select-tab-group'
|
||||||
import { SymptomSectionHeader } from '../../app-text'
|
import { SymptomSectionHeader } from '../../app-text'
|
||||||
|
|
||||||
export default class Cervix extends Component {
|
export default class Cervix extends Component {
|
||||||
@@ -54,19 +54,19 @@ export default class Cervix extends Component {
|
|||||||
<ScrollView style={styles.page}>
|
<ScrollView style={styles.page}>
|
||||||
<View>
|
<View>
|
||||||
<SymptomSectionHeader>Opening</SymptomSectionHeader>
|
<SymptomSectionHeader>Opening</SymptomSectionHeader>
|
||||||
<RadioButtonGroup
|
<SelectTabGroup
|
||||||
buttons={cervixOpeningRadioProps}
|
buttons={cervixOpeningRadioProps}
|
||||||
active={this.state.opening}
|
active={this.state.opening}
|
||||||
onSelect={val => this.setState({ opening: val })}
|
onSelect={val => this.setState({ opening: val })}
|
||||||
/>
|
/>
|
||||||
<SymptomSectionHeader>Firmness</SymptomSectionHeader>
|
<SymptomSectionHeader>Firmness</SymptomSectionHeader>
|
||||||
<RadioButtonGroup
|
<SelectTabGroup
|
||||||
buttons={cervixFirmnessRadioProps}
|
buttons={cervixFirmnessRadioProps}
|
||||||
active={this.state.firmness}
|
active={this.state.firmness}
|
||||||
onSelect={val => this.setState({ firmness: val })}
|
onSelect={val => this.setState({ firmness: val })}
|
||||||
/>
|
/>
|
||||||
<SymptomSectionHeader>Position</SymptomSectionHeader>
|
<SymptomSectionHeader>Position</SymptomSectionHeader>
|
||||||
<RadioButtonGroup
|
<SelectTabGroup
|
||||||
buttons={cervixPositionRadioProps}
|
buttons={cervixPositionRadioProps}
|
||||||
active={this.state.position}
|
active={this.state.position}
|
||||||
onSelect={val => this.setState({ position: val })}
|
onSelect={val => this.setState({ position: val })}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import styles from '../../../styles'
|
|||||||
import { saveSymptom } from '../../../db'
|
import { saveSymptom } from '../../../db'
|
||||||
import { intensity as labels } from '../labels/labels'
|
import { intensity as labels } from '../labels/labels'
|
||||||
import ActionButtonFooter from './action-button-footer'
|
import ActionButtonFooter from './action-button-footer'
|
||||||
import RadioButtonGroup from '../radio-button-group'
|
import SelectTabGroup from '../select-tab-group'
|
||||||
|
|
||||||
export default class Desire extends Component {
|
export default class Desire extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@@ -31,7 +31,7 @@ export default class Desire extends Component {
|
|||||||
<View style={{ flex: 1 }}>
|
<View style={{ flex: 1 }}>
|
||||||
<ScrollView style={styles.page}>
|
<ScrollView style={styles.page}>
|
||||||
<View>
|
<View>
|
||||||
<RadioButtonGroup
|
<SelectTabGroup
|
||||||
buttons={desireRadioProps}
|
buttons={desireRadioProps}
|
||||||
acitve={this.state.currentValue}
|
acitve={this.state.currentValue}
|
||||||
onSelect={val => this.setState({ currentValue: val })}
|
onSelect={val => this.setState({ currentValue: val })}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import {
|
|||||||
} from '../labels/labels'
|
} from '../labels/labels'
|
||||||
import computeSensiplanValue from '../../../lib/sensiplan-mucus'
|
import computeSensiplanValue from '../../../lib/sensiplan-mucus'
|
||||||
import ActionButtonFooter from './action-button-footer'
|
import ActionButtonFooter from './action-button-footer'
|
||||||
import RadioButtonGroup from '../radio-button-group'
|
import SelectTabGroup from '../select-tab-group'
|
||||||
import { SymptomSectionHeader } from '../../app-text'
|
import { SymptomSectionHeader } from '../../app-text'
|
||||||
|
|
||||||
|
|
||||||
@@ -52,13 +52,13 @@ export default class Mucus extends Component {
|
|||||||
<ScrollView style={styles.page}>
|
<ScrollView style={styles.page}>
|
||||||
<View>
|
<View>
|
||||||
<SymptomSectionHeader>Feeling</SymptomSectionHeader>
|
<SymptomSectionHeader>Feeling</SymptomSectionHeader>
|
||||||
<RadioButtonGroup
|
<SelectTabGroup
|
||||||
buttons={mucusFeeling}
|
buttons={mucusFeeling}
|
||||||
onSelect={val => this.setState({ feeling: val })}
|
onSelect={val => this.setState({ feeling: val })}
|
||||||
active={this.state.feeling}
|
active={this.state.feeling}
|
||||||
/>
|
/>
|
||||||
<SymptomSectionHeader>Texture</SymptomSectionHeader>
|
<SymptomSectionHeader>Texture</SymptomSectionHeader>
|
||||||
<RadioButtonGroup
|
<SelectTabGroup
|
||||||
buttons={mucusTexture}
|
buttons={mucusTexture}
|
||||||
onSelect={val => this.setState({ texture: val })}
|
onSelect={val => this.setState({ texture: val })}
|
||||||
active={this.state.texture}
|
active={this.state.texture}
|
||||||
|
|||||||
+20
-18
@@ -213,31 +213,33 @@ export default StyleSheet.create({
|
|||||||
flexWrap: 'wrap',
|
flexWrap: 'wrap',
|
||||||
marginVertical: 10,
|
marginVertical: 10,
|
||||||
},
|
},
|
||||||
radioButtonGroup: {
|
selectTabGroup: {
|
||||||
marginTop: 10
|
marginTop: 10,
|
||||||
|
flexDirection: 'row'
|
||||||
},
|
},
|
||||||
radioButton: {
|
selectTab: {
|
||||||
width: 20,
|
backgroundColor: 'lightgrey',
|
||||||
height: 20,
|
|
||||||
borderRadius: 100,
|
|
||||||
borderStyle: 'solid',
|
borderStyle: 'solid',
|
||||||
borderWidth: 2,
|
borderLeftWidth: 1,
|
||||||
borderColor: secondaryColor,
|
paddingVertical: 10,
|
||||||
|
paddingHorizontal: 15,
|
||||||
|
borderColor: 'white',
|
||||||
marginBottom: 3,
|
marginBottom: 3,
|
||||||
marginRight: 10,
|
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
justifyContent: 'center'
|
justifyContent: 'center'
|
||||||
},
|
},
|
||||||
radioButtonActiveDot: {
|
selectTabActive: {
|
||||||
width: 10,
|
backgroundColor: secondaryColor,
|
||||||
height: 10,
|
color: fontOnPrimaryColor
|
||||||
borderRadius: 100,
|
|
||||||
backgroundColor: secondaryColor
|
|
||||||
},
|
},
|
||||||
radioButtonTextGroup: {
|
selectTabLast: {
|
||||||
marginRight: 10,
|
borderTopRightRadius: 10,
|
||||||
flexDirection: 'row',
|
borderBottomRightRadius: 10,
|
||||||
marginBottom: 10
|
},
|
||||||
|
selectTabFirst: {
|
||||||
|
borderTopLeftRadius: 10,
|
||||||
|
borderBottomLeftRadius: 10,
|
||||||
|
borderLeftWidth: null
|
||||||
},
|
},
|
||||||
page: {
|
page: {
|
||||||
marginHorizontal: 10
|
marginHorizontal: 10
|
||||||
|
|||||||
Reference in New Issue
Block a user