Skip to content

Commit e708771

Browse files
author
Piyush Ahuja
committed
Promisify downloadProject
1 parent e6dc60e commit e708771

File tree

2 files changed

+25
-24
lines changed

2 files changed

+25
-24
lines changed

src/actions/projects.js

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -174,11 +174,10 @@ export function uploadProject(projectID, blob, callback=()=>{}) {
174174
}
175175

176176
// Download a previously-uploaded project report.
177-
// TODO: convert this function and its callers to use promises (#6).
178177
// TODO: it's probably more sensible to just direct the browser to a URL
179178
// which serves the appropriate Content-Disposition to make it download
180179
// the page, rather than doing it in JavaScript.
181-
export function downloadProject(project, callback) {
180+
export function downloadProject(project) {
182181
return axios.get(`${api_url}/api/projects/${project.data.id}/file`, {
183182
responseType: 'blob',
184183
headers: {
@@ -188,16 +187,22 @@ export function downloadProject(project, callback) {
188187
const rotation_parts = getSeriesPart(project);
189188
const filename = `${rotation_parts[0]}_${rotation_parts[1]}_${project.data.title}`;
190189
saveAs(response.data, `${filename}.zip`);
191-
callback("Download complete", false);
192-
}).catch(response => {
193-
if (response.response.status === 404) {
194-
callback("Project not yet uploaded", true);
190+
return "Download complete";
191+
}).catch(error => {
192+
if (error.response.status === 404) {
193+
throw new Error("Project not yet uploaded");
195194
} else {
196-
var reader = new FileReader();
197-
reader.onload = function() {
198-
callback(JSON.parse(reader.result).status_message, true);
199-
}
200-
reader.readAsText(response.response.data);
195+
return new Promise((resolve, reject) => {
196+
var reader = new FileReader();
197+
reader.onload = () => {
198+
reject(JSON.parse(reader.result).status_message);
199+
}
200+
201+
reader.onerror = () => {
202+
reject(reader.error);
203+
}
204+
});
205+
reader.readAsText(error.response.data);
201206
}
202207
});
203208
}

src/pages/project_download.js

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,11 @@ class ProjectDownload extends Component {
5151
const project = this.props.projects[this.props.match.params.projectID];
5252
if (!project) this.setMessage("Fetching project...");
5353
else if (!this.state.started) {
54-
downloadProject(
55-
project,
56-
(status) => {
54+
55+
downloadProject(project).then(status => {
5756
this.setMessage(status);
58-
}
59-
);
57+
});
58+
6059
this.setState({
6160
message: "Starting download...",
6261
started: true
@@ -107,14 +106,11 @@ export default connect(
107106
export function renderDownload(project, label) {
108107
return (
109108
<Link to="#" onClick={() => {
110-
downloadProject(project, (msg, failed) => {
111-
if (!failed) {
112-
Alert.success(msg);
113-
}
114-
else {
115-
Alert.error(msg);
116-
}
117-
});
109+
downloadProject(project).then(msg => (
110+
Alert.success(msg)
111+
)).catch(error => (
112+
Alert.error(error.message);
113+
));
118114
}}>
119115
{label}
120116
</Link>

0 commit comments

Comments
 (0)