import { AddLinkEventTracker, BadgePointLimitsEvent, GetLocalizationManager, GetRoomEngine, ILinkEventTracker, IRoomSession, RemoveLinkEventTracker, RoomEngineObjectEvent, RoomEngineObjectPlacedEvent, RoomPreviewer, RoomSessionEvent } from '@nitrots/nitro-renderer'; import { FC, useEffect, useState } from 'react'; import { GroupItem, LocalizeText, UnseenItemCategory, isObjectMoverRequested, setObjectMoverRequested } from '../../api'; import { NitroCardHeaderView, NitroCardTabsItemView, NitroCardTabsView, NitroCardView } from '../../common'; import { useInventoryBadges, useInventoryFurni, useInventoryPrefixes, useInventoryTrade, useInventoryUnseenTracker, useMessageEvent, useNitroEvent } from '../../hooks'; import { InventoryCategoryFilterView } from './views/InventoryCategoryFilterView'; import { InventoryBadgeView } from './views/badge/InventoryBadgeView'; import { InventoryBotView } from './views/bot/InventoryBotView'; import { InventoryFurnitureDeleteView } from './views/furniture/InventoryFurnitureDeleteView'; import { InventoryFurnitureView } from './views/furniture/InventoryFurnitureView'; import { InventoryTradeView } from './views/furniture/InventoryTradeView'; import { InventoryPetView } from './views/pet/InventoryPetView'; import { InventoryPrefixView } from './views/prefix/InventoryPrefixView'; const TAB_FURNITURE: string = 'inventory.furni'; const TAB_BOTS: string = 'inventory.bots'; const TAB_PETS: string = 'inventory.furni.tab.pets'; const TAB_BADGES: string = 'inventory.badges'; const TAB_PREFIXES: string = 'inventory.prefixes'; const TABS = [ TAB_FURNITURE, TAB_PETS, TAB_BADGES, TAB_PREFIXES, TAB_BOTS ]; const UNSEEN_CATEGORIES = [ UnseenItemCategory.FURNI, UnseenItemCategory.PET, UnseenItemCategory.BADGE, UnseenItemCategory.PREFIX, UnseenItemCategory.BOT ]; export const InventoryView: FC<{}> = props => { const [ isVisible, setIsVisible ] = useState(false); const [ currentTab, setCurrentTab ] = useState(TABS[0]); const [ roomSession, setRoomSession ] = useState(null); const [ roomPreviewer, setRoomPreviewer ] = useState(null); const [ filteredGroupItems, setFilteredGroupItems ] = useState([]); const [ filteredBadgeCodes, setFilteredBadgeCodes ] = useState([]); const { isTrading = false, stopTrading = null } = useInventoryTrade(); const { getCount = null } = useInventoryUnseenTracker(); const { groupItems = [] } = useInventoryFurni(); const { badgeCodes = [] } = useInventoryBadges(); const onClose = () => { if(isTrading) stopTrading(); setIsVisible(false); }; useNitroEvent(RoomEngineObjectEvent.PLACED, event => { if(!isObjectMoverRequested()) return; setObjectMoverRequested(false); if(!event.placedInRoom) setIsVisible(true); }); useNitroEvent([ RoomSessionEvent.CREATED, RoomSessionEvent.ENDED ], event => { switch(event.type) { case RoomSessionEvent.CREATED: setRoomSession(event.session); return; case RoomSessionEvent.ENDED: setRoomSession(null); setIsVisible(false); return; } }); useMessageEvent(BadgePointLimitsEvent, event => { const parser = event.getParser(); for(const data of parser.data) GetLocalizationManager().setBadgePointLimit(data.badgeId, data.limit); }); useEffect(() => { const linkTracker: ILinkEventTracker = { linkReceived: (url: string) => { const parts = url.split('/'); if(parts.length < 2) return; switch(parts[1]) { case 'show': setIsVisible(true); return; case 'hide': setIsVisible(false); return; case 'toggle': setIsVisible(prevValue => !prevValue); return; } }, eventUrlPrefix: 'inventory/' }; AddLinkEventTracker(linkTracker); return () => RemoveLinkEventTracker(linkTracker); }, []); useEffect(() => { setRoomPreviewer(new RoomPreviewer(GetRoomEngine(), ++RoomPreviewer.PREVIEW_COUNTER)); return () => { setRoomPreviewer(prevValue => { prevValue.dispose(); return null; }); }; }, []); useEffect(() => { if(!isVisible && isTrading) setIsVisible(true); }, [ isVisible, isTrading ]); if(!isVisible) return null; const showFilter = !isTrading && (currentTab === TAB_FURNITURE || currentTab === TAB_BADGES); return ( <> { !isTrading && <> { TABS.map((name, index) => { return ( setCurrentTab(name) }> { LocalizeText(name) } ); }) }
{ showFilter && }
{ (currentTab === TAB_FURNITURE) && } { (currentTab === TAB_PETS) && } { (currentTab === TAB_BADGES) && } { (currentTab === TAB_PREFIXES) && } { (currentTab === TAB_BOTS) && }
} { isTrading &&
}
); };