"use client"; import { Button, Modal, Textarea } from "flowbite-react"; import { ENDPOINTS } from "#/api/config"; import { useEffect, useState } from "react"; import { useSWRConfig } from "swr"; import { Spinner } from "../Spinner/Spinner"; import { unixToDate } from "#/api/utils"; import { useUserStore } from "#/store/auth"; export const ProfileEditLoginModal = (props: { isOpen: boolean; setIsOpen: (isOpen: boolean) => void; token: string; setLogin: (status: string) => void; profile_id: number; }) => { const [loading, setLoading] = useState(false); const [sending, setSending] = useState(false); const [_login, _setLogin] = useState(""); const [_loginData, _setLoginData] = useState({ code: 0, avatar: "", login: "", is_change_available: false, last_change_at: 0, next_change_available_at: 0, }); const [_loginLength, _setLoginLength] = useState(0); const { mutate } = useSWRConfig(); const userStore = useUserStore(); useEffect(() => { setLoading(true); fetch(`${ENDPOINTS.user.settings.login.info}?token=${props.token}`) .then((res) => { if (res.ok) { return res.json(); } }) .then((data) => { _setLoginData(data); _setLogin(data.login); _setLoginLength(data.login.length); setLoading(false); }); }, [props.isOpen]); function handleInput(e: any) { _setLogin(e.target.value); _setLoginLength(e.target.value.length); } function _setLoginSetting() { setSending(true); if (!_login || _login == "") { alert("Никнейм не может быть пустым"); return; } fetch( `${ENDPOINTS.user.settings.login.change}?login=${encodeURIComponent( _login )}&token=${props.token}` ) .then((res) => { if (res.ok) { return res.json(); } else { new Error("failed to send data"); } }) .then((data) => { if (data.code == 3) { alert("Данный никнейм уже существует, попробуйте другой"); setSending(false); return; } mutate( `${ENDPOINTS.user.profile}/${props.profile_id}?token=${props.token}` ); userStore.checkAuth(); props.setLogin(_login); setSending(false); props.setIsOpen(false); }) .catch((err) => { console.log(err); setSending(false); }); } return ( props.setIsOpen(false)} size={"4xl"} > Изменить никнейм {loading ? (
) : ( <> {!_loginData.is_change_available ? ( <>

Вы недавно изменили никнейм

следующее изменение будет доступно:{" "} {unixToDate(_loginData.next_change_available_at, "full")}

) : ( <>