import { useEffect, useState } from "react" import { Box, Button, SxProps, Theme, Typography, useMediaQuery, useTheme } from "@mui/material" import InputTextfield from "@components/InputTextfield" import PasswordInput from "@components/passwordInput" import UserFields from "./UserFields" import SectionWrapper from "@components/SectionWrapper" import { openDocumentsDialog, sendUserData, setSettingsField, useUserStore } from "@root/stores/user" import UnderlinedButtonWithIcon from "@root/components/UnderlinedButtonWithIcon" import UploadIcon from "@root/components/icons/UploadIcon" import DocumentsDialog from "./DocumentsDialog/DocumentsDialog" import EyeIcon from "@root/components/icons/EyeIcon" import { cardShadow } from "@root/utils/theme" import { getMessageFromFetchError } from "@frontend/kitui" import { enqueueSnackbar } from "notistack" import { VerificationStatus } from "@root/model/account" import { verify } from "./helper" import { withErrorBoundary } from "react-error-boundary" import { handleComponentError } from "@root/utils/handleComponentError" import { OnChangeLoginPassword } from "./onChangeLoginPassword" export type LP = "email" | "password" | "all" | "" function AccountSettings() { const theme = useTheme() const upMd = useMediaQuery(theme.breakpoints.up("md")) const upSm = useMediaQuery(theme.breakpoints.up("sm")) const isTablet = useMediaQuery(theme.breakpoints.down(1000)) const isMobile = useMediaQuery(theme.breakpoints.down(600)) const { settingsFields, user } = useUserStore((state) => state) const verificationStatus = useUserStore((state) => state.verificationStatus) const verificationType = useUserStore((state) => state.verificationType) const comment = useUserStore((state) => state.comment) const userId = useUserStore((state) => state.userId) ?? "" const [onChangeTypeLP, setOnChangeTypeLP] = useState("") const [readySend, setReadySend] = useState(false) const [loginPasswordFocus, setLoginPasswordFocus] = useState(false) const okLP = () => { const ready = readySend if (ready) { handleSendDataClick() } setReadySend(false) setOnChangeTypeLP("") } const cancelLP = () => { const type = onChangeTypeLP setOnChangeTypeLP("") setReadySend(false) if (type === "email" && user?.email !== settingsFields.email.value) setSettingsField("email", user?.email || "") if (type === "password") setSettingsField("password", "") if (type === "all") { setSettingsField("email", user?.email || "") setSettingsField("password", "") } } // useEffect(() => { // verify(userId) // }, []) const textFieldProps = { gap: upMd ? "16px" : "10px", color: "#F2F3F7", bold: true, } const trySendData = () => { if (user?.email !== settingsFields.email.value && settingsFields.password.value.length > 0) { setReadySend(true) setOnChangeTypeLP("all") return } if (user?.email !== settingsFields.email.value) { setReadySend(true) setOnChangeTypeLP("email") return } if (settingsFields.password.value.length > 0) { setReadySend(true) setOnChangeTypeLP("password") return } handleSendDataClick() } function handleSendDataClick() { sendUserData() .then(() => { enqueueSnackbar("Информация обновлена") }) .catch((error) => { const message = getMessageFromFetchError(error) if (message) enqueueSnackbar(message) }) } return ( Настройки аккаунта Статус {verificationStatus === VerificationStatus.NOT_VERIFICATED && ( <> } sx={{ mt: "55px" }} ButtonProps={{ onClick: () => openDocumentsDialog("juridical"), }} > Загрузить документы для юр лиц } sx={{ mt: "15px" }} ButtonProps={{ onClick: () => openDocumentsDialog("nko"), }} > Загрузить документы для НКО )} {verificationStatus === VerificationStatus.VERIFICATED && ( } sx={{ mt: "55px" }} ButtonProps={{ onClick: () => openDocumentsDialog(verificationType), }} > Посмотреть свою верификацию )} {comment &&

{comment}

}
) } export default withErrorBoundary(AccountSettings, { fallback: Ошибка при отображении настроек аккаунта, onError: handleComponentError, }) const verificationStatusData: Record = { verificated: { text: "Верификация пройдена", color: "#0D9F00" }, waiting: { text: "В ожидании верификации", color: "#F18956" }, notVerificated: { text: "Не верифицирован", color: "#E02C2C" }, } function VerificationIndicator({ verificationStatus, sx, }: { verificationStatus: VerificationStatus; sx?: SxProps; }) { return ( {verificationStatusData[verificationStatus].text} ) }