2021-04-22 09:11:27 +02:00
|
|
|
import { MessengerInitComposer } from 'nitro-renderer';
|
2021-06-23 05:22:32 +02:00
|
|
|
import React, { FC, useCallback, useEffect, useReducer, useState } from 'react';
|
|
|
|
import { createPortal } from 'react-dom';
|
2021-04-22 08:54:49 +02:00
|
|
|
import { FriendListEvent } from '../../events';
|
|
|
|
import { useUiEvent } from '../../hooks/events/ui/ui-event';
|
2021-04-22 09:11:27 +02:00
|
|
|
import { SendMessageHook } from '../../hooks/messages/message-event';
|
2021-06-23 11:34:07 +02:00
|
|
|
import { NitroCardAccordionItemView, NitroCardAccordionView, NitroCardHeaderView, NitroCardView } from '../../layout';
|
2021-04-22 08:54:49 +02:00
|
|
|
import { LocalizeText } from '../../utils/LocalizeText';
|
2021-06-23 05:22:32 +02:00
|
|
|
import { FriendListContextProvider } from './context/FriendListContext';
|
2021-04-22 08:54:49 +02:00
|
|
|
import { FriendListMessageHandler } from './FriendListMessageHandler';
|
2021-06-23 05:22:32 +02:00
|
|
|
import { FriendListViewProps } from './FriendListView.types';
|
|
|
|
import { FriendListReducer, initialFriendList } from './reducers/FriendListReducer';
|
|
|
|
import { FriendBarView } from './views/friend-bar/FriendBarView';
|
|
|
|
import { FriendListFriendsView } from './views/friends/FriendListFriendsView';
|
2021-04-22 08:54:49 +02:00
|
|
|
|
|
|
|
export const FriendListView: FC<FriendListViewProps> = props =>
|
|
|
|
{
|
2021-06-23 05:22:32 +02:00
|
|
|
const [ isVisible, setIsVisible ] = useState(false);
|
|
|
|
const [ isReady, setIsReady ] = useState(false);
|
|
|
|
const [ friendListState, dispatchFriendListState ] = useReducer(FriendListReducer, initialFriendList);
|
|
|
|
const { settings = null } = friendListState;
|
2021-04-22 08:54:49 +02:00
|
|
|
|
|
|
|
const onFriendListEvent = useCallback((event: FriendListEvent) =>
|
|
|
|
{
|
|
|
|
switch(event.type)
|
|
|
|
{
|
|
|
|
case FriendListEvent.SHOW_FRIEND_LIST:
|
|
|
|
setIsVisible(true);
|
|
|
|
return;
|
|
|
|
case FriendListEvent.TOGGLE_FRIEND_LIST:
|
|
|
|
setIsVisible(value => !value);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
useUiEvent(FriendListEvent.SHOW_FRIEND_LIST, onFriendListEvent);
|
|
|
|
useUiEvent(FriendListEvent.TOGGLE_FRIEND_LIST, onFriendListEvent);
|
|
|
|
|
2021-04-22 09:11:27 +02:00
|
|
|
useEffect(() =>
|
|
|
|
{
|
2021-06-23 05:22:32 +02:00
|
|
|
if(!settings) return;
|
2021-04-22 09:11:27 +02:00
|
|
|
|
2021-06-23 05:22:32 +02:00
|
|
|
setIsReady(true);
|
|
|
|
}, [ settings ]);
|
2021-04-22 09:11:27 +02:00
|
|
|
|
|
|
|
useEffect(() =>
|
|
|
|
{
|
|
|
|
SendMessageHook(new MessengerInitComposer());
|
|
|
|
}, []);
|
|
|
|
|
2021-04-22 08:54:49 +02:00
|
|
|
return (
|
2021-06-23 05:22:32 +02:00
|
|
|
<FriendListContextProvider value={ { friendListState, dispatchFriendListState } }>
|
|
|
|
<FriendListMessageHandler />
|
|
|
|
{ isReady && createPortal(<FriendBarView />, document.getElementById('toolbar-friend-bar-container')) }
|
2021-05-12 06:29:33 +02:00
|
|
|
{ isVisible &&
|
|
|
|
<NitroCardView className="nitro-friend-list">
|
|
|
|
<NitroCardHeaderView headerText={ LocalizeText('friendlist.friends') } onCloseClick={ event => setIsVisible(false) } />
|
|
|
|
<NitroCardAccordionView>
|
|
|
|
<NitroCardAccordionItemView headerText="Friends" contentClassName="ps-3">
|
|
|
|
<FriendListFriendsView />
|
|
|
|
</NitroCardAccordionItemView>
|
|
|
|
<NitroCardAccordionItemView headerText="Friend Requests" contentClassName="ps-3">
|
|
|
|
abc
|
|
|
|
</NitroCardAccordionItemView>
|
|
|
|
<NitroCardAccordionItemView headerText="Search" contentClassName="ps-3">
|
|
|
|
abc
|
|
|
|
</NitroCardAccordionItemView>
|
|
|
|
</NitroCardAccordionView>
|
|
|
|
</NitroCardView> }
|
2021-06-23 05:22:32 +02:00
|
|
|
</FriendListContextProvider>
|
2021-04-22 08:54:49 +02:00
|
|
|
);
|
|
|
|
}
|