import * as React from 'react'; import { Link } from 'react-router-dom'; import Stack from '@mui/material/Stack'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import Chip from '@mui/material/Chip'; import Card from '@mui/material/Card'; import CardActions from '@mui/material/CardActions'; import CardContent from '@mui/material/CardContent'; import Divider from '@mui/material/Divider'; import Grid from '@mui/material/Grid'; import Typography from '@mui/material/Typography'; import TrialOverAlert from 'components/TrialOverAlert/index.ee'; import SubscriptionCancelledAlert from 'components/SubscriptionCancelledAlert/index.ee'; import CheckoutCompletedAlert from 'components/CheckoutCompletedAlert/index.ee'; import * as URLS from 'config/urls'; import useBillingAndUsageData from 'hooks/useBillingAndUsageData.ee'; import useFormatMessage from 'hooks/useFormatMessage'; import usePlanAndUsage from 'hooks/usePlanAndUsage'; import useSubscription from 'hooks/useSubscription.ee'; import useUserTrial from 'hooks/useUserTrial.ee'; import { useQueryClient } from '@tanstack/react-query'; import useCurrentUser from 'hooks/useCurrentUser'; const capitalize = (str) => str[0].toUpperCase() + str.slice(1, str.length); function BillingCard(props) { const { name, title = '', action, text } = props; return ( theme.palette.background.default, }} > {name} {title} ); } function Action(props) { const { action, text } = props; if (!action) return ; if (action.startsWith('http')) { return ( ); } else if (action.startsWith('/')) { return ( ); } return ( {text} ); } export default function UsageDataInformation() { const formatMessage = useFormatMessage(); const billingAndUsageData = useBillingAndUsageData(); const queryClient = useQueryClient(); const { data } = usePlanAndUsage(); const planAndUsage = data?.data; const { data: currentUser } = useCurrentUser(); const currentUserId = currentUser?.data?.id; const trial = useUserTrial(); const subscriptionData = useSubscription(); const subscription = subscriptionData?.data; let billingInfo; React.useEffect(() => { queryClient.invalidateQueries({ queryKey: ['planAndUsage', currentUserId], }); }, [subscription, queryClient, currentUserId]); if (trial.hasTrial) { billingInfo = { monthlyQuota: { title: formatMessage('usageDataInformation.freeTrial'), action: '/settings/billing/upgrade', text: 'Upgrade plan', }, nextBillAmount: { title: '---', action: null, text: null, }, nextBillDate: { title: '---', action: null, text: null, }, }; } else { billingInfo = { monthlyQuota: { title: planAndUsage?.plan?.limit, action: subscription?.cancelUrl, text: formatMessage('usageDataInformation.cancelPlan'), }, nextBillAmount: { title: `€${subscription?.nextBillAmount}`, action: subscription?.updateUrl, text: formatMessage('usageDataInformation.updatePaymentMethod'), }, nextBillDate: { title: subscription?.nextBillDate, action: formatMessage('usageDataInformation.monthlyPayment'), text: formatMessage('usageDataInformation.monthlyPayment'), }, }; } return ( {formatMessage('usageDataInformation.subscriptionPlan')} {subscription?.status && ( )} {formatMessage('usageDataInformation.yourUsage')} {formatMessage('usageDataInformation.yourUsageDescription')} {formatMessage('usageDataInformation.yourUsageTasks')} {planAndUsage?.usage.task} {/* free plan has `null` status so that we can show the upgrade button */} {subscription?.status === null && ( )} ); }