Skip to content

Commit cee60f0

Browse files
committed
add loader for contact list and addConversation
1 parent 29bb6e2 commit cee60f0

File tree

6 files changed

+42
-55
lines changed

6 files changed

+42
-55
lines changed

packages/messenger-widget/src/components/AddConversation/AddConversation.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { closeLoader, startLoader } from '../Loader/Loader';
2121

2222
export default function AddConversation() {
2323
const { state, dispatch } = useContext(GlobalContext);
24-
const { addConversation, setSelectedContact } =
24+
const { addConversation, setSelectedContactName } =
2525
useContext(ConversationContext);
2626

2727
const [name, setName] = useState<string>('');
@@ -89,7 +89,7 @@ export default function AddConversation() {
8989
});
9090

9191
const newContact = await addConversation(aliasName);
92-
setSelectedContact(newContact);
92+
setSelectedContactName(newContact.name);
9393
closeLoader();
9494

9595
// close the modal

packages/messenger-widget/src/components/Contacts/Contacts.tsx

+9-33
Original file line numberDiff line numberDiff line change
@@ -5,42 +5,27 @@ import { useContext, useEffect, useState } from 'react';
55
import loader from '../../assets/images/loader.svg';
66
import threeDotsIcon from '../../assets/images/three-dots.svg';
77
import { AuthContext } from '../../context/AuthContext';
8+
import { ConversationContext } from '../../context/ConversationContext';
89
import { useMainnetProvider } from '../../hooks/mainnetprovider/useMainnetProvider';
910
import { useTopLevelAlias } from '../../hooks/topLevelAlias/useTopLevelAlias';
1011
import { DashboardProps } from '../../interfaces/props';
11-
import { ContactPreview } from '../../interfaces/utils';
1212
import { GlobalContext } from '../../utils/context-utils';
13-
import {
14-
CacheType,
15-
ModalStateType,
16-
RightViewSelected,
17-
} from '../../utils/enum-type-utils';
13+
import { RightViewSelected } from '../../utils/enum-type-utils';
1814
import { ContactMenu } from '../ContactMenu/ContactMenu';
19-
import { closeLoader, startLoader } from '../Loader/Loader';
2015
import './Contacts.css';
2116
import {
22-
addNewConversationFound,
23-
fetchAndUpdateUnreadMsgCount,
2417
fetchMessageSizeLimit,
2518
onContactSelected,
26-
resetContactListOnHide,
2719
setContactHeightToMaximum,
28-
setContactIndexSelectedFromCache,
29-
setContactList,
3020
showMenuInBottom,
31-
updateContactDetailsOfNewContact,
3221
updateContactOnAccountChange,
33-
updateSelectedContact,
34-
updateUnreadMsgCount,
3522
} from './bl';
36-
import { ConversationContext } from '../../context/ConversationContext';
37-
import { initialState } from '../../contexts/Shared';
3823

3924
export function Contacts(props: DashboardProps) {
4025
// fetches context api data
4126
const { state, dispatch } = useContext(GlobalContext);
4227
const { account, deliveryServiceToken } = useContext(AuthContext);
43-
const { contacts, initialized, setSelectedContact, selectedContact } =
28+
const { contacts, initialized, setSelectedContactName, selectedContact } =
4429
useContext(ConversationContext);
4530
const mainnetProvider = useMainnetProvider();
4631
const { resolveAliasToTLD } = useTopLevelAlias();
@@ -59,12 +44,6 @@ export function Contacts(props: DashboardProps) {
5944
setContactHeightToMaximum(!isAddrEnsName ? true : false);
6045
}, [account?.ensName]);
6146

