From 34de518d2050b081f0202e23fc72e822c92e6ed0 Mon Sep 17 00:00:00 2001 From: GregShen Date: Fri, 19 Aug 2022 22:34:30 +0800 Subject: [PATCH] done --- .../web/src/components/Message/MessageBox.tsx | 82 ++++++++++++------- .../components/Message/NewMessageModal.tsx | 23 ++---- 2 files changed, 59 insertions(+), 46 deletions(-) diff --git a/packages/web/src/components/Message/MessageBox.tsx b/packages/web/src/components/Message/MessageBox.tsx index c58c413..c545f98 100644 --- a/packages/web/src/components/Message/MessageBox.tsx +++ b/packages/web/src/components/Message/MessageBox.tsx @@ -1,9 +1,9 @@ import React, { useEffect, useState } from "react"; -import { Message, ListMessagesQuery, CreateMessageMutation, UpdateConversationMutation } from "API"; +import { Message, ListMessagesQuery, CreateMessageMutation, UpdateConversationMutation, ListConversationsQuery, CreateConversationMutation } from "API"; import GraphQLAPI, { graphqlOperation } from "@aws-amplify/api-graphql"; import { GraphQLSubscription } from '@aws-amplify/api'; -import { listMessages } from "graphql/amplify/queries"; -import { createMessage, updateConversation } from "graphql/amplify/mutations"; +import { listConversations, listMessages } from "graphql/amplify/queries"; +import { createConversation, createMessage, updateConversation } from "graphql/amplify/mutations"; import { onCreateMessageByConversationId } from "graphql/amplify/subscriptions"; import { useAccount } from "wagmi"; @@ -45,7 +45,7 @@ const MessageBox = ({ conversationId, peerAddress, messages }: Props) => { }, [conversationId, messages]); useEffect(() => { setStateMessages([...messages]) - }, [conversationId]) + }, [conversationId, messages]) const handleChange = (e: React.ChangeEvent) => { setMessage(e.target.value); @@ -53,35 +53,59 @@ const MessageBox = ({ conversationId, peerAddress, messages }: Props) => { const handleSend = async (e: React.FormEvent) => { e.preventDefault(); if (message.trim() === '') return; - try { - const { data } = (await GraphQLAPI.graphql({ - query: createMessage, - variables: { - input: { - conversationId: conversationId, - body: message, - sender: address, - receiver: peerAddress, - }, - }, - })) as { data: CreateMessageMutation }; - const { update } = (await GraphQLAPI.graphql({ - query: updateConversation, + const { data: query } = await GraphQLAPI.graphql({ + query: listConversations, + variables: { + filter: { + conversationId: { eq: conversationId } + } + } + }) as { data: ListConversationsQuery } + if (query.listConversations?.items.length === 0) { + const list = conversationId.split('-') + const opponentAddress = list.find((item: string) => item !== address) + const { data: mutation } = await GraphQLAPI.graphql({ + query: createConversation, variables: { input: { conversationId: conversationId, - lastMessage: message, - }, - }, - })) as { update: UpdateConversationMutation } - console.log(data) - } catch (e) { - console.log(e); - } finally { - setMessage(""); + participants: [address, opponentAddress] + } + } + }) as { data: CreateConversationMutation } + if (mutation.createConversation?.conversationId) { + try { + const { data } = (await GraphQLAPI.graphql({ + query: createMessage, + variables: { + input: { + conversationId: conversationId, + body: message, + sender: address, + receiver: peerAddress, + }, + }, + })) as { data: CreateMessageMutation }; + const { update } = (await GraphQLAPI.graphql({ + query: updateConversation, + variables: { + input: { + conversationId: conversationId, + lastMessage: message, + }, + }, + })) as { update: UpdateConversationMutation } + console.log(data) + } catch (e) { + console.log(e); + } finally { + setMessage(""); + } + return false + }; } - return false - }; + } + return (
diff --git a/packages/web/src/components/Message/NewMessageModal.tsx b/packages/web/src/components/Message/NewMessageModal.tsx index 1ba3b3a..542ccf7 100644 --- a/packages/web/src/components/Message/NewMessageModal.tsx +++ b/packages/web/src/components/Message/NewMessageModal.tsx @@ -48,37 +48,26 @@ const NewMessageModal = (props: Props) => { let opponentAddress = profile?.ownedBy console.log(opponentAddress) if (opponentAddress && address) { - let converstaionId = (BigInt(address) > BigInt(opponentAddress)) ? `${address}-${opponentAddress}` : `${opponentAddress}-${address}` - console.log(converstaionId) + let conversationId = (BigInt(address) > BigInt(opponentAddress)) ? `${address}-${opponentAddress}` : `${opponentAddress}-${address}` + console.log(conversationId) try { setLoading(true) const { data: query } = await GraphQLAPI.graphql({ query: listConversations, variables: { filter: { - conversationId: { eq: converstaionId } + conversationId: { eq: conversationId } } } }) as { data: ListConversationsQuery } console.log(query.listConversations?.items.length) if (query.listConversations?.items.length !== 0) { closeModal() - router.push(`/messages/${converstaionId}`) + router.push(`/messages/${conversationId}`) } if (query.listConversations?.items.length === 0) { - const { data: mutation } = await GraphQLAPI.graphql({ - query: createConversation, - variables: { - input: { - conversationId: converstaionId, - participants: [address, opponentAddress] - } - } - }) as { data: CreateConversationMutation } - if (mutation.createConversation?.conversationId) { - closeModal() - router.push(`/messages/${converstaionId}`) - } + closeModal() + router.push(`/messages/${conversationId}`) } } catch (e) { toast.error("Something went wrong")