client/components/mma/accountoverview/InAppPurchaseCard.tsx (104 lines of code) (raw):

import { css } from '@emotion/react'; import { space, textSans17 } from '@guardian/source/foundations'; import { Button, Stack } from '@guardian/source/react-components'; import { InfoSummary } from '@guardian/source-development-kitchen/react-components'; import { capitalize } from 'lodash'; import { useNavigate } from 'react-router'; import { dateString } from '../../../../shared/dates'; import type { AppSubscription } from '../../../../shared/mpapiResponse'; import { AppStore, determineAppStore, isPuzzle, } from '../../../../shared/mpapiResponse'; import { Card } from '../shared/Card'; import { productColour } from './ProductCardConfiguration'; import { productCardTitleCss, productDetailLayoutCss, } from './ProductCardStyles'; const summaryLinkCss = css` color: currentColor; text-decoration: underline; `; const cancelledAppSubscriptionMessage = () => { return ( <> If you would like to fund Guardian journalism again, please{' '} <a css={summaryLinkCss} href="https://support.theguardian.com/"> support us today </a> </> ); }; export const InAppPurchaseCard = ({ subscription, }: { subscription: AppSubscription; }) => { const navigate = useNavigate(); const isPuzzleApp = isPuzzle(subscription); const puzzleOrNews = isPuzzleApp ? 'puzzle' : 'news'; const appStore = determineAppStore(subscription); return ( <Stack space={4}> {subscription.cancellationTimestamp && ( <InfoSummary message={`Your app subscription was cancelled in ${dateString( new Date(subscription.cancellationTimestamp), 'MMMM yyyy', )}.`} context={cancelledAppSubscriptionMessage()} /> )} <Card> <Card.Header backgroundColor={ isPuzzleApp ? productColour.puzzleApp : productColour.inAppPurchase } > <h3 css={productCardTitleCss(!isPuzzleApp)}> {capitalize(puzzleOrNews)} app </h3> </Card.Header> <Card.Section> <div css={[ productDetailLayoutCss, css` margin-top: -${space[2]}px; `, ]} > <div css={css` ${textSans17}; `} > You have unlimited access to the Guardian{' '} {appStore === AppStore.ANDROID && 'Android'} {appStore === AppStore.IOS && 'iOS'} {puzzleOrNews}{' '} app. </div> <div css={css` margin-top: ${space[9]}px; `} > <Button size="small" onClick={() => { navigate('/email-prefs'); }} > Manage marketing preferences </Button> </div> </div> </Card.Section> </Card> </Stack> ); };