diff --git a/app/components/Profile/Profile.EditLoginModal.tsx b/app/components/Profile/Profile.EditLoginModal.tsx
new file mode 100644
index 0000000..6239438
--- /dev/null
+++ b/app/components/Profile/Profile.EditLoginModal.tsx
@@ -0,0 +1,154 @@
+"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 (
+ Вы недавно изменили никнейм
+ следующее изменение будет доступно:{" "}
+
+ {unixToDate(_loginData.next_change_available_at, "full")}
+
+
Профиль
-- Некоторые изменения будут видны после перезагрузки страницы -