UNPKG

@financial-times/n-conversion-forms

Version:

Containing jsx components and styles for forms included on Accounts and Acquisition apps (next-signup, next-profile, next-retention, etc).

164 lines (157 loc) 4.2 kB
import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import deliveryAddressMap from './delivery-address-map'; import { addressLine1AutoComplete, addressLine2AutoComplete, addressLine3AutoComplete, } from '../helpers/constants'; import { identifyShippingZone } from '../helpers/supportedCountries'; export function DeliveryAddress({ fieldId = 'deliveryAddressFields', hasError = false, line1 = '', line2 = '', line3 = '', isDisabled = false, isHidden = false, country = 'GBR', addressType = 'home', }) { const divClassNames = classNames([{ ncf__hidden: isHidden }]); const inputWrapperClassNames = classNames([ 'o-forms-input', 'o-forms-input--text', { 'o-forms-input--invalid': hasError }, ]); const shippingZone = identifyShippingZone(country); const addressLine1 = ( <label className="o-forms-field ncf__validation-error" htmlFor="deliveryAddressLine1" > <span className="o-forms-title"> <span className="o-forms-title__main"> {deliveryAddressMap[addressType].addressLine1Title[shippingZone] || 'Address line 1'} </span> </span> <span className={inputWrapperClassNames}> <input type="text" id="deliveryAddressLine1" name="deliveryAddressLine1" data-trackable="field-deliveryAddressLine1" autoComplete={addressLine1AutoComplete} placeholder={ deliveryAddressMap[addressType].addressLine1Placeholder[ shippingZone ] || '' } maxLength={50} aria-required="true" required disabled={isDisabled} defaultValue={line1} /> <span className="o-forms-input__error"> Please enter a valid address </span> </span> </label> ); const addressLine2 = ( <label className="o-forms-field o-forms-field--optional" htmlFor="deliveryAddressLine2" > <span className="o-forms-title"> <span className="o-forms-title__main">Address line 2</span> </span> <span className={inputWrapperClassNames}> <input type="text" id="deliveryAddressLine2" name="deliveryAddressLine2" data-trackable="field-deliveryAddressLine2" autoComplete={ deliveryAddressMap[addressType].addressLine2AutoComplete[ shippingZone ] || addressLine2AutoComplete } placeholder={ deliveryAddressMap[addressType].addressLine2Placeholder[ shippingZone ] || '' } maxLength={50} disabled={isDisabled} defaultValue={line2} /> </span> </label> ); const addressLine3 = ( <label className="o-forms-field o-forms-field--optional" htmlFor="deliveryAddressLine3" > <span className="o-forms-title"> <span className="o-forms-title__main"> {deliveryAddressMap[addressType].addressLine3Title[shippingZone] || 'Address line 3'} </span> <span className="o-forms-title__prompt"> {deliveryAddressMap[addressType].addressLine3Prompt[shippingZone] || ''} </span> </span> <span className={inputWrapperClassNames}> <input type="text" id="deliveryAddressLine3" name="deliveryAddressLine3" data-trackable="field-deliveryAddressLine3" autoComplete={ deliveryAddressMap[addressType].addressLine3AutoComplete[ shippingZone ] || addressLine3AutoComplete } placeholder={ deliveryAddressMap[addressType].addressLine3Placeholder[ shippingZone ] || 'e.g. Apt. 1' } maxLength={ deliveryAddressMap[addressType].addressLine3MaxLength[country] || 50 } disabled={isDisabled} defaultValue={line3} /> </span> </label> ); const addressLines = deliveryAddressMap[addressType].template( addressLine1, addressLine2, addressLine3, shippingZone ); return ( <div id={fieldId} data-validate="required" className={divClassNames}> {addressLines} </div> ); } DeliveryAddress.propTypes = { fieldId: PropTypes.string, hasError: PropTypes.bool, line1: PropTypes.string, line2: PropTypes.string, line3: PropTypes.string, isDisabled: PropTypes.bool, isHidden: PropTypes.bool, country: PropTypes.string, addressType: PropTypes.oneOf(['home', 'company', 'pobox']), };