Skip to content

Commit 0664d58

Browse files
committed
feat: search on museum page
1 parent 97c6dae commit 0664d58

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

src/pages/museum.tsx

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import Head from "next/head";
22

33
import achievements from "@/data/achievements.json";
44
import museum from "@/data/museum.json";
5+
import objects from "@/data/objects.json";
56

67
import { MuseumItem } from "@/types/items";
78
import { useState, useMemo } from "react";
@@ -25,6 +26,7 @@ import { useMultiSelect } from "@/contexts/multi-select-context";
2526
import { BulkActionDialog } from "@/components/dialogs/bulk-action-dialog";
2627
import { Button } from "@/components/ui/button";
2728
import { X } from "lucide-react";
29+
import { Command, CommandInput } from "@/components/ui/command";
2830

2931
const reqs: Record<string, number> = {
3032
"A Complete Collection": Object.values(museum).flatMap((item) =>
@@ -68,6 +70,9 @@ export default function Museum() {
6870
const [bulkActionOpen, setBulkActionOpen] = useState(false);
6971
const [bulkType, setBulkType] = useState<"artifact" | "mineral">("artifact");
7072

73+
const [artifactSearch, setArtifactSearch] = useState("");
74+
const [mineralSearch, setMineralSearch] = useState("");
75+
7176
const getAchievementProgress = (name: string) => {
7277
let completed = false;
7378
let additionalDescription = "";
@@ -273,8 +278,26 @@ export default function Museum() {
273278
)}
274279
</div>
275280
</div>
281+
{/* Search Bar Row */}
282+
<div className="mt-2 w-full">
283+
<Command className="w-full border border-b-0 dark:border-neutral-800">
284+
<CommandInput
285+
onValueChange={(v) => setArtifactSearch(v)}
286+
placeholder="Search Artifacts"
287+
/>
288+
</Command>
289+
</div>
276290
<div className="grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-4">
277291
{Object.values(museum.artifacts)
292+
.filter((f) => {
293+
if (!artifactSearch) return true;
294+
const name =
295+
objects[f.itemID as keyof typeof objects]?.name ||
296+
"";
297+
return name
298+
.toLowerCase()
299+
.includes(artifactSearch.toLowerCase());
300+
})
278301
.filter((f) => {
279302
if (_artifactFilter === "0") {
280303
return !museumArtifactCollected.has(f.itemID); // incompleted
@@ -372,8 +395,25 @@ export default function Museum() {
372395
)}
373396
</div>
374397
</div>
398+
{/* Search Bar Row */}
399+
<div className="mt-2 w-full">
400+
<Command className="w-full border border-b-0 dark:border-neutral-800">
401+
<CommandInput
402+
onValueChange={(v) => setMineralSearch(v)}
403+
placeholder="Search Minerals"
404+
/>
405+
</Command>
406+
</div>
375407
<div className="grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-4">
376408
{Object.values(museum.minerals)
409+
.filter((f) => {
410+
if (!mineralSearch) return true;
411+
const name =
412+
objects[f.itemID as keyof typeof objects]?.name || "";
413+
return name
414+
.toLowerCase()
415+
.includes(mineralSearch.toLowerCase());
416+
})
377417
.filter((f) => {
378418
if (_mineralFilter === "0") {
379419
return !museumMineralCollected.has(f.itemID); // incompleted

0 commit comments

Comments
 (0)