aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package-lock.json59
-rw-r--r--package.json2
-rw-r--r--src/App.js1
-rw-r--r--src/Login.css0
-rw-r--r--src/Login.js62
-rw-r--r--src/Router.js21
-rw-r--r--src/index.js7
7 files changed, 150 insertions, 2 deletions
diff --git a/package-lock.json b/package-lock.json
index dcfad24..372538f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,6 +20,8 @@
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-resize-observer": "^1.1.1",
+ "react-router": "^6.3.0",
+ "react-router-dom": "^6.3.0",
"react-scripts": "5.0.0",
"react-toggle-slider": "^0.4.0",
"reactstrap": "^9.0.1",
@@ -8132,6 +8134,14 @@
"he": "bin/he"
}
},
+ "node_modules/history": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz",
+ "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.7.6"
+ }
+ },
"node_modules/hoopy": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
@@ -13468,6 +13478,30 @@
"react": ">=0.14"
}
},
+ "node_modules/react-router": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz",
+ "integrity": "sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==",
+ "dependencies": {
+ "history": "^5.2.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.3.0.tgz",
+ "integrity": "sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==",
+ "dependencies": {
+ "history": "^5.2.0",
+ "react-router": "6.3.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
"node_modules/react-scripts": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.0.tgz",
@@ -22207,6 +22241,14 @@
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
},
+ "history": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz",
+ "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==",
+ "requires": {
+ "@babel/runtime": "^7.7.6"
+ }
+ },
"hoopy": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
@@ -25930,6 +25972,23 @@
"integrity": "sha512-3R+90Hou90Mr3wJYc+unsySC8Pn91V4nmjO32NKvUvjphRUbq9HisyLg7bDyGBE7xlMrrM6Fax7iNQaFdc/FYA==",
"requires": {}
},
+ "react-router": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz",
+ "integrity": "sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==",
+ "requires": {
+ "history": "^5.2.0"
+ }
+ },
+ "react-router-dom": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.3.0.tgz",
+ "integrity": "sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==",
+ "requires": {
+ "history": "^5.2.0",
+ "react-router": "6.3.0"
+ }
+ },
"react-scripts": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.0.tgz",
diff --git a/package.json b/package.json
index fee99b6..cde9203 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,8 @@
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-resize-observer": "^1.1.1",
+ "react-router": "^6.3.0",
+ "react-router-dom": "^6.3.0",
"react-scripts": "5.0.0",
"react-toggle-slider": "^0.4.0",
"reactstrap": "^9.0.1",
diff --git a/src/App.js b/src/App.js
index 5d4eadb..b489c63 100644
--- a/src/App.js
+++ b/src/App.js
@@ -155,6 +155,7 @@ class Sidebar extends React.Component {
logOut() {
// location.replace("index.html");
+ window.location.replace("/");
console.log("log out");
}
diff --git a/src/Login.css b/src/Login.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/Login.css
diff --git a/src/Login.js b/src/Login.js
new file mode 100644
index 0000000..51a306f
--- /dev/null
+++ b/src/Login.js
@@ -0,0 +1,62 @@
+//a simple login page, with a username and password field
+import React from 'react';
+import { InputGroup } from 'reactstrap';
+// import ResizeObserver from "react-resize-observer";
+import { ToggleSlider } from 'react-toggle-slider';
+import { ThemeContext, themes } from './theme';
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { faSun, faMoon } from '@fortawesome/free-solid-svg-icons';
+import './Login.css';
+
+function Login(){
+ const [darkMode, setDarkMode] = React.useState(true);
+
+ return (
+ <div className='Login'>
+ <header className='Login-header'>
+ <InputGroup>
+ <ThemeContext.Consumer>
+ {({ changeTheme }) => (
+ <div className='toggle-slider'>
+ <FontAwesomeIcon icon={faSun} size='xl' />
+ <ToggleSlider
+ onToggle={() => {
+ setDarkMode(!darkMode);
+ changeTheme(darkMode ? themes.light : themes.dark);
+ }}
+ />
+ <FontAwesomeIcon icon={faMoon} size='xl' />
+ </div>
+ )}
+ </ThemeContext.Consumer>
+ </InputGroup>
+ <LoginComponent />
+ </header>
+ </div>
+ );
+
+}
+class LoginComponent extends React.Component{
+ // render a login page, with a username and password field, pressing the login button will log in the user and redirect to the home page
+ loginButton(){
+ console.log('login button pressed');
+ // document.location.href = 'http://localhost:3000/terminal'
+ window.location.replace('http://localhost:3000/terminal');
+ }
+ render(){
+ return(
+ <div className='login'>
+ <h1>Login</h1>
+ <form>
+ <label>Username</label>
+ <input type='text'/>
+ <label>Password</label>
+ <input type='password'/>
+ <a href='http://localhost:3000/terminal'>Login</a>
+ {/* <button onClick={() => this.loginButton()}>Login</button> */}
+ </form>
+ </div>
+ );
+ }
+}
+export default Login;
diff --git a/src/Router.js b/src/Router.js
new file mode 100644
index 0000000..110021a
--- /dev/null
+++ b/src/Router.js
@@ -0,0 +1,21 @@
+import React from "react";
+import App from "./App";
+import Login from "./Login";
+
+import {
+ Routes,
+ Route,
+ // Link,
+ // useNavigate,
+ // useLocation,
+ // Navigate,
+ } from 'react-router-dom';
+
+ export default function RouterApp() {
+ return (
+ <Routes>
+ <Route path="/" element={<Login />} />
+ <Route path="/terminal" element={<App />} />
+ </Routes>
+ );
+ }
diff --git a/src/index.js b/src/index.js
index 8026e8e..d36c893 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,14 +1,17 @@
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
-import App from './App';
+import RouterApp from './Router';
import reportWebVitals from './reportWebVitals';
import ThemeContextWrapper from './theme';
+import { BrowserRouter } from 'react-router-dom';
ReactDOM.render(
<ThemeContextWrapper>
<React.StrictMode>
- <App />
+ <BrowserRouter>
+ <RouterApp />
+ </BrowserRouter>
</React.StrictMode>
</ThemeContextWrapper>,
document.getElementById('root')