@@ -34,18 +34,36 @@ export function DateRangePicker({
3434 className,
3535 initialDateRange,
3636} : DateRangePickerProps ) {
37- const [ dateRange , setDateRange ] = useState < DateRange > ( initialDateRange )
37+ const [ dateRange , setDateRange ] = useState < DateRange > ( initialDateRange || {
38+ from : startOfDay ( new Date ( new Date ( ) . setDate ( new Date ( ) . getDate ( ) - 7 ) ) ) ,
39+ to : endOfDay ( new Date ( ) )
40+ } )
3841 const [ isOpen , setIsOpen ] = useState ( false )
39- const [ tempDate , setTempDate ] = useState < Date | null > ( null )
42+ const [ tempFrom , setTempFrom ] = useState < Date | null > ( null )
4043 const [ compareLastPeriod , setCompareLastPeriod ] = useState ( false )
41- const [ fromInput , setFromInput ] = useState ( format ( initialDateRange . from , "yyyy-MM-dd HH:mm:ss" ) )
42- const [ toInput , setToInput ] = useState ( format ( initialDateRange . to , "yyyy-MM-dd HH:mm:ss" ) )
4344
4445 const handleRangeSelect = ( range : DateRange | undefined ) => {
45- if ( range ?. from && range ?. to ) {
46- setDateRange ( range )
46+ if ( ! range ?. from ) return ;
47+
48+ // If both dates are selected or no from date, start new selection
49+ if ( ( dateRange . from && dateRange . to ) || ! dateRange . from ) {
50+ setDateRange ( {
51+ from : startOfDay ( range . from ) ,
52+ to : undefined
53+ } as DateRange ) ;
54+ return ;
4755 }
48- }
56+
57+ // If only from is selected, set to date
58+ if ( dateRange . from && ! dateRange . to ) {
59+ const newDate = range . to ;
60+ setDateRange ( {
61+ from : dateRange . from ,
62+ to : endOfDay ( newDate )
63+ } ) ;
64+ return ;
65+ }
66+ } ;
4967
5068 const handlePresetClick = ( days : number ) => {
5169 const to = new Date ( )
@@ -59,9 +77,7 @@ export function DateRangePicker({
5977 }
6078
6179 const handleFromChange = ( e : React . ChangeEvent < HTMLInputElement > ) => {
62- const value = e . target . value
63- setFromInput ( value )
64-
80+ const value = e . target . value . replace ( 'UTC ' , '' )
6581 const date = new Date ( value )
6682 if ( ! isNaN ( date . getTime ( ) ) ) {
6783 setDateRange ( prev => ( {
@@ -72,9 +88,7 @@ export function DateRangePicker({
7288 }
7389
7490 const handleToChange = ( e : React . ChangeEvent < HTMLInputElement > ) => {
75- const value = e . target . value
76- setToInput ( value )
77-
91+ const value = e . target . value . replace ( 'UTC ' , '' )
7892 const date = new Date ( value )
7993 if ( ! isNaN ( date . getTime ( ) ) ) {
8094 setDateRange ( prev => ( {
@@ -95,7 +109,8 @@ export function DateRangePicker({
95109 ) }
96110 >
97111 < CalendarIcon className = "mr-2 h-4 w-4" />
98- { format ( dateRange . from , "MMM dd" ) } - { format ( dateRange . to , "MMM dd" ) }
112+ { dateRange . from ? format ( dateRange . from , "MMM dd" ) : "Start" } -
113+ { dateRange . to ? format ( dateRange . to , "MMM dd" ) : "End" }
99114 </ Button >
100115 </ PopoverTrigger >
101116 < PopoverContent className = "w-auto p-0" align = "start" >
@@ -130,16 +145,12 @@ export function DateRangePicker({
130145 < div className = "space-y-2" >
131146 < div >
132147 < Label className = "text-sm" > From</ Label >
133- < div className = "flex items-center" >
134- < span className = "mr-2 text-sm text-muted-foreground" > UTC</ span >
135- < Input
136- type = "text"
137- value = { fromInput }
138- onChange = { handleFromChange }
139- className = "rounded-md text-sm"
140- placeholder = "YYYY-MM-DD HH:mm:ss"
141- />
142- </ div >
148+ < Input
149+ type = "text"
150+ value = { dateRange . from ? `UTC ${ format ( dateRange . from , "yyyy-MM-dd HH:mm:ss" ) } ` : "" }
151+ onChange = { handleFromChange }
152+ className = "rounded-md text-sm"
153+ />
143154 </ div >
144155
145156 < div >
@@ -148,25 +159,17 @@ export function DateRangePicker({
148159 < Button
149160 variant = "link"
150161 className = "h-auto p-0 text-xs text-black hover:text-black/80"
151- onClick = { ( ) => {
152- const now = new Date ( )
153- setToInput ( format ( now , "yyyy-MM-dd HH:mm:ss" ) )
154- setDateRange ( prev => ( { ...prev , to : now } ) )
155- } }
162+ onClick = { ( ) => setDateRange ( prev => ( { ...prev , to : new Date ( ) } ) ) }
156163 >
157164 Set to latest
158165 </ Button >
159166 </ div >
160- < div className = "flex items-center" >
161- < span className = "mr-2 text-sm text-muted-foreground" > UTC</ span >
162- < Input
163- type = "text"
164- value = { toInput }
165- onChange = { handleToChange }
166- className = "rounded-md text-sm"
167- placeholder = "YYYY-MM-DD HH:mm:ss"
168- />
169- </ div >
167+ < Input
168+ type = "text"
169+ value = { dateRange . to ? `UTC ${ format ( dateRange . to , "yyyy-MM-dd HH:mm:ss" ) } ` : "" }
170+ onChange = { handleToChange }
171+ className = "rounded-md text-sm"
172+ />
170173 </ div >
171174
172175 < div className = "flex items-center space-x-2 pt-2" >
0 commit comments