From ab27fd21d78dbec96c19f2a8fec04468c67ed5a4 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Fri, 18 Oct 2024 09:52:43 -0300 Subject: [PATCH] feat: redoing page --- src/renderer/src/hooks/use-user-details.ts | 13 +- .../achievements/achievements-content.tsx | 337 ++++++++---------- .../pages/achievements/achievements.css.ts | 25 +- 3 files changed, 170 insertions(+), 205 deletions(-) diff --git a/src/renderer/src/hooks/use-user-details.ts b/src/renderer/src/hooks/use-user-details.ts index 649d24a4..1872c95d 100644 --- a/src/renderer/src/hooks/use-user-details.ts +++ b/src/renderer/src/hooks/use-user-details.ts @@ -1,4 +1,4 @@ -import { useCallback } from "react"; +import { useCallback, useMemo } from "react"; import { useAppDispatch, useAppSelector } from "./redux"; import { setProfileBackground, @@ -129,7 +129,16 @@ export function useUserDetails() { const unblockUser = (userId: string) => window.electron.unblockUser(userId); - const hasActiveSubscription = userDetails?.subscription?.status === "active"; + const hasActiveSubscription = useMemo(() => { + if (!userDetails?.subscription) { + return false; + } + + return ( + userDetails.subscription.expiresAt == null || + new Date(userDetails.subscription.expiresAt) > new Date() + ); + }, [userDetails]); return { userDetails, diff --git a/src/renderer/src/pages/achievements/achievements-content.tsx b/src/renderer/src/pages/achievements/achievements-content.tsx index fbf9da9f..874368a8 100644 --- a/src/renderer/src/pages/achievements/achievements-content.tsx +++ b/src/renderer/src/pages/achievements/achievements-content.tsx @@ -5,15 +5,19 @@ import { useContext, useEffect, useMemo, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; import * as styles from "./achievements.css"; import { formatDownloadProgress } from "@renderer/helpers"; -import { LockIcon, PersonIcon, TrophyIcon } from "@primer/octicons-react"; +import { + CheckCircleIcon, + LockIcon, + PersonIcon, + TrophyIcon, + UnlockIcon, +} from "@primer/octicons-react"; import { SPACING_UNIT, vars } from "@renderer/theme.css"; import { gameDetailsContext } from "@renderer/context"; import { UserAchievement } from "@types"; import { average } from "color.js"; import Color from "color"; -const HERO_ANIMATION_THRESHOLD = 25; - interface UserInfo { userId: string; displayName: string; @@ -32,180 +36,85 @@ interface AchievementListProps { interface AchievementPanelProps { user: UserInfo; - otherUser: UserInfo | null; } -function AchievementPanel({ user, otherUser }: AchievementPanelProps) { - const { t } = useTranslation("achievement"); - const { userDetails } = useUserDetails(); +function AchievementPanel({ user }: AchievementPanelProps) { + const { userDetails, hasActiveSubscription } = useUserDetails(); const userTotalAchievementCount = user.achievements.length; const userUnlockedAchievementCount = user.achievements.filter( (achievement) => achievement.unlocked ).length; - if (!otherUser) { + const getProfileImage = (user: UserInfo) => { return ( -
-
-

- {t("your_achievements")} -

-
-
- - - {userUnlockedAchievementCount} / {userTotalAchievementCount} - -
- - - {formatDownloadProgress( - userUnlockedAchievementCount / userTotalAchievementCount - )} - -
- + {user.profileImageUrl ? ( + {user.displayName} -
+ ) : ( + + )}
); - } + }; - const otherUserUnlockedAchievementCount = otherUser.achievements.filter( - (achievement) => achievement.unlocked - ).length; - const otherUserTotalAchievementCount = otherUser.achievements.length; + if (userDetails?.id == user.userId && !hasActiveSubscription) { + return <>; + } return (
-
+ {getProfileImage(user)} +
+

{user.displayName}

-

- {otherUser.displayName} -

-
- - - {otherUserUnlockedAchievementCount} /{" "} - {otherUserTotalAchievementCount} - -
- + - {formatDownloadProgress( - otherUserUnlockedAchievementCount / - otherUserTotalAchievementCount - )} + {userUnlockedAchievementCount} / {userTotalAchievementCount}
- -
-
-

- {userDetails?.displayName} -

-
-
- - - {userUnlockedAchievementCount} / {userTotalAchievementCount} - -
- - {formatDownloadProgress( - userUnlockedAchievementCount / userTotalAchievementCount - )} - -
- + + {formatDownloadProgress( + userUnlockedAchievementCount / userTotalAchievementCount + )} +
+
); @@ -220,18 +129,6 @@ function AchievementList({ user, otherUser }: AchievementListProps) { const { userDetails } = useUserDetails(); - const getProfileImage = (imageUrl: string | null | undefined) => { - return ( -
- {imageUrl ? ( - {"teste"} - ) : ( - - )} -
- ); - }; - if (!otherUserAchievements || otherUserAchievements.length === 0) { return (