diff --git a/packages/messenger-widget/src/components/Chat/bl.ts b/packages/messenger-widget/src/components/Chat/bl.ts index 9adb1fc67..00005f655 100644 --- a/packages/messenger-widget/src/components/Chat/bl.ts +++ b/packages/messenger-widget/src/components/Chat/bl.ts @@ -214,7 +214,7 @@ export const handleMessages = async ( updateShowShimEffect: Function, ) => { if (!isMessageListInitialized && state.accounts.selectedContact) { - await fetchAndStoreMessages( + const items = await fetchAndStoreMessages( state.connection, state.auth.currentSession?.token!, state.accounts.selectedContact.account.ensName, @@ -234,74 +234,143 @@ export const handleMessages = async ( ? state.accounts.contacts.map((contact) => contact.account) : [], ); - } - const checkedContainers = containers.filter((container) => { - if (!state.accounts.selectedContact) { - throw Error('No selected contact'); - } + const checkedContainers = items.filter((container) => { + if (!state.accounts.selectedContact) { + throw Error('No selected contact'); + } - const account = isSameEnsName( - container.envelop.message.metadata.from, - state.accounts.selectedContact.account.ensName, + const account = isSameEnsName( + container.envelop.message.metadata.from, + state.accounts.selectedContact.account.ensName, + alias, + ) + ? state.accounts.selectedContact.account + : state.connection.account!; + + return account.profile?.publicSigningKey + ? checkSignature( + container.envelop.message, + account.profile?.publicSigningKey, + account.ensName, + container.envelop.message.signature, + ) + : true; + }); + + const newMessages = checkedContainers + .filter((container) => container.messageState === MessageState.Send) + .map((container) => ({ + ...container, + messageState: MessageState.Read, + })); + + const oldMessages = checkedContainers.filter( + (container) => + container.messageState === MessageState.Read || + container.messageState === MessageState.Created, + ); + + handleMessageContainer( + state, + oldMessages, alias, - ) - ? state.accounts.selectedContact.account - : state.connection.account!; + setListOfMessages, + dispatch, + ); - return account.profile?.publicSigningKey - ? checkSignature( - container.envelop.message, - account.profile?.publicSigningKey, - account.ensName, - container.envelop.message.signature, - ) - : true; - }); + if (!state.userDb) { + throw Error( + `[handleMessages] Couldn't handle new messages. User db not created.`, + ); + } - const newMessages = checkedContainers - .filter((container) => container.messageState === MessageState.Send) - .map((container) => ({ - ...container, - messageState: MessageState.Read, - })); + if (newMessages.length > 0) { + newMessages.forEach((message) => + dispatch({ + type: UserDbType.addMessage, + payload: { + container: message, + connection: state.connection, + }, + }), + ); + } - const oldMessages = checkedContainers.filter( - (container) => - container.messageState === MessageState.Read || - container.messageState === MessageState.Created, - ); + if (!isMessageListInitialized) { + scrollToBottomOfChat(); + updateIsMessageListInitialized(true); + } - handleMessageContainer( - state, - oldMessages, - alias, - setListOfMessages, - dispatch, - ); + updateShowShimEffect(false); + } else { + const checkedContainers = containers.filter((container) => { + if (!state.accounts.selectedContact) { + throw Error('No selected contact'); + } - if (!state.userDb) { - throw Error( - `[handleMessages] Couldn't handle new messages. User db not created.`, + const account = isSameEnsName( + container.envelop.message.metadata.from, + state.accounts.selectedContact.account.ensName, + alias, + ) + ? state.accounts.selectedContact.account + : state.connection.account!; + + return account.profile?.publicSigningKey + ? checkSignature( + container.envelop.message, + account.profile?.publicSigningKey, + account.ensName, + container.envelop.message.signature, + ) + : true; + }); + + const newMessages = checkedContainers + .filter((container) => container.messageState === MessageState.Send) + .map((container) => ({ + ...container, + messageState: MessageState.Read, + })); + + const oldMessages = checkedContainers.filter( + (container) => + container.messageState === MessageState.Read || + container.messageState === MessageState.Created, ); - } - if (newMessages.length > 0) { - newMessages.forEach((message) => - dispatch({ - type: UserDbType.addMessage, - payload: { - container: message, - connection: state.connection, - }, - }), + handleMessageContainer( + state, + oldMessages, + alias, + setListOfMessages, + dispatch, ); - } - if (!isMessageListInitialized) { - scrollToBottomOfChat(); - updateIsMessageListInitialized(true); - } + if (!state.userDb) { + throw Error( + `[handleMessages] Couldn't handle new messages. User db not created.`, + ); + } + + if (newMessages.length > 0) { + newMessages.forEach((message) => + dispatch({ + type: UserDbType.addMessage, + payload: { + container: message, + connection: state.connection, + }, + }), + ); + } - updateShowShimEffect(false); + if (!isMessageListInitialized) { + scrollToBottomOfChat(); + updateIsMessageListInitialized(true); + } + + updateShowShimEffect(false); + } }; diff --git a/packages/messenger-widget/src/components/Contacts/Contacts.tsx b/packages/messenger-widget/src/components/Contacts/Contacts.tsx index 8e1919205..c63b0bda3 100644 --- a/packages/messenger-widget/src/components/Contacts/Contacts.tsx +++ b/packages/messenger-widget/src/components/Contacts/Contacts.tsx @@ -278,6 +278,7 @@ export function Contacts(props: DashboardProps) { {state.cache.contacts && + index !== contactSelected && state.cache.contacts[index] && state.cache.contacts[index] .unreadMsgCount > 0 && ( diff --git a/packages/messenger-widget/src/components/DeleteMessage/DeleteMessage.tsx b/packages/messenger-widget/src/components/DeleteMessage/DeleteMessage.tsx index 04f9de1c9..eb8497c55 100644 --- a/packages/messenger-widget/src/components/DeleteMessage/DeleteMessage.tsx +++ b/packages/messenger-widget/src/components/DeleteMessage/DeleteMessage.tsx @@ -75,7 +75,7 @@ export default function DeleteMessage() { dispatch({ type: ModalStateType.LastMessageAction, - payload: MessageActionType.EDIT, + payload: MessageActionType.NONE, }); }; diff --git a/packages/messenger-widget/src/components/RightHeader/RightHeader.tsx b/packages/messenger-widget/src/components/RightHeader/RightHeader.tsx index 527e6b08b..71eb55d01 100644 --- a/packages/messenger-widget/src/components/RightHeader/RightHeader.tsx +++ b/packages/messenger-widget/src/components/RightHeader/RightHeader.tsx @@ -9,6 +9,8 @@ import { UiViewStateType, } from '../../utils/enum-type-utils'; import { ConnectButton } from '@rainbow-me/rainbowkit'; +import { globalConfig } from 'dm3-lib-shared'; +import { hasUserProfile } from 'dm3-lib-profile'; export function RightHeader() { // fetches context storage @@ -16,6 +18,7 @@ export function RightHeader() { // state to store profile pic of signed in user const [profilePic, setProfilePic] = useState(''); + const [displayName, setDisplayName] = useState(''); // method to fetch profile pic const fetchAndSetProfilePic = async () => { @@ -46,11 +49,57 @@ export function RightHeader() { }); }; + const fetchDisplayName = async () => { + try { + if ( + state.connection.provider && + state.connection.ethAddress && + state.connection.account + ) { + const isAddrEnsName = + state.connection.account?.ensName?.endsWith( + globalConfig.ADDR_ENS_SUBDOMAIN(), + ); + const name = await state.connection.provider.lookupAddress( + state.connection.ethAddress, + ); + if (name && !isAddrEnsName) { + const hasProfile = await hasUserProfile( + state.connection.provider, + name, + ); + setDisplayName( + hasProfile ? name : state.connection.account?.ensName, + ); + } else { + return setDisplayName(state.connection.account.ensName); + } + } else { + return setDisplayName( + state.connection.account + ? state.connection.account.ensName + : '', + ); + } + } catch (error) { + return setDisplayName( + state.connection.account + ? state.connection.account.ensName + : '', + ); + } + }; + // loads the profile pic on page render useEffect(() => { fetchAndSetProfilePic(); + fetchDisplayName(); }, []); + useEffect(() => { + fetchDisplayName(); + }, [state.connection.account?.ensName]); + return (
updateView()} className="profile-name font-weight-500 pointer-cursor text-secondary-color" > - {state.connection.account?.ensName} + {displayName}