Skip to content

Commit 4fd539b

Browse files
committed
[WIP] User creation
1 parent c86b6ac commit 4fd539b

File tree

16 files changed

+1328
-80
lines changed

16 files changed

+1328
-80
lines changed

.eslintrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
},
1616
"env": {
1717
"es6": true,
18-
"node": false
18+
"node": true
1919
},
2020
"rules": {
2121
"prettier/prettier": "error"

.storybook/addons.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */
2+
3+
import "@storybook/addon-actions/register";
4+
import "@storybook/addon-links/register";

.storybook/config.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */
2+
3+
import { configure } from "@storybook/react";
4+
5+
function loadStories() {
6+
require("../stories");
7+
}
8+
9+
configure(loadStories, module);

.travis.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
language: node_js
2+
node_js:
3+
- 6
4+
cache:
5+
directories:
6+
- node_modules
7+
script:
8+
- npm run build
9+
- npm test

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@ This project was bootstrapped with [Create React App](https://github.com/faceboo
77

88
# Dependence library
99
* [Rebass](http://jxnblk.com/rebass/)
10+
* [react-snapshot](https://www.npmjs.com/package/react-snapshot)
11+
* [styled-components](https://github.com/styled-components/styled-components)

package.json

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,31 @@
11
{
22
"name": "react-users-crud-demo",
3+
"homepage": "https://jellydn.github.io/react-users-crud-demo",
34
"version": "0.1.0",
45
"private": true,
56
"dependencies": {
7+
"gh-pages": "^1.0.0",
8+
"prop-types": "^15.5.10",
69
"react": "^15.6.1",
710
"react-dom": "^15.6.1",
811
"react-scripts": "1.0.11",
9-
"rebass": "^1.0.4"
12+
"react-snapshot": "^2.0.0-1",
13+
"rebass": "^1.0.4",
14+
"styled-components": "^2.1.2"
1015
},
1116
"scripts": {
1217
"start": "react-scripts start",
13-
"build": "react-scripts build",
18+
"build": "react-scripts build && react-snapshot",
1419
"test": "react-scripts test --env=jsdom",
1520
"eject": "react-scripts eject",
16-
"precommit": "lint-staged"
21+
"precommit": "lint-staged",
22+
"storybook": "start-storybook -p 6006",
23+
"build-storybook": "build-storybook",
24+
"predeploy": "npm run build",
25+
"deploy": "gh-pages -d build"
1726
},
1827
"devDependencies": {
28+
"@storybook/react": "^3.2.5",
1929
"eslint-config-prettier": "^2.3.0",
2030
"eslint-plugin-prettier": "^2.2.0",
2131
"eslint-plugin-react": "^7.2.1",

src/App.css

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

src/App.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
1-
import React, { Component } from "react";
2-
import { Provider, Heading, Button } from "rebass";
3-
import "./App.css";
1+
import React, { PureComponent } from 'react';
2+
import { Provider } from 'rebass';
3+
import { injectGlobal } from 'styled-components';
4+
import Users from './containers/Users';
45

5-
class App extends Component {
6+
injectGlobal`
7+
* { box-sizing: border-box; }
8+
body { margin: 0; }
9+
`;
10+
11+
class App extends PureComponent {
612
render() {
713
return (
814
<div className="App">
915
<Provider>
10-
<Heading>Simple Users CRUD</Heading>
11-
<Button>Rebass</Button>
16+
<Users />
1217
</Provider>
1318
</div>
1419
);
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import React, { PureComponent } from 'react';
2+
import PropTypes from 'prop-types';
3+
import { Container, Row, Input, Button } from 'rebass';
4+
5+
class UserCreation extends PureComponent {
6+
static propTypes = {
7+
name: PropTypes.string.isRequired,
8+
age: PropTypes.number.isRequired,
9+
nickname: PropTypes.string.isRequired,
10+
onChange: PropTypes.func.isRequired,
11+
onSave: PropTypes.func.isRequired,
12+
onCancel: PropTypes.func.isRequired
13+
};
14+
15+
static defaultProps = {
16+
name: '',
17+
age: 10,
18+
nickname: '',
19+
onChange: (field, value) => {},
20+
onSave: user => {},
21+
onCancel: () => {}
22+
};
23+
24+
render() {
25+
const { age, name, nickname } = this.props;
26+
27+
return (
28+
<Container>
29+
<Row>
30+
<Input
31+
placeholder="Name"
32+
name="name"
33+
value={name}
34+
onChange={evt => this.props.onChange('name', evt.target.value)}
35+
/>
36+
<Input
37+
type="number"
38+
placeholder="0"
39+
name="age"
40+
value={age}
41+
onChange={evt => this.props.onChange('age', evt.target.value)}
42+
/>
43+
<Input
44+
placeholder="Nickname"
45+
name="nickname"
46+
value={nickname}
47+
onChange={evt => this.props.onChange('nickname', evt.target.value)}
48+
/>
49+
<Button onClick={this.props.onSave} children="Save" />
50+
<Button onClick={this.props.onCancel} children="Cancel" />
51+
</Row>
52+
</Container>
53+
);
54+
}
55+
}
56+
57+
export default UserCreation;
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 PropTypes from 'prop-types';
3+
import { Row, Column, Button } from 'rebass';
4+
5+
class UserItem extends Component {
6+
static propTypes = {
7+
id: PropTypes.number.isRequired,
8+
name: PropTypes.string.isRequired,
9+
age: PropTypes.number.isRequired,
10+
nickname: PropTypes.string.isRequired,
11+
isEdit: PropTypes.bool.isRequired
12+
};
13+
14+
static defaultProps = {
15+
id: 0,
16+
name: '',
17+
age: 0,
18+
nickname: '',
19+
isEdit: false
20+
};
21+
22+
renderAction = isEdit => {
23+
if (isEdit) {
24+
return (
25+
<Column>
26+
<Button children="Edit" />
27+
<Button children="Cancel" />
28+
</Column>
29+
);
30+
}
31+
return (
32+
<Column>
33+
<Button children="Edit" />
34+
<Button children="Delete" />
35+
</Column>
36+
);
37+
};
38+
39+
render() {
40+
const { id, name, age, nickname, isEdit } = this.props;
41+
return (
42+
<Row key={`${id}-${nickname}`}>
43+
<Column>
44+
{name}
45+
</Column>
46+
<Column>
47+
{age}
48+
</Column>
49+
<Column>
50+
{nickname}
51+
</Column>
52+
{this.renderAction(isEdit)}
53+
</Row>
54+
);
55+
}
56+
}
57+
58+
export default UserItem;

0 commit comments

Comments
 (0)