1- import { useState } from "react" ;
1+ import { memo , useCallback , useEffect , useState } from "react" ;
22import { useSearchParams } from "react-router-dom" ;
33import Footer from "../components/Footer" ;
44import Header from "../components/Header" ;
55import SearchButton from "../components/SearchButton" ;
66import { ArtistAutocompleteQuery , ArtistSearchQuery , OtherContentSearchQuery , useArtistAutocompleteQuery , useArtistSearchQuery , useOtherContentSearchQuery } from "../generated" ;
7- import { generateGQLSearchQueryVars } from "../helpers/queryCacheHelper" ;
7+ import { generateGQLSearchQueryVars , updateSearchQueryCache } from "../helpers/queryCacheHelper" ;
88import { getImageUrl , isEditOrPreviewMode } from "../helpers/urlHelper" ;
99import ReactPaginate from 'react-paginate' ;
10+ import { useMutation , useQueryClient } from "@tanstack/react-query" ;
11+ import { ContentSavedMessage } from "../models/ContentSavedMessage" ;
12+ import authService from "../authService" ;
13+ import { subcribeContentSavedEvent } from "../helpers/contentSavedEvent" ;
14+
15+ let previousSavedMessage : any = null ;
16+ const singleKeyUrl = process . env . REACT_APP_CONTENT_GRAPH_GATEWAY_URL as string
17+ const hmacKeyUrl = process . env . REACT_APP_CG_PROXY_URL as string
1018
1119function SearchPage ( ) {
12- const singleKeyUrl = process . env . REACT_APP_CONTENT_GRAPH_GATEWAY_URL as string
20+ console . log ( "Start" )
21+ const queryClient = useQueryClient ( )
1322 const ARTIST = "Artist"
1423 const OTHERCONTENT = "OtherContent"
15- const options : string [ ] = [ "ASC" , "DESC" ]
16- const itemsPerPageOptions : number [ ] = [ 10 , 15 ]
17- const filterByOption : { value : string ; key : string } [ ] = [
18- { value : "Artists" , key : ARTIST } ,
19- { value : "Other Content" , key : OTHERCONTENT }
20- ]
2124
2225 const [ token , setToken ] = useState ( "" )
2326 const [ itemOffset , setItemOffset ] = useState ( 0 )
@@ -26,6 +29,9 @@ function SearchPage() {
2629 const [ otherItemsPerPage , setOtherItemsPerPage ] = useState ( 10 )
2730 const [ orderBy , setOrderBy ] = useState ( "ASC" )
2831 const [ searchParams ] = useSearchParams ( )
32+ const endOffset = itemOffset + itemsPerPage
33+ const endOffsetOther = otherItemOffset + otherItemsPerPage
34+ const modeEdit = isEditOrPreviewMode ( )
2935 let queryString = searchParams . get ( "q" ) ?? ""
3036 let filterQueryString = searchParams . get ( "f" ) ?? ""
3137 const [ filterBy , setFilterBy ] = useState ( filterQueryString ?? ARTIST )
@@ -35,57 +41,90 @@ function SearchPage() {
3541 let autocompleteData : ArtistAutocompleteQuery | undefined = undefined
3642 let resultNumber : number
3743 let otherResultNumber : number
44+ let variables : any
45+ let options : string [ ] = [ "ASC" , "DESC" ]
46+ let itemsPerPageOptions : number [ ] = [ 10 , 15 ]
47+ let filterByOption : { value : string ; key : string } [ ] = [
48+ { value : "Artists" , key : "Artist" } ,
49+ { value : "Other Content" , key : "OtherContent" }
50+ ]
3851
39- let modeEdit = isEditOrPreviewMode ( )
40- let variables = generateGQLSearchQueryVars ( token , window . location . pathname , queryString , orderBy ) ;
41- let endOffset = itemOffset + itemsPerPage
42- let endOffsetOther = otherItemOffset + otherItemsPerPage
52+ let headers = { }
53+ let url = singleKeyUrl
4354
44- const { data : searchQueryData } = useArtistSearchQuery ( { endpoint : singleKeyUrl } , variables , { staleTime : 2000 , enabled : ! modeEdit || ! ! token } ) ;
55+ const { mutate } = useMutation ( ( obj : any ) => obj , {
56+ onSuccess : ( message : ContentSavedMessage ) => {
57+ if ( previousSavedMessage !== message ) {
58+ previousSavedMessage = message ;
59+ updateSearchQueryCache ( queryClient , artistData , variables , message )
60+ }
61+ }
62+ } )
63+
64+ useEffect ( ( ) => {
65+ authService . getAccessToken ( ) . then ( ( _token ) => {
66+ _token && setToken ( _token )
67+ modeEdit && ! _token && ! artistData && authService . login ( )
68+ } )
69+ } , [ ] )
70+
71+ if ( modeEdit ) {
72+ if ( token ) {
73+ headers = { 'Authorization' : 'Bearer ' + token }
74+ }
75+ url = hmacKeyUrl
76+ subcribeContentSavedEvent ( ( message : any ) => mutate ( message ) )
77+ }
78+
79+ variables = generateGQLSearchQueryVars ( token , window . location . pathname , queryString , orderBy )
80+
81+ const { data : searchQueryData } = useArtistSearchQuery ( { endpoint : url , fetchParams : { headers : headers } } , variables , { staleTime : 2000 , enabled : ! modeEdit || ! ! token } )
4582 artistData = searchQueryData
4683 resultNumber = artistData ?. ArtistDetailsPage ?. items ?. length ?? 0
47- const currentItems = artistData ?. ArtistDetailsPage ?. items ?. slice ( itemOffset , endOffset ) ;
48- const pageCount = Math . ceil ( resultNumber / itemsPerPage ) ;
84+ const currentItems = artistData ?. ArtistDetailsPage ?. items ?. slice ( itemOffset , endOffset )
85+ const pageCount = Math . ceil ( resultNumber / itemsPerPage )
4986
50- const { data : otherContentSearchQueryData } = useOtherContentSearchQuery ( { endpoint : singleKeyUrl } , variables , { staleTime : 2000 , enabled : ! modeEdit || ! ! token } ) ;
87+ const { data : otherContentSearchQueryData } = useOtherContentSearchQuery ( { endpoint : url , fetchParams : { headers : headers } } , variables , { staleTime : 2000 , enabled : ! modeEdit || ! ! token } )
5188 otherData = otherContentSearchQueryData
5289 otherResultNumber = otherData ?. Content ?. items ?. length ?? 0
53- const currentOtherItems = otherData ?. Content ?. items ?. slice ( otherItemOffset , endOffsetOther ) ;
54- const pageOtherCount = Math . ceil ( otherResultNumber / itemsPerPage ) ;
90+ const currentOtherItems = otherData ?. Content ?. items ?. slice ( otherItemOffset , endOffsetOther )
91+ const pageOtherCount = Math . ceil ( otherResultNumber / itemsPerPage )
5592
56- const { data : artistAutocompleteData } = useArtistAutocompleteQuery ( { endpoint : singleKeyUrl } , variables , { staleTime : 2000 , enabled : ! modeEdit || ! ! token } )
93+ const { data : artistAutocompleteData } = useArtistAutocompleteQuery ( { endpoint : url , fetchParams : { headers : headers } } , variables , { staleTime : 2000 , enabled : ! modeEdit || ! ! token } )
5794 autocompleteData = artistAutocompleteData
5895
5996 const handlePageClick = ( event : any ) => {
60- const newOffset = ( event . selected * itemsPerPage ) % resultNumber ;
61- setItemOffset ( newOffset ) ;
62- } ;
97+ const newOffset = ( event . selected * itemsPerPage ) % resultNumber
98+ setItemOffset ( newOffset )
99+ }
63100
64101 const handleItemsChange = ( event : any ) => {
65- setItemsPerPage ( event . target . value ) ;
66- } ;
102+ setItemsPerPage ( event . target . value )
103+ }
67104
68105 const handleOtherPageClick = ( event : any ) => {
69- const newOffset = ( event . selected * itemsPerPage ) % otherResultNumber ;
70- setOtherItemOffset ( newOffset ) ;
71- } ;
106+ const newOffset = ( event . selected * itemsPerPage ) % otherResultNumber
107+ setOtherItemOffset ( newOffset )
108+ }
72109
73110 const handleOtherItemsChange = ( event : any ) => {
74- setOtherItemsPerPage ( event . target . value ) ;
75- } ;
76-
77- const handleFilterByChange = ( event : any ) => {
78- setFilterBy ( event . target . value )
79- } ;
111+ setOtherItemsPerPage ( event . target . value )
112+ }
80113
81114 const handleChange = ( event : any ) => {
82- setOrderBy ( event . target . value ) ;
115+ setOrderBy ( event . target . value )
83116 }
84117
85118 const handleFacetClick = ( event : any ) => {
86119 window . location . href = `${ window . location . origin } /search?q=${ event . target . innerText } &f=${ filterBy } `
87120 }
88121
122+ const handleFilterByChange = ( event : any ) => {
123+ setFilterBy ( event . target . value )
124+ //setOtherItemsPerPage(event.target.value)
125+ }
126+
127+
89128 return (
90129 < div >
91130 < Header />
@@ -136,7 +175,7 @@ function SearchPage() {
136175 artistData ?. ArtistDetailsPage ?. facets ?. StageName ?. map ( ( artist , idx ) => {
137176 return (
138177 < div key = { idx } className = "facet-item" >
139- < a key = { artist ?. name } onClick = { ( event ) => handleFacetClick ( event ) } >
178+ < a onClick = { ( event ) => handleFacetClick ( event ) } >
140179 < span > { artist ?. name } </ span >
141180 </ a >
142181 < b > { artist ?. count } </ b >
@@ -151,7 +190,7 @@ function SearchPage() {
151190 otherData ?. Content ?. facets ?. Name ?. map ( ( content , idx ) => {
152191 return (
153192 < div key = { idx } className = "facet-item" >
154- < a key = { content ?. name } onClick = { ( event ) => handleFacetClick ( event ) } >
193+ < a onClick = { ( event ) => handleFacetClick ( event ) } >
155194 < span > { content ?. name } </ span >
156195 </ a >
157196 < b > { content ?. count } </ b >
@@ -208,21 +247,21 @@ function SearchPage() {
208247 < h6 > People also search for: </ h6 >
209248 < br > </ br >
210249 {
211- autocompleteData ?. ArtistDetailsPage ?. autocomplete ?. ArtistName ?. map ( ( name ) => {
250+ autocompleteData ?. ArtistDetailsPage ?. autocomplete ?. ArtistName ?. map ( ( name , idx ) => {
212251 return (
213- < div >
214- < a key = { name } onClick = { ( event ) => handleFacetClick ( event ) } >
252+ < div key = { idx } >
253+ < a onClick = { ( event ) => handleFacetClick ( event ) } >
215254 < i > { name } </ i >
216255 </ a >
217256 </ div >
218257 )
219258 } )
220259 }
221260 {
222- autocompleteData ?. ArtistDetailsPage ?. autocomplete ?. StageName ?. map ( ( name ) => {
261+ autocompleteData ?. ArtistDetailsPage ?. autocomplete ?. StageName ?. map ( ( name , idx ) => {
223262 return (
224- < div >
225- < a key = { name } onClick = { ( event ) => handleFacetClick ( event ) } >
263+ < div key = { idx } >
264+ < a onClick = { ( event ) => handleFacetClick ( event ) } >
226265 < i > { name } </ i >
227266 </ a >
228267 </ div >
@@ -326,4 +365,4 @@ function SearchPage() {
326365 ) ;
327366}
328367
329- export default SearchPage ;
368+ export default memo ( SearchPage ) ;
0 commit comments