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;
};