diff --git a/src/pages/unlocked/index.tsx b/src/pages/unlocked/index.tsx index c41bb4b..0dac981 100644 --- a/src/pages/unlocked/index.tsx +++ b/src/pages/unlocked/index.tsx @@ -27,11 +27,25 @@ export default function Page(): ReactElement { const { fetch: fetchAchievements } = useAchievements(useTeam); const { fetch: fetchUnlockedAchievements, update } = useUnlockedAchievements(useTeam); - const swrACU = useSWRImmutable("acu", async () => ({ - achievements: await fetchAchievements(), - currentMember: await fetchCurrentMember(), - unlockedAchievements: await fetchUnlockedAchievements(), - })); + const swrACU = useSWRImmutable("acu", async () => { + const [ + achievements, + currentMember, + unlockedAchievements, + ] = await Promise.all([ + fetchAchievements(), + fetchCurrentMember(), + fetchUnlockedAchievements(), + ]); + + return { + achievements, + currentMember, + unlockedAchievements, + myUnlockedAchievements: + unlockedAchievements.filter((u) => u.memberEmail === currentMember.email), + } + }); const [isUILocked, setIsUILocked] = useState(false); @@ -48,16 +62,16 @@ export default function Page(): ReactElement { await update( isUnlocked ? [ - ...unlockedAchievements, - { - achievementID: targetAchievementId, - createdAt: new Date(), - memberEmail: currentMember.email, - }, - ] + ...unlockedAchievements, + { + achievementID: targetAchievementId, + createdAt: new Date(), + memberEmail: currentMember.email, + }, + ] : unlockedAchievements.filter( - ({ achievementID: id }) => id !== targetAchievementId, - ), + ({ achievementID: id }) => id !== targetAchievementId, + ), ); await mutate(); } finally { @@ -75,14 +89,14 @@ export default function Page(): ReactElement { .with( S.Success, ({ - data: { achievements, unlockedAchievements, currentMember }, + data: { achievements, myUnlockedAchievements, unlockedAchievements, currentMember }, mutate, }) => ( <> {achievements.map((achievement) => { - const isUnlocked = unlockedAchievements.some( + const isUnlocked = myUnlockedAchievements.some( (u) => u.achievementID === achievement.id, );