Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 1 addition & 7 deletions messages/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -103,13 +103,7 @@
},
"collection": {
"title": "Collection",
"subtitle": "Browse, filter, and search your entire collection.",
"browsePlayers": "Players in your collection",
"playersInCollection": "{count} players in your collection",
"browseVariations": "Variations in your collection",
"variationsBrowseHint": "Filter by brand and set, then search or pick a variation.",
"variationsInCollection": "{count} variation(s) for this selection",
"variationsNoneFound": "No variations found for this brand and set."
"subtitle": "Browse, filter, and search your entire collection."
},
"players": {
"title": "Players",
Expand Down
8 changes: 1 addition & 7 deletions messages/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -103,13 +103,7 @@
},
"collection": {
"title": "Collection",
"subtitle": "Parcourez, filtrez et recherchez toute votre collection.",
"browsePlayers": "Joueurs de la collection",
"playersInCollection": "{count} joueurs dans la collection",
"browseVariations": "Variations de la collection",
"variationsBrowseHint": "Filtrez par marque et set, puis recherchez ou sélectionnez une variation.",
"variationsInCollection": "{count} variation(s) pour cette sélection",
"variationsNoneFound": "Aucune variation trouvée pour cette marque et ce set."
"subtitle": "Parcourez, filtrez et recherchez toute votre collection."
},
"players": {
"title": "Joueurs",
Expand Down
110 changes: 0 additions & 110 deletions src/components/card-table.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@ import { Card } from "@/lib/types";
import { uniqueSorted } from "@/lib/string-list";
import { CardBadges } from "@/components/card-badges";
import { CardDetail } from "@/components/card-detail";
import { CatalogCombobox } from "@/components/catalog-combobox";
import { ColumnFilterCombobox } from "@/components/column-filter-combobox";
import { FilterableListBrowser } from "@/components/filterable-list-browser";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
import {
Expand Down Expand Up @@ -70,12 +68,6 @@ export function CardTable({ cards, initialFilters, filters }: CardTableProps) {
const [variationFilter, setVariationFilter] = useState(
initialFilters?.variation ?? ""
);
const [variationBrandBrowse, setVariationBrandBrowse] = useState(
initialFilters?.brand ?? ""
);
const [variationSetBrowse, setVariationSetBrowse] = useState(
initialFilters?.set ?? ""
);
const [rookieOnly, setRookieOnly] = useState(initialFilters?.tag === "rookie");
const [autoOnly, setAutoOnly] = useState(initialFilters?.tag === "autograph");
const [memoOnly, setMemoOnly] = useState(initialFilters?.tag === "memorabilia");
Expand Down Expand Up @@ -249,33 +241,6 @@ export function CardTable({ cards, initialFilters, filters }: CardTableProps) {
);
}, [brandFilter, cards]);

const setsForVariationBrowse = useMemo(() => {
const brandQuery = variationBrandBrowse.trim().toLowerCase();
if (!brandQuery) return [];
return uniqueSorted(
cards
.filter((card) => card.brand.toLowerCase().includes(brandQuery))
.map((card) => card.set)
);
}, [cards, variationBrandBrowse]);

const variationsForBrowse = useMemo(() => {
const brandQuery = variationBrandBrowse.trim().toLowerCase();
const setQuery = variationSetBrowse.trim().toLowerCase();
return uniqueSorted(
cards
.filter((card) => {
const brandValue = card.brand.toLowerCase();
const setValue = card.set.toLowerCase();
return (
(!brandQuery || brandValue.includes(brandQuery)) &&
(!setQuery || setValue.includes(setQuery))
);
})
.map((card) => card.variation)
);
}, [cards, variationBrandBrowse, variationSetBrowse]);

const variationsForFilters = useMemo(() => {
const brandQuery = brandFilter.trim().toLowerCase();
const setQuery = setFilter.trim().toLowerCase();
Expand Down Expand Up @@ -319,21 +284,6 @@ export function CardTable({ cards, initialFilters, filters }: CardTableProps) {
}
}, [variationFilter, variationsForFilters]);

useEffect(() => {
if (!variationBrandBrowse) {
setVariationSetBrowse("");
return;
}
if (
variationSetBrowse &&
!setsForVariationBrowse.some((setName) =>
setName.toLowerCase().includes(variationSetBrowse.toLowerCase())
)
) {
setVariationSetBrowse("");
}
}, [setsForVariationBrowse, variationBrandBrowse, variationSetBrowse]);

const activeFilters = useMemo(
() =>
[
Expand Down Expand Up @@ -369,20 +319,6 @@ export function CardTable({ cards, initialFilters, filters }: CardTableProps) {
]
);

function selectPlayer(name: string): void {
setPlayerFilter(name);
}

function selectVariation(name: string): void {
setVariationFilter(name);
if (variationBrandBrowse.trim()) {
setBrandFilter(variationBrandBrowse);
}
if (variationSetBrowse.trim()) {
setSetFilter(variationSetBrowse);
}
}

return (
<div className="space-y-4">
{/* Search and filters */}
Expand All @@ -397,52 +333,6 @@ export function CardTable({ cards, initialFilters, filters }: CardTableProps) {
/>
</div>

<div className="grid gap-4 lg:grid-cols-2">
<FilterableListBrowser
title={t("collection.browsePlayers")}
items={uniquePlayers}
selectedItem={playerFilter || undefined}
onSelect={selectPlayer}
filterPlaceholder={t("admin.players.filter")}
countLabel={t("collection.playersInCollection", {
count: uniquePlayers.length,
})}
filteredCountLabel={(count) => t("admin.players.shown", { count })}
emptyLabel={t("admin.players.noneFound")}
/>

<div className="space-y-3 rounded-lg border border-border p-4">
<h3 className="text-sm font-medium">{t("collection.browseVariations")}</h3>
<p className="text-xs text-muted-foreground">
{t("collection.variationsBrowseHint")}
</p>
<CatalogCombobox
value={variationBrandBrowse}
onChange={setVariationBrandBrowse}
placeholder={t("admin.catalog.variationBrandPlaceholder")}
suggestions={uniqueBrands}
/>
<CatalogCombobox
value={variationSetBrowse}
onChange={setVariationSetBrowse}
placeholder={t("admin.catalog.variationSetPlaceholder")}
suggestions={setsForVariationBrowse}
disabled={!variationBrandBrowse.trim()}
/>
<FilterableListBrowser
items={variationsForBrowse}
selectedItem={variationFilter || undefined}
onSelect={selectVariation}
filterPlaceholder={t("admin.cards.filterVariation")}
countLabel={t("collection.variationsInCollection", {
count: variationsForBrowse.length,
})}
emptyLabel={t("collection.variationsNoneFound")}
className="border-0 p-0"
/>
</div>
</div>

<div className="grid gap-2 sm:grid-cols-2 lg:flex lg:flex-wrap">
<ColumnFilterCombobox
value={playerFilter}
Expand Down