{"version":3,"sources":["webpack:///./transfer/components/contact-confidence/contact-confidence.js","webpack:///./transfer/utils/payment-type.js","webpack:///./transfer/components/payment-details-overpanel/payment-details.js","webpack:///./transfer/components/payment-details-overpanel/payment-details-overpanel.js","webpack:///./transfer/components/payment-details-overpanel/index.js","webpack:///./transfer/components/homepage/recipient-selector.js","webpack:///./transfer/components/unilateral-email-confirm/overpanel.js","webpack:///./transfer/components/unilateral-email-confirm/index.js","webpack:///./transfer/components/homepage/send-page/send-base.js","webpack:///./experiments/external.js","webpack:///./experiments/unilateral.js","webpack:///./transfer/components/homepage/send-page/send-entries.js","webpack:///./transfer/components/homepage/send-page/send-layout-with-entry.js","webpack:///./transfer/components/homepage/send-page/index.js"],"names":["i18n","content","Container","glamorous","div","marginTop","InnerContainer","textAlign","maxWidth","margin","TextContainer","Text","p","fontSize","FieldsContainer","Button","button","ContactConfidence","Component","constructor","arguments","_defineProperty","e","preventDefault","this","props","handleClose","render","translationKey","isUnilateral","isRestricted","thumbnailUrl","React","createElement","SimpleRecipientHeader","styleOverrides","headerContainer","flexDirection","recipientContainer","marginBottom","detailsContainer","marginLeft","showLocation","thumbnailDiameter","undefined","concat","onSubmit","UnilateralFields","container","border","padding","connect","_ref","recipient","getPaymentType","isPurchase","length","PAYMENT_TYPE","PURCHASE","PERSONAL","PaymentDetails","_this","prevOverpanel","suggestedPaymentType","dispatch","trackContactConfidenceSubmit","getSkipPaymentType","url","paymentTypeUrlMap","toggleContactConfidenceOverpanel","show","updateTransactionData","togglePaymentTypeChoiceOverpanel","state","showContactConfidenceOverpanel","showPaymentTypeChoiceOverpanel","componentWillUnmount","routeTo","renderContent","key","handleCloseContactConfidenceOverpanel","suggestedFlowType","PAYMENT_TYPE_FLOW_MAP","PaymentTypeChoice","handleCloseForOtherFlow","handleClosePaymentTypeChoiceOverpanel","flowType","transaction","overpanels","amount","paymentTypeChoice","contactConfidence","paymentTypeChoiceOverpanelType","moneyPageOverPanel","suggestedTransactionType","recurringType","recipientAccountType","receiverFee","i18nContactConfidence","i18nPaymentTypeChoice","PaymentDetailsOverpanel","a11yTitle","showOverpanel","Overpanel","trackContactConfidenceCancel","trackCancelBtn","callAll","_len","fns","Array","_key","_len2","args","_key2","forEach","fn","RecipientSelector","validateInput","changes","hasOwnProperty","setState","isOpen","event","selectAllText","target","contact","index","inputValue","firstName","lastName","fullName","alternateFullName","phones","email","networkIdDisplayName","name","getInformalName","givenName","surname","country","countryCode","isArray","getContactPhone","recipientDisplayDetails","isPhoneOrEmail","hasNetworkId","networkId","SearchContactRow","details","item","getPhoneNumberFormatter","inputProps","isRecipientValid","onChange","submit","showMgmRecipientError","errorMessage","showError","AutoComplete","_objectSpread","autoFocus","shouldContactSearchInputBeAutofocus","placeholder","handleInputChange","onBlur","handleInputBlur","onFocus","handleInputFocus","errorText","renderItem","onStateChange","handleStateChange","itemToString","isInputValid","renderError","display","minHeight","alignItems","justifyContent","SubContainer","width","lineHeight","UnilateralEmailConfirmation","toggleUnilateralEmailConfirmationPopup","confirmRecipient","style","fontWeight","_HeadingText","size","center","_BodyText","_Button","onClick","handleSubmit","ButtonLink","handleEscKey","data-pagename","UnilateralEmailConfirmationOverpanel","showPanel","unilateralEmailConfirmation","aria-label","HAWK","pxp","ENV_TYPE","HAWK_PPCP","pageName","trackSendLink","linkName","trackLink","SendBase","isRecipientInputOnFocus","tracking","Events","p2p_contact_typing_stopped","num_characters_input","search_type","alreadyTyped","_debounce","trackTypingStoppedAndMakeTypingAvailable","hasEngagedContact","UnifiedActions","p2p_contact_typing_started","trackTypingStoppedDebounced","ViewActions","toLowerCase","trimmedRecipient","trim","query","includeDirect","includeNonDirect","isRequestFlow","isMgm","itemNumber","p2p_contact_selection_pressed","contact_selected_row","receiver_account_type","transaction_type","receiver_country","has_ppme","is_recent_contact","is_existing_contact","transacted","has_profile_photo","is_favorite_contact","isFavorite","contact_selected_sent_count","paymentSentCount","contact_selected_rcvd_count","paymentReceivedCount","is_synced_contact","AnalyticsUtils","isSynced","contact_selected_group","CONTACT_SELECTED_GROUP","TOP_CONTACTS","handleFetchRecipientDetails","displayName","isPhoneNumberMaybe","parseAndFormatPhoneNumber","decorateContact","typedRecipient","_this$props$recipient","id","p2p_search_result_contact_selection_pressed","getContactSelectedPosition","getContactSelectedGroup","type","AUTOCOMPLETE_ITEM_TYPE","PHONE_OR_EMAIL","handlePhoneOrEmailSelection","trackContactClick","isContact","isPurchaseDisabled","isPersonalDisabled","handleInterstitialCipFlow","enableAnalytics","ANALYTICS_FLOW_TYPE","MGM","enableContactConfidence","selectedType","onSingleRecipient","updatedContact","fetchRecipientDetails","contacts","recipientMatchFromContacts","findRecipientInContacts","mgmPSContent","shouldInactivateButton","buttonContent","page_button_text","CSSTransitionGroup","transitionName","transitionEnterTimeout","transitionLeaveTimeout","className","data-nemo","NextButton","handleSubmitRecipient","tabIndex","disabled","p2p_contact_search_pressed","trackDirectorySearchClick","isMobileUser","isSmartphone","isIOS","isIframe","scrollTo","_recipientInput","document","body","mobileScrollToInput","isPhoneSendRequestEligible","hasShowFullSearchPromptTrmt","searchPlaceholder","getSearchPlaceholder","directionality","InputContainer","innerRef","c","toggleInputFocus","dir","handleChangeRecipient","value","clearButtonLabel","onClear","handleSelectContactFromAutocomplete","topContacts","otherContacts","searchedContacts","overrideProps","hasFetchedContacts","canUseInitials","handleSelectContact","pageGroup","flush","trackingCall","method","trackingUrl","xmlhttp","XMLHttpRequest","open","send","componentDidMount","consentType","searchTrackingDetails","mgmTrafficSource","env","isMobile","funnel","store","getState","window","top","behavior","shouldShowConsent","toggleSearchConsentOverpanel","isPreFlow","analytics","actionType","event_source","HAWK_SOURCE","HAWK_MWEB","HAWK_WEB","updateCommonProps","source","FUNNEL","SEND","p2p_contact_screen_shown","flfr","DocumentTitle","title","children","renderRecipientInput","renderSubmitButton","topSendContacts","getTopContactsContainerProps","SearchConsentOverpanel","UnilateralRecipientChoiceOverpanel","toggleUnilateralRecipientChoiceOverpanel","server","router","user","permissions","isNativeApp","_get","timeZone","EntriesHeader","styled","sendEntryProps","getFeatureProps","isLegalEntityUser","mgmLink","from","xbLinks","bankDeposit","cashPickup","xbLinksBiz","massPaymentLink","makePixLink","ppdgLink","donationLink","visaPlusLink","filter","Boolean","reduce","propsReducer","sendInvoiceLink","SendEntries","Fragment","EntriesContainer","map","entryProp","Entry","_extends","i18nSendContactHint","Heading","h2","mediumAndSmaller","_ref2","pStudioContent","encryptionFailed","productFlowId","shouldShowEntrySidebar","getTrafficSourceFromUrl","homePageTitle","isEligibleForEitherTreatmentForPlaceholderContent","displayNoOfTopContacts","isWebIncreaseTopContacts","NUM_TOP_CONTACTS","renderTurnOnSearch","PageContainer","RecipientForm","InputWrapper","InputAndContactsWrapper","isLarge","isLeftAlign","as","test-id","_Alert","typeIconAriaLabel","closeButton","TopContactsContainer","ContactsContainer","slice","EntryContainer","EntryWrapper","SendWithEntry"],"mappings":"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","file":"send-page.esm.js","sourcesContent":["// @flow\n\nimport React, { Component } from 'react'\nimport glamorous from 'glamorous'\nimport content from 'pp-react-l10n'\n\nimport { connect } from 'transfer/utils/p2p-connect'\n\nimport SimpleRecipientHeader from 'transfer/components/recipient-header/simple-recipient-header'\nimport UnilateralFields from 'transfer/components/unilateral'\n\nconst i18n = content('transfer/contactConfidence')\n\nconst Container = glamorous.div({\n marginTop: '4%',\n})\n\nconst InnerContainer = glamorous.div({\n textAlign: 'center',\n maxWidth: '30rem',\n margin: 'auto',\n})\n\nconst TextContainer = glamorous.div({ marginTop: '2rem' })\n\nconst Text = glamorous.p({\n fontSize: '1.125rem',\n})\n\nconst FieldsContainer = glamorous.div({ marginTop: '4%' })\n\nconst Button = glamorous.button('ppvx_btn', { marginTop: '2rem' })\n\nexport const THUMBNAIL_DIAMETER = 120\n\ntype Props = {\n isUnilateral: boolean,\n isRestricted: boolean,\n thumbnailUrl?: string,\n handleClose: () => any,\n}\n\nexport class ContactConfidence extends Component {\n static defaultProps = {\n handleClose: () => {},\n }\n\n handleClose = (e: SyntheticEvent) => {\n e.preventDefault()\n\n this.props.handleClose()\n }\n\n render() {\n const { isUnilateral, isRestricted, thumbnailUrl } = this.props\n\n let translationKey\n if (isUnilateral) {\n translationKey = 'unilateral'\n } else if (isRestricted) {\n translationKey = 'restricted'\n } else {\n translationKey = 'account'\n }\n\n return (\n \n \n \n\n \n {i18n(`body.primary.${translationKey}`)}\n {i18n(`body.secondary.${translationKey}`)}\n \n\n
\n {isUnilateral && (\n \n \n \n )}\n\n \n
\n
\n
\n )\n }\n}\n\nexport default connect(({ recipient }) => ({\n isUnilateral: recipient.isUnilateral,\n isRestricted: recipient.isRestricted,\n thumbnailUrl: recipient.thumbnailUrl,\n}))(ContactConfidence)\n","// @flow\n\nimport { PAYMENT_TYPE } from '../../../../lib/constants'\n\n/**\n * Get payment type based on transaction properties\n * @param {Object=} options\n * @param {boolean} options.isPurchase - whether transaction is a purchase transaction or not\n * @returns {string} payment type based on options or PERSONAL by default\n */\nexport function getPaymentType({ isPurchase }: { isPurchase?: boolean } = {}) {\n return isPurchase ? PAYMENT_TYPE.PURCHASE : PAYMENT_TYPE.PERSONAL\n}\n","// @flow\n\nimport React, { Component } from 'react'\n\nimport { connect } from 'transfer/utils/p2p-connect'\nimport { routeTo } from 'transfer/utils/routeHelper'\n\nimport ContactConfidence from 'transfer/components/contact-confidence/contact-confidence'\nimport PaymentTypeChoice from 'transfer/components/unified/payment-type-choice/payment-type-choice'\nimport { paymentTypeUrlMap } from 'transfer/components/unified/payment-type-choice'\n\nimport { toggleContactConfidenceOverpanel } from 'transfer/actions/overpanels'\nimport {\n togglePaymentTypeChoiceOverpanel,\n updateTransactionData,\n getSkipPaymentType,\n} from 'transfer/actions/unified-actions'\nimport { getPaymentType } from 'transfer/utils/payment-type'\nimport { trackContactConfidenceSubmit } from 'transfer/utils/contact-confidence-analytics'\n\nimport { PAYMENT_TYPE_FLOW_MAP } from 'transfer/constants'\nimport { PAYMENT_TYPE } from '../../../../../lib/constants'\n\ntype Props = {\n showPaymentTypeChoiceOverpanel: boolean,\n showContactConfidenceOverpanel: boolean,\n paymentTypeChoiceOverpanelType: string,\n suggestedPaymentType: string,\n selectedPaymentType: string,\n receiverFee: string,\n isRestricted: boolean,\n recurringType: AnalyticType,\n recipientAccountType: string,\n dispatch: Function,\n}\ntype State = {\n prevOverpanel: null | string,\n}\n\nexport class PaymentDetails extends Component {\n url: null | string = null\n\n state = {\n prevOverpanel: null,\n }\n\n static getDerivedStateFromProps(props: Props, state: State) {\n if (props.showContactConfidenceOverpanel) {\n return { prevOverpanel: 'contactConfidence' }\n } else if (props.showPaymentTypeChoiceOverpanel) {\n return { prevOverpanel: 'paymentTypeChoice' }\n }\n\n return null\n }\n\n componentWillUnmount() {\n if (this.url) {\n routeTo(this.url)\n }\n }\n\n handleCloseContactConfidenceOverpanel = () => {\n const { suggestedPaymentType, isRestricted, dispatch } = this.props\n\n trackContactConfidenceSubmit()\n\n if (!isRestricted) {\n if (!getSkipPaymentType(suggestedPaymentType)) {\n this.url = '/homepage/preview'\n } else {\n this.url =\n paymentTypeUrlMap[suggestedPaymentType] ||\n paymentTypeUrlMap[PAYMENT_TYPE.PURCHASE]\n }\n }\n\n dispatch(toggleContactConfidenceOverpanel({ show: false }))\n }\n\n handleClosePaymentTypeChoiceOverpanel = (\n shouldUpdateTransactionData: boolean = false,\n { isPurchase }: { isPurchase: boolean } = {}\n ) => {\n const { dispatch } = this.props\n this.url = paymentTypeUrlMap[getPaymentType({ isPurchase })]\n\n dispatch(updateTransactionData({ isPurchase }))\n\n dispatch(togglePaymentTypeChoiceOverpanel({ show: false }))\n }\n\n renderContent() {\n const { showContactConfidenceOverpanel, suggestedPaymentType } = this.props\n const { prevOverpanel } = this.state\n\n if (\n showContactConfidenceOverpanel ||\n prevOverpanel === 'contactConfidence'\n ) {\n return (\n \n )\n }\n\n const suggestedFlowType = PAYMENT_TYPE_FLOW_MAP[suggestedPaymentType]\n return (\n \n )\n }\n\n render() {\n return this.renderContent()\n }\n}\n\nexport default connect(({ transaction, overpanels, recipient, amount }) => ({\n showPaymentTypeChoiceOverpanel: overpanels.paymentTypeChoice,\n showContactConfidenceOverpanel: overpanels.contactConfidence,\n paymentTypeChoiceOverpanelType: recipient.moneyPageOverPanel,\n suggestedPaymentType: transaction.suggestedTransactionType,\n isRestricted: recipient.isRestricted,\n recurringType: recipient.recurringType,\n recipientAccountType: recipient.recipientAccountType,\n receiverFee: amount.receiverFee,\n}))(PaymentDetails)\n","// @flow\n\nimport React, { Component } from 'react'\n\nimport { connect } from 'transfer/utils/p2p-connect'\nimport content from 'pp-react-l10n'\n\nimport Overpanel from 'react-components/overpanel'\nimport PaymentDetails from './payment-details'\nimport { toggleContactConfidenceOverpanel } from 'transfer/actions/overpanels'\nimport { togglePaymentTypeChoiceOverpanel } from 'transfer/actions/unified-actions'\nimport { trackCancelBtn } from 'transfer/utils/unified-send-analytics'\nimport { trackContactConfidenceCancel } from 'transfer/utils/contact-confidence-analytics'\n\nconst i18nContactConfidence = content('transfer/contactConfidence')\nconst i18nPaymentTypeChoice = content('transfer/inc/paymentTypeChoices')\n\ntype Props = {\n showContactConfidenceOverpanel: boolean,\n showPaymentTypeChoiceOverpanel: boolean,\n handleClose: () => any,\n}\n\nexport class PaymentDetailsOverpanel extends Component {\n render() {\n const {\n showContactConfidenceOverpanel,\n showPaymentTypeChoiceOverpanel,\n handleClose,\n } = this.props\n\n const showOverpanel = !!(\n showContactConfidenceOverpanel || showPaymentTypeChoiceOverpanel\n )\n\n let a11yTitle\n if (showContactConfidenceOverpanel) {\n a11yTitle = i18nContactConfidence('a11y.title')\n } else if (showPaymentTypeChoiceOverpanel) {\n a11yTitle = i18nPaymentTypeChoice('main.title')\n }\n\n return (\n {\n if (showContactConfidenceOverpanel) {\n trackContactConfidenceCancel()\n } else if (showPaymentTypeChoiceOverpanel) {\n trackCancelBtn()\n }\n\n handleClose()\n }}\n a11yTitle={a11yTitle}\n >\n \n \n )\n }\n}\n\nexport default connect(\n ({ overpanels }) => ({\n showPaymentTypeChoiceOverpanel: overpanels.paymentTypeChoice,\n showContactConfidenceOverpanel: overpanels.contactConfidence,\n }),\n dispatch => ({\n handleClose: () => {\n dispatch(togglePaymentTypeChoiceOverpanel({ show: false }))\n dispatch(toggleContactConfidenceOverpanel({ show: false }))\n },\n })\n)(PaymentDetailsOverpanel)\n","import PaymentDetailsOverpanel from './payment-details-overpanel'\n\nexport default PaymentDetailsOverpanel\n","/**\n * autocomplete for recipient selection\n */\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport content from 'pp-react-l10n'\nimport { selectAllText } from 'lib/dom-utils'\nimport { getPhoneNumberFormatter } from '../../utils/phoneUtils'\nimport AutoComplete from './autocomplete'\nimport { getContactPhone } from '../../../lib/contact-utils'\nimport { isPhoneOrEmail } from '../../../../../shared/validators'\nimport { getInformalName } from '../../utils/name-utils'\nimport SearchContactRow from 'transfer/components/search/searchContactRow'\nimport { shouldContactSearchInputBeAutofocus } from 'experiments/contact-search-input-active'\n\nconst i18n = content('transfer/page/recipient')\n\nconst callAll = (...fns) => (...args) => fns.forEach(fn => fn && fn(...args))\n\nexport default class RecipientSelector extends Component {\n static propTypes = {\n countryCode: PropTypes.string.isRequired,\n contacts: PropTypes.array.isRequired,\n isOpen: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n inputProps: PropTypes.object,\n recipient: PropTypes.string,\n submit: PropTypes.func,\n isRecipientValid: PropTypes.bool,\n placeholder: PropTypes.string,\n errorMessage: PropTypes.string,\n showMgmRecipientError: PropTypes.bool,\n }\n\n static defaultProps = {\n recipient: '',\n inputProps: {},\n placeholder: '',\n errorMessage: '',\n showMgmRecipientError: false,\n }\n\n state = {\n validateInput: false,\n }\n\n handleStateChange = changes => {\n if (changes.hasOwnProperty('isOpen')) {\n this.setState({ validateInput: !changes.isOpen })\n this.isOpen = changes.isOpen\n }\n }\n\n handleInputChange = event => this.setState({ validateInput: false })\n\n handleInputBlur = () => {\n // if the menu is open, then our onStateChange handler will take care of things...\n if (!this.isOpen) {\n this.setState({ validateInput: true })\n }\n }\n\n handleInputFocus = event => {\n selectAllText(event.target)\n this.setState({ validateInput: false })\n }\n\n renderItem = (contact, index, inputValue = '') => {\n contact.index = index\n const {\n thumbnailUrl,\n firstName,\n lastName,\n fullName,\n alternateFullName,\n phones,\n } = contact\n let { email, networkIdDisplayName } = contact\n\n const name =\n alternateFullName ||\n fullName ||\n getInformalName({\n givenName: firstName,\n surname: lastName,\n country: this.props.countryCode,\n })\n\n if (!email && Array.isArray(phones)) {\n email = getContactPhone(contact, this.props.countryCode)\n }\n\n // Display networkId if available, fall back to email display\n let recipientDisplayDetails = networkIdDisplayName || email\n\n // Display email or phone if input value is a valid one, fall back to networkId display\n if (isPhoneOrEmail(inputValue)) {\n recipientDisplayDetails = inputValue\n } else if (contact.hasNetworkId) {\n recipientDisplayDetails = `@${contact.networkId}`\n }\n\n return (\n \n )\n }\n\n itemToString = item => {\n if (!item) {\n return ''\n } else if (item.email) {\n return item.email\n } else if (typeof item === 'string') {\n return getPhoneNumberFormatter(this.props.countryCode)(item)\n }\n return ''\n }\n\n render() {\n const {\n inputProps,\n recipient = '',\n isRecipientValid,\n onChange,\n submit,\n showMgmRecipientError,\n errorMessage,\n } = this.props\n\n const { validateInput } = this.state\n const showError =\n (validateInput && !isRecipientValid && recipient) || showMgmRecipientError\n\n return (\n \n )\n }\n}\n","// @flow\nimport React, { Component } from 'react'\nimport glamorous from 'glamorous'\nimport content from 'pp-react-l10n'\nimport { connect } from 'transfer/utils/p2p-connect'\nimport { Button, HeadingText, BodyText } from '@paypalcorp/pp-react'\nimport { toggleUnilateralEmailConfirmationPopup } from 'transfer/actions/overpanels'\nimport ButtonLink from 'react-components/buttonLink'\n\nconst i18n = content('transfer/unilateralEmailConfirmation')\n\nconst Container = glamorous.div({\n display: 'flex',\n minHeight: '80vh',\n alignItems: 'center',\n flexDirection: 'column',\n justifyContent: 'center',\n})\n\nconst SubContainer = glamorous.div({\n width: '35%',\n lineHeight: '1.5',\n textAlign: 'center',\n margin: '1rem 0 3rem',\n})\n\ntype Props = {\n recipient: any,\n dispatch: Function,\n handleSubmit: (contact: FormattedContact) => any,\n}\nexport class UnilateralEmailConfirmation extends Component {\n static defaultProps = {\n handleSubmit: () => {},\n }\n\n handleEscKey = () => {\n this.props.dispatch(toggleUnilateralEmailConfirmationPopup({ show: false }))\n return\n }\n\n render() {\n const { recipient } = this.props\n const confirmRecipient = (\n {recipient}\n )\n return (\n \n \n {i18n('body.description')}\n \n \n \n {i18n('subheading.description', {\n recipient: confirmRecipient,\n })}\n \n \n \n \n {i18n('button.edit')}\n \n \n )\n }\n}\nexport default connect(({ recipient }) => ({\n recipient: recipient.recipient,\n}))(UnilateralEmailConfirmation)\n","// @flow\nimport React from 'react'\nimport content from 'pp-react-l10n'\nimport Overpanel from 'react-components/overpanel'\nimport { connect } from 'transfer/utils/p2p-connect'\nimport UnilateralEmailConfirmation from './overpanel'\nimport { toggleUnilateralEmailConfirmationPopup } from 'transfer/actions/overpanels'\n\nconst i18n = content('transfer/unilateralEmailConfirmation')\n\ntype Props = {\n showPanel: boolean,\n handleSubmit: (contact: FormattedContact) => any,\n dispatch: Function,\n}\n\nexport const UnilateralEmailConfirmationOverpanel = connect(\n ({ overpanels }) => ({\n showPanel: overpanels.unilateralEmailConfirmation,\n })\n)(({ dispatch, showPanel, handleSubmit = () => {} }: Props = {}) => {\n return (\n {\n dispatch(toggleUnilateralEmailConfirmationPopup({ show: false }))\n }}\n >\n \n \n )\n})\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport DocumentTitle from 'react-document-title'\nimport { CSSTransitionGroup } from 'react-transition-group'\nimport { connect } from 'transfer/utils/p2p-connect'\nimport * as ViewActions from '../../../actions/Actions'\nimport * as UnifiedActions from '../../../actions/unified-actions'\nimport _ from 'lodash'\nimport { InputContainer } from '../common/layout'\nimport {\n parseAndFormatPhoneNumber,\n isPhoneNumberMaybe,\n} from '../../../utils/phoneUtils'\nimport {\n findRecipientInContacts,\n getContactPhone,\n getContactSelectedGroup,\n getContactSelectedPosition,\n} from '../../../../lib/contact-utils'\nimport { getSearchPlaceholder } from '../../../utils/search-placeholder'\nimport { mobileScrollToInput } from '../../../utils/recipient-utils'\nimport { isIframe } from 'iframe-support'\nimport { isSmartphone, isIOS } from '../../../../lib/wurfl'\nimport * as AnalyticsUtils from 'lib/analytics/utils'\nimport { trackLink } from '../../../../lib/analytics/fpti'\nimport { tracking } from '../../../../lib/analytics/mParticle'\nimport Events from '../../../../lib/analytics/eventTags'\nimport content from 'pp-react-l10n'\n\nimport PaymentDetailsOverpanel from '../../payment-details-overpanel'\nimport UnilateralRecipientChoiceOverpanel from '../../../components/unilateral-recipient-choice'\nimport NextButton from '../next-button'\nimport RecipientSelector from '../recipient-selector'\nimport {\n AUTOCOMPLETE_ITEM_TYPE,\n HAWK_SOURCE,\n CONTACT_SELECTED_GROUP,\n} from '../../../constants'\nimport {\n toggleUnilateralRecipientChoiceOverpanel,\n toggleSearchConsentOverpanel,\n toggleUnilateralEmailConfirmationPopup,\n} from '../../../actions/overpanels'\nimport SearchConsentOverpanel from '../../search-consent-overpanel'\nimport { shouldShowConsent } from '../../search-consent-overpanel/search-consent-utils'\nimport {\n trackDirectorySearchClick,\n trackContactClick,\n} from '../../../utils/directory-search-analytics'\nimport { handleInterstitialCipFlow } from '../../../utils/homeInfoUtils'\nimport {\n ANALYTICS_FLOW_TYPE,\n ENV_TYPE,\n FUNNEL,\n} from '../../../../../../lib/constants'\nimport { UnilateralEmailConfirmationOverpanel } from '../../unilateral-email-confirm'\nimport { hasUnilateralEmailConfirmationTreatment } from 'experiments/unilateral'\nimport { shouldPersistTokenForExternalFlows } from '../../../../experiments/external'\nimport decorateContact from '../helpers/decorateContact.js'\nimport store from 'transfer/stores/configureStore'\nimport { hasShowFullSearchPromptTrmt } from '../../../../experiments/showFullSearchPrompt'\n\nconst i18n = content('transfer/page/recipient')\n\nconst HAWK = shouldPersistTokenForExternalFlows()\n ? ENV_TYPE.HAWK_PPCP\n : ENV_TYPE.HAWK\nconst pageName = 'main:p2p:tab-send::start:node::',\n pageGroup = 'main:p2p:tab-send::start'\n\nconst trackSendLink = linkName => {\n trackLink(linkName, pageGroup, pageName, 'link')\n}\n\n/**\n * Send money page for p2p flow\n */\nexport class SendBase extends React.Component {\n static propTypes = {\n canUseInitials: PropTypes.bool,\n contacts: PropTypes.array.isRequired,\n topContacts: PropTypes.array.isRequired,\n topSendContacts: PropTypes.array.isRequired,\n otherContacts: PropTypes.array.isRequired,\n searchedContacts: PropTypes.array,\n hasFetchedContacts: PropTypes.bool,\n recipient: PropTypes.string.isRequired,\n isRecipientValid: PropTypes.bool.isRequired,\n dispatch: PropTypes.func.isRequired,\n country: PropTypes.string.isRequired,\n error: PropTypes.object,\n isNativeApp: PropTypes.bool.isRequired,\n isPurchase: PropTypes.bool.isRequired,\n flowType: PropTypes.string,\n children: PropTypes.func.isRequired,\n directionality: PropTypes.string,\n isPhoneSendRequestEligible: PropTypes.bool,\n selectedType: PropTypes.string,\n searchTrackingDetails: PropTypes.object,\n consentType: PropTypes.string,\n isPersonalDisabled: PropTypes.bool,\n isPurchaseDisabled: PropTypes.bool,\n isMgm: PropTypes.bool,\n showMgmRecipientError: PropTypes.bool,\n mgmTrafficSource: PropTypes.string,\n env: PropTypes.string,\n isMobile: PropTypes.bool,\n mgmPSContent: PropTypes.object,\n timeZone: PropTypes.string,\n hasEngagedContact: PropTypes.bool,\n typedRecipient: PropTypes.string,\n }\n\n static defaultProps = {\n isPhoneSendRequestEligible: false,\n isMgm: false,\n }\n\n state = {\n isRecipientInputOnFocus: false,\n }\n\n alreadyTyped = false\n\n trackTypingStoppedAndMakeTypingAvailable = recipient => {\n tracking(\n Events.p2p_contact_typing_stopped({\n num_characters_input: recipient.length,\n search_type: 'service',\n })\n )\n this.alreadyTyped = false\n }\n\n trackTypingStoppedDebounced = _.debounce(\n this.trackTypingStoppedAndMakeTypingAvailable,\n 300\n )\n\n componentWillUnmount() {\n // Fire typing stopped event, if any\n this.trackTypingStoppedDebounced.flush()\n }\n\n trackingCall(method, trackingUrl) {\n if (!method || !trackingUrl || trackingUrl === '') {\n return\n }\n\n const xmlhttp = new XMLHttpRequest()\n xmlhttp.open(method, trackingUrl, true)\n xmlhttp.send()\n }\n\n componentDidMount() {\n const {\n dispatch,\n consentType = '',\n searchTrackingDetails = {},\n isMgm,\n mgmTrafficSource,\n env,\n isMobile,\n } = this.props\n\n const { transaction: { funnel } = {} } = store.getState()\n\n window.scrollTo({ top: 0, behavior: 'smooth' })\n\n if (isMgm) {\n dispatch(UnifiedActions.initializeMGMFlow(mgmTrafficSource))\n }\n dispatch(UnifiedActions.fetchPeers())\n\n if (shouldShowConsent(consentType, searchTrackingDetails)) {\n dispatch(\n toggleSearchConsentOverpanel({\n show: true,\n isPreFlow: true,\n analytics: { actionType: consentType },\n })\n )\n }\n\n dispatch(UnifiedActions.clearPurchaseProtection()) // this clears the previous instrumentation data in the redux store\n\n // update source for hawk\n if (env === HAWK) {\n const event_source = isMobile\n ? HAWK_SOURCE.HAWK_MWEB\n : HAWK_SOURCE.HAWK_WEB\n Events.updateCommonProps({\n source: event_source,\n })\n }\n\n if (funnel !== FUNNEL.SEND) {\n dispatch(UnifiedActions.funnelStarted({ funnel: FUNNEL.SEND }))\n }\n tracking(Events.p2p_contact_screen_shown())\n window.flfr = 'tab-send::start' // This is for tracking flow-from for analytics.\n }\n\n handleTooltipAnalytics = () => {\n trackSendLink('linkHelp')\n }\n\n handleChangeRecipient = recipient => {\n const { dispatch, hasEngagedContact } = this.props\n\n if (!hasEngagedContact) {\n dispatch(UnifiedActions.contactEngaged())\n }\n\n if (!this.alreadyTyped) {\n tracking(Events.p2p_contact_typing_started())\n this.alreadyTyped = true\n }\n this.trackTypingStoppedDebounced(recipient)\n\n this.props.dispatch(ViewActions.changeTypedRecipient(recipient))\n this.props.dispatch(ViewActions.changeRecipient(recipient))\n // handle Safari autocorrect\n if (this.props.recipient.toLowerCase() === recipient.toLowerCase()) {\n return\n }\n\n const trimmedRecipient = recipient.trim()\n if (trimmedRecipient) {\n this.props.dispatch(\n UnifiedActions.searchPeers({\n query: trimmedRecipient,\n includeDirect: true,\n includeNonDirect: true,\n isRequestFlow: false,\n isMgm: this.props.isMgm,\n })\n )\n }\n }\n\n // used when the user clicks on a contact bubble\n handleSelectContact = (contact, itemNumber) => {\n const { dispatch, hasEngagedContact } = this.props\n\n if (!hasEngagedContact) {\n dispatch(UnifiedActions.contactEngaged())\n }\n\n tracking(\n Events.p2p_contact_selection_pressed({\n contact_selected_row: itemNumber,\n receiver_account_type:\n typeof contact.transaction_type === 'string'\n ? contact.transaction_type.toLowerCase()\n : 'unknown',\n receiver_country: 'unknown',\n has_ppme: contact.hasNetworkId ? 'y' : 'n',\n is_recent_contact: 'y',\n is_existing_contact: contact.transacted ? 'y' : 'n',\n has_profile_photo: contact.thumbnailUrl ? 'y' : 'n',\n is_favorite_contact: contact.isFavorite ? 'y' : 'n',\n contact_selected_sent_count: contact.paymentSentCount,\n contact_selected_rcvd_count: contact.paymentReceivedCount,\n is_synced_contact: AnalyticsUtils.getBooleanString(contact.isSynced),\n contact_selected_group: CONTACT_SELECTED_GROUP.TOP_CONTACTS,\n })\n )\n this.handleFetchRecipientDetails(contact, 'linkContactBubble', true)\n }\n\n handlePhoneOrEmailSelection = () => {\n const { recipient, country } = this.props\n\n const displayName = isPhoneNumberMaybe(recipient)\n ? parseAndFormatPhoneNumber(recipient, country)\n : ''\n\n this.handleFetchRecipientDetails(\n decorateContact({\n email: recipient,\n displayName,\n typedRecipient: this.props.typedRecipient,\n }),\n 'typedRecipient',\n false\n )\n }\n\n handleSelectContactFromAutocomplete = (contact, itemNumber) => {\n if (!contact) {\n return\n }\n\n if (\n hasUnilateralEmailConfirmationTreatment() &&\n contact.id === 'emailMessage' &&\n !this.props.isMgm\n ) {\n // Entered within the user is Unilateral.\n this.props.dispatch(\n toggleUnilateralEmailConfirmationPopup({ show: true })\n )\n return\n }\n\n tracking(\n Events.p2p_search_result_contact_selection_pressed({\n contact_selected_row: getContactSelectedPosition(contact),\n receiver_account_type:\n typeof contact.transaction_type === 'string'\n ? contact.transaction_type.toLowerCase()\n : 'unknown',\n receiver_country: 'unknown',\n has_ppme: contact.hasNetworkId ? 'y' : 'n',\n is_recent_contact: 'n',\n is_existing_contact: contact.transacted ? 'y' : 'n',\n has_profile_photo: contact.thumbnailUrl ? 'y' : 'n',\n is_favorite_contact: contact.isFavorite ? 'y' : 'n',\n contact_selected_sent_count: contact.paymentSentCount,\n contact_selected_rcvd_count: contact.paymentReceivedCount,\n is_synced_contact: AnalyticsUtils.getBooleanString(contact.isSynced),\n contact_selected_group: getContactSelectedGroup(contact),\n num_characters_input: this.props.recipient?.length,\n })\n )\n // Handle user selection on different types of items\n if (contact.hasOwnProperty('type')) {\n if (contact.type === AUTOCOMPLETE_ITEM_TYPE.PHONE_OR_EMAIL) {\n this.handlePhoneOrEmailSelection()\n }\n return\n }\n\n trackContactClick(false, contact)\n\n this.props.dispatch(\n ViewActions.changeRecipient(\n contact.email || getContactPhone(contact, this.props.country)\n )\n )\n this.handleFetchRecipientDetails(\n decorateContact(\n {\n typedRecipient: this.props.typedRecipient,\n },\n contact\n ),\n 'linkInputAutocomplete',\n true\n )\n }\n\n fetchRecipientDetails = (contact, linkName, isContact) => {\n if (\n isContact === false &&\n this.props.isPurchaseDisabled &&\n this.props.isPersonalDisabled\n ) {\n return handleInterstitialCipFlow()\n }\n if (contact.transaction_type === 'GOODS' && this.props.isPurchaseDisabled) {\n return handleInterstitialCipFlow(contact)\n }\n if (\n contact.transaction_type === 'PERSONAL' &&\n this.props.isPersonalDisabled\n ) {\n return handleInterstitialCipFlow(contact)\n }\n\n this.props.dispatch(\n UnifiedActions.fetchRecipientDetails({\n contact,\n linkName,\n isContact,\n enableAnalytics: false,\n flowType: this.props.isMgm\n ? ANALYTICS_FLOW_TYPE.MGM\n : this.props.flowType,\n enableContactConfidence: true,\n })\n )\n }\n\n handleFetchRecipientDetails = (contact, linkName, isContact) => {\n // clear amount data when new recipient is entered, necessary when browser back button is used\n trackSendLink(linkName)\n this.props.dispatch(\n ViewActions.submittingRecipient({ selectedType: linkName })\n )\n\n if (contact.isUnilateral) {\n this.props.dispatch(\n UnifiedActions.fetchUnilateralRecipientChoices({\n contact,\n onSingleRecipient: updatedContact => {\n this.fetchRecipientDetails(updatedContact, linkName, isContact)\n },\n })\n )\n } else if (isContact && this.props.isMgm) {\n this.props.dispatch(UnifiedActions.showMgmRecipientError())\n } else {\n this.fetchRecipientDetails(contact, linkName, isContact)\n }\n }\n\n handleSubmitRecipient = event => {\n event.preventDefault()\n\n const { isRecipientValid, recipient, country, contacts } = this.props\n\n if (!recipient || !isRecipientValid) {\n return\n }\n\n const displayName = isPhoneNumberMaybe(recipient)\n ? parseAndFormatPhoneNumber(recipient, country)\n : ''\n\n const recipientMatchFromContacts = findRecipientInContacts(\n recipient,\n contacts\n )\n\n const contact =\n recipientMatchFromContacts ||\n decorateContact({\n email: recipient,\n displayName,\n typedRecipient: this.props.typedRecipient,\n })\n\n const isContact = !!recipientMatchFromContacts\n\n this.handleFetchRecipientDetails(contact, 'typedRecipient', isContact)\n }\n\n renderSubmitButton = () => {\n const { recipient, isRecipientValid, isMgm, mgmPSContent } = this.props\n const shouldInactivateButton = !recipient || !isRecipientValid\n\n const buttonContent =\n isMgm && mgmPSContent ? mgmPSContent.page_button_text : i18n('input.next')\n\n return (\n \n \n {buttonContent}\n \n \n )\n }\n\n toggleInputFocus = e => {\n if (e.type === 'focus') {\n tracking(Events.p2p_contact_search_pressed())\n trackDirectorySearchClick(false, 'DIR_SEARCH')\n }\n\n this.setState(\n {\n isRecipientInputOnFocus: !this.state.isRecipientInputOnFocus,\n },\n () => {\n // when user blurs out, trim recipient\n if (!this.state.isRecipientInputOnFocus) {\n const { recipient } = this.props\n const trimmedRecipient = recipient.trim()\n if (trimmedRecipient.length !== recipient.length) {\n this.props.dispatch(ViewActions.changeRecipient(trimmedRecipient))\n }\n }\n const isMobileUser = isSmartphone || isIOS()\n if (!isIframe() && isMobileUser) {\n const scrollTo = this.state.isRecipientInputOnFocus\n ? this._recipientInput\n : document.body\n mobileScrollToInput(scrollTo, 300)\n }\n }\n )\n }\n\n renderRecipientInput = () => {\n const {\n isPhoneSendRequestEligible,\n showMgmRecipientError,\n isMgm,\n } = this.props\n\n const placeholder = hasShowFullSearchPromptTrmt()\n ? i18n('homepage.send.placeholder.simplified')\n : i18n('homepage.send.placeholder.isDirectorySearchEligibleNoNumber')\n const searchPlaceholder = getSearchPlaceholder(placeholder)\n\n let errorMessage\n if (isMgm && showMgmRecipientError) {\n // Mgm Recipient Specific Error\n errorMessage = i18n('error.recipients.isMgmSendEligible')\n } else if (isPhoneSendRequestEligible) {\n errorMessage = i18n('error.recipients.isPhoneSendRequestEligible')\n } else {\n errorMessage = i18n('error.recipients.isNotPhoneSendRequestEligible')\n }\n\n const directionality = this.props.directionality || 'ltr'\n\n return (\n (this._recipientInput = c)}\n onFocus={this.toggleInputFocus}\n onBlur={this.toggleInputFocus}\n >\n this.handleChangeRecipient(e.target.value),\n 'data-nemo': 'recipient',\n onFocus: this.toggleInputFocus,\n onBlur: this.toggleInputFocus,\n clearButtonLabel: i18n('autocomplete.clearLabel'),\n onClear: () => this.props.dispatch(ViewActions.changeRecipient('')),\n }}\n onChange={this.handleSelectContactFromAutocomplete}\n contacts={[\n ...this.props.topContacts,\n ...this.props.otherContacts,\n ...this.props.searchedContacts,\n ]}\n submit={this.handleSubmitRecipient}\n recipient={this.props.recipient}\n countryCode={this.props.country}\n errorMessage={errorMessage}\n isRecipientValid={this.props.isRecipientValid}\n showMgmRecipientError={this.props.showMgmRecipientError}\n />\n \n )\n }\n\n getTopContactsContainerProps = overrideProps => {\n const {\n topContacts,\n flowType,\n hasFetchedContacts,\n canUseInitials,\n dispatch,\n } = this.props\n return {\n contacts: topContacts,\n flowType,\n hasFetchedContacts,\n handleSelectContact: this.handleSelectContact,\n canUseInitials,\n pageName,\n pageGroup,\n dispatch,\n ...overrideProps,\n }\n }\n\n render() {\n return (\n \n
\n {this.props.children({\n renderRecipientInput: this.renderRecipientInput,\n renderSubmitButton: this.renderSubmitButton,\n topContacts: this.props.topSendContacts,\n getTopContactsContainerProps: this.getTopContactsContainerProps,\n hasFetchedContacts: this.props.hasFetchedContacts,\n })}\n\n \n \n\n {\n this.props.dispatch(\n toggleUnilateralEmailConfirmationPopup({ show: false })\n )\n\n this.handleSubmitRecipient(event)\n }}\n />\n\n {\n this.props.dispatch(\n toggleUnilateralRecipientChoiceOverpanel({ show: false })\n )\n\n this.fetchRecipientDetails(\n updatedContact,\n this.props.selectedType,\n true\n )\n }}\n />\n
\n
\n )\n }\n}\n\nexport default connect(\n ({ server, contacts, recipient, transaction, router, user }) => ({\n canUseInitials: server.permissions.canUseInitials,\n directionality: server.directionality,\n country: server.country,\n contacts: contacts.contacts,\n topContacts: contacts.topContacts,\n topSendContacts: contacts.topSendContacts,\n otherContacts: contacts.otherContacts,\n searchedContacts: contacts.searchedContacts,\n hasFetchedContacts: contacts.hasFetchedContacts,\n recipient: recipient.recipient,\n isRecipientValid: recipient.isRecipientValid,\n displayName: recipient.displayName,\n isNativeApp: server.isNativeApp,\n isPurchase: transaction.isPurchase,\n flowType: _.get(router, 'location.params.flowType'),\n isPhoneSendRequestEligible: server.isPhoneSendRequestEligible,\n selectedType: recipient.selectedType,\n searchTrackingDetails: server.searchTrackingDetails,\n consentType: server.consentType,\n isPersonalDisabled: user.isPersonalDisabled,\n isPurchaseDisabled: user.isPurchaseDisabled,\n showMgmRecipientError: recipient.showMgmRecipientError,\n env: server.env,\n isMobile: server.isMobile,\n timeZone: user.timeZone,\n hasEngagedContact: transaction.hasEngagedContact,\n typedRecipient: recipient.typedRecipient,\n })\n)(SendBase)\n","import * as pxp from '../lib/pxp'\n\n/**\n * Door to token persistence bugfix.\n *\n * @url https://internal.msmaster.qa.paypal.com/elmo/experiment/123228\n * @url BUG: https://engineering.paypalcorp.com/jira/browse/PPPLPAYPT-127668\n */\nexport function shouldPersistTokenForExternalFlows() {\n return pxp.isTreatment('Trmt_token_persistence_PPPLPAYPT_127668')\n}\n","import * as pxp from 'lib/pxp'\n\n// These treatments are used for access to unilateral email confirmation send money flow.\n// https://internal.msmaster.qa.paypal.com/elmo/experiment/120262\nexport function hasUnilateralEmailConfirmationTreatment() {\n return pxp.isTreatment('Trmt_p2p_email_confirmation_overpanel_check')\n}\n","// @flow\n\nimport React from 'react'\nimport { HeadingText } from '@paypalcorp/pp-react'\nimport content from 'pp-react-l10n'\nimport {\n xbLinks,\n xbLinksBiz,\n sendInvoiceLink,\n massPaymentLink,\n ppdgLink,\n mgmLink,\n donationLink,\n makePixLink,\n visaPlusLink,\n} from '../sidebar-entries/sidebar-entry-props'\nimport { getFeatureProps } from '../../feature-link/utils/with-feature-props'\nimport { propsReducer } from 'transfer/components/feature-link/feature-props/utils'\nimport Entry from '../sidebar-entries/sidebar-entry'\nimport { EntriesContainer } from '../common/layout-with-entries'\nimport styled from '@emotion/styled'\n\nconst i18n = content('transfer/page/recipient')\n\nconst EntriesHeader = styled.div({ marginBottom: '20px' })\n\nexport function getSendEntryProps() {\n const props: FeatureProps = getFeatureProps()\n\n if (props.isLegalEntityUser) {\n return [\n mgmLink(props, { from: 'send' }),\n xbLinks.bankDeposit(props, { from: 'send' }),\n xbLinks.cashPickup(props, { from: 'send' }),\n xbLinksBiz.bankDeposit(props),\n xbLinksBiz.cashPickup(props),\n massPaymentLink(props),\n makePixLink(props),\n ppdgLink(props),\n donationLink(props),\n visaPlusLink(props),\n ]\n .filter(Boolean)\n .reduce(propsReducer, [])\n }\n\n return [\n mgmLink(props, { from: 'send' }),\n xbLinks.bankDeposit(props, { from: 'send' }),\n xbLinks.cashPickup(props, { from: 'send' }),\n xbLinksBiz.bankDeposit(props),\n xbLinksBiz.cashPickup(props),\n sendInvoiceLink(props),\n massPaymentLink(props),\n makePixLink(props),\n ppdgLink(props),\n donationLink(props),\n visaPlusLink(props),\n ]\n .filter(Boolean)\n .reduce(propsReducer, [])\n}\n\n// singleton that other files can import\nconst sendEntryProps = getSendEntryProps()\n\nfunction SendEntries() {\n return (\n <>\n \n \n {i18n('homepage.send.entries.title')}\n \n \n \n {sendEntryProps.map((entryProp, index) => (\n \n ))}\n \n \n )\n}\n\nexport default SendEntries\nexport { sendEntryProps }\n","/**\n * Send Page\n * It consumes components from send-base\n * and put them together in our desired layout\n */\nimport React from 'react'\nimport glamorous from 'glamorous'\nimport content from 'pp-react-l10n'\nimport { mediumAndSmaller } from 'lib/styles/media-queries'\nimport SendBase from './send-base'\nimport { InputWrapper, InputAndContactsWrapper } from '../common/layout'\nimport {\n PageContainer,\n RecipientForm,\n TopContactsContainer,\n EntryContainer,\n EntryWrapper,\n} from '../common/layout-with-entries'\nimport ContactsContainer from '../top-contacts-container/top-contacts-container-small'\nimport SendEntries, { sendEntryProps } from './send-entries'\nimport {\n ANALYTICS_FLOW_TYPE,\n NUM_TOP_CONTACTS,\n} from '../../../../../../lib/constants'\nimport { getTrafficSourceFromUrl } from '../../../utils/mgmUtils'\nimport { isEligibleForEitherTreatmentForPlaceholderContent } from '../../../../experiments/contact-search-placeholder'\nimport { HeadingText, Alert, BodyText } from '@paypalcorp/pp-react'\nimport { connect } from 'transfer/utils/p2p-connect'\nimport { get } from 'lodash'\nimport * as UnifiedActions from 'transfer/actions/unified-actions'\nimport { isWebIncreaseTopContacts } from 'experiments/web-increase-top-contacts'\n\nconst i18n = content('transfer/page/recipient')\nconst i18nSendContactHint = content('transfer/contacts')\n\nconst Heading = glamorous.h2({\n marginTop: 0,\n [mediumAndSmaller]: {\n marginTop: 'revert',\n },\n})\n\ntype SendLayoutProps = {\n productFlowId?: string,\n dispatch: Function,\n pStudioContent: any,\n encryptionFailed: boolean,\n}\n\nfunction SendLayout(props: SendLayoutProps) {\n const { dispatch, productFlowId, pStudioContent, encryptionFailed } = props\n const isMgm = productFlowId === ANALYTICS_FLOW_TYPE.MGM\n\n const shouldShowEntrySidebar = !!sendEntryProps.length && !isMgm\n const mgmTrafficSource = getTrafficSourceFromUrl()\n const mgmPSContent = get(\n pStudioContent,\n 'mgm_referrer_1c_flow_touchpoint.content.json',\n {}\n )\n\n const homePageTitle = isEligibleForEitherTreatmentForPlaceholderContent()\n ? i18n('homepage.send.title.headerVariation1')\n : i18n('homepage.send.title.header')\n\n const displayNoOfTopContacts = isWebIncreaseTopContacts()\n ? NUM_TOP_CONTACTS\n : 5\n\n return (\n \n {({\n renderRecipientInput,\n renderSubmitButton,\n renderTurnOnSearch,\n topContacts,\n getTopContactsContainerProps,\n hasFetchedContacts,\n }) => (\n \n {/* if no send entry points, offset recipient form so that it stays center */}\n \n \n \n \n {homePageTitle}\n \n {isEligibleForEitherTreatmentForPlaceholderContent() ? (\n \n {i18nSendContactHint(\n 'contacts.searchHintSendMoneyNameEmailPhoneUsername'\n )}\n \n ) : null}\n {encryptionFailed && (\n {\n dispatch(\n UnifiedActions.toggleEncryptionFailed({ show: false })\n )\n },\n }}\n >\n {i18n('encryption.failed')}\n \n )}\n {renderRecipientInput()}\n {renderSubmitButton()}\n \n \n\n {/** Do not show the top contacts container in case of MGM flow**/}\n {!isMgm && (\n \n {hasFetchedContacts && !!topContacts.length && (\n \n )}\n \n )}\n \n {/* only show if there are send entry points and not MGM flow*/}\n {shouldShowEntrySidebar && (\n \n \n \n \n \n )}\n \n )}\n \n )\n}\n\nexport default connect(({ server }) => ({\n pStudioContent: server.pStudioContent,\n encryptionFailed: server.encryptionFailed,\n isPhoneSendRequestEligible: server.isPhoneSendRequestEligible,\n}))(SendLayout)\n","import SendWithEntry from './send-layout-with-entry'\n\nexport default SendWithEntry\n"],"sourceRoot":""}