@@ -44,6 +44,18 @@ const statBadge = cva(
4444 time : 'bg-gray-50 text-gray-700' ,
4545 unsent : 'bg-amber-100 text-amber-700' ,
4646 } ,
47+ clickable : {
48+ true : 'cursor-pointer border border-transparent hover:border-blue-500 hover:border-opacity-50 transition-colors' ,
49+ false : '' ,
50+ } ,
51+ selected : {
52+ true : 'border-blue-500 border-opacity-100' ,
53+ false : '' ,
54+ } ,
55+ } ,
56+ defaultVariants : {
57+ clickable : false ,
58+ selected : false ,
4759 } ,
4860 } ,
4961)
@@ -66,15 +78,27 @@ const typeIcons = {
6678type BadgeProps = VariantProps < typeof statBadge > & {
6779 type : keyof typeof typeIcons
6880 text ?: number | string
81+ onClick ?: ( ) => void
82+ isSelected ?: boolean
6983}
7084
71- const Badge = ( { text, type } : BadgeProps ) => {
85+ const Badge = ( { text, type, onClick , isSelected } : BadgeProps ) => {
7286 const Icon = typeIcons [ type ]
87+ const Component = onClick ? 'button' : 'span'
88+
7389 return (
74- < span className = { statBadge ( { type } ) } >
90+ < Component
91+ className = { statBadge ( {
92+ type,
93+ clickable : ! ! onClick ,
94+ selected : ! ! isSelected
95+ } ) }
96+ onClick = { onClick }
97+ { ...( onClick && { type : 'button' } ) }
98+ >
7599 { type === 'blank' || < Icon className = 'w-3 h-3' /> }
76100 { text || type }
77- </ span >
101+ </ Component >
78102 )
79103}
80104
@@ -579,9 +603,22 @@ function filterControls(
579603 </ label >
580604 </ div >
581605 < div className = 'flex rounded-md overflow-hidden' >
582- < Badge type = 'unsent' />
583- < Badge type = 'blank' text = 'both' />
584- < Badge type = 'sent' />
606+ < Badge
607+ type = 'unsent'
608+ onClick = { ( ) => updateFilter ( 'sentFilter' , 'unsent' ) }
609+ isSelected = { filters . sentFilter === 'unsent' }
610+ />
611+ < Badge
612+ type = 'blank'
613+ text = 'both'
614+ onClick = { ( ) => updateFilter ( 'sentFilter' , 'all' ) }
615+ isSelected = { filters . sentFilter === 'all' }
616+ />
617+ < Badge
618+ type = 'sent'
619+ onClick = { ( ) => updateFilter ( 'sentFilter' , 'sent' ) }
620+ isSelected = { filters . sentFilter === 'sent' }
621+ />
585622 </ div >
586623 </ div >
587624 </ div >
0 commit comments