@@ -11,8 +11,18 @@ export default function DynamicSpreadsheet() {
1111 descrizione : string ;
1212 url_video : string ;
1313 nome_immagine : string ;
14- metodo : string ;
15- target : string ;
14+ metodi : string [ ] ;
15+ targets : string [ ] ;
16+ } ;
17+
18+ type TmpRow = {
19+ data : string ;
20+ nome : string ;
21+ descrizione : string ;
22+ url_video : string ;
23+ nome_immagine : string ;
24+ metodi : string ;
25+ targets : string ;
1626 } ;
1727
1828 const spreadshettPath = import . meta. env . PUBLIC_SPREADSHEET_URL ;
@@ -28,32 +38,33 @@ export default function DynamicSpreadsheet() {
2838 } ) ;
2939
3040 const [ metodi , setMetodi ] = useState ( [
31- { name : 'CodyRoby' , selected : false , color : 'yellow ' } ,
32- { name : 'CodyColor' , selected : false , color : 'green ' } ,
33- { name : 'CodyFeet' , selected : false , color : 'red ' } ,
41+ { name : 'CodyRoby' , selected : false , color : '#6af32a ' } ,
42+ { name : 'CodyColor' , selected : false , color : '#f3d52a ' } ,
43+ { name : 'CodyFeet' , selected : false , color : '#dc2af3 ' } ,
3444 ] ) ;
3545
3646 const [ target , setTarget ] = useState ( [
37- { name : 'Infanzia' , selected : false , color : 'yellow ' } ,
38- { name : 'Primaria' , selected : false , color : 'green ' } ,
39- { name : 'Secondaria' , selected : false , color : 'red ' } ,
47+ { name : 'Infanzia' , selected : false , color : '#2a37f3 ' } ,
48+ { name : 'Primaria' , selected : false , color : '#2af3d2 ' } ,
49+ { name : 'Secondaria' , selected : false , color : '#fd1919 ' } ,
4050 ] ) ;
41-
4251 const handleFilterSelection = ( { filter, value } ) => {
4352 setFilters ( ( prevFilters ) => {
4453 const updatedFilterValues = prevFilters [ filter ] ?. includes ( value )
4554 ? prevFilters [ filter ] . filter ( ( item ) => item !== value )
4655 : [ ...( prevFilters [ filter ] || [ ] ) , value ] ;
4756
57+ console . log ( updatedFilterValues ) ;
4858 return {
4959 ...prevFilters ,
5060 [ filter ] : updatedFilterValues ,
5161 } ;
5262 } ) ;
63+
5364 if ( filter === 'metodo' ) {
54- setMetodi ( ( prevMetodi ) =>
55- prevMetodi . map ( ( item ) => ( item . name === value ? { ...item , selected : ! item . selected } : item ) )
56- ) ;
65+ setMetodi ( ( prevMetodi ) => {
66+ return prevMetodi . map ( ( item ) => ( item . name === value ? { ...item , selected : ! item . selected } : item ) ) ;
67+ } ) ;
5768 } else if ( filter === 'target' ) {
5869 setTarget ( ( prevTargets ) =>
5970 prevTargets . map ( ( item ) => ( item . name === value ? { ...item , selected : ! item . selected } : item ) )
@@ -62,8 +73,9 @@ export default function DynamicSpreadsheet() {
6273 } ;
6374
6475 const filteredRows = rows . filter ( ( row : Row ) => {
65- const metodiMatch = filters . metodo . length === 0 || filters . metodo . includes ( row . metodo ) ;
66- const targetMatch = filters . target . length === 0 || filters . target . includes ( row . target ) ;
76+ console . log ( 'Entri qua ' , row ) ;
77+ const metodiMatch = filters . metodo . length === 0 || filters . metodo . some ( ( metodo ) => row . metodi . includes ( metodo ) ) ;
78+ const targetMatch = filters . target . length === 0 || filters . target . some ( ( target ) => row . targets . includes ( target ) ) ;
6779 return metodiMatch && targetMatch ;
6880 } ) ;
6981
@@ -88,7 +100,13 @@ export default function DynamicSpreadsheet() {
88100 return dateB . getTime ( ) - dateA . getTime ( ) ;
89101 } ) ;
90102
91- setRows ( sortedRecords ) ;
103+ const splittedRecords = sortedRecords . map ( ( tmp : TmpRow ) => ( {
104+ ...tmp ,
105+ metodi : tmp . metodi . split ( ',' ) . map ( ( metodo ) => metodo . trim ( ) ) ,
106+ targets : tmp . targets . split ( ',' ) . map ( ( target ) => target . trim ( ) ) ,
107+ } ) ) ;
108+
109+ setRows ( splittedRecords ) ;
92110 } ) ;
93111 } catch ( error ) {
94112 console . error ( 'Error fetching spreadsheet data:' , error ) ;
@@ -107,7 +125,7 @@ export default function DynamicSpreadsheet() {
107125
108126 return (
109127 < div className = "prose-page" >
110- < div className = "flex justify-start items-center gap-4 " >
128+ < div className = "flex justify-start items-center gap-4" >
111129 < p className = "font-semibold" > Filtri:</ p >
112130
113131 < IconSelect
@@ -124,7 +142,6 @@ export default function DynamicSpreadsheet() {
124142 />
125143 </ div >
126144 < div className = "flex gap-4 not-prose" >
127- { /* {isMetodiSelected && <p>Metodi: </p>} */ }
128145 { metodi . map (
129146 ( m ) =>
130147 m . selected && (
@@ -170,14 +187,22 @@ export default function DynamicSpreadsheet() {
170187 key = { index }
171188 target = "_blank"
172189 >
173- < img src = { `/risorse/attivita-in-diretta /${ row . nome_immagine } ` } alt = "" className = "max-w-[200px]" />
190+ < img src = { `/risorse/post-e-webinar /${ row . nome_immagine } ` } alt = "" className = "max-w-[200px]" />
174191
175192 < div className = "not-prose" >
176193 < h3 className = "text-2xl" > { row . nome } </ h3 >
177194 { row . descrizione && < p className = "text-base text-slate-700 mt-2" > { row . descrizione } </ p > }
178195 < div className = "flex gap-2 mt-2" >
179- < Filter name = { row . metodo } color = { getColor ( 'metodo' , row . metodo ) } />
180- < Filter name = { row . target } color = { getColor ( 'target' , row . target ) } />
196+ { row . metodi &&
197+ row . metodi . length > 0 &&
198+ row . metodi . map ( ( metodo ) => (
199+ < Filter key = { `${ row . nome } -${ metodo } ` } name = { metodo } color = { getColor ( 'metodo' , metodo ) } />
200+ ) ) }
201+ { row . targets &&
202+ row . targets . length > 0 &&
203+ row . targets . map ( ( target ) => (
204+ < Filter key = { `${ row . nome } -${ target } ` } name = { target } color = { getColor ( 'target' , target ) } />
205+ ) ) }
181206 </ div >
182207 </ div >
183208 </ a >
0 commit comments