import { DeletePetMessageComposer, GetRoomEngine, IRoomSession, RoomObjectVariable, RoomPreviewer } from '@nitrots/nitro-renderer'; import { FC, useEffect, useState } from 'react'; import { FaTrashAlt } from 'react-icons/fa'; import { IPetItem, LocalizeText, SendMessageComposer, UnseenItemCategory, attemptPetPlacement } from '../../../../api'; import { LayoutRoomPreviewerView } from '../../../../common'; import { useInventoryPets, useInventoryUnseenTracker, useNotification } from '../../../../hooks'; import { InfiniteGrid, NitroButton } from '../../../../layout'; import { InventoryCategoryEmptyView } from '../InventoryCategoryEmptyView'; import { InventoryPetItemView } from './InventoryPetItemView'; export const InventoryPetView: FC<{ roomSession: IRoomSession; roomPreviewer: RoomPreviewer; }> = props => { const { roomSession = null, roomPreviewer = null } = props; const [ isVisible, setIsVisible ] = useState(false); const { petItems = null, selectedPet = null, activate = null, deactivate = null } = useInventoryPets(); const { isUnseen = null, removeUnseen = null } = useInventoryUnseenTracker(); const { showConfirm = null } = useNotification(); const attemptDeletePet = () => { if(!selectedPet?.petData) return; showConfirm( LocalizeText('inventory.delete.confirm_delete.info', [ 'furniname', 'amount' ], [ selectedPet.petData.name, '1' ]), () => SendMessageComposer(new DeletePetMessageComposer(selectedPet.petData.id)), null, null, null, LocalizeText('inventory.delete.confirm_delete.title') ); }; useEffect(() => { if(!selectedPet || !roomPreviewer) return; const petData = selectedPet.petData; const roomEngine = GetRoomEngine(); let wallType = roomEngine.getRoomInstanceVariable(roomEngine.activeRoomId, RoomObjectVariable.ROOM_WALL_TYPE); let floorType = roomEngine.getRoomInstanceVariable(roomEngine.activeRoomId, RoomObjectVariable.ROOM_FLOOR_TYPE); let landscapeType = roomEngine.getRoomInstanceVariable(roomEngine.activeRoomId, RoomObjectVariable.ROOM_LANDSCAPE_TYPE); wallType = (wallType && wallType.length) ? wallType : '101'; floorType = (floorType && floorType.length) ? floorType : '101'; landscapeType = (landscapeType && landscapeType.length) ? landscapeType : '1.1'; roomPreviewer.reset(false); roomPreviewer.updateRoomWallsAndFloorVisibility(true, true); roomPreviewer.updateObjectRoom(floorType, wallType, landscapeType); roomPreviewer.addPetIntoRoom(petData.figureString); }, [ roomPreviewer, selectedPet ]); useEffect(() => { if(!selectedPet || !isUnseen(UnseenItemCategory.PET, selectedPet.petData.id)) return; removeUnseen(UnseenItemCategory.PET, selectedPet.petData.id); }, [ selectedPet, isUnseen, removeUnseen ]); useEffect(() => { if(!isVisible) return; const id = activate(); return () => deactivate(id); }, [ isVisible, activate, deactivate ]); useEffect(() => { setIsVisible(true); return () => setIsVisible(false); }, []); if(!petItems || !petItems.length) return ; return (
columnCount={ 6 } estimateSize={ 46 } itemMinWidth={ 46 } itemRender={ item => } items={ petItems } />
{ selectedPet && }
{ selectedPet && selectedPet.petData &&
{ selectedPet.petData.name } { !!roomSession && attemptPetPlacement(selectedPet) }> { LocalizeText('inventory.furni.placetoroom') } }
}
); };