mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-29 13:39:50 +01:00
feat: preview cards
This commit is contained in:
1 parent
bae1e944b7
commit
6ace0aa38a
2 files changed
+24
-7
No files matched your search
@@ -415,11 +415,11 @@ export const TankSearch = memo<TankSearchProps>(
|
|||||||
return searchedTanks;
|
return searchedTanks;
|
||||||
}
|
}
|
||||||
}, [tankFilters, tankopediaSort]);
|
}, [tankFilters, tankopediaSort]);
|
||||||
const [loadedRows, setLoadedRows] = useState(DEFAULT_LOADED_CARDS);
|
const [loadedCards, setLoadedCards] = useState(DEFAULT_LOADED_CARDS);
|
||||||
const tanks = tanksFiltered.slice(0, loadedRows);
|
const tanks = tanksFiltered.slice(0, loadedCards);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setLoadedRows(DEFAULT_LOADED_CARDS);
|
setLoadedCards(DEFAULT_LOADED_CARDS);
|
||||||
}, [tankFilters, tankopediaSort]);
|
}, [tankFilters, tankopediaSort]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -497,13 +497,13 @@ export const TankSearch = memo<TankSearchProps>(
|
|||||||
))}
|
))}
|
||||||
|
|
||||||
{times(
|
{times(
|
||||||
Math.min(PREVIEW_COUNT, tanksFiltered.length - loadedRows),
|
Math.min(PREVIEW_COUNT, tanksFiltered.length - loadedCards),
|
||||||
(index) => {
|
(index) => {
|
||||||
return (
|
return (
|
||||||
<SkeletonTankCard
|
<SkeletonTankCard
|
||||||
key={index}
|
key={index}
|
||||||
onIntersection={() => {
|
onIntersection={() => {
|
||||||
setLoadedRows((state) =>
|
setLoadedCards((state) =>
|
||||||
Math.min(state + 2, tanksFiltered.length),
|
Math.min(state + 2, tanksFiltered.length),
|
||||||
);
|
);
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -4,9 +4,11 @@ import {
|
|||||||
metaSortTank,
|
metaSortTank,
|
||||||
} from '@blitzkit/core';
|
} from '@blitzkit/core';
|
||||||
import { useStore } from '@nanostores/react';
|
import { useStore } from '@nanostores/react';
|
||||||
import { useMemo } from 'react';
|
import { times } from 'lodash-es';
|
||||||
|
import { useMemo, useState } from 'react';
|
||||||
import { filterTank } from '../../core/blitzkit/filterTank';
|
import { filterTank } from '../../core/blitzkit/filterTank';
|
||||||
import { $tankFilters } from '../../stores/tankFilters';
|
import { $tankFilters } from '../../stores/tankFilters';
|
||||||
|
import { SkeletonTankCard } from '../TankSearch/components/SkeletonTankCard';
|
||||||
import { TankCardWrapper } from '../TankSearch/components/TankCardWrapper';
|
import { TankCardWrapper } from '../TankSearch/components/TankCardWrapper';
|
||||||
import { TierListTile } from './Tile';
|
import { TierListTile } from './Tile';
|
||||||
|
|
||||||
@@ -14,6 +16,9 @@ const tankDefinitions = await fetchTankDefinitions();
|
|||||||
const gameDefinitions = await fetchGameDefinitions();
|
const gameDefinitions = await fetchGameDefinitions();
|
||||||
const tanks = Object.values(tankDefinitions.tanks);
|
const tanks = Object.values(tankDefinitions.tanks);
|
||||||
|
|
||||||
|
const PREVIEW_COUNT = 32;
|
||||||
|
const DEFAULT_LOADED_CARDS = 75;
|
||||||
|
|
||||||
export function TierListTiles() {
|
export function TierListTiles() {
|
||||||
const filters = useStore($tankFilters);
|
const filters = useStore($tankFilters);
|
||||||
const sorted = useMemo(
|
const sorted = useMemo(
|
||||||
@@ -24,12 +29,24 @@ export function TierListTiles() {
|
|||||||
).reverse(),
|
).reverse(),
|
||||||
[filters],
|
[filters],
|
||||||
);
|
);
|
||||||
|
const [loadedTiles, setLoadedTiles] = useState(DEFAULT_LOADED_CARDS);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TankCardWrapper>
|
<TankCardWrapper>
|
||||||
{sorted.map((tank) => (
|
{sorted.slice(0, loadedTiles).map((tank) => (
|
||||||
<TierListTile key={tank.id} tank={tank} />
|
<TierListTile key={tank.id} tank={tank} />
|
||||||
))}
|
))}
|
||||||
|
|
||||||
|
{times(Math.min(PREVIEW_COUNT, sorted.length - loadedTiles), (index) => {
|
||||||
|
return (
|
||||||
|
<SkeletonTankCard
|
||||||
|
key={index}
|
||||||
|
onIntersection={() => {
|
||||||
|
setLoadedTiles((state) => Math.min(state + 2, sorted.length));
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
})}
|
||||||
</TankCardWrapper>
|
</TankCardWrapper>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user