import { CancelMysteryBoxWaitMessageEvent, GetSessionDataManager, GotMysteryBoxPrizeMessageEvent, MysteryBoxWaitingCanceledMessageComposer, ShowMysteryBoxWaitMessageEvent } from '@nitrots/nitro-renderer'; import { FC, useState } from 'react'; import { LocalizeText, SendMessageComposer } from '../../../../api'; import { Button, Flex, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../../common'; import { LayoutPrizeProductImageView } from '../../../../common/layout/LayoutPrizeProductImageView'; import { useMessageEvent } from '../../../../hooks'; interface FurnitureMysteryBoxOpenDialogViewProps { ownerId: number; } type PrizeData = { contentType:string; classId:number; } enum ViewMode { HIDDEN, WAITING, PRIZE } export const FurnitureMysteryBoxOpenDialogView: FC = props => { const { ownerId = -1 } = props; const [ mode, setMode ] = useState(ViewMode.HIDDEN); const [ prizeData, setPrizeData ] = useState(undefined); const close = () => { if(mode === ViewMode.WAITING) SendMessageComposer(new MysteryBoxWaitingCanceledMessageComposer(ownerId)); setMode(ViewMode.HIDDEN); setPrizeData(undefined); }; useMessageEvent(ShowMysteryBoxWaitMessageEvent, event => { setMode(ViewMode.WAITING); }); useMessageEvent(CancelMysteryBoxWaitMessageEvent, event => { setMode(ViewMode.HIDDEN); setPrizeData(undefined); }); useMessageEvent(GotMysteryBoxPrizeMessageEvent, event => { const parser = event.getParser(); setPrizeData({ contentType: parser.contentType, classId: parser.classId }); setMode(ViewMode.PRIZE); }); const isOwner = GetSessionDataManager().userId === ownerId; if(mode === ViewMode.HIDDEN) return null; return ( { mode === ViewMode.WAITING && <> { LocalizeText(`mysterybox.dialog.${ isOwner ? 'owner' : 'other' }.subtitle`) } { LocalizeText(`mysterybox.dialog.${ isOwner ? 'owner' : 'other' }.description`) } { LocalizeText(`mysterybox.dialog.${ isOwner ? 'owner' : 'other' }.waiting`) } } { mode === ViewMode.PRIZE && prizeData && <> { LocalizeText('mysterybox.reward.text') } } ); };