@@ -12,6 +12,8 @@ import StarIcon from 'material-ui-icons/Star'
12
12
import StarBorderIcon from 'material-ui-icons/StarBorder'
13
13
import distanceInWordsToNow from 'date-fns/distance_in_words_to_now'
14
14
import times from 'lodash/times'
15
+ import gql from 'graphql-tag'
16
+ import { graphql } from 'react-apollo'
15
17
16
18
const StarRating = ( { rating } ) => (
17
19
< div >
@@ -41,7 +43,10 @@ class Review extends Component {
41
43
this . closeMenu ( )
42
44
}
43
45
44
- toggleFavorite = ( ) => { }
46
+ toggleFavorite = ( ) => {
47
+ const { review : { id, favorited } } = this . props
48
+ this . props . favorite ( id , ! favorited )
49
+ }
45
50
46
51
render ( ) {
47
52
const {
@@ -111,7 +116,33 @@ Review.propTypes = {
111
116
photo : PropTypes . string . isRequired ,
112
117
username : PropTypes . string . isRequired
113
118
} )
114
- } ) . isRequired
119
+ } ) . isRequired ,
120
+ favorite : PropTypes . func . isRequired
115
121
}
116
122
117
- export default Review
123
+ const FAVORITE_REVIEW_MUTATION = gql `
124
+ mutation FavoriteReview($id: ObjID!, $favorite: Boolean!) {
125
+ favoriteReview(id: $id, favorite: $favorite) {
126
+ id
127
+ favorited
128
+ }
129
+ }
130
+ `
131
+
132
+ const withFavoriteMutation = graphql ( FAVORITE_REVIEW_MUTATION , {
133
+ props : ( { mutate } ) => ( {
134
+ favorite : ( id , favorite ) =>
135
+ mutate ( {
136
+ variables : { id, favorite } ,
137
+ optimisticResponse : {
138
+ favoriteReview : {
139
+ __typename : 'Review' ,
140
+ id,
141
+ favorited : favorite
142
+ }
143
+ }
144
+ } )
145
+ } )
146
+ } )
147
+
148
+ export default withFavoriteMutation ( Review )
0 commit comments