import { ExtendedProfileChangedMessageEvent, GetSessionDataManager, RelationshipStatusInfoEvent, RelationshipStatusInfoMessageParser, RoomEngineObjectEvent, RoomObjectCategory, RoomObjectType, UserCurrentBadgesComposer, UserCurrentBadgesEvent, UserProfileEvent, UserProfileParser, UserRelationshipsComposer } from '@nitrots/nitro-renderer'; import { FC, useState } from 'react'; import { CreateLinkEvent, GetRoomSession, GetUserProfile, LocalizeText, SendMessageComposer } from '../../api'; import { useMessageEvent, useNitroEvent } from '../../hooks'; import { NitroCard } from '../../layout'; import { GroupsContainerView } from './GroupsContainerView'; import { UserContainerView } from './UserContainerView'; export const UserProfileView: FC<{}> = () => { const [ userProfile, setUserProfile ] = useState(null); const [ userBadges, setUserBadges ] = useState([]); const [ userRelationships, setUserRelationships ] = useState(null); const onClose = () => { setUserProfile(null); setUserBadges([]); setUserRelationships(null); }; const onLeaveGroup = () => { if(!userProfile || (userProfile.id !== GetSessionDataManager().userId)) return; GetUserProfile(userProfile.id); }; const onOpenRooms = () => { if(!userProfile) return; CreateLinkEvent(`navigator/search/hotel_view/owner:${ userProfile.username }`); }; useMessageEvent(UserCurrentBadgesEvent, event => { const parser = event.getParser(); if(!userProfile || (parser.userId !== userProfile.id)) return; setUserBadges(parser.badges); }); useMessageEvent(RelationshipStatusInfoEvent, event => { const parser = event.getParser(); if(!userProfile || (parser.userId !== userProfile.id)) return; setUserRelationships(parser); }); useMessageEvent(UserProfileEvent, event => { const parser = event.getParser(); let isSameProfile = false; setUserProfile(prevValue => { if(prevValue && prevValue.id) isSameProfile = (prevValue.id === parser.id); return parser; }); if(!isSameProfile) { setUserBadges([]); setUserRelationships(null); } SendMessageComposer(new UserCurrentBadgesComposer(parser.id)); SendMessageComposer(new UserRelationshipsComposer(parser.id)); }); useMessageEvent(ExtendedProfileChangedMessageEvent, event => { const parser = event.getParser(); if(parser.userId != userProfile?.id) return; GetUserProfile(parser.userId); }); useNitroEvent(RoomEngineObjectEvent.SELECTED, event => { if(!userProfile) return; if(event.category !== RoomObjectCategory.UNIT) return; const userData = GetRoomSession().userDataManager.getUserDataByIndex(event.objectId); if(userData.type !== RoomObjectType.USER) return; GetUserProfile(userData.webID); }); if(!userProfile) return null; const cardBackgroundId = userProfile.cardBackgroundId ?? 0; const cardBackgroundClass = cardBackgroundId ? `profile-card-background card-background-${ cardBackgroundId }` : ''; return (
); };