1- import { JSX } from "react" ;
2- import { Link , NavLink , NavigateFunction , useNavigate } from "react-router" ;
1+ import { ChangeEvent , JSX , useEffect , useState } from "react" ;
2+ import { Link , NavLink , NavigateFunction , useNavigate , useLocation , Location , NavigateOptions } from "react-router" ;
33
44import useAppHistory from "../AppHistory" ;
55import CustomSVG from "./CustomSVG" ;
66
77function Header ( { menuOpen, menuOpenSetter} ) : JSX . Element {
88 const appHistory : object = useAppHistory ( ) ;
99
10+ const location : Location = useLocation ( ) ;
1011 const navigate : NavigateFunction = useNavigate ( ) ;
1112
13+ const [ query , setQuery ] = useState ( '' ) ;
14+ useEffect ( ( ) : void => {
15+ setQuery ( new URLSearchParams ( location . search ) . get ( 'q' ) || '' ) ;
16+ } , [ location . search ] ) ;
17+
1218 function handleSubmitSearch ( event ) : boolean {
1319 event . preventDefault ( ) ;
1420 const input : HTMLInputElement = event . target . elements [ 0 ] ;
15- navigate ( `/search?q=${ encodeURIComponent ( input . value ) } ` , { } ) ;
21+ const options : NavigateOptions = {
22+ state : {
23+ q : input . value ,
24+ } ,
25+ } ;
26+ navigate ( `/search?q=${ encodeURIComponent ( input . value ) } ` , options ) ;
1627 return false ;
1728 }
1829
@@ -84,7 +95,7 @@ function Header({menuOpen,menuOpenSetter}): JSX.Element {
8495 < div style = { { display : 'inline-block' , height : '40px' } } >
8596 < form onSubmit = { handleSubmitSearch } style = { { height :'100%' , marginRight :'10px' , position :'relative' } } >
8697 < CustomSVG icon = "search" style = { { fill :'transparent' , height :'100%' , left :'10px' , position :'absolute' , stroke :'white' , strokeWidth :'2px' , verticalAlign :'middle' , width :'16px' } } viewBox = "0 0 24 24" />
87- < input placeholder = "Search" style = { {
98+ < input onChange = { ( e : ChangeEvent < HTMLInputElement > ) => setQuery ( e . target . value ) } placeholder = "Search" style = { {
8899 backgroundColor : 'rgba(45, 45, 45, 0.7)' ,
89100 border : 'none' ,
90101 borderRadius : '6px' ,
@@ -95,7 +106,7 @@ function Header({menuOpen,menuOpenSetter}): JSX.Element {
95106 paddingRight : '10px' ,
96107 verticalAlign :'middle' ,
97108 width :'480px' ,
98- } } />
109+ } } value = { query } />
99110 </ form >
100111 </ div >
101112 < NavLink className = "hoverHeaderButtonFill" to = { null } style = { {
@@ -154,7 +165,7 @@ function Header({menuOpen,menuOpenSetter}): JSX.Element {
154165 verticalAlign : 'middle' ,
155166 width : '40px'
156167 } } >
157- < CustomSVG icon = "account" viewBox = "0 0 24 24" style = { { height : '18px' , padding : '11px 0' } } />
168+ < CustomSVG icon = "account" viewBox = "0 0 24 24" style = { { fill : 'transparent' , height : '18px' , padding : '11px 0' , strokeWidth : '2px '} } />
158169 </ Link >
159170 </ div >
160171 </ div >
0 commit comments