@@ -6,6 +6,8 @@ import Review from './Review'
66import {
77REVIEWS_QUERY ,
88ON_REVIEW_CREATED_SUBSCRIPTION ,
9+ ON_REVIEW_UPDATED_SUBSCRIPTION ,
10+ ON_REVIEW_DELETED_SUBSCRIPTION ,
911} from '../graphql/Review'
1012import { cache } from '../lib/apollo'
1113
@@ -57,6 +59,51 @@ export default ({orderBy }) =>{
5759} )
5860} , [ orderBy , subscribeToMore ] )
5961
62+ useEffect ( ( ) => {
63+ subscribeToMore ( {
64+ document : ON_REVIEW_DELETED_SUBSCRIPTION ,
65+ updateQuery : ( prev , { subscriptionData } ) => {
66+ cache . modify ( {
67+ fields : {
68+ reviews ( existingReviewRefs = [ ] , { readField } ) {
69+ const deletedId = subscriptionData . data . reviewDeleted
70+ return existingReviewRefs . filter (
71+ ( reviewRef ) => deletedId !== readField ( 'id' , reviewRef )
72+ )
73+ } ,
74+ } ,
75+ } )
76+ return prev
77+ } ,
78+ } )
79+ } , [ orderBy , subscribeToMore ] )
80+
81+ useEffect ( ( ) => {
82+ subscribeToMore ( {
83+ document : ON_REVIEW_UPDATED_SUBSCRIPTION ,
84+ updateQuery : ( prev , { subscriptionData } ) => {
85+ const updatedReview = subscriptionData . data . reviewUpdated
86+ cache . writeFragment ( {
87+ id : cache . identify ( updatedReview ) ,
88+ data : updatedReview ,
89+ fragment : gql `
90+ fragment UpdatedReview on Review{
91+ id
92+ text
93+ stars
94+ createdAt
95+ favorited
96+ author{
97+ id
98+ }
99+ }
100+ ` ,
101+ } )
102+ return prev
103+ } ,
104+ } )
105+ } , [ orderBy , subscribeToMore ] )
106+
60107const reviews = ( data && data . reviews ) || [ ]
61108
62109const onScroll = throttle ( ( ) => {
0 commit comments