From 6991d14f66a3a47e44c19e17e0129277d05c4b59 Mon Sep 17 00:00:00 2001 From: Sakura Knoll Date: Tue, 28 Dec 2021 15:45:33 +0900 Subject: [PATCH] Add version show page --- src/pages/honkai3rd/versions/[versionId].tsx | 186 ++++++++++++++++++- 1 file changed, 178 insertions(+), 8 deletions(-) diff --git a/src/pages/honkai3rd/versions/[versionId].tsx b/src/pages/honkai3rd/versions/[versionId].tsx index a521b211..b966f7a1 100644 --- a/src/pages/honkai3rd/versions/[versionId].tsx +++ b/src/pages/honkai3rd/versions/[versionId].tsx @@ -1,23 +1,165 @@ /** @jsxImportSource theme-ui */ +import { Box, Heading, Link, Flex, Text } from '@theme-ui/components' import { NextPageContext } from 'next' +import Breadcrumb from '../../../components/organisms/Breadcrumb' +import GanttChart from '../../../components/organisms/GanttChart' +import Honkai3rdNavigator from '../../../components/organisms/Honkai3rdNavigator' import { getVersion, listVersionData, VersionData, } from '../../../data/honkai3rd/versions' +import { format as formatDate } from 'date-fns' +import { + BattlesuitData, + getBattlesuitById, +} from '../../../data/honkai3rd/battlesuits' +import NextLink from 'next/link' +import SquareImageBox from '../../../components/atoms/SquareImageBox' +import { getWeaponById, WeaponData } from '../../../data/honkai3rd/weapons' +import ScrollContainer from 'react-indiana-drag-scroll' +import { + listSupplyEventsByVersion, + SupplyEventData, +} from '../../../data/honkai3rd/supply-events' +import { addDateToDateString, getDateString } from '../../../lib/string' interface VersionShowPageProps { versionData: VersionData + battlesuits: BattlesuitData[] + weapons: WeaponData[] + supplyEvents: SupplyEventData[] } -const VersionShowPage = ({ versionData }: VersionShowPageProps) => { +const VersionShowPage = ({ + versionData, + battlesuits, + weapons, + supplyEvents, +}: VersionShowPageProps) => { return ( -
- {versionData.version} : {versionData.name} -
-        {JSON.stringify(versionData, null, 2)}
-      
-
+ + + + + + + + v{versionData.version} : {versionData.name}{' '} + (Current Version) + + + {formatDate(new Date(versionData.duration[0]), 'PP')} -{' '} + {versionData.duration[1] != null + ? formatDate(new Date(versionData.duration[1]), 'PP') + : ''} + + + + + New Battlesuits + + + {battlesuits.map((battlesuit) => { + return ( + + + + + {battlesuit.name} + + + + ) + })} + + + + New Weapons + + + {weapons.map((weapon) => { + return ( + + + + + {weapon.name} + + + + ) + })} + + + + + Supply Events + + + + { + const imgSrc = getIconSrcFromItem(supplyEventData.featured[0]) + return { + id: supplyEventData.id, + label: ( + + {!supplyEventData.verified && ( + + )} + {imgSrc != null && ( + + )} + {supplyEventData.name} + + ), + duration: supplyEventData.duration, + row: supplyEventData.track, + } + })} + today={getDateString(new Date())} + startDate={versionData.duration[0]} + endDate={ + versionData.duration[1] != null + ? versionData.duration[1] + : addDateToDateString(versionData.duration[0], { + weeks: 6, + }) + } + /> + + + + + ) } @@ -26,9 +168,23 @@ export default VersionShowPage export async function getStaticProps({ params, }: NextPageContext & { params: { versionId: string } }) { + const versionData = getVersion(params.versionId)! + + const battlesuits = versionData.newBattlesuits.map((battlesuitId) => { + return getBattlesuitById(battlesuitId) + }) + const weapons = versionData.newWeapons.map((weaponId) => { + return getWeaponById(weaponId) + }) + + const supplyEvents = listSupplyEventsByVersion(versionData.version) + return { props: { - versionData: getVersion(params.versionId), + versionData, + battlesuits, + weapons, + supplyEvents, }, } } @@ -45,3 +201,17 @@ export async function getStaticPaths() { fallback: false, } } + +function getIconSrcFromItem(item: { type: string; id: string }): string | null { + switch (item.type) { + case 'battlesuit': + return `/assets/honkai3rd/battlesuits/portrait-${item.id}.png` + case 'weapon': + return `/assets/honkai3rd/weapons/${item.id}.png` + case 'stigmata': + return `/assets/honkai3rd/stigmata/icon-${item.id}.png` + case 'elf': + return `/assets/honkai3rd/elfs/icon-${item.id}.png` + } + return null +}