"use client"; import { Modal } from "flowbite-react"; import { Spinner } from "../Spinner/Spinner"; import useSWR from "swr"; import { ENDPOINTS } from "#/api/config"; import { useEffect, useState } from "react"; import { unixToDate } from "#/api/utils"; import { ProfileEditPrivacyModal } from "./Profile.EditPrivacyModal"; import { ProfileEditStatusModal } from "./Profile.EditStatusModal"; import { ProfileEditSocialModal } from "./Profile.EditSocialModal"; const fetcher = async (url: string) => { const res = await fetch(url); if (!res.ok) { const error = new Error( `An error occurred while fetching the data. status: ${res.status}` ); error.message = await res.json(); throw error; } return res.json(); }; export const ProfileEditModal = (props: { isOpen: boolean; setIsOpen: (isOpen: boolean) => void; token: string; profile_id: number; }) => { const [privacyModalOpen, setPrivacyModalOpen] = useState(false); const [statusModalOpen, setStatusModalOpen] = useState(false); const [socialModalOpen, setSocialModalOpen] = useState(false); const [privacyModalSetting, setPrivacyModalSetting] = useState("none"); const [privacySettings, setPrivacySettings] = useState({ privacy_stats: 9, privacy_counts: 9, privacy_social: 9, privacy_friend_requests: 9, }); const [socialBounds, setSocialBounds] = useState({ vk: false, google: false, }); const [status, setStatus] = useState(""); const [login, setLogin] = useState(""); const privacy_stat_act_social_text = { 0: "Все пользователи", 1: "Только друзья", 2: "Только я", 9: "Неизвестно", }; const privacy_friend_req_text = { 0: "Все пользователи", 1: "Никто", 9: "Неизвестно", }; function _fetchInfo(url: string) { const { data, isLoading, error } = useSWR(url, fetcher); return [data, isLoading, error]; } const [prefData, prefLoading, prefError] = _fetchInfo( `${ENDPOINTS.user.settings.my}?token=${props.token}` ); const [loginData, loginLoading, loginError] = _fetchInfo( `${ENDPOINTS.user.settings.login.info}?token=${props.token}` ); useEffect(() => { if (prefData) { setPrivacySettings({ privacy_stats: prefData.privacy_stats, privacy_counts: prefData.privacy_counts, privacy_social: prefData.privacy_social, privacy_friend_requests: prefData.privacy_friend_requests, }); setSocialBounds({ vk: prefData.is_vk_bound || prefData.isVkBound || false, google: prefData.is_google_bound || prefData.isGoogleBound || false, }); setStatus(prefData.status); } }, [prefData]); useEffect(() => { if (loginData) { setLogin(loginData.login); } }, [loginData]); return ( <> props.setIsOpen(false)} size={"7xl"} > Редактирование профиля {prefLoading ? ( ) : ( Профиль Некоторые изменения будут видны после перезагрузки страницы Изменить фото профиля {prefData.is_change_avatar_banned ? `Заблокировано до ${unixToDate( prefData.ban_change_avatar_expires, "full" )}` : "Загрузить с устройства"} { setStatusModalOpen(true); }} > Изменить статус {status} Изменить никнейм {prefData.is_change_login_banned ? `Заблокировано до ${unixToDate( prefData.ban_change_login_expires, "full" )}` : login} { setSocialModalOpen(true); }} > Мои социальные сети укажите ссылки на свои страницы в соц. сетях Приватность { setPrivacyModalOpen(true); setPrivacyModalSetting("privacy_stats"); }} > Кто видит мою статистику, оценки и историю просмотра { privacy_stat_act_social_text[ privacySettings.privacy_stats ] } { setPrivacyModalOpen(true); setPrivacyModalSetting("privacy_counts"); }} > Кто видит в профиле мои комментарии, коллекции, видео и друзей { privacy_stat_act_social_text[ privacySettings.privacy_counts ] } { setPrivacyModalOpen(true); setPrivacyModalSetting("privacy_social"); }} > Кто видит в профиле мои социальные сети { privacy_stat_act_social_text[ privacySettings.privacy_social ] } { setPrivacyModalOpen(true); setPrivacyModalSetting("privacy_friend_requests"); }} > Кто может отправлять мне заявки в друзья { privacy_friend_req_text[ privacySettings.privacy_friend_requests ] } Блоклист Список пользователей, которым запрещён доступ к вашей странице Привязка к сервисам Недоступно для изменения в данном клиенте Связанные аккаунты {socialBounds.vk || socialBounds.google ? "Аккаунт привязан к:" : "не привязан к сервисам"}{" "} {socialBounds.vk && "ВК"} {socialBounds.vk && socialBounds.google && ", "} {socialBounds.google && "Google"} )} > ); };
Профиль
Некоторые изменения будут видны после перезагрузки страницы
Изменить фото профиля
{prefData.is_change_avatar_banned ? `Заблокировано до ${unixToDate( prefData.ban_change_avatar_expires, "full" )}` : "Загрузить с устройства"}
Изменить статус
{status}
Изменить никнейм
{prefData.is_change_login_banned ? `Заблокировано до ${unixToDate( prefData.ban_change_login_expires, "full" )}` : login}
Мои социальные сети
укажите ссылки на свои страницы в соц. сетях
Приватность
Кто видит мою статистику, оценки и историю просмотра
{ privacy_stat_act_social_text[ privacySettings.privacy_stats ] }
Кто видит в профиле мои комментарии, коллекции, видео и друзей
{ privacy_stat_act_social_text[ privacySettings.privacy_counts ] }
Кто видит в профиле мои социальные сети
{ privacy_stat_act_social_text[ privacySettings.privacy_social ] }
Кто может отправлять мне заявки в друзья
{ privacy_friend_req_text[ privacySettings.privacy_friend_requests ] }
Блоклист
Список пользователей, которым запрещён доступ к вашей странице
Привязка к сервисам
Недоступно для изменения в данном клиенте
Связанные аккаунты
{socialBounds.vk || socialBounds.google ? "Аккаунт привязан к:" : "не привязан к сервисам"}{" "} {socialBounds.vk && "ВК"} {socialBounds.vk && socialBounds.google && ", "} {socialBounds.google && "Google"}