Skip to content

Commit e535e77

Browse files
choo121600kaxil
authored andcommitted
feat: Add real-time clock updates to timezone selector (#52414)
* feat: Add real-time clock updates to timezone selector * Add real-time clock update to user setting button Nav (cherry picked from commit f95319e)
1 parent f69e8c8 commit e535e77

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

airflow-core/src/airflow/ui/src/layouts/Nav/TimezoneSelector.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { Select, type SingleValue } from "chakra-react-select";
2121
import dayjs from "dayjs";
2222
import timezone from "dayjs/plugin/timezone";
2323
import utc from "dayjs/plugin/utc";
24-
import React, { useMemo } from "react";
24+
import React, { useEffect, useMemo, useState } from "react";
2525

2626
import { useTimezone } from "src/context/timezone";
2727
import type { Option as TimezoneOption } from "src/utils/option";
@@ -31,6 +31,7 @@ dayjs.extend(timezone);
3131

3232
const TimezoneSelector: React.FC = () => {
3333
const { selectedTimezone, setSelectedTimezone } = useTimezone();
34+
const [currentTime, setCurrentTime] = useState<string>("");
3435
const timezones = useMemo<Array<string>>(() => {
3536
const tzList = Intl.supportedValuesOf("timeZone");
3637
const guessedTz = dayjs.tz.guess();
@@ -54,7 +55,17 @@ const TimezoneSelector: React.FC = () => {
5455
}
5556
};
5657

57-
const currentTime = dayjs().tz(selectedTimezone).format("YYYY-MM-DD HH:mm:ss");
58+
useEffect(() => {
59+
const updateTime = () => {
60+
setCurrentTime(dayjs().tz(selectedTimezone).format("YYYY-MM-DD HH:mm:ss"));
61+
};
62+
63+
updateTime();
64+
65+
const interval = setInterval(updateTime, 1000);
66+
67+
return () => clearInterval(interval);
68+
}, [selectedTimezone]);
5869

5970
return (
6071
<VStack align="stretch" gap={6}>

airflow-core/src/airflow/ui/src/layouts/Nav/UserSettingsButton.tsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { useDisclosure } from "@chakra-ui/react";
2020
import dayjs from "dayjs";
2121
import timezone from "dayjs/plugin/timezone";
2222
import utc from "dayjs/plugin/utc";
23-
import { useState } from "react";
23+
import { useEffect, useState } from "react";
2424
import { FiClock, FiGrid, FiLogOut, FiMoon, FiSun, FiUser } from "react-icons/fi";
2525
import { MdOutlineAccountTree } from "react-icons/md";
2626
import { useLocalStorage } from "usehooks-ts";
@@ -45,8 +45,20 @@ export const UserSettingsButton = () => {
4545

4646
const [time, setTime] = useState(dayjs());
4747

48+
useEffect(() => {
49+
const updateTime = () => {
50+
setTime(dayjs());
51+
};
52+
53+
updateTime();
54+
55+
const interval = setInterval(updateTime, 1000);
56+
57+
return () => clearInterval(interval);
58+
}, [selectedTimezone]);
59+
4860
return (
49-
<Menu.Root onOpenChange={() => setTime(dayjs())} positioning={{ placement: "right" }}>
61+
<Menu.Root positioning={{ placement: "right" }}>
5062
<Menu.Trigger asChild>
5163
<NavButton icon={<FiUser size="1.75rem" />} title="User" />
5264
</Menu.Trigger>

0 commit comments

Comments
 (0)