This commit is contained in:
tonyrewin 2022-12-07 15:47:43 +03:00
parent 47822553bd
commit 7fda54636d
2 changed files with 26 additions and 13 deletions

View File

@ -4,6 +4,8 @@ import { createChatClient } from '../graphql/privateGraphQLClient'
import type { Chat } from '../graphql/types.gen' import type { Chat } from '../graphql/types.gen'
import { apiClient } from '../utils/apiClient' import { apiClient } from '../utils/apiClient'
import newMessages from '../graphql/subs/new-messages' import newMessages from '../graphql/subs/new-messages'
import type { Client } from '@urql/core'
import { pipe, subscribe } from 'wonka'
type InboxContextType = { type InboxContextType = {
chats: Accessor<Chat[]> chats: Accessor<Chat[]>
@ -23,7 +25,7 @@ export function useInbox() {
export const InboxProvider = (props: { children: JSX.Element }) => { export const InboxProvider = (props: { children: JSX.Element }) => {
const [chats, setChats] = createSignal<Chat[]>([]) const [chats, setChats] = createSignal<Chat[]>([])
const [listener, setListener] = createSignal(console.debug) const [listener, setListener] = createSignal(console.debug)
const subclient = createMemo(() => createChatClient(listener())) const subclient = createMemo<Client>(() => createChatClient(listener()))
const loadChats = async () => { const loadChats = async () => {
try { try {
const newChats = await apiClient.getChats({ limit: 50, offset: 0 }) const newChats = await apiClient.getChats({ limit: 50, offset: 0 })
@ -50,9 +52,15 @@ export const InboxProvider = (props: { children: JSX.Element }) => {
loadChats, loadChats,
setListener // setting listening handler setListener // setting listening handler
} }
onMount(() => {
const resp = subclient().subscription(newMessages, {}) onMount(async () => {
console.debug(resp) const { unsubscribe } = pipe(
subclient().subscription(newMessages, {}),
subscribe((result) => {
console.debug(result) // { data: ... }
// TODO: handle data result
})
)
}) })
const value: InboxContextType = { chats, actions } const value: InboxContextType = { chats, actions }
return <InboxContext.Provider value={value}>{props.children}</InboxContext.Provider> return <InboxContext.Provider value={value}>{props.children}</InboxContext.Provider>

View File

@ -54,9 +54,9 @@ export type AuthorsBy = {
} }
export type Chat = { export type Chat = {
admins?: Maybe<Array<Maybe<Scalars['String']>>> admins?: Maybe<Array<Maybe<Scalars['Int']>>>
createdAt: Scalars['Int'] createdAt: Scalars['Int']
createdBy: Scalars['String'] createdBy: Scalars['Int']
description?: Maybe<Scalars['String']> description?: Maybe<Scalars['String']>
id: Scalars['String'] id: Scalars['String']
members?: Maybe<Array<Maybe<ChatMember>>> members?: Maybe<Array<Maybe<ChatMember>>>
@ -65,7 +65,7 @@ export type Chat = {
title?: Maybe<Scalars['String']> title?: Maybe<Scalars['String']>
unread?: Maybe<Scalars['Int']> unread?: Maybe<Scalars['Int']>
updatedAt: Scalars['Int'] updatedAt: Scalars['Int']
users?: Maybe<Array<Maybe<Scalars['String']>>> users?: Maybe<Array<Maybe<Scalars['Int']>>>
} }
export type ChatInput = { export type ChatInput = {
@ -78,6 +78,7 @@ export type ChatMember = {
id: Scalars['Int'] id: Scalars['Int']
lastSeen?: Maybe<Scalars['DateTime']> lastSeen?: Maybe<Scalars['DateTime']>
name: Scalars['String'] name: Scalars['String']
online?: Maybe<Scalars['Boolean']>
slug: Scalars['String'] slug: Scalars['String']
userpic?: Maybe<Scalars['String']> userpic?: Maybe<Scalars['String']>
} }
@ -139,12 +140,13 @@ export type LoadShoutsOptions = {
} }
export type Message = { export type Message = {
author: Scalars['String'] author: Scalars['Int']
body: Scalars['String'] body: Scalars['String']
chatId: Scalars['String'] chatId: Scalars['String']
createdAt: Scalars['Int'] createdAt: Scalars['Int']
id: Scalars['Int'] id: Scalars['Int']
replyTo?: Maybe<Scalars['String']> replyTo?: Maybe<Scalars['String']>
seen?: Maybe<Scalars['Boolean']>
updatedAt?: Maybe<Scalars['Int']> updatedAt?: Maybe<Scalars['Int']>
} }
@ -353,6 +355,7 @@ export type Query = {
loadShout?: Maybe<Shout> loadShout?: Maybe<Shout>
loadShouts: Array<Maybe<Shout>> loadShouts: Array<Maybe<Shout>>
markdownBody: Scalars['String'] markdownBody: Scalars['String']
searchMessages: Result
searchRecipients: Result searchRecipients: Result
signIn: AuthResult signIn: AuthResult
signOut: AuthResult signOut: AuthResult
@ -417,6 +420,12 @@ export type QueryMarkdownBodyArgs = {
body: Scalars['String'] body: Scalars['String']
} }
export type QuerySearchMessagesArgs = {
by: MessagesBy
limit?: InputMaybe<Scalars['Int']>
offset?: InputMaybe<Scalars['Int']>
}
export type QuerySearchRecipientsArgs = { export type QuerySearchRecipientsArgs = {
limit?: InputMaybe<Scalars['Int']> limit?: InputMaybe<Scalars['Int']>
offset?: InputMaybe<Scalars['Int']> offset?: InputMaybe<Scalars['Int']>
@ -620,17 +629,13 @@ export type Stat = {
} }
export type Subscription = { export type Subscription = {
newMessage: Message newMessages: Message
onlineUpdated: Array<User> onlineUpdated: Array<User>
reactionUpdated: ReactionUpdating reactionUpdated: ReactionUpdating
shoutUpdated: Shout shoutUpdated: Shout
userUpdated: User userUpdated: User
} }
export type SubscriptionNewMessageArgs = {
chats?: InputMaybe<Array<Scalars['Int']>>
}
export type SubscriptionReactionUpdatedArgs = { export type SubscriptionReactionUpdatedArgs = {
shout: Scalars['String'] shout: Scalars['String']
} }