{"version":3,"sources":["webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/lodash/throttle.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/lodash/upperCase.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/lodash/_createCompounder.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/lodash/_arrayReduce.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/lodash/deburr.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/lodash/_deburrLetter.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/lodash/_basePropertyOf.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/lodash/words.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/lodash/_asciiWords.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/lodash/_hasUnicodeWord.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/lodash/_unicodeWords.js","webpack:///./transfer/components/contacts/svg/repeat-payment.svg","webpack:///./transfer/components/contacts/svg/gift.svg","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/consumerweb-sharing/src/index.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/react-copy-to-clipboard/lib/index.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/react-copy-to-clipboard/lib/Component.js","webpack:///./transfer/components/block-contact-overpanel/blockContact.js","webpack:///./transfer/components/blocked-contacts-overpanel/index.js","webpack:///./transfer/components/contact-blocked-overpanel/index.js","webpack:///./react-components/custom-checkbox/index.js","webpack:///./transfer/components/contacts/contact-list-item.js","webpack:///./transfer/components/contacts/transaction-list-item.js","webpack:///./experiments/blockUnblock.js","webpack:///./transfer/components/contacts/contact-details.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/reselect/es/defaultMemoize.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/reselect/es/index.js","webpack:///./transfer/components/share-with-friends.styles.js","webpack:///./transfer/components/share-with-friends.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/shared/ppme.js","webpack:///./transfer/components/network-identity-entry.styles.js","webpack:///./transfer/components/network-identity-entry.js","webpack:///./transfer/components/mgm/mgm-contacts-entry.js","webpack:///./transfer/components/contacts/contact-list.js"],"names":["debounce","isObject","module","exports","func","wait","options","leading","trailing","TypeError","upperCase","createCompounder","result","word","index","toUpperCase","arrayReduce","deburr","words","reApos","RegExp","callback","string","replace","array","iteratee","accumulator","initAccum","length","deburrLetter","toString","reLatin","reComboMark","basePropertyOf","object","key","undefined","asciiWords","hasUnicodeWord","unicodeWords","pattern","guard","match","reAsciiWord","reHasUnicodeWord","test","rsBreakRange","rsMathOpRange","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsModifier","rsSeq","join","rsEmoji","reUnicodeWord","getPopupOptionsString","popupWidth","popupHeight","left","document","body","clientWidth","clientHeight","encodeString","window","encodeURIComponent","isMobileDevice","navigator","userAgent","MSStream","shareURLByFacebook","url","popHeight","sharerURL","open","shareURLByGooglePlus","languageCode","shareByTwitter","text","sharerUrl","shareByEmail","emailSubject","location","href","shareBySMS","shareByWhatsApp","nativeApp","shareURLByMessenger","appId","redirectUri","CopyToClipboard","_typeof","obj","Symbol","iterator","constructor","prototype","Object","defineProperty","value","_react","_interopRequireDefault","_copyToClipboard","_excluded","__esModule","ownKeys","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","source","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","call","_classCallCheck","instance","Constructor","_defineProperties","props","descriptor","configurable","writable","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","e","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","this","_possibleConstructorReturn","self","_assertThisInitialized","ReferenceError","getPrototypeOf","_React$PureComponent","subClass","superClass","create","_inherits","protoProps","staticProps","_super","_this","_len","args","Array","_key","concat","event","_this$props","onCopy","children","elem","Children","only","onClick","_this$props2","cloneElement","PureComponent","i18n","content","Container","glamorous","div","marginTop","InnerContainer","textAlign","maxWidth","margin","HeaderText","fontSize","fontWeight","ParagraphText","ButtonContainer","_ref","display","BlockContact","Component","super","tracking","Events","p2p_contact_block_confirm_pressed","trackBlockConfirmationClick","dispatch","updateContactBlock","id","isBlock","handleClose","p2p_contact_block_cancel_pressed","trackBlockCancelClick","toggleBlockContactOverpanel","show","p2p_contact_block_prompt_screen_shown","trackBlockContactImpression","render","headerContent","paragraphContent","alternateFullName","firstName","lastName","country","name","getInformalName","givenName","surname","React","createElement","_Button","handleBlock","secondary","handleCancel","connect","_ref2","server","overpanels","blockedContacts","ownProps","toggleBlockedContactsOverpanel","Overpanel","a11yTitle","BlockedContacts","contactBlocked","toggleContactBlockedOverpanel","useEffect","p2p_contact_block_confirmation_screen_shown","trackBlockContactSuccessImpression","ContactBlockedOrUnblocked","changeType","sysColorFeaturedMain","sysColorBackgroundAlt","_PAYPAL_THEME","ComponentContainer","position","backgroundColor","alignItems","CheckboxInput","input","cursor","width","height","zIndex","opacity","outline","outlineOffset","CheckboxLabel","label","border","boxShadow","LabelTextContainer","span","marginLeft","flexDirection","justifyContent","LabelText","flex","lineHeight","alignSelf","LabelSecondaryText","CustomCheckbox","handleChange","hasSecondaryText","labelSecondaryText","style","top","labelText","className","debounceEvent","debouncedEvent","_debounce","persist","stopPropagation","isChecked","PreferredIconV2","_PreferredSelectedIcon","color","_PreferredIcon","containerCss","isEnabled","css","htmlFor","type","checked","aria-label","ariaLabel","renderLabelText","checkboxIcon","cssOverride","ContactListItemWrapper","padding","smallAndSmaller","NameAndDetailsV2","overflow","marginRight","extraSmallAndSmaller","Content","whiteSpace","textOverflow","ContactListItem","isFavorited","isFavorite","nextProps","next","setState","linkName","trackLink","updateFavorite","fullName","email","phones","thumbnailUrl","networkIdDisplayName","firstInitial","slice","lastInitial","phoneNumber","getDisplayPhone","details","tabIndex","role","data-nemo","Media","query","SIZE_SMALL","matches","Div","aria-hidden","minWidth","ContactAvatar","size","imageUrl","isBusiness","getAvatarColor","_BodyText","as","_CaptionText","right","transform","StarCheckbox","state","handleToggleFavorite","RepeatPayment","actionsMapping","PAYMENT_ACCEPT","PAYMENT_DENY","SHIPPING_SHIP","ADD_TRACKING","PAY_NOW","INVOICE_PAY","StatusTag","borderRadius","textTransform","status","borderColor","getStatusStyle","RepeatIcon","glamorousIcon","GiftIcon","DateContainer","paddingTop","paddingLeft","contentMap","CREDIT","DEBIT","REFUND","giftContentMap","statusContentMap","CANCELED","PAID","HELD","PENDING","REFUNDED","REVERSED","UNCLAIMED","NEEDS_ATTENTION","TransactionListItem","transaction","timeZone","handleRepeatPayment","trackContactDetailsLink","isUnilateral","isSellerTypeContact","date","note","displayAmount","creditOrDebit","isPurchase","isGift","grossAmount","activityType","subtype","actions","isDebit","svg","GiftSVG","amountColor","colors","vxDarkGray","vxGreen","amount","displayedStatus","some","action","minHeight","renderDate","month","_upperCase","formatDate","day","Date","paddingRight","marginBottom","shouldShowRepeat","currency","currency_code","RepeatPaymentSVG","isBlockUnblockTreatment","pxp","NameOrDetails","Details","TransactionList","SendButtonContainer","ActivityHeadingContainer","LinkContainer","pageName","pageGroup","ContactDetails","contact","fetchRecipientDetails","enableAnalytics","updateCommonProps","sub_flow","funnelStarted","funnel","FUNNEL","SEND","contactEngaged","submittingRecipient","selectedType","fetchUnilateralRecipientChoices","onSingleRecipient","updatedContact","sendContact","selectContact","advanceToRequestReview","flfr","routeTo","REQUEST","resetMultiRecipients","requestContact","deleteContact","then","catch","trackBlockContactClick","transactionType","changeCurrency","changeIsPurchase","changeAmount","fetchFundingOptions","componentDidMount","trackImpression","fetchContactActivities","recipientDisplayDetails","activityData","phone","contactActivityData","DocumentTitle","title","fontFamily","_HeadingText","handleSend","handleRequest","map","Button","handleSeeMore","ButtonLink","handleDeleteContact","handleBlockContact","_ref3","contacts","user","defaultEqualityCheck","a","b","defaultMemoize","equalityCheckOrOptions","equals","entry","providedOptions","equalityCheck","_providedOptions$equa","_providedOptions$maxS","maxSize","resultEqualityCheck","comparator","prev","createCacheKeyComparator","cache","get","put","getEntries","clear","entries","cacheIndex","findIndex","splice","unshift","pop","createLruCache","memoized","matchingEntry","find","clearCache","getDependencies","funcs","dependencies","isArray","every","dep","dependencyTypes","Error","createSelectorCreator","memoize","memoizeOptionsFromArgs","createSelector","_len2","_key2","_lastResult","_recomputations","directlyPassedOptions","memoizeOptions","resultFunc","_directlyPassedOption","_directlyPassedOption2","finalMemoizeOptions","memoizedResultFunc","selector","params","assign","lastResult","recomputations","resetRecomputations","centeredFlexStyle","gap","SharingButtonWrapper","styled","SharingSectionWrapper","paddingBottom","ProfileIconButton","_IconButton","scale","slugInfo","ppMeProfile","copiedInfo","setCopied","useState","profile","slug","paypalmeSlugName","setTimeout","btnState","buttonType","svgIconComponent","_CopyToClipboardIcon","preventDefault","sharing","_ShareFacebookIcon","_ShareMessengerIcon","twitterShareLink","_ShareTwitterIcon","getPpmeSlug","networkId","cardStyle","cardInnerStyle","profilePadding","ProfileCard","_Card","ProfileCardHeader","Header","ProfileCardContent","NameWrapper","ManageProfileButton","NetworkIdentityWrapper","order","ItemWrapperMobile","flexGrow","ButtonMobileWrapper","NameMobileWrapper","NewUserDescriptionWrapper","l10n","NewUserMobile","handleClick","topElement","generic","tertiary","NewUser","cdnHostName","strong","ExistingUserMobile","userThumbnailUrl","ExistingUser","_ref4","_Link","data-pagename","ShareYourLink","_ref5","userFullName","redirectUrl","addContactListRedirectUrl","_get","ppMeUserEligible","_extends","ItemWrapper","mediumAndSmaller","IconWrapper","contentKeys","mgmLink","from","titleKey","titleArgs","descriptionKey","descriptionArgs","_MgmIcon","TermsLink","Link","to","i18LoadingText","i18nSuccess","i18nRecipient","ContactListWrapper","hasFetchedContacts","PageWrapper","flexWrap","SpinnerWrapper","maxHeight","HeadingContainer","LinkWrapper","EntryPointsWrapper","ContactsRowWrapper","SearchInputWrapper","tableLayout","ContactList","searchString","matchingTopContacts","topContacts","matchingAllContacts","allContacts","isRecipientInputOnFocus","isSmartphone","isIOS","scrollTo","_recipientInput","mobileScrollToInput","matchSorter","threshold","rankings","ACRONYM","_throttle","search","searchContacts","pagename","pagegroup","analytics","data","srch","trackLinkWithData","currentContact","toggleContactDetailsOverpanel","searchedContacts","throttledSearchContacts","getMatchingContacts","showPaymentTypeChoiceOverpanel","showBlockContactOverpanel","showUnilateralRecipientChoiceOverpanel","handleCloseOverpanel","UnilateralRecipientChoice","handleSubmit","toggleUnilateralRecipientChoiceOverpanel","UnifiedActions","PaymentTypeChoice","hasSelectedFundingOption","innerRef","spinner","getBoundingClientRect","verticalAlign","_LoadingSpinner","data-test-id","screenReaderText","handleOpenContactDetails","directionality","_SearchInput","ref","c","onFocus","toggleInputFocus","onBlur","dir","aria-autocomplete","autoComplete","autoCapitalize","autoCorrect","onChange","handleInputChange","clearButtonLabel","onClear","trackViewBlockedContactsLink","hasFetchedBlockedContacts","handleError","showOverpanel","showContactDetailsOverpanel","inviteFriendsUrl","linksURL","US","MGM","inviteFriendsLink","MGM_TRAFFIC_SOURCES","CONTACTS","renderSearchBar","NetworkIdentityEntry","renderContacts","renderSpinner","trackUnilateralRecipientChoiceCancel","trackCancelBtn","renderOverpanelContent","BlockedContactsOverpanel","ContactBlockedOverpanel","ContactUnblockedOverpanel","isMobile","hasMgmSideBarEntryPointTreatment","hasMgmSideBarEntryPointTreatment2","handleOpenBlockedContacts","MGMContactsEntry","CONTACT","componentWillUnmount","listNeedsRefresh","componentWillReceiveProps","hasUpdatedContacts","current","filterAllContacts","_differenceBy","recipient","overpanelType","moneyPageOverPanel","contactDetails","paymentTypeChoice","receiverFee","unilateralRecipientChoice","blockContact"],"mappings":"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","file":"contact-list.esm.js","sourcesContent":["var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\nvar upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n});\n\nmodule.exports = upperCase;\n","var arrayReduce = require('./_arrayReduce'),\n deburr = require('./deburr'),\n words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nmodule.exports = createCompounder;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","var deburrLetter = require('./_deburrLetter'),\n toString = require('./toString');\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = basePropertyOf;\n","var asciiWords = require('./_asciiWords'),\n hasUnicodeWord = require('./_hasUnicodeWord'),\n toString = require('./toString'),\n unicodeWords = require('./_unicodeWords');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nmodule.exports = words;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nmodule.exports = asciiWords;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\nmodule.exports = hasUnicodeWord;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\nmodule.exports = unicodeWords;\n","module.exports = \"RefreshCreated with Sketch.\"","module.exports = \"Gift IconCreated with Sketch.\"","function getPopupOptionsString(popupWidth, popupHeight) {\n var left = (document.body.clientWidth - popupWidth) * 0.5;\n\tvar top = (document.body.clientHeight - popupHeight) * 0.5;\n return 'width=' + popupWidth + ',height=' + popupHeight + ',top=' + top + ',left=' + left;\n};\n\nfunction encodeString(string) {\n return window.encodeURIComponent(string);\n};\n\nfunction isiOSDevice() {\n return /iPad|iPhone|iPod/.test(window.navigator.userAgent) && !window.MSStream;\n}\n\nfunction isMobileDevice() {\n return /iPad|iPhone|iPod|Android/.test(window.navigator.userAgent) && !window.MSStream;\n}\n\n/**\n * Opens up a Facebook share popup with a URL.\n * @param url String - The URL to share by Facebook.\n * @param popupWidth - Integer The width of the share popup that will be opened.\n * @param popupHeight - Integer The height of the share popup that will be opened.\n */\nmodule.exports.shareURLByFacebook = function(url, popupWidth, popHeight) {\n var sharerURL = 'https://www.facebook.com/sharer/sharer.php?u=' + encodeString(url);\n window.open(sharerURL, 'facebook', getPopupOptionsString(popupWidth, popHeight));\n};\n\n/**\n * Opens up a Google Plus share popup with a URL.\n * @param url String - The URL to share by Facebook.\n * @param popupWidth - Integer The width of the share popup that will be opened.\n * @param popupHeight - Integer The height of the share popup that will be opened.\n * @param languageCode String - the language in which to display the dialog box (e.g. 'en', 'de', etc.)\n */\nmodule.exports.shareURLByGooglePlus = function(url, popupWidth, popHeight, languageCode) {\n var sharerURL = 'https://plus.google.com/share?url=' + encodeString(url) + '&hl=' + languageCode;\n window.open(sharerURL, 'google', getPopupOptionsString(popupWidth, popHeight));\n};\n\n\n\n/**\n * Opens up a Twitter share popup with text.\n * @param text String - The text to share by Twitter.\n * @param popupWidth Integer - The width of the share popup that will be opened.\n * @param popupHeight Integer - The height of the share popup that will be opened.\n */\nmodule.exports.shareByTwitter = function(text, popupWidth, popHeight) {\n var sharerUrl = 'https://twitter.com/intent/tweet?text=' + encodeString(text);\n window.open(sharerUrl, 'twitter', getPopupOptionsString(popupWidth, popHeight));\n};\n\n/**\n * Opens up an email client to send an email with a subject and body.\n * @param emailSubject String - The email's subject.\n * @param text String - The email's body.\n */\nmodule.exports.shareByEmail = function(emailSubject, text) {\n window.location.href = 'mailto:?to=&subject=' + encodeString(emailSubject) + '&body=' + encodeString(text);\n};\n\n/**\n * Opens up an SMS client to send a message with text.\n * Works only on a mobile device.\n * @param text String - The text to share by SMS.\n */\nmodule.exports.shareBySMS = function(text) {\n // SMS URL scheme is different for iOS, hence the condition.\n if (isiOSDevice()) {\n window.location.href = 'sms:&body=' + encodeString(text);\n } else {\n window.location.href = 'sms:?body=' + encodeString(text);\n }\n};\n\n/**\n * Opens up a WhatsApp client (if installed) to send a message with text.\n * Works only on a mobile device.\n * @param text String - The text to share by WhatsApp.\n * @param nativeApp [boolean] - Whether to launch the native app or use the web experience.\n * Defaults to true on mobile, false otherwise.\n */\nmodule.exports.shareByWhatsApp = function(text, nativeApp) {\n if (nativeApp == null) {\n nativeApp = isMobileDevice()\n }\n if (nativeApp) {\n window.location.href = 'whatsapp://send?text=' + encodeString(text);\n } else {\n window.open('https://web.whatsapp.com/send?text=' + text);\n }\n};\n\n/**\n * Opens up a Messenger client (if installed) to send a link.\n * @param url String - The URL to share by Messenger.\n * @param appId Number - App ID required by Facebook.\n * @param nativeApp [boolean] - Whether to launch the native app or use the web experience.\n * Defaults to true if on mobile, false otherwise.\n */\nmodule.exports.shareURLByMessenger = function(url, appId, redirectUri, nativeApp) {\n if (nativeApp == null) {\n nativeApp = isMobileDevice()\n }\n if (nativeApp) {\n window.location.href = 'fb-messenger://share?link=' + encodeURIComponent(url) + '&app_id=' + encodeURIComponent(appId);\n } else {\n window.open('http://www.facebook.com/dialog/send?app_id=' + appId + '&link=' +\n encodeURIComponent(url) + '&redirect_uri=' + encodeURIComponent(redirectUri));\n }\n};\n","\"use strict\";\n\nvar _require = require('./Component'),\n CopyToClipboard = _require.CopyToClipboard;\n\nCopyToClipboard.CopyToClipboard = CopyToClipboard;\nmodule.exports = CopyToClipboard;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CopyToClipboard = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _copyToClipboard = _interopRequireDefault(require(\"copy-to-clipboard\"));\n\nvar _excluded = [\"text\", \"onCopy\", \"options\", \"children\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar CopyToClipboard = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(CopyToClipboard, _React$PureComponent);\n\n var _super = _createSuper(CopyToClipboard);\n\n function CopyToClipboard() {\n var _this;\n\n _classCallCheck(this, CopyToClipboard);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n var _this$props = _this.props,\n text = _this$props.text,\n onCopy = _this$props.onCopy,\n children = _this$props.children,\n options = _this$props.options;\n\n var elem = _react[\"default\"].Children.only(children);\n\n var result = (0, _copyToClipboard[\"default\"])(text, options);\n\n if (onCopy) {\n onCopy(text, result);\n } // Bypass onClick if it was present\n\n\n if (elem && elem.props && typeof elem.props.onClick === 'function') {\n elem.props.onClick(event);\n }\n });\n\n return _this;\n }\n\n _createClass(CopyToClipboard, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n _text = _this$props2.text,\n _onCopy = _this$props2.onCopy,\n _options = _this$props2.options,\n children = _this$props2.children,\n props = _objectWithoutProperties(_this$props2, _excluded);\n\n var elem = _react[\"default\"].Children.only(children);\n\n return /*#__PURE__*/_react[\"default\"].cloneElement(elem, _objectSpread(_objectSpread({}, props), {}, {\n onClick: this.onClick\n }));\n }\n }]);\n\n return CopyToClipboard;\n}(_react[\"default\"].PureComponent);\n\nexports.CopyToClipboard = CopyToClipboard;\n\n_defineProperty(CopyToClipboard, \"defaultProps\", {\n onCopy: undefined,\n options: undefined\n});","// @flow\n\nimport React, { Component } from 'react'\nimport glamorous from 'glamorous'\nimport content from 'pp-react-l10n'\nimport { Button } from '@paypalcorp/pp-react'\n\nimport { connect } from 'transfer/utils/p2p-connect'\n\nimport { getInformalName } from 'transfer/utils/name-utils'\n\nimport { toggleBlockContactOverpanel } from 'transfer/actions/overpanels'\nimport { updateContactBlock } from 'transfer/actions/Actions'\n\nimport {\n trackBlockContactImpression,\n trackBlockConfirmationClick,\n trackBlockCancelClick,\n} from 'transfer/utils/blockUnblockAnalytics'\n\nimport { tracking } from '../../../lib/analytics/mParticle'\nimport Events from '../../../lib/analytics/eventTags'\n\nconst i18n = content('transfer/blockContact')\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 HeaderText = glamorous.p({\n fontSize: '1.125rem',\n fontWeight: 'bold',\n})\nconst ParagraphText = glamorous.p({\n fontSize: '0.9375rem',\n})\n\nconst ButtonContainer = glamorous.div(({ marginTop = '2rem' }) => ({\n marginTop,\n display: 'block',\n}))\n\ntype Props = {\n dispatch: Function,\n handleClose: () => any,\n id?: string,\n alternateFullName?: string,\n firstName?: string,\n lastName?: string,\n country: string,\n}\n\nexport class BlockContact extends Component {\n constructor(props: Props) {\n super(props)\n tracking(Events.p2p_contact_block_prompt_screen_shown())\n trackBlockContactImpression()\n }\n\n handleBlock = () => {\n tracking(Events.p2p_contact_block_confirm_pressed())\n trackBlockConfirmationClick()\n\n this.props.dispatch(\n updateContactBlock({ id: this.props.id, isBlock: true })\n )\n\n this.props.handleClose()\n }\n\n handleCancel = () => {\n tracking(Events.p2p_contact_block_cancel_pressed())\n trackBlockCancelClick()\n\n this.props.dispatch(toggleBlockContactOverpanel({ show: false }))\n }\n\n render() {\n const { alternateFullName, firstName, lastName, country } = this.props\n\n const name =\n alternateFullName ||\n getInformalName({ givenName: firstName, surname: lastName, country })\n\n let headerContent\n let paragraphContent\n if (name) {\n headerContent = i18n('block.header.name', { name })\n paragraphContent = i18n('block.paragraph.name', { name })\n } else {\n headerContent = i18n('block.header.generic')\n paragraphContent = i18n('block.paragraph.generic')\n }\n\n return (\n \n \n {headerContent}\n {paragraphContent}\n\n \n {i18n('block.button')}\n \n \n \n {i18n('block.cancel')}\n \n \n \n \n )\n }\n}\n\nexport default connect(({ server }) => ({\n country: server.country,\n}))(BlockContact)\n","// @flow\n\nimport React from 'react'\nimport content from 'pp-react-l10n'\n\nimport { connect } from 'transfer/utils/p2p-connect'\n\nimport Overpanel from 'react-components/overpanel'\nimport BlockedContacts from './blockedContacts'\nimport { toggleBlockedContactsOverpanel } from 'transfer/actions/overpanels'\n\nconst i18n = content('transfer/blockContact')\n\ntype Props = {\n handleClose: () => any,\n show: boolean,\n}\n\nfunction BlockedContactsOverpanel(props: Props) {\n const { handleClose, show } = props\n\n return (\n \n \n \n )\n}\n\nexport default connect(\n ({ overpanels }) => ({\n show: overpanels.blockedContacts,\n }),\n (dispatch, ownProps) => ({\n handleClose: () => {\n dispatch(toggleBlockedContactsOverpanel({ show: false }))\n },\n })\n)(BlockedContactsOverpanel)\n","// @flow\n\nimport React, { useEffect } from 'react'\nimport content from 'pp-react-l10n'\nimport { tracking } from '../../../lib/analytics/mParticle'\nimport Events from '../../../lib/analytics/eventTags'\nimport { trackBlockContactSuccessImpression } from 'transfer/utils/blockUnblockAnalytics'\nimport { connect } from 'transfer/utils/p2p-connect'\nimport { toggleContactBlockedOverpanel } from 'transfer/actions/overpanels'\nimport Overpanel from 'react-components/overpanel'\nimport ContactBlockedOrUnblocked from '../contact-blocked-or-unblocked/contactBlockedOrUnblocked'\n\nconst i18n = content('transfer/blockContact')\n\ntype Props = {\n dispatch: Function,\n handleClose: () => any,\n show: boolean,\n}\n\nfunction ContactBlockedOverpanel(props: Props) {\n useEffect(() => {\n tracking(Events.p2p_contact_block_confirmation_screen_shown())\n trackBlockContactSuccessImpression()\n }, [])\n\n const { show, handleClose } = props\n\n return (\n \n \n \n )\n}\n\nexport default connect(\n ({ overpanels }) => ({\n show: overpanels.contactBlocked,\n }),\n (dispatch, ownProps) => ({\n handleClose: () => {\n dispatch(toggleContactBlockedOverpanel({ show: false }))\n },\n })\n)(ContactBlockedOverpanel)\n","/**\n * React Custom Checkbox Component\n *\n * You can apply your own custom icon defined by a svg.\n *\n * 1. Get a svg from the designer that shows the on and off state.\n * 2. Make a new file shape-name-off.svg see the resource/svg file for the star example\n * 3. Import into the resource/index.js file and added to the svgMap\n * 4. When you use the component add the prop checkboxIcon with your shape name to invoke it.\n *\n */\n\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport glamorous from 'glamorous'\nimport _ from 'lodash'\n\nimport {\n PreferredIcon,\n PreferredSelectedIcon,\n PAYPAL_THEME,\n} from '@paypalcorp/pp-react'\n\nconst { sysColorFeaturedMain, sysColorBackgroundAlt } = PAYPAL_THEME\n\nconst ComponentContainer = glamorous.div({\n display: 'inline-flex', // NOSONAR\n position: 'relative',\n backgroundColor: 'transparent',\n alignItems: 'center',\n})\n\nconst CheckboxInput = glamorous.input({\n cursor: 'pointer',\n width: '100%',\n height: '100%',\n position: 'absolute',\n zIndex: 1,\n opacity: 0,\n\n '&:focus + label .icon:before': {\n outline: '5px auto -webkit-focus-ring-color',\n outlineOffset: '-2px',\n },\n})\n\nconst CheckboxLabel = glamorous.label({\n cursor: 'pointer',\n display: 'inline-flex',\n margin: 'auto',\n\n ':hover + .icon.icon-checkmark-small:before': {\n border: 'none',\n },\n\n '.icon:before': {\n border: '1px solid #009cde',\n boxShadow: 'none',\n },\n})\n\nconst LabelTextContainer = glamorous.span({\n display: 'inline-flex',\n marginLeft: 8,\n textAlign: 'left',\n position: 'relative',\n flexDirection: 'column',\n justifyContent: 'space-around',\n})\n\nconst LabelText = glamorous.span({\n display: 'inline-flex',\n flex: 'center',\n lineHeight: 1.38,\n fontWeight: 300,\n alignSelf: 'center',\n})\n\nconst LabelSecondaryText = glamorous.span({\n display: 'inline-flex',\n lineHeight: 1.2,\n})\n\nclass CustomCheckbox extends Component {\n static propTypes = {\n checkboxIcon: PropTypes.string,\n isEnabled: PropTypes.bool,\n isChecked: PropTypes.bool.isRequired,\n htmlFor: PropTypes.string.isRequired, // only really required within a form element\n handleChange: PropTypes.func.isRequired,\n labelText: PropTypes.string.isRequired,\n labelSecondaryText: PropTypes.string,\n className: PropTypes.string,\n cssOverride: PropTypes.shape({\n width: PropTypes.string,\n height: PropTypes.string,\n color: PropTypes.string,\n }),\n ariaLabel: PropTypes.string,\n }\n\n static defaultProps = {\n checkboxIcon: 'star',\n isEnabled: true,\n isChecked: false,\n htmlFor: 'default-id-for-reusable-checkbox',\n labelText: 'looks like you forgot some text for your checkbox',\n cssOverride: {\n width: '22px',\n height: '22px',\n color: '#00CF92',\n },\n }\n\n /*\n * We need to save the synthetic event so we're going to create a closure around the event and\n * calling persist to tell React to save it and not nullify it and reusing it.\n *\n * https://www.youtube.com/watch?v=KXao_qwl05k\n */\n debounceEvent(...args) {\n this.debouncedEvent = _.debounce(...args)\n return e => {\n e.persist() // persist the synthetic event or else it gets\n e.stopPropagation() // if the custom checkbox lives within a clickable element\n return this.debouncedEvent(e)\n }\n }\n\n /**\n * Keeping the 'checked state' with this.state inside this component would not allow us to reuse this\n * component, so by passing the 'checked state' as a prop we can decouple data/knowledge making this\n * component agnostic to data. So we expose this handler to change the props from the parent component.\n */\n handleChange = e => {\n this.props.handleChange(e)\n }\n\n renderLabelText = () => {\n const hasSecondaryText = Boolean(this.props.labelSecondaryText)\n\n // alignment for when we have some secondary text\n const containerPosition = { top: 'unset' }\n\n return (\n \n {this.props.labelText}\n {hasSecondaryText ? (\n \n {this.props.labelSecondaryText}\n \n ) : null}\n \n )\n }\n\n render() {\n const { isChecked } = this.props\n\n const PreferredIconV2 = () =>\n isChecked ? (\n \n ) : (\n \n )\n\n const containerCss =\n this.props.labelText !== '' ? {} : { height: '50px', width: '40px' }\n\n return this.props.isEnabled ? (\n \n \n \n \n {this.renderLabelText()}\n \n \n ) : (\n this.renderLabelText()\n )\n }\n}\n\nexport default CustomCheckbox\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport glamorous, { Div } from 'glamorous'\nimport { BodyText, CaptionText } from '@paypalcorp/pp-react'\nimport Media from 'react-media'\nimport {\n SIZE_SMALL,\n smallAndSmaller,\n extraSmallAndSmaller,\n} from 'lib/styles/media-queries'\nimport { getDisplayPhone } from '../../utils/phoneUtils'\nimport StarCheckbox from '../../../react-components/custom-checkbox'\nimport { updateFavorite } from '../../actions/Actions'\nimport { trackLink } from '../../../lib/analytics/fpti'\nimport ContactAvatar from 'transfer/components/contactAvatar'\nimport { getAvatarColor } from 'lib/avatar'\n\nimport content from 'pp-react-l10n'\nconst i18n = content('transfer/contacts')\n\nconst ContactListItemWrapper = glamorous.div({\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n padding: '21px 21px',\n [smallAndSmaller]: {\n margin: '0px 40px',\n padding: 0,\n height: '72px',\n },\n})\n\nconst NameAndDetailsV2 = glamorous.div({\n overflow: 'hidden',\n marginLeft: '20px',\n marginRight: '55px',\n [extraSmallAndSmaller]: {\n marginLeft: '11px',\n marginRight: '30px',\n },\n})\n\nconst Content = glamorous.div({\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n})\n\nclass ContactListItem extends React.Component {\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n firstName: PropTypes.string,\n lastName: PropTypes.string,\n alternateFullName: PropTypes.string,\n fullName: PropTypes.string,\n email: PropTypes.string,\n phones: PropTypes.array,\n thumbnailUrl: PropTypes.string,\n onClick: PropTypes.func,\n networkIdDisplayName: PropTypes.string,\n isFavorite: PropTypes.bool,\n id: PropTypes.string,\n }\n\n state = {\n isFavorited: this.props.isFavorite,\n }\n\n componentWillReceiveProps = nextProps => {\n const current = this.props || {}\n const next = nextProps || {}\n\n if (current.isFavorite !== next.isFavorite) {\n this.setState({\n isFavorited: next.isFavorite,\n })\n }\n }\n\n /*\n * The handleToggleFavorite function is updating the state of the component so we can see an\n * immediate change once the user toggles the favorite icon. This toggle is debounced and\n * propagation is stopped in the custom checkbox component.\n */\n handleToggleFavorite = e => {\n const { id } = this.props\n const checked = !e.target.checked\n this.setState({\n isFavorited: checked,\n })\n\n const pageGroup = 'main:p2p:tab-contacts'\n const pageName = 'main:p2p:tab-contacts:node::'\n const linkName = checked ? 'checkedFavorite' : 'uncheckedFavorite'\n trackLink(linkName, pageGroup, pageName, 'link')\n this.props.dispatch(updateFavorite(id, checked))\n }\n\n render = () => {\n const {\n firstName,\n lastName,\n alternateFullName,\n fullName,\n email,\n phones,\n thumbnailUrl,\n onClick,\n networkIdDisplayName,\n id,\n } = this.props\n\n const firstInitial = (firstName && firstName.slice(0, 1)) || ''\n const lastInitial = (lastName && lastName.slice(0, 1)) || ''\n const name = alternateFullName || fullName\n const phoneNumber = getDisplayPhone({ phones })\n const details = networkIdDisplayName || email || phoneNumber\n\n return (\n \n \n {matches => (\n \n \n \n )}\n \n \n {name}\n {details}\n \n \n {\n this.handleToggleFavorite(e)\n }}\n htmlFor={`makeFavorite-${id}`}\n labelText=\"\"\n labelSecondaryText=\"\"\n ariaLabel={i18n('contact.checkbox.item.ariaLabel', { name })}\n tabIndex=\"0\"\n />\n \n \n )\n }\n}\n\nexport default ContactListItem\n","// @flow\nimport React from 'react'\nimport glamorous, { Div } from 'glamorous'\nimport { formatDate } from '../../utils/date-utils'\nimport _ from 'lodash'\nimport { colors } from 'lib/styles/variables'\nimport { smallAndSmaller } from 'lib/styles/media-queries'\nimport glamorousIcon from 'lib/glamorous-icon'\nimport RepeatPaymentSVG from './svg/repeat-payment.svg'\nimport GiftSVG from './svg/gift.svg'\n\nimport content from 'pp-react-l10n'\nconst i18n = content('transfer/contacts')\n\nconst RepeatPayment = glamorous.div({\n marginLeft: 20,\n display: 'inline-block',\n fontSize: '0.8125rem',\n color: '#0070ba',\n lineHeight: '36px',\n})\n\nconst actionsMapping = {\n PAYMENT_ACCEPT: 'payment_accept_deny',\n PAYMENT_DENY: 'payment_accept_deny',\n SHIPPING_SHIP: 'shipping_ship',\n ADD_TRACKING: 'add_tracking',\n PAY_NOW: 'pay_now',\n INVOICE_PAY: 'invoice_pay',\n}\n\nconst getStatusStyle = status => {\n switch (status) {\n case 'CANCELED':\n return {\n color: 'black',\n borderColor: 'black',\n }\n case 'PAID':\n case 'REVERSED':\n case 'REFUNDED':\n return {\n color: '#018065',\n borderColor: '#018065',\n }\n case 'HELD':\n case 'PENDING':\n case 'UNCLAIMED':\n return {\n color: '#d64003',\n borderColor: '#d64003',\n }\n case 'NEEDS_ATTENTION':\n return {\n color: '#005EA6',\n borderColor: '#005EA6',\n }\n default:\n return { display: 'none' }\n }\n}\n\nconst StatusTag = glamorous.div(\n {\n marginRight: 30,\n marginLeft: -140,\n height: '0.8125rem',\n lineHeight: '0.625rem',\n padding: '0 0.1875rem 0.0625rem 0.1875rem',\n borderRadius: '3px',\n fontSize: '0.625rem',\n fontWeight: '500',\n textTransform: 'uppercase',\n whiteSpace: 'nowrap',\n border: '1px solid #2c2e2f',\n [smallAndSmaller]: {\n marginRight: '27px',\n },\n },\n ({ status }) => getStatusStyle(status)\n)\n\nconst RepeatIcon = glamorousIcon({\n position: 'absolute',\n top: '8px',\n height: 15,\n width: 15,\n '& svg': { height: 15, width: 15 },\n [smallAndSmaller]: {\n top: '11px',\n },\n})\n\nconst GiftIcon = glamorousIcon({\n position: 'absolute',\n left: -5,\n top: -4,\n height: 25,\n width: 25,\n '& svg': { height: 25, width: 25 },\n})\n\nconst DateContainer = glamorous.div({\n display: 'flex',\n fontWeight: '500',\n flexDirection: 'column',\n minWidth: '97px',\n paddingTop: '22px',\n paddingLeft: '22px',\n [smallAndSmaller]: {\n minWidth: '85px',\n paddingLeft: '37px',\n },\n})\n\nconst contentMap = {\n CREDIT: i18n('transactions.receivedMoney'),\n DEBIT: i18n('transactions.sentMoney'),\n REFUND: i18n('transactions.refund'),\n}\n\nconst giftContentMap = {\n CREDIT: i18n('transactions.receivedGift'),\n DEBIT: i18n('transactions.sentGift'),\n}\n\nconst statusContentMap = {\n CANCELED: i18n('status.CANCELED'),\n PAID: i18n('status.PAID'),\n HELD: i18n('status.HELD'),\n PENDING: i18n('status.PENDING'),\n REFUNDED: i18n('status.REFUNDED'),\n REVERSED: i18n('status.REFUNDED'),\n UNCLAIMED: i18n('status.UNCLAIMED'),\n NEEDS_ATTENTION: i18n('transactions.needsAttention'),\n}\n\nconst renderDate = (date, timeZone) => {\n const month = _.upperCase(formatDate(date, { timeZone, style: 'MMM' }))\n const day = formatDate(date, { timeZone, style: 'd' })\n return (\n \n \n {month}\n \n \n {day}\n \n \n )\n}\n\nconst shouldShowRepeat = (\n activityType,\n status,\n creditOrDebit,\n isUnilateral,\n isSellerTypeContact\n) => {\n return (\n !isUnilateral &&\n !isSellerTypeContact &&\n activityType === 'PAYMENT' &&\n status === 'COMPLETED' &&\n creditOrDebit === 'DEBIT'\n )\n}\n\ntype TrnsactionListItemProps = {\n transaction: Object,\n timeZone: string,\n handleRepeatPayment: ({}) => {},\n trackContactDetailsLink: string => {},\n isUnilateral: ?boolean,\n isSellerTypeContact: ?boolean,\n}\n\nconst TransactionListItem = ({\n transaction,\n timeZone,\n handleRepeatPayment,\n trackContactDetailsLink,\n isUnilateral,\n isSellerTypeContact,\n}: TrnsactionListItemProps) => {\n const {\n date,\n note,\n displayAmount,\n creditOrDebit,\n id,\n isPurchase,\n isGift,\n status,\n grossAmount,\n activityType,\n subtype,\n actions,\n } = transaction\n const isDebit = creditOrDebit === 'DEBIT'\n const isRefund = subtype === 'REFUND'\n let headerContent = contentMap[creditOrDebit]\n if (isRefund) {\n headerContent = contentMap.REFUND\n } else if (isGift) {\n headerContent = (\n \n \n {giftContentMap[creditOrDebit]}\n \n )\n }\n const amountColor = isDebit ? colors.vxDarkGray : colors.vxGreen\n const amount = isDebit\n ? i18n('transactions.negativeAmount', { amount: displayAmount })\n : displayAmount\n const needsAttention = actions.some(action => action in actionsMapping)\n const displayedStatus = needsAttention ? 'NEEDS_ATTENTION' : status\n return (\n {\n trackContactDetailsLink('linkTrasactionDetail')\n window.location.href = `/myaccount/transaction/details/${id}`\n }}\n >\n {renderDate(new Date(date), timeZone)}\n {/* 0 width here is to make IE behave, it gets expanded anyway */}\n \n \n {headerContent}\n \n {amount}\n \n \n \n \n \n {note && i18n('transactions.note', { note })}\n \n {shouldShowRepeat(\n activityType,\n displayedStatus,\n creditOrDebit,\n isUnilateral,\n isSellerTypeContact\n ) && (\n \n \n \n {i18n('transactions.repeat')}\n \n \n )}\n \n \n {statusContentMap[displayedStatus]}\n \n \n \n \n )\n}\n\nexport default TransactionListItem\n","/**\n * p2p_block_unblock\n * https://www.msmaster.qa.paypal.com/elmo/experiment/104571\n */\n\nimport * as pxp from 'lib/pxp'\n\nexport default function isBlockUnblockTreatment() {\n return pxp.isTreatment('Trmt_p2p_contact_block_unblock')\n}\n","import React from 'react'\nimport {\n HeadingText,\n BodyText,\n CaptionText,\n Button,\n} from '@paypalcorp/pp-react'\nimport PropTypes from 'prop-types'\nimport DocumentTitle from 'react-document-title'\nimport { connect } from 'transfer/utils/p2p-connect'\nimport {\n deleteContact,\n selectContact,\n submittingRecipient,\n advanceToRequestReview,\n changeAmount,\n changeCurrency,\n changeIsPurchase,\n resetMultiRecipients,\n updateFavorite,\n} from '../../actions/Actions'\nimport { toggleBlockContactOverpanel } from 'transfer/actions/overpanels'\nimport { fetchFundingOptions } from '../../actions/send'\nimport glamorous, { Div } from 'glamorous'\nimport {\n fetchRecipientDetails,\n fetchUnilateralRecipientChoices,\n fetchContactActivities,\n funnelStarted,\n contactEngaged,\n} from '../../actions/unified-actions'\nimport { routeTo } from '../../utils/routeHelper'\nimport { getDisplayPhone } from '../../utils/phoneUtils'\nimport TransactionListItem from './transaction-list-item'\nimport { trackImpression, trackLink } from '../../../lib/analytics/fpti'\nimport { trackBlockContactClick } from 'transfer/utils/blockUnblockAnalytics'\nimport { smallAndSmaller } from '../../../lib/styles/media-queries'\nimport CustomCheckbox from '../../../react-components/custom-checkbox'\nimport isBlockUnblockTreatment from 'experiments/blockUnblock'\nimport ContactAvatar from 'transfer/components/contactAvatar'\nimport { getAvatarColor } from 'lib/avatar'\nimport ButtonLink from 'react-components/buttonLink'\nimport Events from 'lib/analytics/eventTags'\nimport { FUNNEL } from '../../../../../lib/constants'\n\nimport content from 'pp-react-l10n'\nconst i18n = content('transfer/contacts')\n\nconst NameOrDetails = glamorous.div({\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n})\n\nconst Details = glamorous.div({\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n})\n\nconst TransactionList = glamorous.div({\n marginTop: '17px',\n textAlign: 'left',\n})\n\nconst SendButtonContainer = glamorous.div(({ marginRight }) => ({\n marginRight,\n}))\n\nconst ActivityHeadingContainer = glamorous.div({\n textAlign: 'left',\n marginTop: '3rem',\n [smallAndSmaller]: {\n marginLeft: '2rem',\n },\n})\n\nconst LinkContainer = glamorous.div({\n marginTop: '2.5rem',\n})\n\nconst flfr = 'tab-contacts:activityDetail',\n pageName = `main:p2p:${flfr}:node::`,\n pageGroup = `main:p2p:${flfr}`\n\nconst trackContactDetailsLink = linkName =>\n trackLink(linkName, pageGroup, pageName, 'link')\n\nclass ContactDetails extends React.Component {\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n handleClose: PropTypes.func.isRequired,\n contact: PropTypes.shape({\n id: PropTypes.string,\n thumbnailUrl: PropTypes.string,\n firstName: PropTypes.string,\n lastName: PropTypes.string,\n fullName: PropTypes.string,\n email: PropTypes.string,\n alternateFullName: PropTypes.string,\n phones: PropTypes.array,\n isFavorite: PropTypes.bool,\n isUnilateral: PropTypes.bool,\n isSellerTypeContact: PropTypes.bool,\n }).isRequired,\n activityData: PropTypes.object.isRequired,\n timeZone: PropTypes.string.isRequired,\n }\n\n state = {\n isFavorited: this.props.contact.isFavorite,\n }\n\n url = null\n\n componentDidMount() {\n window.flfr = flfr\n trackImpression(pageGroup, pageName)\n this.props.dispatch(fetchContactActivities(this.props.contact.id))\n }\n\n sendContact = contact => {\n this.props.dispatch(\n fetchRecipientDetails({\n contact: contact,\n linkName: 'contactSend',\n enableAnalytics: false,\n })\n )\n }\n\n handleSend = () => {\n Events.updateCommonProps({\n sub_flow: 'send_money',\n })\n this.props.dispatch(funnelStarted({ funnel: FUNNEL.SEND }))\n this.props.dispatch(contactEngaged())\n trackContactDetailsLink('linkSend')\n this.props.dispatch(submittingRecipient({ selectedType: 'contactSend' }))\n\n const { contact } = this.props\n\n if (contact.isUnilateral) {\n this.props.dispatch(\n fetchUnilateralRecipientChoices({\n contact,\n onSingleRecipient: updatedContact => {\n this.sendContact(updatedContact)\n },\n })\n )\n } else {\n this.sendContact(contact)\n }\n }\n\n requestContact = contact => {\n this.props.dispatch(\n selectContact(contact, 'contactRequest', null, null, false)\n )\n this.props.dispatch(advanceToRequestReview(pageName, pageGroup, { flfr }))\n routeTo('/myaccount/transfer/request/preview')\n }\n\n handleRequest = () => {\n const { contact, dispatch } = this.props\n\n Events.updateCommonProps({\n sub_flow: 'request_money',\n })\n dispatch(funnelStarted({ funnel: FUNNEL.REQUEST }))\n dispatch(contactEngaged())\n\n this.props.dispatch(resetMultiRecipients())\n\n this.props.dispatch(submittingRecipient({ selectedType: 'contactRequest' }))\n\n if (contact.isUnilateral) {\n this.props.dispatch(\n fetchUnilateralRecipientChoices({\n contact,\n onSingleRecipient: updatedContact => {\n this.requestContact(updatedContact)\n },\n })\n )\n } else {\n this.requestContact(contact)\n }\n }\n\n handleDeleteContact = () => {\n trackContactDetailsLink('linkRemoveContact')\n this.props\n .dispatch(deleteContact(this.props.contact.id))\n .then(this.props.handleClose)\n .catch(() => {})\n }\n\n handleBlockContact = () => {\n this.props.dispatch(toggleBlockContactOverpanel({ show: true }))\n\n trackBlockContactClick()\n }\n\n handleSeeMore = () => {\n trackContactDetailsLink('linkMoreTransactions')\n // TODO: support phone numbers (when 8ball does)\n const email = this.props.contact.email\n window.location.href = `/myaccount/activity?q=${email}`\n }\n\n handleRepeatPayment = ({ amount, currency, isPurchase }) => e => {\n e.stopPropagation()\n\n const { dispatch } = this.props\n\n Events.updateCommonProps({\n sub_flow: 'send_money',\n })\n dispatch(funnelStarted({ funnel: FUNNEL.SEND }))\n dispatch(contactEngaged())\n trackContactDetailsLink('linkRepeatedPayment')\n const transactionType = isPurchase ? 'buy' : 'send'\n const { contact } = this.props\n dispatch(selectContact(contact, 'contactRepeatTransaction'))\n dispatch(changeCurrency(currency))\n dispatch(changeIsPurchase(isPurchase))\n dispatch(changeAmount(amount))\n dispatch(fetchFundingOptions())\n routeTo(`/myaccount/transfer/homepage/${transactionType}/preview`)\n }\n\n /*\n * The handleToggleFavorite function is updating the state of the component so we can see an\n * immediate change once the user toggles the favorite icon. This toggle is debounced and\n * propagation is stopped in the custom checkbox component.\n */\n handleToggleFavorite = e => {\n const { dispatch, contact } = this.props\n const isChecked = !e.target.checked // negating this because the debounced toggle within custom checkbox returns the current value\n this.setState({\n isFavorited: isChecked,\n })\n const linkName = isChecked ? 'checkedFavorite' : 'uncheckedFavorite'\n trackLink(linkName, pageGroup, pageName, 'link')\n dispatch(updateFavorite(contact.id, isChecked))\n }\n\n render() {\n const {\n contact: {\n id,\n thumbnailUrl,\n firstName,\n lastName,\n fullName,\n email,\n alternateFullName,\n recipientDisplayDetails,\n isUnilateral,\n isSellerTypeContact = false,\n } = {},\n activityData,\n } = this.props\n // phone format we use to display is different from\n // the format needed to search\n const phone = getDisplayPhone(this.props.contact)\n const activityDataKey = this.props.contact.id\n const contactActivityData = activityData[activityDataKey] || []\n const firstInitial = (firstName && firstName.slice(0, 1)) || ''\n const lastInitial = (lastName && lastName.slice(0, 1)) || ''\n const name = alternateFullName || fullName\n const details = recipientDisplayDetails || email || phone\n return (\n \n \n \n \n \n \n \n \n {name || details}\n \n {name && details && (\n \n {details}\n \n )}\n \n {\n this.handleToggleFavorite(e)\n }}\n htmlFor={id}\n labelText={\n this.state.isFavorited ? (\n {i18n('contacts.favorite')}\n ) : (\n {i18n('contacts.notFavorite')}\n )\n }\n labelSecondaryText=\"\"\n cssOverride={{\n height: '22px',\n width: '22px',\n }}\n />\n \n \n \n\n \n \n \n {i18n(isSellerTypeContact ? 'contacts.pay' : 'contacts.send')}\n \n \n {!isSellerTypeContact && (\n \n {i18n('contacts.request')}\n \n )}\n \n {Boolean(contactActivityData.length) && (\n \n \n \n {i18n('transactions.recentActivity')}\n \n \n\n \n {contactActivityData.map((transaction, index) => (\n \n ))}\n \n {email && (\n \n \n {i18n('transactions.seeMore')}\n \n \n )}\n \n )}\n \n \n {i18n('contacts.remove')}\n \n \n {isBlockUnblockTreatment() && (\n \n \n {i18n('contacts.block')}\n \n \n )}\n \n \n )\n }\n}\n\nexport default connect(({ contacts, user }) => ({\n activityData: contacts.activityData,\n timeZone: user.timeZone,\n}))(ContactDetails)\n","// Cache implementation based on Erik Rasmussen's `lru-memoize`:\n// https://github.com/erikras/lru-memoize\nvar NOT_FOUND = 'NOT_FOUND';\n\nfunction createSingletonCache(equals) {\n var entry;\n return {\n get: function get(key) {\n if (entry && equals(entry.key, key)) {\n return entry.value;\n }\n\n return NOT_FOUND;\n },\n put: function put(key, value) {\n entry = {\n key: key,\n value: value\n };\n },\n getEntries: function getEntries() {\n return entry ? [entry] : [];\n },\n clear: function clear() {\n entry = undefined;\n }\n };\n}\n\nfunction createLruCache(maxSize, equals) {\n var entries = [];\n\n function get(key) {\n var cacheIndex = entries.findIndex(function (entry) {\n return equals(key, entry.key);\n }); // We found a cached entry\n\n if (cacheIndex > -1) {\n var entry = entries[cacheIndex]; // Cached entry not at top of cache, move it to the top\n\n if (cacheIndex > 0) {\n entries.splice(cacheIndex, 1);\n entries.unshift(entry);\n }\n\n return entry.value;\n } // No entry found in cache, return sentinel\n\n\n return NOT_FOUND;\n }\n\n function put(key, value) {\n if (get(key) === NOT_FOUND) {\n // TODO Is unshift slow?\n entries.unshift({\n key: key,\n value: value\n });\n\n if (entries.length > maxSize) {\n entries.pop();\n }\n }\n }\n\n function getEntries() {\n return entries;\n }\n\n function clear() {\n entries = [];\n }\n\n return {\n get: get,\n put: put,\n getEntries: getEntries,\n clear: clear\n };\n}\n\nexport var defaultEqualityCheck = function defaultEqualityCheck(a, b) {\n return a === b;\n};\nexport function createCacheKeyComparator(equalityCheck) {\n return function areArgumentsShallowlyEqual(prev, next) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n } // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n\n\n var length = prev.length;\n\n for (var i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n\n return true;\n };\n}\n// defaultMemoize now supports a configurable cache size with LRU behavior,\n// and optional comparison of the result value with existing values\nexport function defaultMemoize(func, equalityCheckOrOptions) {\n var providedOptions = typeof equalityCheckOrOptions === 'object' ? equalityCheckOrOptions : {\n equalityCheck: equalityCheckOrOptions\n };\n var _providedOptions$equa = providedOptions.equalityCheck,\n equalityCheck = _providedOptions$equa === void 0 ? defaultEqualityCheck : _providedOptions$equa,\n _providedOptions$maxS = providedOptions.maxSize,\n maxSize = _providedOptions$maxS === void 0 ? 1 : _providedOptions$maxS,\n resultEqualityCheck = providedOptions.resultEqualityCheck;\n var comparator = createCacheKeyComparator(equalityCheck);\n var cache = maxSize === 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator); // we reference arguments instead of spreading them for performance reasons\n\n function memoized() {\n var value = cache.get(arguments);\n\n if (value === NOT_FOUND) {\n // @ts-ignore\n value = func.apply(null, arguments);\n\n if (resultEqualityCheck) {\n var entries = cache.getEntries();\n var matchingEntry = entries.find(function (entry) {\n return resultEqualityCheck(entry.value, value);\n });\n\n if (matchingEntry) {\n value = matchingEntry.value;\n }\n }\n\n cache.put(arguments, value);\n }\n\n return value;\n }\n\n memoized.clearCache = function () {\n return cache.clear();\n };\n\n return memoized;\n}","import { defaultMemoize, defaultEqualityCheck } from './defaultMemoize';\nexport { defaultMemoize, defaultEqualityCheck };\n\nfunction getDependencies(funcs) {\n var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n if (!dependencies.every(function (dep) {\n return typeof dep === 'function';\n })) {\n var dependencyTypes = dependencies.map(function (dep) {\n return typeof dep === 'function' ? \"function \" + (dep.name || 'unnamed') + \"()\" : typeof dep;\n }).join(', ');\n throw new Error(\"createSelector expects all input-selectors to be functions, but received the following types: [\" + dependencyTypes + \"]\");\n }\n\n return dependencies;\n}\n\nexport function createSelectorCreator(memoize) {\n for (var _len = arguments.length, memoizeOptionsFromArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n memoizeOptionsFromArgs[_key - 1] = arguments[_key];\n }\n\n var createSelector = function createSelector() {\n for (var _len2 = arguments.length, funcs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n funcs[_key2] = arguments[_key2];\n }\n\n var _recomputations = 0;\n\n var _lastResult; // Due to the intricacies of rest params, we can't do an optional arg after `...funcs`.\n // So, start by declaring the default value here.\n // (And yes, the words 'memoize' and 'options' appear too many times in this next sequence.)\n\n\n var directlyPassedOptions = {\n memoizeOptions: undefined\n }; // Normally, the result func or \"output selector\" is the last arg\n\n var resultFunc = funcs.pop(); // If the result func is actually an _object_, assume it's our options object\n\n if (typeof resultFunc === 'object') {\n directlyPassedOptions = resultFunc; // and pop the real result func off\n\n resultFunc = funcs.pop();\n }\n\n if (typeof resultFunc !== 'function') {\n throw new Error(\"createSelector expects an output function after the inputs, but received: [\" + typeof resultFunc + \"]\");\n } // Determine which set of options we're using. Prefer options passed directly,\n // but fall back to options given to createSelectorCreator.\n\n\n var _directlyPassedOption = directlyPassedOptions,\n _directlyPassedOption2 = _directlyPassedOption.memoizeOptions,\n memoizeOptions = _directlyPassedOption2 === void 0 ? memoizeOptionsFromArgs : _directlyPassedOption2; // Simplifying assumption: it's unlikely that the first options arg of the provided memoizer\n // is an array. In most libs I've looked at, it's an equality function or options object.\n // Based on that, if `memoizeOptions` _is_ an array, we assume it's a full\n // user-provided array of options. Otherwise, it must be just the _first_ arg, and so\n // we wrap it in an array so we can apply it.\n\n var finalMemoizeOptions = Array.isArray(memoizeOptions) ? memoizeOptions : [memoizeOptions];\n var dependencies = getDependencies(funcs);\n var memoizedResultFunc = memoize.apply(void 0, [function recomputationWrapper() {\n _recomputations++; // apply arguments instead of spreading for performance.\n\n return resultFunc.apply(null, arguments);\n }].concat(finalMemoizeOptions)); // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n\n var selector = memoize(function dependenciesChecker() {\n var params = [];\n var length = dependencies.length;\n\n for (var i = 0; i < length; i++) {\n // apply arguments instead of spreading and mutate a local list of params for performance.\n // @ts-ignore\n params.push(dependencies[i].apply(null, arguments));\n } // apply arguments instead of spreading for performance.\n\n\n _lastResult = memoizedResultFunc.apply(null, params);\n return _lastResult;\n });\n Object.assign(selector, {\n resultFunc: resultFunc,\n memoizedResultFunc: memoizedResultFunc,\n dependencies: dependencies,\n lastResult: function lastResult() {\n return _lastResult;\n },\n recomputations: function recomputations() {\n return _recomputations;\n },\n resetRecomputations: function resetRecomputations() {\n return _recomputations = 0;\n }\n });\n return selector;\n }; // @ts-ignore\n\n\n return createSelector;\n}\nexport var createSelector = /* #__PURE__ */createSelectorCreator(defaultMemoize);\n// Manual definition of state and output arguments\nexport var createStructuredSelector = function createStructuredSelector(selectors, selectorCreator) {\n if (selectorCreator === void 0) {\n selectorCreator = createSelector;\n }\n\n if (typeof selectors !== 'object') {\n throw new Error('createStructuredSelector expects first argument to be an object ' + (\"where each property is a selector, instead received a \" + typeof selectors));\n }\n\n var objectKeys = Object.keys(selectors);\n var resultSelector = selectorCreator( // @ts-ignore\n objectKeys.map(function (key) {\n return selectors[key];\n }), function () {\n for (var _len3 = arguments.length, values = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n values[_key3] = arguments[_key3];\n }\n\n return values.reduce(function (composition, value, index) {\n composition[objectKeys[index]] = value;\n return composition;\n }, {});\n });\n return resultSelector;\n};","// @flow\n\nimport styled from '@emotion/styled'\nimport { IconButton } from '@paypalcorp/pp-react'\n\nconst centeredFlexStyle = {\n width: '100%',\n display: 'flex',\n gap: '7px',\n alignItems: 'center',\n}\n\nexport const SharingButtonWrapper = styled.div({\n ...centeredFlexStyle,\n})\n\nexport const SharingSectionWrapper = styled.div({\n ...centeredFlexStyle,\n flexDirection: 'column',\n paddingBottom: '24px',\n paddingTop: '24px',\n})\n\nexport const ButtonContainer = styled.span({\n width: '75px',\n})\n\nexport const ProfileIconButton = styled(IconButton)({\n scale: '.95',\n})\n","// @flow\n\nimport React, { useState } from 'react'\nimport { connect } from 'transfer/utils/p2p-connect'\nimport content from 'pp-react-l10n'\nimport sharing from 'consumerweb-sharing'\nimport CopyToClipboard from 'react-copy-to-clipboard'\nimport {\n BodyText,\n ShareFacebookIcon,\n ShareMessengerIcon,\n ShareTwitterIcon,\n CopyToClipboardIcon,\n} from '@paypalcorp/pp-react'\nimport {\n ButtonContainer,\n SharingButtonWrapper,\n SharingSectionWrapper,\n ProfileIconButton,\n} from './share-with-friends.styles'\n\nconst i18n = content('transfer/page/funnel')\n\ntype Props = {\n slugInfo: Object,\n}\n\nconst ShareYourLink = (props: Props) => {\n const [copiedInfo, setCopied] = useState({ state: 'initial' })\n\n const handleFBClick = (e: SyntheticEvent) => {\n e.preventDefault()\n\n const {\n slugInfo: { profile: { slug: paypalmeSlugName = '' } = {} } = {},\n } = props\n /* sharing.shareURLByFacebook params: (url, popupWidth, popHeight)*/\n sharing.shareURLByFacebook(\n `https://paypal.me/${paypalmeSlugName}`,\n 575,\n 400\n )\n }\n\n const handleTwitterClick = (e: SyntheticEvent) => {\n e.preventDefault()\n\n const {\n slugInfo: { profile: { slug: paypalmeSlugName = '' } = {} } = {},\n } = props\n const twitterShareLink = `${i18n(\n 'ppmeSharing.twitter_share_text'\n )} https://paypal.me/${encodeURIComponent(paypalmeSlugName)}`\n /* sharing.shareByTwitter params: (url, popupWidth, popHeight)*/\n sharing.shareByTwitter(twitterShareLink, 575, 400)\n }\n\n const handleMessengerClick = (e: SyntheticEvent) => {\n e.preventDefault()\n const {\n slugInfo: { profile: { slug: paypalmeSlugName = '' } = {} } = {},\n } = props\n sharing.shareURLByMessenger(\n `https://paypal.me/${encodeURIComponent(paypalmeSlugName)}`,\n '1624118454533304',\n window.location.href\n )\n }\n\n const copyToClipboard = () => {\n setCopied({ state: 'success' })\n setTimeout(() => {\n setCopied({ state: 'initial' })\n }, 1000)\n }\n\n const {\n slugInfo: { profile: { slug: paypalmeSlugName = '' } = {} } = {},\n } = props\n\n return (\n \n {i18n('ppme.textDescriptionWithProfile')}\n \n \n {\n copyToClipboard()\n }}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default connect(({ server }) => ({\n slugInfo: server.ppMeProfile,\n}))(ShareYourLink)\n","// @flow\n\n/**\n * Get PayPal.me slug from network identity ID\n * @param {string} networkId - PayPal.me network identity id\n * @returns {string} network identity slug\n */\nexport function getPpmeSlug(networkId: string) {\n return `@${networkId}`\n}\n","/* This component renders an entry point for newtork identity in the contact\n * list tab on the home page. Consists of 4 components: new users, existing users,\n * new user mobile and existing user mobile. Mobile and non mobile view controlled\n * by media queries. Mobile view should be displayed under the search input\n */\n\nimport styled from '@emotion/styled'\nimport {\n smallAndSmaller,\n extraSmallAndSmaller,\n} from '../../lib/styles/media-queries'\nimport { Card, Button } from '@paypalcorp/pp-react'\n\nconst cardStyle = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '24px',\n textAlign: 'center',\n}\n\nconst cardInnerStyle = {\n ...cardStyle,\n width: '100%',\n marginBottom: 0,\n marginTop: 0,\n}\n\nconst profilePadding = {\n paddingLeft: '32px',\n paddingRight: '32px',\n}\n\nconst mobileTopMargin = {\n marginTop: '15px',\n}\n\nexport const ProfileCard = styled(Card)({\n ...cardStyle,\n paddingTop: '24px',\n paddingBottom: '24px',\n paddingLeft: 0,\n paddingRight: 0,\n width: '344px',\n [smallAndSmaller]: {\n display: 'none',\n },\n [extraSmallAndSmaller]: {\n display: 'none',\n },\n})\n\nexport const ProfileCardHeader = styled(Card.Header)(cardInnerStyle)\n\nexport const ProfileCardContent = styled(Card.Content)(cardInnerStyle)\n\nexport const NameWrapper = styled.div({\n ...profilePadding,\n whiteSpace: 'nowrap',\n})\n\nexport const ManageProfileButton = styled(Button)({\n ...profilePadding,\n height: '66px',\n})\n\nexport const NetworkIdentityWrapper = styled.div({\n margin: '0 auto',\n order: 1,\n display: 'flex',\n})\n\nexport const ItemWrapperMobile = styled.div({\n display: 'none',\n alignItems: 'center',\n padding: '21px 21px',\n flexGrow: 1,\n [smallAndSmaller]: {\n display: 'flex',\n },\n [extraSmallAndSmaller]: {\n ...mobileTopMargin,\n },\n})\n\nexport const ItemWrapper = styled.div({\n textAlign: 'center',\n padding: '15px 15px 25px 15px',\n height: 'auto',\n margin: '0 auto',\n display: 'inline-table',\n [smallAndSmaller]: {\n display: 'none',\n },\n [extraSmallAndSmaller]: {\n display: 'none',\n },\n})\n\nexport const ButtonMobileWrapper = styled.div({\n width: 'min-content',\n})\n\nexport const NameMobileWrapper = styled.div({\n ...cardStyle,\n textAlign: 'left',\n alignItems: 'left',\n gap: '4px',\n flexGrow: 1,\n marginLeft: '15px',\n})\n\nexport const NewUserAvatarWrapper = styled.div({\n display: 'inline-block',\n margin: '20px auto',\n})\n\nexport const NewUserDescriptionWrapper = styled.div({\n ...profilePadding,\n ...cardStyle,\n gap: '4px',\n})\n","// @flow\n\n/* This component renders an entry point for newtork identity in the contact\n * list tab on the home page. Consists of 4 components: new users, existing users,\n * new user mobile and existing user mobile. Mobile and non mobile view controlled\n * by media queries. Mobile view should be displayed under the search input\n */\nimport React from 'react'\nimport { connect } from 'transfer/utils/p2p-connect'\nimport content from 'pp-react-l10n'\nimport ShareYourLink from './share-with-friends'\nimport _ from 'lodash'\nimport { getPpmeSlug } from '../../../../shared/ppme'\nimport { Button, BodyText, Link, CaptionText } from '@paypalcorp/pp-react'\nimport ContactAvatar from 'transfer/components/contactAvatar'\nimport {\n NetworkIdentityWrapper,\n ItemWrapperMobile,\n ProfileCard,\n ProfileCardHeader,\n ProfileCardContent,\n ButtonMobileWrapper,\n NameMobileWrapper,\n NameWrapper,\n NewUserDescriptionWrapper,\n ManageProfileButton,\n} from './network-identity-entry.styles'\n\nconst l10n = content('transfer/page/funnel')\n\ntype NewUserProps = {\n ppMeProfile: Object,\n handleClick: Function,\n topElement: boolean,\n cdnHostName: string,\n alternateFullName?: string,\n}\n\nconst NewUserMobile = ({\n handleClick,\n ppMeProfile,\n topElement,\n alternateFullName,\n}: NewUserProps) => {\n const { profile } = ppMeProfile\n if (topElement || profile) {\n return null\n }\n\n return (\n \n \n \n {l10n('ppme.header')}\n \n {l10n('ppme.textDescriptionWithProfileMobile')}\n \n \n \n \n {l10n('ppme.create')}\n \n \n \n )\n}\n\nconst NewUser = ({\n ppMeProfile = {},\n handleClick,\n topElement,\n cdnHostName,\n alternateFullName,\n}: NewUserProps) => {\n const { profile } = ppMeProfile\n if (profile || !topElement) {\n return null\n }\n\n return (\n \n \n \n \n {l10n('ppme.header')}\n {l10n('ppme.description')}\n \n \n {l10n('ppme.buttonWithoutProfile')}\n \n \n \n )\n}\n\ntype ExistingUserProps = {\n ppMeProfile: Object,\n fullName: string,\n userThumbnailUrl?: string,\n handleClick: Function,\n topElement: boolean,\n cdnHostName?: string,\n alternateFullName?: string,\n}\n\nconst ExistingUserMobile = ({\n ppMeProfile = {},\n fullName,\n userThumbnailUrl,\n handleClick,\n topElement,\n cdnHostName,\n alternateFullName,\n}: ExistingUserProps) => {\n const { profile } = ppMeProfile\n if (!profile || topElement) {\n return null\n }\n\n return (\n \n \n \n {fullName}\n {getPpmeSlug(ppMeProfile.profile.slug)}\n \n \n \n {l10n('ppme.buttonTextWithProfile')}\n \n \n \n )\n}\n\nconst ExistingUser = ({\n ppMeProfile = {},\n fullName,\n userThumbnailUrl,\n handleClick,\n topElement,\n cdnHostName,\n alternateFullName,\n}: ExistingUserProps) => {\n const { profile } = ppMeProfile\n if (!profile || !topElement) {\n return null\n }\n return (\n \n {l10n('ppme.textWithProfile')}\n \n \n \n {fullName}\n \n {getPpmeSlug(ppMeProfile.profile.slug)}\n \n \n \n {l10n('ppme.buttonTextWithProfile')}\n \n \n \n \n )\n}\n\ntype Props = {\n ppMeProfile: {\n profile: {\n slug: string,\n },\n },\n redirectUrl: string,\n ppMeUserEligible: boolean,\n cdnHostName: string,\n} & NewUserProps &\n ExistingUserProps\n\nconst NetworkIdentityEntry = (props: Props) => {\n const handleClick = e => {\n e.preventDefault()\n window.location = props.redirectUrl\n }\n\n return (\n props.ppMeUserEligible && (\n \n \n \n \n \n \n )\n )\n}\n\nexport default connect(({ server }) => ({\n ppMeProfile: server.ppMeProfile,\n fullName: server.userFullName || '',\n redirectUrl: server.addContactListRedirectUrl,\n userThumbnailUrl:\n server.userThumbnailUrl ||\n _.get(server, 'ppMeProfile.photo[0].photo_url', ''),\n cdnHostName: server.cdnHostName,\n}))(NetworkIdentityEntry)\n","import glamorous from 'glamorous'\nimport React from 'react'\nimport content from 'pp-react-l10n'\nimport {\n extraSmallAndSmaller,\n mediumAndSmaller,\n smallAndSmaller,\n} from '../../../lib/styles/media-queries'\nimport { Button, BodyText, MgmIcon, CaptionText } from '@paypalcorp/pp-react'\nimport { Link } from 'react-router-dom'\nimport PropTypes from 'prop-types'\nimport { connect } from 'transfer/utils/p2p-connect'\nimport mgmLink from '../feature-link/feature-props/mgm.js'\nimport TermsLink from './termsLink'\n\nconst i18n = content('transfer/page/funnel')\n\nconst Container = glamorous.div({\n margin: '0 auto',\n order: 2,\n flexGrow: 2,\n display: 'flex',\n})\n\nconst ItemWrapper = glamorous.div({\n textAlign: 'center',\n padding: '15px 15px 25px 15px',\n width: 300,\n height: 'auto',\n backgroundColor: '#fff',\n margin: '0 auto',\n display: 'inline-table',\n [mediumAndSmaller]: {\n width: '600px',\n },\n [smallAndSmaller]: {\n display: 'none',\n },\n [extraSmallAndSmaller]: {\n display: 'none',\n },\n})\n\nconst IconWrapper = glamorous.div({\n marginBottom: '15px',\n})\n\nMGMContactsEntry.propTypes = {\n timeZone: PropTypes.string.isRequired,\n}\n\nexport function MGMContactsEntry(props) {\n const contentKeys = mgmLink({}, { from: 'contacts' })\n const {\n titleKey,\n titleArgs,\n descriptionKey,\n descriptionArgs,\n href,\n } = contentKeys\n\n return (\n \n \n \n \n \n {i18n(titleKey, titleArgs)}\n {i18n(descriptionKey, descriptionArgs)}\n \n \n {i18n('ppme.funnelEntryButton')}\n \n \n \n )\n}\n\nexport default connect(({ server, user }) => ({\n timeZone: user.timeZone,\n}))(MGMContactsEntry)\n","import React from 'react'\nimport DocumentTitle from 'react-document-title'\nimport { connect } from 'transfer/utils/p2p-connect'\nimport glamorous, { Div } from 'glamorous'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\nimport content from 'pp-react-l10n'\nimport { isSmartphone, isIOS } from '../../../lib/wurfl'\nimport { mobileScrollToInput } from '../../utils/recipient-utils'\nimport { FUNNEL } from '../../../../../lib/constants.js'\nimport {\n searchContacts,\n advanceToRequestReview,\n selectContact,\n handleError,\n} from '../../actions/Actions'\nimport * as UnifiedActions from '../../actions/unified-actions'\nimport { PaymentTypeChoice } from '../unified/payment-type-choice/payment-type-choice'\nimport BlockContact from 'transfer/components/block-contact-overpanel/blockContact'\nimport BlockedContactsOverpanel from 'transfer/components/blocked-contacts-overpanel'\nimport ContactBlockedOverpanel from 'transfer/components/contact-blocked-overpanel'\nimport ContactUnblockedOverpanel from 'transfer/components/contact-unblocked-overpanel'\nimport linksURL from '../../../../../config/links.json'\nimport { MGM_TRAFFIC_SOURCES } from '../../constants'\nimport ButtonLink from 'react-components/buttonLink'\n\nimport {\n toggleContactDetailsOverpanel,\n toggleBlockContactOverpanel,\n toggleBlockedContactsOverpanel,\n toggleUnilateralRecipientChoiceOverpanel,\n} from '../../actions/overpanels'\nimport ContactListItem from './contact-list-item'\nimport ContactDetails from './contact-details'\nimport { createSelector } from 'reselect'\nimport { getDisplayPhone } from '../../utils/phoneUtils'\nimport matchSorter from 'match-sorter'\nimport { trackLinkWithData } from '../../../lib/analytics/fpti'\nimport {\n trackBlockCancelClick,\n trackViewBlockedContactsLink,\n} from 'transfer/utils/blockUnblockAnalytics'\nimport {\n extraSmallAndSmaller,\n smallAndSmaller,\n} from '../../../lib/styles/media-queries'\nimport NetworkIdentityEntry from '../network-identity-entry'\nimport Overpanel from 'react-components/overpanel'\nimport { trackCancelBtn } from '../../utils/unified-send-analytics'\nimport UnilateralRecipientChoice from '../../components/unilateral-recipient-choice/unilateral-recipient-choice'\nimport { trackUnilateralRecipientChoiceCancel } from 'transfer/utils/unilateral-recipient-choice-analytics'\nimport { routeTo } from '../../utils/routeHelper'\nimport isBlockUnblockTreatment from 'experiments/blockUnblock'\nimport MGMContactsEntry from '../mgm/mgm-contacts-entry'\nimport { Link } from 'react-router-dom'\nimport {\n Button,\n HeadingText,\n LoadingSpinner,\n SearchInput,\n} from '@paypalcorp/pp-react'\nimport {\n hasMgmSideBarEntryPointTreatment,\n hasMgmSideBarEntryPointTreatment2,\n} from 'experiments/mgm'\nimport { tracking } from '../../../lib/analytics/mParticle'\nimport Events from '../../../lib/analytics/eventTags'\n\nconst i18n = content('transfer/contacts')\nconst i18LoadingText = content('transfer/loader')\nconst i18nSuccess = content('transfer/send/success')\nconst i18nRecipient = content('transfer/page/recipient')\n\nconst ContactListWrapper = glamorous.div(props => ({\n backgroundColor: 'white',\n padding: '36px 48px',\n maxWidth: '600px',\n margin: '0 auto',\n height: props.hasFetchedContacts ? 'auto' : 900,\n [smallAndSmaller]: {\n maxWidth: '100vw',\n padding: '36px 0px',\n },\n [extraSmallAndSmaller]: {\n padding: '23px 0px',\n maxWidth: '100vw',\n },\n}))\n\nconst PageWrapper = glamorous.div(\n {\n padding: '35px 20px',\n [smallAndSmaller]: {\n padding: 0,\n },\n },\n ({ ppMeUserEligible }) =>\n ppMeUserEligible\n ? {\n display: 'flex',\n flexWrap: 'wrap-reverse',\n }\n : {}\n)\n\nconst SpinnerWrapper = glamorous.div(({ top }) => ({\n height: `calc(100vh - ${top}px)`,\n minHeight: 200,\n maxHeight: 758,\n display: 'table',\n margin: '0 auto',\n}))\n\nconst HeadingContainer = glamorous.div({\n marginTop: '2rem',\n marginBottom: '1rem',\n [smallAndSmaller]: {\n marginTop: '1rem',\n marginBottom: '0.5rem',\n marginLeft: '1rem',\n },\n})\n\nconst LinkWrapper = glamorous.div({\n marginTop: '1.5rem',\n textAlign: 'center',\n})\n\nconst EntryPointsWrapper = glamorous.div({\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n height: '500',\n alignItems: 'flex-start',\n})\n\nconst ContactsRowWrapper = glamorous.div({\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n width: '100%',\n})\n\nconst SearchInputWrapper = glamorous.div({\n width: '100%',\n display: 'table',\n tableLayout: 'fixed',\n [smallAndSmaller]: {\n padding: '0 1rem',\n },\n})\n\nclass ContactList extends React.Component {\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n allContacts: PropTypes.array.isRequired,\n topContacts: PropTypes.array.isRequired,\n otherContacts: PropTypes.array,\n searchedContacts: PropTypes.array.isRequired,\n hasFetchedContacts: PropTypes.bool,\n hasFetchedBlockedContacts: PropTypes.bool,\n hasUpdatedContacts: PropTypes.bool,\n showPaymentTypeChoiceOverpanel: PropTypes.bool.isRequired,\n showContactDetailsOverpanel: PropTypes.bool.isRequired,\n analytics: PropTypes.shape({\n pagename: PropTypes.string,\n pagegroup: PropTypes.string,\n }),\n ppMeUserEligible: PropTypes.bool,\n directionality: PropTypes.string,\n overpanelType: PropTypes.string,\n receiverFee: PropTypes.string,\n selectedType: PropTypes.string,\n showUnilateralRecipientChoiceOverpanel: PropTypes.bool,\n showBlockContactOverpanel: PropTypes.bool,\n isMobile: PropTypes.bool,\n funnel: PropTypes.string,\n }\n\n state = {\n searchString: '',\n matchingTopContacts: this.props.topContacts || [],\n matchingAllContacts: this.props.allContacts || [],\n isRecipientInputOnFocus: false,\n }\n\n currentContact = null\n\n componentDidMount() {\n const { funnel } = this.props\n\n if (funnel !== FUNNEL.CONTACT) {\n this.props.dispatch(\n UnifiedActions.funnelStarted({ funnel: FUNNEL.CONTACT })\n )\n }\n\n this.props.dispatch(UnifiedActions.fetchPeers())\n }\n\n componentWillUnmount() {\n if (this.state.listNeedsRefresh) {\n this.props.dispatch(UnifiedActions.fetchPeers())\n }\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.hasUpdatedContacts) {\n this.props.dispatch(UnifiedActions.fetchPeers())\n }\n\n const isChanged = contacts => {\n const current = this.props[contacts] || []\n const next = nextProps[contacts] || []\n const isEqual =\n current.length === next.length &&\n current.every((contact, index) => {\n return (\n contact.id === next[index].id &&\n contact.isFavorite === next[index].isFavorite\n )\n })\n return !isEqual\n }\n const contactsChanged = [\n 'topContacts',\n 'searchedContacts',\n 'allContacts',\n ].some(isChanged)\n\n if (contactsChanged) {\n const searchedContacts = this.state.searchString\n ? nextProps.searchedContacts\n : []\n this.setState({\n matchingTopContacts: this.getMatchingContacts(\n nextProps.topContacts,\n this.state.searchString\n ),\n matchingAllContacts: this.getMatchingContacts(\n [...nextProps.allContacts, ...searchedContacts],\n this.state.searchString\n ),\n })\n }\n }\n\n toggleInputFocus = e => {\n this.setState(\n {\n isRecipientInputOnFocus: !this.state.isRecipientInputOnFocus,\n },\n () => {\n const isMobileUser = isSmartphone || isIOS()\n if (isMobileUser) {\n const scrollTo = this.state.isRecipientInputOnFocus\n ? this._recipientInput\n : document.body\n mobileScrollToInput(scrollTo, 300)\n }\n }\n )\n }\n\n getMatchingContacts = (contacts, searchString) => {\n return matchSorter(contacts, searchString, {\n threshold: matchSorter.rankings.ACRONYM,\n keys: [\n 'alternateFullName',\n 'fullName',\n 'email',\n 'networkIdDisplayName',\n contact => getDisplayPhone(contact),\n ],\n })\n }\n\n throttledSearchContacts = _.throttle(\n search => this.props.dispatch(searchContacts(search)),\n 500\n )\n\n handleOpenContactDetails = contact => () => {\n const { pagename, pagegroup } = this.props.analytics\n const { searchString } = this.state\n const data = searchString ? { srch: searchString } : {}\n trackLinkWithData('linkContactDetail', pagegroup, pagename, data, 'link')\n this.currentContact = contact\n this.props.dispatch(toggleContactDetailsOverpanel({ show: true }))\n }\n\n handleInputChange = ({ target: { value: search } }) => {\n let searchedContacts = []\n if (search) {\n this.throttledSearchContacts(search)\n searchedContacts = this.props.searchedContacts\n }\n this.setState({\n searchString: search,\n matchingTopContacts: this.getMatchingContacts(\n this.props.topContacts,\n search\n ),\n matchingAllContacts: this.getMatchingContacts(\n [...this.props.allContacts, ...searchedContacts],\n search\n ),\n })\n }\n\n renderOverpanelContent = () => {\n const {\n selectedType,\n showPaymentTypeChoiceOverpanel,\n showBlockContactOverpanel,\n showUnilateralRecipientChoiceOverpanel,\n } = this.props\n\n if (showBlockContactOverpanel) {\n const { id, firstName, lastName, alternateFullName } = this.currentContact\n\n return (\n \n )\n }\n\n if (showUnilateralRecipientChoiceOverpanel) {\n return (\n {\n this.props.dispatch(toggleContactDetailsOverpanel({ show: false }))\n this.props.dispatch(\n toggleUnilateralRecipientChoiceOverpanel({ show: false })\n )\n\n if (selectedType === 'contactSend') {\n this.props.dispatch(\n UnifiedActions.fetchRecipientDetails({\n contact: updatedContact,\n linkName: selectedType,\n enableAnalytics: false,\n })\n )\n } else {\n this.props.dispatch(\n selectContact(\n updatedContact,\n 'contactRequest',\n null,\n null,\n false\n )\n )\n\n const flfr = 'tab-contacts:activityDetail',\n pageName = `main:p2p:${flfr}:node::`,\n pageGroup = `main:p2p:${flfr}`\n\n this.props.dispatch(\n advanceToRequestReview(pageName, pageGroup, { flfr })\n )\n routeTo('/myaccount/transfer/request/preview')\n }\n }}\n />\n )\n }\n\n if (showPaymentTypeChoiceOverpanel) {\n return (\n \n )\n }\n\n return (\n \n )\n }\n\n handleCloseOverpanel = () => {\n this.props.dispatch(toggleBlockContactOverpanel({ show: false }))\n this.props.dispatch(\n toggleUnilateralRecipientChoiceOverpanel({ show: false })\n )\n this.props.dispatch(toggleContactDetailsOverpanel({ show: false }))\n this.props.dispatch(\n UnifiedActions.togglePaymentTypeChoiceOverpanel({ show: false })\n )\n }\n\n renderSpinner = () => {\n return (\n !this.state.spinner && this.setState({ spinner: div })}\n // distance from top of viewport\n // spinner is centered between this height and bottom of viewport via calc(100vh - top)\n top={\n this.state.spinner && this.state.spinner.getBoundingClientRect().top\n }\n >\n \n \n \n \n )\n }\n\n renderContacts = () => {\n const { matchingAllContacts, matchingTopContacts } = this.state\n return (\n \n {Boolean(matchingTopContacts.length) && (\n \n {i18n('contacts.topContacts')}\n \n )}\n\n \n {matchingTopContacts.map(contact => {\n return (\n \n \n \n )\n })}\n \n\n {Boolean(matchingAllContacts.length) &&\n Boolean(matchingTopContacts.length) && (\n \n )}\n\n {Boolean(matchingAllContacts.length) && (\n \n \n \n {i18n('contacts.allContacts')}\n \n \n \n {matchingAllContacts.map(contact => {\n return (\n \n \n \n )\n })}\n \n \n )}\n \n )\n }\n\n renderSearchBar = () => {\n const { searchString } = this.state\n const directionality = this.props.directionality || 'ltr'\n\n return (\n \n (this._recipientInput = c)}\n onFocus={this.toggleInputFocus}\n onBlur={this.toggleInputFocus}\n value={searchString}\n dir={directionality}\n name=\"edit-contacts-input\"\n id=\"edit-contacts-input\"\n role=\"combobox\"\n aria-autocomplete=\"both\"\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n onChange={this.handleInputChange}\n label={i18n('contacts.searchPlaceholder')}\n clearButtonLabel={i18nRecipient('autocomplete.clearLabel')}\n onClear={() => this.handleInputChange({ target: { value: '' } })}\n />\n \n )\n }\n\n handleOpenBlockedContacts = () => {\n trackViewBlockedContactsLink()\n\n const { dispatch, hasFetchedBlockedContacts } = this.props\n\n if (!hasFetchedBlockedContacts) {\n dispatch(UnifiedActions.fetchBlockedPeers())\n .then(() => {\n dispatch(toggleBlockedContactsOverpanel({ show: true }))\n })\n .catch(handleError(dispatch))\n } else {\n dispatch(toggleBlockedContactsOverpanel({ show: true }))\n }\n }\n\n render = () => {\n const showOverpanel =\n this.props.showBlockContactOverpanel ||\n this.props.showContactDetailsOverpanel ||\n this.props.showPaymentTypeChoiceOverpanel ||\n this.props.showUnilateralRecipientChoiceOverpanel\n\n const inviteFriendsUrl = `${linksURL.US.MGM.inviteFriendsLink}${MGM_TRAFFIC_SOURCES.CONTACTS}`\n\n return (\n \n \n \n \n {this.renderSearchBar()}\n\n \n {this.props.hasFetchedContacts\n ? this.renderContacts()\n : this.renderSpinner()}\n {/* TODO: Separate Overpanels will be needed because a11y focus on a specific key */}\n {\n if (this.props.showUnilateralRecipientChoiceOverpanel) {\n trackUnilateralRecipientChoiceCancel()\n } else if (this.props.showBlockContactOverpanel) {\n tracking(Events.p2p_contact_block_cancel_pressed())\n trackBlockCancelClick()\n } else {\n trackCancelBtn()\n }\n\n this.handleCloseOverpanel()\n }}\n >\n {showOverpanel ? this.renderOverpanelContent() : null}\n \n \n \n \n {this.props.isMobile &&\n (hasMgmSideBarEntryPointTreatment() ||\n hasMgmSideBarEntryPointTreatment2()) && (\n \n \n {i18nSuccess('success.mgmInviteFriend')}\n \n \n )}\n {isBlockUnblockTreatment() && this.props.hasFetchedContacts && (\n \n \n {i18n('contacts.blocked')}\n \n \n )}\n \n \n \n {!this.props.isMobile &&\n (hasMgmSideBarEntryPointTreatment() ||\n hasMgmSideBarEntryPointTreatment2()) && }\n \n \n \n \n )\n }\n}\n\nconst filterAllContacts = createSelector(\n contacts => contacts.contacts,\n contacts => contacts.topContacts,\n (contacts, topContacts) => _.differenceBy(contacts, topContacts, 'id')\n)\n\nexport default connect(\n ({ contacts, overpanels, server, recipient, amount, transaction }) => ({\n hasFetchedContacts: contacts.hasFetchedContacts,\n hasFetchedBlockedContacts: contacts.hasFetchedBlockedContacts,\n hasUpdatedContacts: contacts.hasUpdatedContacts,\n allContacts: filterAllContacts(contacts),\n searchedContacts: contacts.searchedContacts,\n topContacts: contacts.topContacts,\n overpanelType: recipient.moneyPageOverPanel,\n showContactDetailsOverpanel: overpanels.contactDetails,\n showPaymentTypeChoiceOverpanel: overpanels.paymentTypeChoice,\n ppMeUserEligible: _.get(server, 'ppMeProfile.isUserEligible', false),\n directionality: server.directionality,\n selectedType: recipient.selectedType,\n receiverFee: amount.receiverFee,\n showUnilateralRecipientChoiceOverpanel:\n overpanels.unilateralRecipientChoice,\n showBlockContactOverpanel: overpanels.blockContact,\n isMobile: server.isMobile,\n funnel: transaction.funnel,\n })\n)(ContactList)\n"],"sourceRoot":""}