import React, { useState } from "react"; import { Box, List, ListItem, ListItemIcon, ListItemText, Tabs, Tab, IconButton, FormControl, Select, MenuItem, Typography, Snackbar, } from "@mui/material"; import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import SettingsIcon from "@mui/icons-material/Settings"; import SyncIcon from "@mui/icons-material/Sync"; import { useAppDispatch, useAppSelector } from "../../app/hooks"; import { setView, setLanguage as setSettingsLanguage } from "./SettingsSlice"; import { updateUserConfigurationsAsync, setLanguage as setUserLanguage, } from "../User/userSlice"; import { AVAILABLE_LANGUAGES } from "./constants"; import { useI18n } from "cozy-ui/transpiled/react/providers/I18n"; import "./SettingsPage.styl"; type SidebarNavItem = "settings" | "sync"; type SettingsSubTab = "settings" | "notifications"; export default function SettingsPage() { const dispatch = useAppDispatch(); const { t } = useI18n(); const userLanguage = useAppSelector((state) => state.user?.language); const settingsLanguage = useAppSelector((state) => state.settings?.language); const currentLanguage = userLanguage || settingsLanguage || "en"; const [activeNavItem, setActiveNavItem] = useState("settings"); const [activeSettingsSubTab, setActiveSettingsSubTab] = useState("settings"); const [languageErrorOpen, setLanguageErrorOpen] = useState(false); const handleBackClick = () => { dispatch(setView("calendar")); }; const handleNavItemClick = (item: SidebarNavItem) => { setActiveNavItem(item); if (item === "settings") { setActiveSettingsSubTab("settings"); } }; const handleSettingsSubTabChange = ( _event: React.SyntheticEvent, newValue: SettingsSubTab ) => { setActiveSettingsSubTab(newValue); }; const handleLanguageChange = (event: any) => { const newLanguage = event.target.value; const previousLanguage = currentLanguage; // Optimistic update - update UI immediately dispatch(setUserLanguage(newLanguage)); dispatch(setSettingsLanguage(newLanguage)); // Call API in background, don't wait for it dispatch(updateUserConfigurationsAsync({ language: newLanguage })) .unwrap() .catch((error) => { console.error("Failed to update language:", error); // Rollback on error dispatch(setUserLanguage(previousLanguage)); dispatch(setSettingsLanguage(previousLanguage)); setLanguageErrorOpen(true); }); }; const handleLanguageErrorClose = () => { setLanguageErrorOpen(false); }; return (
handleNavItemClick("settings")} sx={{ cursor: "pointer" }} > {/* handleNavItemClick("sync")} sx={{ cursor: "pointer" }} > */} {activeNavItem === "settings" && ( )} {activeNavItem === "settings" && ( <> {activeSettingsSubTab === "settings" && ( {t("settings.language") || "Language"} {t("settings.languageDescription") || "This will be the language used in your Twake Calendar"} )} {activeSettingsSubTab === "notifications" && ( {t("settings.notifications.empty") || "Notifications settings coming soon"} )} )} {activeNavItem === "sync" && ( {t("settings.sync.empty") || "Sync settings coming soon"} )}
); }