Change ReactSpa template to something more like a dashboard with sidebar navigation

This commit is contained in:
SteveSandersonMS
2016-02-24 14:41:29 +00:00
parent eac76683cc
commit a6ea8b5101
9 changed files with 122 additions and 159 deletions

View File

@@ -3,9 +3,11 @@ import * as React from 'react';
export class About extends React.Component<void, void> {
public render() {
return <div>
<h2>About</h2>
<h1>About</h1>
<p>Use this area to provide additional information.</p>
<p>This is another component.</p>
<p>It's here to demonstrate navigation.</p>
</div>;
}
}

View File

@@ -12,7 +12,7 @@ export class Counter extends React.Component<void, CounterState> {
public render() {
return <div>
<h2>Counter</h2>
<h1>Counter</h1>
<p>This is a simple example of a React component.</p>

View File

@@ -1,53 +1,24 @@
import * as React from 'react';
import { carouselItems } from '../data/CarouselItems';
import { linkLists } from '../data/HomepageLinkLists';
export class Home extends React.Component<void, void> {
public render() {
return <div>
{ /* Carousel */ }
<div id="myCarousel" className="carousel slide" data-ride="carousel" data-interval="6000">
<ol className="carousel-indicators">
{ carouselItems.map((item, index) =>
<li key={ index } data-target="#myCarousel" data-slide-to={ index } className={ index == 0 ? "active" : "" }></li>
)}
</ol>
<div className="carousel-inner" role="listbox">
{ carouselItems.map((item, index) =>
<div key={ index } className={ "item " + (index == 0 ? "active" : "") }>
<img src={ item.imageUrl } alt={ item.imageAlt } className="img-responsive" />
<div className="carousel-caption">
<p>
{ item.text }
<a className="btn btn-default" href={ item.learnMoreUrl }>Learn More</a>
</p>
</div>
</div>
)}
</div>
<a className="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
<span className="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span className="sr-only">Previous</span>
</a>
<a className="right carousel-control" href="#myCarousel" role="button" data-slide="next">
<span className="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span className="sr-only">Next</span>
</a>
</div>
{ /* Lists of links */ }
<div className="row">
{ linkLists.map((list, listIndex) =>
<div key={listIndex} className="col-md-3">
<h2>{ list.title }</h2>
<ul>
{ list.entries.map((entry, entryIndex) =>
<li key={ entryIndex }>{ entry }</li>
)}
</ul>
</div>
)}
</div>
<h1>Hello, world!</h1>
<p>Welcome to your new single-page application, built with:</p>
<ul>
<li><a href="https://get.asp.net/">ASP.NET Core</a> and <a href="https://msdn.microsoft.com/en-us/library/67ef8sbd.aspx">C#</a> for cross-platform server-side code</li>
<li><a href="https://facebook.github.io/react/">React</a> and <a href="http://www.typescriptlang.org/">TypeScript</a> for client-side code</li>
<li><a href="https://webpack.github.io/">Webpack</a> for building and bundling client-side resources</li>
<li><a href="http://getbootstrap.com/">Bootstrap</a> for layout and styling</li>
</ul>
<p>To help you get started, we've also set up:</p>
<ul>
<li><strong>Client-side navigation</strong>. For example, click <em>About</em> then <em>Back</em> to return here.</li>
<li><strong>Server-side prerendering</strong>. For optimal performance, your React application is first executed on the server. The resulting HTML and state is then transferred to the client to continue execution. This is also known as being an <em>isomorphic</em> or <em>universal</em> application.</li>
<li><strong>Webpack dev middleware</strong>. In development mode, there's no need to run the <code>webpack</code> build tool. Your client-side resources are dynamically built on demand. Updates are available as soon as you modify any file.</li>
<li><strong>Hot module replacement</strong>. In development mode, you don't even need to reload the page after making most changes. Within seconds of saving changes to files, rebuilt CSS and React components will be injected directly into your running application, preserving its live state.</li>
<li><strong>Efficient production builds</strong>. In production mode, development-time features are disabled, and the <code>webpack</code> build tool produces minified static CSS and JavaScript files.</li>
</ul>
</div>;
}
}

View File

@@ -0,0 +1,21 @@
import * as React from 'react';
import { NavMenu } from './NavMenu';
export interface LayoutProps {
body: React.ReactElement<any>;
}
export class Layout extends React.Component<LayoutProps, void> {
public render() {
return <div className="container-fluid">
<div className="row">
<div className="col-sm-3">
<NavMenu />
</div>
<div className="col-sm-9">
{ this.props.body }
</div>
</div>
</div>;
}
}

View File

@@ -1,9 +1,10 @@
import * as React from 'react';
import { Link } from 'react-router';
export class NavMenu extends React.Component<void, void> {
public render() {
return <div className="navbar navbar-inverse navbar-fixed-top">
<div className="container">
return <div className="main-nav">
<div className="navbar navbar-inverse">
<div className="navbar-header">
<button type="button" className="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span className="sr-only">Toggle navigation</span>
@@ -13,11 +14,24 @@ export class NavMenu extends React.Component<void, void> {
</button>
<Link className="navbar-brand" to={ '/' }>WebApplicationBasic</Link>
</div>
<div className="clearfix"></div>
<div className="navbar-collapse collapse">
<ul className="nav navbar-nav">
<li><Link to={ '/' }>Home</Link></li>
<li><Link to={ '/about' }>About</Link></li>
<li><Link to={ '/counter' }>Counter</Link></li>
<li>
<Link to={ '/' } activeClassName='active'>
<span className="glyphicon glyphicon-home"></span> Home
</Link>
</li>
<li>
<Link to={ 'about' } activeClassName='active'>
<span className="glyphicon glyphicon-info-sign"></span> About
</Link>
</li>
<li>
<Link to={ '/counter' } activeClassName='active'>
<span className="glyphicon glyphicon-education"></span> Counter
</Link>
</li>
</ul>
</div>
</div>