From 034e88e2865516a3376e80e4cc83d3415178498f Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:46:25 -0300 Subject: [PATCH] feat: adjusting achievements page --- src/locales/en/translation.json | 3 +- src/locales/pt-BR/translation.json | 3 +- src/locales/pt-PT/translation.json | 3 +- .../achievements/merge-achievements.ts | 26 +-- .../achievement/achievements-content.tsx | 167 ++++++++++++++---- .../src/pages/achievement/achievements.css.ts | 3 +- 6 files changed, 153 insertions(+), 52 deletions(-) diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 3d730e39..6e749b3e 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -338,6 +338,7 @@ "achievement": { "achievement_unlocked": "Achievement unlocked", "user_achievements": "{{displayName}}'s Achievements", - "your_achievements": "Your Achievements" + "your_achievements": "Your Achievements", + "unlocked_at": "Unlocked at:" } } diff --git a/src/locales/pt-BR/translation.json b/src/locales/pt-BR/translation.json index c658ce78..ba572424 100644 --- a/src/locales/pt-BR/translation.json +++ b/src/locales/pt-BR/translation.json @@ -340,6 +340,7 @@ "achievement": { "achievement_unlocked": "Conquista desbloqueada", "your_achievements": "Suas Conquistas", - "user_achievements": "Conquistas de {{displayName}}" + "user_achievements": "Conquistas de {{displayName}}", + "unlocked_at": "Desbloqueado em:" } } diff --git a/src/locales/pt-PT/translation.json b/src/locales/pt-PT/translation.json index 01fa3140..b59db09f 100644 --- a/src/locales/pt-PT/translation.json +++ b/src/locales/pt-PT/translation.json @@ -282,6 +282,7 @@ "your_friend_code": "Seu código de amigo:" }, "achievement": { - "achievement_unlocked": "Conquista desbloqueada" + "achievement_unlocked": "Conquista desbloqueada", + "unlocked_at": "Desbloqueado em:" } } diff --git a/src/main/services/achievements/merge-achievements.ts b/src/main/services/achievements/merge-achievements.ts index bf2ee461..b7c50d37 100644 --- a/src/main/services/achievements/merge-achievements.ts +++ b/src/main/services/achievements/merge-achievements.ts @@ -3,7 +3,7 @@ import { gameRepository, userPreferencesRepository, } from "@main/repository"; -import type { GameShop, UnlockedAchievement } from "@types"; +import type { AchievementData, GameShop, UnlockedAchievement } from "@types"; import { WindowManager } from "../window-manager"; import { HydraApi } from "../hydra-api"; import { getGameAchievements } from "@main/events/catalogue/get-game-achievements"; @@ -52,9 +52,13 @@ export const mergeAchievements = async ( userPreferencesRepository.findOne({ where: { id: 1 } }), ]); + const achievementsData = JSON.parse( + localGameAchievement?.achievements || "[]" + ) as AchievementData[]; + const unlockedAchievements = JSON.parse( localGameAchievement?.unlockedAchievements || "[]" - ).filter((achievement) => achievement.name); + ).filter((achievement) => achievement.name) as UnlockedAchievement[]; const newAchievements = achievements .filter((achievement) => { @@ -81,20 +85,18 @@ export const mergeAchievements = async ( return a.unlockTime - b.unlockTime; }) .map((achievement) => { - return JSON.parse(localGameAchievement?.achievements || "[]").find( - (steamAchievement) => { - return ( - achievement.name.toUpperCase() === - steamAchievement.name.toUpperCase() - ); - } - ); + return achievementsData.find((steamAchievement) => { + return ( + achievement.name.toUpperCase() === + steamAchievement.name.toUpperCase() + ); + }); }) .filter((achievement) => achievement) .map((achievement) => { return { - displayName: achievement.displayName, - iconUrl: achievement.icon, + displayName: achievement!.displayName, + iconUrl: achievement!.icon, }; }); diff --git a/src/renderer/src/pages/achievement/achievements-content.tsx b/src/renderer/src/pages/achievement/achievements-content.tsx index 51dda100..25b04afd 100644 --- a/src/renderer/src/pages/achievement/achievements-content.tsx +++ b/src/renderer/src/pages/achievement/achievements-content.tsx @@ -1,7 +1,7 @@ import { setHeaderTitle } from "@renderer/features"; import { useAppDispatch, useDate } from "@renderer/hooks"; import { steamUrlBuilder } from "@shared"; -import { useContext, useEffect, useRef, useState } from "react"; +import { useContext, useEffect, useMemo, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; import * as styles from "./achievements.css"; import { formatDownloadProgress } from "@renderer/helpers"; @@ -21,6 +21,7 @@ interface AchievementsContentProps { interface AchievementListProps { achievements: UserAchievement[]; + otherUserAchievements: UserAchievement[]; } interface AchievementPanelProps { @@ -92,27 +93,106 @@ function AchievementPanel({ ); } -function AchievementList({ achievements }: AchievementListProps) { +function AchievementList({ + achievements, + otherUserAchievements, +}: AchievementListProps) { + const { t } = useTranslation("achievement"); const { formatDateTime } = useDate(); + if (otherUserAchievements.length === 0) { + return ( + + ); + } + return (