import {Ionicons} from "@expo/vector-icons"; import React, {useCallback, useState} from "react"; import {Button, Checkbox, Text, View} from "react-native-ui-lib"; import {ActivityIndicator, ScrollView, StyleSheet} from "react-native"; import {TouchableOpacity} from "react-native-gesture-handler"; import {useAuthContext} from "@/contexts/AuthContext"; import {useUpdateUserData} from "@/hooks/firebase/useUpdateUserData"; import debounce from "debounce"; import AppleIcon from "@/assets/svgs/AppleIcon"; import GoogleIcon from "@/assets/svgs/GoogleIcon"; import OutlookIcon from "@/assets/svgs/OutlookIcon"; import ExpoLocalization from "expo-localization/src/ExpoLocalization"; import {useSetAtom} from "jotai"; import {settingsPageIndex} from "../calendar/atoms"; import CalendarSettingsDialog from "./calendar_components/CalendarSettingsDialog"; import {useClearTokens} from "@/hooks/firebase/useClearTokens"; import {useCalSync} from "@/hooks/useCalSync"; import Feather from "@expo/vector-icons/Feather"; const CalendarSettingsPage = () => { const {profileData} = useAuthContext(); const setPageIndex = useSetAtom(settingsPageIndex); const [firstDayOfWeek, setFirstDayOfWeek] = useState( profileData?.firstDayOfWeek ?? ExpoLocalization.getCalendars()[0].firstWeekday === 1 ? "Mondays" : "Sundays" ); const [isModalVisible, setModalVisible] = useState(false); const [selectedService, setSelectedService] = useState< "google" | "outlook" | "apple" >("google"); const [selectedEmail, setSelectedEmail] = useState(""); const showConfirmationDialog = ( serviceName: "google" | "outlook" | "apple", email: string ) => { setSelectedService(serviceName); setSelectedEmail(email); setModalVisible(true); }; const handleConfirm = async () => { await clearToken({email: selectedEmail, provider: selectedService}); setModalVisible(false); }; const handleCancel = () => { setModalVisible(false); }; const {mutateAsync: updateUserData} = useUpdateUserData(); const {mutateAsync: clearToken} = useClearTokens(); const { isSyncingGoogle, isSyncingOutlook, isConnectedToGoogle, isConnectedToMicrosoft, isConnectedToApple, handleAppleSignIn, isSyncingApple, handleMicrosoftSignIn, fetchAndSaveOutlookEvents, fetchAndSaveGoogleEvents, handleStartGoogleSignIn, fetchAndSaveAppleEvents } = useCalSync() const debouncedUpdateFirstDayOfWeek = useCallback( debounce(async (firstDayOfWeek: string) => { try { await updateUserData({ newUserData: { firstDayOfWeek, }, }); } catch (error) { console.error("Failed to update first day of week:", error); } }, 500), [] ); const handleChangeFirstDayOfWeek = (firstDayOfWeek: string) => { setFirstDayOfWeek(firstDayOfWeek); debouncedUpdateFirstDayOfWeek(firstDayOfWeek); }; return ( setPageIndex(0)}> Return to main settings Calendar settings Weekly Start Date handleChangeFirstDayOfWeek("Sundays")} /> Sundays {" "} (default) handleChangeFirstDayOfWeek("Mondays")} /> Mondays Add Calendars