From 80bec57f69ca57848be7568a593c952ea74fd2dd Mon Sep 17 00:00:00 2001 From: tina Date: Tue, 25 Sep 2018 15:28:04 +0200 Subject: [PATCH] tries to enable notifications for next period --- components/labels.js | 2 +- components/settings/period-reminder.js | 4 +-- lib/notifications.js | 34 +++++++++++++++++++++++--- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/components/labels.js b/components/labels.js index 60b53fc..6939c51 100644 --- a/components/labels.js +++ b/components/labels.js @@ -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', diff --git a/components/settings/period-reminder.js b/components/settings/period-reminder.js index 212c39d..70ec0fc 100644 --- a/components/settings/period-reminder.js +++ b/components/settings/period-reminder.js @@ -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}) }} /> diff --git a/lib/notifications.js b/lib/notifications.js index dc1a7a5..6dee83d 100644 --- a/lib/notifications.js +++ b/lib/notifications.js @@ -1,21 +1,28 @@ -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