diff --git a/apps/mobile/app/components/sheets/reminder/index.tsx b/apps/mobile/app/components/sheets/reminder/index.tsx
index 84e3cf8ef..046b9c3f1 100644
--- a/apps/mobile/app/components/sheets/reminder/index.tsx
+++ b/apps/mobile/app/components/sheets/reminder/index.tsx
@@ -17,7 +17,13 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
import React, { RefObject, useRef, useState } from "react";
-import { Platform, ScrollView, View, TextInput } from "react-native";
+import {
+ Platform,
+ ScrollView,
+ View,
+ TextInput,
+ useWindowDimensions
+} from "react-native";
import ActionSheet from "react-native-actions-sheet";
import DateTimePickerModal from "react-native-modal-datetime-picker";
import {
@@ -112,6 +118,7 @@ export default function ReminderSheet({
const title = useRef(reminder?.title);
const details = useRef(reminder?.description);
const titleRef = useRef(null);
+ const { height } = useWindowDimensions();
const showDatePicker = () => {
setDatePickerVisibility(true);
};
@@ -148,69 +155,70 @@ export default function ReminderSheet({
}
async function saveReminder() {
- if (!(await Notifications.checkAndRequestPermissions())) return;
- if (!date && reminderMode !== ReminderModes.Permanent) return;
- if (!title.current) {
- ToastEvent.show({
- heading: "Please set title of the reminder",
- type: "error",
- context: "local"
- });
- return;
- }
- if (date.getTime() < Date.now() && reminderMode === "once") {
- ToastEvent.show({
- heading: "Reminder date must be set in future",
- type: "error",
- context: "local"
- });
- titleRef?.current?.focus();
- return;
- }
+ try {
+ if (!(await Notifications.checkAndRequestPermissions()))
+ throw new Error(
+ "App does not have permission to schedule notifications"
+ );
+ if (!date && reminderMode !== ReminderModes.Permanent) return;
+ if (
+ reminderMode === ReminderModes.Repeat &&
+ recurringMode !== "day" &&
+ selectedDays.length === 0
+ )
+ throw new Error("Please select the day to repeat the reminder on");
- date.setSeconds(0, 0);
+ if (!title.current) throw new Error("Please set title of the reminder");
+ if (date.getTime() < Date.now() && reminderMode === "once") {
+ titleRef?.current?.focus();
+ throw new Error("Reminder date must be set in future");
+ }
- const reminderId = await db.reminders?.add({
- id: reminder?.id,
- date: date?.getTime(),
- priority: reminderNotificationMode,
- title: title.current,
- description: details.current,
- recurringMode: recurringMode,
- selectedDays: selectedDays,
- mode: reminderMode,
- localOnly: reminderMode === "permanent",
- snoozeUntil:
- date?.getTime() > Date.now() ? undefined : reminder?.snoozeUntil,
- disabled: false
- });
+ date.setSeconds(0, 0);
- const _reminder = db.reminders?.reminder(reminderId);
-
- if (!_reminder) {
- ToastEvent.show({
- heading: "Failed to add a new reminder"
+ const reminderId = await db.reminders?.add({
+ id: reminder?.id,
+ date: date?.getTime(),
+ priority: reminderNotificationMode,
+ title: title.current,
+ description: details.current,
+ recurringMode: recurringMode,
+ selectedDays: selectedDays,
+ mode: reminderMode,
+ localOnly: reminderMode === "permanent",
+ snoozeUntil:
+ date?.getTime() > Date.now() ? undefined : reminder?.snoozeUntil,
+ disabled: false
});
+
+ const _reminder = db.reminders?.reminder(reminderId);
+
+ if (!_reminder) {
+ ToastEvent.show({
+ heading: "Failed to add a new reminder"
+ });
+ }
+ if (reference) {
+ await db.relations?.add(reference, {
+ id: _reminder?.id as string,
+ type: _reminder?.type as string
+ });
+ }
+ Notifications.scheduleNotification(_reminder as Reminder);
+ Navigation.queueRoutesForUpdate(
+ "TaggedNotes",
+ "ColoredNotes",
+ "Notes",
+ "NotesPage",
+ "Reminders",
+ "Favorites",
+ "TopicNotes"
+ );
+ useRelationStore.getState().update();
+ close?.();
+ } catch (e) {
+ ToastEvent.error(e as Error);
}
- if (reference) {
- await db.relations?.add(reference, {
- id: _reminder?.id as string,
- type: _reminder?.type as string
- });
- }
- Notifications.scheduleNotification(_reminder as Reminder);
- Navigation.queueRoutesForUpdate(
- "TaggedNotes",
- "ColoredNotes",
- "Notes",
- "NotesPage",
- "Reminders",
- "Favorites",
- "TopicNotes"
- );
- useRelationStore.getState().update();
- close?.("local");
- close?.();
}
return (
@@ -219,324 +227,333 @@ export default function ReminderSheet({
paddingHorizontal: 12
}}
>
- (title.current = text)}
- containerStyle={{ borderWidth: 0, borderBottomWidth: 1 }}
- />
-
- (details.current = text)}
- containerStyle={{ borderWidth: 0, borderBottomWidth: 1 }}
- />
-
- actionSheetRef.current?.handleChildScrollEnd()}
style={{
- flexDirection: "row",
- marginBottom: 12
+ maxHeight: height * 0.85
}}
>
- {Object.keys(ReminderModes).map((mode) => (
-
+ (title.current = text)}
+ containerStyle={{ borderWidth: 0, borderBottomWidth: 1 }}
+ />
- {reminderMode === ReminderModes.Repeat ? (
-
-
- {Object.keys(RecurringModes).map((mode) => (
-
+ (details.current = text)}
+ containerStyle={{ borderWidth: 0, borderBottomWidth: 1 }}
+ />
-
- {recurringMode === RecurringModes.Daily
- ? null
- : recurringMode === RecurringModes.Week
- ? WeekDays.map((item, index) => (
-
-
- ) : null}
-
- {reminderMode === ReminderModes.Permanent ? null : (
-
-
-
-
-
- {reminderMode === ReminderModes.Repeat ? null : (
- {
- showDatePicker();
- }}
- />
- )}
-
- )}
-
- {reminderMode === ReminderModes.Permanent ? null : (
- {Object.keys(ReminderNotificationModes).map((mode) => (
+ {Object.keys(ReminderModes).map((mode) => (
{
- setReminderNotificatioMode(
- ReminderNotificationModes[
- mode as keyof typeof ReminderNotificationModes
- ] as Reminder["priority"]
+ if (mode === "Repeat" && !PremiumService.get()) return;
+ setReminderMode(
+ ReminderModes[
+ mode as keyof typeof ReminderModes
+ ] as Reminder["mode"]
);
}}
/>
))}
- )}
- {reminderMode === ReminderModes.Once ||
- reminderMode === ReminderModes.Permanent ? null : (
-
- <>
-
- {recurringMode === RecurringModes.Daily
- ? "Repeats daily " + `at ${dayjs(date).format("hh:mm A")}.`
- : selectedDays.length === 7 &&
- recurringMode === RecurringModes.Week
- ? `The reminder will repeat daily at ${dayjs(date).format(
- "hh:mm A"
- )}.`
- : selectedDays.length === 0
- ? recurringMode === RecurringModes.Week
- ? "Select day of the week to repeat the reminder."
- : "Select nth day of the month to repeat the reminder."
- : `Repeats every${
- repeatFrequency > 1 ? " " + repeatFrequency : ""
- } ${
- repeatFrequency > 1 ? recurringMode + "s" : recurringMode
- } on ${getSelectedDaysText(selectedDays)} at ${dayjs(
- date
- ).format("hh:mm A")}.`}
-
- >
-
- )}
- {reminder && reminder.date ? (
-
- <>
-
-
+
- {formatReminderTime(reminder)}
-
- >
-
- ) : null}
+ {Object.keys(RecurringModes).map((mode) => (
+ {
+ setRecurringMode(
+ RecurringModes[
+ mode as keyof typeof RecurringModes
+ ] as Reminder["recurringMode"]
+ );
+ setSelectedDays([]);
+ setRepeatFrequency(1);
+ }}
+ />
+ ))}
+
+
+ {recurringMode === RecurringModes.Daily
+ ? null
+ : recurringMode === RecurringModes.Week
+ ? WeekDays.map((item, index) => (
+ -1 ? "accent" : "gray"
+ }
+ fontSize={SIZE.sm - 1}
+ style={{
+ width: 40,
+ height: 40,
+ borderRadius: 100,
+ marginRight: 10,
+ backgroundColor:
+ selectedDays.indexOf(index) > -1
+ ? colors.accent
+ : colors.bg
+ }}
+ onPress={() => {
+ setSelectedDays((days) => {
+ if (days.indexOf(index) > -1) {
+ days.splice(days.indexOf(index), 1);
+ return [...days];
+ }
+ days.push(index);
+ return [...days];
+ });
+ }}
+ />
+ ))
+ : MonthDays.map((item, index) => (
+ -1 ? "accent" : "gray"
+ }
+ fontSize={SIZE.sm - 1}
+ style={{
+ width: 40,
+ height: 40,
+ borderRadius: 100,
+ marginRight: 10,
+ backgroundColor:
+ selectedDays.indexOf(index + 1) > -1
+ ? colors.accent
+ : colors.bg
+ }}
+ onPress={() => {
+ setSelectedDays((days) => {
+ if (days.indexOf(index + 1) > -1) {
+ days.splice(days.indexOf(index + 1), 1);
+ return [...days];
+ }
+ days.push(index + 1);
+ return [...days];
+ });
+ }}
+ />
+ ))}
+
+
+ ) : null}
+
+ {reminderMode === ReminderModes.Permanent ? null : (
+
+
+
+
+
+ {reminderMode === ReminderModes.Repeat ? null : (
+ {
+ showDatePicker();
+ }}
+ />
+ )}
+
+ )}
+
+ {reminderMode === ReminderModes.Permanent ? null : (
+
+ {Object.keys(ReminderNotificationModes).map((mode) => (
+ {
+ setReminderNotificatioMode(
+ ReminderNotificationModes[
+ mode as keyof typeof ReminderNotificationModes
+ ] as Reminder["priority"]
+ );
+ }}
+ />
+ ))}
+
+ )}
+ {reminderMode === ReminderModes.Once ||
+ reminderMode === ReminderModes.Permanent ? null : (
+
+ <>
+
+ {recurringMode === RecurringModes.Daily
+ ? "Repeats daily " + `at ${dayjs(date).format("hh:mm A")}.`
+ : selectedDays.length === 7 &&
+ recurringMode === RecurringModes.Week
+ ? `The reminder will repeat daily at ${dayjs(date).format(
+ "hh:mm A"
+ )}.`
+ : selectedDays.length === 0
+ ? recurringMode === RecurringModes.Week
+ ? "Select day of the week to repeat the reminder."
+ : "Select nth day of the month to repeat the reminder."
+ : `Repeats every${
+ repeatFrequency > 1 ? " " + repeatFrequency : ""
+ } ${
+ repeatFrequency > 1 ? recurringMode + "s" : recurringMode
+ } on ${getSelectedDaysText(selectedDays)} at ${dayjs(
+ date
+ ).format("hh:mm A")}.`}
+
+ >
+
+ )}
+
+ {reminder && reminder.date ? (
+
+ <>
+
+
+ {formatReminderTime(reminder)}
+
+ >
+
+ ) : null}
+