added ui elements
This commit is contained in:
parent
09e6deb019
commit
dc73b6d991
@ -7,7 +7,7 @@
|
|||||||
<meta name="theme-color" content="#000000" />
|
<meta name="theme-color" content="#000000" />
|
||||||
<meta
|
<meta
|
||||||
name="description"
|
name="description"
|
||||||
content="Web site created using create-react-app"
|
content="Doorlock Management"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<title>Doorlock</title>
|
<title>Doorlock</title>
|
||||||
|
@ -4,7 +4,7 @@ import {
|
|||||||
Route,
|
Route,
|
||||||
} from "react-router-dom";
|
} from "react-router-dom";
|
||||||
import { ThemeProvider } from "styled-components";
|
import { ThemeProvider } from "styled-components";
|
||||||
import {CreateUserWidget, RecentActivityWidget, SystemStatusWidget} from './components'
|
import {CreateUserWidget, RecentActivityWidget, SystemStatusWidget, ColourPalette} from './components'
|
||||||
import {AccountManager, AdminUI, Logs, System} from './views'
|
import {AccountManager, AdminUI, Logs, System} from './views'
|
||||||
import theme from './theme';
|
import theme from './theme';
|
||||||
function App() {
|
function App() {
|
||||||
@ -14,6 +14,7 @@ function App() {
|
|||||||
<AdminUI>
|
<AdminUI>
|
||||||
<Switch>
|
<Switch>
|
||||||
<Route path="/" exact>
|
<Route path="/" exact>
|
||||||
|
|
||||||
<CreateUserWidget />
|
<CreateUserWidget />
|
||||||
<RecentActivityWidget />
|
<RecentActivityWidget />
|
||||||
<SystemStatusWidget />
|
<SystemStatusWidget />
|
||||||
|
22
web/src/components/Button.jsx
Normal file
22
web/src/components/Button.jsx
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import styled from 'styled-components'
|
||||||
|
|
||||||
|
const Button = styled.button`
|
||||||
|
font-size: 1em;
|
||||||
|
font-weight: bold;
|
||||||
|
color: ${props=>props.disabled?props.theme.colours.color1:props.theme.colours.color3};
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0.3em 0.5em;
|
||||||
|
border: solid .1em ${props=>props.disabled?props.theme.colours.color7:props.theme.colours.color3};
|
||||||
|
background: ${props=>props.disabled?props.theme.colours.color9:props.theme.colours.color4};
|
||||||
|
transition: ease-in-out 225ms;
|
||||||
|
&:hover{
|
||||||
|
background-color: ${props=>props.disabled?props.theme.colours.color9:props.theme.colours.color3};
|
||||||
|
color: ${props=>props.disabled?props.theme.colours.color1:props.theme.colours.color6};
|
||||||
|
border: solid .1em ${props=>props.disabled?props.theme.colours.color7:props.theme.colours.color10};
|
||||||
|
text-shadow: 0 0 .2em ${props=>props.disabled?"transparent":props.theme.colours.color9};
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export default Button
|
@ -7,6 +7,8 @@ background: ${props=>props.theme.colours.color1};
|
|||||||
border-radius: 1em;
|
border-radius: 1em;
|
||||||
padding: 1em;
|
padding: 1em;
|
||||||
margin: 1em;
|
margin: 1em;
|
||||||
|
display: block;
|
||||||
|
flex-direction: column;
|
||||||
h4 {
|
h4 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
50
web/src/components/Checkbox.jsx
Normal file
50
web/src/components/Checkbox.jsx
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
import styled from "styled-components";
|
||||||
|
import Hook from './Checkbox.svg'
|
||||||
|
const CheckboxOrigin = styled.input.attrs({ type: 'checkbox' })`
|
||||||
|
visibility: hidden;
|
||||||
|
`;
|
||||||
|
|
||||||
|
|
||||||
|
const CheckboxStyled = styled.div`
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
font-size: 1em;
|
||||||
|
width: 1em;
|
||||||
|
height: 1em;
|
||||||
|
font-weight: bold;
|
||||||
|
color: ${props => props.disabled ? props.theme.colours.color1 : props.theme.colours.color3};
|
||||||
|
border: solid .1em ${props => props.disabled ? props.theme.colours.color7 : props.theme.colours.color3};
|
||||||
|
background: ${props => props.disabled ? props.theme.colours.color9 : props.theme.colours.color4};
|
||||||
|
transition: ease-in-out 125ms;
|
||||||
|
|
||||||
|
${CheckboxOrigin}:checked +&{
|
||||||
|
border: solid .1em ${props => props.disabled ? props.theme.colours.color7 : props.theme.colours.color3};
|
||||||
|
background-color: ${props => props.disabled ? props.theme.colours.color9 : props.theme.colours.color3};
|
||||||
|
color: ${props => props.disabled ? props.theme.colours.color1 : props.theme.colours.color6};
|
||||||
|
background-image: url(${Hook});
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
${CheckboxOrigin}:hover +&{
|
||||||
|
background-color: ${props => props.disabled ? props.theme.colours.color9 : props.theme.colours.color3};
|
||||||
|
color: ${props => props.disabled ? props.theme.colours.color1 : props.theme.colours.color6};
|
||||||
|
border: solid .1em ${props => props.disabled ? props.theme.colours.color7 : props.theme.colours.color10};
|
||||||
|
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
const CheckboxWrapper = styled.label`
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
`;
|
||||||
|
|
||||||
|
|
||||||
|
const Checkbox = ({ className, checked, ...props }) => (
|
||||||
|
<CheckboxWrapper className={className}>
|
||||||
|
<CheckboxOrigin checked={checked} {...props} />
|
||||||
|
<CheckboxStyled checked={checked} />
|
||||||
|
</CheckboxWrapper>
|
||||||
|
|
||||||
|
);
|
||||||
|
export default Checkbox;
|
11
web/src/components/Checkbox.svg
Normal file
11
web/src/components/Checkbox.svg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 25.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 500 500" style="enable-background:new 0 0 500 500;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#FFFFFF;stroke:#000000;stroke-miterlimit:10;}
|
||||||
|
</style>
|
||||||
|
<path class="st0" d="M26.66,289.39l138.79,155.55c7.35,8.24,20.27,8.1,27.45-0.28l278.92-325.86c5.17-6.04,5.83-14.73,1.63-21.48
|
||||||
|
l-27.59-44.36c-6.48-10.41-21.18-11.59-29.23-2.34L214.5,282.9c-7.55,8.67-21.14,8.28-28.17-0.82l-89.7-116.01
|
||||||
|
c-8.54-11.05-25.83-8.78-31.23,4.1L23.45,270.2C20.73,276.68,21.98,284.14,26.66,289.39z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 770 B |
25
web/src/components/ColourPalette.jsx
Normal file
25
web/src/components/ColourPalette.jsx
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import styled from 'styled-components'
|
||||||
|
import { useContext } from 'react';
|
||||||
|
import { ThemeContext } from 'styled-components';
|
||||||
|
const Element = styled.div`
|
||||||
|
//width: 1em;
|
||||||
|
height: 2em;
|
||||||
|
display: block;
|
||||||
|
background: ${props=> props.bg};
|
||||||
|
color: #707070;
|
||||||
|
padding: .5em;
|
||||||
|
|
||||||
|
`;
|
||||||
|
export default function ColourPalette() {
|
||||||
|
var colours = useContext(ThemeContext).colours;
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
|
||||||
|
|
||||||
|
{Object.keys(colours).map((name, index) => (
|
||||||
|
<Element bg={colours[name]}>{name}</Element>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
import React, { Component } from 'react'
|
import React, { Component } from 'react'
|
||||||
import TextInput from './TextInput'
|
import TextInput from './TextInput'
|
||||||
import Card from './Card'
|
import Card from './Card'
|
||||||
|
import Button from './Button'
|
||||||
export class CreateUserWidget extends Component {
|
export class CreateUserWidget extends Component {
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
@ -13,7 +14,7 @@ export class CreateUserWidget extends Component {
|
|||||||
<TextInput id="pin" label="PIN" />
|
<TextInput id="pin" label="PIN" />
|
||||||
<TextInput id="rfid" disabled label="RFID" button="Scan" value="Scanning RFID" onClick={(e)=>{console.log("Button Pressed",e)}}/>
|
<TextInput id="rfid" disabled label="RFID" button="Scan" value="Scanning RFID" onClick={(e)=>{console.log("Button Pressed",e)}}/>
|
||||||
<TextInput id="Expire_Date" label="Expire Date" type="date" />
|
<TextInput id="Expire_Date" label="Expire Date" type="date" />
|
||||||
<button>Add</button>
|
<Button>Create User</Button><Button disabled>Disabled</Button>
|
||||||
</Card>
|
</Card>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ export class SearchBox extends Component {
|
|||||||
border-radius: .5rem;
|
border-radius: .5rem;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
margin-left: auto;
|
//margin-left: auto;
|
||||||
transition: ease-in-out all 500ms;
|
transition: ease-in-out all 500ms;
|
||||||
flex-grow: 0;
|
flex-grow: 0;
|
||||||
max-width: 20em;
|
max-width: 20em;
|
||||||
@ -28,7 +28,7 @@ export class SearchBox extends Component {
|
|||||||
background: ${this.props.theme.colours.color3};
|
background: ${this.props.theme.colours.color3};
|
||||||
border: none;
|
border: none;
|
||||||
outline: none;
|
outline: none;
|
||||||
color: ${this.props.theme.colours.color6};
|
color: ${this.props.theme.colours.color10};
|
||||||
flex-grow: 0;
|
flex-grow: 0;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -41,6 +41,7 @@ export class SearchBox extends Component {
|
|||||||
+ button{
|
+ button{
|
||||||
height: 2rem;
|
height: 2rem;
|
||||||
border: none;
|
border: none;
|
||||||
|
transition: ease-in-out all 100ms;
|
||||||
color: ${this.props.theme.colours.color6};
|
color: ${this.props.theme.colours.color6};
|
||||||
border-radius: 0 .5rem .5rem 0;
|
border-radius: 0 .5rem .5rem 0;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
|
22
web/src/components/Select.jsx
Normal file
22
web/src/components/Select.jsx
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import styled from "styled-components";
|
||||||
|
|
||||||
|
const Select = styled.select`
|
||||||
|
font-size: 1em;
|
||||||
|
font-weight: bold;
|
||||||
|
color: ${props=>props.disabled?props.theme.colours.color1:props.theme.colours.color3};
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0.3em 0.5em;
|
||||||
|
border: solid .1em ${props=>props.disabled?props.theme.colours.color7:props.theme.colours.color3};
|
||||||
|
background: ${props=>props.disabled?props.theme.colours.color9:props.theme.colours.color4};
|
||||||
|
transition: ease-in-out 225ms;
|
||||||
|
|
||||||
|
option {
|
||||||
|
background-color: ${props=>props.disabled?props.theme.colours.color9:props.theme.colours.color3};
|
||||||
|
color: ${props=>props.disabled?props.theme.colours.color1:props.theme.colours.color6};
|
||||||
|
border: solid .1em ${props=>props.disabled?props.theme.colours.color7:props.theme.colours.color10};
|
||||||
|
text-shadow: 0 0 .2em ${props=>props.disabled?"transparent":props.theme.colours.color9};
|
||||||
|
}
|
||||||
|
|
||||||
|
`;
|
||||||
|
|
||||||
|
export default Select;
|
21
web/src/components/Table.jsx
Normal file
21
web/src/components/Table.jsx
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import styled from "styled-components";
|
||||||
|
const Table = styled.table`
|
||||||
|
width: 100%;
|
||||||
|
border-spacing: 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
thead{
|
||||||
|
background-color: ${props=>props.theme.colours.color9};
|
||||||
|
font-weight: bold;
|
||||||
|
|
||||||
|
}
|
||||||
|
tbody tr:not(:last-child){
|
||||||
|
border-bottom: 1px solid ${props=>props.theme.colours.color9};
|
||||||
|
}
|
||||||
|
tr:nth-child(2){
|
||||||
|
background-color: ${props=>props.theme.colours.color1};
|
||||||
|
}
|
||||||
|
td{
|
||||||
|
padding: 0.5em 1em;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
export default Table;
|
@ -99,7 +99,7 @@ export class TextInput extends Component {
|
|||||||
`;
|
`;
|
||||||
return (
|
return (
|
||||||
<InputWrapper>
|
<InputWrapper>
|
||||||
<input id={this.props.id} placeholder="" type={this.props.type ? this.props.type : "text"} value={this.props.value} disabled={this.props.disabled} />
|
<input id={this.props.id} placeholder=" " type={this.props.type ? this.props.type : "text"} value={this.props.value} disabled={this.props.disabled} />
|
||||||
{this.props.label != null ? <label htmlFor={this.props.id}>{this.props.label}</label> : ""}
|
{this.props.label != null ? <label htmlFor={this.props.id}>{this.props.label}</label> : ""}
|
||||||
{this.props.button != null ? <button onClick={this.props.onClick}>{this.props.button}</button> : ""}
|
{this.props.button != null ? <button onClick={this.props.onClick}>{this.props.button}</button> : ""}
|
||||||
</InputWrapper>
|
</InputWrapper>
|
||||||
|
@ -2,4 +2,11 @@ import CreateUserWidget from "./CreateUserWidget";
|
|||||||
import RecentActivityWidget from "./RecentActivityWidget";
|
import RecentActivityWidget from "./RecentActivityWidget";
|
||||||
import SystemStatusWidget from "./SystemStatusWidget";
|
import SystemStatusWidget from "./SystemStatusWidget";
|
||||||
import SearchBox from "./SearchBox";
|
import SearchBox from "./SearchBox";
|
||||||
export { CreateUserWidget, RecentActivityWidget, SystemStatusWidget, SearchBox }
|
import Card from "./Card";
|
||||||
|
import TextInput from "./TextInput";
|
||||||
|
import Button from "./Button";
|
||||||
|
import Select from "./Select";
|
||||||
|
import Checkbox from "./Checkbox";
|
||||||
|
import ColourPalette from "./ColourPalette";
|
||||||
|
import Table from "./Table";
|
||||||
|
export { CreateUserWidget, RecentActivityWidget, SystemStatusWidget, SearchBox, Card, TextInput, Button, Select, Checkbox, Table, ColourPalette}
|
@ -13,7 +13,7 @@ const colours1 = {
|
|||||||
const colours2 = {
|
const colours2 = {
|
||||||
color1: "#1e2e2e",
|
color1: "#1e2e2e",
|
||||||
color2: "#273a37",
|
color2: "#273a37",
|
||||||
color3: "#43f48d",
|
color3: "#18cb64",
|
||||||
color4: "#012400be",
|
color4: "#012400be",
|
||||||
color5: "#254904c6",
|
color5: "#254904c6",
|
||||||
color6: "#daebd9bf",
|
color6: "#daebd9bf",
|
||||||
|
13
web/src/views/AccountEdit.jsx
Normal file
13
web/src/views/AccountEdit.jsx
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import React, { Component } from 'react'
|
||||||
|
|
||||||
|
export class AccountEdit extends Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default AccountEdit
|
@ -1,15 +1,72 @@
|
|||||||
import React, { Component } from 'react'
|
import React, { Component } from 'react'
|
||||||
import Card from '../components/Card'
|
import Card from '../components/Card'
|
||||||
|
import styled, { withTheme } from 'styled-components'
|
||||||
|
import { Button, Table, Select, Checkbox } from '../components';
|
||||||
|
|
||||||
export class AccountManager extends Component {
|
export class AccountManager extends Component {
|
||||||
render() {
|
render() {
|
||||||
|
const ActionSelect = styled.div`
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
`;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Card>
|
<>
|
||||||
<h4>Account Manager</h4>
|
|
||||||
<hr/>
|
<h3>Account Manager</h3>
|
||||||
Hello World
|
<Table>
|
||||||
</Card>
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<td>UserID</td>
|
||||||
|
<td>First Name</td>
|
||||||
|
<td>Last Name</td>
|
||||||
|
<td>Last Access</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>001</td>
|
||||||
|
<td>Anton</td>
|
||||||
|
<td>Stigloher</td>
|
||||||
|
<td>06.10.2021</td>
|
||||||
|
<td><Button>More</Button></td>
|
||||||
|
<td><ActionSelect><Checkbox/></ActionSelect></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>002</td>
|
||||||
|
<td>Max</td>
|
||||||
|
<td>Mustermann</td>
|
||||||
|
<td>07.10.2021</td>
|
||||||
|
<td><Button>More</Button></td>
|
||||||
|
<td><ActionSelect><Checkbox/></ActionSelect></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>003</td>
|
||||||
|
<td>Peter</td>
|
||||||
|
<td>Lustig</td>
|
||||||
|
<td>08.10.2021</td>
|
||||||
|
<td><Button>More</Button></td>
|
||||||
|
<td><ActionSelect><Checkbox/></ActionSelect></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
|
||||||
|
</Table>
|
||||||
|
<ActionSelect><Select>
|
||||||
|
<option>Extend</option>
|
||||||
|
<option>Enable</option>
|
||||||
|
<option>Disable</option>
|
||||||
|
<option>Delete</option>
|
||||||
|
</Select>
|
||||||
|
<Button>Apply</Button>
|
||||||
|
</ActionSelect>
|
||||||
|
|
||||||
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default AccountManager
|
export default withTheme(AccountManager)
|
||||||
|
@ -30,37 +30,28 @@ export class AdminUI extends Component {
|
|||||||
-ms-grid-column: 1;
|
-ms-grid-column: 1;
|
||||||
-ms-grid-column-span: 3;
|
-ms-grid-column-span: 3;
|
||||||
grid-area: header;
|
grid-area: header;
|
||||||
display: -webkit-inline-box;
|
|
||||||
display: -ms-inline-flexbox;
|
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
-ms-flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
flex-wrap: wrap;
|
flex-direction: row;
|
||||||
-webkit-box-orient: horizontal;
|
|
||||||
-webkit-box-direction: normal;
|
|
||||||
-ms-flex-direction: row;
|
|
||||||
flex-direction: row;
|
|
||||||
min-height: auto;
|
min-height: auto;
|
||||||
padding: .5em;
|
padding: .5em;
|
||||||
-webkit-box-pack: end;
|
justify-content: space-between;
|
||||||
-ms-flex-pack: end;
|
align-items: center;
|
||||||
justify-content: flex-end;
|
|
||||||
-webkit-box-align: center;
|
|
||||||
-ms-flex-align: center;
|
|
||||||
align-items: center;
|
|
||||||
background: ${this.props.theme.colours.color1};
|
background: ${this.props.theme.colours.color1};
|
||||||
color: ${this.props.theme.colours.color7};
|
color: ${this.props.theme.colours.color7};
|
||||||
h1 {
|
h1 {
|
||||||
-ms-flex-wrap: nowrap;
|
-ms-flex-wrap: nowrap;
|
||||||
flex-wrap: nowrap;
|
flex-wrap: nowrap;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
display: -webkit-inline-box;
|
|
||||||
display: -ms-inline-flexbox;
|
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
font-size: 1.5em;
|
font-size: 1.5em;
|
||||||
|
margin: .5em;
|
||||||
|
margin-right: auto;
|
||||||
|
padding-right: 2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
&::after {
|
&::after {
|
||||||
-ms-grid-column-align: start;
|
|
||||||
justify-self: start;
|
justify-self: start;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
display: block;
|
display: block;
|
||||||
@ -73,6 +64,7 @@ export class AdminUI extends Component {
|
|||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
nav{
|
nav{
|
||||||
|
margin-left: auto;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
flex-wrap: nowrap;
|
flex-wrap: nowrap;
|
||||||
flex-shrink: 1;
|
flex-shrink: 1;
|
||||||
@ -207,6 +199,7 @@ export class AdminUI extends Component {
|
|||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
padding: 1em;
|
padding: 1em;
|
||||||
|
color: ${props=>props.theme.colours.color6};
|
||||||
background: ${this.props.theme.colours.color2};
|
background: ${this.props.theme.colours.color2};
|
||||||
`;
|
`;
|
||||||
return (
|
return (
|
||||||
@ -217,7 +210,7 @@ export class AdminUI extends Component {
|
|||||||
<SearchBox />
|
<SearchBox />
|
||||||
<nav>
|
<nav>
|
||||||
<ul>
|
<ul>
|
||||||
<li><Link to="/user_cp">User Settings</Link></li>
|
<li><Link to="/user_cp">Admin Settings</Link></li>
|
||||||
<li><Link to="/logout">Logout</Link></li>
|
<li><Link to="/logout">Logout</Link></li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
@ -225,9 +218,9 @@ export class AdminUI extends Component {
|
|||||||
<Menu>
|
<Menu>
|
||||||
<h3>Menu{props => this.props.theme}</h3>
|
<h3>Menu{props => this.props.theme}</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><NavLink activeClassName="menu__active" exact to="/">Status</NavLink></li>
|
<li><NavLink activeClassName="menu__active" exact to="/">Dashboard</NavLink></li>
|
||||||
<li><NavLink activeClassName="menu__active" to="/accounts">Account</NavLink></li>
|
<li><NavLink activeClassName="menu__active" to="/accounts">Accounts</NavLink></li>
|
||||||
<li><NavLink activeClassName="menu__active" to="/log">Log</NavLink></li>
|
<li><NavLink activeClassName="menu__active" to="/log">Logs</NavLink></li>
|
||||||
<li><NavLink activeClassName="menu__active" to="/system">System</NavLink></li>
|
<li><NavLink activeClassName="menu__active" to="/system">System</NavLink></li>
|
||||||
</ul>
|
</ul>
|
||||||
</Menu>
|
</Menu>
|
||||||
|
@ -1,15 +1,42 @@
|
|||||||
import React, { Component } from 'react'
|
import React, { Component } from 'react'
|
||||||
|
import styled, {withTheme} from 'styled-components'
|
||||||
|
import { Table, Button } from '../components'
|
||||||
import Card from '../components/Card'
|
import Card from '../components/Card'
|
||||||
export class Logs extends Component {
|
export class Logs extends Component {
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<Card>
|
<>
|
||||||
<h4>Logs</h4>
|
<h3>Logs</h3>
|
||||||
<hr/>
|
<Table>
|
||||||
Hello World
|
<thead>
|
||||||
</Card>
|
<tr>
|
||||||
|
<td>Time</td>
|
||||||
|
<td>Type</td>
|
||||||
|
<td>Info</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>12.12.12 08:12</td>
|
||||||
|
<td>Authentication</td>
|
||||||
|
<td>[NFC] Max Mustermann</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>12.12.12 08:12</td>
|
||||||
|
<td>Authentication Error</td>
|
||||||
|
<td>[NFC] 92:23:c3:32</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>12.12.12 08:12</td>
|
||||||
|
<td>Admin Login</td>
|
||||||
|
<td>Toni Stigloher</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</Table>
|
||||||
|
<Button>Download full Logfile</Button>
|
||||||
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Logs
|
export default withTheme(Logs)
|
||||||
|
41
web/src/views/Overlay.jsx
Normal file
41
web/src/views/Overlay.jsx
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import React, { Children, Component } from 'react'
|
||||||
|
import styled, {withTheme, createGlobalStyle} from 'styled-components'
|
||||||
|
|
||||||
|
export class Overlay extends Component {
|
||||||
|
render() {
|
||||||
|
const GlobalStyle = createGlobalStyle`
|
||||||
|
#root{
|
||||||
|
overflow : hidden ;
|
||||||
|
//pointer-events:none;
|
||||||
|
//user-select: none;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
const OverlayWrapper = styled.div`
|
||||||
|
user-select: all;
|
||||||
|
pointer-events: all;
|
||||||
|
filter: blur(0);
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: calc(100vw - 4em);
|
||||||
|
margin: 2em;
|
||||||
|
height: calc(100vh - 4em);
|
||||||
|
z-index: 2;
|
||||||
|
border-radius: 1em;
|
||||||
|
padding: 1em;
|
||||||
|
color: ${this.props.theme.colours.color3};
|
||||||
|
background: ${this.props.theme.colours.color9};
|
||||||
|
box-shadow: 0 0 2em ${this.props.theme.colours.color3};
|
||||||
|
border: 1px solid ${this.props.theme.colours.color3};
|
||||||
|
overflow: auto;
|
||||||
|
`;
|
||||||
|
return (
|
||||||
|
<OverlayWrapper>
|
||||||
|
<GlobalStyle/>
|
||||||
|
{this.props.children}
|
||||||
|
</OverlayWrapper>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default withTheme(Overlay)
|
@ -1,6 +1,6 @@
|
|||||||
import React, { Component } from 'react'
|
import React, { Component } from 'react'
|
||||||
import Card from '../components/Card'
|
import styled, {withTheme} from 'styled-components'
|
||||||
import TextInput from '../components/TextInput'
|
import {Button, Card, TextInput} from '../components'
|
||||||
export class System extends Component {
|
export class System extends Component {
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
@ -15,7 +15,7 @@ export class System extends Component {
|
|||||||
<hr />
|
<hr />
|
||||||
<TextInput label="SSID"/>
|
<TextInput label="SSID"/>
|
||||||
<TextInput label="Password" type="password"/>
|
<TextInput label="Password" type="password"/>
|
||||||
<TextInput type="button" value="SAVE"/>
|
<Button >Save</Button>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
</>
|
</>
|
||||||
@ -23,4 +23,4 @@ export class System extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default System
|
export default withTheme(System)
|
||||||
|
@ -2,4 +2,5 @@ import AdminUI from "./AdminUI";
|
|||||||
import AccountManager from "./AccountManager";
|
import AccountManager from "./AccountManager";
|
||||||
import Logs from "./Logs";
|
import Logs from "./Logs";
|
||||||
import System from "./System";
|
import System from "./System";
|
||||||
export {AccountManager, AdminUI, Logs, System}
|
import Overlay from "./Overlay";
|
||||||
|
export {AccountManager, AdminUI, Logs, System, Overlay}
|
Loading…
x
Reference in New Issue
Block a user