diff --git a/src/components/atoms/BattlesuitFeatureLabel.tsx b/src/components/atoms/BattlesuitFeatureLabel.tsx index badb9002..dcfcdfda 100644 --- a/src/components/atoms/BattlesuitFeatureLabel.tsx +++ b/src/components/atoms/BattlesuitFeatureLabel.tsx @@ -1,5 +1,5 @@ import { Flex, Text } from '@theme-ui/components' -import { battlesuitStrengths } from '../../lib/safeData' +import { battlesuitStrengths } from '../../lib/honkai3rd/battlesuits' import SquareImageBox from './SquareImageBox' interface BattlesuitFeatureLabelProps { diff --git a/src/components/atoms/ValkyrieLabel.tsx b/src/components/atoms/ValkyrieLabel.tsx index 7207bede..30710460 100644 --- a/src/components/atoms/ValkyrieLabel.tsx +++ b/src/components/atoms/ValkyrieLabel.tsx @@ -1,4 +1,5 @@ import { Flex, Text } from '@theme-ui/components' +import { valkyries } from '../../lib/honkai3rd/battlesuits' import SquareImageBox from './SquareImageBox' interface ValkyrieLabelProps { @@ -6,13 +7,16 @@ interface ValkyrieLabelProps { } const ValkyrieLabel = ({ valkyrie }: ValkyrieLabelProps) => { - const { icon, label } = getLabelData(valkyrie) + const { icon, label } = valkyries.find( + (aValkyrie) => aValkyrie.value === valkyrie + ) || { label: valkyrie } + return ( {icon && ( @@ -23,45 +27,3 @@ const ValkyrieLabel = ({ valkyrie }: ValkyrieLabelProps) => { } export default ValkyrieLabel - -function getLabelData(valkyrie: string): { label: string; icon?: string } { - switch (valkyrie) { - case 'kiana': - return { icon: 'kiana', label: 'Kiana Kaslana' } - case 'mei': - return { icon: 'mei', label: 'Raiden Mei' } - case 'bronya': - return { icon: 'bronya', label: 'Bronya Zaychik' } - case 'himeko': - return { icon: 'himeko', label: 'Murata Himeko' } - case 'theresa': - return { icon: 'theresa', label: 'Theresa Apocalypse' } - case 'fuhua': - return { icon: 'fuhua', label: 'Fu Hua' } - case 'rita': - return { icon: 'rita', label: 'Rita Rossweisse' } - case 'sakura': - return { icon: 'sakura', label: 'Yae Sakura' } - case 'kallen': - return { icon: 'kallen', label: 'Kallen Kaslana' } - case 'olenyevas': - return { icon: 'olenyevas', label: 'Olenyevas' } - case 'seele': - return { icon: 'seele', label: 'Seele Vollerei' } - case 'durandal': - return { icon: 'durandal', label: 'Durandal' } - case 'fischl': - return { icon: 'fischl', label: 'Fischl' } - case 'elysia': - return { icon: 'elysia', label: 'Elysia' } - case 'mobius': - return { icon: 'mobius', label: 'Mobius' } - case 'raven': - return { icon: 'raven', label: 'Raven' } - case 'carole': - return { icon: 'carole', label: 'Carole Pepper' } - } - return { - label: valkyrie, - } -} diff --git a/src/components/molecules/BattlesuitCard.tsx b/src/components/molecules/BattlesuitCard.tsx index bcfe4459..a81c69aa 100644 --- a/src/components/molecules/BattlesuitCard.tsx +++ b/src/components/molecules/BattlesuitCard.tsx @@ -1,5 +1,5 @@ import { Box, Card, Text } from '@theme-ui/components' -import { BattlesuitData } from '../../server/data/honkai3rd/battlesuits' +import { BattlesuitData } from '../../lib/honkai3rd/battlesuits' import PageLink from '../atoms/PageLink' import SquareImageBox from '../atoms/SquareImageBox' diff --git a/src/lib/honkai3rd/battlesuits.ts b/src/lib/honkai3rd/battlesuits.ts new file mode 100644 index 00000000..33ede128 --- /dev/null +++ b/src/lib/honkai3rd/battlesuits.ts @@ -0,0 +1,82 @@ +export interface BattlesuitSkill { + name: string + description: string + requiredRank: string +} +export interface BattlesuitSkillGroup { + core: BattlesuitSkill + subskills: BattlesuitSkill[] +} + +export interface BattlesuitData { + id: string + version?: string + name: string + type: string + valkyrie: string + strengths: string[] + leader: BattlesuitSkillGroup + special: BattlesuitSkillGroup + evasion: BattlesuitSkillGroup + passive: BattlesuitSkillGroup + ultimate: BattlesuitSkillGroup + basic: BattlesuitSkillGroup + sp?: BattlesuitSkillGroup +} + +export const battlesuitStrengths = [ + { icon: 'feature-icons/physical', value: 'physical', label: 'Physical' }, + { icon: 'feature-icons/fire-dmg', value: 'fire-dmg', label: 'Fire DMG' }, + { icon: 'feature-icons/ice-dmg', value: 'ice-dmg', label: 'Ice DMG' }, + { + icon: 'feature-icons/lightning-dmg', + value: 'lightning-dmg', + label: 'Lightning DMG', + }, + { icon: 'feature-icons/freeze', value: 'freeze', label: 'Freeze' }, + { icon: 'feature-icons/paralyze', value: 'paralyze', label: 'Paralyze' }, + { icon: 'feature-icons/stun', value: 'stun', label: 'Stun' }, + { icon: 'feature-icons/ignite', value: 'ignite', label: 'Ignite' }, + { icon: 'feature-icons/bleed', value: 'bleed', label: 'Bleed' }, + { icon: 'feature-icons/heavy-atk', value: 'heavy-atk', label: 'heavy-atk' }, + { icon: 'feature-icons/weaken', value: 'weaken', label: 'Weaken' }, + { icon: 'feature-icons/impair', value: 'impair', label: 'Impair' }, + { + icon: 'feature-icons/time-mastery', + value: 'time mastery', + label: 'Time Mastery', + }, + { icon: 'feature-icons/gather', value: 'gather', label: 'Gather' }, + { icon: 'feature-icons/heal', value: 'heal', label: 'Heal' }, + { icon: 'feature-icons/fast-atk', value: 'fast atk', label: 'Fast ATK' }, + { icon: 'feature-icons/burst', value: 'burst', label: 'Burst' }, + { icon: 'feature-icons/aerial', value: 'aerial', label: 'Aerial' }, +] + +export const battlesuitTypes = [ + { value: 'mecha', icon: 'type-icons/mecha', label: 'Mecha' }, + { value: 'biologic', icon: 'type-icons/biologic', label: 'Biologic' }, + { value: 'psychic', icon: 'type-icons/psychic', label: 'Psychic' }, + { value: 'quantum', icon: 'type-icons/quantum', label: 'Quantum' }, + { value: 'imaginary', icon: 'type-icons/imaginary', label: 'Imaginary' }, +] + +export const valkyries = [ + { value: 'kiana', icon: 'valkyrie-icons/kiana', label: 'Kiana' }, + { value: 'mei', icon: 'valkyrie-icons/mei', label: 'Mei' }, + { value: 'bronya', icon: 'valkyrie-icons/bronya', label: 'Bronya' }, + { value: 'himeko', icon: 'valkyrie-icons/himeko', label: 'Himeko' }, + { value: 'theresa', icon: 'valkyrie-icons/theresa', label: 'Theresa' }, + { value: 'fuhua', icon: 'valkyrie-icons/fuhua', label: 'Fu Hua' }, + { value: 'rita', icon: 'valkyrie-icons/rita', label: 'Rita' }, + { value: 'sakura', icon: 'valkyrie-icons/sakura', label: 'Sakura' }, + { value: 'kallen', icon: 'valkyrie-icons/kallen', label: 'Kallen' }, + { value: 'olenyevas', icon: 'valkyrie-icons/olenyevas', label: 'Olenyevas' }, + { value: 'seele', icon: 'valkyrie-icons/seele', label: 'Seele' }, + { value: 'durandal', icon: 'valkyrie-icons/durandal', label: 'Durandal' }, + { value: 'fischl', icon: 'valkyrie-icons/fischl', label: 'Fischl' }, + { value: 'elysia', icon: 'valkyrie-icons/elysia', label: 'Elysia' }, + { value: 'mobius', icon: 'valkyrie-icons/mobius', label: 'Mobius' }, + { value: 'raven', icon: 'valkyrie-icons/raven', label: 'Raven' }, + { value: 'carole', icon: 'valkyrie-icons/carole', label: 'Carole' }, +] diff --git a/src/lib/honkai3rd/elfs.ts b/src/lib/honkai3rd/elfs.ts new file mode 100644 index 00000000..d5921b05 --- /dev/null +++ b/src/lib/honkai3rd/elfs.ts @@ -0,0 +1,15 @@ +export interface ElfSkill { + type: 'passive' | 'basic' | 'ultimate' | 'team' + name: string + requiredRank: number + description: string +} + +export interface ElfData { + id: string + name: string + baseRank: number + strengths: string[] + skillRows: [ElfSkill[], ElfSkill[], ElfSkill[], ElfSkill[]] + version: string +} diff --git a/src/lib/honkai3rd/stigmata.ts b/src/lib/honkai3rd/stigmata.ts new file mode 100644 index 00000000..b13f43c6 --- /dev/null +++ b/src/lib/honkai3rd/stigmata.ts @@ -0,0 +1,28 @@ +export interface StigmataSkill { + name: string + description: string +} + +export interface StigmataData { + id: string + name: string + skill: StigmataSkill + ttk: number + def: number + crt: number + set?: string + type: 'top' | 'mid' | 'bot' + hp: number + rarity: 3 | 4 | 5 + version?: string + hidden?: boolean +} + +export interface StigmataSet { + id: string + name: string + altName: string + twoSetSkill: StigmataSkill + threeSetSkill: StigmataSkill + version?: string +} diff --git a/src/lib/honkai3rd/supplyEvents.ts b/src/lib/honkai3rd/supplyEvents.ts new file mode 100644 index 00000000..ed2887b3 --- /dev/null +++ b/src/lib/honkai3rd/supplyEvents.ts @@ -0,0 +1,34 @@ +export interface SupplyEventData { + id: string + verified: boolean + track: number + name: string + type: string + token: string + featured: { + type: string + id: string + }[] + extra: string[] + version: number + duration: [string, string] + guarantees: { + count: number + recurring: boolean + rewards: { type: string; id: string; amount: number | [number, number] }[] + }[] + mileages: { + count: number + rewardOptions: { + type: string + id: string + amount: number + }[] + }[] + drops: { + type: string + id: string + rate: number + amount: number | [number, number] + }[] +} diff --git a/src/lib/honkai3rd/versions.ts b/src/lib/honkai3rd/versions.ts new file mode 100644 index 00000000..e0132472 --- /dev/null +++ b/src/lib/honkai3rd/versions.ts @@ -0,0 +1,11 @@ +export interface VersionData { + version: string + previousVersion?: string + nextVersion?: string + name: string + duration: [string, string] + verified: boolean + newBattlesuits: string[] + newWeapons: string[] + description: string +} diff --git a/src/lib/honkai3rd/weapons.ts b/src/lib/honkai3rd/weapons.ts new file mode 100644 index 00000000..1bdafd13 --- /dev/null +++ b/src/lib/honkai3rd/weapons.ts @@ -0,0 +1,24 @@ +export interface WeaponSkill { + name: string + description: string +} + +export interface WeaponData { + id: string + name: string + atk: number + crt: number + category: + | 'pistol' + | 'cannon' + | 'katana' + | 'cross' + | 'greatsword' + | 'scythe' + | 'lance' + | 'gauntlet' + | 'bow' + rarity: number + skills: WeaponSkill[] + version?: string +} diff --git a/src/lib/safeData.ts b/src/lib/safeData.ts deleted file mode 100644 index d49271ae..00000000 --- a/src/lib/safeData.ts +++ /dev/null @@ -1,28 +0,0 @@ -export const battlesuitStrengths = [ - { icon: 'feature-icons/physical', value: 'physical', label: 'Physical' }, - { icon: 'feature-icons/fire-dmg', value: 'fire-dmg', label: 'Fire DMG' }, - { icon: 'feature-icons/ice-dmg', value: 'ice-dmg', label: 'Ice DMG' }, - { - icon: 'feature-icons/lightning-dmg', - value: 'lightning-dmg', - label: 'Lightning DMG', - }, - { icon: 'feature-icons/freeze', value: 'freeze', label: 'Freeze' }, - { icon: 'feature-icons/paralyze', value: 'paralyze', label: 'Paralyze' }, - { icon: 'feature-icons/stun', value: 'stun', label: 'Stun' }, - { icon: 'feature-icons/ignite', value: 'ignite', label: 'Ignite' }, - { icon: 'feature-icons/bleed', value: 'bleed', label: 'Bleed' }, - { icon: 'feature-icons/heavy-atk', value: 'heavy-atk', label: 'heavy-atk' }, - { icon: 'feature-icons/weaken', value: 'weaken', label: 'Weaken' }, - { icon: 'feature-icons/impair', value: 'impair', label: 'Impair' }, - { - icon: 'feature-icons/time-mastery', - value: 'time mastery', - label: 'Time Mastery', - }, - { icon: 'feature-icons/gather', value: 'gather', label: 'Gather' }, - { icon: 'feature-icons/heal', value: 'heal', label: 'Heal' }, - { icon: 'feature-icons/fast-atk', value: 'fast atk', label: 'Fast ATK' }, - { icon: 'feature-icons/burst', value: 'burst', label: 'Burst' }, - { icon: 'feature-icons/aerial', value: 'aerial', label: 'Aerial' }, -] diff --git a/src/pages/honkai3rd/battlesuits/[battlesuitId].tsx b/src/pages/honkai3rd/battlesuits/[battlesuitId].tsx index 784b8e42..202d9720 100644 --- a/src/pages/honkai3rd/battlesuits/[battlesuitId].tsx +++ b/src/pages/honkai3rd/battlesuits/[battlesuitId].tsx @@ -12,6 +12,8 @@ import Honkai3rdNavigator from '../../../components/organisms/Honkai3rdNavigator import { BattlesuitData, BattlesuitSkillGroup, +} from '../../../lib/honkai3rd/battlesuits' +import { getBattlesuitById, listBattlesuits, } from '../../../server/data/honkai3rd/battlesuits' diff --git a/src/pages/honkai3rd/battlesuits/index.tsx b/src/pages/honkai3rd/battlesuits/index.tsx index 1ec6a6d5..0da970eb 100644 --- a/src/pages/honkai3rd/battlesuits/index.tsx +++ b/src/pages/honkai3rd/battlesuits/index.tsx @@ -4,11 +4,13 @@ import { useMemo } from 'react' import FilterButton from '../../../components/atoms/FilterButton' import Breadcrumb from '../../../components/organisms/Breadcrumb' import Honkai3rdNavigator from '../../../components/organisms/Honkai3rdNavigator' +import { listBattlesuits } from '../../../server/data/honkai3rd/battlesuits' import { BattlesuitData, - listBattlesuits, -} from '../../../server/data/honkai3rd/battlesuits' -import { battlesuitStrengths } from '../../../lib/safeData' + battlesuitStrengths, + battlesuitTypes, + valkyries, +} from '../../../lib/honkai3rd/battlesuits' import BattlesuitCard from '../../../components/molecules/BattlesuitCard' import { useRouter } from 'next/router' @@ -24,31 +26,8 @@ interface BattlesuitListPageProps { const featureFilterOptions: { value: string; label: string; icon?: string }[] = [{ value: 'all', label: 'All' }, ...battlesuitStrengths] -const valkyrieFilterOptions = [ - { value: 'all', label: 'All' }, - { value: 'mecha', icon: 'type-icons/mecha', label: 'Mecha' }, - { value: 'biologic', icon: 'type-icons/biologic', label: 'Biologic' }, - { value: 'psychic', icon: 'type-icons/psychic', label: 'Psychic' }, - { value: 'quantum', icon: 'type-icons/quantum', label: 'Quantum' }, - { value: 'imaginary', icon: 'type-icons/imaginary', label: 'Imaginary' }, - { value: 'kiana', icon: 'valkyrie-icons/kiana', label: 'Kiana' }, - { value: 'mei', icon: 'valkyrie-icons/mei', label: 'Mei' }, - { value: 'bronya', icon: 'valkyrie-icons/bronya', label: 'Bronya' }, - { value: 'himeko', icon: 'valkyrie-icons/himeko', label: 'Himeko' }, - { value: 'theresa', icon: 'valkyrie-icons/theresa', label: 'Theresa' }, - { value: 'fuhua', icon: 'valkyrie-icons/fuhua', label: 'Fu Hua' }, - { value: 'rita', icon: 'valkyrie-icons/rita', label: 'Rita' }, - { value: 'sakura', icon: 'valkyrie-icons/sakura', label: 'Sakura' }, - { value: 'kallen', icon: 'valkyrie-icons/kallen', label: 'Kallen' }, - { value: 'olenyevas', icon: 'valkyrie-icons/olenyevas', label: 'Olenyevas' }, - { value: 'seele', icon: 'valkyrie-icons/seele', label: 'Seele' }, - { value: 'durandal', icon: 'valkyrie-icons/durandal', label: 'Durandal' }, - { value: 'fischl', icon: 'valkyrie-icons/fischl', label: 'Fischl' }, - { value: 'elysia', icon: 'valkyrie-icons/elysia', label: 'Elysia' }, - { value: 'mobius', icon: 'valkyrie-icons/mobius', label: 'Mobius' }, - { value: 'raven', icon: 'valkyrie-icons/raven', label: 'Raven' }, - { value: 'carole', icon: 'valkyrie-icons/carole', label: 'Carole' }, -] +const valkyrieFilterOptions: { value: string; label: string; icon?: string }[] = + [{ value: 'all', label: 'All' }, ...battlesuitTypes, ...valkyries] const BattlesuitListPage = ({ battlesuits }: BattlesuitListPageProps) => { const { query } = useRouter() diff --git a/src/pages/honkai3rd/elfs/[elfId].tsx b/src/pages/honkai3rd/elfs/[elfId].tsx index 3f126364..f83879f8 100644 --- a/src/pages/honkai3rd/elfs/[elfId].tsx +++ b/src/pages/honkai3rd/elfs/[elfId].tsx @@ -4,11 +4,8 @@ import Image from 'next/image' import React from 'react' import Breadcrumb from '../../../components/organisms/Breadcrumb' import Honkai3rdNavigator from '../../../components/organisms/Honkai3rdNavigator' -import { - ElfData, - getElfById, - listElfs, -} from '../../../server/data/honkai3rd/elfs' +import { ElfData } from '../../../lib/honkai3rd/elfs' +import { getElfById, listElfs } from '../../../server/data/honkai3rd/elfs' interface ElfShowPageProps { elf: ElfData diff --git a/src/pages/honkai3rd/elfs/index.tsx b/src/pages/honkai3rd/elfs/index.tsx index e17b00ab..c78ef311 100644 --- a/src/pages/honkai3rd/elfs/index.tsx +++ b/src/pages/honkai3rd/elfs/index.tsx @@ -5,7 +5,8 @@ import { pick } from 'ramda' import React from 'react' import Breadcrumb from '../../../components/organisms/Breadcrumb' import Honkai3rdNavigator from '../../../components/organisms/Honkai3rdNavigator' -import { ElfData, listElfs } from '../../../server/data/honkai3rd/elfs' +import { ElfData } from '../../../lib/honkai3rd/elfs' +import { listElfs } from '../../../server/data/honkai3rd/elfs' interface ElfListPageProps { elfs: Pick[] diff --git a/src/pages/honkai3rd/stigmata/[stigmataId].tsx b/src/pages/honkai3rd/stigmata/[stigmataId].tsx index 4f488f1d..311b442d 100644 --- a/src/pages/honkai3rd/stigmata/[stigmataId].tsx +++ b/src/pages/honkai3rd/stigmata/[stigmataId].tsx @@ -5,13 +5,12 @@ import Link from 'next/link' import React from 'react' import Breadcrumb from '../../../components/organisms/Breadcrumb' import Honkai3rdNavigator from '../../../components/organisms/Honkai3rdNavigator' +import { StigmataData, StigmataSet } from '../../../lib/honkai3rd/stigmata' import { - StigmataData, listStigmata, getStigmataById, getStigmataListBySetId, getStigmataSetBySetId, - StigmataSet, } from '../../../server/data/honkai3rd/stigmata' interface StigmataShowPageProps { diff --git a/src/pages/honkai3rd/stigmata/index.tsx b/src/pages/honkai3rd/stigmata/index.tsx index af8d6829..ca61c94e 100644 --- a/src/pages/honkai3rd/stigmata/index.tsx +++ b/src/pages/honkai3rd/stigmata/index.tsx @@ -5,10 +5,8 @@ import NextLink from 'next/link' import { pick } from 'ramda' import Breadcrumb from '../../../components/organisms/Breadcrumb' import Honkai3rdNavigator from '../../../components/organisms/Honkai3rdNavigator' -import { - StigmataData, - listStigmata, -} from '../../../server/data/honkai3rd/stigmata' +import { StigmataData } from '../../../lib/honkai3rd/stigmata' +import { listStigmata } from '../../../server/data/honkai3rd/stigmata' interface StigmataListPageProps { stigmataDataList: Pick[] diff --git a/src/pages/honkai3rd/versions/[versionId].tsx b/src/pages/honkai3rd/versions/[versionId].tsx index 30eb4e4a..f0528de6 100644 --- a/src/pages/honkai3rd/versions/[versionId].tsx +++ b/src/pages/honkai3rd/versions/[versionId].tsx @@ -7,25 +7,19 @@ import Honkai3rdNavigator from '../../../components/organisms/Honkai3rdNavigator import { getVersion, listVersionData, - VersionData, } from '../../../server/data/honkai3rd/versions' import { format as formatDate } from 'date-fns' -import { - BattlesuitData, - getBattlesuitById, -} from '../../../server/data/honkai3rd/battlesuits' +import { getBattlesuitById } from '../../../server/data/honkai3rd/battlesuits' import NextLink from 'next/link' import SquareImageBox from '../../../components/atoms/SquareImageBox' -import { - getWeaponById, - WeaponData, -} from '../../../server/data/honkai3rd/weapons' +import { getWeaponById } from '../../../server/data/honkai3rd/weapons' import ScrollContainer from 'react-indiana-drag-scroll' -import { - listSupplyEventsByVersion, - SupplyEventData, -} from '../../../server/data/honkai3rd/supply-events' +import { listSupplyEventsByVersion } from '../../../server/data/honkai3rd/supplyEvents' import { addDateToDateString, getDateString } from '../../../lib/string' +import { BattlesuitData } from '../../../lib/honkai3rd/battlesuits' +import { WeaponData } from '../../../lib/honkai3rd/weapons' +import { SupplyEventData } from '../../../lib/honkai3rd/supplyEvents' +import { VersionData } from '../../../lib/honkai3rd/versions' interface VersionShowPageProps { versionData: VersionData diff --git a/src/pages/honkai3rd/versions/index.tsx b/src/pages/honkai3rd/versions/index.tsx index 7ee181c4..05f50a78 100644 --- a/src/pages/honkai3rd/versions/index.tsx +++ b/src/pages/honkai3rd/versions/index.tsx @@ -5,26 +5,20 @@ import SquareImageBox from '../../../components/atoms/SquareImageBox' import Breadcrumb from '../../../components/organisms/Breadcrumb' import GanttChart from '../../../components/organisms/GanttChart' import Honkai3rdNavigator from '../../../components/organisms/Honkai3rdNavigator' -import { - BattlesuitData, - getBattlesuitById, -} from '../../../server/data/honkai3rd/battlesuits' -import { - listSupplyEventsByVersion, - SupplyEventData as SupplyEventData, -} from '../../../server/data/honkai3rd/supply-events' +import { getBattlesuitById } from '../../../server/data/honkai3rd/battlesuits' +import { listSupplyEventsByVersion } from '../../../server/data/honkai3rd/supplyEvents' import { getCurrentVersion, listVersionData, - VersionData, } from '../../../server/data/honkai3rd/versions' -import { - getWeaponById, - WeaponData, -} from '../../../server/data/honkai3rd/weapons' +import { getWeaponById } from '../../../server/data/honkai3rd/weapons' import { addDateToDateString, getDateString } from '../../../lib/string' import ScrollContainer from 'react-indiana-drag-scroll' import { format as formatDate } from 'date-fns' +import { BattlesuitData } from '../../../lib/honkai3rd/battlesuits' +import { WeaponData } from '../../../lib/honkai3rd/weapons' +import { VersionData } from '../../../lib/honkai3rd/versions' +import { SupplyEventData } from '../../../lib/honkai3rd/supplyEvents' interface VersionIndexPageProps { versionDataList: VersionData[] diff --git a/src/pages/honkai3rd/weapons/[weaponId].tsx b/src/pages/honkai3rd/weapons/[weaponId].tsx index dfa06b29..e915aa9e 100644 --- a/src/pages/honkai3rd/weapons/[weaponId].tsx +++ b/src/pages/honkai3rd/weapons/[weaponId].tsx @@ -3,10 +3,10 @@ import { NextPageContext } from 'next' import React from 'react' import Breadcrumb from '../../../components/organisms/Breadcrumb' import Honkai3rdNavigator from '../../../components/organisms/Honkai3rdNavigator' +import { WeaponData } from '../../../lib/honkai3rd/weapons' import { getWeaponById, listWeapons, - WeaponData, } from '../../../server/data/honkai3rd/weapons' interface WeaponShowPageProps { diff --git a/src/pages/honkai3rd/weapons/index.tsx b/src/pages/honkai3rd/weapons/index.tsx index 09d2c299..2675a336 100644 --- a/src/pages/honkai3rd/weapons/index.tsx +++ b/src/pages/honkai3rd/weapons/index.tsx @@ -3,12 +3,13 @@ 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, WeaponData } from '../../../server/data/honkai3rd/weapons' +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, diff --git a/src/lib/data.ts b/src/server/data/fs.ts similarity index 100% rename from src/lib/data.ts rename to src/server/data/fs.ts diff --git a/src/server/data/honkai3rd/battlesuits.ts b/src/server/data/honkai3rd/battlesuits.ts index cb0d0784..36e570bb 100644 --- a/src/server/data/honkai3rd/battlesuits.ts +++ b/src/server/data/honkai3rd/battlesuits.ts @@ -1,31 +1,6 @@ -import { readdirSync, readJsonFileSync } from '../../../lib/data' +import { readdirSync, readJsonFileSync } from '../fs' import { compareVersion } from '../../../lib/string' - -export interface BattlesuitSkill { - name: string - description: string - requiredRank: string -} -export interface BattlesuitSkillGroup { - core: BattlesuitSkill - subskills: BattlesuitSkill[] -} - -export interface BattlesuitData { - id: string - version?: string - name: string - type: string - valkyrie: string - strengths: string[] - leader: BattlesuitSkillGroup - special: BattlesuitSkillGroup - evasion: BattlesuitSkillGroup - passive: BattlesuitSkillGroup - ultimate: BattlesuitSkillGroup - basic: BattlesuitSkillGroup - sp?: BattlesuitSkillGroup -} +import { BattlesuitData } from '../../../lib/honkai3rd/battlesuits' const battlesuitsFileNameList = readdirSync('honkai3rd/battlesuits') const battlesuitDataList = battlesuitsFileNameList diff --git a/src/server/data/honkai3rd/elfs.ts b/src/server/data/honkai3rd/elfs.ts index 35be27a3..fd41accc 100644 --- a/src/server/data/honkai3rd/elfs.ts +++ b/src/server/data/honkai3rd/elfs.ts @@ -1,21 +1,6 @@ -import { readdirSync, readJsonFileSync } from '../../../lib/data' +import { readdirSync, readJsonFileSync } from '../fs' import { compareVersion } from '../../../lib/string' - -export interface ElfSkill { - type: 'passive' | 'basic' | 'ultimate' | 'team' - name: string - requiredRank: number - description: string -} - -export interface ElfData { - id: string - name: string - baseRank: number - strengths: string[] - skillRows: [ElfSkill[], ElfSkill[], ElfSkill[], ElfSkill[]] - version: string -} +import { ElfData } from '../../../lib/honkai3rd/elfs' const elfFileNameList = readdirSync('honkai3rd/elfs') const elfDataList = elfFileNameList diff --git a/src/server/data/honkai3rd/stigmata.ts b/src/server/data/honkai3rd/stigmata.ts index fd2ed552..254dc9c2 100644 --- a/src/server/data/honkai3rd/stigmata.ts +++ b/src/server/data/honkai3rd/stigmata.ts @@ -1,34 +1,6 @@ -import { readdirSync, readJsonFileSync } from '../../../lib/data' +import { readdirSync, readJsonFileSync } from '../fs' import { compareVersion } from '../../../lib/string' - -export interface StigmataSkill { - name: string - description: string -} - -export interface StigmataData { - id: string - name: string - skill: StigmataSkill - ttk: number - def: number - crt: number - set?: string - type: 'top' | 'mid' | 'bot' - hp: number - rarity: 3 | 4 | 5 - version?: string - hidden?: boolean -} - -export interface StigmataSet { - id: string - name: string - altName: string - twoSetSkill: StigmataSkill - threeSetSkill: StigmataSkill - version?: string -} +import { StigmataData, StigmataSet } from '../../../lib/honkai3rd/stigmata' const stigmataDataFileNameList = readdirSync('honkai3rd/stigmata') const stigmataList = stigmataDataFileNameList diff --git a/src/server/data/honkai3rd/supply-events.ts b/src/server/data/honkai3rd/supply-events.ts deleted file mode 100644 index bb117c04..00000000 --- a/src/server/data/honkai3rd/supply-events.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { readdirSync, readJsonFileSync } from '../../../lib/data' - -export interface SupplyEventData { - id: string - verified: boolean - track: number - name: string - type: string - token: string - featured: { - type: string - id: string - }[] - extra: string[] - version: number - duration: [string, string] - guarantees: { - count: number - recurring: boolean - rewards: { type: string; id: string; amount: number | [number, number] }[] - }[] - mileages: { - count: number - rewardOptions: { - type: string - id: string - amount: number - }[] - }[] - drops: { - type: string - id: string - rate: number - amount: number | [number, number] - }[] -} - -export function listSupplyEventsByVersion(version: string) { - const supplyEventsDirectoryPathname = `honkai3rd/versions/${version}/supply-events` - - const supplyEventFileNameList = readdirSync(supplyEventsDirectoryPathname) - const supplyEventList = supplyEventFileNameList - .map((fileName) => { - const filePathname = `${supplyEventsDirectoryPathname}/` + fileName - const data = readJsonFileSync(filePathname) - - return { ...data, id: fileName.replace(/\.json/, '') } as SupplyEventData - }) - .sort((a, b) => { - return -a.id.localeCompare(b.id) - }) - - return supplyEventList -} diff --git a/src/server/data/honkai3rd/supplyEvents.ts b/src/server/data/honkai3rd/supplyEvents.ts new file mode 100644 index 00000000..4f2bcde9 --- /dev/null +++ b/src/server/data/honkai3rd/supplyEvents.ts @@ -0,0 +1,20 @@ +import { SupplyEventData } from '../../../lib/honkai3rd/supplyEvents' +import { readdirSync, readJsonFileSync } from '../fs' + +export function listSupplyEventsByVersion(version: string) { + const supplyEventsDirectoryPathname = `honkai3rd/versions/${version}/supply-events` + + const supplyEventFileNameList = readdirSync(supplyEventsDirectoryPathname) + const supplyEventList = supplyEventFileNameList + .map((fileName) => { + const filePathname = `${supplyEventsDirectoryPathname}/` + fileName + const data = readJsonFileSync(filePathname) + + return { ...data, id: fileName.replace(/\.json/, '') } as SupplyEventData + }) + .sort((a, b) => { + return -a.id.localeCompare(b.id) + }) + + return supplyEventList +} diff --git a/src/server/data/honkai3rd/versions.ts b/src/server/data/honkai3rd/versions.ts index 9ad55b9b..9573b3aa 100644 --- a/src/server/data/honkai3rd/versions.ts +++ b/src/server/data/honkai3rd/versions.ts @@ -1,18 +1,7 @@ import { format } from 'date-fns' -import { readdirSync, readFileSync, readJsonFileSync } from '../../../lib/data' +import { readdirSync, readFileSync, readJsonFileSync } from '../fs' import { compareVersion } from '../../../lib/string' - -export interface VersionData { - version: string - previousVersion?: string - nextVersion?: string - name: string - duration: [string, string] - verified: boolean - newBattlesuits: string[] - newWeapons: string[] - description: string -} +import { VersionData } from '../../../lib/honkai3rd/versions' const versionDirectoryList = readdirSync('honkai3rd/versions') diff --git a/src/server/data/honkai3rd/weapons.ts b/src/server/data/honkai3rd/weapons.ts index ba852004..e96402f2 100644 --- a/src/server/data/honkai3rd/weapons.ts +++ b/src/server/data/honkai3rd/weapons.ts @@ -1,30 +1,6 @@ -import { readdirSync, readJsonFileSync } from '../../../lib/data' +import { readdirSync, readJsonFileSync } from '../fs' import { compareVersion } from '../../../lib/string' - -export interface WeaponSkill { - name: string - description: string -} - -export interface WeaponData { - id: string - name: string - atk: number - crt: number - category: - | 'pistol' - | 'cannon' - | 'katana' - | 'cross' - | 'greatsword' - | 'scythe' - | 'lance' - | 'gauntlet' - | 'bow' - rarity: number - skills: WeaponSkill[] - version?: string -} +import { WeaponData } from '../../../lib/honkai3rd/weapons' const weaponsFileNameList = readdirSync('honkai3rd/weapons') const weaponDataList = weaponsFileNameList