Implement filter by valkyries to battlesuit list
This commit is contained in:
@@ -11,7 +11,10 @@ import {
|
|||||||
listBattlesuits,
|
listBattlesuits,
|
||||||
} from '../../../data/honkai3rd/battlesuits'
|
} from '../../../data/honkai3rd/battlesuits'
|
||||||
|
|
||||||
type BattlesuitListItemData = Pick<BattlesuitData, 'id' | 'name' | 'strengths'>
|
type BattlesuitListItemData = Pick<
|
||||||
|
BattlesuitData,
|
||||||
|
'id' | 'name' | 'strengths' | 'type' | 'valkyrie'
|
||||||
|
>
|
||||||
|
|
||||||
interface BattlesuitListPageProps {
|
interface BattlesuitListPageProps {
|
||||||
battlesuits: BattlesuitListItemData[]
|
battlesuits: BattlesuitListItemData[]
|
||||||
@@ -39,6 +42,32 @@ const featureFilterOptions = [
|
|||||||
{ value: 'aerial', label: 'Aerial' },
|
{ value: 'aerial', label: 'Aerial' },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
const valkyrieFilterOptions = [
|
||||||
|
{ value: 'all', label: 'All' },
|
||||||
|
{ value: 'mecha', label: 'Mecha' },
|
||||||
|
{ value: 'biologic', label: 'Biologic' },
|
||||||
|
{ value: 'psychic', label: 'Psychic' },
|
||||||
|
{ value: 'quantum', label: 'Quantum' },
|
||||||
|
{ value: 'imaginary', label: 'Imaginary' },
|
||||||
|
{ value: 'kiana', label: 'Kiana' },
|
||||||
|
{ value: 'mei', label: 'Mei' },
|
||||||
|
{ value: 'bronya', label: 'Bronya' },
|
||||||
|
{ value: 'himeko', label: 'Himeko' },
|
||||||
|
{ value: 'theresa', label: 'Theresa' },
|
||||||
|
{ value: 'fu hua', label: 'Fu Hua' },
|
||||||
|
{ value: 'rita', label: 'Rita' },
|
||||||
|
{ value: 'sakura', label: 'Sakura' },
|
||||||
|
{ value: 'kallen', label: 'Kallen' },
|
||||||
|
{ value: 'olenyevas', label: 'Olenyevas' },
|
||||||
|
{ value: 'seele', label: 'Seele' },
|
||||||
|
{ value: 'durandal', label: 'Durandal' },
|
||||||
|
{ value: 'fischl', label: 'Fischl' },
|
||||||
|
{ value: 'elysia', label: 'Elysia' },
|
||||||
|
{ value: 'mobius', label: 'Mobius' },
|
||||||
|
{ value: 'raven', label: 'Raven' },
|
||||||
|
{ value: 'carole', label: 'Carole' },
|
||||||
|
]
|
||||||
|
|
||||||
const BattlesuitListPage = ({ battlesuits }: BattlesuitListPageProps) => {
|
const BattlesuitListPage = ({ battlesuits }: BattlesuitListPageProps) => {
|
||||||
const [filter, setFilter] = useState('all')
|
const [filter, setFilter] = useState('all')
|
||||||
|
|
||||||
@@ -64,6 +93,30 @@ const BattlesuitListPage = ({ battlesuits }: BattlesuitListPageProps) => {
|
|||||||
case 'burst':
|
case 'burst':
|
||||||
case 'aerial':
|
case 'aerial':
|
||||||
return !battlesuit.strengths.some((strength) => strength === filter)
|
return !battlesuit.strengths.some((strength) => strength === filter)
|
||||||
|
case 'mecha':
|
||||||
|
case 'biologic':
|
||||||
|
case 'psychic':
|
||||||
|
case 'quantum':
|
||||||
|
case 'imaginary':
|
||||||
|
return battlesuit.type !== filter
|
||||||
|
case 'kiana':
|
||||||
|
case 'mei':
|
||||||
|
case 'bronya':
|
||||||
|
case 'himeko':
|
||||||
|
case 'theresa':
|
||||||
|
case 'fu hua':
|
||||||
|
case 'rita':
|
||||||
|
case 'sakura':
|
||||||
|
case 'kallen':
|
||||||
|
case 'olenyevas':
|
||||||
|
case 'seele':
|
||||||
|
case 'durandal':
|
||||||
|
case 'fischl':
|
||||||
|
case 'elysia':
|
||||||
|
case 'mobius':
|
||||||
|
case 'raven':
|
||||||
|
case 'carole':
|
||||||
|
return battlesuit.valkyrie !== filter
|
||||||
default:
|
default:
|
||||||
case 'all':
|
case 'all':
|
||||||
return false
|
return false
|
||||||
@@ -168,41 +221,16 @@ const BattlesuitListPage = ({ battlesuits }: BattlesuitListPageProps) => {
|
|||||||
|
|
||||||
<Heading as='h3'>Filter by Valkyries</Heading>
|
<Heading as='h3'>Filter by Valkyries</Heading>
|
||||||
<Flex mb={2} sx={{ flexWrap: 'wrap' }}>
|
<Flex mb={2} sx={{ flexWrap: 'wrap' }}>
|
||||||
<FilterButton setFilter={setFilter} value='all' label='ALL' />
|
{valkyrieFilterOptions.map(({ value, label }) => {
|
||||||
<FilterButton setFilter={setFilter} value='mecha' label='MECHA' />
|
return (
|
||||||
<FilterButton setFilter={setFilter} value='bio' label='BIO' />
|
<FilterButton
|
||||||
<FilterButton setFilter={setFilter} value='psy' label='PSY' />
|
active={value === filter}
|
||||||
<FilterButton setFilter={setFilter} value='qua' label='QUA' />
|
setFilter={setFilter}
|
||||||
<FilterButton setFilter={setFilter} value='img' label='IMG' />
|
value={value}
|
||||||
<FilterButton setFilter={setFilter} value='kiana' label='Kiana' />
|
label={label}
|
||||||
<FilterButton setFilter={setFilter} value='mei' label='Mei' />
|
/>
|
||||||
<FilterButton setFilter={setFilter} value='bronya' label='Bronya' />
|
)
|
||||||
<FilterButton setFilter={setFilter} value='himeko' label='Himeko' />
|
})}
|
||||||
<FilterButton
|
|
||||||
setFilter={setFilter}
|
|
||||||
value='theresa'
|
|
||||||
label='Theresa'
|
|
||||||
/>
|
|
||||||
<FilterButton setFilter={setFilter} value='fu hua' label='Fu Hua' />
|
|
||||||
<FilterButton setFilter={setFilter} value='rita' label='Rita' />
|
|
||||||
<FilterButton setFilter={setFilter} value='sakura' label='Sakura' />
|
|
||||||
<FilterButton setFilter={setFilter} value='kallen' label='Kallen' />
|
|
||||||
<FilterButton
|
|
||||||
setFilter={setFilter}
|
|
||||||
value='olenyevas'
|
|
||||||
label='Olenyevas'
|
|
||||||
/>
|
|
||||||
<FilterButton setFilter={setFilter} value='seele' label='Seele' />
|
|
||||||
<FilterButton
|
|
||||||
setFilter={setFilter}
|
|
||||||
value='durandal'
|
|
||||||
label='Durandal'
|
|
||||||
/>
|
|
||||||
<FilterButton setFilter={setFilter} value='fischl' label='Fischl' />
|
|
||||||
<FilterButton setFilter={setFilter} value='elysia' label='Elysia' />
|
|
||||||
<FilterButton setFilter={setFilter} value='mobius' label='Mobius' />
|
|
||||||
<FilterButton setFilter={setFilter} value='raven' label='Raven' />
|
|
||||||
<FilterButton setFilter={setFilter} value='carole' label='Carole' />
|
|
||||||
</Flex>
|
</Flex>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
@@ -225,7 +253,7 @@ export async function getStaticProps() {
|
|||||||
return {
|
return {
|
||||||
props: {
|
props: {
|
||||||
battlesuits: listBattlesuits().map((battlesuit) =>
|
battlesuits: listBattlesuits().map((battlesuit) =>
|
||||||
pick(['id', 'name', 'strengths'], battlesuit)
|
pick(['id', 'name', 'strengths', 'type', 'valkyrie'], battlesuit)
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user