From c24f6be1b7b99ace92838b8033da66d6cefbd4ac Mon Sep 17 00:00:00 2001
From: Zamitto <167933696+zamitto@users.noreply.github.com>
Date: Sun, 13 Oct 2024 22:22:36 -0300
Subject: [PATCH] feat: comparing achievements
---
.../achievement/achievements-content.tsx | 191 +++++++++++-------
.../src/pages/achievement/achievements.css.ts | 4 +-
2 files changed, 121 insertions(+), 74 deletions(-)
diff --git a/src/renderer/src/pages/achievement/achievements-content.tsx b/src/renderer/src/pages/achievement/achievements-content.tsx
index 3520ffcc..51dda100 100644
--- a/src/renderer/src/pages/achievement/achievements-content.tsx
+++ b/src/renderer/src/pages/achievement/achievements-content.tsx
@@ -6,7 +6,7 @@ import { useTranslation } from "react-i18next";
import * as styles from "./achievements.css";
import { formatDownloadProgress } from "@renderer/helpers";
import { TrophyIcon } from "@primer/octicons-react";
-import { vars } from "@renderer/theme.css";
+import { SPACING_UNIT, vars } from "@renderer/theme.css";
import { gameDetailsContext } from "@renderer/context";
import { GameShop, UserAchievement } from "@types";
import { average } from "color.js";
@@ -19,6 +19,107 @@ interface AchievementsContentProps {
displayName: string | null;
}
+interface AchievementListProps {
+ achievements: UserAchievement[];
+}
+
+interface AchievementPanelProps {
+ achievements: UserAchievement[];
+ displayName: string | null;
+}
+
+function AchievementPanel({
+ achievements,
+ displayName,
+}: AchievementPanelProps) {
+ const { t } = useTranslation("achievement");
+
+ const unlockedAchievementCount = achievements.filter(
+ (achievement) => achievement.unlocked
+ ).length;
+
+ const totalAchievementCount = achievements.length;
+ return (
+
+
+ {displayName
+ ? t("user_achievements", {
+ displayName,
+ })
+ : t("your_achievements")}
+
+
+
+
+
+ {unlockedAchievementCount} / {totalAchievementCount}
+
+
+
+
+ {formatDownloadProgress(
+ unlockedAchievementCount / totalAchievementCount
+ )}
+
+
+
+
+ );
+}
+
+function AchievementList({ achievements }: AchievementListProps) {
+ const { formatDateTime } = useDate();
+
+ return (
+
+ {achievements.map((achievement, index) => (
+ -
+
+
+
{achievement.displayName}
+
{achievement.description}
+
+ {achievement.unlockTime && formatDateTime(achievement.unlockTime)}
+
+
+
+ ))}
+
+ );
+}
+
export function AchievementsContent({
userId,
displayName,
@@ -31,13 +132,9 @@ export function AchievementsContent({
[]
);
- const { t } = useTranslation("achievement");
-
const { gameTitle, objectId, shop, achievements, gameColor, setGameColor } =
useContext(gameDetailsContext);
- const { formatDateTime } = useDate();
-
const dispatch = useAppDispatch();
useEffect(() => {
@@ -93,12 +190,6 @@ export function AchievementsContent({
const userAchievements = userId ? pageAchievements : achievements;
- const unlockedAchievementCount = userAchievements.filter(
- (achievement) => achievement.unlocked
- ).length;
-
- const totalAchievementCount = userAchievements.length;
-
return (
-
- {displayName
- ? t("user_achievements", {
- displayName,
- })
- : t("your_achievements")}
-
-
-
-
-
- {unlockedAchievementCount} / {totalAchievementCount}
-
-
-
-
- {formatDownloadProgress(
- unlockedAchievementCount / totalAchievementCount
- )}
-
-
-
+ {pageAchievements.length > 0 && (
+
+ )}
+
+ {pageAchievements.length > 0 && (
+
+ )}
-
- {userAchievements.map((achievement, index) => (
- -
-
-
-
{achievement.displayName}
-
{achievement.description}
-
- {achievement.unlockTime &&
- formatDateTime(achievement.unlockTime)}
-
-
-
- ))}
-
+
+
);
diff --git a/src/renderer/src/pages/achievement/achievements.css.ts b/src/renderer/src/pages/achievement/achievements.css.ts
index 9dc6ac00..8c6683b6 100644
--- a/src/renderer/src/pages/achievement/achievements.css.ts
+++ b/src/renderer/src/pages/achievement/achievements.css.ts
@@ -66,10 +66,10 @@ export const panel = recipe({
width: "100%",
height: "100px",
minHeight: "100px",
- padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 2}px`,
+ padding: `${SPACING_UNIT * 2}px 0`,
backgroundColor: vars.color.darkBackground,
display: "flex",
- flexDirection: "column",
+ flexDirection: "row",
transition: "all ease 0.2s",
borderBottom: `solid 1px ${vars.color.border}`,
position: "sticky",