Skip to content

Commit b22e93f

Browse files
maxwellgordonansonws
authored andcommitted
Sign In Page
1 parent 5f46b09 commit b22e93f

5 files changed

Lines changed: 61 additions & 122 deletions

File tree

src/components/App.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
33
import ProductShowPage from './ProductShowPage';
44
import ProductIndexPage from './ProductIndexPage';
55
import NewProductPage from './NewProductPage';
6+
import SignInPage from './SignInPage';
67
import HomePage from './HomePage';
78
import NavBar from './NavBar';
89

@@ -12,6 +13,7 @@ const App = () => {
1213
<div className="App">
1314
<NavBar />
1415
<Switch>
16+
<Route path="/session/new" exact component={SignInPage} />
1517
<Route path="/products/new" component={NewProductPage} />
1618
<Route path="/products/:id" component={ProductShowPage} />
1719
<Route path="/products" exact component={ProductIndexPage} />

src/components/NavBar.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ function NavBar(props) {
66
<div className="NavBar">
77
<NavLink to="/">Home</NavLink>|<NavLink to="/products">Products</NavLink>|
88
<NavLink to="/products/new">New Product</NavLink>
9+
<NavLink to="/session/new">Sign In</NavLink>
910
</div>
1011
);
1112
}

src/components/SignInPage.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import React, { Component } from "react";
2+
import { Session } from "../requests";
3+
4+
export default class SignInPage extends Component {
5+
constructor(props) {
6+
super(props);
7+
this.state = {
8+
errors: []
9+
};
10+
this.createSession = this.createSession.bind(this);
11+
}
12+
createSession(event) {
13+
event.preventDefault();
14+
const { currentTarget } = event;
15+
const formData = new FormData(currentTarget);
16+
Session.create(fromFormData(formData)).then(data => {
17+
if (data.status === "error") {
18+
this.setState({
19+
errors: [data.message]
20+
});
21+
return;
22+
}
23+
this.props.history.push("/");
24+
});
25+
}
26+
render() {
27+
const { errors } = this.state;
28+
return (
29+
<main className="SignInPage">
30+
<h1>Sign In</h1>
31+
<form onSubmit={this.createSession}>
32+
{errors.length > 0 ? (
33+
<p className="FormErrors">{errors.join(", ")}</p>
34+
) : null}
35+
<div>
36+
<label htmlFor="email">Email</label>
37+
<br />
38+
<input type="email" name="email" id="email" />
39+
</div>
40+
<div>
41+
<label htmlFor="password">Password</label>
42+
<br />
43+
<input type="password" name="password" id="password" />
44+
</div>
45+
<input type="submit" value="Submit" />
46+
</form>
47+
</main>
48+
);
49+
}
50+
}
51+
52+
const fromFormData = formData => {
53+
const newObj = {};
54+
for (let [name, value] of formData) {
55+
newObj[name] = value;
56+
}
57+
return newObj;
58+
};

src/data/product.js

Lines changed: 0 additions & 43 deletions
This file was deleted.

src/data/productList.js

Lines changed: 0 additions & 79 deletions
This file was deleted.

0 commit comments

Comments
 (0)