--- /dev/null
+export * from './theme-toggle-button';
--- /dev/null
+import { Button } from 'react-bootstrap';
+
+export const ThemeToggleButton = ({ theme, toggleTheme }) => {
+ return (
+ <Button onClick={toggleTheme} variant={theme === 'dark' ? 'dark' : 'primary'}>
+ {theme === 'dark' ? <i className='bi bi-sun-fill' /> : <i className='bi bi-moon-stars-fill' />}
+ </Button>
+ );
+};
import UploadPipelineForm from './pipelines/UploadPipeline';
import CreateFeatureGroup from './create/CreateFeatureGroup';
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
-import NavbarComponent from './navbar/NavbarComponent';
import ListFeatureGroup from './status/ListFeatureGroup';
+import { NavigationBar } from '../navigation';
import { debug_var } from '../../states';
var DEBUG = debug_var === 'true';
return (
<>
<Router>
- <NavbarComponent />
+ <NavigationBar />
<Routes>
<Route path='/' exact component={Home} />
<Route path='/TrainingJob/CreateTrainingJob' element={<CreateTrainingJob logger={logger} />} />
+++ /dev/null
-// ==================================================================================
-
-// Copyright (c) 2022 Samsung Electronics Co., Ltd. All Rights Reserved.
-
-// Licensed 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 React, { useState, useEffect } from 'react';
-import { Container, Nav, Navbar, NavDropdown, Button } from 'react-bootstrap';
-import 'bootstrap-icons/font/bootstrap-icons.css';
-import './NavbarComponent.css';
-
-function NavbarComponent() {
- const [isDarkMode, setIsDarkMode] = useState(() => {
- const savedTheme = localStorage.getItem('isDarkMode');
- return savedTheme === 'true';
- });
-
- useEffect(() => {
- document.body.setAttribute('data-bs-theme', isDarkMode ? 'dark' : 'light');
- localStorage.setItem('isDarkMode', isDarkMode);
- }, [isDarkMode]);
-
- const toggleDarkMode = () => {
- setIsDarkMode(!isDarkMode);
- };
-
- return (
- <Navbar className='nav-bar custom-navbar' variant='dark'>
- <Container>
- <Navbar.Brand href='/'>AI/ML Management Dashboard</Navbar.Brand>
- <Nav>
- <NavDropdown title="Menu" className="nav-drop-down">
- <NavDropdown.Item href="/TrainingJob/TrainingJobsStatus">Training Job</NavDropdown.Item>
- <NavDropdown.Item href="/TrainingJob/Pipeline">Training Function</NavDropdown.Item>
- <NavDropdown.Item href="/TrainingJob/ListFeatureGroups">Feature Group</NavDropdown.Item>
- </NavDropdown>
- <Button onClick={toggleDarkMode} variant={isDarkMode ? 'dark' : 'primary'}>
- {isDarkMode ? <i className='bi bi-sun-fill'></i> : <i className='bi bi-moon-stars-fill'></i>}
- </Button>
- </Nav>
- </Container>
- </Navbar>
- );
-}
-
-export default NavbarComponent;
--- /dev/null
+export * from './button';
+export * from './home';
+export * from './navigation';
--- /dev/null
+export * from './navigation-bar';
--- /dev/null
+import { NavDropdown } from 'react-bootstrap';
+import { Container, Nav, Navbar } from 'react-bootstrap';
+import 'bootstrap-icons/font/bootstrap-icons.css';
+import './navigation-bar.css';
+import { useTheme } from '../../hooks';
+import { ThemeToggleButton } from '../button';
+
+export const NavigationBar = () => {
+ const [theme, toggleTheme] = useTheme();
+
+ return (
+ <Navbar className='nav-bar custom-navbar' variant='dark'>
+ <Container>
+ <Navbar.Brand href='/'>AI/ML Management Dashboard</Navbar.Brand>
+ <Nav>
+ <NavDropdown title='Training Jobs' className='nav-drop-down'>
+ <NavDropdown.Item href='/TrainingJob/TrainingJobsStatus'>Training Job</NavDropdown.Item>
+ <NavDropdown.Item href='/TrainingJob/Pipeline'>Training Function</NavDropdown.Item>
+ <NavDropdown.Item href='/TrainingJob/ListFeatureGroups'>Feature Group</NavDropdown.Item>
+ </NavDropdown>
+ <ThemeToggleButton theme={theme} toggleTheme={toggleTheme} />
+ </Nav>
+ </Container>
+ </Navbar>
+ );
+};
--- /dev/null
+export * from './useTheme';
--- /dev/null
+import { useState, useEffect } from 'react';
+
+export const useTheme = () => {
+ const [theme, setTheme] = useState(() => {
+ const savedTheme = localStorage.getItem('theme');
+ return savedTheme || 'light';
+ });
+
+ useEffect(() => {
+ document.body.setAttribute('data-bs-theme', theme);
+ localStorage.setItem('theme', theme);
+ }, [theme]);
+
+ const toggleTheme = () => setTheme(prevTheme => (prevTheme === 'light' ? 'dark' : 'light'));
+
+ return [theme, toggleTheme];
+};