From 163741f34e7df4af57d6fe1f2f360511ac2c55f5 Mon Sep 17 00:00:00 2001 From: Ben Wheeler Date: Sat, 23 Mar 2019 11:30:59 -0400 Subject: [PATCH] add ownerUsername to comment API endpoint URIs; handle error responses from those endpoints --- src/redux/preview.js | 24 +++++++++++------------ src/views/preview/project-view.jsx | 31 +++++++++++++----------------- 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/src/redux/preview.js b/src/redux/preview.js index 4fbf21241..7f1ef2811 100644 --- a/src/redux/preview.js +++ b/src/redux/preview.js @@ -462,19 +462,19 @@ module.exports.getFavedStatus = (id, username, token) => (dispatch => { }); }); -module.exports.getTopLevelComments = (id, offset, isAdmin, token) => (dispatch => { +module.exports.getTopLevelComments = (id, offset, ownerUsername, isAdmin, token) => (dispatch => { dispatch(module.exports.setFetchStatus('comments', module.exports.Status.FETCHING)); api({ - uri: `${isAdmin ? '/admin' : ''}/projects/${id}/comments`, + uri: `${isAdmin ? '/admin' : `/users/${ownerUsername}`}/projects/${id}/comments`, authentication: isAdmin ? token : null, params: {offset: offset || 0, limit: COMMENT_LIMIT} - }, (err, body) => { + }, (err, body, res) => { if (err) { dispatch(module.exports.setFetchStatus('comments', module.exports.Status.ERROR)); dispatch(module.exports.setError(err)); return; } - if (typeof body === 'undefined') { + if (typeof body === 'undefined' || res.statusCode >= 400) { // NotFound dispatch(module.exports.setFetchStatus('comments', module.exports.Status.ERROR)); dispatch(module.exports.setError('No comment info')); return; @@ -492,18 +492,18 @@ module.exports.getTopLevelComments = (id, offset, isAdmin, token) => (dispatch = }); }); -module.exports.getCommentById = (projectId, commentId, isAdmin, token) => (dispatch => { +module.exports.getCommentById = (projectId, commentId, ownerUsername, isAdmin, token) => (dispatch => { dispatch(module.exports.setFetchStatus('comments', module.exports.Status.FETCHING)); api({ - uri: `${isAdmin ? '/admin' : ''}/projects/${projectId}/comments/${commentId}`, + uri: `${isAdmin ? '/admin' : `/users/${ownerUsername}`}/projects/${projectId}/comments/${commentId}`, authentication: isAdmin ? token : null - }, (err, body) => { + }, (err, body, res) => { if (err) { dispatch(module.exports.setFetchStatus('comments', module.exports.Status.ERROR)); dispatch(module.exports.setError(err)); return; } - if (!body) { + if (!body || res.statusCode >= 400) { // NotFound dispatch(module.exports.setFetchStatus('comments', module.exports.Status.ERROR)); dispatch(module.exports.setError('No comment info')); return; @@ -521,19 +521,19 @@ module.exports.getCommentById = (projectId, commentId, isAdmin, token) => (dispa }); }); -module.exports.getReplies = (projectId, commentIds, offset, isAdmin, token) => (dispatch => { +module.exports.getReplies = (projectId, commentIds, offset, ownerUsername, isAdmin, token) => (dispatch => { dispatch(module.exports.setFetchStatus('replies', module.exports.Status.FETCHING)); const fetchedReplies = {}; async.eachLimit(commentIds, 10, (parentId, callback) => { api({ - uri: `${isAdmin ? '/admin' : ''}/projects/${projectId}/comments/${parentId}/replies`, + uri: `${isAdmin ? '/admin' : `/users/${ownerUsername}`}/projects/${projectId}/comments/${parentId}/replies`, authentication: isAdmin ? token : null, params: {offset: offset || 0, limit: COMMENT_LIMIT} - }, (err, body) => { + }, (err, body, res) => { if (err) { return callback(`Error fetching comment replies: ${err}`); } - if (typeof body === 'undefined') { + if (typeof body === 'undefined' || res.statusCode >= 400) { // NotFound return callback('No comment reply information'); } fetchedReplies[parentId] = body; diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index 28a941c06..762d59915 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -171,6 +171,13 @@ class Preview extends React.Component { ) { this.props.getOriginalInfo(this.props.projectInfo.remix.root); } + if (this.state.singleCommentId) { + this.props.getCommentById(this.state.projectId, this.state.singleCommentId, + this.props.authorUsername, this.props.isAdmin, token); + } else { + this.props.getTopLevelComments(this.state.projectId, this.props.comments.length, + this.props.authorUsername, this.props.isAdmin, token); + } } } if (this.props.faved !== prevProps.faved || this.props.loved !== prevProps.loved) { @@ -209,24 +216,12 @@ class Preview extends React.Component { if (this.props.userPresent) { const username = this.props.user.username; const token = this.props.user.token; - if (this.state.singleCommentId) { - this.props.getCommentById(this.state.projectId, this.state.singleCommentId, - this.props.isAdmin, token); - } else { - this.props.getTopLevelComments(this.state.projectId, this.props.comments.length, - this.props.isAdmin, token); - } this.props.getProjectInfo(this.state.projectId, token); this.props.getRemixes(this.state.projectId, token); this.props.getCuratedStudios(username); this.props.getFavedStatus(this.state.projectId, username, token); this.props.getLovedStatus(this.state.projectId, username, token); } else { - if (this.state.singleCommentId) { - this.props.getCommentById(this.state.projectId, this.state.singleCommentId); - } else { - this.props.getTopLevelComments(this.state.projectId, this.props.comments.length); - } this.props.getProjectInfo(this.state.projectId); this.props.getRemixes(this.state.projectId); } @@ -994,14 +989,14 @@ const mapDispatchToProps = dispatch => ({ dispatch(previewActions.leaveStudio(studioId, id, token)); } }, - getTopLevelComments: (id, offset, isAdmin, token) => { - dispatch(previewActions.getTopLevelComments(id, offset, isAdmin, token)); + getTopLevelComments: (id, offset, ownerUsername, isAdmin, token) => { + dispatch(previewActions.getTopLevelComments(id, offset, ownerUsername, isAdmin, token)); }, - getCommentById: (projectId, commentId, isAdmin, token) => { - dispatch(previewActions.getCommentById(projectId, commentId, isAdmin, token)); + getCommentById: (projectId, commentId, ownerUsername, isAdmin, token) => { + dispatch(previewActions.getCommentById(projectId, commentId, ownerUsername, isAdmin, token)); }, - getMoreReplies: (projectId, commentId, offset, isAdmin, token) => { - dispatch(previewActions.getReplies(projectId, [commentId], offset, isAdmin, token)); + getMoreReplies: (projectId, commentId, offset, ownerUsername, isAdmin, token) => { + dispatch(previewActions.getReplies(projectId, [commentId], offset, ownerUsername, isAdmin, token)); }, getFavedStatus: (id, username, token) => { dispatch(previewActions.getFavedStatus(id, username, token));