import { InfiniteGrid } from '@layout/InfiniteGrid'; import { GetRoomEngine, GetSessionDataManager, IRoomSession, RoomObjectVariable, RoomPreviewer, Vector3d } from '@nitrots/nitro-renderer'; import { FC, useEffect, useState } from 'react'; import { FaPowerOff, FaSyncAlt, FaTrashAlt } from 'react-icons/fa'; import { DispatchUiEvent, FurniCategory, GroupItem, LocalizeText, UnseenItemCategory, attemptItemPlacement } from '../../../../api'; import { LayoutLimitedEditionCompactPlateView, LayoutRarityLevelView, LayoutRoomPreviewerView } from '../../../../common'; import { CatalogPostMarketplaceOfferEvent, DeleteItemConfirmEvent } from '../../../../events'; import { useInventoryFurni, useInventoryUnseenTracker } from '../../../../hooks'; import { NitroButton } from '../../../../layout'; import { InventoryCategoryEmptyView } from '../InventoryCategoryEmptyView'; import { InventoryFurnitureItemView } from './InventoryFurnitureItemView'; const attemptPlaceMarketplaceOffer = (groupItem: GroupItem) => { const item = groupItem.getLastItem(); if(!item) return false; if(!item.sellable) return false; DispatchUiEvent(new CatalogPostMarketplaceOfferEvent(item)); }; const attemptDeleteItem = (groupItem: GroupItem) => { const item = groupItem.getLastItem(); if(!item) return; DispatchUiEvent(new DeleteItemConfirmEvent(item, groupItem.getTotalCount())); }; export const InventoryFurnitureView: FC<{ roomSession: IRoomSession; roomPreviewer: RoomPreviewer; filteredGroupItems: GroupItem[]; }> = props => { const { roomSession = null, roomPreviewer = null, filteredGroupItems = [] } = props; const [ isVisible, setIsVisible ] = useState(false); const { groupItems = [], selectedItem = null, activate = null, deactivate = null } = useInventoryFurni(); const { resetItems = null } = useInventoryUnseenTracker(); useEffect(() => { if(!selectedItem || !roomPreviewer) return; const furnitureItem = selectedItem.getLastItem(); if(!furnitureItem) return; roomPreviewer.reset(false); const isRoomDecoration = (furnitureItem.category === FurniCategory.WALL_PAPER) || (furnitureItem.category === FurniCategory.FLOOR) || (furnitureItem.category === FurniCategory.LANDSCAPE); if(isRoomDecoration) { 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.updateRoomWallsAndFloorVisibility(true, true); floorType = ((furnitureItem.category === FurniCategory.FLOOR) ? selectedItem.stuffData.getLegacyString() : floorType); wallType = ((furnitureItem.category === FurniCategory.WALL_PAPER) ? selectedItem.stuffData.getLegacyString() : wallType); landscapeType = ((furnitureItem.category === FurniCategory.LANDSCAPE) ? selectedItem.stuffData.getLegacyString() : landscapeType); roomPreviewer.updateObjectRoom(floorType, wallType, landscapeType); if(furnitureItem.category === FurniCategory.LANDSCAPE) { const data = GetSessionDataManager().getWallItemDataByName('window_double_default'); if(data) roomPreviewer.addWallItemIntoRoom(data.id, new Vector3d(90, 0, 0), data.customParams); } return; } roomPreviewer.updateObjectRoom('default', 'default', 'default'); roomPreviewer.updateRoomWallsAndFloorVisibility(true, true); if(selectedItem.isWallItem) { roomPreviewer.addWallItemIntoRoom(selectedItem.type, new Vector3d(90), furnitureItem.stuffData.getLegacyString()); } else { roomPreviewer.addFurnitureIntoRoom(selectedItem.type, new Vector3d(90), selectedItem.stuffData, (furnitureItem.extra.toString())); } }, [ roomPreviewer, selectedItem ]); useEffect(() => { if(!selectedItem || !selectedItem.hasUnseenItems) return; resetItems(UnseenItemCategory.FURNI, selectedItem.items.map(item => item.id)); selectedItem.hasUnseenItems = false; }, [ selectedItem, resetItems ]); useEffect(() => { if(!isVisible) return; const id = activate(); return () => deactivate(id); }, [ isVisible, activate, deactivate ]); useEffect(() => { setIsVisible(true); return () => setIsVisible(false); }, []); if(!groupItems || !groupItems.length) return ; return (
columnCount={ 6 } itemRender={ item => } items={ filteredGroupItems } />
{ selectedItem && <> } { selectedItem && attemptDeleteItem(selectedItem) }> } { selectedItem && selectedItem.stuffData.isUnique && } { (selectedItem && selectedItem.stuffData.rarityLevel > -1) && }
{ selectedItem &&
{ selectedItem.name } { selectedItem.description && { selectedItem.description } }
{ !!roomSession && attemptItemPlacement(selectedItem) }> { LocalizeText('inventory.furni.placetoroom') } } { selectedItem.isSellable && attemptPlaceMarketplaceOffer(selectedItem) }> { LocalizeText('inventory.marketplace.sell') } }
}
); };