From b5c268472182faa07e951bf76b2b1092395d3b2c Mon Sep 17 00:00:00 2001 From: ilya-bkv Date: Mon, 14 Nov 2022 12:50:27 +0300 Subject: [PATCH 1/3] update markup --- src/graphql/types.gen.ts | 95 +++++++++++++++++++++++++++++++++------- src/stores/inbox.ts | 4 +- src/styles/Inbox.scss | 6 ++- src/utils/config.ts | 4 +- 4 files changed, 89 insertions(+), 20 deletions(-) diff --git a/src/graphql/types.gen.ts b/src/graphql/types.gen.ts index 7f93f85e..81c1ac59 100644 --- a/src/graphql/types.gen.ts +++ b/src/graphql/types.gen.ts @@ -24,18 +24,30 @@ export type AuthResult = { export type Author = { bio?: Maybe caption?: Maybe + id: Scalars['Int'] + lastSeen?: Maybe links?: Maybe>> name: Scalars['String'] + roles?: Maybe>> slug: Scalars['String'] + stat?: Maybe userpic?: Maybe } +export type AuthorStat = { + followers?: Maybe + followings?: Maybe + rating?: Maybe +} + export type Chat = { + admins?: Maybe>> createdAt: Scalars['Int'] createdBy: User description?: Maybe - id: Scalars['Int'] + id: Scalars['String'] messages: Array> + private?: Maybe title?: Maybe unread?: Maybe updatedAt: Scalars['Int'] @@ -52,8 +64,8 @@ export type ChatMember = { invitedAt?: Maybe invitedBy?: Maybe name: Scalars['String'] - pic?: Maybe slug: Scalars['String'] + userpic?: Maybe } export type Collab = { @@ -69,6 +81,7 @@ export type Collection = { createdAt: Scalars['DateTime'] createdBy: User desc?: Maybe + id: Scalars['Int'] publishedAt?: Maybe slug: Scalars['String'] title: Scalars['String'] @@ -84,6 +97,7 @@ export type Community = { createdAt: Scalars['DateTime'] createdBy: User desc?: Maybe + id: Scalars['Int'] name: Scalars['String'] pic: Scalars['String'] slug: Scalars['String'] @@ -108,7 +122,7 @@ export type Message = { chatId: Scalars['String'] createdAt: Scalars['Int'] id: Scalars['Int'] - replyTo?: Maybe + replyTo?: Maybe updatedAt?: Maybe } @@ -127,6 +141,7 @@ export type Mutation = { createReaction: Result createShout: Result createTopic: Result + deleteChat: Result deleteCollection: Result deleteCommunity: Result deleteMessage: Result @@ -175,7 +190,7 @@ export type MutationCreateCommunityArgs = { export type MutationCreateMessageArgs = { body: Scalars['String'] chatId: Scalars['String'] - replyTo?: InputMaybe + replyTo?: InputMaybe } export type MutationCreateReactionArgs = { @@ -190,6 +205,10 @@ export type MutationCreateTopicArgs = { input: TopicInput } +export type MutationDeleteChatArgs = { + chatId: Scalars['String'] +} + export type MutationDeleteCollectionArgs = { slug: Scalars['String'] } @@ -327,19 +346,21 @@ export type ProfileInput = { } export type Query = { - authorsAll: Array> + authorsAll: Array> collectionsAll: Array> + getAuthor: User getCollabs: Array> getCommunities: Array> getCommunity: Community getShoutBySlug: Shout + getTopic: Topic getUserCollections: Array> getUserRoles: Array> - getUsersBySlugs: Array> + getUsersBySlugs: Array> isEmailUsed: Scalars['Boolean'] - loadChat: Array> + loadChats: Result + loadMessages: Result markdownBody: Scalars['String'] - myChats: Array> reactionsByAuthor: Array> reactionsForShouts: Array> recentAll: Array> @@ -347,10 +368,14 @@ export type Query = { recentCommented: Array> recentPublished: Array> recentReacted: Array> + searchChats: Result + searchMessages: Result searchQuery?: Maybe>> + searchUsers: Result shoutsByAuthors: Array> shoutsByCollection: Array> shoutsByCommunities: Array> + shoutsByLayout: Array> shoutsByTopics: Array> shoutsForFeed: Array> signIn: AuthResult @@ -364,13 +389,17 @@ export type Query = { topicsByAuthor: Array> topicsByCommunity: Array> topicsRandom: Array> - userFollowedAuthors: Array> + userFollowedAuthors: Array> userFollowedCommunities: Array> userFollowedTopics: Array> - userFollowers: Array> + userFollowers: Array> userReactedShouts: Array> } +export type QueryGetAuthorArgs = { + slug: Scalars['String'] +} + export type QueryGetCommunityArgs = { slug?: InputMaybe } @@ -379,6 +408,10 @@ export type QueryGetShoutBySlugArgs = { slug: Scalars['String'] } +export type QueryGetTopicArgs = { + slug: Scalars['String'] +} + export type QueryGetUserCollectionsArgs = { author: Scalars['String'] } @@ -395,7 +428,12 @@ export type QueryIsEmailUsedArgs = { email: Scalars['String'] } -export type QueryLoadChatArgs = { +export type QueryLoadChatsArgs = { + amount?: InputMaybe + offset?: InputMaybe +} + +export type QueryLoadMessagesArgs = { amount?: InputMaybe chatId: Scalars['String'] offset?: InputMaybe @@ -442,12 +480,30 @@ export type QueryRecentReactedArgs = { offset: Scalars['Int'] } +export type QuerySearchChatsArgs = { + amount?: InputMaybe + offset?: InputMaybe + q: Scalars['String'] +} + +export type QuerySearchMessagesArgs = { + amount?: InputMaybe + offset?: InputMaybe + q: Scalars['String'] +} + export type QuerySearchQueryArgs = { limit: Scalars['Int'] offset: Scalars['Int'] q?: InputMaybe } +export type QuerySearchUsersArgs = { + amount?: InputMaybe + offset?: InputMaybe + q: Scalars['String'] +} + export type QueryShoutsByAuthorsArgs = { limit: Scalars['Int'] offset: Scalars['Int'] @@ -466,6 +522,12 @@ export type QueryShoutsByCommunitiesArgs = { slugs: Array> } +export type QueryShoutsByLayoutArgs = { + amount: Scalars['Int'] + layout?: InputMaybe + offset: Scalars['Int'] +} + export type QueryShoutsByTopicsArgs = { limit: Scalars['Int'] offset: Scalars['Int'] @@ -606,8 +668,8 @@ export type Resource = { } export type Result = { - author?: Maybe - authors?: Maybe>> + author?: Maybe + authors?: Maybe>> chat?: Maybe chats?: Maybe>> communities?: Maybe>> @@ -620,8 +682,10 @@ export type Result = { reactions?: Maybe>> shout?: Maybe shouts?: Maybe>> + slugs?: Maybe>> topic?: Maybe topics?: Maybe>> + uids?: Maybe>> } export type Role = { @@ -640,7 +704,6 @@ export type Shout = { createdAt: Scalars['DateTime'] deletedAt?: Maybe deletedBy?: Maybe - draft?: Maybe id: Scalars['Int'] lang?: Maybe layout?: Maybe @@ -654,8 +717,8 @@ export type Shout = { topics?: Maybe>> updatedAt?: Maybe updatedBy?: Maybe - versionOf?: Maybe - visibleFor?: Maybe>> + versionOf?: Maybe + visibility?: Maybe } export type ShoutInput = { diff --git a/src/stores/inbox.ts b/src/stores/inbox.ts index 7223b188..bbf7c471 100644 --- a/src/stores/inbox.ts +++ b/src/stores/inbox.ts @@ -1,4 +1,4 @@ import { atom } from 'nanostores' -import type { ChatResult } from '../graphql/types.gen' +import type { Chat } from '../graphql/types.gen' -export const chats = atom([]) +export const chats = atom([]) diff --git a/src/styles/Inbox.scss b/src/styles/Inbox.scss index fab4cbfb..581f29db 100644 --- a/src/styles/Inbox.scss +++ b/src/styles/Inbox.scss @@ -4,6 +4,10 @@ main { flex-direction: column; position: relative; } +// TODO: добавлять когда открыт чат +body { + overflow: hidden; +} .messages { top: 74px; @@ -17,7 +21,7 @@ main { flex: 1; flex-direction: column; position: fixed; - z-index: 1; + z-index: 9; > .row { flex: 1; diff --git a/src/utils/config.ts b/src/utils/config.ts index ab0ab70b..8501f5bd 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -1,4 +1,6 @@ export const isDev = import.meta.env.MODE === 'development' -export const apiBaseUrl = 'https://newapi.discours.io' +export const apiBaseUrl = 'https://testapi.discours.io' +// export const apiBaseUrl = 'https://newapi.discours.io' +// testapi.discours.io // export const apiBaseUrl = 'http://localhost:8080' From cc54f055f3e569cd1f08058b609b841a3e079a45 Mon Sep 17 00:00:00 2001 From: ilya-bkv Date: Mon, 14 Nov 2022 16:07:49 +0300 Subject: [PATCH 2/3] wip --- src/components/Inbox/DialogCard.tsx | 2 +- src/components/Views/Inbox.tsx | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/Inbox/DialogCard.tsx b/src/components/Inbox/DialogCard.tsx index dea0d61d..df1b1ce2 100644 --- a/src/components/Inbox/DialogCard.tsx +++ b/src/components/Inbox/DialogCard.tsx @@ -11,7 +11,7 @@ type Props = { const DialogCard = (props: Props) => { return ( -
+
diff --git a/src/components/Views/Inbox.tsx b/src/components/Views/Inbox.tsx index 747f2163..f59e101c 100644 --- a/src/components/Views/Inbox.tsx +++ b/src/components/Views/Inbox.tsx @@ -132,7 +132,9 @@ export const InboxView = () => {
- {(author) => } + {(author) => ( + + )}
From 8e88d2a68ba3e128ad694f119903df4a82491e96 Mon Sep 17 00:00:00 2001 From: ilya-bkv Date: Tue, 15 Nov 2022 12:45:55 +0300 Subject: [PATCH 3/3] Create chat --- src/components/Inbox/DialogAvatar.tsx | 8 ++++---- src/components/Inbox/DialogCard.tsx | 28 ++++++++++++++++++++++++++- src/components/Views/Inbox.tsx | 4 ++++ src/graphql/mutation/create-chat.ts | 12 ++++++++++++ src/utils/apiClient.ts | 5 +++++ 5 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 src/graphql/mutation/create-chat.ts diff --git a/src/components/Inbox/DialogAvatar.tsx b/src/components/Inbox/DialogAvatar.tsx index 7d3788d8..569292dd 100644 --- a/src/components/Inbox/DialogAvatar.tsx +++ b/src/components/Inbox/DialogAvatar.tsx @@ -18,10 +18,10 @@ const colors = [ '#ca6702', '#ae2012', '#9b2226', - '#668CFF', - '#C34CFE', - '#E699FF', - '#6633FF' + '#668cff', + '#c34cfe', + '#e699ff', + '#6633ff' ] const getById = (letter: string) => diff --git a/src/components/Inbox/DialogCard.tsx b/src/components/Inbox/DialogCard.tsx index df1b1ce2..880c80d3 100644 --- a/src/components/Inbox/DialogCard.tsx +++ b/src/components/Inbox/DialogCard.tsx @@ -2,6 +2,11 @@ import './DialogCard.module.scss' import styles from './DialogCard.module.scss' import DialogAvatar from './DialogAvatar' import type { Author } from '../../graphql/types.gen' +import { useAuthStore } from '../../stores/auth' +import { createEffect, createSignal } from 'solid-js' +import { apiClient } from '../../utils/apiClient' + +const { session } = useAuthStore() type Props = { online?: boolean @@ -9,9 +14,30 @@ type Props = { counter?: number } & Author +const createChat = async ({ title, members }: { title?: string; members?: string[] }): Promise => { + await apiClient.createChat({ title, members }) +} + const DialogCard = (props: Props) => { + const [currentUser, setCurrentUser] = createSignal(undefined) + createEffect(() => { + setCurrentUser(session()?.user?.slug) + }) + + const handleOpenChat = async () => { + try { + const test = await apiClient.createChat({ + title: 'test chat', + members: [props.slug, currentUser()] + }) + console.log('!!! test:', test) + } catch (err) { + console.log('!!! errr:', err) + } + } + return ( -
+
diff --git a/src/components/Views/Inbox.tsx b/src/components/Views/Inbox.tsx index f59e101c..5fc0d008 100644 --- a/src/components/Views/Inbox.tsx +++ b/src/components/Views/Inbox.tsx @@ -6,17 +6,20 @@ import { Loading } from '../Loading' import DialogCard from '../Inbox/DialogCard' import Search from '../Inbox/Search' import { useAuthorsStore } from '../../stores/zine/authors' +// const { session } = useAuthStore() import '../../styles/Inbox.scss' // Для моков import { createClient } from '@urql/core' import { findAndLoadGraphQLConfig } from '@graphql-codegen/cli' +import { useAuthStore } from '../../stores/auth' const OWNER_ID = '501' const client = createClient({ url: 'https://graphqlzero.almansi.me/api' }) +// console.log('!!! session:', session) // interface InboxProps { // chats?: Chat[] // messages?: Message[] @@ -58,6 +61,7 @@ export const InboxView = () => { const [authors, setAuthors] = createSignal([]) const [postMessageText, setPostMessageText] = createSignal('') const [loading, setLoading] = createSignal(false) + const { sortedAuthors } = useAuthorsStore() createEffect(() => { diff --git a/src/graphql/mutation/create-chat.ts b/src/graphql/mutation/create-chat.ts new file mode 100644 index 00000000..b700707b --- /dev/null +++ b/src/graphql/mutation/create-chat.ts @@ -0,0 +1,12 @@ +import { gql } from '@urql/core' + +export default gql` + mutation CreateChat($title: String, $members: [String]!) { + createChat(title: $title, members: $members) { + error + chat { + id + } + } + } +` diff --git a/src/utils/apiClient.ts b/src/utils/apiClient.ts index 9a52d77f..b24b6ab7 100644 --- a/src/utils/apiClient.ts +++ b/src/utils/apiClient.ts @@ -29,6 +29,7 @@ import authorsBySlugs from '../graphql/query/authors-by-slugs' import incrementView from '../graphql/mutation/increment-view' import myChats from '../graphql/query/im-chats' import loadChat from '../graphql/query/im-load-messages' +import CreateChat from '../graphql/mutation/create-chat' const FEED_SIZE = 50 @@ -326,6 +327,10 @@ export const apiClient = { incrementView: async ({ articleSlug }) => { await privateGraphQLClient.mutation(incrementView, { shout: articleSlug }) }, + createChat: async ({ title, members }) => { + return await privateGraphQLClient.mutation(CreateChat, { title: title, members: members }).toPromise() + }, + getChats: async (payload = {}) => { const resp = await privateGraphQLClient.query(myChats, payload).toPromise() return resp.data.myChats