diff --git a/src/renderer/src/pages/achievement/achievements-content.tsx b/src/renderer/src/pages/achievement/achievements-content.tsx
index 1a3fbd14..6b2bd1e1 100644
--- a/src/renderer/src/pages/achievement/achievements-content.tsx
+++ b/src/renderer/src/pages/achievement/achievements-content.tsx
@@ -18,7 +18,7 @@ interface UserInfo {
userId: string;
displayName: string;
achievements: UserAchievement[];
- profileImageUrl: string;
+ profileImageUrl: string | null;
}
interface AchievementsContentProps {
@@ -31,26 +31,14 @@ interface AchievementListProps {
}
interface AchievementPanelProps {
- achievements: UserAchievement[];
- displayName: string | null;
- profileImageUrl: string | null;
+ user: UserInfo;
+ otherUser: UserInfo | null;
}
-function AchievementPanel({
- achievements,
- displayName,
- profileImageUrl,
-}: AchievementPanelProps) {
+function AchievementPanel({ user, otherUser }: AchievementPanelProps) {
const { t } = useTranslation("achievement");
- const unlockedAchievementCount = achievements.filter(
- (achievement) => achievement.unlocked
- ).length;
-
- const { userDetails } = useUserDetails();
-
- const getProfileImage = () => {
- const imageUrl = profileImageUrl || userDetails?.profileImageUrl;
+ const getProfileImage = (imageUrl: string | null | undefined) => {
return (
{imageUrl ? (
@@ -62,67 +50,195 @@ function AchievementPanel({
);
};
- const totalAchievementCount = achievements.length;
- return (
-
- {getProfileImage()}
+ const userTotalAchievementCount = user.achievements.length;
+ const userUnlockedAchievementCount = user.achievements.filter(
+ (achievement) => achievement.unlocked
+ ).length;
+
+ if (!otherUser) {
+ return (
-
- {displayName
- ? t("user_achievements", {
- displayName,
- })
- : t("your_achievements")}
-
+ {getProfileImage(user.profileImageUrl)}
+
+ {t("your_achievements")}
+
-
+
+
+
+ {userUnlockedAchievementCount} / {userTotalAchievementCount}
+
+
+
- {unlockedAchievementCount} / {totalAchievementCount}
+ {formatDownloadProgress(
+ userUnlockedAchievementCount / userTotalAchievementCount
+ )}
-
-
- {formatDownloadProgress(
- unlockedAchievementCount / totalAchievementCount
- )}
-
+
-
-
+ );
+ }
+
+ const otherUserUnlockedAchievementCount = otherUser.achievements.filter(
+ (achievement) => achievement.unlocked
+ ).length;
+ const otherUserTotalAchievementCount = otherUser.achievements.length;
+
+ return (
+ <>
+
+ {getProfileImage(otherUser.profileImageUrl)}
+
+
+ {t("user_achievements", {
+ displayName: otherUser.displayName,
+ })}
+
+
+
+
+
+ {otherUserUnlockedAchievementCount} /{" "}
+ {otherUserTotalAchievementCount}
+
+
+
+
+ {formatDownloadProgress(
+ otherUserUnlockedAchievementCount /
+ otherUserTotalAchievementCount
+ )}
+
+
+
+
+
+
+ {getProfileImage(user.profileImageUrl)}
+
+
+ {t("your_achievements")}
+
+
+
+
+
+ {userUnlockedAchievementCount} / {userTotalAchievementCount}
+
+
+
+
+ {formatDownloadProgress(
+ userUnlockedAchievementCount / userTotalAchievementCount
+ )}
+
+
+
+
+
+ >
);
}
@@ -258,6 +374,8 @@ export function AchievementsContent({ otherUser }: AchievementsContentProps) {
const dispatch = useAppDispatch();
+ const { userDetails } = useUserDetails();
+
useEffect(() => {
if (gameTitle) {
dispatch(setHeaderTitle(gameTitle));
@@ -297,7 +415,7 @@ export function AchievementsContent({ otherUser }: AchievementsContentProps) {
setBackdropOpacity(opacity);
};
- if (!objectId || !shop || !gameTitle) return null;
+ if (!objectId || !shop || !gameTitle || !userDetails) return null;
return (
@@ -337,18 +455,13 @@ export function AchievementsContent({ otherUser }: AchievementsContentProps) {
- {otherUser && (
-
- )}
-