blob: 18d9ece692e1f90ddd1d2334b42f2978f3b16adb [file] [log] [blame]
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
import PropTypes from 'prop-types';
import React from 'react';
import ReactDOM from 'react-dom';
import { Modal, Button, Form, ProgressBar } from 'react-bootstrap';
export default class UploadModal extends React.Component {
static propTypes = {
visible: PropTypes.bool.isRequired,
doc: PropTypes.object,
inProgress: PropTypes.bool.isRequired,
uploadPercentage: PropTypes.number.isRequired,
errorMessage: PropTypes.string,
cancelUpload: PropTypes.func.isRequired,
hideUploadModal: PropTypes.func.isRequired,
resetUploadModal: PropTypes.func.isRequired,
uploadAttachment: PropTypes.func.isRequired
};
constructor (props) {
super(props);
this.state = {
isFileSelected: false,
};
}
closeModal = (e) => {
if (e) {
e.preventDefault();
}
if (this.props.inProgress) {
this.props.cancelUpload();
}
this.props.hideUploadModal();
this.props.resetUploadModal();
};
upload = () => {
this.props.uploadAttachment({
doc: this.props.doc,
rev: this.props.doc.get('_rev'),
files: this.attachments.files
});
};
handleSelectedFile = (e) => {
this.attachments = e.target;
this.setState({
isFileSelected: this.attachments && this.attachments.files && this.attachments.files.length > 0
});
};
render() {
let errorClasses = 'alert alert-error';
if (this.props.errorMessage === '') {
errorClasses += ' d-none';
}
let loadIndicatorClasses = 'progress progress-info mt-3';
if (!this.props.inProgress) {
loadIndicatorClasses += ' d-none';
}
this.attachmentsRef = React.createRef();
const { isFileSelected } = this.state;
return (
<Modal dialogClassName="upload-file-modal" show={this.props.visible} onHide={this.closeModal}>
<Modal.Header closeButton={true}>
<Modal.Title>Upload Attachment</Modal.Title>
</Modal.Header>
<Modal.Body>
<div className={errorClasses}>{this.props.errorMessage}</div>
<div>
<form className="form">
<Form.Group>
<p>
Select a file to upload as an attachment to this document. Uploading a file saves the document as a new
revision.
</p>
<Form.Control
onChange={this.handleSelectedFile}
type="file"
name="_attachments"
disabled={this.props.inProgress}
/>
</Form.Group>
</form>
<ProgressBar
id="upload-progress-bar"
now={this.props.uploadPercentage}
className={ loadIndicatorClasses }
/>
</div>
</Modal.Body>
<Modal.Footer>
<Button href="#" data-bypass="true" variant="cf-cancel" className="cancel-link" onClick={this.closeModal}>Cancel</Button>
<Button
id="upload-btn"
data-bypass="true"
variant="cf-primary"
onClick={this.upload}
disabled={this.props.inProgress || !isFileSelected}
type="button"
>
<i className="fonticon-up-circled" /> Upload Attachment
</Button>
</Modal.Footer>
</Modal>
);
}
}