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
+}