Skip to content

Commit 3467a9d

Browse files
author
Leshe4ka
committed
get rid of GMT in header
support for reset timestamp with timezone
1 parent c21e7e3 commit 3467a9d

File tree

3 files changed

+43
-6
lines changed

3 files changed

+43
-6
lines changed

frontend/src/components/ConsumerGroups/Details/ResetOffsets/Form.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import useAppParams from 'lib/hooks/useAppParams';
2323
import { useResetConsumerGroupOffsetsMutation } from 'lib/hooks/api/consumers';
2424
import { FlexFieldset, StyledForm } from 'components/common/Form/Form.styled';
2525
import ControlledSelect from 'components/common/Select/ControlledSelect';
26+
import { useTimezone } from 'lib/hooks/useTimezones';
2627

2728
import * as S from './ResetOffsets.styled';
2829

@@ -38,6 +39,7 @@ const resetTypeOptions = Object.values(ConsumerGroupOffsetsResetType).map(
3839

3940
const Form: React.FC<FormProps> = ({ defaultValues, partitions, topics }) => {
4041
const navigate = useNavigate();
42+
const { getDateInCurrentTimezone } = useTimezone();
4143
const routerParams = useAppParams<ClusterGroupParam>();
4244
const reset = useResetConsumerGroupOffsetsMutation(routerParams);
4345
const topicOptions = React.useMemo(
@@ -142,8 +144,12 @@ const Form: React.FC<FormProps> = ({ defaultValues, partitions, topics }) => {
142144
render={({ field: { onChange, onBlur, value, ref } }) => (
143145
<S.DatePickerInput
144146
ref={ref}
145-
selected={new Date(value as number)}
146-
onChange={(e: Date | null) => onChange(e?.getTime())}
147+
selected={getDateInCurrentTimezone(
148+
new Date(value as number)
149+
)}
150+
onChange={(selectedDate: Date | null) => {
151+
onChange(selectedDate?.getTime());
152+
}}
147153
onBlur={onBlur}
148154
/>
149155
)}

frontend/src/components/NavBar/UserTimezone/UserTimezone.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export const UserTimezone = () => {
3939
openBtnEl={
4040
<Button buttonType="text" buttonSize="L">
4141
<S.SelectedTimezoneContainer>
42-
<p>{currentTimezone.offset}</p>
42+
<p>{currentTimezone.UTCOffset}</p>
4343
<ChevronDownIcon fill="currentColor" width="16" height="16" />
4444
</S.SelectedTimezoneContainer>
4545
</Button>

frontend/src/lib/hooks/useTimezones.ts

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ interface Timezone {
44
value: string;
55
label: string;
66
offset: string;
7+
UTCOffset: string;
78
}
89

910
const generateTimezones = (): Timezone[] => {
@@ -47,12 +48,14 @@ const generateTimezones = (): Timezone[] => {
4748
value: timeZone,
4849
label: `${offset.replace('GMT', 'UTC')} ${timeZone.replace(/_/g, ' ')}`,
4950
offset,
51+
UTCOffset: offset.replace('GMT', 'UTC'),
5052
};
5153
} catch (error) {
5254
return {
5355
value: timeZone,
5456
label: timeZone.replace(/_/g, ' '),
5557
offset: 'GMT+00:00',
58+
UTCOffset: 'UTC+00:00',
5659
};
5760
}
5861
});
@@ -62,14 +65,30 @@ const generateTimezones = (): Timezone[] => {
6265
'Intl.supportedValuesOf not supported, using fallback timezones'
6366
);
6467
return [
65-
{ value: 'UTC', label: 'UTC', offset: 'GMT+00:00' },
68+
{
69+
value: 'UTC',
70+
label: 'UTC',
71+
offset: 'GMT+00:00',
72+
UTCOffset: 'GMT+00:00',
73+
},
6674
{
6775
value: 'America/New York',
6876
label: 'America/New York',
6977
offset: 'GMT-05:00',
78+
UTCOffset: 'GMT-05:00',
79+
},
80+
{
81+
value: 'Europe/London',
82+
label: 'Europe/London',
83+
offset: 'GMT+00:00',
84+
UTCOffset: 'GMT+00:00',
85+
},
86+
{
87+
value: 'Asia/Tokyo',
88+
label: 'Asia/Tokyo',
89+
offset: 'GMT+09:00',
90+
UTCOffset: 'GMT+09:00',
7091
},
71-
{ value: 'Europe/London', label: 'Europe/London', offset: 'GMT+00:00' },
72-
{ value: 'Asia/Tokyo', label: 'Asia/Tokyo', offset: 'GMT+09:00' },
7392
];
7493
}
7594
};
@@ -115,6 +134,7 @@ export const getSystemTimezone = (): Timezone => {
115134
value: systemTimezone,
116135
label: systemTimezone,
117136
offset: offsetStr,
137+
UTCOffset: offsetStr.replace('GMT', 'UTC'),
118138
};
119139
};
120140

@@ -128,10 +148,21 @@ export const useTimezone = () => {
128148
setCurrentTimezone(timezone);
129149
};
130150

151+
const getDateInCurrentTimezone = (date: Date = new Date()): Date => {
152+
const timezone = (currentTimezone ?? getSystemTimezone()).value;
153+
154+
const timeInTimezone = date.toLocaleString('sv-SE', {
155+
timeZone: timezone,
156+
});
157+
158+
return new Date(timeInTimezone);
159+
};
160+
131161
return {
132162
currentTimezone: currentTimezone ?? getSystemTimezone(),
133163
availableTimezones: TIMEZONES,
134164
setTimezone,
165+
getDateInCurrentTimezone,
135166
};
136167
};
137168

0 commit comments

Comments
 (0)