/** @jsxImportSource theme-ui */ import { Text, Box, Heading, Flex, Link } from '@theme-ui/components' import NextLink from 'next/link' import Breadcrumb from '../../../components/organisms/Breadcrumb' import Honkai3rdNavigator from '../../../components/organisms/Honkai3rdNavigator' import { listWeapons } from '../../../server/data/honkai3rd/weapons' import { pick } from 'ramda' import SquareImageBox from '../../../components/atoms/SquareImageBox' import { useMemo } from 'react' import FilterButton from '../../../components/atoms/FilterButton' import { useRouter } from 'next/router' import { WeaponData } from '../../../lib/honkai3rd/weapons' type WeaponListItemData = Pick< WeaponData, 'id' | 'name' | 'rarity' | 'category' > interface WeaponListPageProps { weaponDataList: WeaponListItemData[] } const weaponFilterOptions = [ { value: 'all', label: 'All' }, { value: 'pistol', label: 'Pistols' }, { value: 'katana', label: 'Katanas' }, { value: 'cannon', label: 'Cannons' }, { value: 'greatsword', label: 'Greatswords' }, { value: 'cross', label: 'Crosses' }, { value: 'gauntlet', label: 'Gauntlets' }, { value: 'scythe', label: 'Scythes' }, { value: 'lance', label: 'Lances' }, { value: 'bow', label: 'Bows' }, ] const WeaponListPage = ({ weaponDataList }: WeaponListPageProps) => { const { query } = useRouter() const filter = useMemo(() => { if (query.filter == null) { return 'all' } return typeof query.filter === 'string' ? query.filter : query.filter[0] }, [query]) const weaponList = useMemo(() => { return weaponDataList.map((weapon) => { const hidden = isWeaponHidden(weapon, filter) return ( {weapon.name} {'⭐'.repeat(weapon.rarity)} ) }) }, [weaponDataList, filter]) return ( Weapons Filter by Category {weaponFilterOptions.map(({ value, label }) => { return ( ) })} {weaponList} ) } export default WeaponListPage export async function getStaticProps() { return { props: { weaponDataList: listWeapons().map((weapon) => { return pick(['name', 'id', 'rarity', 'category'], weapon) }), }, } } function isWeaponHidden(weapon: WeaponListItemData, filter: string): boolean { switch (filter) { case 'pistol': case 'katana': case 'cannon': case 'greatsword': case 'cross': case 'gauntlet': case 'scythe': case 'lance': case 'bow': return weapon.category !== filter default: case 'all': return false } }