import { FC, ReactNode, useCallback, useEffect, useState } from 'react'; import Loading from '@gitroom/frontend/components/layout/loading'; import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; import { timer } from '@gitroom/helpers/utils/timer'; import { useToaster } from '@gitroom/react/toaster/toaster'; import { useDecisionModal } from '@gitroom/frontend/components/layout/new-modal'; export const CheckPayment: FC<{ check: string; mutate: () => void; children: ReactNode; }> = (props) => { if (!props.check) { return <>{props.children}; } return ; }; export const CheckPaymentInner: FC<{ check: string; mutate: () => void; children: ReactNode; }> = (props) => { const [showLoader, setShowLoader] = useState(true); const fetch = useFetch(); const toaster = useToaster(); const modal = useDecisionModal(); useEffect(() => { if (showLoader) { document.querySelector('body')?.classList.add('overflow-hidden'); Array.from(document.querySelectorAll('.blurMe') || []).map((p) => p.classList.add('blur-xs', 'pointer-events-none') ); } else { document.querySelector('body')?.classList.remove('overflow-hidden'); Array.from(document.querySelectorAll('.blurMe') || []).map((p) => p.classList.remove('blur-xs', 'pointer-events-none') ); } }, [showLoader]); const checkSubscription = useCallback(async () => { const { status } = await ( await fetch('/billing/check/' + props.check) ).json(); if (status === 0) { await timer(1000); return checkSubscription(); } if (status === 1) { modal.open({ title: 'Invalid Payment', onlyApprove: true, approveLabel: 'OK', description: 'We could not validate your payment method, please try again', }); setShowLoader(false); } if (status === 2) { setShowLoader(false); props.mutate(); } }, []); useEffect(() => { checkSubscription(); }, []); if (showLoader) { return (
); } return props.children; };