import { GetRoomEngine, RoomObjectCategory } from '@nitrots/nitro-renderer'; import { FC, ReactElement, useEffect, useMemo, useState } from 'react'; import { IsOwnerOfFurniture, LocalizeText } from '../../../../api'; import { AutoGrid, Button, Column, LayoutGridItem, LayoutLoadingSpinnerView, NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../../../common'; import { useFurnitureCraftingWidget, useRoom } from '../../../../hooks'; export const FurnitureCraftingView: FC<{}> = props => { const { objectId = -1, recipes = [], ingredients = [], selectedRecipe = null, requiredIngredients = null, isCrafting = false, craft = null, selectRecipe = null, onClose = null } = useFurnitureCraftingWidget(); const { roomSession = null } = useRoom(); const [ waitingToConfirm, setWaitingToConfirm ] = useState(false); const isOwner = useMemo(() => { const roomObject = GetRoomEngine().getRoomObject(roomSession.roomId, objectId, RoomObjectCategory.FLOOR); return IsOwnerOfFurniture(roomObject); }, [ objectId, roomSession ]); const canCraft = useMemo(() => { if(!requiredIngredients || !requiredIngredients.length) return false; for(const ingredient of requiredIngredients) { const ingredientData = ingredients.find(data => (data.name === ingredient.itemName)); if(!ingredientData || ingredientData.count < ingredient.count) return false; } return true; }, [ ingredients, requiredIngredients ]); const tryCraft = () => { if(!waitingToConfirm) { setWaitingToConfirm(true); return; } craft(); setWaitingToConfirm(false); }; useEffect(() => { setWaitingToConfirm(false); }, [ selectedRecipe ]); if(objectId === -1) return null; return (
{ LocalizeText('crafting.title.products') }
{ (recipes.length > 0) && recipes.map((item) => selectRecipe(item) } />) }
{ LocalizeText('crafting.title.mixer') }
{ (ingredients.length > 0) && ingredients.map((item) => ) }
{ !selectedRecipe && { LocalizeText('crafting.info.start') } } { selectedRecipe && <>
{ LocalizeText('crafting.current_recipe') }
{ !!requiredIngredients && (requiredIngredients.length > 0) && requiredIngredients.map(ingredient => { const ingredientData = ingredients.find((i) => i.name === ingredient.itemName); const elements: ReactElement[] = []; for(let i = 0; i < ingredient.count; i++) { elements.push(); } return elements; }) }
{ LocalizeText('crafting.result') }
{ selectedRecipe.localizedName }
}
); };