@@ -2,6 +2,7 @@ import { useState, useRef } from "react";
2
2
import { SearchArtistByName } from "../../axios/spotifyAxios.js" ;
3
3
import LoaderComponent from "../Common/LoaderComponent.jsx" ;
4
4
import ReviewCardFindArtistComponent from "./reviewCardFindArtistComponent.jsx" ;
5
+ import ReviewArtistDetailed from "./reviewArtistDetailed.jsx" ;
5
6
6
7
const ReviewFindArtistComponent = ( ) => {
7
8
const [ search , setSearch ] = useState ( "" ) ;
@@ -10,12 +11,14 @@ const ReviewFindArtistComponent = () => {
10
11
const [ searchResult , setSearchResult ] = useState ( [ ] ) ;
11
12
const [ isLoading , setIsLoading ] = useState ( false ) ;
12
13
const [ isResultNull , setIsResultNull ] = useState ( false ) ;
14
+ const [ selectedArtist , setSelectedArtist ] = useState ( null ) ; // Track the selected artist
13
15
const elementRef = useRef ( null ) ; // Reference for the element to scroll to
14
16
15
17
const getSubmitData = async ( limit , offset ) => {
16
18
setIsLoading ( true ) ;
17
19
try {
18
20
const res = await SearchArtistByName ( search , limit , offset ) ;
21
+ console . log ( res )
19
22
if ( res ?. length === 0 ) {
20
23
setIsResultNull ( true ) ;
21
24
} else {
@@ -55,8 +58,17 @@ const ReviewFindArtistComponent = () => {
55
58
}
56
59
} ;
57
60
61
+ const handleCardClick = ( artist ) => {
62
+ setSelectedArtist ( artist ) ; // Set the selected artist
63
+ console . log ( artist ) ;
64
+ } ;
65
+
66
+ const closeDetailedView = ( ) => {
67
+ setSelectedArtist ( null ) ; // Close the detailed view
68
+ } ;
69
+
58
70
return (
59
- < div className = "w-full md:w-4/5 flex flex-col items-center" >
71
+ < div className = "w-full md:w-4/5 flex flex-col items-center relative " >
60
72
{ /* Search Bar */ }
61
73
< div className = "w-[95vw] md:w-full h-10 flex items-center bg-gray-300 rounded-2xl pl-3 md:m-5" >
62
74
< span className = "w-auto text-xs md:text-sm text-gray-500 text-nowrap" > Search for an artist:</ span >
@@ -82,34 +94,46 @@ const ReviewFindArtistComponent = () => {
82
94
< div className = "text-gray-500 pl-2 md:pl-0 pt-4 md:pt-0 pb-4" >
83
95
Results of your search:
84
96
</ div >
85
- < div className = "w-full flex flex-wrap justify-start md:gap-1 pl-2 md:pl-0" >
97
+ < div className = "w-full flex flex-wrap justify-start md:justify-around md: gap-1 pl-2 md:pl-0" >
86
98
{ searchResult
87
99
. filter ( ( item ) => item . images . length > 0 )
88
100
. map ( ( item , index ) => (
89
101
< div
90
102
key = { item . id }
91
- className = "w-1/2 md:w-1/6"
103
+ className = "w-1/2 md:w-1/6 cursor-pointer "
92
104
ref = { index === 5 ? elementRef : null } // Add ref to the 6th element
105
+ onClick = { ( ) => handleCardClick ( item ) } // Handle card click
93
106
>
94
107
< ReviewCardFindArtistComponent item = { item } />
95
108
</ div >
96
109
) ) }
97
110
</ div >
98
111
{ searchResult . length < 15 && (
99
- < div className = "w-full flex items-center justify-center mt-4 mb-0 md:mb-6" >
100
- < div className = "w-full flex items-center gap-4 px-2" >
101
- < div className = "flex-1 border-t border-gray-400" > </ div >
102
- < button onClick = { loadMore } className = "px-4 py-2 bg-gray-400 text-white rounded" >
103
- Load More
104
- </ button >
105
- < div className = "flex-1 border-t border-gray-400" > </ div >
106
- </ div >
107
- </ div >
108
- ) }
112
+ < div className = "w-full flex items-center justify-center m-4" >
113
+ < button onClick = { loadMore } className = "px-4 py-2 bg-gray-400 text-white rounded" >
114
+ Load More
115
+ </ button >
109
116
</ div >
110
- ) : isResultNull ? (
117
+ ) }
118
+ </ div >
119
+ ) : isResultNull ? (
111
120
< p className = "text-center mt-4 text-gray-500" > No results found.</ p >
112
121
) : null }
122
+
123
+ { /* Overlay Component */ }
124
+ { selectedArtist && (
125
+ < div
126
+ className = "fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50"
127
+ onClick = { closeDetailedView } // Close when clicking outside
128
+ >
129
+ < div
130
+ className = "bg-white rounded-lg shadow-lg w-4/5 md:w-2/5 h-4/5 scroll-auto overflow-y-auto"
131
+ onClick = { ( e ) => e . stopPropagation ( ) } // Prevent closing when clicking inside
132
+ >
133
+ < ReviewArtistDetailed item = { selectedArtist } onClose = { closeDetailedView } />
134
+ </ div >
135
+ </ div >
136
+ ) }
113
137
</ div >
114
138
) ;
115
139
} ;
0 commit comments