This is an automated email from the ASF dual-hosted git repository.

kaxilnaik pushed a commit to branch v3-0-test
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/v3-0-test by this push:
     new e535e774832 feat: Add real-time clock updates to timezone selector 
(#52414)
e535e774832 is described below

commit e535e7748327b74489f4c51dbb496aea9a31f6ee
Author: Yeonguk Choo <[email protected]>
AuthorDate: Mon Jun 30 22:59:04 2025 +0900

    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 f95319ef6792a5559bb8d82ab6f7f1cb9b67188a)
---
 .../src/airflow/ui/src/layouts/Nav/TimezoneSelector.tsx  | 15 +++++++++++++--
 .../airflow/ui/src/layouts/Nav/UserSettingsButton.tsx    | 16 ++++++++++++++--
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/airflow-core/src/airflow/ui/src/layouts/Nav/TimezoneSelector.tsx 
b/airflow-core/src/airflow/ui/src/layouts/Nav/TimezoneSelector.tsx
index 20dd09af396..d7cc615b874 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Nav/TimezoneSelector.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Nav/TimezoneSelector.tsx
@@ -21,7 +21,7 @@ import { Select, type SingleValue } from 
"chakra-react-select";
 import dayjs from "dayjs";
 import timezone from "dayjs/plugin/timezone";
 import utc from "dayjs/plugin/utc";
-import React, { useMemo } from "react";
+import React, { useEffect, useMemo, useState } from "react";
 
 import { useTimezone } from "src/context/timezone";
 import type { Option as TimezoneOption } from "src/utils/option";
@@ -31,6 +31,7 @@ dayjs.extend(timezone);
 
 const TimezoneSelector: React.FC = () => {
   const { selectedTimezone, setSelectedTimezone } = useTimezone();
+  const [currentTime, setCurrentTime] = useState<string>("");
   const timezones = useMemo<Array<string>>(() => {
     const tzList = Intl.supportedValuesOf("timeZone");
     const guessedTz = dayjs.tz.guess();
@@ -54,7 +55,17 @@ const TimezoneSelector: React.FC = () => {
     }
   };
 
-  const currentTime = dayjs().tz(selectedTimezone).format("YYYY-MM-DD 
HH:mm:ss");
+  useEffect(() => {
+    const updateTime = () => {
+      setCurrentTime(dayjs().tz(selectedTimezone).format("YYYY-MM-DD 
HH:mm:ss"));
+    };
+
+    updateTime();
+
+    const interval = setInterval(updateTime, 1000);
+
+    return () => clearInterval(interval);
+  }, [selectedTimezone]);
 
   return (
     <VStack align="stretch" gap={6}>
diff --git a/airflow-core/src/airflow/ui/src/layouts/Nav/UserSettingsButton.tsx 
b/airflow-core/src/airflow/ui/src/layouts/Nav/UserSettingsButton.tsx
index 91184f29511..fc035a2b669 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Nav/UserSettingsButton.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Nav/UserSettingsButton.tsx
@@ -20,7 +20,7 @@ import { useDisclosure } from "@chakra-ui/react";
 import dayjs from "dayjs";
 import timezone from "dayjs/plugin/timezone";
 import utc from "dayjs/plugin/utc";
-import { useState } from "react";
+import { useEffect, useState } from "react";
 import { FiClock, FiGrid, FiLogOut, FiMoon, FiSun, FiUser } from 
"react-icons/fi";
 import { MdOutlineAccountTree } from "react-icons/md";
 import { useLocalStorage } from "usehooks-ts";
@@ -45,8 +45,20 @@ export const UserSettingsButton = () => {
 
   const [time, setTime] = useState(dayjs());
 
+  useEffect(() => {
+    const updateTime = () => {
+      setTime(dayjs());
+    };
+
+    updateTime();
+
+    const interval = setInterval(updateTime, 1000);
+
+    return () => clearInterval(interval);
+  }, [selectedTimezone]);
+
   return (
-    <Menu.Root onOpenChange={() => setTime(dayjs())} positioning={{ placement: 
"right" }}>
+    <Menu.Root positioning={{ placement: "right" }}>
       <Menu.Trigger asChild>
         <NavButton icon={<FiUser size="1.75rem" />} title="User" />
       </Menu.Trigger>

Reply via email to