@@ -34,14 +34,12 @@ export function DateRangePicker({
3434 className,
3535 initialDateRange,
3636} : DateRangePickerProps ) {
37+ const [ dateRange , setDateRange ] = useState < DateRange > ( initialDateRange )
3738 const [ isOpen , setIsOpen ] = useState ( false )
38- const [ dateRange , setDateRange ] = useState < DateRange > (
39- initialDateRange || {
40- from : subDays ( new Date ( ) , 7 ) ,
41- to : new Date ( ) ,
42- }
43- )
39+ const [ tempDate , setTempDate ] = useState < Date | null > ( null )
4440 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" ) )
4543
4644 const handleRangeSelect = ( range : DateRange | undefined ) => {
4745 if ( range ?. from && range ?. to ) {
@@ -61,21 +59,27 @@ export function DateRangePicker({
6159 }
6260
6361 const handleFromChange = ( e : React . ChangeEvent < HTMLInputElement > ) => {
64- const newDate = new Date ( e . target . value . replace ( 'UTC ' , '' ) )
65- if ( ! isNaN ( newDate . getTime ( ) ) ) {
66- setDateRange ( prev => ( {
67- ...prev ,
68- from : startOfDay ( newDate )
62+ const value = e . target . value
63+ setFromInput ( value )
64+
65+ const date = new Date ( value )
66+ if ( ! isNaN ( date . getTime ( ) ) ) {
67+ setDateRange ( prev => ( {
68+ ...prev ,
69+ from : startOfDay ( date )
6970 } ) )
7071 }
7172 }
7273
7374 const handleToChange = ( e : React . ChangeEvent < HTMLInputElement > ) => {
74- const newDate = new Date ( e . target . value . replace ( 'UTC ' , '' ) )
75- if ( ! isNaN ( newDate . getTime ( ) ) ) {
76- setDateRange ( prev => ( {
77- ...prev ,
78- to : endOfDay ( newDate )
75+ const value = e . target . value
76+ setToInput ( value )
77+
78+ const date = new Date ( value )
79+ if ( ! isNaN ( date . getTime ( ) ) ) {
80+ setDateRange ( prev => ( {
81+ ...prev ,
82+ to : endOfDay ( date )
7983 } ) )
8084 }
8185 }
@@ -126,35 +130,41 @@ export function DateRangePicker({
126130 < div className = "space-y-2" >
127131 < div >
128132 < Label className = "text-sm" > From</ Label >
129- < div className = "mt-1" >
133+ < div className = "flex items-center" >
134+ < span className = "mr-2 text-sm text-muted-foreground" > UTC</ span >
130135 < Input
131136 type = "text"
132- value = { `UTC ${ format ( dateRange . from , "yyyy-MM-dd HH:mm:ss" ) } ` }
137+ value = { fromInput }
133138 onChange = { handleFromChange }
134139 className = "rounded-md text-sm"
140+ placeholder = "YYYY-MM-DD HH:mm:ss"
135141 />
136142 </ div >
137143 </ div >
138144
139145 < div >
140146 < div className = "flex justify-between items-center" >
141147 < Label className = "text-sm" > To</ Label >
142- < div className = "flex-1 text-right" >
143- < Button
144- variant = "link"
145- className = "h-auto p-0 text-xs text-black hover:text-black/80"
146- onClick = { ( ) => setDateRange ( { ...dateRange , to : new Date ( ) } ) }
147- >
148- Set to latest
149- </ Button >
150- </ div >
148+ < Button
149+ variant = "link"
150+ 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+ } }
156+ >
157+ Set to latest
158+ </ Button >
151159 </ div >
152- < div className = "mt-1" >
160+ < div className = "flex items-center" >
161+ < span className = "mr-2 text-sm text-muted-foreground" > UTC</ span >
153162 < Input
154163 type = "text"
155- value = { `UTC ${ format ( dateRange . to , "yyyy-MM-dd HH:mm:ss" ) } ` }
164+ value = { toInput }
156165 onChange = { handleToChange }
157166 className = "rounded-md text-sm"
167+ placeholder = "YYYY-MM-DD HH:mm:ss"
158168 />
159169 </ div >
160170 </ div >
0 commit comments