fix: tier list filters

This commit is contained in:
TrèsAbhi committed 2025-10-11 21:49:20 -05:00
1 parent a4e48a2feb
commit 9914371dd8
2 files changed
+17 -14

No files matched your search

+6 -6
View File
@@ -1,5 +1,5 @@
import { TANK_CLASSES } from '../blitz/constants'; import { TANK_CLASSES } from "../blitz/constants";
import { GameDefinitions, TankDefinition, TankType } from '../protos'; import { GameDefinitions, TankDefinition, TankType } from "../protos";
const treeTypeOrder = [ const treeTypeOrder = [
TankType.RESEARCHABLE, TankType.RESEARCHABLE,
@@ -9,20 +9,20 @@ const treeTypeOrder = [
export function metaSortTank( export function metaSortTank(
tanks: TankDefinition[], tanks: TankDefinition[],
gameDefinitions: GameDefinitions, gameDefinitions: GameDefinitions
) { ) {
return tanks return tanks
.sort((a, b) => b.tier - a.tier) .sort((a, b) => b.tier - a.tier)
.sort( .sort(
(a, b) => treeTypeOrder.indexOf(b.type) - treeTypeOrder.indexOf(a.type), (a, b) => treeTypeOrder.indexOf(b.type) - treeTypeOrder.indexOf(a.type)
) )
.sort( .sort(
(a, b) => TANK_CLASSES.indexOf(b.class) - TANK_CLASSES.indexOf(a.class), (a, b) => TANK_CLASSES.indexOf(b.class) - TANK_CLASSES.indexOf(a.class)
) )
.sort( .sort(
(a, b) => (a, b) =>
gameDefinitions.nations.indexOf(b.nation) - gameDefinitions.nations.indexOf(b.nation) -
gameDefinitions.nations.indexOf(a.nation), gameDefinitions.nations.indexOf(a.nation)
) )
.sort((a, b) => a.tier - b.tier); .sort((a, b) => a.tier - b.tier);
} }
@@ -1,9 +1,10 @@
import { metaSortTank } from "@blitzkit/core"; import { metaSortTank } from "@blitzkit/core";
import { times } from "lodash-es"; import { times } from "lodash-es";
import { useMemo, useState } from "react"; import { useMemo, useState } from "react";
import usePromise from "react-promise-suspense";
import { awaitableGameDefinitions } from "../../core/awaitables/gameDefinitions"; import { awaitableGameDefinitions } from "../../core/awaitables/gameDefinitions";
import { awaitableTankDefinitions } from "../../core/awaitables/tankDefinitions"; import { awaitableTankDefinitions } from "../../core/awaitables/tankDefinitions";
import { filterTank } from "../../core/blitzkit/filterTank"; import { filterTanks } from "../../core/blitzkit/filterTanks";
import { TankFilters } from "../../stores/tankFilters"; import { TankFilters } from "../../stores/tankFilters";
import { TierList } from "../../stores/tierList"; import { TierList } from "../../stores/tierList";
import { SkeletonTankCard } from "../TankSearch/components/SkeletonTankCard"; import { SkeletonTankCard } from "../TankSearch/components/SkeletonTankCard";
@@ -23,14 +24,16 @@ const DEFAULT_LOADED_CARDS = 75;
export function TierListTiles() { export function TierListTiles() {
const filters = TankFilters.use(); const filters = TankFilters.use();
const placedTanks = TierList.use((state) => state.placedTanks); const placedTanks = TierList.use((state) => state.placedTanks);
const sorted = useMemo( const filteredTanks = usePromise(
() => () =>
metaSortTank( filterTanks(filters, tanks).then((tanks) =>
tanks.filter( tanks.filter(({ id }) => !placedTanks.has(id))
(tank) => filterTank(filters, tank) && !placedTanks.has(tank.id) ),
), // react-promise-suspense has awful type annotations
gameDefinitions [filters, placedTanks] as any
).reverse(), );
const sorted = useMemo(
() => metaSortTank(filteredTanks, gameDefinitions).reverse(),
[filters, placedTanks] [filters, placedTanks]
); );
const [loadedTiles, setLoadedTiles] = useState(DEFAULT_LOADED_CARDS); const [loadedTiles, setLoadedTiles] = useState(DEFAULT_LOADED_CARDS);