import { useEffect, useState } from "react"; import { useTheme } from "next-themes"; // hooks import useUserAuth from "hooks/use-user-auth"; // layouts import { WorkspaceAuthorizationLayout } from "layouts/auth-layout"; import SettingsNavbar from "layouts/settings-navbar"; // components import { CustomThemeSelector, ThemeSwitch } from "components/core"; // ui import { Spinner } from "components/ui"; import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs"; // types import { ICustomTheme } from "types"; const ProfilePreferences = () => { const { user: myProfile } = useUserAuth(); const { theme } = useTheme(); const [customThemeSelectorOptions, setCustomThemeSelectorOptions] = useState(false); const [preLoadedData, setPreLoadedData] = useState<ICustomTheme | null>(null); useEffect(() => { if (theme === "custom") { if (myProfile?.theme.palette) setPreLoadedData(myProfile.theme); if (!customThemeSelectorOptions) setCustomThemeSelectorOptions(true); } }, [myProfile, theme, customThemeSelectorOptions]); return ( <WorkspaceAuthorizationLayout breadcrumbs={ <Breadcrumbs> <BreadcrumbItem title="My Profile Preferences" /> </Breadcrumbs> } > {myProfile ? ( <div className="p-8"> <div className="mb-8 space-y-6"> <div> <h3 className="text-3xl font-semibold">Profile Settings</h3> <p className="mt-1 text-custom-text-200"> This information will be visible to only you. </p> </div> <SettingsNavbar profilePage /> </div> <div className="space-y-8 sm:space-y-12"> <div className="grid grid-cols-12 gap-4 sm:gap-16"> <div className="col-span-12 sm:col-span-6"> <h4 className="text-lg font-semibold text-custom-text-100">Theme</h4> <p className="text-sm text-custom-text-200"> Select or customize your interface color scheme. </p> </div> <div className="col-span-12 sm:col-span-6"> <ThemeSwitch user={myProfile} setPreLoadedData={setPreLoadedData} customThemeSelectorOptions={customThemeSelectorOptions} setCustomThemeSelectorOptions={setCustomThemeSelectorOptions} /> </div> </div> {customThemeSelectorOptions && <CustomThemeSelector preLoadedData={preLoadedData} />} </div> </div> ) : ( <div className="grid h-full w-full place-items-center px-4 sm:px-0"> <Spinner /> </div> )} </WorkspaceAuthorizationLayout> ); }; export default ProfilePreferences;