diff --git a/src/components/Content/Content.js b/src/components/Content/Content.js
index fcf3bdd..579a6a9 100644
--- a/src/components/Content/Content.js
+++ b/src/components/Content/Content.js
@@ -1,23 +1,17 @@
import React, { Component } from 'react';
import { Route, Switch } from 'react-router-dom';
-import Error from '../../scenes/Error/Error';
-
-import { defineCustomElements } from 'corporate-ui-dev';
-
-defineCustomElements(['c-content']);
+import { routes } from '../../routes';
class Content extends Component {
render() {
return (
- {this.props.items.map((item, key) => [
- ,
-
- ]
- )}
-
+ {routes.map((item, key) => [
+ ,
+
+ ])}
);
diff --git a/src/components/Header/Header.js b/src/components/Header/Header.js
index c7226e1..9eaeac7 100644
--- a/src/components/Header/Header.js
+++ b/src/components/Header/Header.js
@@ -1,102 +1,16 @@
import React, { Component } from 'react';
import { NavLink } from 'react-router-dom';
-import Content from '../Content/Content'
-import { UncontrolledDropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
-import data from './../../../package.json';
+// CSS
import './Header.scss';
-import { defineCustomElements } from 'corporate-ui-dev';
-
-defineCustomElements(['c-header', 'c-navigation']);
-
-const Subnav = (props) => {
- if(props.item && props.item.children) {
- return (
-
- { props.item.children.map((child, key) =>
- {child.name}
- ) }
-
- )
-
- } else {
- return '';
- }
-}
-
class Header extends Component {
- constructor(props) {
- super(props);
- this.toggle = this.toggle.bind(this);
- this.onLoadActive = {};
- this.state = {
- active: {},
- dropdownOpen: false
- };
- }
-
- setActive(item) {
- this.setState({ active: item });
- }
-
- toggle() {
- this.setState(prevState => ({
- dropdownOpen: !prevState.dropdownOpen
- }));
- }
-
- matchUrl = (match, location) => {
- const activeSegment = location.pathname.match(/^\/+\w*/gm);
- if(match) {
- this.onLoadActive = this.props.items.find(item => {
- return item.url === activeSegment[0];
- })
- }
- return match;
- }
-
- componentDidUpdate(prevProps, prevState) {
- if(prevState.active !== this.onLoadActive) this.setActive(this.onLoadActive)
- }
-
render() {
- return [
+ return (
global
- ,
-
- {this.props.items.map((item, key) =>
- this.setActive(item)}
- isActive={this.matchUrl}
- >{item.name}
-
- )}
-
-
-
- User
-
-
- Profile
- Settings
-
-
-
-
-
- ];
+
+ );
}
}
diff --git a/src/components/Header/Header.scss b/src/components/Header/Header.scss
index 6082289..6090760 100644
--- a/src/components/Header/Header.scss
+++ b/src/components/Header/Header.scss
@@ -1,19 +1,3 @@
@import "~bootstrap/scss/functions";
@import "~bootstrap/scss/variables";
@import "~bootstrap/scss/mixins";
-
-@import '~bootstrap/scss/dropdown';
-
-
-.dropdown-toggle {
- padding:0;
- cursor: pointer;
- color: #909090;
-
- &:after {
- margin-right: 25px;
- }
- .show & {
- color: #041e42;
- }
-}
\ No newline at end of file
diff --git a/src/components/Navigation/Navigation.js b/src/components/Navigation/Navigation.js
new file mode 100644
index 0000000..e93fac4
--- /dev/null
+++ b/src/components/Navigation/Navigation.js
@@ -0,0 +1,65 @@
+import React, { Component } from 'react';
+import { NavLink } from 'react-router-dom';
+import { withRouter } from 'react-router';
+
+import { routes } from '../../routes';
+
+// CSS
+import './Navigation.scss';
+
+const NavItem = (props) => (
+ props.active}
+ { ...props.item.attrs }
+ >{props.item.name}
+
+);
+
+class Navigation extends Component {
+ constructor(props) {
+ super(props);
+
+ this.parent = ''
+ this.active = {}
+
+ this.setActive();
+
+ this.props.history.listen((location) => this.setActive(location));
+ }
+
+ setActive(location=this.props.location) {
+ this.parent = '/' + location.pathname.split('/')[1]
+ this.active = routes.find(item => item.url === this.parent) || {}
+ }
+
+ render() {
+ return (
+
+ {routes.map((item, key) =>
+
+ )}
+
+
+
User
+
+
+ Profile
+ Settings
+
+
+
+
+ {(this.active.children || []).map((child, key) =>
+
+ )}
+
+
+ );
+ }
+}
+
+export default withRouter(Navigation);
diff --git a/src/components/Navigation/Navigation.scss b/src/components/Navigation/Navigation.scss
new file mode 100644
index 0000000..62cbb8b
--- /dev/null
+++ b/src/components/Navigation/Navigation.scss
@@ -0,0 +1,19 @@
+@import "~bootstrap/scss/functions";
+@import "~bootstrap/scss/variables";
+@import "~bootstrap/scss/mixins";
+
+@import '~bootstrap/scss/dropdown';
+
+
+.dropdown-toggle {
+ padding:0;
+ cursor: pointer;
+ color: #909090;
+
+ &:after {
+ margin-right: 25px;
+ }
+ .show & {
+ color: #041e42;
+ }
+}
\ No newline at end of file
diff --git a/src/index.js b/src/index.js
index 454c292..d69ca2f 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,57 +1,34 @@
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router } from 'react-router-dom';
+import { defineCustomElements, addTheme } from 'corporate-ui-dev';
+import { theme as scania } from 'scania-theme';
+import * as serviceWorker from './serviceWorker';
import data from '../package.json';
-import './index.scss';
-// Scenes
import Header from './components/Header/Header';
+import Navigation from './components/Navigation/Navigation';
import Content from './components/Content/Content';
import Footer from './components/Footer/Footer';
-// Components
-import Home from './scenes/Home/Home';
-import Info from './scenes/Info/Info';
-
-import * as serviceWorker from './serviceWorker';
-
-import { defineCustomElements, addTheme } from 'corporate-ui-dev';
-import { theme as scania } from 'scania-theme';
+// CSS
+import './index.scss';
-defineCustomElements(['c-container', 'c-theme']);
+defineCustomElements(['c-theme', 'c-header', 'c-navigation', 'c-content', 'c-footer']);
addTheme(scania);
+// TODO: Remove constructor and didMount and change to routes instead of items
class App extends Component {
- constructor(props) {
- super(props)
- this.state = {ITEMS:[]}
- }
-
- componentDidMount() {
- this.setState({
- ITEMS: [
- { name: 'Home', url: '/', ctrl: Home, attrs: { exact: true }, type : 'primary' },
- {
- name: 'Info', url: '/info', ctrl: Info, type : 'primary',
- children: [
- { name: 'List', url:'/list', ctrl: Info, type : 'primary' },
- { name: 'Table', url:'/table', ctrl: Info, type : 'primary' },
- { name: 'Form', url:'/form', ctrl: Info, type : 'primary' }
- ]
- },
- ]
- })
- }
-
render () {
return (
-
-
-
-
-
-
+
+
+
+
+
+
+
)
}
}
diff --git a/src/routes.js b/src/routes.js
new file mode 100644
index 0000000..b355e57
--- /dev/null
+++ b/src/routes.js
@@ -0,0 +1,16 @@
+import Home from './scenes/Home/Home';
+import Info from './scenes/Info/Info';
+import Error from './scenes/Error/Error';
+
+export const routes = [
+ { name: 'Home', url: '/', ctrl: Home, attrs: { exact: true }, type : 'primary' },
+ {
+ name: 'Info', url: '/info', ctrl: Info, type : 'primary',
+ children: [
+ { name: 'List', url: '/list', ctrl: Info, type : 'primary' },
+ { name: 'Table', url: '/table', ctrl: Info, type : 'primary' },
+ { name: 'Form', url: '/form', ctrl: Info, type : 'primary' },
+ ]
+ },
+ { name: 'Error', ctrl: Error },
+]
diff --git a/src/scenes/Info/Info.js b/src/scenes/Info/Info.js
index 6110dd7..b7dd9cd 100644
--- a/src/scenes/Info/Info.js
+++ b/src/scenes/Info/Info.js
@@ -52,20 +52,19 @@ function DetailInfo( {match} ) {
}
class Info extends Component {
- constructor(props) {
- super(props);
- }
render() {
return (
Info
{this.props.match.params.id}
-