Skip to content

Commit 19b8ea9

Browse files
author
jonisaa
committed
#2 Added FileInfo component, improving FileUpload component
1 parent c0f5140 commit 19b8ea9

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

src/components/common/FileInfo.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import React, { Component, PropTypes } from 'react';
2+
3+
const FileUploadItem = ({ file, height, width }) => {
4+
let image = null;
5+
6+
if (file.type.match(/\.(jpg|jpeg|png|gif)$/)) {
7+
image = <img height={height} width={width} src={file.preview}/>;
8+
}
9+
10+
return (
11+
<div>
12+
{image}
13+
<p>{file.name}</p>
14+
<p>{file.size}</p>
15+
</div>
16+
);
17+
};
18+
19+
FileUploadItem.propTypes = {
20+
file: PropTypes.object.isRequired,
21+
height: PropTypes.string,
22+
width: PropTypes.string
23+
};
24+
25+
FileUploadItem.defaultProps = {
26+
height: "50px",
27+
width: "50px"
28+
};
29+
30+
export default FileUploadItem;

src/components/field/FileUpload.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import React, { Component, PropTypes } from 'react';
22
import DropZone from '../common/DropZone';
3+
import GlyphButton from '../common/GlyphButton';
4+
import FileInfo from '../common/FileInfo';
5+
6+
import fetch from 'isomorphic-fetch';
37

48
export default class FileUpload extends Component {
59
static propTypes = {
@@ -11,11 +15,34 @@ export default class FileUpload extends Component {
1115
};
1216

1317
onDrop = (files) => {
18+
//TODO Check file and size. Avoid duplicated files
1419
let fileArray = [...this.state.files, ...files];
20+
1521
this.setState({ files: fileArray });
1622
};
1723

24+
onClick = (event) => {
25+
// TODO Handle response status for upload service
26+
event.preventDefault();
27+
28+
const { files } = this.state;
29+
const { url } = this.props;
30+
31+
let fileData = new FormData();
32+
33+
files.forEach((file) => {
34+
fileData.append(file.name, file);
35+
});
36+
37+
fetch(url, {
38+
method: "POST",
39+
body: fileData
40+
});
41+
};
42+
1843
render() {
44+
let { files } = this.state;
45+
1946
return (
2047
<div>
2148
<label>Files</label>
@@ -25,6 +52,15 @@ export default class FileUpload extends Component {
2552
Try dropping some files here, or click to select files to upload.
2653
</div>
2754
</DropZone>
55+
<div>{
56+
files.map((file, index) => (
57+
<FileInfo key={index} file={file}/>
58+
))
59+
}
60+
</div>
61+
<div>
62+
<GlyphButton text="Upload" onClick={this.onClick}/>
63+
</div>
2864
</div>
2965
</div>
3066
);

0 commit comments

Comments
 (0)