Await alert result before navigating back
This commit is contained in:
@@ -7,12 +7,20 @@ import { headerTitles } from '../../../i18n/en/labels'
|
|||||||
export default class SymptomView extends Component {
|
export default class SymptomView extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super()
|
super()
|
||||||
// every specific symptom view provides their own onBackButtonPress method
|
this.backHandler = BackHandler.addEventListener(
|
||||||
this.backHandler = BackHandler.addEventListener('hardwareBackPress', this.onBackButtonPress.bind(this))
|
'hardwareBackPress',
|
||||||
|
this.handleBackButtonPressOnSymptomView.bind(this)
|
||||||
|
)
|
||||||
this.globalBackhandler = props.handleBackButtonPress
|
this.globalBackhandler = props.handleBackButtonPress
|
||||||
this.date = props.date
|
this.date = props.date
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async handleBackButtonPressOnSymptomView() {
|
||||||
|
// every specific symptom view provides their own onBackButtonPress method
|
||||||
|
const stopHere = await this.onBackButtonPress()
|
||||||
|
if (!stopHere) this.globalBackhandler()
|
||||||
|
}
|
||||||
|
|
||||||
saveSymptomEntry(entry) {
|
saveSymptomEntry(entry) {
|
||||||
saveSymptom(this.symptomName, this.date, entry)
|
saveSymptom(this.symptomName, this.date, entry)
|
||||||
}
|
}
|
||||||
@@ -31,10 +39,7 @@ export default class SymptomView extends Component {
|
|||||||
<Header
|
<Header
|
||||||
title={headerTitles[this.symptomName].toLowerCase()}
|
title={headerTitles[this.symptomName].toLowerCase()}
|
||||||
date={this.date}
|
date={this.date}
|
||||||
goBack={() => {
|
goBack={this.handleBackButtonPressOnSymptomView.bind(this)}
|
||||||
this.onBackButtonPress()
|
|
||||||
this.globalBackhandler()
|
|
||||||
}}
|
|
||||||
deleteEntry={() => {
|
deleteEntry={() => {
|
||||||
this.deleteSymptomEntry()
|
this.deleteSymptomEntry()
|
||||||
this.globalBackhandler()
|
this.globalBackhandler()
|
||||||
|
|||||||
@@ -55,13 +55,16 @@ export default class Temp extends SymptomView {
|
|||||||
|
|
||||||
symptomName = 'temperature'
|
symptomName = 'temperature'
|
||||||
|
|
||||||
onBackButtonPress() {
|
async onBackButtonPress() {
|
||||||
if (typeof this.state.temperature != 'string' || this.state.temperature === '') {
|
if (typeof this.state.temperature != 'string' || this.state.temperature === '') {
|
||||||
this.deleteSymptomEntry()
|
this.deleteSymptomEntry()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
this.checkRangeAndSave()
|
const userWantsToSave = await this.warnUserIfTempOutOfRange()
|
||||||
|
if (!userWantsToSave) return true
|
||||||
|
|
||||||
|
this.saveTemperature()
|
||||||
}
|
}
|
||||||
|
|
||||||
saveTemperature = () => {
|
saveTemperature = () => {
|
||||||
@@ -75,7 +78,7 @@ export default class Temp extends SymptomView {
|
|||||||
this.saveSymptomEntry(dataToSave)
|
this.saveSymptomEntry(dataToSave)
|
||||||
}
|
}
|
||||||
|
|
||||||
checkRangeAndSave = () => {
|
warnUserIfTempOutOfRange = async () => {
|
||||||
const value = Number(this.state.temperature)
|
const value = Number(this.state.temperature)
|
||||||
const { min, max } = config.temperatureScale
|
const { min, max } = config.temperatureScale
|
||||||
const range = { min, max }
|
const range = { min, max }
|
||||||
@@ -88,18 +91,26 @@ export default class Temp extends SymptomView {
|
|||||||
warningMsg = labels.outOfRangeWarning
|
warningMsg = labels.outOfRangeWarning
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RN alert runs asynchronously but doesn't provide a callback, so wrap
|
||||||
|
// it in a promise
|
||||||
|
return new Promise(resolve => {
|
||||||
if (warningMsg) {
|
if (warningMsg) {
|
||||||
Alert.alert(
|
Alert.alert(
|
||||||
sharedLabels.warning,
|
sharedLabels.warning,
|
||||||
warningMsg,
|
warningMsg,
|
||||||
[
|
[
|
||||||
{ text: sharedLabels.cancel },
|
{ text: sharedLabels.cancel, onPress: () => {
|
||||||
{ text: sharedLabels.save, onPress: this.saveTemperature}
|
resolve(false)
|
||||||
|
}},
|
||||||
|
{ text: sharedLabels.save, onPress: () => {
|
||||||
|
resolve(true)
|
||||||
|
}}
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
this.saveTemperature()
|
resolve(true)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
setTemperature = (temperature) => {
|
setTemperature = (temperature) => {
|
||||||
@@ -136,7 +147,6 @@ export default class Temp extends SymptomView {
|
|||||||
onChangeText={this.setTemperature}
|
onChangeText={this.setTemperature}
|
||||||
keyboardType='numeric'
|
keyboardType='numeric'
|
||||||
maxLength={5}
|
maxLength={5}
|
||||||
onBlur={this.checkRange}
|
|
||||||
/>
|
/>
|
||||||
<AppText style={{ marginLeft: 5 }}>°C</AppText>
|
<AppText style={{ marginLeft: 5 }}>°C</AppText>
|
||||||
</View>
|
</View>
|
||||||
|
|||||||
Reference in New Issue
Block a user