import { NextPageContext } from 'next' import { Box, Card, Flex, Heading } from 'theme-ui' import { useMemo } from 'react' import { Elf, ElfSkill } from '../../../../lib/v2/data/types' import { loadElfCatalog, loadElfData } from '../../../../lib/v2/server/loadData' import SquareImage from '../../../../components/v2/SquareImage' import TagIcon from '../../../../components/v2/TagIcon' import { assetsBucketBaseUrl } from '../../../../lib/consts' import { ListMap } from '../../../../lib/utils' import FormattedText from '../../../../components/v2/FormattedText' import { formatSubSkillInfo } from '../../../../lib/v2/data/formatText' interface ElfShowPageProps { elf: Elf } const ElfShowPage = ({ elf }: ElfShowPageProps) => { const skillRows = useMemo(() => { const rowSkillListMap = elf.skills.reduce>((map, skill) => { map.set(skill.row.toString(), skill) return map }, new ListMap()) return [...rowSkillListMap.values()] }, [elf.skills]) return ( {elf.fullName} {elf.tags.map(tag => { return ( ) })} Ult CD: {elf.ultSkillCd} / Ult SP Cost: {elf.ultSkillCost} Skills {skillRows.map((row, index) => { return ( {row.map(skill => { return ( {skill.name} {/* {skill.id} */} ({skill.skillType}) {formatSubSkillInfo(skill)} ) })} ) })} ) } export default ElfShowPage export async function getStaticProps({ locale, params }: NextPageContext & { params: { elfId: string } }) { const elf = loadElfData(params.elfId) return { props: { elf } } } export async function getStaticPaths() { const elfCatalog = loadElfCatalog() return { paths: elfCatalog.map(catalogItem => { return { params: { elfId: catalogItem.id } } }), fallback: false } }