@@ -41,6 +41,12 @@ const TimestampPicker: React.FC<TimestampPickerProps> = ({
4141 const [ timezoneAnchorEl , setTimezoneAnchorEl ] =
4242 React . useState < HTMLButtonElement | null > ( null )
4343
44+ const datetimeValue = React . useMemo ( ( ) => {
45+ return timestamp && ! isNaN ( parseInt ( timestamp , 10 ) )
46+ ? dayjs . utc ( parseInt ( timestamp , 10 ) / 1000 ) . tz ( selectedTimezone )
47+ : null
48+ } , [ timestamp , selectedTimezone ] )
49+
4450 const handleTimezoneOpen = ( event : React . MouseEvent < HTMLButtonElement > ) => {
4551 setTimezoneAnchorEl ( event . currentTarget )
4652 }
@@ -52,18 +58,17 @@ const TimestampPicker: React.FC<TimestampPickerProps> = ({
5258 const timezonePopoverOpen = Boolean ( timezoneAnchorEl )
5359 const timezonePopoverId = timezonePopoverOpen ? "timezone-popover" : undefined
5460
55- const handleTimezoneChange = ( newTimezone : string ) => {
56- if ( timestamp && ! isNaN ( parseInt ( timestamp , 10 ) ) ) {
57- const currentTime = dayjs
58- . utc ( parseInt ( timestamp , 10 ) / 1000 )
59- . tz ( selectedTimezone )
60-
61- const newTime = currentTime . tz ( newTimezone , true )
62- const newTimestamp = newTime . valueOf ( ) * 1000
63- setTimestamp ( newTimestamp . toString ( ) )
64- }
65- setSelectedTimezone ( newTimezone )
66- }
61+ const handleTimezoneChange = React . useCallback (
62+ ( newTimezone : string ) => {
63+ if ( datetimeValue ) {
64+ const newTime = datetimeValue . tz ( newTimezone , true )
65+ const newTimestamp = newTime . valueOf ( ) * 1000
66+ setTimestamp ( newTimestamp . toString ( ) )
67+ }
68+ setSelectedTimezone ( newTimezone )
69+ } ,
70+ [ datetimeValue , setTimestamp , setSelectedTimezone ]
71+ )
6772
6873 const validate = ( value : string ) => {
6974 if ( value === "" ) {
@@ -91,10 +96,7 @@ const TimestampPicker: React.FC<TimestampPickerProps> = ({
9196 : `${ docsBaseUrl } /sending-events?client_type=${ clientType } #override_timestamp`
9297
9398 return (
94- < LocalizationProvider
95- dateAdapter = { AdapterDayjs }
96- adapterLocale = { selectedTimezone }
97- >
99+ < LocalizationProvider dateAdapter = { AdapterDayjs } >
98100 < Box sx = { { border : "1px solid" , borderColor : "divider" , p : 2 , borderRadius : 1 } } >
99101 < Grid container alignItems = "flex-start" spacing = { 2 } >
100102 < Grid item xs >
@@ -132,23 +134,18 @@ const TimestampPicker: React.FC<TimestampPickerProps> = ({
132134 </ Grid >
133135 < Grid item >
134136 < DateTimePicker
137+ format = "YYYY-MM-DD[T]HH:mm:ss"
135138 ampm = { false }
136139 views = { [ "year" , "month" , "day" , "hours" , "minutes" , "seconds" ] }
137- value = {
138- timestamp && ! isNaN ( parseInt ( timestamp , 10 ) )
139- ? dayjs
140- . utc ( parseInt ( timestamp , 10 ) / 1000 )
141- . tz ( selectedTimezone )
142- : null
143- }
140+ value = { datetimeValue }
144141 onChange = { newValue => {
145142 if ( newValue ) {
146143 const newTimestamp = newValue . valueOf ( ) * 1000
147144 setTimestamp ( newTimestamp . toString ( ) )
148145 setError ( "" )
149146 }
150147 } }
151- slotProps = { { textField : { helperText : " " } } }
148+ slotProps = { { textField : { helperText : `In ${ selectedTimezone } ` } } }
152149 />
153150 </ Grid >
154151 < Grid item sx = { { mt : 1 } } >
0 commit comments