Skip to content

Commit e5a5127

Browse files
author
daniel.gomez
committed
#2 Handle message when file is uploaded or not, disable upload button if there is no file to upload
1 parent dbb2b7b commit e5a5127

File tree

3 files changed

+30
-17
lines changed

3 files changed

+30
-17
lines changed

demo/Server.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ const storage = multer.diskStorage({
2121

2222
const upload = multer({storage});
2323

24-
2524
const webpackCompiler = webpack(webpackConfig);
2625

2726
require.extensions['.html'] = function (module, filename) {
@@ -53,15 +52,17 @@ router.get("/api/languages", (request, response) => {
5352
response.status(200).json(arr);
5453
});
5554

56-
router.post("/upload", upload.array("fileData"), (request, response) => {
57-
let files = request.files;
55+
router.post("/upload", (request, response) => {
5856

57+
upload.array("fileData")(request, response, (err) => {
58+
if(err) {
59+
response.json({status: false, message: "There was an error while uploading files."});
60+
return;
61+
}
5962

60-
files.forEach(file => {
61-
console.log(JSON.stringify(file));
62-
});
63+
response.json({status: true, message: "Files correctly uploaded."});
6364

64-
response.end();
65+
})
6566

6667
});
6768

src/components/common/GlyphButton.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,14 @@ class GlyphButton extends Component {
88
bsSize: PropTypes.string,
99
text: PropTypes.string,
1010
glyph: PropTypes.string.isRequired,
11-
onClick: PropTypes.func
11+
onClick: PropTypes.func,
12+
disabled: PropTypes.bool
1213
};
1314

15+
static defaultProps = {
16+
disabled: false
17+
}
18+
1419
handleSave = () => {
1520
let { onClick } = this.props;
1621

@@ -35,11 +40,11 @@ class GlyphButton extends Component {
3540
};
3641

3742
render() {
38-
let { bsSize, bsStyle,glyph } = this.props;
43+
let { bsSize, bsStyle,glyph, disabled } = this.props;
3944
let text = this.getText();
4045

4146
return (
42-
<Button bsStyle={bsStyle} bsSize={bsSize} onClick={this.handleSave}>
47+
<Button disabled={disabled} bsStyle={bsStyle} bsSize={bsSize} onClick={this.handleSave}>
4348
<Glyphicon glyph={glyph}/>
4449
{ text }
4550
</Button>

src/components/field/FileUpload.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,18 @@ export default class FileUpload extends Component {
1212
};
1313

1414
state = {
15-
files: []
15+
files: [],
16+
disableUpload: true
1617
};
1718

1819
onDrop = (files) => {
1920
//TODO filter to avoid duplicates
2021
let fileArray = [...files, ...this.state.files];
2122

22-
this.setState({ files: fileArray });
23-
};
23+
this.setState({files: fileArray});
24+
this.setState({disableUpload: false});
25+
26+
};
2427

2528
onClick = () => {
2629
// TODO Handle response status for upload service
@@ -36,22 +39,26 @@ export default class FileUpload extends Component {
3639
fetch(url, {
3740
method: "POST",
3841
body: fileData
39-
});
42+
})
43+
.then(response => response.json())
44+
.then(({message}) => alert(message));
4045
};
4146

4247
deleteItem = (position) => {
4348
let { files } = this.state;
4449
files.splice(position, 1);
4550

46-
this.setState({ files: files });
51+
this.setState({files: files});
52+
this.setState({disableUpload: this.state.files.length == 0});
53+
4754
};
4855

4956
openDropZone = () => {
5057
this.refs.dropzone.open();
5158
};
5259

5360
render() {
54-
let { files } = this.state;
61+
let { files, disableUpload } = this.state;
5562

5663
const attachmentStyle = {
5764
marginTop: "6px",
@@ -104,7 +111,7 @@ export default class FileUpload extends Component {
104111
</Col>
105112
</Row>
106113
<Col>
107-
<GlyphButton type="submit" glyph="cloud-upload" text="Upload" bsSize="sm" bsStyle="primary" onClick={this.onClick}/>
114+
<GlyphButton disabled={disableUpload} type="submit" glyph="cloud-upload" text="Upload" bsSize="sm" bsStyle="primary" onClick={this.onClick}/>
108115
</Col>
109116
</div>
110117
);

0 commit comments

Comments
 (0)