From 5d5319583d5fc58cdba9375acaee72468dfd8860 Mon Sep 17 00:00:00 2001
From: a-eloCard <esrsc23@inf.ufpr.br>
Date: Fri, 23 May 2025 11:12:24 -0300
Subject: [PATCH] Issue #343: FIX Null error when accessing following in user
 profile

---
 src/app/components/InfiniteScroll.js          |  2 +-
 src/app/components/UsersPageCard.js           | 34 ++++++++++---------
 .../perfil/[id]/components/FollowersCards.js  |  2 +-
 .../perfil/[id]/components/FollowingCards.js  |  2 +-
 4 files changed, 21 insertions(+), 19 deletions(-)

diff --git a/src/app/components/InfiniteScroll.js b/src/app/components/InfiniteScroll.js
index ba1d3639..1f1fa624 100644
--- a/src/app/components/InfiniteScroll.js
+++ b/src/app/components/InfiniteScroll.js
@@ -1,5 +1,5 @@
 import React, { useState, useEffect, useCallback } from "react";
-import InfiniteScrollCards from "./InfiniteScrollCards";''
+import InfiniteScrollCards from "./InfiniteScrollCards";
 import mecredApi from "@/axiosConfig";
 import Loading from "./Loading";
 import { useSearchParams, useRouter } from "next/navigation";
diff --git a/src/app/components/UsersPageCard.js b/src/app/components/UsersPageCard.js
index 055a5948..e868234f 100644
--- a/src/app/components/UsersPageCard.js
+++ b/src/app/components/UsersPageCard.js
@@ -15,18 +15,21 @@ import mecredApi from "@/axiosConfig";
 export default function UsersPageCard({ item }) {
     const [achievements, setAchievements] = useState(null);
 
-    const fetchAchievements = async (id) => {
-        await mecredApi
-            .get(`/unlocked_achievements/user/${id}?limit=1000`)
-            .then(({ data }) => {
-                setAchievements(data);
-            })
-            .catch(() => setError(true))
-    }
+    useEffect(() => {
+        const fetchAchievements = async (id) => {
+            if (!id)
+                return;
+            await mecredApi
+                .get(`/unlocked_achievements/user/${id}?limit=1000`)
+                .then(({ data }) => {
+                    setAchievements(data);
+                })
+                .catch(() => console.error("Não encontrou conquistas"))
+        }
+        fetchAchievements(item?.id);
+    }, [item])
 
-    fetchAchievements(item.id);
 
-    
     function getRandomBg(id) {
         const colors = [
             "bg-turquoise-HC-white",
@@ -37,7 +40,6 @@ export default function UsersPageCard({ item }) {
             "bg-pink-HC-white",
             "bg-red-HC-white",
             "bg-darkGray-HC-white",
-            "bg-ice-HC-white",
         ]
 
         return colors[id % colors.length];
@@ -59,13 +61,13 @@ export default function UsersPageCard({ item }) {
 
                     <p className=" font-bold text-darkGray-HC-white-underline text-center">{item["name"]}</p>
                 </div>
-                <hr className="border-lightGray-HC-white h-1 mx-4 "/>
+                <hr className="border-lightGray-HC-white h-1 mx-4 " />
                 <div className="flex items-center flex-col gap-1 py-3 ">
                     <div className="grid grid-cols-2 justify-start gap-1">
                         <div className="flex items-center mb-2">
-                            <img className="flex h-[20px] px-1 text-mediumGray-HC-white invertLogo-HC-white" 
+                            <img className="flex h-[20px] px-1 text-mediumGray-HC-white invertLogo-HC-white"
                                 src="/nivel.svg"
-                                alt="Icon nivel" 
+                                alt="Icon nivel"
                             />
                             <p className="mt-2 text-sm text-darkGray-HC-white-underline px-1">Nível: {item["level"]}</p>
                         </div>
@@ -82,9 +84,9 @@ export default function UsersPageCard({ item }) {
                             <p className="text-sm text-darkGray-HC-white-underline inline px-1">Recursos: {item["learning_objects_count"]}</p>
                         </div>
                         <div className="flex items-center mb-2">
-                            <img className="flex h-[20px] px-1 invertLogo-HC-white" 
+                            <img className="flex h-[20px] px-1 invertLogo-HC-white"
                                 src="/conquistas.svg"
-                                alt="Icon conquista" 
+                                alt="Icon conquista"
                             />
                             <p className="mt-2 text-sm text-darkGray-HC-white-underline px-1">Conquistas: {achievements?.length}</p>
                         </div>
diff --git a/src/app/perfil/[id]/components/FollowersCards.js b/src/app/perfil/[id]/components/FollowersCards.js
index f4102bea..147e3e27 100644
--- a/src/app/perfil/[id]/components/FollowersCards.js
+++ b/src/app/perfil/[id]/components/FollowersCards.js
@@ -61,7 +61,7 @@ export default function FollowersCards({ id, count }) {
                     <div className="p-3 my-5 rounded-md min-w-[200px] min-h-[180px]">
                         <div className="flex flex-wrap justify-center">
                             {followers.map((item, i) => (
-                                item.follower && (
+                                item.follower?.id && (
                                     <Fragment key={i}>
                                         <UsersPageCard item={item.follower} />
                                     </Fragment>
diff --git a/src/app/perfil/[id]/components/FollowingCards.js b/src/app/perfil/[id]/components/FollowingCards.js
index b04101d7..c7a5dca1 100644
--- a/src/app/perfil/[id]/components/FollowingCards.js
+++ b/src/app/perfil/[id]/components/FollowingCards.js
@@ -61,7 +61,7 @@ export default function FollowingCards({ id, count }) {
                         <div className="p-3 my-5 rounded-md min-w-[200px] min-h-[180px]">
                             <div className="flex flex-wrap justify-center">
                                 {following.map((item, i) => (
-                                    item && (
+                                    item.followable?.id && (
                                         <Fragment key={i}>
                                             <UsersPageCard item={item.followable} />
                                         </Fragment>
-- 
GitLab