@@ -3,6 +3,7 @@ import { Button } from '@/components/ui/button'
33import { DropdownMenu , DropdownMenuContent , DropdownMenuRadioGroup , DropdownMenuRadioItem , DropdownMenuTrigger } from '@/components/ui/dropdown-menu'
44import { ToggleGroup , ToggleGroupItem } from '@/components/ui/toggle-group'
55import { cn } from '@/lib/utils'
6+ import { useTranslation } from 'react-i18next'
67
78export type TimePeriod = string
89export type TimeSelectorShortcut = {
@@ -31,6 +32,7 @@ export const TRAFFIC_TIME_SELECTOR_SHORTCUTS: TimeSelectorShortcut[] = [
3132 { value : '1w' , label : '1w' , quick : true } ,
3233 { value : '2w' , label : '2w' } ,
3334 { value : '1m' , label : '1m' } ,
35+ { value : 'all' , label : 'all' } ,
3436]
3537
3638interface TimeSelectorProps {
@@ -42,9 +44,17 @@ interface TimeSelectorProps {
4244}
4345
4446export default function TimeSelector ( { selectedTime, setSelectedTime, shortcuts = DEFAULT_TIME_SELECTOR_SHORTCUTS , maxVisible = shortcuts . length , className } : TimeSelectorProps ) {
47+ const { t } = useTranslation ( )
4548 const [ isMobileMoreOpen , setIsMobileMoreOpen ] = useState ( false )
4649 const [ isDesktopMoreOpen , setIsDesktopMoreOpen ] = useState ( false )
4750
51+ const getShortcutLabel = ( shortcut : TimeSelectorShortcut ) => {
52+ if ( shortcut . value === 'all' ) {
53+ return t ( 'alltime' , { defaultValue : 'All Time' } )
54+ }
55+ return shortcut . label
56+ }
57+
4858 const quickShortcuts = useMemo ( ( ) => {
4959 const explicitQuick = shortcuts . filter ( shortcut => shortcut . quick )
5060 if ( explicitQuick . length > 0 ) return explicitQuick
@@ -67,7 +77,7 @@ export default function TimeSelector({ selectedTime, setSelectedTime, shortcuts
6777 const isDesktopOverflowSelected = desktopOverflowShortcuts . some ( shortcut => shortcut . value === selectedTime )
6878
6979 return (
70- < div className = { cn ( 'w-full min-w-0 max-w-full overflow-hidden rounded-md border border-border/60 bg-muted/20 p-1' , className ) } >
80+ < div dir = "ltr" className = { cn ( 'w-full min-w-0 max-w-full overflow-hidden rounded-md border border-border/60 bg-muted/20 p-1' , className ) } >
7181 < div className = "flex w-full min-w-0 items-center gap-1 lg:hidden" >
7282 < ToggleGroup
7383 type = "single"
@@ -83,7 +93,7 @@ export default function TimeSelector({ selectedTime, setSelectedTime, shortcuts
8393 variant = "default"
8494 className = "h-7 min-w-[2.25rem] shrink-0 border-0 bg-transparent px-2.5 py-1 text-xs font-medium text-muted-foreground data-[state=on]:bg-background data-[state=on]:text-foreground data-[state=on]:shadow-sm"
8595 >
86- { shortcut . label }
96+ { getShortcutLabel ( shortcut ) }
8797 </ ToggleGroupItem >
8898 ) ) }
8999 </ ToggleGroup >
@@ -98,10 +108,10 @@ export default function TimeSelector({ selectedTime, setSelectedTime, shortcuts
98108 isMobileOverflowSelected && 'bg-background text-foreground shadow-sm' ,
99109 ) }
100110 >
101- More
111+ { t ( 'more' , { defaultValue : ' More' } ) }
102112 </ Button >
103113 </ DropdownMenuTrigger >
104- < DropdownMenuContent align = "end" className = "min-w-[7rem]" onInteractOutside = { ( ) => setIsMobileMoreOpen ( false ) } >
114+ < DropdownMenuContent dir = "ltr" align = "end" className = "min-w-[7rem]" onInteractOutside = { ( ) => setIsMobileMoreOpen ( false ) } >
105115 < DropdownMenuRadioGroup
106116 value = { selectedTime }
107117 onValueChange = { value => {
@@ -111,7 +121,7 @@ export default function TimeSelector({ selectedTime, setSelectedTime, shortcuts
111121 >
112122 { mobileOverflowShortcuts . map ( shortcut => (
113123 < DropdownMenuRadioItem key = { shortcut . value } value = { shortcut . value } className = "text-xs" >
114- { shortcut . label }
124+ { getShortcutLabel ( shortcut ) }
115125 </ DropdownMenuRadioItem >
116126 ) ) }
117127 </ DropdownMenuRadioGroup >
@@ -134,7 +144,7 @@ export default function TimeSelector({ selectedTime, setSelectedTime, shortcuts
134144 variant = "default"
135145 className = "h-7 min-w-[2.25rem] shrink-0 border-0 bg-transparent px-2.5 py-1 text-xs font-medium text-muted-foreground data-[state=on]:bg-background data-[state=on]:text-foreground data-[state=on]:shadow-sm"
136146 >
137- { shortcut . label }
147+ { getShortcutLabel ( shortcut ) }
138148 </ ToggleGroupItem >
139149 ) ) }
140150 </ ToggleGroup >
@@ -149,10 +159,10 @@ export default function TimeSelector({ selectedTime, setSelectedTime, shortcuts
149159 isDesktopOverflowSelected && 'bg-background text-foreground shadow-sm' ,
150160 ) }
151161 >
152- More
162+ { t ( 'more' , { defaultValue : ' More' } ) }
153163 </ Button >
154164 </ DropdownMenuTrigger >
155- < DropdownMenuContent align = "end" className = "min-w-[7rem]" onInteractOutside = { ( ) => setIsDesktopMoreOpen ( false ) } >
165+ < DropdownMenuContent dir = "ltr" align = "end" className = "min-w-[7rem]" onInteractOutside = { ( ) => setIsDesktopMoreOpen ( false ) } >
156166 < DropdownMenuRadioGroup
157167 value = { selectedTime }
158168 onValueChange = { value => {
@@ -162,7 +172,7 @@ export default function TimeSelector({ selectedTime, setSelectedTime, shortcuts
162172 >
163173 { desktopOverflowShortcuts . map ( shortcut => (
164174 < DropdownMenuRadioItem key = { shortcut . value } value = { shortcut . value } className = "text-xs" >
165- { shortcut . label }
175+ { getShortcutLabel ( shortcut ) }
166176 </ DropdownMenuRadioItem >
167177 ) ) }
168178 </ DropdownMenuRadioGroup >
0 commit comments