@@ -19,7 +19,7 @@ import type { CommentSpot } from '@/lib/enhancer'
1919import type { DraftStats } from '@/lib/enhancers/draftStats'
2020
2121interface FilterState {
22- sentFilter : 'all ' | 'sent' | 'unsent'
22+ sentFilter : 'both ' | 'sent' | 'unsent'
2323 searchQuery : string
2424 showArchived : boolean
2525}
@@ -94,18 +94,18 @@ const Badge = ({ text, type }: BadgeProps) => {
9494 )
9595}
9696
97- interface Segment {
97+ interface Segment < T > {
9898 text ?: string
9999 type : keyof typeof typeIcons
100- value : string
100+ value : T
101101}
102- interface MultiSegmentProps {
103- segments : Segment [ ]
104- value : string
105- onValueChange : ( value : string ) => void
102+ interface MultiSegmentProps < T > {
103+ segments : Segment < T > [ ]
104+ value : T
105+ onValueChange : ( value : T ) => void
106106}
107107
108- const MultiSegment = ( { segments, value, onValueChange } : MultiSegmentProps ) => {
108+ const MultiSegment = < T , > ( { segments, value, onValueChange } : MultiSegmentProps < T > ) => {
109109 return (
110110 < div className = 'inline-flex items-center gap-0' >
111111 { segments . map ( ( segment , index ) => {
@@ -124,7 +124,7 @@ const MultiSegment = ({ segments, value, onValueChange }: MultiSegmentProps) =>
124124
125125 return (
126126 < button
127- key = { segment . value }
127+ key = { String ( segment . value ) }
128128 className = { `${ statBadge ( {
129129 clickable : true ,
130130 selected : value === segment . value ,
@@ -382,7 +382,7 @@ export const ClaudePrototype = () => {
382382 const [ selectedIds , setSelectedIds ] = useState ( new Set ( ) )
383383 const [ filters , setFilters ] = useState < FilterState > ( {
384384 searchQuery : '' ,
385- sentFilter : 'all ' ,
385+ sentFilter : 'both ' ,
386386 showArchived : false ,
387387 } )
388388
@@ -395,7 +395,7 @@ export const ClaudePrototype = () => {
395395 if ( ! filters . showArchived ) {
396396 filtered = filtered . filter ( ( d ) => ! d . isArchived )
397397 }
398- if ( filters . sentFilter !== 'all ' ) {
398+ if ( filters . sentFilter !== 'both ' ) {
399399 filtered = filtered . filter ( ( d ) => ( filters . sentFilter === 'sent' ? d . isSent : ! d . isSent ) )
400400 }
401401 if ( filters . searchQuery ) {
@@ -467,7 +467,7 @@ export const ClaudePrototype = () => {
467467 )
468468 }
469469
470- if ( filteredDrafts . length === 0 && ( filters . searchQuery || filters . sentFilter !== 'all ' ) ) {
470+ if ( filteredDrafts . length === 0 && ( filters . searchQuery || filters . sentFilter !== 'both ' ) ) {
471471 return (
472472 < div className = 'min-h-screen bg-white' >
473473 < div className = 'p-6 border-b' >
@@ -494,7 +494,7 @@ export const ClaudePrototype = () => {
494494 onClick = { ( ) => {
495495 setFilters ( {
496496 searchQuery : '' ,
497- sentFilter : 'all ' ,
497+ sentFilter : 'both ' ,
498498 showArchived : true ,
499499 } )
500500 } }
@@ -565,11 +565,9 @@ export const ClaudePrototype = () => {
565565 />
566566 </ div >
567567 < div className = 'relative flex overflow-hidden' >
568- < MultiSegment
568+ < MultiSegment < FilterState [ 'sentFilter' ] >
569569 value = { filters . sentFilter }
570- onValueChange = { ( value ) =>
571- updateFilter ( 'sentFilter' , value as 'all' | 'sent' | 'unsent' )
572- }
570+ onValueChange = { ( value ) => updateFilter ( 'sentFilter' , value ) }
573571 segments = { [
574572 {
575573 text : '' ,
@@ -579,7 +577,7 @@ export const ClaudePrototype = () => {
579577 {
580578 text : 'both' ,
581579 type : 'blank' ,
582- value : 'all ' ,
580+ value : 'both ' ,
583581 } ,
584582 {
585583 text : '' ,
0 commit comments