feat: filter owned tanks

This commit is contained in:
TrèsAbhi committed 2025-10-04 21:35:12 -05:00
1 parent 66cf590f1c
commit 9412be2d7c
10 files changed
+435 -354

No files matched your search

@@ -1,30 +1,37 @@
import type { TankDefinition } from '@blitzkit/core';
import { times } from 'lodash-es';
import type { TankFilters } from '../../stores/tankFilters';
import type { TankDefinition } from "@blitzkit/core";
import { times } from "lodash-es";
import type { TankFilters } from "../../stores/tankFilters";
const SHELLS = times(3, (index) => index);
export function filterTank(filters: TankFilters, tank: TankDefinition) {
export async function filterTank(
filters: TankFilters,
tank: TankDefinition,
owned: number[] = []
) {
return (
(filters.ownership === "all" ||
(filters.ownership === "owned" && owned.includes(tank.id)) ||
(filters.ownership === "unowned" && !owned.includes(tank.id))) &&
(filters.tiers.length === 0 || filters.tiers.includes(tank.tier)) &&
(filters.nations.length === 0 || filters.nations.includes(tank.nation)) &&
(filters.classes.length === 0 || filters.classes.includes(tank.class)) &&
(filters.types.length === 0 || filters.types.includes(tank.type)) &&
(filters.testing === 'include' ||
(filters.testing === 'only' && tank.testing) ||
(filters.testing === 'exclude' && !tank.testing)) &&
(filters.testing === "include" ||
(filters.testing === "only" && tank.testing) ||
(filters.testing === "exclude" && !tank.testing)) &&
(filters.gunType.length === 0 ||
(filters.gunType.includes('regular') &&
(filters.gunType.includes("regular") &&
tank.turrets.some((turret) =>
turret.guns.some((gun) => gun.gun_type!.$case === 'regular'),
turret.guns.some((gun) => gun.gun_type!.$case === "regular")
)) ||
(filters.gunType.includes('auto_loader') &&
(filters.gunType.includes("auto_loader") &&
tank.turrets.some((turret) =>
turret.guns.some((gun) => gun.gun_type!.$case === 'auto_loader'),
turret.guns.some((gun) => gun.gun_type!.$case === "auto_loader")
)) ||
(filters.gunType.includes('auto_reloader') &&
(filters.gunType.includes("auto_reloader") &&
tank.turrets.some((turret) =>
turret.guns.some((gun) => gun.gun_type!.$case === 'auto_reloader'),
turret.guns.some((gun) => gun.gun_type!.$case === "auto_reloader")
))) &&
tank.turrets.some((turret) =>
turret.guns.some((gun) =>
@@ -32,9 +39,9 @@ export function filterTank(filters: TankFilters, tank: TankDefinition) {
(index) =>
filters.shells[index] === null ||
gun.shells[index] === undefined ||
gun.shells[index].type === filters.shells[index],
),
),
gun.shells[index].type === filters.shells[index]
)
)
)
);
}
@@ -0,0 +1,26 @@
import { getTankStats, idToRegion, TankDefinition } from "@blitzkit/core";
import { TankFilters } from "../../stores/tankFilters";
import { filterTank } from "./filterTank";
export async function filterTanks(
filters: TankFilters,
tanks: TankDefinition[],
player?: number
) {
const filtered: TankDefinition[] = [];
let owned: number[] | undefined;
if (player) {
const tankStats = await getTankStats(idToRegion(player), player, {
fields: "tank_id",
});
owned = tankStats?.map(({ tank_id }) => tank_id);
}
for (const tank of tanks) {
if (await filterTank(filters, tank, owned)) filtered.push(tank);
}
return filtered;
}