client/components/mma/upgrade/UpgradeSupportThankYou.tsx (187 lines of code) (raw):
import { css } from '@emotion/react';
import {
headlineBold24,
headlineBold34,
palette,
space,
textSans17,
textSansBold20,
until,
} from '@guardian/source/foundations';
import {
LinkButton,
Stack,
SvgCalendar,
SvgEnvelope,
} from '@guardian/source/react-components';
import { useContext } from 'react';
import { useLocation } from 'react-router';
import { formatAmount } from '@/client/utilities/utils';
import { DATE_FNS_LONG_OUTPUT_FORMAT, parseDate } from '@/shared/dates';
import { getBillingPeriodAdjective } from '@/shared/productTypes';
import {
buttonCentredCss,
stackedButtonLayoutCss,
} from '../../../styles/ButtonStyles';
import {
iconListCss,
listWithDividersCss,
whatHappensNextIconCss,
} from '../../../styles/GenericStyles';
import {
signInContentContainerCss,
signInCss,
signInHeadingCss,
signInParaCss,
} from '../../shared/SignIn';
import { SwitchSignInImage } from '../switch/complete/SwitchSignInImage';
import type {
UpgradeRouterState,
UpgradeSupportInterface,
} from './UpgradeSupportContainer';
import { UpgradeSupportContext } from './UpgradeSupportContainer';
import { linkCss } from './UpgradeSupportStyles';
export const UpgradeSupportThankYou = () => {
const upgradeSupportContext = useContext(
UpgradeSupportContext,
) as UpgradeSupportInterface;
const location = useLocation();
const routerState = location.state as UpgradeRouterState;
const chosenAmount = routerState?.chosenAmount;
const currency = upgradeSupportContext.mainPlan.currency;
const previousPrice = upgradeSupportContext.mainPlan.price / 100;
const billingPeriod = upgradeSupportContext.mainPlan.billingPeriod;
const userEmail = upgradeSupportContext.user?.email ?? '';
const nextBillingDate = parseDate(
upgradeSupportContext.mainPlan.chargedThrough ?? undefined,
).dateStr(DATE_FNS_LONG_OUTPUT_FORMAT);
const increasedText =
chosenAmount > previousPrice ? 'increased' : 'changed';
return (
<>
<section
css={css`
margin-top: ${space[4]}px;
`}
>
<Stack space={4}>
<h2
css={css`
margin: 0;
${headlineBold34};
${until.tablet} {
${headlineBold24};
}
`}
>
Thank you for your continued support.
</h2>
</Stack>
<Stack space={4}>
<div
css={css`
${textSans17};
margin-bottom: 32px;
`}
>
You’ve {increasedText} your support from {currency}
{formatAmount(previousPrice)} to {currency}
{formatAmount(chosenAmount)} per {billingPeriod}.
</div>
</Stack>
</section>
<section
css={css`
border-bottom: 1px solid ${palette.neutral[86]};
padding-bottom: ${space[5]}px;
`}
>
<Stack space={4}>
<div
css={css`
border-top: 1px solid ${palette.neutral[86]};
padding-bottom: ${space[1]}px;
`}
>
<h3
css={css`
${textSansBold20};
padding-top: ${space[1]}px;
margin: 0;
`}
>
What happens next?
</h3>
</div>
<ul
css={[
iconListCss,
listWithDividersCss,
whatHappensNextIconCss,
]}
>
<li>
<SvgEnvelope size="medium" />
<span data-qm-masking="blocklist">
<strong
css={css`
padding-bottom: ${space[1]}px;
`}
>
Check your email
</strong>
<br />
You will receive a confirmation email to{' '}
{userEmail}
</span>
</li>
<li>
<SvgCalendar size="medium" />
<span>
<strong
css={css`
padding-bottom: ${space[1]}px;
`}
>
Your billing date
</strong>
<br />
From {nextBillingDate}, your ongoing{' '}
{getBillingPeriodAdjective(
billingPeriod,
).toLowerCase()}{' '}
payment will be {currency}
{formatAmount(chosenAmount)}.
</span>
</li>
</ul>
</Stack>
</section>
<section>
<div css={signInCss}>
<SwitchSignInImage />
<div css={signInContentContainerCss}>
<h2 css={signInHeadingCss}>
Sign in on all your devices
</h2>
<p css={signInParaCss}>
For the best experience, please sign in on the app
and web. It takes less than a minute.
</p>
</div>
</div>
</section>
<div css={stackedButtonLayoutCss}>
<LinkButton
href="https://theguardian.com"
cssOverrides={buttonCentredCss}
>
Continue to the Guardian
</LinkButton>
<div css={linkCss}>
<a href="/">Back to account overview </a>
</div>
</div>
</>
);
};