@@ -14,7 +14,7 @@ import {
1414} from "./Talks.style" ;
1515import TrackInformation from "../../components/common/TrackInformation" ;
1616import { useFetchTalks } from "../../hooks/useFetchTalks" ;
17- import { Dropdown , DropdownChangeEvent } from "primereact/dropdown " ;
17+ import { SelectButton , SelectButtonChangeEvent } from "primereact/selectbutton " ;
1818import "primereact/resources/primereact.min.css" ;
1919import "primereact/resources/themes/lara-light-indigo/theme.css" ;
2020import "../../styles/theme.css" ;
@@ -49,21 +49,27 @@ const Talks: FC<React.PropsWithChildren<unknown>> = () => {
4949
5050 useSentryErrorReport ( error ) ;
5151
52- const dropDownOptions = [
52+ const removeParenthesesContent = ( text : string ) : string => {
53+ return text . replace ( / \s * \( [ ^ ) ] * \) / g, "" ) ;
54+ } ;
55+
56+ const trackOptions = [
5357 { name : "All Tracks" , code : undefined } ,
5458 ...( data !== undefined
55- ? data . flatMap ( ( group ) => ( {
56- code : group . groupId . toString ( ) ,
57- name : group . groupName ,
58- } ) )
59+ ? data
60+ . flatMap ( ( group ) => ( {
61+ code : group . groupId . toString ( ) ,
62+ name : removeParenthesesContent ( group . groupName ) ,
63+ } ) )
64+ . sort ( ( a , b ) => a . name . localeCompare ( b . name ) )
5965 : [ ] ) ,
6066 ] ;
6167
6268 const filteredTalks = selectedGroupId ?. code
6369 ? data ?. filter ( ( talk ) => talk . groupId . toString ( ) === selectedGroupId . code )
6470 : data ;
6571
66- const onChangeSelectedTrack = ( e : DropdownChangeEvent ) => {
72+ const onChangeSelectedTrack = ( e : SelectButtonChangeEvent ) => {
6773 const value = e . value ;
6874 setSelectedGroupId ( value ?? null ) ;
6975 sessionStorage . setItem ( "selectedGroupCode" , value ?. code ?? "" ) ;
@@ -104,7 +110,7 @@ const Talks: FC<React.PropsWithChildren<unknown>> = () => {
104110 { isLoading && < h1 > Loading </ h1 > }
105111 { conferenceData . hideTalks ? (
106112 < p style = { { color : Color . WHITE , textAlign : "center" } } >
107- No talks selected yet. Keep in touch in our social media for
113+ No talks selected yet. Keep in tap in our social media for
108114 upcoming announcements
109115 </ p >
110116 ) : (
@@ -115,14 +121,46 @@ const Talks: FC<React.PropsWithChildren<unknown>> = () => {
115121 < label htmlFor = "group-id-select" >
116122 < strong > Filter by Track: </ strong >
117123 </ label >
118- < Dropdown
119- value = { selectedGroupId }
120- onChange = { onChangeSelectedTrack }
121- options = { dropDownOptions }
122- placeholder = "Select Track"
123- optionLabel = "name"
124- className = "w-full md:w-14rem"
125- />
124+ < div
125+ style = { {
126+ display : "flex" ,
127+ flexWrap : "wrap" ,
128+ gap : "0.5rem" ,
129+ marginTop : "0.5rem" ,
130+ justifyContent : "center" ,
131+ } }
132+ >
133+ < SelectButton
134+ value = { selectedGroupId }
135+ onChange = { onChangeSelectedTrack }
136+ options = { trackOptions }
137+ optionLabel = "name"
138+ style = { {
139+ display : "flex" ,
140+ flexWrap : "wrap" ,
141+ gap : "0.5rem" ,
142+ } }
143+ itemTemplate = { ( option ) => (
144+ < div
145+ style = { {
146+ padding : "0.5rem 1rem" ,
147+ borderRadius : "2rem" ,
148+ backgroundColor :
149+ selectedGroupId ?. code === option . code
150+ ? Color . LIGHT_BLUE
151+ : "transparent" ,
152+ color :
153+ selectedGroupId ?. code === option . code
154+ ? Color . WHITE
155+ : Color . SKY_BLUE ,
156+ cursor : "pointer" ,
157+ } }
158+ >
159+ { option . name }
160+ </ div >
161+ ) }
162+ />
163+ </ div >
126164 </ div >
127165 { filteredTalks . map ( ( track ) => (
128166 < TrackInformation
0 commit comments