import { DateTime } from 'luxon'; import { apply, call, put, takeEvery } from 'redux-saga/effects'; import { setDateReminder } from '../../actions/dates'; import { setReminder } from '../../actions/reminders'; import * as reminderUIActions from '../../actions/ui/reminder'; import { dateTimeStringsToMillis, DATE_FORMAT } from '../../helpers/calendar'; import { DEFAULT_COLOR } from '../../helpers/colors'; import { generateUUID } from '../../helpers/uuid'; export function* openReminder(reminder) { yield put(reminderUIActions.openReminder(reminder)); } export function* newReminder(action) { const initialDate = action.payload; let initialDateTime = yield apply(DateTime, 'local'); if (initialDate) { const parsed = DateTime.fromFormat(initialDate, DATE_FORMAT); if (parsed.isValid) { initialDateTime = initialDateTime.set({ year: parsed.year, month: parsed.month, day: parsed.day, }); } } const initialColor = DEFAULT_COLOR; const reminder = { id: null, description: '', color: initialColor, dateTime: initialDateTime.toMillis(), city: '', }; yield call(openReminder, reminder); } export function* editReminder(action) { yield call(openReminder, action.payload); } export function* submitReminder(action) { const reminder = action.payload; let id = reminder.id; if (!id) { // It is a new reminder, create an id for it since we don't have a backend. id = yield call(generateUUID); } const reminderToSet = { id, description: reminder.description, color: reminder.color, dateTime: dateTimeStringsToMillis(reminder.date, reminder.time), city: reminder.city, }; const dateReminder = { date: reminder.date, reminderId: reminderToSet.id }; // TODO: Save do IDB (with dexie) yield put(setReminder(reminderToSet)); yield put(setDateReminder(dateReminder)); yield put(reminderUIActions.closeReminder()); } export function* watchNewReminder() { yield takeEvery(reminderUIActions.NEW_REMINDER, newReminder); } export function* watchEditReminder() { yield takeEvery(reminderUIActions.EDIT_REMINDER, editReminder); } export function* watchSubmitReminder() { yield takeEvery(reminderUIActions.SUBMIT_REMINDER, submitReminder); }