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 ( - - -
- -