mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-12 23:35:58 +00:00
room count subscription
This commit is contained in:
parent
fb45ac107a
commit
3e60ab6854
@ -1,19 +1,9 @@
|
||||
import { neo4jgraphql } from 'neo4j-graphql-js'
|
||||
import Resolver from './helpers/Resolver'
|
||||
import { withFilter } from 'graphql-subscriptions'
|
||||
import { pubsub, CHAT_MESSAGE_ADDED } from '../../server'
|
||||
import RoomResolver from './rooms'
|
||||
import { pubsub, ROOM_COUNT_UPDATED } from '../../server'
|
||||
|
||||
export default {
|
||||
Subscription: {
|
||||
chatMessageAdded: {
|
||||
subscribe: withFilter(
|
||||
() => pubsub.asyncIterator(CHAT_MESSAGE_ADDED),
|
||||
(payload, variables) => {
|
||||
return payload.chatMessageAdded.senderId !== variables.userId
|
||||
},
|
||||
),
|
||||
},
|
||||
},
|
||||
Query: {
|
||||
Message: async (object, params, context, resolveInfo) => {
|
||||
const { roomId } = params
|
||||
@ -91,12 +81,16 @@ export default {
|
||||
roomId,
|
||||
content,
|
||||
})
|
||||
|
||||
const [message] = await createMessageTxResponse.records.map((record) =>
|
||||
record.get('message'),
|
||||
)
|
||||
|
||||
// TODO change user in context - mark message as seen
|
||||
const roomCountUpdated = await RoomResolver.Query.UnreadRooms(null, null, context, null)
|
||||
|
||||
// send subscriptions
|
||||
await pubsub.publish(CHAT_MESSAGE_ADDED, { chatMessageAdded: message })
|
||||
await pubsub.publish(ROOM_COUNT_UPDATED, { roomCountUpdated })
|
||||
|
||||
return message
|
||||
})
|
||||
|
||||
@ -1,7 +1,20 @@
|
||||
import { neo4jgraphql } from 'neo4j-graphql-js'
|
||||
import Resolver from './helpers/Resolver'
|
||||
import { pubsub, ROOM_COUNT_UPDATED } from '../../server'
|
||||
import { withFilter } from 'graphql-subscriptions'
|
||||
|
||||
export default {
|
||||
Subscription: {
|
||||
roomCountUpdated: {
|
||||
subscribe: withFilter(
|
||||
() => pubsub.asyncIterator(ROOM_COUNT_UPDATED),
|
||||
(payload, variables) => {
|
||||
console.log('sub', payload, variables)
|
||||
return true // payload.chatMessageAdded.senderId !== variables.userId
|
||||
},
|
||||
),
|
||||
},
|
||||
},
|
||||
Query: {
|
||||
Room: async (object, params, context, resolveInfo) => {
|
||||
if (!params.filter) params.filter = {}
|
||||
|
||||
@ -45,7 +45,3 @@ type Query {
|
||||
orderBy: [_MessageOrdering]
|
||||
): [Message]
|
||||
}
|
||||
|
||||
type Subscription {
|
||||
chatMessageAdded(userId: ID!): Message
|
||||
}
|
||||
|
||||
@ -35,3 +35,7 @@ type Query {
|
||||
): [Room]
|
||||
UnreadRooms: Int
|
||||
}
|
||||
|
||||
type Subscription {
|
||||
roomCountUpdated(userId: ID!): Int
|
||||
}
|
||||
|
||||
@ -14,7 +14,8 @@ import bodyParser from 'body-parser'
|
||||
import { graphqlUploadExpress } from 'graphql-upload'
|
||||
|
||||
export const NOTIFICATION_ADDED = 'NOTIFICATION_ADDED'
|
||||
export const CHAT_MESSAGE_ADDED = 'CHAT_MESSAGE_ADDED'
|
||||
// export const CHAT_MESSAGE_ADDED = 'CHAT_MESSAGE_ADDED'
|
||||
export const ROOM_COUNT_UPDATED = 'ROOM_COUNT_UPDATED'
|
||||
const { REDIS_DOMAIN, REDIS_PORT, REDIS_PASSWORD } = CONFIG
|
||||
let prodPubsub, devPubsub
|
||||
const options = {
|
||||
|
||||
@ -16,8 +16,7 @@
|
||||
<script>
|
||||
import { mapGetters } from 'vuex'
|
||||
import CounterIcon from '~/components/_new/generic/CounterIcon/CounterIcon'
|
||||
import { unreadRoomsQuery } from '~/graphql/Rooms'
|
||||
import { chatMessageAdded } from '~/graphql/Messages'
|
||||
import { unreadRoomsQuery, roomCountUpdated } from '~/graphql/Rooms'
|
||||
|
||||
export default {
|
||||
name: 'ChatNotificationMenu',
|
||||
@ -43,15 +42,14 @@ export default {
|
||||
this.count = UnreadRooms
|
||||
},
|
||||
subscribeToMore: {
|
||||
document: chatMessageAdded(),
|
||||
document: roomCountUpdated(),
|
||||
variables() {
|
||||
return {
|
||||
userId: this.user.id,
|
||||
}
|
||||
},
|
||||
updateQuery: (previousResult, { subscriptionData }) => {
|
||||
// TODO emit chat reload
|
||||
return { UnreadRooms: previousResult.UnreadRooms + 1}
|
||||
return { UnreadRooms: subscriptionData.data.roomCountUpdated }
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@ -33,16 +33,3 @@ export const createMessageMutation = () => {
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
export const chatMessageAdded = () => {
|
||||
return gql`
|
||||
subscription chatMessageAdded($userId: ID!) {
|
||||
chatMessageAdded(userId: $userId) {
|
||||
id
|
||||
room {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
@ -35,3 +35,11 @@ export const unreadRoomsQuery = () => {
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
export const roomCountUpdated = () => {
|
||||
return gql`
|
||||
subscription roomCountUpdated($userId: ID!) {
|
||||
roomCountUpdated(userId: $userId)
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user