This commit is contained in:
Julia Friesel
2019-05-26 12:37:51 +02:00
parent 018ec3bcda
commit 6c56b6f83c
8 changed files with 45 additions and 77 deletions
-13
View File
@@ -18,19 +18,6 @@ export default function AppText(props) {
)
}
export function ActionHint(props) {
if(props.isVisible) {
return (
<AppText
style={[styles.actionHint, props.style]}>
{props.children}
</AppText>
)
} else {
return null
}
}
export function SymptomSectionHeader(props) {
return (
<AppText style={styles.symptomViewHeading}>
@@ -24,13 +24,6 @@ export default class SymptomView extends Component {
this.autoSave()
}
// TODO where is this needed now?
async handleBackButtonPressOnSymptomView() {
// every specific symptom view provides their own onBackButtonPress method
const stopHere = await this.onBackButtonPress()
if (!stopHere) this.globalBackhandler()
}
saveSymptomEntry(entry) {
saveSymptom(this.symptomName, this.date, entry)
}
@@ -59,8 +52,7 @@ export default class SymptomView extends Component {
<Header
title={headerTitles[this.symptomName].toLowerCase()}
date={this.date}
// TODO what to put here instead?
goBack={this.handleBackButtonPressOnSymptomView.bind(this)}
goBack={this.props.handleBackButtonPress}
deleteIconActive={this.isDeleteIconActive()}
deleteEntry={() => {
Alert.alert(
+30 -44
View File
@@ -3,7 +3,6 @@ import {
View,
Switch,
Keyboard,
Alert,
ScrollView
} from 'react-native'
import DateTimePicker from 'react-native-modal-datetime-picker-nevo'
@@ -35,7 +34,6 @@ export default class Temp extends SymptomView {
exclude: temp ? temp.exclude : false,
time: temp ? temp.time : LocalTime.now().truncatedTo(minutes).toString(),
isTimePickerVisible: false,
outOfRange: null,
note: temp ? temp.note : null
}
@@ -44,6 +42,7 @@ export default class Temp extends SymptomView {
if (temp.value === Math.floor(temp.value)) {
this.state.temperature = `${this.state.temperature}.0`
}
this.state.outOfRangeWarning = makeOutOfRangeWarningMessage(this.state.temperature)
} else {
const prevTemp = getPreviousTemperature(props.date)
if (prevTemp) {
@@ -79,43 +78,13 @@ export default class Temp extends SymptomView {
this.saveSymptomEntry(dataToSave)
}
warnUserIfTempOutOfRange = async () => {
const value = Number(this.state.temperature)
const { min, max } = config.temperatureScale
const range = { min, max }
const scale = scaleObservable.value
let warningMsg
if (value < range.min || value > range.max) {
warningMsg = labels.outOfAbsoluteRangeWarning
} else if (value < scale.min || value > scale.max) {
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) {
// we set this so the time picker doesn't open at the same time
this.warningAlertOpen = true
Alert.alert(
sharedLabels.warning,
warningMsg,
[
{ text: sharedLabels.ok, onPress: () => {
this.warningAlertOpen = false
}}
]
)
} else {
resolve(true)
}
})
}
setTemperature = (temperature) => {
if (isNaN(Number(temperature))) return
this.setState({ temperature, isSuggestion: false })
this.setState({
temperature, isSuggestion: false,
outOfRangeWarning: makeOutOfRangeWarningMessage(temperature)
})
}
setNote = (note) => {
@@ -146,10 +115,14 @@ export default class Temp extends SymptomView {
onChangeText={this.setTemperature}
keyboardType='numeric'
maxLength={5}
onBlur={this.warnUserIfTempOutOfRange}
/>
<AppText style={{ marginLeft: 5 }}>°C</AppText>
</View>
{this.state.outOfRangeWarning &&
<AppText style={styles.hint}>
{this.state.outOfRangeWarning}
</AppText>
}
</SymptomSection>
<SymptomSection
header={labels.time}
@@ -157,13 +130,7 @@ export default class Temp extends SymptomView {
<View style={styles.framedSegmentInlineChildren}>
<AppTextInput
style={[styles.temperatureTextInput]}
onFocus={() => {
if (this.warningAlertOpen) {
Keyboard.dismiss()
} else {
this.showTimePicker()
}
}}
onFocus={this.showTimePicker}
value={this.state.time}
/>
<DateTimePicker
@@ -207,3 +174,22 @@ export default class Temp extends SymptomView {
)
}
}
function makeOutOfRangeWarningMessage(temperature) {
if (temperature === '') return
const value = Number(temperature)
const { min, max } = config.temperatureScale
const range = { min, max }
const scale = scaleObservable.value
let warningMsg
if (value < range.min || value > range.max) {
warningMsg = labels.outOfAbsoluteRangeWarning
} else if (value < scale.min || value > scale.max) {
warningMsg = labels.outOfRangeWarning
} else {
warningMsg = null
}
return warningMsg
}