import { GetTargetedOfferComposer, PurchaseTargetedOfferComposer, TargetedOfferData } from '@nitrots/nitro-renderer'; import { Dispatch, SetStateAction, useMemo, useState } from 'react'; import { FriendlyTime, GetConfigurationValue, LocalizeText, SanitizeHtml, SendMessageComposer } from '../../../../api'; import { Button, Column, Flex, LayoutCurrencyIcon, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../../common'; import { usePurse } from '../../../../hooks'; let isBuyingOffer = false; export const OfferWindowView = (props: { offer: TargetedOfferData, setOpen: Dispatch> }) => { const { offer = null, setOpen = null } = props; const { getCurrencyAmount } = usePurse(); const [ amount, setAmount ] = useState(1); const canPurchase = useMemo(() => { let credits = false; let points = false; let limit = false; if(offer.priceInCredits > 0) credits = getCurrencyAmount(-1) >= offer.priceInCredits; if(offer.priceInActivityPoints > 0) points = getCurrencyAmount(offer.activityPointType) >= offer.priceInActivityPoints; else points = true; if(offer.purchaseLimit > 0) limit = true; return (credits && points && limit); }, [ offer, getCurrencyAmount ]); const expirationTime = () => { let expirationTime = Math.max(0, (offer.expirationTime - Date.now()) / 1000); return FriendlyTime.format(expirationTime); }; const buyOffer = () => { if(isBuyingOffer) return; isBuyingOffer = true; SendMessageComposer(new PurchaseTargetedOfferComposer(offer.id, amount)); SendMessageComposer(new GetTargetedOfferComposer()); setTimeout(() => isBuyingOffer = false, 5000); }; if(!offer) return; return setOpen(false) } />
{ LocalizeText('targeted.offer.timeleft', [ 'timeleft' ], [ expirationTime() ]) }

{ LocalizeText(offer.title) }

{ offer.purchaseLimit > 1 &&
{ LocalizeText('catalog.bundlewidget.quantity') } setAmount(parseInt(evt.target.value)) } />
}
{ LocalizeText('targeted.offer.price.label') } { offer.priceInCredits > 0 &&
{ offer.priceInCredits }
} { offer.priceInActivityPoints > 0 &&
+{ offer.priceInActivityPoints }
}
; };