import React, { useEffect, useState } from 'react' import { useRouter } from 'next/router' import { useTranslation } from 'next-i18next' import { Dialog, DialogClose, DialogContent, DialogTitle, DialogTrigger, } from '~components/Dialog' // import * as Dialog from '@radix-ui/react-dialog' import * as Switch from '@radix-ui/react-switch' import Select from '~components/Select' import SelectItem from '~components/SelectItem' import PictureSelectItem from '~components/PictureSelectItem' import api from '~utils/api' import { accountState } from '~utils/accountState' import { pictureData } from '~utils/pictureData' import Button from '~components/Button' import CrossIcon from '~public/icons/Cross.svg' import './index.scss' import { useSnapshot } from 'valtio' import { getCookie, setCookie } from 'cookies-next' const AccountModal = () => { const router = useRouter() const { t } = useTranslation('common') const locale = router.locale && ['en', 'ja'].includes(router.locale) ? router.locale : 'en' const accountCookie = getCookie('account') const userCookie = getCookie('user') const cookieData = { account: accountCookie ? JSON.parse(accountCookie as string) : undefined, user: userCookie ? JSON.parse(userCookie as string) : undefined, } // State const [open, setOpen] = useState(false) const [openPictureSelect, setOpenPictureSelect] = useState(false) const [openGenderSelect, setOpenGenderSelect] = useState(false) const [openLanguageSelect, setOpenLanguageSelect] = useState(false) const [openThemeSelect, setOpenThemeSelect] = useState(false) const [username, setUsername] = useState('') const [picture, setPicture] = useState('') const [language, setLanguage] = useState('') const [gender, setGender] = useState(0) const [theme, setTheme] = useState('system') // const [privateProfile, setPrivateProfile] = useState(false) useEffect(() => { setUsername(cookieData.account.username) setGender(cookieData.user.gender) setPicture(cookieData.user.picture) setLanguage(cookieData.user.language) setTheme(cookieData.user.theme ? cookieData.user.theme : 'system') }, [cookieData]) const pictureOptions = pictureData .sort((a, b) => (a.name.en > b.name.en ? 1 : -1)) .map((item, i) => { return ( {item.name[locale]} ) }) function handlePictureChange(value: string) { setPicture(value) } function handleLanguageChange(value: string) { setLanguage(value) } function handleGenderChange(value: string) { setGender(parseInt(value)) } function handleThemeChange(value: string) { setTheme(value) } // function handlePrivateChange(checked: boolean) { // setPrivateProfile(checked) // } function update(event: React.FormEvent) { event.preventDefault() const object = { user: { picture: picture, element: pictureData.find((i) => i.filename === picture)?.element, language: language, gender: gender, // private: privateProfile, }, } api.endpoints.users .update(cookieData.account.user_id, object) .then((response) => { const user = response.data.user const cookieObj = { picture: user.picture.picture, element: user.picture.element, gender: user.gender, language: user.language, } setCookie('user', cookieObj, { path: '/' }) accountState.account.user = { id: user.id, username: user.username, picture: user.picture.picture, element: user.picture.element, language: user.language, theme: user.theme, gender: user.gender, } setOpen(false) changeLanguage(user.language) }) } function changeLanguage(newLanguage: string) { if (newLanguage !== router.locale) { // setCookies("NEXT_LOCALE", newLanguage, { path: "/" }) // router.push(router.asPath, undefined, { locale: newLanguage }) } } function openChange(open: boolean) { setOpen(open) } return ( {t('menu.settings')} {t('modals.settings.title')} @{username} {t('modals.settings.labels.picture')} {/* Displayed next to your name */} i.filename === picture)?.element }`} > {picture ? ( ) : ( '' )} setOpenPictureSelect(!openPictureSelect)} onValueChange={handlePictureChange} triggerClass="Bound Table" value={picture} > {pictureOptions} {t('modals.settings.labels.gender')} {/* Displayed on the Character tab of your teams */} setOpenGenderSelect(!openGenderSelect)} onValueChange={handleGenderChange} triggerClass="Bound Table" value={`${gender}`} > {t('modals.settings.gender.gran')} {t('modals.settings.gender.djeeta')} {t('modals.settings.labels.language')} setOpenLanguageSelect(!openLanguageSelect)} onValueChange={handleLanguageChange} triggerClass="Bound Table" value={`${language}`} > {t('modals.settings.language.english')} {t('modals.settings.language.japanese')} {t('modals.settings.labels.theme')} setOpenThemeSelect(!openThemeSelect)} onValueChange={handleThemeChange} triggerClass="Bound Table" value={`${theme}`} > {t('modals.settings.theme.system')} {t('modals.settings.theme.light')} {t('modals.settings.theme.dark')} {/* {t('modals.settings.labels.private')} {t('modals.settings.descriptions.private')} */} ) } export default AccountModal
Displayed next to your name
Displayed on the Character tab of your teams
{t('modals.settings.descriptions.private')}