From 3c2bbfae752adc4ae69c5a3e8ebd14e60ba07a86 Mon Sep 17 00:00:00 2001 From: dvaJi Date: Mon, 22 Jul 2024 18:14:31 -0400 Subject: [PATCH] refactor: Optimize dynamicParams generation in character page This commit refactors the dynamicParams generation in the character page to improve performance. Instead of sorting the characters array after retrieving them from the API, the sorting is now done directly in the API call by adding the "sort" parameter. This reduces the amount of data transferred and improves the overall efficiency of the page. --- .../(genshin)/teams/[character]/page.tsx | 55 +++++++++---------- components/genshin/TeamCard.tsx | 4 +- components/go-to.tsx | 22 ++++++++ 3 files changed, 49 insertions(+), 32 deletions(-) create mode 100644 components/go-to.tsx diff --git a/app/[lang]/(genshin)/teams/[character]/page.tsx b/app/[lang]/(genshin)/teams/[character]/page.tsx index f9b06e5c..b45a7df4 100644 --- a/app/[lang]/(genshin)/teams/[character]/page.tsx +++ b/app/[lang]/(genshin)/teams/[character]/page.tsx @@ -9,13 +9,14 @@ import { Fragment } from "react"; import { genPageMetadata } from "@app/seo"; import ElementIcon from "@components/genshin/ElementIcon"; +import Image from "@components/genshin/Image"; +import GoTo from "@components/go-to"; import Button from "@components/ui/Button"; import FrstAds from "@components/ui/FrstAds"; import useTranslations from "@hooks/use-translations"; import type { Artifact, Beta, Character, Weapon } from "@interfaces/genshin"; import { AD_ARTICLE_SLOT } from "@lib/constants"; import { getGenshinData } from "@lib/dataApi"; -import { getUrl } from "@lib/imgUrl"; import { getData, getRemoteData } from "@lib/localData"; import { capitalize } from "@utils/capitalize"; import { localeToLang } from "@utils/locale-to-lang"; @@ -68,7 +69,7 @@ export async function generateMetadata({ id: params.character, }, }); - const _betaCharacter = beta[locale].characters.find( + const _betaCharacter = beta[locale]?.characters?.find( (c: any) => c.id === params.character ); @@ -140,7 +141,7 @@ export default async function GenshinCharacterTeams({ params }: Props) { }); return ( -
+
- {character.name}
@@ -199,10 +202,10 @@ export default async function GenshinCharacterTeams({ params }: Props) {
{characterTeams.teams.map((team: TeamData, index: number) => ( -
@@ -238,13 +241,9 @@ export default async function GenshinCharacterTeams({ params }: Props) { `genshin-bg-rarity-${characters[char.id].rarity}` )} > - {characters[char.id].name} ))}
-
+ ))}
@@ -287,22 +286,18 @@ export default async function GenshinCharacterTeams({ params }: Props) { {team.characters.map((char) => (
-
+
{t({ id: char.role.toLowerCase(), defaultMessage: char.role, })}
- {characters[char.id].name}
-
+

{t("char_role_build", { name: characters[char.id].name, @@ -346,8 +341,8 @@ export default async function GenshinCharacterTeams({ params }: Props) {

{artifactsMap[art].name}
- {artifactsMap[art].name} {weaponsMap[weapon].name} - {weapon}
-
+
{char.description}
diff --git a/components/genshin/TeamCard.tsx b/components/genshin/TeamCard.tsx index 81d14680..2fd6d745 100644 --- a/components/genshin/TeamCard.tsx +++ b/components/genshin/TeamCard.tsx @@ -29,7 +29,7 @@ const TeamCard = ({ team, mainName, asyncLoad = true }: TeamCardProps) => {
{team.characters.map((block, i) => (
-
+
{t({ id: block.role.toLowerCase(), defaultMessage: block.role })}
@@ -48,7 +48,7 @@ const TeamCard = ({ team, mainName, asyncLoad = true }: TeamCardProps) => { loading={asyncLoad ? "lazy" : "eager"} /> ; + +export default function GoTo({ elementId, children, ...props }: Props) { + const router = useRouter(); + + const handleNavigation = (url: string) => { + router.push(url); + }; + + return ( +
handleNavigation(elementId)} {...props}> + {children} +
+ ); +}