import { useCallback, useMemo } from "react"; import { observer } from "mobx-react"; import { useTheme } from "next-themes"; // plane imports import type { I_THEME_OPTION } from "@plane/constants"; import { THEME_OPTIONS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { setPromiseToast } from "@plane/propel/toast"; // components import { LogoSpinner } from "@/components/common/logo-spinner"; import { PageHead } from "@/components/core/page-title"; import { CustomThemeSelector } from "@/components/core/theme/custom-theme-selector"; import { ThemeSwitch } from "@/components/core/theme/theme-switch"; import { ProfileSettingContentHeader } from "@/components/profile/profile-setting-content-header"; import { ProfileSettingContentWrapper } from "@/components/profile/profile-setting-content-wrapper"; // hooks import { useUserProfile } from "@/hooks/store/user"; function ProfileAppearancePage() { // store hooks const { data: userProfile, updateUserTheme } = useUserProfile(); // theme const { setTheme } = useTheme(); // translation const { t } = useTranslation(); // derived values const currentTheme = useMemo(() => { const userThemeOption = THEME_OPTIONS.find((t) => t.value === userProfile?.theme?.theme); return userThemeOption || null; }, [userProfile?.theme?.theme]); const handleThemeChange = useCallback( (themeOption: I_THEME_OPTION) => { setTheme(themeOption.value); const updateCurrentUserThemePromise = updateUserTheme({ theme: themeOption.value }); setPromiseToast(updateCurrentUserThemePromise, { loading: "Updating theme...", success: { title: "Success!", message: () => "Theme updated successfully.", }, error: { title: "Error!", message: () => "Failed to update the theme.", }, }); }, [updateUserTheme] ); return ( <> {userProfile ? (

{t("theme")}

{t("select_or_customize_your_interface_color_scheme")}

{userProfile?.theme?.theme === "custom" && }
) : (
)} ); } export default observer(ProfileAppearancePage);