Skip to content

Commit

Permalink
Create a User Settings button with light/dark mode toggle as a menu i…
Browse files Browse the repository at this point in the history
…tem (apache#42964)
  • Loading branch information
AryanK1511 authored and harjeevanmaan committed Oct 23, 2024
1 parent 124b941 commit 634ae23
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 14 deletions.
16 changes: 2 additions & 14 deletions airflow/ui/src/layouts/Nav/Nav.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import {
Flex,
Icon,
Link,
useColorMode,
useColorModeValue,
VStack,
} from "@chakra-ui/react";
Expand All @@ -32,19 +31,17 @@ import {
FiDatabase,
FiGlobe,
FiHome,
FiMoon,
FiSettings,
FiSun,
} from "react-icons/fi";

import { AirflowPin } from "src/assets/AirflowPin";
import { DagIcon } from "src/assets/DagIcon";

import { DocsButton } from "./DocsButton";
import { NavButton } from "./NavButton";
import { UserSettingsButton } from "./UserSettingsButton";

export const Nav = () => {
const { colorMode, toggleColorMode } = useColorMode();
const navBg = useColorModeValue("blue.100", "blue.900");

return (
Expand Down Expand Up @@ -106,16 +103,7 @@ export const Nav = () => {
title="Return to legacy UI"
/>
<DocsButton />
<NavButton
icon={
colorMode === "light" ? (
<FiMoon size="1.75rem" />
) : (
<FiSun size="1.75rem" />
)
}
onClick={toggleColorMode}
/>
<UserSettingsButton />
</Flex>
</VStack>
);
Expand Down
58 changes: 58 additions & 0 deletions airflow/ui/src/layouts/Nav/UserSettingsButton.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/*!
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {
IconButton,
Menu,
MenuButton,
useColorMode,
MenuItem,
MenuList,
} from "@chakra-ui/react";
import { FiMoon, FiSun, FiUser } from "react-icons/fi";

import { navButtonProps } from "./navButtonProps";

export const UserSettingsButton = () => {
const { colorMode, toggleColorMode } = useColorMode();

return (
<Menu placement="right">
<MenuButton
as={IconButton}
icon={<FiUser size="1.75rem" />}
{...navButtonProps}
/>
<MenuList>
<MenuItem onClick={toggleColorMode}>
{colorMode === "light" ? (
<>
<FiMoon size="1.25rem" style={{ marginRight: "8px" }} />
Switch to Dark Mode
</>
) : (
<>
<FiSun size="1.25rem" style={{ marginRight: "8px" }} />
Switch to Light Mode
</>
)}
</MenuItem>
</MenuList>
</Menu>
);
};

0 comments on commit 634ae23

Please sign in to comment.