UNPKG

@kiwicom/smart-faq

Version:

Smart FAQ

141 lines (128 loc) 3.71 kB
// @flow import * as React from 'react'; import { graphql, createFragmentContainer } from 'react-relay'; import css from 'styled-jsx/css'; import { Separator, ButtonLink, Text } from '@kiwicom/orbit-components'; import Phone from '@kiwicom/orbit-components/lib/icons/Phone'; import ChevronDown from '@kiwicom/orbit-components/lib/icons/ChevronDown'; import Translate from '@kiwicom/nitro/lib/components/Translate'; import { parsePhoneNumber } from 'libphonenumber-js'; import { withTheme } from 'styled-components'; import ContactPageLink from '../../common/ContactPageLink'; import { withLanguage } from '../../context/Language'; import { langInfos } from '../../../translations/langInfos'; import { error } from '../../../shared/cuckoo/tracker'; import type { Contact_booking } from './__generated__/Contact_booking.graphql'; const styles = css` .contact { margin-top: 20px; } .contactPhone { margin-bottom: 32px; } .contactPageLink { display: inline-block; margin-bottom: 32px; } ol { padding-left: 20px; list-style-type: decimal; font-size: 14px; margin-top: 0; } li { margin-bottom: 7px; padding-left: 10px; } `; type Props = {| language: string, booking: Contact_booking, theme: { orbit: { paletteProductNormal: string, }, }, |}; const Contact = ({ theme, booking, language }: Props) => { const formatPhoneNumber = phoneNumber => { try { return parsePhoneNumber(phoneNumber).formatInternational(); } catch (err) { if (language === 'en') { error('PhoneNumberNotReturned', null, { language }); } return phoneNumber; } }; const renderContactPageLink = () => ( <span className="contactPageLink"> <ContactPageLink translationKey={__('smartfaq.single_booking_page.call_us')} textColor={theme.orbit.paletteProductNormal} /> </span> ); const renderPhoneNumber = (phoneNumber, language) => { const formattedPhoneNumber = formatPhoneNumber(phoneNumber); const languageCode = langInfos[language].countriesTranslations; return ( <div className="contactPhone"> <ButtonLink iconRight={<ChevronDown />} iconLeft={<Phone />} external transparent href={`/${language}/content/feedback`} dataTest="contactPhone" > {`${formattedPhoneNumber} ${languageCode}`} </ButtonLink> </div> ); }; const phoneNumber = booking.customerSupport?.phoneNumber || ''; const formattedPhoneNumber = formatPhoneNumber(phoneNumber); return ( <div data-cy="contact" className="contact"> <Separator /> <Text size="large" type="attention" spaceAfter="medium"> <Translate t={__('smartfaq.singe_booking_page.contact.title')} /> </Text> {formattedPhoneNumber ? renderPhoneNumber(phoneNumber, language) : renderContactPageLink()} <ol> <li> <Text element="span"> <Translate html t={__('smartfaq.single_booking_page.instructions.name')} /> </Text> </li> <li> <Text element="span"> <Translate html t={__('smartfaq.single_booking_page.instructions.email')} /> </Text> </li> </ol> <style jsx>{styles}</style> </div> ); }; export const RawContact = Contact; export default createFragmentContainer( withLanguage(withTheme(Contact)), graphql` fragment Contact_booking on BookingInterface { databaseId: id(opaque: false) customerSupport { phoneNumber } } `, );