import { HabboSearchComposer, HabboSearchResultData, HabboSearchResultEvent } from '@nitrots/nitro-renderer'; import { FC, useEffect, useState } from 'react'; import { LocalizeText, OpenMessengerChat, SendMessageComposer } from '../../../../api'; import { Column, LayoutAvatarImageView, NitroCardAccordionItemView, NitroCardAccordionSetView, NitroCardAccordionSetViewProps, Text, UserProfileIconView } from '../../../../common'; import { useFriends, useMessageEvent } from '../../../../hooks'; import { resolveAvatarFigure } from './resolveAvatarFigure'; import { resolveAvatarGender } from './resolveAvatarGender'; interface FriendsSearchViewProps extends NitroCardAccordionSetViewProps { } export const FriendsSearchView: FC = props => { const { ...rest } = props; const [ searchValue, setSearchValue ] = useState(''); const [ friendResults, setFriendResults ] = useState(null); const [ otherResults, setOtherResults ] = useState(null); const { canRequestFriend = null, requestFriend = null } = useFriends(); const getSearchResultFigure = (result: HabboSearchResultData) => { if(!result) return null; const typedResult = (result as HabboSearchResultData & { figureString?: string; avatarFigure?: string; figure?: string; avatarFigureString?: string }); return typedResult.figureString || typedResult.avatarFigure || typedResult.figure || typedResult.avatarFigureString || null; }; const getSearchResultGender = (result: HabboSearchResultData) => { const typedResult = (result as HabboSearchResultData & { gender?: string | number; avatarGender?: string | number }); return resolveAvatarGender(typedResult.avatarGender ?? typedResult.gender); }; useMessageEvent(HabboSearchResultEvent, event => { const parser = event.getParser(); setFriendResults(parser.friends); setOtherResults(parser.others); }); useEffect(() => { if(!searchValue || !searchValue.length) return; const timeout = setTimeout(() => { if(!searchValue || !searchValue.length) return; SendMessageComposer(new HabboSearchComposer(searchValue)); }, 500); return () => clearTimeout(timeout); }, [ searchValue ]); return ( setSearchValue(event.target.value) } />
{ friendResults && <> { (friendResults.length === 0) && { LocalizeText('friendlist.search.nofriendsfound') } } { (friendResults.length > 0) && { LocalizeText('friendlist.search.friendscaption', [ 'cnt' ], [ friendResults.length.toString() ]) }
{ friendResults.map(result => { return (
{ result.avatarName }
{ result.isAvatarOnline &&
OpenMessengerChat(result.avatarId) } /> }
); }) } } } { otherResults && <> { (otherResults.length === 0) && { LocalizeText('friendlist.search.noothersfound') } } { (otherResults.length > 0) && { LocalizeText('friendlist.search.otherscaption', [ 'cnt' ], [ otherResults.length.toString() ]) }
{ otherResults.map(result => { return (
{ result.avatarName }
{ canRequestFriend(result.avatarId) &&
requestFriend(result.avatarId, result.avatarName) } /> }
); }) } } }
); };