This repository has been archived by the owner on Nov 2, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CreateBookmark.js
123 lines (116 loc) · 3.48 KB
/
CreateBookmark.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import React, { Component } from 'react'
import { Query, Mutation } from 'react-apollo'
import { gql } from 'apollo-boost'
import { List, Tooltip, Icon, Card, Row, Col } from 'antd'
import IconText from './IconText'
import { FEED_QUERY } from '../Feed/FeedPage'
import { ME_QUERY } from '../User'
import User from '../User'
class CreateBookmark extends Component {
render() {
const postId = this.props.post.id
// const mutationId = bookmarkId ? bookmarkId : postId
// console.log('bookmarkId', bookmarkId)
// console.log('postId', postId)
return (
<User>
{({ data }) => {
let bookmarkedPost =
data.me &&
data.me.bookmarks.filter(item => item.post.id === postId)[0]
bookmarkedPost = bookmarkedPost ? bookmarkedPost : false
const bookmarkId = bookmarkedPost && bookmarkedPost.id
const variables = bookmarkId ? { bookmarkId } : { postId }
let filledIcon = bookmarkId ? true : false
// console.log('bookmarkedPost', bookmarkedPost)
// console.log('bookmarkId', bookmarkId)
return (
<Mutation
mutation={bookmarkId ? UN_BOOKMARK_MUTATION : BOOKMARK_MUTATION}
variables={variables}
// refetchQueries={[{ query: FEED_QUERY }]}
update={(cache, payload) => {
const data = cache.readQuery({
query: ME_QUERY,
})
if (payload.data.createBookmark) {
const { createBookmark } = payload.data
data.me.bookmarks = [...data.me.bookmarks, createBookmark]
}
if (
payload.data.deleteBookmark &&
payload.data.deleteBookmark.id
) {
filledIcon = false
const { deleteBookmark } = payload.data
console.log('deleteBookmark', deleteBookmark)
data.me.bookmarks = data.me.bookmarks.filter(
bm => bm.id !== deleteBookmark.id,
)
}
console.log('data after', data)
cache.writeQuery({
query: ME_QUERY,
data,
})
}}
>
{bookmarkMutation => (
<IconText
type="book"
theme={filledIcon ? 'filled' : 'outlined'}
theMutation={bookmarkMutation}
/>
)}
</Mutation>
)
}}
</User>
)
}
}
export default CreateBookmark
const BOOKMARK_MUTATION = gql`
mutation BOOKMARK_MUTATION($postId: ID) {
createBookmark(postId: $postId) {
id
post {
id
title
text
createdAt
author {
id
}
}
}
}
`
const UN_BOOKMARK_MUTATION = gql`
mutation UN_BOOKMARK_MUTATION($bookmarkId: ID) {
deleteBookmark(bookmarkId: $bookmarkId) {
id
# post {
# id
# title
# text
# createdAt
# author {
# id
# }
# }
}
}
`
// update={(store, { data: { createLike } }) =>
// this.updateStoreAfterVote(store, createLike, this.props.postId)
// }
// optimisticResponse={{
// __typename: 'Mutation',
// createLike: {
// __typename: 'Like',
// id: this.props.post.id,
// post: this.props.post,
// likes: this.props.post.likes.concat({ id: 'vcjsvdcjscd' }),
// },
// }}