From 4fd81c372bae8c937d97339a04a74e97f12d14bc Mon Sep 17 00:00:00 2001 From: Sakura Knoll Date: Thu, 30 Dec 2021 17:45:49 +0900 Subject: [PATCH] Refactor battlesuit list page --- src/pages/honkai3rd/battlesuits/index.tsx | 137 ++++++++++------------ 1 file changed, 62 insertions(+), 75 deletions(-) diff --git a/src/pages/honkai3rd/battlesuits/index.tsx b/src/pages/honkai3rd/battlesuits/index.tsx index 39cb8e9d..6aa3dc4f 100644 --- a/src/pages/honkai3rd/battlesuits/index.tsx +++ b/src/pages/honkai3rd/battlesuits/index.tsx @@ -1,5 +1,4 @@ import { Box, Heading, Flex, Text, Link, Button } from '@theme-ui/components' -import Image from 'next/image' import NextLink from 'next/link' import { pick } from 'ramda' import React, { useCallback, useMemo, useState } from 'react' @@ -71,63 +70,9 @@ const valkyrieFilterOptions = [ const BattlesuitListPage = ({ battlesuits }: BattlesuitListPageProps) => { const [filter, setFilter] = useState('all') - const isBattlesuitHidden = useCallback( - (battlesuit: BattlesuitListItemData) => { - switch (filter) { - case 'physical': - case 'fire dmg': - case 'ice dmg': - case 'lightning dmg': - case 'freeze': - case 'paralyze': - case 'stun': - case 'ignite': - case 'bleed': - case 'heavy atk': - case 'weaken': - case 'impair': - case 'time mastery': - case 'gather': - case 'heal': - case 'fast atk': - case 'burst': - case 'aerial': - return !battlesuit.strengths.some((strength) => strength === filter) - case 'mecha': - case 'biologic': - case 'psychic': - case 'quantum': - case 'imaginary': - return battlesuit.type !== filter - case 'kiana': - case 'mei': - case 'bronya': - case 'himeko': - case 'theresa': - case 'fuhua': - case 'rita': - case 'sakura': - case 'kallen': - case 'olenyevas': - case 'seele': - case 'durandal': - case 'fischl': - case 'elysia': - case 'mobius': - case 'raven': - case 'carole': - return battlesuit.valkyrie !== filter - default: - case 'all': - return false - } - }, - [filter] - ) - const battlesuitList = useMemo(() => { return battlesuits.map((battlesuit) => { - const hidden = isBattlesuitHidden(battlesuit) + const hidden = isBattlesuitHidden(battlesuit, filter) return ( { borderWidth: 1, borderStyle: 'solid', borderRadius: 8, - transition: - 'box-shadow 200ms ease-in-out, opacity 200ms ease-in-out', + transition: 'box-shadow 200ms ease-in-out', '&:hover': { borderColor: 'gray.3', boxShadow: '0 4px 8px rgba(0, 0, 0, 0.2)', @@ -157,22 +101,11 @@ const BattlesuitListPage = ({ battlesuits }: BattlesuitListPageProps) => { passHref={true} > - - {battlesuit.name} - + { ) }) - }, [battlesuits, isBattlesuitHidden]) + }, [battlesuits, filter]) return ( @@ -296,3 +229,57 @@ const FilterButton = ({ ) } + +function isBattlesuitHidden( + battlesuit: BattlesuitListItemData, + filter: string +): boolean { + switch (filter) { + case 'physical': + case 'fire dmg': + case 'ice dmg': + case 'lightning dmg': + case 'freeze': + case 'paralyze': + case 'stun': + case 'ignite': + case 'bleed': + case 'heavy atk': + case 'weaken': + case 'impair': + case 'time mastery': + case 'gather': + case 'heal': + case 'fast atk': + case 'burst': + case 'aerial': + return !battlesuit.strengths.some((strength) => strength === filter) + case 'mecha': + case 'biologic': + case 'psychic': + case 'quantum': + case 'imaginary': + return battlesuit.type !== filter + case 'kiana': + case 'mei': + case 'bronya': + case 'himeko': + case 'theresa': + case 'fuhua': + case 'rita': + case 'sakura': + case 'kallen': + case 'olenyevas': + case 'seele': + case 'durandal': + case 'fischl': + case 'elysia': + case 'mobius': + case 'raven': + case 'carole': + return battlesuit.valkyrie !== filter + default: + case 'all': + return false + } +}