1- import { useContext , useState } from 'react'
1+ import { useContext , useState , useEffect } from 'react'
22import { Input } from '@/components/ui/input'
33import { Button } from '@/components/ui/button'
44import { ExternalLink , LayoutGrid , LayoutList , AlignJustify , ChevronDown } from 'lucide-react'
@@ -23,13 +23,28 @@ import {
2323import { sortOptions , type SortingOption } from '@/lib/sort'
2424import { UserContext } from '@/contexts'
2525
26+ import { useDebounce } from '@/lib/useDebounce'
27+
2628export const App = ( ) => {
2729 const [ user , setUser ] = useContext ( UserContext )
30+ const [ userInput , setUserInput ] = useState ( user )
31+ const debouncedUser = useDebounce ( userInput , 1000 )
2832
2933 const [ page , setPage ] = useState ( 1 )
3034 const [ view , setView ] = useState < View > ( 'covers-text' )
3135 const [ sort , setSort ] = useState < SortingOption > ( sortOptions [ 0 ] )
3236
37+ useEffect ( ( ) => {
38+ const onDebouncedUserChange = ( ) => {
39+ setUser ( userInput )
40+ setPage ( 1 )
41+ }
42+
43+ onDebouncedUserChange ( )
44+
45+ // eslint-disable-next-line
46+ } , [ debouncedUser ] )
47+
3348 return (
3449 < div className = "overflow-hidden pt-14 pb-8 min-[1680px]:pb-14" >
3550 < div className = "container" >
@@ -41,10 +56,9 @@ export const App = () => {
4156 className = "w-auto"
4257 name = "user"
4358 placeholder = "Discogs username"
44- value = { user }
59+ value = { userInput }
4560 onChange = { ( e ) => {
46- setUser ( e . target . value )
47- setPage ( 1 ) // reset page to 1 when user changes
61+ setUserInput ( e . target . value )
4862 } }
4963 />
5064 < Button variant = "outline" size = "icon" aria-label = "Open Discogs profile" asChild >
0 commit comments