From eebcd8c36f21db746728516af2783e9bcbf0743d Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 12 Sep 2024 22:23:47 +0300 Subject: [PATCH] optimizations, see ui direct chat, fixes --- package-lock.json | 26 +++ package.json | 2 + src/App.tsx | 9 +- src/background.ts | 54 ++++-- src/components/Chat/ChatDirect.tsx | 204 +++++++++++++++------ src/components/Chat/ChatGroup.tsx | 6 +- src/components/Chat/GroupAnnouncements.tsx | 8 +- src/components/Chat/GroupForum.tsx | 2 +- src/components/Chat/MessageItem.tsx | 8 +- src/components/Group/Forum/GroupMail.tsx | 6 +- src/components/Group/Group.tsx | 36 +++- 11 files changed, 262 insertions(+), 99 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9d8df9c..0fd15ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,9 +18,11 @@ "@testing-library/jest-dom": "^6.4.6", "@testing-library/user-event": "^14.5.2", "@tiptap/extension-color": "^2.5.9", + "@tiptap/extension-highlight": "^2.6.6", "@tiptap/extension-image": "^2.6.6", "@tiptap/extension-placeholder": "^2.6.2", "@tiptap/extension-text-style": "^2.5.9", + "@tiptap/extension-underline": "^2.6.6", "@tiptap/pm": "^2.5.9", "@tiptap/react": "^2.5.9", "@tiptap/starter-kit": "^2.5.9", @@ -2300,6 +2302,18 @@ "@tiptap/core": "^2.5.9" } }, + "node_modules/@tiptap/extension-highlight": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/@tiptap/extension-highlight/-/extension-highlight-2.6.6.tgz", + "integrity": "sha512-Z02AYWm1AJAfhmfT4fGCI3YitijF4uNu+eiuq7OxhCiVf9IYaq8xlH2YMxa09QvMUo70ovklxk97+vQUUHeqfQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.6.6" + } + }, "node_modules/@tiptap/extension-history": { "version": "2.5.9", "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.5.9.tgz", @@ -2435,6 +2449,18 @@ "@tiptap/core": "^2.5.9" } }, + "node_modules/@tiptap/extension-underline": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.6.6.tgz", + "integrity": "sha512-3A4HqsDM/AFb2VaeWACpGexjgI257kz0yU4jNV8uyydDR2KhqeinuEnoSoOmx9T3pL006TWfPg4vaQYPO3qvrQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.6.6" + } + }, "node_modules/@tiptap/pm": { "version": "2.6.6", "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.6.6.tgz", diff --git a/package.json b/package.json index 9ca8095..2f65a5b 100644 --- a/package.json +++ b/package.json @@ -22,9 +22,11 @@ "@testing-library/jest-dom": "^6.4.6", "@testing-library/user-event": "^14.5.2", "@tiptap/extension-color": "^2.5.9", + "@tiptap/extension-highlight": "^2.6.6", "@tiptap/extension-image": "^2.6.6", "@tiptap/extension-placeholder": "^2.6.2", "@tiptap/extension-text-style": "^2.5.9", + "@tiptap/extension-underline": "^2.6.6", "@tiptap/pm": "^2.5.9", "@tiptap/react": "^2.5.9", "@tiptap/starter-kit": "^2.5.9", diff --git a/src/App.tsx b/src/App.tsx index f9d06b0..7236213 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1263,6 +1263,7 @@ function App() { { setExtstate("send-qort"); + setIsOpenDrawerProfile(false) }} > Transfer QORT @@ -1291,6 +1292,7 @@ function App() { { setExtstate("download-wallet"); + setIsOpenDrawerProfile(false) }} src={Download} style={{ @@ -1300,7 +1302,10 @@ function App() { { + logoutFunc() + setIsOpenDrawerProfile(false) + }} style={{ cursor: "pointer", }} @@ -1554,7 +1559,7 @@ function App() { { const address = wallet.address0; const dataDirects = directs.filter((direct)=> direct?.sender !== address) try { - + if(!dataDirects || dataDirects?.length === 0) return isFocused = await checkWebviewFocus() if(isFocused){ @@ -264,7 +264,7 @@ if (!oldestLatestTimestamp || oldChat?.timestamp > oldestLatestTimestamp?.timest } }); - + console.log('newestLatestTimestamp', newestLatestTimestamp) if(checkDifference(newestLatestTimestamp.timestamp) && !oldestLatestTimestamp || (newestLatestTimestamp && newestLatestTimestamp?.timestamp > oldestLatestTimestamp?.timestamp)){ const notificationId = 'chat_notification_' + Date.now() + '_type=direct' + `_from=${newestLatestTimestamp.address}`; chrome.notifications.create(notificationId, { @@ -1062,7 +1062,7 @@ async function getNameOrAddress(receiver) { } } -async function getPublicKey(receiver) { +export async function getPublicKey(receiver) { try { const validApi = await getBaseApi() @@ -1326,8 +1326,8 @@ async function sendChatGroup({ privateKey: uint8PrivateKey, publicKey: uint8PublicKey, }; - const balance = await getBalanceInfo(); - const hasEnoughBalance = +balance < 4 ? false : true; + // const balance = await getBalanceInfo(); + // const hasEnoughBalance = +balance < 4 ? false : true; const difficulty = 8; const tx = await createTransaction(181, keyPair, { @@ -1343,9 +1343,9 @@ async function sendChatGroup({ isText: 1, }); - if (!hasEnoughBalance) { - throw new Error("Must have at least 4 QORT to send a chat message"); - } + // if (!hasEnoughBalance) { + // throw new Error("Must have at least 4 QORT to send a chat message"); + // } const path = chrome.runtime.getURL("memory-pow.wasm.full"); const { nonce, chatBytesArray } = await computePow({ @@ -1366,15 +1366,27 @@ async function sendChatGroup({ } async function sendChatDirect({ + address, directTo, typeMessage, chatReference, messageText, + publicKeyOfRecipient }) { + let recipientPublicKey + let recipientAddress = address + if(publicKeyOfRecipient){ + recipientPublicKey = publicKeyOfRecipient + } else { + recipientAddress = await getNameOrAddress(directTo) + recipientPublicKey = await getPublicKey(recipientAddress) + } + if(!recipientAddress){ + recipientAddress = await getNameOrAddress(directTo) + } - const recipientAddress = await getNameOrAddress(directTo) - const recipientPublicKey = await getPublicKey(recipientAddress) + if(!recipientPublicKey) throw new Error('Cannot retrieve publickey') @@ -1390,8 +1402,8 @@ async function sendChatDirect({ privateKey: uint8PrivateKey, publicKey: uint8PublicKey, }; - const balance = await getBalanceInfo(); - const hasEnoughBalance = +balance < 4 ? false : true; + // const balance = await getBalanceInfo(); + // const hasEnoughBalance = +balance < 4 ? false : true; const difficulty = 8; @@ -1412,9 +1424,9 @@ async function sendChatDirect({ isText: 1, }); - if (!hasEnoughBalance) { - throw new Error("Must have at least 4 QORT to send a chat message"); - } + // if (!hasEnoughBalance) { + // throw new Error("Must have at least 4 QORT to send a chat message"); + // } const path = chrome.runtime.getURL("memory-pow.wasm.full"); @@ -1490,6 +1502,7 @@ async function decryptDirectFunc({ messages, involvingAddress }) { publicKey: uint8PublicKey, }; for (const message of messages) { + console.log('messagedep', message) try { const decodedMessage = decryptChatMessage( message.data, @@ -3607,9 +3620,11 @@ chrome?.runtime?.onMessage.addListener((request, sender, sendResponse) => { typeMessage = undefined, chatReference = undefined, messageText, + publicKeyOfRecipient, + address } = request.payload; - sendChatDirect({ directTo, chatReference, messageText, typeMessage }) + sendChatDirect({ directTo, chatReference, messageText, typeMessage, publicKeyOfRecipient, address }) .then((res) => { sendResponse(res); @@ -3669,8 +3684,9 @@ chrome?.runtime?.onMessage.addListener((request, sender, sendResponse) => { const wallet = await getSaveWallet(); const address = wallet.address0; const key1 = `tempPublish-${address}` - - chrome.storage.local.remove(["keyPair", "walletInfo", "apiKey", "active-groups-directs", key1], () => { + const key2 = `group-data-${address}` + + chrome.storage.local.remove(["keyPair", "walletInfo", "apiKey", "active-groups-directs", key1, key2], () => { if (chrome.runtime.lastError) { // Handle error console.error(chrome.runtime.lastError.message); @@ -4009,7 +4025,7 @@ chrome.runtime?.onInstalled.addListener((details) => { chrome.alarms?.get("checkForNotifications", (existingAlarm) => { if (!existingAlarm) { // If the alarm does not exist, create it - chrome.alarms.create("checkForNotifications", { periodInMinutes: 4 }); + chrome.alarms.create("checkForNotifications", { periodInMinutes: 10 }); } }); diff --git a/src/components/Chat/ChatDirect.tsx b/src/components/Chat/ChatDirect.tsx index 6b35eec..8ab3e8c 100644 --- a/src/components/Chat/ChatDirect.tsx +++ b/src/components/Chat/ChatDirect.tsx @@ -11,13 +11,18 @@ import { LoadingSnackbar } from '../Snackbar/LoadingSnackbar'; import { getNameInfo } from '../Group/Group'; import { Spacer } from '../../common/Spacer'; import { CustomizedSnackbars } from '../Snackbar/Snackbar'; -import { getBaseApiReactSocket, isMobile } from '../../App'; +import { getBaseApiReactSocket, isMobile, pauseAllQueues, resumeAllQueues } from '../../App'; +import { getPublicKey } from '../../background'; +import { useMessageQueue } from '../../MessageQueueContext'; +import { executeEvent } from '../../utils/events'; -export const ChatDirect = ({ myAddress, isNewChat, selectedDirect, setSelectedDirect, setNewChat, getTimestampEnterChat, myName}) => { +export const ChatDirect = ({ myAddress, isNewChat, selectedDirect, setSelectedDirect, setNewChat, getTimestampEnterChat, myName, balance}) => { + const { queueChats, addToQueue, } = useMessageQueue(); + const [messages, setMessages] = useState([]) const [isSending, setIsSending] = useState(false) const [directToValue, setDirectToValue] = useState('') @@ -25,14 +30,41 @@ export const ChatDirect = ({ myAddress, isNewChat, selectedDirect, setSelectedDi const [isLoading, setIsLoading] = useState(false) const [openSnack, setOpenSnack] = React.useState(false); const [infoSnack, setInfoSnack] = React.useState(null); + const [publicKeyOfRecipient, setPublicKeyOfRecipient] = React.useState("") const hasInitializedWebsocket = useRef(false) const editorRef = useRef(null); + const socketRef = useRef(null); + const timeoutIdRef = useRef(null); + const groupSocketTimeoutRef = useRef(null); + const setEditorRef = (editorInstance) => { editorRef.current = editorInstance; }; - + const publicKeyOfRecipientRef = useRef(null) + const getPublicKeyFunc = async (address)=> { + try { + const publicKey = await getPublicKey(address) + if(publicKeyOfRecipientRef.current !== selectedDirect?.address) return + setPublicKeyOfRecipient(publicKey) + } catch (error) { + + } + } + const tempMessages = useMemo(()=> { + if(!selectedDirect?.address) return [] + if(queueChats[selectedDirect?.address]){ + return queueChats[selectedDirect?.address] + } + return [] + }, [selectedDirect?.address, queueChats]) + useEffect(()=> { + if(selectedDirect?.address){ + publicKeyOfRecipientRef.current = selectedDirect?.address + getPublicKeyFunc(publicKeyOfRecipientRef.current) + } + }, [selectedDirect?.address]) @@ -54,7 +86,7 @@ export const ChatDirect = ({ myAddress, isNewChat, selectedDirect, setSelectedDi ...item, id: item.signature, text: item.message, - unread: true + unread: item?.sender === myAddress ? false : true } } ) setMessages((prev)=> [...prev, ...formatted]) @@ -80,78 +112,106 @@ export const ChatDirect = ({ myAddress, isNewChat, selectedDirect, setSelectedDi } } + const forceCloseWebSocket = () => { + if (socketRef.current) { + console.log('Force closing the WebSocket'); + clearTimeout(timeoutIdRef.current); + clearTimeout(groupSocketTimeoutRef.current); + socketRef.current.close(1000, 'forced'); + socketRef.current = null; + } + }; + + const pingWebSocket = () => { + try { + if (socketRef.current?.readyState === WebSocket.OPEN) { + socketRef.current.send('ping'); + timeoutIdRef.current = setTimeout(() => { + if (socketRef.current) { + socketRef.current.close(); + clearTimeout(groupSocketTimeoutRef.current); + } + }, 5000); // Close if no pong in 5 seconds + } + } catch (error) { + console.error('Error during ping:', error); + } + }; + + const initWebsocketMessageGroup = () => { - let timeoutId - let groupSocketTimeout - - let socketTimeout: any - let socketLink = `${getBaseApiReactSocket()}/websockets/chat/messages?involving=${selectedDirect?.address}&involving=${myAddress}&encoding=BASE64&limit=100` - const socket = new WebSocket(socketLink) - - const pingGroupSocket = () => { - socket.send('ping') - timeoutId = setTimeout(() => { - socket.close() - clearTimeout(groupSocketTimeout) - }, 5000) // Close the WebSocket connection if no pong message is received within 5 seconds. - } - socket.onopen = () => { - - setTimeout(pingGroupSocket, 50) - } - socket.onmessage = (e) => { + forceCloseWebSocket(); // Close any existing connection + + if (!selectedDirect?.address || !myAddress) return; + + const socketLink = `${getBaseApiReactSocket()}/websockets/chat/messages?involving=${selectedDirect?.address}&involving=${myAddress}&encoding=BASE64&limit=100`; + socketRef.current = new WebSocket(socketLink); + + socketRef.current.onopen = () => { + console.log('WebSocket connection opened'); + setTimeout(pingWebSocket, 50); // Initial ping + }; + + socketRef.current.onmessage = (e) => { try { if (e.data === 'pong') { - - clearTimeout(timeoutId) - groupSocketTimeout = setTimeout(pingGroupSocket, 45000) - return + clearTimeout(timeoutIdRef.current); + groupSocketTimeoutRef.current = setTimeout(pingWebSocket, 45000); // Ping every 45 seconds } else { - decryptMessages(JSON.parse(e.data)) - setIsLoading(false) + decryptMessages(JSON.parse(e.data)); + setIsLoading(false); } - } catch (error) { - + console.error('Error handling WebSocket message:', error); } - - } - socket.onclose = () => { - console.log('closed') - clearTimeout(socketTimeout) - setTimeout(() => initWebsocketMessageGroup(), 50) - - } - socket.onerror = (e) => { - clearTimeout(groupSocketTimeout) - socket.close() - } - } + }; + + socketRef.current.onclose = (event) => { + clearTimeout(groupSocketTimeoutRef.current); + clearTimeout(timeoutIdRef.current); + console.warn(`WebSocket closed: ${event.reason || 'unknown reason'}`); + if (event.reason !== 'forced' && event.code !== 1000) { + setTimeout(() => initWebsocketMessageGroup(), 10000); // Retry after 10 seconds + } + }; + + socketRef.current.onerror = (error) => { + console.error('WebSocket error:', error); + clearTimeout(groupSocketTimeoutRef.current); + clearTimeout(timeoutIdRef.current); + if (socketRef.current) { + socketRef.current.close(); + } + }; + }; - useEffect(()=> { - if(hasInitializedWebsocket.current) return - setIsLoading(true) - initWebsocketMessageGroup() - hasInitializedWebsocket.current = true - }, []) + useEffect(() => { + if (hasInitializedWebsocket.current || isNewChat) return; + setIsLoading(true); + initWebsocketMessageGroup(); + hasInitializedWebsocket.current = true; + return () => { + forceCloseWebSocket(); // Clean up WebSocket on component unmount + }; + }, [selectedDirect?.address, myAddress, isNewChat]); -const sendChatDirect = async ({ chatReference = undefined, messageText}: any)=> { +const sendChatDirect = async ({ chatReference = undefined, messageText}: any, address, publicKeyOfRecipient, isNewChatVar)=> { try { - const directTo = isNewChat ? directToValue : selectedDirect.address + const directTo = isNewChatVar ? directToValue : address if(!directTo) return return new Promise((res, rej)=> { chrome?.runtime?.sendMessage({ action: "sendChatDirect", payload: { - directTo, chatReference, messageText + directTo, chatReference, messageText, publicKeyOfRecipient, address: directTo }}, async (response) => { if (!response?.error) { - if(isNewChat){ + if(isNewChatVar){ let getRecipientName = null try { @@ -186,6 +246,7 @@ const sendChatDirect = async ({ chatReference = undefined, messageText}: any)=> }) } catch (error) { throw new Error(error) + } finally { } } const clearEditorContent = () => { @@ -197,33 +258,60 @@ const clearEditorContent = () => { const sendMessage = async ()=> { try { + if(+balance < 4) throw new Error('You need at least 4 QORT to send a message') if(isSending) return if (editorRef.current) { const htmlContent = editorRef.current.getHTML(); if(!htmlContent?.trim() || htmlContent?.trim() === '

') return setIsSending(true) + pauseAllQueues() const message = JSON.stringify(htmlContent) - const res = await sendChatDirect({ messageText: htmlContent}) + + if(isNewChat){ + await sendChatDirect({ messageText: htmlContent}, null, null, true) + return + } + const sendMessageFunc = async () => { + await sendChatDirect({ messageText: htmlContent}, selectedDirect?.address, publicKeyOfRecipient, false) + }; + + // Add the function to the queue + const messageObj = { + message: { + text: htmlContent, + timestamp: Date.now(), + senderName: myName, + sender: myAddress + }, + + } + addToQueue(sendMessageFunc, messageObj, 'chat-direct', + selectedDirect?.address ); + setTimeout(() => { + executeEvent("sent-new-message-group", {}) + }, 150); + clearEditorContent() clearEditorContent() } // send chat message } catch (error) { + const errorMsg = error?.message || error setInfoSnack({ type: "error", - message: error, + message: errorMsg === 'invalid signature' ? 'You need at least 4 QORT to send a message' : errorMsg, }); setOpenSnack(true); console.error(error) } finally { setIsSending(false) + resumeAllQueues() } } - return (
{ )} - +
{ +export const ChatGroup = ({selectedGroup, secretKey, setSecretKey, getSecretKey, myAddress, handleNewEncryptionNotification, hide, handleSecretKeyCreationInProgress, triedToFetchSecretKey, myName, balance}) => { const [messages, setMessages] = useState([]) const [isSending, setIsSending] = useState(false) const [isLoading, setIsLoading] = useState(false) @@ -277,6 +277,7 @@ const clearEditorContent = () => { const sendMessage = async ()=> { try { if(isSending) return + if(+balance < 4) throw new Error('You need at least 4 QORT to send a message') pauseAllQueues() if (editorRef.current) { const htmlContent = editorRef.current.getHTML(); @@ -313,9 +314,10 @@ const clearEditorContent = () => { } // send chat message } catch (error) { + const errorMsg = error?.message || error setInfoSnack({ type: "error", - message: error, + message: errorMsg, }); setOpenSnack(true); console.error(error) diff --git a/src/components/Chat/GroupAnnouncements.tsx b/src/components/Chat/GroupAnnouncements.tsx index bf94e1c..d592523 100644 --- a/src/components/Chat/GroupAnnouncements.tsx +++ b/src/components/Chat/GroupAnnouncements.tsx @@ -335,11 +335,11 @@ export const GroupAnnouncements = ({ ); React.useEffect(() => { - if (selectedGroup && secretKey && !hasInitialized.current) { + if (selectedGroup && secretKey && !hasInitialized.current && !hide) { getAnnouncements(selectedGroup); hasInitialized.current = true } - }, [selectedGroup, secretKey]); + }, [selectedGroup, secretKey, hide]); const loadMore = async()=> { @@ -428,14 +428,14 @@ export const GroupAnnouncements = ({ }, [checkNewMessages]) useEffect(() => { - if(!secretKey) return + if(!secretKey || hide) return checkNewMessagesFunc() return () => { if (interval?.current) { clearInterval(interval.current) } } - }, [checkNewMessagesFunc]) + }, [checkNewMessagesFunc, hide]) diff --git a/src/components/Chat/GroupForum.tsx b/src/components/Chat/GroupForum.tsx index 72b4a8b..6ac300d 100644 --- a/src/components/Chat/GroupForum.tsx +++ b/src/components/Chat/GroupForum.tsx @@ -46,7 +46,7 @@ export const GroupForum = ({ left: hide && '-1000px' }} > - +
); diff --git a/src/components/Chat/MessageItem.tsx b/src/components/Chat/MessageItem.tsx index b53ce75..d940d69 100644 --- a/src/components/Chat/MessageItem.tsx +++ b/src/components/Chat/MessageItem.tsx @@ -6,7 +6,10 @@ import { Avatar, Box, Typography } from "@mui/material"; import { formatTimestamp } from "../../utils/time"; import { getBaseApi } from "../../background"; import { getBaseApiReact } from "../../App"; - +import { generateHTML } from "@tiptap/react"; +import Highlight from '@tiptap/extension-highlight' +import StarterKit from '@tiptap/starter-kit' +import Underline from '@tiptap/extension-underline' export const MessageItem = ({ message, onSeen, isLast, isTemp }) => { const { ref, inView } = useInView({ @@ -60,6 +63,9 @@ export const MessageItem = ({ message, onSeen, isLast, isTemp }) => { > {message?.senderName || message?.sender} + {message?.messageText && ( + + )} {message?.text?.type === "notification" ? ( ) : ( diff --git a/src/components/Group/Forum/GroupMail.tsx b/src/components/Group/Forum/GroupMail.tsx index 48bc62e..d1ce85b 100644 --- a/src/components/Group/Forum/GroupMail.tsx +++ b/src/components/Group/Forum/GroupMail.tsx @@ -63,7 +63,8 @@ export const GroupMail = ({ getSecretKey, secretKey, defaultThread, - setDefaultThread + setDefaultThread, + hide }) => { const [viewedThreads, setViewedThreads] = React.useState({}); const [filterMode, setFilterMode] = useState("Recently active"); @@ -353,6 +354,7 @@ export const GroupMail = ({ const filterModeRef = useRef(""); useEffect(() => { + if(hide) return if (filterModeRef.current !== filterMode) { firstMount.current = false; } @@ -368,7 +370,7 @@ export const GroupMail = ({ setTempData() firstMount.current = true; } - }, [groupId, members, filterMode]); + }, [groupId, members, filterMode, hide]); const closeThread = useCallback(() => { setCurrentThread(null); diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx index be246e6..6e6a14a 100644 --- a/src/components/Group/Group.tsx +++ b/src/components/Group/Group.tsx @@ -332,7 +332,6 @@ export const Group = ({ const [directs, setDirects] = useState([]); const [admins, setAdmins] = useState([]); const [adminsWithNames, setAdminsWithNames] = useState([]); -console.log('adminsWithNames', {adminsWithNames}, {admins}) const [members, setMembers] = useState([]); const [groupOwner, setGroupOwner] = useState(null); const [triedToFetchSecretKey, setTriedToFetchSecretKey] = useState(false); @@ -574,7 +573,6 @@ console.log('adminsWithNames', {adminsWithNames}, {admins}) let publishFromStorage let adminsFromStorage const groupData = await getGroupDataSingle(selectedGroup?.groupId) - console.log('groupData', groupData) if(groupData?.secretKeyData && Date.now() - groupData?.timestampLastSet < 3600000 ){ dataFromStorage = groupData.secretKeyData @@ -1518,27 +1516,42 @@ console.log('adminsWithNames', {adminsWithNames}, {admins}) setMemberCountFromSecretKeyData(null); setTriedToFetchSecretKey(false); setFirstSecretKeyInCreation(false); - setGroupSection("announcement"); + // setGroupSection("announcement"); + setGroupSection("chat"); setIsOpenDrawer(false) setTimeout(() => { setSelectedGroup(group); - getTimestampEnterChat(); + // getTimestampEnterChat(); }, 200); - if (groupSectionRef.current === "announcement") { + chrome?.runtime?.sendMessage({ - action: "addGroupNotificationTimestamp", + action: "addTimestampEnterChat", payload: { timestamp: Date.now(), groupId: group.groupId, }, }); - } + + setTimeout(() => { + getTimestampEnterChat(); + }, 200); + - setTimeout(() => { - getGroupAnnouncements(); - }, 600); + // if (groupSectionRef.current === "announcement") { + // chrome?.runtime?.sendMessage({ + // action: "addGroupNotificationTimestamp", + // payload: { + // timestamp: Date.now(), + // groupId: group.groupId, + // }, + // }); + // } + + // setTimeout(() => { + // getGroupAnnouncements(); + // }, 600); }} sx={{ display: "flex", @@ -1700,6 +1713,7 @@ console.log('adminsWithNames', {adminsWithNames}, {admins}) setSelectedDirect={setSelectedDirect} setNewChat={setNewChat} getTimestampEnterChat={getTimestampEnterChat} + balance={balance} /> )} @@ -1727,6 +1741,7 @@ console.log('adminsWithNames', {adminsWithNames}, {admins}) } triedToFetchSecretKey={triedToFetchSecretKey} myName={userInfo?.name} + balance={balance} /> )} {firstSecretKeyInCreation && @@ -1892,6 +1907,7 @@ console.log('adminsWithNames', {adminsWithNames}, {admins}) setSelectedDirect={setSelectedDirect} setNewChat={setNewChat} getTimestampEnterChat={getTimestampEnterChat} + myName={userInfo?.name} />