client/components/shared/CallCentreAccordion.tsx (77 lines of code) (raw):
import { css } from '@emotion/react';
import { textSans17 } from '@guardian/source/foundations';
import {
Accordion,
AccordionRow,
Stack,
} from '@guardian/source/react-components';
import type { PhoneRegionKey } from '@/shared/productResponse';
import { customerHelpEmailAddress, phoneData } from './callCentreData';
type CallCentreAccordionProps = {
showEmailAddress?: boolean;
phoneRegionFilterKeys?: PhoneRegionKey[];
};
export const CallCentreAccordion = ({
showEmailAddress,
phoneRegionFilterKeys,
}: CallCentreAccordionProps) => {
const filteredPhoneData = phoneData.filter(
(phoneRegion) =>
!phoneRegionFilterKeys ||
phoneRegionFilterKeys.includes(phoneRegion.key),
);
return (
<Accordion>
{filteredPhoneData.map((phoneRegion) => {
return (
<AccordionRow
cssOverrides={css`
> button {
> strong {
${textSans17};
}
}
`}
key={phoneRegion.key}
label={phoneRegion.title}
>
<Stack
space={2}
cssOverrides={css`
${textSans17};
`}
>
{showEmailAddress && (
<>
<div>Email:</div>
<strong>{customerHelpEmailAddress}</strong>
</>
)}
<div>Phone:</div>
{phoneRegion.phoneNumbers.map(
({ phoneNumber, suffix }) => (
<div key={phoneNumber}>
<strong>{phoneNumber}</strong>
{suffix && <span> {suffix}</span>}
</div>
),
)}
{phoneRegion.openingHours.map(
(openingHourLine, openingHoursLineKey) => (
<div key={openingHoursLineKey}>
{openingHourLine}
</div>
),
)}
{phoneRegion.additionalOpeningHoursInfo && (
<div>
{phoneRegion.additionalOpeningHoursInfo}
</div>
)}
</Stack>
</AccordionRow>
);
})}
</Accordion>
);
};