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,
);