From 2d2e04764fc7e5e0763f618668b6c5eea154be85 Mon Sep 17 00:00:00 2001 From: Bill Date: Sat, 3 Jul 2021 22:44:48 -0400 Subject: [PATCH] Fixed busted friend bar --- .../reducers/FriendListReducer.tsx | 2 +- .../friend-bar-item/FriendBarItemView.tsx | 61 +++++++++---------- .../views/friend-bar/FriendBarView.tsx | 21 ++++--- 3 files changed, 44 insertions(+), 40 deletions(-) diff --git a/src/views/friend-list/reducers/FriendListReducer.tsx b/src/views/friend-list/reducers/FriendListReducer.tsx index 33a8a41c..8052b06c 100644 --- a/src/views/friend-list/reducers/FriendListReducer.tsx +++ b/src/views/friend-list/reducers/FriendListReducer.tsx @@ -103,7 +103,7 @@ export const FriendListReducer: Reducer = ( for(const friend of update.addedFriends) processUpdate(friend); - for(const friend of update.addedFriends) processUpdate(friend); + for(const friend of update.updatedFriends) processUpdate(friend); for(const removedFriendId of update.removedFriendIds) { diff --git a/src/views/friend-list/views/friend-bar-item/FriendBarItemView.tsx b/src/views/friend-list/views/friend-bar-item/FriendBarItemView.tsx index 8cc36663..0cd1049c 100644 --- a/src/views/friend-list/views/friend-bar-item/FriendBarItemView.tsx +++ b/src/views/friend-list/views/friend-bar-item/FriendBarItemView.tsx @@ -1,5 +1,6 @@ -import { FollowFriendComposer, MouseEventType, Nitro } from 'nitro-renderer'; -import { FC, useEffect, useRef, useState } from 'react'; +import { FollowFriendComposer, MouseEventType } from 'nitro-renderer'; +import { FC, useCallback, useEffect, useRef, useState } from 'react'; +import { GetConnection } from '../../../../api'; import { LocalizeText } from '../../../../utils/LocalizeText'; import { AvatarImageView } from '../../../shared/avatar-image/AvatarImageView'; import { FriendBarItemViewProps } from './FriendBarItemView.types'; @@ -7,38 +8,33 @@ import { FriendBarItemViewProps } from './FriendBarItemView.types'; export const FriendBarItemView: FC = props => { const { friend = null } = props; - const [isVisible, setVisible] = useState(false); - - const toggleVisible = () => setVisible(prevCheck => !prevCheck); - + const [ isVisible, setVisible ] = useState(false); const elementRef = useRef(); + const followFriend = useCallback(() => + { + GetConnection().send(new FollowFriendComposer(friend.id)); + }, [ friend ]); + + const onClick = useCallback((event: MouseEvent) => + { + const element = elementRef.current; + + if((event.target !== element) && !element.contains((event.target as Node))) + { + setVisible(false); + } + }, []); + useEffect(() => { - function onClick(event: MouseEvent): void - { - const element = elementRef.current; - - if((event.target !== element) && !element.contains((event.target as Node))) - { - setVisible(false); - } - } - document.addEventListener(MouseEventType.MOUSE_CLICK, onClick); return () => { document.removeEventListener(MouseEventType.MOUSE_CLICK, onClick); } - }, [ elementRef, setVisible ]); - - - const followFriend = () => - { - - Nitro.instance.communication.connection.send(new FollowFriendComposer(friend.id)); - } + }, [ onClick ]); if(!friend) { @@ -51,16 +47,17 @@ export const FriendBarItemView: FC = props => } return ( -
toggleVisible()}> +
setVisible(prevValue => !prevValue) }>
- +
-
{friend.name}
- {isVisible &&
- - {friend.followingAllowed && followFriend() } className="icon icon-fb-visit cursor-pointer" />} - -
} +
{ friend.name }
+ { isVisible && +
+ + { friend.followingAllowed && } + +
}
); } diff --git a/src/views/friend-list/views/friend-bar/FriendBarView.tsx b/src/views/friend-list/views/friend-bar/FriendBarView.tsx index 59748b94..941d485c 100644 --- a/src/views/friend-list/views/friend-bar/FriendBarView.tsx +++ b/src/views/friend-list/views/friend-bar/FriendBarView.tsx @@ -3,12 +3,19 @@ import { useFriendListContext } from '../../context/FriendListContext'; import { FriendBarItemView } from '../friend-bar-item/FriendBarItemView'; import { FriendBarViewProps } from './FriendBarView.types'; +const MAX_DISPLAY_COUNT: number = 3; + export const FriendBarView: FC = props => { const { friendListState = null } = useFriendListContext(); const { friends = null } = friendListState; const [ indexOffset, setIndexOffset ] = useState(0); + const onlineFriends = useMemo(() => + { + return friends.filter(friend => friend.online); + }, [ friends ]); + const canDecreaseIndex = useMemo(() => { if(indexOffset === 0) return false; @@ -18,20 +25,20 @@ export const FriendBarView: FC = props => const canIncreaseIndex = useMemo(() => { - if(indexOffset === (friends.length - 1)) return false; + if((onlineFriends.length <= MAX_DISPLAY_COUNT) || (indexOffset === (onlineFriends.length - 1))) return false; return true; - }, [ indexOffset, friends ]); + }, [ indexOffset, onlineFriends ]); return (
- - - - -