Skip to content

Commit 949b571

Browse files
committed
use iso-8601 format, add helper text, simplify value updates
1 parent 7a32a56 commit 949b571

1 file changed

Lines changed: 21 additions & 24 deletions

File tree

src/components/ga4/EventBuilder/TimestampPicker.tsx

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)