import { useState, useEffect, useRef } from 'react'; import { Button } from 'components'; import { useTWAStore } from 'stores'; import { useTranslation } from 'react-i18next'; import { Wrapper, Options, } from './donateStyle'; import paypal_logo from 'res/paypal.svg'; const PAYMENT_METHOD = 'https://play.google.com/billing'; const SKU = 'crab_donation'; const Donate = () => { const store = useTWAStore(); const { t } = useTranslation('common'); const firstLinkRef = useRef(); const buttonRef = useRef(); const modalRef = useRef(); const [isOpen, _setIsOpen] = useState(false); const setIsOpen = open => { _setIsOpen(open); if (open) { window.setTimeout(() => firstLinkRef.current.focus(), 150); } }; useEffect(() => { if (store.TWA === undefined) { store.setTWA(document.referrer.includes('android-app://fit.crab')); } }, [store]); const acknowledge = async (token, type='repeatable', onComplete = () => {}) => { try { let service = await window.getDigitalGoodsService(PAYMENT_METHOD); await service.acknowledge(token, type); onComplete(); } catch (error) { console.error(error); } } const purchase = () => { if (!window.PaymentRequest) return false; if (!window.getDigitalGoodsService) return false; const supportedInstruments = [{ supportedMethods: PAYMENT_METHOD, data: { sku: SKU } }]; const details = { total: { label: 'Total', amount: { currency: 'AUD', value: '0' } }, }; const request = new PaymentRequest(supportedInstruments, details); request.show() .then(response => { response .complete('success') .then(() => { console.log(`Payment done: ${JSON.stringify(response, undefined, 2)}`); if (response.details && response.details.token) { const token = response.details.token; console.log(`Read Token: ${token.substring(0, 6)}...`); alert(t('donate.messages.success')); acknowledge(token); } }) .catch(e => { console.error(e.message); alert(t('donate.messages.error')); }); }) .catch(e => { console.error(e); alert(t('donate.messages.error')); }); }; return ( { gtag('event', 'donate', { 'event_category': 'donate' }); if (store.TWA) { event.preventDefault(); if (window.confirm(t('donate.messages.about'))) { if (purchase() === false) { alert(t('donate.messages.error')); } } } else { event.preventDefault(); setIsOpen(true); } }} href="https://www.paypal.com/donate?business=N89X6YXRT5HKW&item_name=Crab+Fit+Donation¤cy_code=AUD&amount=5" target="_blank" rel="noreferrer" ref={buttonRef} > { if (modalRef.current.contains(e.relatedTarget)) return; setIsOpen(false); }} > Donate with PayPal setIsOpen(false)} ref={firstLinkRef} href="https://www.paypal.com/donate?business=N89X6YXRT5HKW&item_name=Crab+Fit+Donation¤cy_code=AUD&amount=2" target="_blank" rel="noreferrer">{t('donate.options.$2')} setIsOpen(false)} href="https://www.paypal.com/donate?business=N89X6YXRT5HKW&item_name=Crab+Fit+Donation¤cy_code=AUD&amount=5" target="_blank" rel="noreferrer">{t('donate.options.$5')} setIsOpen(false)} href="https://www.paypal.com/donate?business=N89X6YXRT5HKW&item_name=Crab+Fit+Donation¤cy_code=AUD&amount=10" target="_blank" rel="noreferrer">{t('donate.options.$10')} setIsOpen(false)} href="https://www.paypal.com/donate?business=N89X6YXRT5HKW&item_name=Crab+Fit+Donation¤cy_code=AUD" target="_blank" rel="noreferrer">{t('donate.options.choose')} ); } export default Donate;