diff --git a/js/components/whitelabel/prize/actions/prize_rating_actions.js b/js/components/whitelabel/prize/actions/prize_rating_actions.js index e36023a0..73569875 100644 --- a/js/components/whitelabel/prize/actions/prize_rating_actions.js +++ b/js/components/whitelabel/prize/actions/prize_rating_actions.js @@ -9,16 +9,17 @@ class PrizeRatingActions { constructor() { this.generateActions( 'updatePrizeRatings', + 'updatePrizeRatingAverage', 'updatePrizeRating' ); } - fetch() { + fetchAverage(pieceId) { return Q.Promise((resolve, reject) => { PrizeRatingFetcher - .fetch() + .fetchAverage(pieceId) .then((res) => { - this.actions.updatePrizeRatings(res.ratings); + this.actions.updatePrizeRatingAverage(res.data); resolve(res); }) .catch((err) => { diff --git a/js/components/whitelabel/prize/components/ascribe_detail/prize_piece_container.js b/js/components/whitelabel/prize/components/ascribe_detail/prize_piece_container.js index fd25190f..f49d430d 100644 --- a/js/components/whitelabel/prize/components/ascribe_detail/prize_piece_container.js +++ b/js/components/whitelabel/prize/components/ascribe_detail/prize_piece_container.js @@ -17,6 +17,7 @@ import PrizeRatingStore from '../../stores/prize_rating_store'; import UserStore from '../../../../../stores/user_store'; import Piece from '../../../../../components/ascribe_detail/piece'; +import Note from '../../../../../components/ascribe_detail/note'; import AppConstants from '../../../../../constants/application_constants'; @@ -53,6 +54,15 @@ let PieceContainer = React.createClass({ UserStore.listen(this.onChange); }, + // This is done to update the container when the user clicks on the prev or next + // button to update the URL parameter (and therefore to switch pieces) + componentWillReceiveProps(nextProps) { + if(this.props.params.pieceId !== nextProps.params.pieceId) { + PieceActions.updatePiece({}); + PieceActions.fetchOne(nextProps.params.pieceId); + } + }, + componentWillUnmount() { // Every time we're leaving the piece detail page, // just reset the piece that is saved in the piece store @@ -63,14 +73,6 @@ let PieceContainer = React.createClass({ UserStore.unlisten(this.onChange); }, - // This is done to update the container when the user clicks on the prev or next - // button to update the URL parameter (and therefore to switch pieces) - componentWillReceiveProps(nextProps) { - if(this.props.params.pieceId !== nextProps.params.pieceId) { - PieceActions.updatePiece({}); - PieceActions.fetchOne(nextProps.params.pieceId); - } - }, onChange(state) { this.setState(state); @@ -167,6 +169,7 @@ let PrizePieceRatings = React.createClass({ componentDidMount() { PrizeRatingStore.listen(this.onChange); PrizeRatingActions.fetchOne(this.props.piece.id); + PrizeRatingActions.fetchAverage(this.props.piece.id); PieceListStore.listen(this.onChange); }, @@ -204,8 +207,35 @@ let PrizePieceRatings = React.createClass({ ); }, + getId() { + return {'piece_id': this.props.piece.id}; + }, + render(){ - if (this.props.currentUser && this.props.currentUser.is_jury) { + if (this.props.currentUser && this.props.currentUser.is_judge && this.state.average) { + return ( + +
+ +
+
+ {this.state.ratings.map((item) => { + return item.user; + })} +
+
); + } + else if (this.props.currentUser && this.props.currentUser.is_jury) { return ( - ); } diff --git a/js/components/whitelabel/prize/constants/prize_api_urls.js b/js/components/whitelabel/prize/constants/prize_api_urls.js index 63eb71e7..880a707b 100644 --- a/js/components/whitelabel/prize/constants/prize_api_urls.js +++ b/js/components/whitelabel/prize/constants/prize_api_urls.js @@ -17,6 +17,7 @@ function getPrizeApiUrls(subdomain) { 'jury_resend': AppPrizeConstants.prizeApiEndpoint + subdomain + '/jury/${email}/resend/', 'ratings': AppPrizeConstants.prizeApiEndpoint + subdomain + '/ratings/', 'rating': AppPrizeConstants.prizeApiEndpoint + subdomain + '/ratings/${piece_id}/', + 'rating_average': AppPrizeConstants.prizeApiEndpoint + subdomain + '/ratings/${piece_id}/average/', 'notes': AppPrizeConstants.prizeApiEndpoint + subdomain + '/notes/', 'note': AppPrizeConstants.prizeApiEndpoint + subdomain + '/notes/${piece_id}/' diff --git a/js/components/whitelabel/prize/fetchers/prize_rating_fetcher.js b/js/components/whitelabel/prize/fetchers/prize_rating_fetcher.js index b7af8845..eae4f53a 100644 --- a/js/components/whitelabel/prize/fetchers/prize_rating_fetcher.js +++ b/js/components/whitelabel/prize/fetchers/prize_rating_fetcher.js @@ -4,8 +4,8 @@ import requests from '../../../../utils/requests'; let PrizeRatingFetcher = { - fetch() { - return requests.get('rating'); + fetchAverage(pieceId) { + return requests.get('rating_average', {'piece_id': pieceId}); }, fetchOne(pieceId) { @@ -13,7 +13,7 @@ let PrizeRatingFetcher = { }, rate(pieceId, rating) { - return requests.post('ratings', {body: {'piece_id': pieceId, 'value': rating}}); + return requests.post('ratings', {body: {'piece_id': pieceId, 'note': rating}}); } }; diff --git a/js/components/whitelabel/prize/stores/prize_rating_store.js b/js/components/whitelabel/prize/stores/prize_rating_store.js index 4a31501c..9b7a2126 100644 --- a/js/components/whitelabel/prize/stores/prize_rating_store.js +++ b/js/components/whitelabel/prize/stores/prize_rating_store.js @@ -8,16 +8,22 @@ class PrizeRatingStore { constructor() { this.ratings = []; this.currentRating = null; + this.average = null; this.bindActions(PrizeRatingActions); } - onUpdatePrizeRatings( ratings ) { + onUpdatePrizeRatings(ratings) { this.ratings = ratings; } - onUpdatePrizeRating( rating ) { + onUpdatePrizeRating(rating) { this.currentRating = parseInt(rating, 10); } + + onUpdatePrizeRatingAverage(data) { + this.average = data.average; + this.ratings = data.ratings; + } } export default alt.createStore(PrizeRatingStore, 'PrizeRatingStore'); \ No newline at end of file