mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-13 07:46:06 +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 { neo4jgraphql } from 'neo4j-graphql-js'
|
||||||
import Resolver from './helpers/Resolver'
|
import Resolver from './helpers/Resolver'
|
||||||
import { withFilter } from 'graphql-subscriptions'
|
import RoomResolver from './rooms'
|
||||||
import { pubsub, CHAT_MESSAGE_ADDED } from '../../server'
|
import { pubsub, ROOM_COUNT_UPDATED } from '../../server'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
Subscription: {
|
|
||||||
chatMessageAdded: {
|
|
||||||
subscribe: withFilter(
|
|
||||||
() => pubsub.asyncIterator(CHAT_MESSAGE_ADDED),
|
|
||||||
(payload, variables) => {
|
|
||||||
return payload.chatMessageAdded.senderId !== variables.userId
|
|
||||||
},
|
|
||||||
),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Query: {
|
Query: {
|
||||||
Message: async (object, params, context, resolveInfo) => {
|
Message: async (object, params, context, resolveInfo) => {
|
||||||
const { roomId } = params
|
const { roomId } = params
|
||||||
@ -91,12 +81,16 @@ export default {
|
|||||||
roomId,
|
roomId,
|
||||||
content,
|
content,
|
||||||
})
|
})
|
||||||
|
|
||||||
const [message] = await createMessageTxResponse.records.map((record) =>
|
const [message] = await createMessageTxResponse.records.map((record) =>
|
||||||
record.get('message'),
|
record.get('message'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TODO change user in context - mark message as seen
|
||||||
|
const roomCountUpdated = await RoomResolver.Query.UnreadRooms(null, null, context, null)
|
||||||
|
|
||||||
// send subscriptions
|
// send subscriptions
|
||||||
await pubsub.publish(CHAT_MESSAGE_ADDED, { chatMessageAdded: message })
|
await pubsub.publish(ROOM_COUNT_UPDATED, { roomCountUpdated })
|
||||||
|
|
||||||
return message
|
return message
|
||||||
})
|
})
|
||||||
|
|||||||
@ -1,7 +1,20 @@
|
|||||||
import { neo4jgraphql } from 'neo4j-graphql-js'
|
import { neo4jgraphql } from 'neo4j-graphql-js'
|
||||||
import Resolver from './helpers/Resolver'
|
import Resolver from './helpers/Resolver'
|
||||||
|
import { pubsub, ROOM_COUNT_UPDATED } from '../../server'
|
||||||
|
import { withFilter } from 'graphql-subscriptions'
|
||||||
|
|
||||||
export default {
|
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: {
|
Query: {
|
||||||
Room: async (object, params, context, resolveInfo) => {
|
Room: async (object, params, context, resolveInfo) => {
|
||||||
if (!params.filter) params.filter = {}
|
if (!params.filter) params.filter = {}
|
||||||
|
|||||||
@ -45,7 +45,3 @@ type Query {
|
|||||||
orderBy: [_MessageOrdering]
|
orderBy: [_MessageOrdering]
|
||||||
): [Message]
|
): [Message]
|
||||||
}
|
}
|
||||||
|
|
||||||
type Subscription {
|
|
||||||
chatMessageAdded(userId: ID!): Message
|
|
||||||
}
|
|
||||||
|
|||||||
@ -35,3 +35,7 @@ type Query {
|
|||||||
): [Room]
|
): [Room]
|
||||||
UnreadRooms: Int
|
UnreadRooms: Int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Subscription {
|
||||||
|
roomCountUpdated(userId: ID!): Int
|
||||||
|
}
|
||||||
|
|||||||
@ -14,7 +14,8 @@ import bodyParser from 'body-parser'
|
|||||||
import { graphqlUploadExpress } from 'graphql-upload'
|
import { graphqlUploadExpress } from 'graphql-upload'
|
||||||
|
|
||||||
export const NOTIFICATION_ADDED = 'NOTIFICATION_ADDED'
|
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
|
const { REDIS_DOMAIN, REDIS_PORT, REDIS_PASSWORD } = CONFIG
|
||||||
let prodPubsub, devPubsub
|
let prodPubsub, devPubsub
|
||||||
const options = {
|
const options = {
|
||||||
|
|||||||
@ -16,8 +16,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { mapGetters } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
import CounterIcon from '~/components/_new/generic/CounterIcon/CounterIcon'
|
import CounterIcon from '~/components/_new/generic/CounterIcon/CounterIcon'
|
||||||
import { unreadRoomsQuery } from '~/graphql/Rooms'
|
import { unreadRoomsQuery, roomCountUpdated } from '~/graphql/Rooms'
|
||||||
import { chatMessageAdded } from '~/graphql/Messages'
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'ChatNotificationMenu',
|
name: 'ChatNotificationMenu',
|
||||||
@ -43,15 +42,14 @@ export default {
|
|||||||
this.count = UnreadRooms
|
this.count = UnreadRooms
|
||||||
},
|
},
|
||||||
subscribeToMore: {
|
subscribeToMore: {
|
||||||
document: chatMessageAdded(),
|
document: roomCountUpdated(),
|
||||||
variables() {
|
variables() {
|
||||||
return {
|
return {
|
||||||
userId: this.user.id,
|
userId: this.user.id,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
updateQuery: (previousResult, { subscriptionData }) => {
|
updateQuery: (previousResult, { subscriptionData }) => {
|
||||||
// TODO emit chat reload
|
return { UnreadRooms: subscriptionData.data.roomCountUpdated }
|
||||||
return { UnreadRooms: previousResult.UnreadRooms + 1}
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@ -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