62-
// handles any change in socket or session
63-
useEffect(() => {
64-
console.log(' initialized', initialized);
65-
console.log('contacts', contacts);
66-
}, [initialized]);
67-
6847
// handles change in accounts
6948
useEffect(() => {
7049
if (
@@ -93,19 +72,14 @@ export function Contacts(props: DashboardProps) {
9372
//TODO add websocket listener for add conversation
9473
}, [state.accounts.contacts]);
9574

96-
// handles contact selected
97-
useEffect(() => {
98-
//TODO add click handler to select contact
99-
}, [state.accounts.selectedContact]);
100-
10175
// handles active contact removal
10276
useEffect(() => {
10377
if (
10478
selectedContact !== null &&
10579
state.uiView.selectedRightView !== RightViewSelected.Chat &&
10680
state.uiView.selectedRightView !== RightViewSelected.ContactInfo
10781
) {
108-
setSelectedContact(undefined);
82+
setSelectedContactName(undefined);
10983
}
11084
}, [state.uiView.selectedRightView]);
11185

@@ -192,7 +166,9 @@ export function Contacts(props: DashboardProps) {
192166
: 'contact-details-container-active'
193167
: '',
194168
)}
195-
onClick={() => setSelectedContact(data)}
169+
onClick={() =>
170+
setSelectedContactName(data.name)
171+
}
196172
>
197173
<div
198174
className="col-12 d-flex flex-row align-items-center
@@ -249,8 +225,8 @@ export function Contacts(props: DashboardProps) {
249225

250226
{selectedContact?.contactDetails
251227
.account.ensName === id ? (
252-
!state.modal.addConversation
253-
.active ? (
228+
selectedContact.message !==
229+
null ? (
254230
<div>
255231
<div className="action-container">
256232
<img

packages/messenger-widget/src/components/Loader/Loader.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ import { GlobalContext } from '../../utils/context-utils';
77
export const closeLoader = () => {
88
console.log('stop loader');
99
const loader = document.getElementsByClassName('loading')[0] as HTMLElement;
10-
// loader.setAttribute('style', 'display:none !important');
10+
loader.setAttribute('style', 'display:none !important');
1111
};
1212

1313
export const startLoader = () => {
1414
console.log('start loader');
1515
const loader = document.getElementsByClassName('loading')[0] as HTMLElement;
16-
// loader.setAttribute('style', 'display:flex !important');
16+
loader.setAttribute('style', 'display:flex !important');
1717
};
1818

1919
export function Loader() {

packages/messenger-widget/src/context/ConversationContext.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ export type ConversationContextType = {
77
contacts: ContactPreview[];
88
conversationCount: number;
99
selectedContact?: ContactPreview;
10-
setSelectedContact: (contact: ContactPreview | undefined) => void;
10+
setSelectedContactName: (contactEnsName: string | undefined) => void;
1111
initialized: boolean;
1212
addConversation: (ensName: string) => ContactPreview;
1313
};
1414

1515
export const ConversationContext = React.createContext<ConversationContextType>(
1616
{
1717
contacts: [],
18-
setSelectedContact: (contact: ContactPreview | undefined) => {},
18+
setSelectedContactName: (contactEnsName: string | undefined) => {},
1919
conversationCount: 0,
2020
initialized: false,
2121
selectedContact: undefined,
@@ -35,7 +35,7 @@ export const ConversationContextProvider = ({
3535
contacts,
3636
conversationCount,
3737
initialized,
38-
setSelectedContact,
38+
setSelectedContactName,
3939
selectedContact,
4040
} = useConversation();
4141

@@ -46,7 +46,7 @@ export const ConversationContextProvider = ({
4646
contacts,
4747
conversationCount,
4848
initialized,
49-
setSelectedContact,
49+
setSelectedContactName,
5050
selectedContact,
5151
}}
5252
>

packages/messenger-widget/src/hooks/conversation/useConversation.tsx

+12-7
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ export const useConversation = () => {
2020
} = useContext(StorageContext);
2121

2222
const [contacts, setContacts] = useState<Array<ContactPreview>>([]);
23-
const [selectedContact, setSelectedContact] = useState<
24-
ContactPreview | undefined
23+
const [selectedContactName, setSelectedContactName] = useState<
24+
string | undefined
2525
>(undefined);
2626
const [conversationsInitialized, setConversationsInitialized] =
2727
useState<boolean>(false);
@@ -30,16 +30,21 @@ export const useConversation = () => {
3030

3131
const { account } = useContext(AuthContext);
3232

33+
const selectedContact = useMemo(() => {
34+
return contacts.find(
35+
(contact) =>
36+
contact.contactDetails.account.ensName === selectedContactName,
37+
);
38+
}, [selectedContactName, contacts]);
39+
3340
//For now we do not support pagination hence we always fetch all pages
3441
useEffect(() => {
3542
setConversationsInitialized(false);
36-
setSelectedContact(undefined);
43+
setSelectedContactName(undefined);
3744
setContacts([]);
3845
const init = async (page: number = 0) => {
3946
const currentConversationsPage = await getConversations(page);
4047

41-
console.log('current conversaition page', currentConversationsPage);
42-
4348
//Hydrate the contacts by fetching their profile and DS profile
4449
const newContacts = await Promise.all(
4550
currentConversationsPage.map((contact) =>
@@ -83,7 +88,7 @@ export const useConversation = () => {
8388

8489
const newContact: ContactPreview = {
8590
name: getAccountDisplayName(ensName, 25),
86-
message: '',
91+
message: null,
8792
image: humanIcon,
8893
unreadMsgCount: 0,
8994
contactDetails: {
@@ -130,7 +135,7 @@ export const useConversation = () => {
130135
conversationCount,
131136
addConversation,
132137
initialized: conversationsInitialized,
133-
setSelectedContact,
138+
setSelectedContactName,
134139
selectedContact,
135140
};
136141
};

packages/messenger-widget/src/views/LeftView/LeftView.tsx

+13-7
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,27 @@ import {
99
ModalStateType,
1010
UiViewStateType,
1111
} from '../../utils/enum-type-utils';
12-
import { startLoader } from '../../components/Loader/Loader';
12+
import { closeLoader, startLoader } from '../../components/Loader/Loader';
1313
import Menu from '../../components/Menu/Menu';
14+
import { ConversationContext } from '../../context/ConversationContext';
1415

1516
export default function LeftView(props: DashboardProps) {
1617
// fetches context api data
1718
const { state, dispatch } = useContext(GlobalContext);
19+
const { initialized } = useContext(ConversationContext);
1820

1921
// handles starting loader on page load
2022
useEffect(() => {
21-
dispatch({
22-
type: ModalStateType.LoaderContent,
23-
payload: 'Fetching contacts...',
24-
});
25-
startLoader();
26-
}, []);
23+
if (!initialized) {
24+
dispatch({
25+
type: ModalStateType.LoaderContent,
26+
payload: 'Fetching contacts...',
27+
});
28+
startLoader();
29+
return;
30+
}
31+
closeLoader();
32+
}, [initialized]);
2733

2834
// method to open menu item
2935
const openMenuItem = () => {

0 commit comments

Comments
 (0)