@@ -2,6 +2,7 @@ import Head from "next/head";
22
33import achievements from "@/data/achievements.json" ;
44import museum from "@/data/museum.json" ;
5+ import objects from "@/data/objects.json" ;
56
67import { MuseumItem } from "@/types/items" ;
78import { useState , useMemo } from "react" ;
@@ -25,6 +26,7 @@ import { useMultiSelect } from "@/contexts/multi-select-context";
2526import { BulkActionDialog } from "@/components/dialogs/bulk-action-dialog" ;
2627import { Button } from "@/components/ui/button" ;
2728import { X } from "lucide-react" ;
29+ import { Command , CommandInput } from "@/components/ui/command" ;
2830
2931const 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