import React, { useCallback, useEffect, useState } from "react"; import { View, ScrollView, Switch, ActivityIndicator, TextInput, useColorScheme, Pressable, } from "react-native"; import { useSirouRouter } from "@sirou/react-native"; import { AppRoutes } from "@/lib/routes"; import { Text } from "@/components/ui/text"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { ScreenWrapper } from "@/components/ScreenWrapper"; import { StandardHeader } from "@/components/StandardHeader"; import { api } from "@/lib/api"; import { Bell, CalendarSearch, FileText, Newspaper, ChevronRight } from "@/lib/icons"; import { getPlaceholderColor } from "@/lib/colors"; import { PickerModal, SelectOption } from "@/components/PickerModal"; type NotificationSettings = { id: string; invoiceReminders: boolean; daysBeforeDueDate: number; newsAlerts: boolean; reportReady: boolean; userId: string; createdAt: string; updatedAt: string; }; export default function NotificationSettingsScreen() { const nav = useSirouRouter(); const colorScheme = useColorScheme(); const isDark = colorScheme === "dark"; const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [settings, setSettings] = useState(null); const [invoiceReminders, setInvoiceReminders] = useState(false); const [daysBeforeDueDate, setDaysBeforeDueDate] = useState("0"); const [newsAlerts, setNewsAlerts] = useState(false); const [reportReady, setReportReady] = useState(false); const [daysModalVisible, setDaysModalVisible] = useState(false); const daysOptions = [ { label: "1 day", value: "1" }, { label: "3 days", value: "3" }, { label: "7 days", value: "7" }, { label: "14 days", value: "14" }, { label: "30 days", value: "30" }, ]; const loadSettings = useCallback(async () => { try { setLoading(true); const res = await (api as any).notifications.settings(); const data = res?.data ?? res; setSettings(data); setInvoiceReminders(Boolean(data?.invoiceReminders)); setNewsAlerts(Boolean(data?.newsAlerts)); setReportReady(Boolean(data?.reportReady)); setDaysBeforeDueDate(String(data?.daysBeforeDueDate ?? 0)); } catch (e) { } finally { setLoading(false); } }, []); useEffect(() => { loadSettings(); }, [loadSettings]); const onSave = async () => { setSaving(true); try { await api.notifications.update({ body: { invoiceReminders, daysBeforeDueDate: parseInt(daysBeforeDueDate), newsAlerts, reportReady, }, }); nav.back(); } finally { setSaving(false); } }; return ( {loading ? ( ) : ( Preferences Invoice reminders Get reminders before invoices are due Days before due date Currently: {daysBeforeDueDate} days setDaysModalVisible(true)}> News alerts Product updates and announcements Report ready Notify when reports are generated )} setDaysModalVisible(false)} > {daysOptions.map((option) => ( { setDaysBeforeDueDate(value); setDaysModalVisible(false); }} /> ))} ); }