import { __ } from '@wordpress/i18n'; import { useMemo } from '@wordpress/element'; import { Card, CardBody, CardHeader, Flex, FlexItem, Icon, Tooltip, } from '@wordpress/components'; import { edit } from '@wordpress/icons'; import type { StoreSettingsResponse } from '../../types/settings'; import type { Order } from '../../types'; export interface AddressBlockProps { title: string; addressData: StoreSettingsResponse | Order; tooltip?: string; editUrl?: string; type: 'storeAddress' | 'orderAddress'; } function toTitleCase(text: string): string { return text .toLowerCase() .replace(/(^|\s|-)\w/g, (char) => char.toUpperCase()); } export default function AddressBlock({ title, addressData, editUrl, tooltip, type, }: AddressBlockProps) { const addressObject = useMemo(() => { if (type === 'storeAddress') { const storeAddress = addressData as StoreSettingsResponse; return ( <> {toTitleCase(storeAddress.contactName || storeAddress.organisation)} {storeAddress.property}, {storeAddress.street} {storeAddress.town}, {storeAddress.county} {storeAddress.postcode} {storeAddress.countryName} {storeAddress.email} {storeAddress.phone} ) } else { const orderAddress = addressData as Order; return ( <> {toTitleCase(orderAddress.customer?.name)} {orderAddress.shipping?.company} {orderAddress.shipping?.address_1} {orderAddress.shipping?.address_2} {orderAddress.shipping?.city}, {orderAddress.shipping?.state}, {orderAddress.shipping?.postcode} {orderAddress.shipping?.country_name} {orderAddress.customer?.email} {orderAddress.shipping?.phone} ) } }, [addressData, type]); return (

{title}

{editUrl && ( )}
{addressObject}
); }