Skip to content
Snippets Groups Projects
Commit 80bec57f authored by tina's avatar tina
Browse files

tries to enable notifications for next period

parent ce5a8ce5
No related branches found
No related tags found
No related merge requests found
......@@ -57,7 +57,7 @@ export const settings = {
periodReminder: {
title: 'Next period reminder',
reminderText: 'Get a notification 3 days before your next period is likely to start.',
notification: 'your next period is likely to start in x days.'
notification: daysToEndOfPrediction => `Your next period is likely to start in 3 to ${daysToEndOfPrediction} days.`
},
passwordSettings: {
title: 'App password',
......
......@@ -14,7 +14,7 @@ import { settings as labels } from '../labels'
export default class PeriodReminderPicker extends Component {
constructor(props) {
super(props)
this.state = Object.assign({}, periodReminderObservable.value)
this.state = periodReminderObservable.value
}
render() {
......@@ -31,7 +31,7 @@ export default class PeriodReminderPicker extends Component {
value={this.state.enabled}
onValueChange={switchOn => {
this.setState({ enabled: switchOn })
savePeriodReminder({enabled: true})
savePeriodReminder({enabled: switchOn})
}}
/>
</View>
......
import {tempReminderObservable} from '../local-storage'
import {tempReminderObservable, periodReminderObservable} from '../local-storage'
import Notification from 'react-native-push-notification'
import { LocalDate } from 'js-joda'
import Moment from 'moment'
import { settings as labels } from '../components/labels'
import { getOrCreateCycleDay } from '../db'
import cycleModule from './cycle'
export default function setupNotifications(navigate) {
Notification.configure({
onNotification: () => {
const todayDateString = LocalDate.now().toString()
const cycleDay = getOrCreateCycleDay(todayDateString)
navigate('TemperatureEditView', { cycleDay })
if (this.id === '1') {
navigate('TemperatureEditView', { cycleDay })
} else if (this.id === '2') {
navigate('Home')
} else {
navigate('Home')
}
}
})
tempReminderObservable(reminder => {
Notification.cancelAllLocalNotifications()
Notification.cancelAllLocalNotifications({id: '1'})
if (reminder.enabled) {
const [hours, minutes] = reminder.time.split(':')
let target = new Moment()
......@@ -28,6 +35,7 @@ export default function setupNotifications(navigate) {
}
Notification.localNotificationSchedule({
id: '1',
message: labels.tempReminder.notification,
date: target.toDate(),
vibrate: false,
......@@ -35,4 +43,24 @@ export default function setupNotifications(navigate) {
})
}
})
periodReminderObservable(reminder => {
if (reminder.enabled) {
const bleedingPrediction = cycleModule().getPredictedMenses()
if (bleedingPrediction.length > 0) {
const bleedingStart = LocalDate.parse(bleedingPrediction[0][0])
const reminderDate = bleedingStart.minusDays(3)
// period is likely to start in 3 to 3 + (length of prediction - 1) days
const daysToEndOfPrediction = bleedingPrediction[0].length + 2
Notification.localNotificationSchedule({
id: '2',
message: labels.periodReminder.notification(daysToEndOfPrediction),
date: reminderDate,
vibrate: false,
onNotification: navigate('Home')
})
}
}
})
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment