From 1df6504794c9c112b70ab6f41f41bcb57b8c1aa3 Mon Sep 17 00:00:00 2001 From: rfhferreira <rfhferreira@inf.ufpr.br> Date: Tue, 10 Jun 2025 14:46:07 -0300 Subject: [PATCH] Perfil funcionando (ou quase) --- src/app/components/MenuProfile.js | 2 +- src/app/components/Notifications.js | 4 +- src/app/entrar/page.js | 3 - src/app/perfil/[id]/components/UserCard.js | 4 +- src/app/perfil/[id]/page.js | 207 +++++++++------------ 5 files changed, 91 insertions(+), 129 deletions(-) diff --git a/src/app/components/MenuProfile.js b/src/app/components/MenuProfile.js index c191ca2c..c74d4b5f 100644 --- a/src/app/components/MenuProfile.js +++ b/src/app/components/MenuProfile.js @@ -103,7 +103,7 @@ export default function AccountMenu() { return ( <> - {logged ? ( + {loggedIn ? ( <Box className="mr-5 flex align-center"> <IconButton onClick={handleClick} diff --git a/src/app/components/Notifications.js b/src/app/components/Notifications.js index 83aa1845..9345ba8e 100644 --- a/src/app/components/Notifications.js +++ b/src/app/components/Notifications.js @@ -35,7 +35,7 @@ export default function Notifications({id}) { //chama funcao getNotifications() - }, [loggedIn, uid, client, token]) + }, [loggedIn]) const postViewNotification = async (payload) => { console.log("oiii", payload) @@ -53,4 +53,4 @@ export default function Notifications({id}) { return <ModalNotifications countNotifications={countNotifications} notifications={notifications} postViewNotification={postViewNotification} /> -} \ No newline at end of file +} diff --git a/src/app/entrar/page.js b/src/app/entrar/page.js index 59444d6a..b0858217 100644 --- a/src/app/entrar/page.js +++ b/src/app/entrar/page.js @@ -65,9 +65,6 @@ function Login() { const userLogin = async (event) => { event.preventDefault(); await logIn(userEmail, userPassword) - .then((res) => { - console.log(res); - }) .catch((error) => { console.log(error); setErrorMessage(error['response']['data']['error']['message']); diff --git a/src/app/perfil/[id]/components/UserCard.js b/src/app/perfil/[id]/components/UserCard.js index fd8b617e..3d51fb09 100644 --- a/src/app/perfil/[id]/components/UserCard.js +++ b/src/app/perfil/[id]/components/UserCard.js @@ -116,7 +116,7 @@ export default function UserCard({ profileData, idLogin, achievements, progresse useEffect(() => { if (!loggedIn) return; - setProfileInfo(userData()["user"]) + setProfileInfo(userData()) console.log(profileData) const fetchFollowers = async () => { await mecredApi.get(`public/user/followers/${profileData.id}`, { @@ -303,4 +303,4 @@ export default function UserCard({ profileData, idLogin, achievements, progresse </div> </div> ); -} \ No newline at end of file +} diff --git a/src/app/perfil/[id]/page.js b/src/app/perfil/[id]/page.js index 95cd964f..40bdd073 100644 --- a/src/app/perfil/[id]/page.js +++ b/src/app/perfil/[id]/page.js @@ -1,5 +1,5 @@ -"use client" -import UserCard from "./components/UserCard" +"use client"; +import UserCard from "./components/UserCard"; import { getStoredValue } from "../../handlers/localStorageHandler"; import { useEffect, useState } from "react"; import Overlay from "../../components/Overlay"; @@ -7,124 +7,89 @@ import mecredApi from "@/axiosConfig"; import { authHeaders, isLoggedIn, userData } from "@/app/handlers/loginHandler"; import ErrorComponent from "@/app/components/ErrorComponent"; -export default function Perfil({ params }) { - const [profileData, setProfileData] = useState(null); - const [achievements, setAchievements] = useState(null); - const [items, setItems] = useState(null); - const [store, setStore] = useState(null); - const [progresses, setProgresses] = useState(null); - const [error, setError] = useState(false) - const [idLogin, setIdLogin] = useState(0) - - - const optTab = getStoredValue("tab"); - - /** - * Se o usuário não estiver logado faz apenas uma requisição simples das informações do usuário - * Se estiver logado, verifica se o perfil acessado (params.id) é o perfil do usuário logado, pois algumas ações são diferentes - * Atribui o id do usuário logado à idLogin para futuras verificações - */ - useEffect(() => { - - /* Pega as estatisticas do usuario - Mostra na barra de stats mesmo deslogado - */ - const fetchAchievements = async (id) => { - await mecredApi - .get(`public/userAchievements/${id}/achievements`) - .then(({ data }) => { - setAchievements(data); - }) - .catch(() => setError(true)) - } - - fetchAchievements(params.id); - - // const fetchProgresses = async (id) => { - // await mecredApi - // .get(`/user_progresses/${id}`) - // .then(({ data }) => { - // setProgresses(data); - // }) - // .catch(() => setError(true)) - // } - - // fetchProgresses(params.id) - - const fetchItems = async (id) => { - await mecredApi - .get(`public/user-items/${id}/items?limit=1000`) - .then(({ data }) => { - setItems(data); - }) - .catch(() => setError(true)) - } - - fetchItems(params.id) - - if (isLoggedIn()) { - let data = userData() - - const fetchUser = async (id) => { - await mecredApi - .get(`api/user/${id}`, { - headers: authHeaders() - }) - .then(({ data }) => { - console.log(data) - setProfileData(data); - }) - .catch(() => setError(true)) - } - - fetchUser(params.id) - setIdLogin(data["user"]["id"]) - - const fetchStore = async (id) => { - await mecredApi - .get(`public/user-items/${id}/items?filter={"state" : "active"}&item_type=badge&unlock_rule=purchase&limit=1000`) - .then(({ data }) => { - setStore(data) - console.log(data) - }) - .catch(() => setError(true)) - } - - fetchStore(params.id) - - } else { - const fetchUser = async (id) => { - await mecredApi - .get(`api/user/${id}`) - .then(({ data }) => { - setProfileData(data); - }) - .catch(() => setError(true)) - } - - fetchUser(params.id) - } - - }, [params]) - - return ( - <> - <Overlay type="twoColumns"> - {error ? <ErrorComponent name="Usuário" /> : - (profileData && - <UserCard - profileData={profileData} - idLogin={idLogin} - achievements={achievements} - progresses={progresses} - setItems={setItems} - items={items} - store={store} - tab={optTab} - /> - )} - </Overlay> - </> - ); +export default function Perfil() { + const [profileData, setProfileData] = useState(null); + const [achievements, setAchievements] = useState(null); + const [items, setItems] = useState(null); + const [store, setStore] = useState(null); + const [progresses, setProgresses] = useState(null); + const [error, setError] = useState(false); + + const optTab = getStoredValue("tab"); + + useEffect(() => { + if (!isLoggedIn()) { + setError(true); + return; + } + + const user = userData(); + console.log(user.id); + const userId = user?.id; + + if (!userId) { + setError(true); + return; + } + + const fetchUserData = async () => { + try { + // Perfil completo + const profileRes = await mecredApi.get(`api/user/${userId}`, { + headers: authHeaders(), + }); + setProfileData(profileRes.data); + + // Conquistas públicas + const achievementsRes = await mecredApi.get( + `public/userAchievements/${userId}/achievements` + ); + setAchievements(achievementsRes.data); + + // Itens públicos + const itemsRes = await mecredApi.get( + `public/user-items/${userId}/items?limit=1000` + ); + setItems(itemsRes.data); + + // Loja (badges desbloqueáveis por compra) + const storeRes = await mecredApi.get( + `public/user-items/${userId}/items?filter={"state":"active"}&item_type=badge&unlock_rule=purchase&limit=1000` + ); + setStore(storeRes.data); + + // Progressos (descomente se necessário) + // const progressesRes = await mecredApi.get(`/user_progresses/${userId}`); + // setProgresses(progressesRes.data); + + } catch (e) { + console.error(e); + setError(true); + } + }; + + fetchUserData(); + }, []); + + return ( + <Overlay type="twoColumns"> + {error ? ( + <ErrorComponent name="Usuário" /> + ) : ( + profileData && ( + <UserCard + profileData={profileData} + idLogin={profileData.id} + achievements={achievements} + progresses={progresses} + setItems={setItems} + items={items} + store={store} + tab={optTab} + /> + ) + )} + </Overlay> + ); } -- GitLab