{"version":3,"sources":["webpack:///js/3.ba8053918910d4cc0440.js","webpack:///./pages/xo-select-fi/directive.js","webpack:///./pages/xo-select-fi/route.js","webpack:///./pages/xo-select-fi/template.html"],"names":["webpackJsonp","./pages/xo-select-fi/directive.js","module","exports","__webpack_require__","_interopRequireDefault","obj","__esModule","$xoSelectFiComponent","undefined","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","_squid","_angular","_uiRouter","_logger","_auth","_checkout","_credit","_choice","_index","_fiMeta","_fiMeta2","_fiMessages","_factory","_cardartInstrument","_experiments","Experiments","newObj","_template","_template2","_sharedUtil","_balance","$Component","extend","tag","template","props","token","type","required","resolve","models","checkoutSession","$CheckoutSessionModel","instance","this","retrieve","cart","$CheckoutCartModel","auth","$AuthModel","checkoutAppData","$CheckoutAppDataModel","variant","$ChoiceEligibility","getVariant","checkoutPayeeModel","$CheckoutPayeeModel","fiMeta","fetch","noop","creditSharedInfo","$CreditSharedInfoModel","fiSource","resolvers","then","isCardArtExp","$CardArtInstrument","isCardArtEnable","isBilling","isBillingNoPurchase","padToggleFeature","enabled","fundingOptions","isPadToggleApplicable","padToggleFeatureSupported","isCPAEligible","$SharedUtil","checkCpaEligibility","inCpaElmoTreatment","balanceComprehensionBannerExperiment","getTreatment","page","payee","$logger","info","$q","when","balanceEligibility","$BalanceEligibilityFactory","init","state","err","warn","error","toString","stack","lifecycle","enter","propValueObj","propHeader","propVal","propImage","isMessengerBAIntegration","$integration","getConfig","personalizedBanner","show","locale","$locale","isCountryDE","country","addBankAllowed","$feature","populate","_this","_models","_fiSource","masterPlanList","getPlanList","$fiMessages","isDeclinedCard","isCreditDisallowedForMerchant","creditDisallowedMessage","msgs","content","get","treatment_name","showBalanceComprehensionBannerTop","showBalanceComprehensionBannerBottom","balanceComprehensionBannerMessage","isReferenceCheckout","referenceCheckout","rememberedOT","isFBSkipLogin","showNotYou","formattedNameInformal","formatNameInformal","first_name","last_name","email","creditOffer","installment","showPPCAcquisitionRadioButton","isIndiaDomesticBilling","choicePageAddCardContentKey","isConsumerCountry","isChargePatternImmediateOrDeferred","merchant","merchantName","brand_name","merchant_name","message","$renderContent","eligibility","isBoolean","from","to","createPayload","isPPCReuseAndNotPreferred","plans","some","fi","name","isPreferred","showSpecialFinancingBadge","$rootScope","specialFinancingBadge","selected","showInstallmentsFiTitle","ppcInstallmentContentReady","getInstallmentsFiTitle","getInstallmentOffer","taglineText","hasInstallmentOffers","hasInstallmentOfferFinancingDetails","continueButtonText","selectedmethod","index","ppcCrossCurrencyInfo","ppcPlans","filter","currency_conversion","ppcCurrencyConversion","toTargetCurrency","to_amount_forex","to_currency","fromUnitCurrency","from_currency","planId","serializedPlans","balanceCodes","primaryList","balanceList","cardMap","BILL_ME_LATER","PAD","PAYPAL_EXTRAS_MASTERCARD","isUSGambling","isUSBuyer","isUSmerchant","isGambling","getSerializedPrimary","primary","serial","id","amount","currency_code","toLowerCase","subtype","getSerializedPlanId","plan","balances","pid","primaryFs","sort","join","showBalanceCurrencies","isMultipleBalancePlan","knownCurrency","secondaryFIs","primaryFsIds","forEach","balCurCodes","balance","code","push","balInfoAndState","checked","intent","fake","amount_formatted_currency","amount_formatted","currencies","concat","serialPrimary","balA","balB","isMultipleBalance","getPadAndIachCombinedPlans","getPlansByPrimaryId","matchingPlans","indexOf","checkPad","_$BalanceFactory$getP","$BalanceFactory","getPadAndCheckboxStatus","isChecked","hasPad","displayPadMessage","displayPadLabel","set","checkbox","verifyBalanceWithInstallments","$util","displayDeInstallmentWarningMessage","checkBalanceWithInstallments","anyBalanceChecked","balanceCode","capUserIntent","isMEFTWithIACH","isMEFT","p","isIACH","showPreferredLabelForPadEligibleCountries","isPAD","isIACHWithPad","showPreferredLabelForAll","meftWithIach","showPreferredLabel","preferred","preferredFiVariant","updateBalances","clickChosenPlan","bankOrOther","primaryCodeAsBalance","combinedSerials","keys","cardName","includeCodes","excludeCodes","selectedPlan","padPlanId","iachPlanId","foundCorrespondingPlan","balState","isFake","isSplitBalance","requiresBalance","fiName","string","denied","forced","pair","codes","codesLn","msgKey","msgObj","code1","slice","code2","selectStickyInstrument","getSelectedStickyInstrument","instrument_id","bal","preferredPlanId","preferredPlanIndex","findIndex","getBAPlans","futurePaymentInstruments","preferredFiVariants","$config","choiceExperiment","preferredCheckbox","updateFS","$promise","_plan","planWithSplitBal","currentPlan","find","planWithIachOrPad","checkedBalances","fundingsource","pidForLogger","serializedPlanKeys","map","action","data","success","result","msgKeys","DEFAULT","$state","go","contingencies","NEED_AUTHENTICATED_CARD","resolution","card","fundingId","cardModel","$AddCardModel","$CardModel","number","toUpperCase","productType","shortCircuit","evt","debug","installments","creditInstallmentOffer","$InstallmentOptionsModel","isMemberCredit","$populate","checkoutCart","save","cache","installmentResult","offers","installment_options","hasInstallments","getRedirectToCapeCyco","showCapeCyco","financing_option","getInstallmentOfferFinancingDetails","controller","$scope","showFiSelectPage","showBanner","showCYCO","showCreditExample","showCreditPlacement","isPinlessDebit","angular","value","./pages/xo-select-fi/route.js","$SelectFiRoute","_directive","$ComponentRoute","path","directive","titleContent","trackingData","fptiState","buzname","children","cardmodel","lazyRoute","slug","./pages/xo-select-fi/styles.less","./pages/xo-select-fi/template.html"],"mappings":"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","file":"js/3.ba8053918910d4cc0440.js","sourcesContent":["webpackJsonp([3],{\n\n/***/ \"./pages/xo-select-fi/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoSelectFiComponent = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _credit = __webpack_require__(\"../node_modules/xo-models/src/credit/index.js\");\n\nvar _choice = __webpack_require__(\"../node_modules/xo-models/src/choice/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/fi/index.js\");\n\nvar _fiMeta = __webpack_require__(\"../node_modules/xo-models/src/fiMeta/index.js\");\n\nvar _fiMeta2 = _interopRequireDefault(_fiMeta);\n\nvar _fiMessages = __webpack_require__(\"../node_modules/xo-models/src/fi/lib/fiMessages.js\");\n\n__webpack_require__(\"./js/lib/index.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/message/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/banner/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-title/dist/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-models/src/fi/lib/fiApis.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/fi-panel/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/experience/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\n__webpack_require__(\"../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/xo-credit-example-uk/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-credit-components/src/xo-credit-offer-banners/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/review-paywith/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/marketingOffers/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/notYou/directive.js\");\n\nvar _factory = __webpack_require__(\"./pages/xo-select-fi/factory.js\");\n\nvar _cardartInstrument = __webpack_require__(\"./pages/services/cardart-instrument/index.js\");\n\nvar _experiments = __webpack_require__(\"../node_modules/xo-models/src/experiments/index.js\");\n\nvar Experiments = _interopRequireWildcard(_experiments);\n\nvar _template = __webpack_require__(\"./pages/xo-select-fi/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"./pages/xo-select-fi/styles.less\");\n\nvar _sharedUtil = __webpack_require__(\"./pages/services/shared-util/index.js\");\n\nvar _balance = __webpack_require__(\"./pages/services/balance/index.js\");\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoSelectFiComponent = exports.$xoSelectFiComponent = _squid.$Component.extend('$xoSelectFiComponent', {\n tag: 'xo-select-fi',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutSession: _checkout.$CheckoutSessionModel.instance(this.props.token).retrieve(),\n cart: _checkout.$CheckoutCartModel.instance(this.props.token).retrieve(),\n auth: _auth.$AuthModel.instance().retrieve(),\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance(this.props.token).retrieve(),\n variant: _choice.$ChoiceEligibility.instance().getVariant(this.props.token),\n checkoutPayeeModel: _checkout.$CheckoutPayeeModel.instance(this.props.token).retrieve(),\n fiMeta: _fiMeta2['default'].instance(this.props.token).fetch()['catch'](_angular.noop),\n creditSharedInfo: _credit.$CreditSharedInfoModel.instance()\n };\n },\n fiSource: function fiSource(resolvers) {\n return resolvers.models.then(function (models) {\n return {\n isCardArtExp: _cardartInstrument.$CardArtInstrument.isCardArtEnable(models.fiMeta),\n isBilling: models.cart && models.cart.isBilling(),\n isBillingNoPurchase: models.cart && models.cart.isBillingNoPurchase()\n };\n });\n },\n padToggleFeature: function padToggleFeature(resolvers) {\n return resolvers.models.then(function (models) {\n var enabled = void 0;\n\n if (models.checkoutSession.fundingOptions.isPadToggleApplicable()) {\n enabled = Experiments.padToggleFeatureSupported();\n } else {\n // if pad not available\n enabled = false;\n }\n return { enabled: enabled };\n });\n },\n isCPAEligible: function isCPAEligible(resolvers) {\n return resolvers.models.then(function (models) {\n _sharedUtil.$SharedUtil.checkCpaEligibility(models.checkoutSession).then(function (inCpaElmoTreatment) {\n return inCpaElmoTreatment || false;\n });\n });\n },\n balanceComprehensionBannerExperiment: function balanceComprehensionBannerExperiment(resolvers) {\n return resolvers.models.then(function (models) {\n if (!models) {\n return _angular.$q.when();\n }\n return Experiments.balanceComprehensionBannerExperiment.getTreatment({\n page: 'choice',\n cart: models.cart,\n checkoutAppData: models.checkoutAppData,\n checkoutSession: models.checkoutSession,\n payee: models.checkoutPayeeModel\n })['catch'](function () {\n _logger.$logger.info('balanceComprehensionBannerExperiment_GET_TREATMENT_ERROR', { page: 'choice' });\n return _angular.$q.when();\n });\n });\n },\n balanceEligibility: function balanceEligibility(resolvers) {\n return resolvers.models.then(function (models) {\n if (!models) {\n return _angular.$q.when();\n }\n return _balance.$BalanceEligibilityFactory.init({ checkoutSession: models.checkoutSession }).then(function (state) {\n return state;\n })['catch'](function (err) {\n _logger.$logger.warn('AU_BALANCE_ELIGIBILITY_INIT_ERROR', { error: err.toString() || err.stack });\n return _angular.$q.when();\n });\n });\n }\n },\n lifecycle: {\n enter: function enter() {\n // make this better\n this.propValueObj = {\n propHeader: 'memberReview.propHead',\n propVal: 'memberReview.propVal',\n propImage: 'https://www.paypalobjects.com/images/checkout/hermes/scr_vp_fprd_shield_bags.png'\n };\n this.isMessengerBAIntegration = _squid.$integration.getConfig('IS_MESSENGER_BA_INTEGRATION');\n this.personalizedBanner = {\n show: false\n };\n this.locale = _squid.$locale;\n this.isCountryDE = _squid.$locale.country === 'DE';\n this.addBankAllowed = (0, _squid.$feature)('addBank');\n },\n populate: function populate() {\n var _this = this;\n\n var _models = this.models,\n cart = _models.cart,\n checkoutSession = _models.checkoutSession;\n var _fiSource = this.fiSource,\n isCardArtExp = _fiSource.isCardArtExp,\n isBilling = _fiSource.isBilling,\n isBillingNoPurchase = _fiSource.isBillingNoPurchase;\n\n var masterPlanList = checkoutSession.getPlanList(); // initial fundingOptions that's returned by planning (unmodified)\n _fiMessages.$fiMessages.isDeclinedCard(checkoutSession);\n var isCreditDisallowedForMerchant = checkoutSession.isCreditDisallowedForMerchant;\n if (isCreditDisallowedForMerchant) {\n this.creditDisallowedMessage = {\n type: 'info',\n msgs: [_squid.$locale.content.get('memberReview.useDebitCard')]\n };\n }\n\n if (this.balanceComprehensionBannerExperiment && this.balanceComprehensionBannerExperiment.treatment_name) {\n this.showBalanceComprehensionBannerTop = this.balanceComprehensionBannerExperiment.treatment_name === 'Trmt_balance_banner_ramp_hermes_top';\n this.showBalanceComprehensionBannerBottom = this.balanceComprehensionBannerExperiment.treatment_name === 'Trmt_balance_banner_ramp_hermes_bottom';\n this.balanceComprehensionBannerMessage = {\n type: 'info',\n msgs: [_squid.$locale.content.get('billingAgreement.paypalBalanceInfoBanner')]\n };\n }\n\n this.isBilling = isBilling;\n this.isBillingNoPurchase = isBillingNoPurchase;\n this.isReferenceCheckout = cart.referenceCheckout ? true : false;\n this.personalizedBanner.show = this.models.auth.rememberedOT() && (0, _squid.$feature)('oneTouchPersonalization') || this.models.auth.isFBSkipLogin();\n // for Facebook skip login set isFBSkipLogin as true to modify the skip login content\n this.personalizedBanner.isFBSkipLogin = this.models.auth.isFBSkipLogin();\n this.showNotYou = this.models.auth && this.models.auth.showNotYou();\n this.formattedNameInformal = (0, _squid.formatNameInformal)({\n first_name: this.models.auth.first_name,\n last_name: this.models.auth.last_name\n }) || this.models.auth.email;\n\n if (_squid.$locale.country === 'DE' && checkoutSession.creditOffer) {\n this.installment.showPPCAcquisitionRadioButton = true;\n }\n\n this.isIndiaDomesticBilling = isBilling && _squid.$locale.country === 'IN' && this.models.checkoutAppData.get('merchant.merchant_country', 'US') === 'IN';\n if (this.isIndiaDomesticBilling) {\n this.choicePageAddCardContentKey = 'fundingInstruments.addNewCardBilling';\n if (cart.isConsumerCountry('IN') && cart.isBilling()) {\n if (cart.isChargePatternImmediateOrDeferred()) {\n this.choicePageAddCardContentKey = 'fundingInstruments.immediate.addNewCardBilling';\n } else {\n this.choicePageAddCardContentKey = 'fundingInstruments.non.immediate.addNewCardBilling';\n }\n }\n } else if (isCreditDisallowedForMerchant) {\n this.choicePageAddCardContentKey = 'addCard.addBankDebitCard';\n } else {\n this.choicePageAddCardContentKey = 'fundingInstruments.addNewCard';\n }\n\n var merchant = this.models.checkoutAppData.get('merchant');\n var merchantName = merchant.brand_name || merchant.merchant_name || 'Merchant';\n\n this.merchantName = merchantName;\n\n if (this.isIndiaDomesticBilling) {\n checkoutSession.message = {\n type: 'info',\n msgs: [(0, _squid.$renderContent)('memberReview.billingMerchant', { merchantName: merchantName })]\n };\n }\n\n var eligibility = this.balanceEligibility.eligibility;\n // render `CIP_INCOMPLETE` message for PayPal balance\n\n if (_sharedUtil.$SharedUtil.isBoolean(eligibility) && !eligibility) {\n checkoutSession.message = {\n type: 'info',\n msgs: [_squid.$locale.content.get('compliance.cipIncomplete')]\n };\n }\n\n /**\n * If it's cardart experience, log our current FIs (bank or cards)\n * NOTE: `balance` type is not being instrumented at the moment, cardart\n * instrumentation is only applicable to credit cards & banks right now.\n * See $CardArtInstrument.createPayload() for detail implmenetation\n */\n if (isCardArtExp) {\n _logger.$logger.info('checkout_fpti', _extends({\n from: 'CHOICE',\n to: 'prepare_choice'\n }, _cardartInstrument.$CardArtInstrument.createPayload({\n checkoutSession: checkoutSession,\n isBillingNoPurchase: isBillingNoPurchase\n })));\n }\n\n /**\n * checks for PPC in the wallet and selected as fi\n * This Determines whether to show the banner or not for a reuse customer\n */\n var isPPCReuseAndNotSelected = function isPPCReuseAndNotSelected() {\n if (_this.isBillingNoPurchase) {\n return checkoutSession.get('futurePayment.isCreditInWallet') && !checkoutSession.get('futurePayment.isCreditDefault');\n } else {\n var plans = checkoutSession.get('fundingOptions.instruments', null);\n if (plans && plans.some(function (fi) {\n return fi.name === 'BILL_ME_LATER' && !fi.selected;\n })) {\n return true;\n } else {\n return false;\n }\n }\n };\n\n /**\n * checks for PPC in the wallet and selected as fi\n * This Determines whether to show the banner or not for a reuse customer\n */\n var isPPCReuseAndNotPreferred = function isPPCReuseAndNotPreferred() {\n if (_this.isBillingNoPurchase) {\n return checkoutSession.get('futurePayment.isCreditInWallet') && !checkoutSession.get('futurePayment.isCreditDefault');\n } else {\n var plans = checkoutSession.get('fundingOptions.instruments', null);\n if (plans && plans.some(function (fi) {\n return fi.name === 'BILL_ME_LATER' && !fi.isPreferred;\n })) {\n return true;\n } else {\n return false;\n }\n }\n };\n\n /**\n * this is set in xo-credit-components for REUSE NI customers as apart of T1 for A/B tests\n **/\n this.showSpecialFinancingBadge = function () {\n return _angular.$rootScope.specialFinancingBadge && isPPCReuseAndNotPreferred();\n };\n\n /* checks for eligibility for acq PPC or PPC in wallet and not selected for reuse */\n this.creditOffer = checkoutSession.creditOffer || isPPCReuseAndNotSelected();\n\n this.showInstallmentsFiTitle = function () {\n return _this.isCountryDE && _this.ppcInstallmentContentReady();\n };\n\n this.getInstallmentsFiTitle = function () {\n if (_this.models.creditSharedInfo.getInstallmentOffer() && _this.models.creditSharedInfo.getInstallmentOffer().taglineText) {\n // This tagline text will be localization already by Personalization platform\n return _this.models.creditSharedInfo.getInstallmentOffer().taglineText;\n }\n return _squid.$locale.content.get('memberReview.installmentsTitle');\n };\n\n this.ppcInstallmentContentReady = function () {\n return _this.models.creditSharedInfo.hasInstallmentOffers() && _this.models.creditSharedInfo.hasInstallmentOfferFinancingDetails();\n };\n\n this.continueButtonText = function () {\n if (_this.selectedmethod && _this.selectedmethod.index === 'applyForPPCRadio') {\n if (_squid.$locale.country === 'DE') {\n return _squid.$locale.content.get('memberReview.bmlContinueToApplication');\n }\n return _squid.$locale.content.get('applyForBml.bmlApplyHeadline');\n } else {\n return _squid.$locale.content.get('common.continuetext');\n }\n };\n\n /**\n * returns the cross currency conversion rate for the PPC wallet fi when a cross-currency\n * cart is found during the GB hermes checkout flow\n *\n */\n var getPPCCrossCurrencyInfo = function getPPCCrossCurrencyInfo() {\n if (!_this.isBillingNoPurchase && _squid.$locale.country === 'GB') {\n var plans = checkoutSession.get('fundingOptions.instruments', null);\n var ppcPlans = plans && plans.filter(function (fi) {\n return fi.name === 'BILL_ME_LATER' && fi.currency_conversion;\n });\n if (ppcPlans && ppcPlans.length === 1) {\n var ppcCurrencyConversion = ppcPlans[0].currency_conversion;\n return Object.assign({ toTargetCurrency: ppcCurrencyConversion.to_amount_forex + ' ' + ppcCurrencyConversion.to_currency }, { fromUnitCurrency: ' 1 ' + ppcCurrencyConversion.from_currency });\n }\n }\n return null;\n };\n this.ppcCrossCurrencyInfo = getPPCCrossCurrencyInfo();\n\n // selected plan model\n var selectedmethod = this.selectedmethod = {\n // first selection to start\n index: 0,\n // needed by xo-reuse and will be resolved later\n planId: 0\n };\n\n var serializedPlans = {}; // index of all plans by primary and balance currency code(s)\n var balanceCodes = {}; // index of cataloged currency codes\n var primaryList = []; // list of plans with unique primaryFs ids\n var balanceList = this.balanceList = []; // list of unique balance currencies\n var cardMap = { // FI names that we know map to content keys\n BILL_ME_LATER: 'BILL_ME_LATER',\n PAD: 'PAD',\n PAYPAL_EXTRAS_MASTERCARD: 'PAYPAL_EXTRAS_MASTERCARD'\n };\n\n this.isUSGambling = function () {\n // US Only Real Money Gaming\n var isUSBuyer = _squid.$locale.country === 'US';\n var isUSmerchant = _this.models.checkoutAppData && _this.models.checkoutAppData.get('merchant.merchant_country') === 'US';\n\n return _this.models.checkoutPayeeModel && _this.models.checkoutPayeeModel.isGambling() && isUSBuyer && isUSmerchant;\n };\n\n // Return a representation of the primaryFs of a plan\n // Based on id, currency code, subtype to ensure uniqueness\n // TODO(refactor): $MultiFiPlanFactory.getSerializedPrimary()\n var getSerializedPrimary = function getSerializedPrimary(primary) {\n var serial = primary.id + primary.amount.currency_code.toLowerCase();\n\n // if there's a subtype...\n if (primary.subtype) {\n serial += primary.subtype;\n }\n return serial;\n };\n\n // return a serialized key for the plan\n // plan - a plan object from checkoutSession.fundingOptions.plans\n // balances - array of currency code strings\n // TODO (refactor): $MultiFiPlanFactory.getSerializedPlanId()\n var getSerializedPlanId = function getSerializedPlanId(plan, balances) {\n var pid = getSerializedPrimary(plan.primaryFs);\n\n // if no balances array...\n if (!balances) {\n // just return the pid\n return pid;\n }\n\n // (otherwise) sort balances\n balances.sort();\n\n return pid + balances.join();\n };\n\n if (masterPlanList) {\n // If more than one fully funded balance plan, show the balance currency next to instrument name\n // TODO(refactor): the entire `showBalanceCurrencies` logic can be abstracted away\n // with $MultiFiPlanFactory.getShowBalanceCurrenciesStatus()\n var showBalanceCurrencies = checkoutSession.isMultipleBalancePlan();\n\n // if not multiple balance plans...\n if (!showBalanceCurrencies) {\n // start with first plan's currency\n var knownCurrency = masterPlanList[0].primaryFs.amount.currency_code;\n\n // update flag if any plan has more than two secondaries or one with a different currency\n showBalanceCurrencies = masterPlanList.some(function (plan) {\n // show currencies, when this plan has a different one, or...\n return plan.primaryFs.amount.currency_code !== knownCurrency ||\n // this plan has secondaries, where...\n plan.secondaryFIs && (\n // there's more than one\n plan.secondaryFIs.length > 1 ||\n // the one has a different currency\n plan.secondaryFIs[0].amount.currency_code !== knownCurrency);\n });\n }\n\n // index of captured primaryFs ids\n var primaryFsIds = {};\n\n // Filter through the masterPlanList, set up the split balance lists for the checkboxes if present, and set up the primary FI list. This is mostly needed for split balance cases\n // TODO(refactor): use $MultiFiPlanFactory.getCompositeBalances() to get `balanceCodes`, `balanceList` and `balCurCodes`\n masterPlanList.forEach(function (plan) {\n var balances = plan.secondaryFIs || [];\n var balCurCodes = [];\n\n // catalog balances\n balances.forEach(function (balance) {\n var code = balance.amount.currency_code;\n\n // capture code (for serialization, next)\n balCurCodes.push(code);\n // if this code has not been cataloged...\n if (!balanceCodes.hasOwnProperty(code)) {\n var balInfoAndState = {\n code: code,\n checked: false,\n enabled: true,\n intent: false,\n fake: false\n };\n\n if (showBalanceCurrencies) {\n balInfoAndState.amount = balance.amount.amount_formatted_currency;\n } else {\n balInfoAndState.amount = balance.amount.amount_formatted;\n }\n // flag that we've cataloged this code\n balanceCodes[code] = balInfoAndState;\n // capture balance details and initial ui state\n balanceList.push(balInfoAndState);\n }\n });\n\n // if this is a primary split-balance plan...\n if (plan.primaryFs.type === 'BALANCE') {\n // add key to template\n // NOTE: easier to build string here, than with template tags\n plan.currencies = [plan.primaryFs.amount.currency_code].concat(balCurCodes).join(', ');\n }\n\n // catalog plan by serial and balances\n serializedPlans[getSerializedPlanId(plan, balCurCodes)] = plan;\n\n // get plan primary\n var serialPrimary = getSerializedPrimary(plan.primaryFs);\n\n // if haven't indexed the primary...\n if (!primaryFsIds.hasOwnProperty(serialPrimary)) {\n // note that we've cataloged this primary\n primaryFsIds[serialPrimary] = 1;\n // capture plan with unique primary\n primaryList.push(plan);\n }\n });\n\n // sort unique balances by currency code\n // TODO(refactor): part of $MultiFiPlanFactory.getCompositeBalances() logic\n balanceList.sort(function (balA, balB) {\n // balance codes are never the same, so no need to return 0\n return balA.code < balB.code ? -1 : 1;\n });\n\n // expose to template\n this.isMultipleBalance = showBalanceCurrencies;\n\n // filtering primary list by PAD specific logic so it combines IACH and PAD together\n if (this.padToggleFeature.enabled) {\n primaryList = checkoutSession.fundingOptions.getPadAndIachCombinedPlans(primaryList);\n }\n\n this.primaryList = primaryList;\n }\n\n // TODO(refactor): use $MultiFiPlanFactory.getPlansByPrimaryId()\n var getPlansByPrimaryId = function getPlansByPrimaryId(pid) {\n var matchingPlans = {};\n\n // with each serialized plan\n for (var key in serializedPlans) {\n // if this key is not inherited and begins with this pid...\n if (serializedPlans.hasOwnProperty(key) && !key.indexOf(pid)) {\n // add to matched plans\n matchingPlans[key] = serializedPlans[key];\n }\n }\n return matchingPlans;\n };\n\n // checkPad() determines whether to show/hide the PAD warning message and PAD label\n var checkPad = function checkPad() {\n var _$BalanceFactory$getP = _factory.$BalanceFactory.getPadAndCheckboxStatus(_this.balanceList, masterPlanList),\n isChecked = _$BalanceFactory$getP.isChecked,\n hasPad = _$BalanceFactory$getP.hasPad;\n\n // only display this warning message to current user who have selected PayPal balance and\n // currently has a PAD type funding option\n\n\n _this.displayPadMessage = isChecked && hasPad;\n // display PAD label when PayPal balance is unchecked\n _this.displayPadLabel = isChecked === false;\n\n _factory.$BalanceFactory.set({ checkbox: isChecked });\n };\n\n // if user had previously selected any balance and then tried to select PayPal DE installments,\n // we automatically uncheck balance and surface warning message\n this.verifyBalanceWithInstallments = function () {\n if (balanceCodes) {\n _squid.$util.forEach(balanceCodes, function (balance, code) {\n if (balance.enabled && balance.checked && _this.selectedmethod && _this.selectedmethod.index === 'applyForPPCRadio') {\n\n balance.enabled = false;\n balance.checked = false;\n balance.intent = false;\n _this.displayDeInstallmentWarningMessage = true;\n }\n });\n }\n };\n\n // if DE installments is selected and user try to select balance, we allow balance to be selected but\n // then we switch their FI selection back-up to a card or bank and then surface warning message\n var checkBalanceWithInstallments = function checkBalanceWithInstallments() {\n if (_this.showInstallmentsFiTitle()) {\n var anyBalanceChecked = false;\n if (balanceCodes) {\n _squid.$util.forEach(balanceCodes, function (balance, balanceCode) {\n if (balance.enabled && balance.checked && _this.selectedmethod && _this.selectedmethod.index === 'applyForPPCRadio') {\n\n anyBalanceChecked = true;\n _this.selectedmethod.index = 0;\n _this.displayDeInstallmentWarningMessage = true;\n }\n });\n }\n if (!anyBalanceChecked) {\n _this.displayDeInstallmentWarningMessage = false;\n }\n }\n };\n\n this.capUserIntent = function (code, state) {\n var balance = balanceCodes[code];\n\n // if this balance is enabled...\n if (balance.enabled) {\n // capture user triggered state change\n balance.intent = state;\n }\n\n // check DE installments related business logic to display installments and warning message\n checkBalanceWithInstallments();\n\n // check PAD related business logic to display PAD label and PAD warning message\n checkPad();\n };\n\n // check if plan is MEFT and has associated IACH bank\n var isMEFTWithIACH = function isMEFTWithIACH(plan) {\n if (!checkoutSession.fundingOptions.isMEFT(plan)) {\n return false;\n }\n return masterPlanList.some(function (p) {\n return plan.primaryFs && plan.primaryFs.id === p.primaryFs.id && checkoutSession.fundingOptions.isIACH(p);\n });\n };\n\n // for PAD eligible countries only we show preferred only for PAD or IACH banks\n var showPreferredLabelForPadEligibleCountries = function showPreferredLabelForPadEligibleCountries(isPAD, isMEFT, isIACHWithPad) {\n return (isPAD || isIACHWithPad) && _this.padToggleFeature.enabled && !isMEFT; // if it's pad or iach and not meft\n };\n\n // for all countries except DE check if it's not PAD bank and not a MEFT bank with associated IACH\n var showPreferredLabelForAll = function showPreferredLabelForAll(isPAD, meftWithIach) {\n return !isPAD && !meftWithIach;\n };\n\n // for PAD isPreferred will never be true\n // only MEFT and IACH subtypes can have isPreferred as true\n this.showPreferredLabel = function (plan) {\n var preferred = checkoutSession.fundingOptions.isPreferred(plan);\n var isPAD = checkoutSession.fundingOptions.isPAD(plan);\n var isMEFT = checkoutSession.fundingOptions.isMEFT(plan);\n var isIACHWithPad = checkoutSession.fundingOptions.isIACHWithPad(plan);\n var meftWithIach = isMEFTWithIACH(plan);\n\n return !_this.isBilling && !_this.isReferenceCheckout && preferred && _this.preferredFiVariant && (showPreferredLabelForAll(isPAD, meftWithIach) || showPreferredLabelForPadEligibleCountries(isPAD, isMEFT, isIACHWithPad));\n };\n\n // Update the balance checkbox states based on the index of primaryFs user has selected\n this.updateBalances = function (index, clickChosenPlan) {\n var primary = primaryList[index].primaryFs;\n var bankOrOther = primary.type === 'BANK' ? 'BANK' : 'OTHER';\n var primaryCodeAsBalance = primary.type === 'BALANCE' && primary.amount.currency_code;\n var pid = getSerializedPrimary(primary);\n var matchingPlans = getPlansByPrimaryId(pid);\n\n // if no balances, set selected planId to the matching primaryFs by pid (should only be one) and exit early\n if (!balanceList.length) {\n if (matchingPlans.hasOwnProperty(pid)) {\n // capture the matching plan (needed by xo-reuse)\n selectedmethod.planId = matchingPlans[pid].planId;\n }\n\n return;\n }\n\n // Otherwise, match the balances based on index of user choice\n var combinedSerials = Object.keys(matchingPlans).join();\n var cardName = cardMap[primary.name] || bankOrOther;\n var includeCodes = [];\n var excludeCodes = [];\n\n var selectedPlan = primaryList[index]; // current selected plan\n var id = selectedPlan.secondaryFIs.length && selectedPlan.primaryFs.subtype === 'IACH' && selectedPlan.primaryFs.padPlanId || selectedPlan.secondaryFIs === false && selectedPlan.primaryFs.subtype === 'PAD' && selectedPlan.primaryFs.iachPlanId;\n\n var foundCorrespondingPlan = masterPlanList.some(function (plan) {\n return plan.planId === id;\n });\n\n // if we are displaying a balance warning message for de installments we will clear it\n if (_this.displayDeInstallmentWarningMessage) {\n _this.displayDeInstallmentWarningMessage = false;\n }\n // with each balance...\n // TODO(refactor)\n _squid.$util.forEach(balanceCodes, function (balState, code) {\n var isFake =\n\n // When the primary is Balance with the same currency\n // user cannot deselect this balance, so show fake selected+disabled checkbox\n balState.fake = primaryCodeAsBalance === code;\n\n // if faking this checkbox\n if (isFake) {\n // fake that it's being forced\n includeCodes.push(code);\n }\n\n // if no plans allow this balance...\n if (combinedSerials.indexOf(code) === -1 && !foundCorrespondingPlan) {\n // deselect and disable this balance\n balState.checked = balState.enabled = false;\n if (!isFake) {\n // add currency code to exclude list\n excludeCodes.push(code);\n }\n } else if (foundCorrespondingPlan && _this.padToggleFeature.enabled) {\n // checks for crossed combination between IACH and PAD\n balState.enabled = true;\n balState.checked = balState.intent;\n } else if (selectedPlan.secondaryFIs === false && selectedPlan.primaryFs.subtype === 'PAD') {\n // disable balance if selected plan is PAD\n balState.enabled = false;\n balState.checked = false;\n } else {\n _this.installment = _this.installment || {};\n _this.installment.isSplitBalance = true;\n\n // assume all plans require this balance\n var requiresBalance = true;\n\n // with each plan...\n for (var serial in matchingPlans) {\n // if it can be used without this balance...\n if (matchingPlans.hasOwnProperty(serial) && serial.indexOf(code) === -1) {\n // flag that all plans do not use this balance\n requiresBalance = false;\n break;\n }\n }\n // if this balance is required for this (or all) plans...\n if (requiresBalance) {\n // select this balance\n balState.checked = true;\n // disable this balance\n balState.enabled = false;\n\n // add currency code to include list\n includeCodes.push(code);\n } else {\n // (otherwise) when this balance is optional for this primaryFs...\n // just enable the balance checkbox\n balState.enabled = true;\n // use intent state to persist user intent\n balState.checked = balState.intent;\n }\n }\n });\n\n // if not a balance plan, and we have any include and/or exclude messages to display...\n if (primary.type !== 'BALANCE' && (includeCodes.length || excludeCodes.length)) {\n var msgs = [];\n var fiName = (0, _squid.$renderContent)('fsMappings.' + primary.name).string || primary.name;\n\n // log when user messaging occurs\n _logger.$logger.info('checkout_fpti', {\n primary: primary.id || primary.type,\n denied: excludeCodes.join(),\n forced: includeCodes.join()\n });\n\n // build include and exclude messages\n [['yes', includeCodes], ['no', excludeCodes]].forEach(function (pair) {\n var codes = pair[1];\n var codesLn = codes.length;\n\n // if there are codes to report as in/ex-cluded...\n if (codesLn) {\n var msgKey = 'memberReview.' + pair[0] + 'Bal_' + cardName;\n var msgObj = { fi: fiName };\n\n // if more than one code...\n if (codesLn > 1) {\n // use plural content key\n msgKey += '_plural';\n // if more than two codes...\n if (codesLn > 2) {\n // group all but the last as the first code\n msgObj.code1 = codes.slice(0, -1).join(', ');\n // use last code alone\n msgObj.code2 = codes[codes.length - 1];\n } else {\n // set code to each token\n msgObj.code1 = codes[0];\n msgObj.code2 = codes[1];\n }\n } else {\n // (otherwise) when only one code...\n // list as first code\n msgObj.code1 = codes[0];\n }\n // capture final message\n msgs.push((0, _squid.$renderContent)(msgKey, msgObj));\n }\n });\n // show informational messages\n checkoutSession.message = {\n msgs: msgs,\n type: 'info'\n };\n } else {\n // clear (any) existing message(s)\n checkoutSession.message = '';\n }\n\n // check PAD related business logic to display PAD label and PAD warning message\n checkPad();\n if (_this.selectedmethod.planId === 0 && clickChosenPlan) {\n _this.selectedmethod.planId = clickChosenPlan.planId;\n }\n };\n\n // determine which plan to pre-select\n\n // if BA txn...\n if (this.isBillingNoPurchase) {\n // just deal with plan id - ignore index approach\n var selectStickyInstrument = checkoutSession.getSelectedStickyInstrument();\n\n if (selectStickyInstrument) {\n selectedmethod.planId = selectStickyInstrument.instrument_id;\n }\n } else if (balanceList.length) {\n // (or) there are balances...\n\n // Select checkboxes by default if first plan has balances by default\n if (masterPlanList[0].secondaryFIs) {\n masterPlanList[0].secondaryFIs.forEach(function (bal) {\n _this.capUserIntent(bal.amount.currency_code, true);\n });\n }\n\n // update balance checkboxes for the first/default selected plan\n this.updateBalances(0);\n } else {\n\n // (otherwise) without balances...\n\n // honor preferred/active/current plan\n var preferredPlanId = checkoutSession.plan.id;\n\n // behave as if the preferred plan were selected - if not, the first/default\n var preferredPlanIndex = _squid.$util.findIndex(primaryList, function (plan) {\n return plan.planId === preferredPlanId;\n }) || 0;\n\n var plan = primaryList[preferredPlanIndex];\n\n if (plan) {\n // specify selected method\n selectedmethod.index = preferredPlanIndex;\n\n // capture preferred plan id - should be same as `preferredPlanId`\n selectedmethod.planId = plan.planId;\n }\n }\n\n this.getBAPlans = function () {\n return checkoutSession.futurePaymentInstruments;\n };\n\n // Check if is variant where preferred can be set\n var preferredFiVariants = _squid.$config.choiceExperiment && _squid.$config.choiceExperiment.preferredCheckbox || [];\n\n this.preferredFiVariant = preferredFiVariants.indexOf(this.models.variant) > -1;\n\n var updateFS = function updateFS() {\n var planId = void 0;\n\n if (_this.selectedmethod.index === 'applyForPPCRadio') {\n return _squid.$promise.resolve();\n }\n\n // if BA plans...\n if (_this.isBillingNoPurchase) {\n planId = selectedmethod.planId;\n } else {\n\n // (otherwise) resolve plan from index and checked balance checkboxes\n\n var index = selectedmethod.index;\n var _plan = primaryList[index];\n\n // TODO: refactor this to FundingOptionsModel\n var getPadSplitBalPlan = function getPadSplitBalPlan(currentPlan) {\n return masterPlanList && masterPlanList.find(function (p) {\n return p.primaryFs.id === currentPlan.primaryFs.id && p.primaryFs.subtype === 'IACH' && p.secondaryFIs && p.secondaryFIs.length;\n });\n };\n\n // find iach or pad plan without balance\n var getIachOrPadPlanWithoutBalance = function getIachOrPadPlanWithoutBalance(currentPlan) {\n return masterPlanList.find(function (p) {\n return p.primaryFs.id === currentPlan.primaryFs.id && (checkoutSession.fundingOptions.isIACH(p) || checkoutSession.fundingOptions.isPAD(p)) && !p.secondaryFIs;\n });\n };\n\n // check if plan is IACH with a balance\n var isPlanIachWithBalance = function isPlanIachWithBalance(p) {\n return checkoutSession.fundingOptions.isIACH(p) && p.secondaryFIs && p.secondaryFIs.length;\n };\n\n var isChecked = balanceList.some(function (balance) {\n return balance.checked;\n });\n var planWithSplitBal = getPadSplitBalPlan(_plan);\n\n // if balance checkbox is checked make sure the selected plan is correct by looking for a plan with a balance\n // otherwise if unchecked and selected plan has balance -> find plan without balance\n if (isChecked) {\n if (planWithSplitBal) {\n _plan = planWithSplitBal;\n }\n } else if (isPlanIachWithBalance(_plan)) {\n var planWithIachOrPad = getIachOrPadPlanWithoutBalance(_plan);\n\n if (planWithIachOrPad) {\n _plan = planWithIachOrPad;\n }\n }\n\n // get plan with serial, built from user selections\n // TODO(refactor): use $MultiFiPlanFactory.getCheckedBalances()\n var checkedBalances = [];\n\n _squid.$util.forEach(balanceCodes, function (balance, code) {\n if (balance.checked) {\n checkedBalances.push(code);\n }\n });\n\n // use plan with this primaryFs and balance options\n var fundingsource = serializedPlans[getSerializedPlanId(_plan, checkedBalances)];\n\n // if no plan matches the user's selections...\n if (!fundingsource) {\n\n // FUZZY MATCHING x-{\n\n var pid = getSerializedPrimary(_plan.primaryFs);\n var pidForLogger = _plan.primaryFs.id || _plan.primaryFs.type;\n\n _logger.$logger.info('checkout_fpti', {\n primary: pidForLogger,\n denied: checkedBalances.join()\n });\n\n // (perhaps only one of the selected balances is applicable?)\n\n // find a plan with each individual balance\n checkedBalances.some(function (code) {\n // match plan with this serial combination\n fundingsource = serializedPlans[pid + code];\n return fundingsource;\n });\n\n // flag that one of the checked balances was unusable\n if (fundingsource) {\n _logger.$logger.info('checkout_fpti', {\n primary: pidForLogger,\n denied: checkedBalances.join()\n });\n }\n\n // if no plan yet...\n // (perhaps the plan doesn't have any balance combination?)\n if (!fundingsource) {\n // get the plan with just this primaryFs\n fundingsource = serializedPlans[pid];\n // if we now have a plan...\n if (fundingsource) {\n _logger.$logger.info('checkout_fpti', {\n primary: pidForLogger,\n denied: checkedBalances.join()\n });\n }\n }\n\n // if still no plan...\n // (at this point, the plan requires a specific balance combination)\n if (!fundingsource) {\n var serializedPlanKeys = Object.keys(serializedPlans);\n\n // use the first plan that begins with this primary id\n fundingsource = serializedPlans[serializedPlanKeys[_squid.$util.findIndex(serializedPlanKeys, function (serial) {\n return serial.indexOf(pid) === 0;\n })]];\n\n _logger.$logger.info('checkout_fpti', {\n primary: pidForLogger,\n forced: balanceList.map(function (balance) {\n return balance.code;\n }).join()\n });\n }\n }\n // use of the matched plan\n planId = fundingsource.planId;\n }\n\n if (_this.isBillingNoPurchase && checkoutSession.getSelectedStickyInstrument() && checkoutSession.getSelectedStickyInstrument().instrument_id !== planId) {\n return checkoutSession.action('setStickyFI', {\n data: {\n instrument_id: planId\n },\n success: function success(result) {\n checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n return result;\n },\n DEFAULT: function DEFAULT() {\n // Error message for failures\n _uiRouter.$state.go('checkout.review');\n }\n });\n } else if (!_this.isBillingNoPurchase && checkoutSession.get('plan.sources')[0].id !== planId) {\n\n return checkoutSession.fundingOptions.action('select', {\n data: {\n planId: planId\n },\n success: function success(result) {\n checkoutSession.populate(result);\n return result;\n },\n contingencies: {\n NEED_AUTHENTICATED_CARD: function NEED_AUTHENTICATED_CARD(name, result) {\n // Route to the Confirm Upop page. When finished, use the default handlers to return to the review page\n if (result && result.resolution) {\n var card = result.resolution.data;\n\n if (card.fundingId && card.fi && card.fi.type) {\n _this.cardModel = new _index.$AddCardModel();\n _this.cardModel.id = card.fundingId;\n _this.cardModel.card = new _index.$CardModel({\n number: 'xxxx-xxxx-xxxx-' + card.fi.number,\n type: card.fi.type.toUpperCase(),\n productType: card.fi.productType\n });\n }\n }\n\n // Reject to break out of the promise chain\n _uiRouter.$state.go('.confirmUpop');\n return _squid.$promise.shortCircuit();\n },\n\n DEFAULT: function DEFAULT() {\n // Error message for failures\n _uiRouter.$state.go('checkout.review');\n }\n }\n });\n } else {\n return _squid.$promise.resolve();\n }\n };\n\n this['continue'] = function (evt) {\n return updateFS().then(function (result) {\n _logger.$logger.debug('xo_credit_banner_monitoring', { tag: 'T4' });\n // clear (any) existing message(s)\n checkoutSession.message = '';\n\n // Decide routing after update\n if (result) {\n // Update the installments to support the user selecting a card that does not support installments.\n _this.models.checkoutSession.installments = result.installments;\n }\n if (_this.models.checkoutSession.get('plan.paypal_credit') || _this.selectedmethod.index === 'applyForPPCRadio') {\n // for PPC reuse radio banner testing we want to indicate whether the user selected PPC via radio button or banner.\n _logger.$logger.info('checkout_fpti', {\n from: 'clickPPCReuse',\n to: 'radio_click'\n });\n }\n // If paypal credit, check for installments and redirect if needed\n if ((_this.models.checkoutSession.get('plan.paypal_credit') || _this.selectedmethod.index === 'applyForPPCRadio') && _this.models.checkoutSession.creditInstallmentOffer) {\n var token = _this.props.token;\n var installments = _checkout.$InstallmentOptionsModel.instance(token);\n var data = {\n isMemberCredit: true\n };\n\n return (0, _squid.$populate)(data, {\n payee: _this.models.checkoutPayeeModel,\n checkoutCart: _checkout.$CheckoutCartModel.instance(token),\n checkoutAppData: _this.models.checkoutAppData\n }).then(function () {\n if ((0, _squid.$feature)('creditInstallmentOffers')) {\n return installments.save({\n cache: true, // Cache between here and $ChoiceEligibilityModel\n data: data,\n success: function success(installmentResult) {\n var offers = installmentResult.installments && installmentResult.installments[0];\n var hasInstallments = offers && offers.installment_options && offers.installment_options.length;\n\n return hasInstallments;\n },\n contingencies: {\n DEFAULT: function DEFAULT() {\n // Assume is eligible if contingency\n return false;\n }\n },\n error: function error() {\n return false;\n }\n });\n } else {\n return false;\n }\n }).then(function (hasInstallments) {\n if (hasInstallments) {\n // This flag is set in the xo-credit-components banner. If its true we will take customers to the new CYCO page in CAPE\n return _this.models.creditSharedInfo.getRedirectToCapeCyco() ? _uiRouter.$state.go('checkout.redirectToCape', { showCapeCyco: true }) : _uiRouter.$state.go('checkout.chooseCreditOffer');\n } else if (_this.selectedmethod.index === 'applyForPPCRadio') {\n if (_this.isCountryDE && _this.models.creditSharedInfo.hasInstallmentOffers() && _this.models.creditSharedInfo.hasInstallmentOfferFinancingDetails()) {\n return _uiRouter.$state.go('checkout.redirectToCape', { financing_option: _this.models.creditSharedInfo.getInstallmentOfferFinancingDetails() });\n } else {\n return _uiRouter.$state.go('checkout.redirectToCape');\n }\n } else {\n return _uiRouter.$state.go('checkout.review');\n }\n });\n } else {\n return _uiRouter.$state.go('checkout.review');\n }\n });\n };\n }\n },\n controller: ['$scope', function ($scope) {\n _angular.$rootScope.showFiSelectPage = true;\n $scope.installment = $scope.installment || {};\n $scope.installment.showBanner = false;\n $scope.installment.showCYCO = false;\n $scope.installment.showCreditExample = false;\n $scope.showPPCAcquisitionRadioButton = function () {\n return $scope.installment && $scope.installment.showPPCAcquisitionRadioButton;\n };\n $scope.showCreditPlacement = function (plan) {\n return plan && !plan.primaryFs.isPinlessDebit && plan.primaryFs.name === 'BILL_ME_LATER';\n };\n }]\n});\n\nangular.value(\"$xoSelectFiComponent\", $xoSelectFiComponent);\n_squid.$Component;\n\n_squid.$renderContent;\n\n_squid.$populate;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$integration;\n\n_squid.formatNameInformal;\n\n_squid.$util;\n\n_squid.$locale;\n\n_squid.$promise;\n\n;\n\n_angular.noop;\n\n_angular.$rootScope;\n\n_angular.$q;\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$InstallmentOptionsModel;\n\n_checkout.$CheckoutPayeeModel;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_credit.$CreditSharedInfoModel;\n\n_choice.$ChoiceEligibility;\n\n_index.$AddCardModel;\n\n_index.$CardModel;\n\n_fiMessages.$fiMessages;\n\n_factory.$BalanceFactory;\n\n_cardartInstrument.$CardArtInstrument;\n\n_sharedUtil.$SharedUtil;\n\n_balance.$BalanceEligibilityFactory;\n\n/***/ }),\n\n/***/ \"./pages/xo-select-fi/route.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$SelectFiRoute = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _directive = __webpack_require__(\"./pages/xo-select-fi/directive.js\");\n\nvar $SelectFiRoute = exports.$SelectFiRoute = _squid.$ComponentRoute.extend('$SelectFiRoute', {\n path: 'selectFi',\n directive: _directive.$xoSelectFiComponent,\n titleContent: 'memberReview.selectFi',\n trackingData: {\n fptiState: 'choose_FI_interstitial',\n buzname: {\n 'fullpage': {\n 'pagename': '%::select-fi',\n 'pagename2': '%::select-fi:member:hermes:',\n 'version': 'member:%:'\n }\n }\n },\n children: [{\n name: '$xoConfirmUpopRoute',\n props: function props() {\n return {\n token: this.props.token,\n cardmodel: this.cardModel\n };\n },\n\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(1/* duplicate */).then(__webpack_require__.bind(null, \"../node_modules/xo-wallet-components/src/confirm-upop/route.js\"));\n },\n slug: 'confirmUpop'\n }]\n});\n\nangular.value(\"$SelectFiRoute\", $SelectFiRoute);\n_squid.$ComponentRoute;\n\n_directive.$xoSelectFiComponent;\n\n/***/ }),\n\n/***/ \"./pages/xo-select-fi/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"./pages/xo-select-fi/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n \\n\\n
\\n
\\n \\n \\n

\\n {{ content(!personalizedBanner.isFBSkipLogin ? 'memberReview.loggedInWithOneTouch' : 'memberReview.loggedInFaceBookBA', {userName: formattedNameInformal, lastName: models.auth.last_name, firstName: models.auth.first_name}) }}\\n \\n \\n \\n

\\n
\\n \\n \\n
\\n

\\n {{ content('creditcard.hi', {userName: formattedNameInformal}) }}\\n \\n \\n \\n

\\n
\\n\\n
\\n
\\n
\\n
\\n

\\n {{ content('memberReview.selectFi') }}\\n

\\n\\n
\\n \\n
\\n\\n \\n \\n \\n \\n \\n \\n
\\n
\\n\\n
\\n {{ content('memberReview.padWarningMsg') }}\\n
\\n\\n
\\n {{ content('memberReview.balanceInstallmentsConflictMsg') }}\\n
\\n\\n
    \\n \\n
  • \\n \\n
    \\n \\n\\n \\n
    \\n
    \\n\\n \\n
    \\n \\n\\n \\n
    \\n
    \\n
    \\n {{ content('paymentMethod.eCheckDescription') }}\\n
    \\n
    \\n
    \\n
  • \\n
  • \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n\\n
  • \\n\\n
  • \\n
    \\n

    \\n
    \\n \\n \\n
    \\n
    \\n
  • \\n\\n
\\n\\n
\\n \\n
\\n\\n \\n\\n \\n\\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n\\n \\n\\n
\\n
\\n \\n
\\n \\n \\n
\\n \\n
\\n
\\n\"\n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// js/3.ba8053918910d4cc0440.js","\n\nexports.__esModule = true;\nexports.$xoSelectFiComponent = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\nvar _uiRouter = require('uiRouter');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _checkout = require('xo-models/src/checkout');\n\nvar _credit = require('xo-models/src/credit');\n\nvar _choice = require('xo-models/src/choice');\n\nvar _index = require('xo-models/src/fi/index');\n\nvar _fiMeta = require('xo-models/src/fiMeta');\n\nvar _fiMeta2 = _interopRequireDefault(_fiMeta);\n\nvar _fiMessages = require('xo-models/src/fi/lib/fiMessages');\n\nrequire('js/lib/index');\n\nrequire('xo-ui-components/src/message/directive');\n\nrequire('xo-ui-components/src/banner/directive');\n\nrequire('xo-title/dist/directive');\n\nrequire('xo-models/src/fi/lib/fiApis');\n\nrequire('xo-ui-components/src/fi-panel/directive');\n\nrequire('xo-ui-components/src/experience/directive');\n\nrequire('xo-device-info/dist/index');\n\nrequire('xo-credit-components/src/xo-credit-offer-banners/gb-banner/xo-credit-example-uk/directive');\n\nrequire('xo-credit-components/src/xo-credit-offer-banners/directive');\n\nrequire('xo-member-components/src/review-paywith/directive');\n\nrequire('xo-page-components/src/marketingOffers/directive');\n\nrequire('xo-page-components/src/notYou/directive');\n\nvar _factory = require('./factory');\n\nvar _cardartInstrument = require('../services/cardart-instrument');\n\nvar _experiments = require('xo-models/src/experiments');\n\nvar Experiments = _interopRequireWildcard(_experiments);\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nvar _sharedUtil = require('../services/shared-util');\n\nvar _balance = require('../services/balance');\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoSelectFiComponent = exports.$xoSelectFiComponent = _squid.$Component.extend('$xoSelectFiComponent', {\n tag: 'xo-select-fi',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutSession: _checkout.$CheckoutSessionModel.instance(this.props.token).retrieve(),\n cart: _checkout.$CheckoutCartModel.instance(this.props.token).retrieve(),\n auth: _auth.$AuthModel.instance().retrieve(),\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance(this.props.token).retrieve(),\n variant: _choice.$ChoiceEligibility.instance().getVariant(this.props.token),\n checkoutPayeeModel: _checkout.$CheckoutPayeeModel.instance(this.props.token).retrieve(),\n fiMeta: _fiMeta2['default'].instance(this.props.token).fetch()['catch'](_angular.noop),\n creditSharedInfo: _credit.$CreditSharedInfoModel.instance()\n };\n },\n fiSource: function fiSource(resolvers) {\n return resolvers.models.then(function (models) {\n return {\n isCardArtExp: _cardartInstrument.$CardArtInstrument.isCardArtEnable(models.fiMeta),\n isBilling: models.cart && models.cart.isBilling(),\n isBillingNoPurchase: models.cart && models.cart.isBillingNoPurchase()\n };\n });\n },\n padToggleFeature: function padToggleFeature(resolvers) {\n return resolvers.models.then(function (models) {\n var enabled = void 0;\n\n if (models.checkoutSession.fundingOptions.isPadToggleApplicable()) {\n enabled = Experiments.padToggleFeatureSupported();\n } else {\n // if pad not available\n enabled = false;\n }\n return { enabled: enabled };\n });\n },\n isCPAEligible: function isCPAEligible(resolvers) {\n return resolvers.models.then(function (models) {\n _sharedUtil.$SharedUtil.checkCpaEligibility(models.checkoutSession).then(function (inCpaElmoTreatment) {\n return inCpaElmoTreatment || false;\n });\n });\n },\n balanceComprehensionBannerExperiment: function balanceComprehensionBannerExperiment(resolvers) {\n return resolvers.models.then(function (models) {\n if (!models) {\n return _angular.$q.when();\n }\n return Experiments.balanceComprehensionBannerExperiment.getTreatment({\n page: 'choice',\n cart: models.cart,\n checkoutAppData: models.checkoutAppData,\n checkoutSession: models.checkoutSession,\n payee: models.checkoutPayeeModel\n })['catch'](function () {\n _logger.$logger.info('balanceComprehensionBannerExperiment_GET_TREATMENT_ERROR', { page: 'choice' });\n return _angular.$q.when();\n });\n });\n },\n balanceEligibility: function balanceEligibility(resolvers) {\n return resolvers.models.then(function (models) {\n if (!models) {\n return _angular.$q.when();\n }\n return _balance.$BalanceEligibilityFactory.init({ checkoutSession: models.checkoutSession }).then(function (state) {\n return state;\n })['catch'](function (err) {\n _logger.$logger.warn('AU_BALANCE_ELIGIBILITY_INIT_ERROR', { error: err.toString() || err.stack });\n return _angular.$q.when();\n });\n });\n }\n },\n lifecycle: {\n enter: function enter() {\n // make this better\n this.propValueObj = {\n propHeader: 'memberReview.propHead',\n propVal: 'memberReview.propVal',\n propImage: 'https://www.paypalobjects.com/images/checkout/hermes/scr_vp_fprd_shield_bags.png'\n };\n this.isMessengerBAIntegration = _squid.$integration.getConfig('IS_MESSENGER_BA_INTEGRATION');\n this.personalizedBanner = {\n show: false\n };\n this.locale = _squid.$locale;\n this.isCountryDE = _squid.$locale.country === 'DE';\n this.addBankAllowed = (0, _squid.$feature)('addBank');\n },\n populate: function populate() {\n var _this = this;\n\n var _models = this.models,\n cart = _models.cart,\n checkoutSession = _models.checkoutSession;\n var _fiSource = this.fiSource,\n isCardArtExp = _fiSource.isCardArtExp,\n isBilling = _fiSource.isBilling,\n isBillingNoPurchase = _fiSource.isBillingNoPurchase;\n\n var masterPlanList = checkoutSession.getPlanList(); // initial fundingOptions that's returned by planning (unmodified)\n _fiMessages.$fiMessages.isDeclinedCard(checkoutSession);\n var isCreditDisallowedForMerchant = checkoutSession.isCreditDisallowedForMerchant;\n if (isCreditDisallowedForMerchant) {\n this.creditDisallowedMessage = {\n type: 'info',\n msgs: [_squid.$locale.content.get('memberReview.useDebitCard')]\n };\n }\n\n if (this.balanceComprehensionBannerExperiment && this.balanceComprehensionBannerExperiment.treatment_name) {\n this.showBalanceComprehensionBannerTop = this.balanceComprehensionBannerExperiment.treatment_name === 'Trmt_balance_banner_ramp_hermes_top';\n this.showBalanceComprehensionBannerBottom = this.balanceComprehensionBannerExperiment.treatment_name === 'Trmt_balance_banner_ramp_hermes_bottom';\n this.balanceComprehensionBannerMessage = {\n type: 'info',\n msgs: [_squid.$locale.content.get('billingAgreement.paypalBalanceInfoBanner')]\n };\n }\n\n this.isBilling = isBilling;\n this.isBillingNoPurchase = isBillingNoPurchase;\n this.isReferenceCheckout = cart.referenceCheckout ? true : false;\n this.personalizedBanner.show = this.models.auth.rememberedOT() && (0, _squid.$feature)('oneTouchPersonalization') || this.models.auth.isFBSkipLogin();\n // for Facebook skip login set isFBSkipLogin as true to modify the skip login content\n this.personalizedBanner.isFBSkipLogin = this.models.auth.isFBSkipLogin();\n this.showNotYou = this.models.auth && this.models.auth.showNotYou();\n this.formattedNameInformal = (0, _squid.formatNameInformal)({\n first_name: this.models.auth.first_name,\n last_name: this.models.auth.last_name\n }) || this.models.auth.email;\n\n if (_squid.$locale.country === 'DE' && checkoutSession.creditOffer) {\n this.installment.showPPCAcquisitionRadioButton = true;\n }\n\n this.isIndiaDomesticBilling = isBilling && _squid.$locale.country === 'IN' && this.models.checkoutAppData.get('merchant.merchant_country', 'US') === 'IN';\n if (this.isIndiaDomesticBilling) {\n this.choicePageAddCardContentKey = 'fundingInstruments.addNewCardBilling';\n if (cart.isConsumerCountry('IN') && cart.isBilling()) {\n if (cart.isChargePatternImmediateOrDeferred()) {\n this.choicePageAddCardContentKey = 'fundingInstruments.immediate.addNewCardBilling';\n } else {\n this.choicePageAddCardContentKey = 'fundingInstruments.non.immediate.addNewCardBilling';\n }\n }\n } else if (isCreditDisallowedForMerchant) {\n this.choicePageAddCardContentKey = 'addCard.addBankDebitCard';\n } else {\n this.choicePageAddCardContentKey = 'fundingInstruments.addNewCard';\n }\n\n var merchant = this.models.checkoutAppData.get('merchant');\n var merchantName = merchant.brand_name || merchant.merchant_name || 'Merchant';\n\n this.merchantName = merchantName;\n\n if (this.isIndiaDomesticBilling) {\n checkoutSession.message = {\n type: 'info',\n msgs: [(0, _squid.$renderContent)('memberReview.billingMerchant', { merchantName: merchantName })]\n };\n }\n\n var eligibility = this.balanceEligibility.eligibility;\n // render `CIP_INCOMPLETE` message for PayPal balance\n\n if (_sharedUtil.$SharedUtil.isBoolean(eligibility) && !eligibility) {\n checkoutSession.message = {\n type: 'info',\n msgs: [_squid.$locale.content.get('compliance.cipIncomplete')]\n };\n }\n\n /**\n * If it's cardart experience, log our current FIs (bank or cards)\n * NOTE: `balance` type is not being instrumented at the moment, cardart\n * instrumentation is only applicable to credit cards & banks right now.\n * See $CardArtInstrument.createPayload() for detail implmenetation\n */\n if (isCardArtExp) {\n _logger.$logger.info('checkout_fpti', _extends({\n from: 'CHOICE',\n to: 'prepare_choice'\n }, _cardartInstrument.$CardArtInstrument.createPayload({\n checkoutSession: checkoutSession,\n isBillingNoPurchase: isBillingNoPurchase\n })));\n }\n\n /**\n * checks for PPC in the wallet and selected as fi\n * This Determines whether to show the banner or not for a reuse customer\n */\n var isPPCReuseAndNotSelected = function isPPCReuseAndNotSelected() {\n if (_this.isBillingNoPurchase) {\n return checkoutSession.get('futurePayment.isCreditInWallet') && !checkoutSession.get('futurePayment.isCreditDefault');\n } else {\n var plans = checkoutSession.get('fundingOptions.instruments', null);\n if (plans && plans.some(function (fi) {\n return fi.name === 'BILL_ME_LATER' && !fi.selected;\n })) {\n return true;\n } else {\n return false;\n }\n }\n };\n\n /**\n * checks for PPC in the wallet and selected as fi\n * This Determines whether to show the banner or not for a reuse customer\n */\n var isPPCReuseAndNotPreferred = function isPPCReuseAndNotPreferred() {\n if (_this.isBillingNoPurchase) {\n return checkoutSession.get('futurePayment.isCreditInWallet') && !checkoutSession.get('futurePayment.isCreditDefault');\n } else {\n var plans = checkoutSession.get('fundingOptions.instruments', null);\n if (plans && plans.some(function (fi) {\n return fi.name === 'BILL_ME_LATER' && !fi.isPreferred;\n })) {\n return true;\n } else {\n return false;\n }\n }\n };\n\n /**\n * this is set in xo-credit-components for REUSE NI customers as apart of T1 for A/B tests\n **/\n this.showSpecialFinancingBadge = function () {\n return _angular.$rootScope.specialFinancingBadge && isPPCReuseAndNotPreferred();\n };\n\n /* checks for eligibility for acq PPC or PPC in wallet and not selected for reuse */\n this.creditOffer = checkoutSession.creditOffer || isPPCReuseAndNotSelected();\n\n this.showInstallmentsFiTitle = function () {\n return _this.isCountryDE && _this.ppcInstallmentContentReady();\n };\n\n this.getInstallmentsFiTitle = function () {\n if (_this.models.creditSharedInfo.getInstallmentOffer() && _this.models.creditSharedInfo.getInstallmentOffer().taglineText) {\n // This tagline text will be localization already by Personalization platform\n return _this.models.creditSharedInfo.getInstallmentOffer().taglineText;\n }\n return _squid.$locale.content.get('memberReview.installmentsTitle');\n };\n\n this.ppcInstallmentContentReady = function () {\n return _this.models.creditSharedInfo.hasInstallmentOffers() && _this.models.creditSharedInfo.hasInstallmentOfferFinancingDetails();\n };\n\n this.continueButtonText = function () {\n if (_this.selectedmethod && _this.selectedmethod.index === 'applyForPPCRadio') {\n if (_squid.$locale.country === 'DE') {\n return _squid.$locale.content.get('memberReview.bmlContinueToApplication');\n }\n return _squid.$locale.content.get('applyForBml.bmlApplyHeadline');\n } else {\n return _squid.$locale.content.get('common.continuetext');\n }\n };\n\n /**\n * returns the cross currency conversion rate for the PPC wallet fi when a cross-currency\n * cart is found during the GB hermes checkout flow\n *\n */\n var getPPCCrossCurrencyInfo = function getPPCCrossCurrencyInfo() {\n if (!_this.isBillingNoPurchase && _squid.$locale.country === 'GB') {\n var plans = checkoutSession.get('fundingOptions.instruments', null);\n var ppcPlans = plans && plans.filter(function (fi) {\n return fi.name === 'BILL_ME_LATER' && fi.currency_conversion;\n });\n if (ppcPlans && ppcPlans.length === 1) {\n var ppcCurrencyConversion = ppcPlans[0].currency_conversion;\n return Object.assign({ toTargetCurrency: ppcCurrencyConversion.to_amount_forex + ' ' + ppcCurrencyConversion.to_currency }, { fromUnitCurrency: ' 1 ' + ppcCurrencyConversion.from_currency });\n }\n }\n return null;\n };\n this.ppcCrossCurrencyInfo = getPPCCrossCurrencyInfo();\n\n // selected plan model\n var selectedmethod = this.selectedmethod = {\n // first selection to start\n index: 0,\n // needed by xo-reuse and will be resolved later\n planId: 0\n };\n\n var serializedPlans = {}; // index of all plans by primary and balance currency code(s)\n var balanceCodes = {}; // index of cataloged currency codes\n var primaryList = []; // list of plans with unique primaryFs ids\n var balanceList = this.balanceList = []; // list of unique balance currencies\n var cardMap = { // FI names that we know map to content keys\n BILL_ME_LATER: 'BILL_ME_LATER',\n PAD: 'PAD',\n PAYPAL_EXTRAS_MASTERCARD: 'PAYPAL_EXTRAS_MASTERCARD'\n };\n\n this.isUSGambling = function () {\n // US Only Real Money Gaming\n var isUSBuyer = _squid.$locale.country === 'US';\n var isUSmerchant = _this.models.checkoutAppData && _this.models.checkoutAppData.get('merchant.merchant_country') === 'US';\n\n return _this.models.checkoutPayeeModel && _this.models.checkoutPayeeModel.isGambling() && isUSBuyer && isUSmerchant;\n };\n\n // Return a representation of the primaryFs of a plan\n // Based on id, currency code, subtype to ensure uniqueness\n // TODO(refactor): $MultiFiPlanFactory.getSerializedPrimary()\n var getSerializedPrimary = function getSerializedPrimary(primary) {\n var serial = primary.id + primary.amount.currency_code.toLowerCase();\n\n // if there's a subtype...\n if (primary.subtype) {\n serial += primary.subtype;\n }\n return serial;\n };\n\n // return a serialized key for the plan\n // plan - a plan object from checkoutSession.fundingOptions.plans\n // balances - array of currency code strings\n // TODO (refactor): $MultiFiPlanFactory.getSerializedPlanId()\n var getSerializedPlanId = function getSerializedPlanId(plan, balances) {\n var pid = getSerializedPrimary(plan.primaryFs);\n\n // if no balances array...\n if (!balances) {\n // just return the pid\n return pid;\n }\n\n // (otherwise) sort balances\n balances.sort();\n\n return pid + balances.join();\n };\n\n if (masterPlanList) {\n // If more than one fully funded balance plan, show the balance currency next to instrument name\n // TODO(refactor): the entire `showBalanceCurrencies` logic can be abstracted away\n // with $MultiFiPlanFactory.getShowBalanceCurrenciesStatus()\n var showBalanceCurrencies = checkoutSession.isMultipleBalancePlan();\n\n // if not multiple balance plans...\n if (!showBalanceCurrencies) {\n // start with first plan's currency\n var knownCurrency = masterPlanList[0].primaryFs.amount.currency_code;\n\n // update flag if any plan has more than two secondaries or one with a different currency\n showBalanceCurrencies = masterPlanList.some(function (plan) {\n // show currencies, when this plan has a different one, or...\n return plan.primaryFs.amount.currency_code !== knownCurrency ||\n // this plan has secondaries, where...\n plan.secondaryFIs && (\n // there's more than one\n plan.secondaryFIs.length > 1 ||\n // the one has a different currency\n plan.secondaryFIs[0].amount.currency_code !== knownCurrency);\n });\n }\n\n // index of captured primaryFs ids\n var primaryFsIds = {};\n\n // Filter through the masterPlanList, set up the split balance lists for the checkboxes if present, and set up the primary FI list. This is mostly needed for split balance cases\n // TODO(refactor): use $MultiFiPlanFactory.getCompositeBalances() to get `balanceCodes`, `balanceList` and `balCurCodes`\n masterPlanList.forEach(function (plan) {\n var balances = plan.secondaryFIs || [];\n var balCurCodes = [];\n\n // catalog balances\n balances.forEach(function (balance) {\n var code = balance.amount.currency_code;\n\n // capture code (for serialization, next)\n balCurCodes.push(code);\n // if this code has not been cataloged...\n if (!balanceCodes.hasOwnProperty(code)) {\n var balInfoAndState = {\n code: code,\n checked: false,\n enabled: true,\n intent: false,\n fake: false\n };\n\n if (showBalanceCurrencies) {\n balInfoAndState.amount = balance.amount.amount_formatted_currency;\n } else {\n balInfoAndState.amount = balance.amount.amount_formatted;\n }\n // flag that we've cataloged this code\n balanceCodes[code] = balInfoAndState;\n // capture balance details and initial ui state\n balanceList.push(balInfoAndState);\n }\n });\n\n // if this is a primary split-balance plan...\n if (plan.primaryFs.type === 'BALANCE') {\n // add key to template\n // NOTE: easier to build string here, than with template tags\n plan.currencies = [plan.primaryFs.amount.currency_code].concat(balCurCodes).join(', ');\n }\n\n // catalog plan by serial and balances\n serializedPlans[getSerializedPlanId(plan, balCurCodes)] = plan;\n\n // get plan primary\n var serialPrimary = getSerializedPrimary(plan.primaryFs);\n\n // if haven't indexed the primary...\n if (!primaryFsIds.hasOwnProperty(serialPrimary)) {\n // note that we've cataloged this primary\n primaryFsIds[serialPrimary] = 1;\n // capture plan with unique primary\n primaryList.push(plan);\n }\n });\n\n // sort unique balances by currency code\n // TODO(refactor): part of $MultiFiPlanFactory.getCompositeBalances() logic\n balanceList.sort(function (balA, balB) {\n // balance codes are never the same, so no need to return 0\n return balA.code < balB.code ? -1 : 1;\n });\n\n // expose to template\n this.isMultipleBalance = showBalanceCurrencies;\n\n // filtering primary list by PAD specific logic so it combines IACH and PAD together\n if (this.padToggleFeature.enabled) {\n primaryList = checkoutSession.fundingOptions.getPadAndIachCombinedPlans(primaryList);\n }\n\n this.primaryList = primaryList;\n }\n\n // TODO(refactor): use $MultiFiPlanFactory.getPlansByPrimaryId()\n var getPlansByPrimaryId = function getPlansByPrimaryId(pid) {\n var matchingPlans = {};\n\n // with each serialized plan\n for (var key in serializedPlans) {\n // if this key is not inherited and begins with this pid...\n if (serializedPlans.hasOwnProperty(key) && !key.indexOf(pid)) {\n // add to matched plans\n matchingPlans[key] = serializedPlans[key];\n }\n }\n return matchingPlans;\n };\n\n // checkPad() determines whether to show/hide the PAD warning message and PAD label\n var checkPad = function checkPad() {\n var _$BalanceFactory$getP = _factory.$BalanceFactory.getPadAndCheckboxStatus(_this.balanceList, masterPlanList),\n isChecked = _$BalanceFactory$getP.isChecked,\n hasPad = _$BalanceFactory$getP.hasPad;\n\n // only display this warning message to current user who have selected PayPal balance and\n // currently has a PAD type funding option\n\n\n _this.displayPadMessage = isChecked && hasPad;\n // display PAD label when PayPal balance is unchecked\n _this.displayPadLabel = isChecked === false;\n\n _factory.$BalanceFactory.set({ checkbox: isChecked });\n };\n\n // if user had previously selected any balance and then tried to select PayPal DE installments,\n // we automatically uncheck balance and surface warning message\n this.verifyBalanceWithInstallments = function () {\n if (balanceCodes) {\n _squid.$util.forEach(balanceCodes, function (balance, code) {\n if (balance.enabled && balance.checked && _this.selectedmethod && _this.selectedmethod.index === 'applyForPPCRadio') {\n\n balance.enabled = false;\n balance.checked = false;\n balance.intent = false;\n _this.displayDeInstallmentWarningMessage = true;\n }\n });\n }\n };\n\n // if DE installments is selected and user try to select balance, we allow balance to be selected but\n // then we switch their FI selection back-up to a card or bank and then surface warning message\n var checkBalanceWithInstallments = function checkBalanceWithInstallments() {\n if (_this.showInstallmentsFiTitle()) {\n var anyBalanceChecked = false;\n if (balanceCodes) {\n _squid.$util.forEach(balanceCodes, function (balance, balanceCode) {\n if (balance.enabled && balance.checked && _this.selectedmethod && _this.selectedmethod.index === 'applyForPPCRadio') {\n\n anyBalanceChecked = true;\n _this.selectedmethod.index = 0;\n _this.displayDeInstallmentWarningMessage = true;\n }\n });\n }\n if (!anyBalanceChecked) {\n _this.displayDeInstallmentWarningMessage = false;\n }\n }\n };\n\n this.capUserIntent = function (code, state) {\n var balance = balanceCodes[code];\n\n // if this balance is enabled...\n if (balance.enabled) {\n // capture user triggered state change\n balance.intent = state;\n }\n\n // check DE installments related business logic to display installments and warning message\n checkBalanceWithInstallments();\n\n // check PAD related business logic to display PAD label and PAD warning message\n checkPad();\n };\n\n // check if plan is MEFT and has associated IACH bank\n var isMEFTWithIACH = function isMEFTWithIACH(plan) {\n if (!checkoutSession.fundingOptions.isMEFT(plan)) {\n return false;\n }\n return masterPlanList.some(function (p) {\n return plan.primaryFs && plan.primaryFs.id === p.primaryFs.id && checkoutSession.fundingOptions.isIACH(p);\n });\n };\n\n // for PAD eligible countries only we show preferred only for PAD or IACH banks\n var showPreferredLabelForPadEligibleCountries = function showPreferredLabelForPadEligibleCountries(isPAD, isMEFT, isIACHWithPad) {\n return (isPAD || isIACHWithPad) && _this.padToggleFeature.enabled && !isMEFT; // if it's pad or iach and not meft\n };\n\n // for all countries except DE check if it's not PAD bank and not a MEFT bank with associated IACH\n var showPreferredLabelForAll = function showPreferredLabelForAll(isPAD, meftWithIach) {\n return !isPAD && !meftWithIach;\n };\n\n // for PAD isPreferred will never be true\n // only MEFT and IACH subtypes can have isPreferred as true\n this.showPreferredLabel = function (plan) {\n var preferred = checkoutSession.fundingOptions.isPreferred(plan);\n var isPAD = checkoutSession.fundingOptions.isPAD(plan);\n var isMEFT = checkoutSession.fundingOptions.isMEFT(plan);\n var isIACHWithPad = checkoutSession.fundingOptions.isIACHWithPad(plan);\n var meftWithIach = isMEFTWithIACH(plan);\n\n return !_this.isBilling && !_this.isReferenceCheckout && preferred && _this.preferredFiVariant && (showPreferredLabelForAll(isPAD, meftWithIach) || showPreferredLabelForPadEligibleCountries(isPAD, isMEFT, isIACHWithPad));\n };\n\n // Update the balance checkbox states based on the index of primaryFs user has selected\n this.updateBalances = function (index, clickChosenPlan) {\n var primary = primaryList[index].primaryFs;\n var bankOrOther = primary.type === 'BANK' ? 'BANK' : 'OTHER';\n var primaryCodeAsBalance = primary.type === 'BALANCE' && primary.amount.currency_code;\n var pid = getSerializedPrimary(primary);\n var matchingPlans = getPlansByPrimaryId(pid);\n\n // if no balances, set selected planId to the matching primaryFs by pid (should only be one) and exit early\n if (!balanceList.length) {\n if (matchingPlans.hasOwnProperty(pid)) {\n // capture the matching plan (needed by xo-reuse)\n selectedmethod.planId = matchingPlans[pid].planId;\n }\n\n return;\n }\n\n // Otherwise, match the balances based on index of user choice\n var combinedSerials = Object.keys(matchingPlans).join();\n var cardName = cardMap[primary.name] || bankOrOther;\n var includeCodes = [];\n var excludeCodes = [];\n\n var selectedPlan = primaryList[index]; // current selected plan\n var id = selectedPlan.secondaryFIs.length && selectedPlan.primaryFs.subtype === 'IACH' && selectedPlan.primaryFs.padPlanId || selectedPlan.secondaryFIs === false && selectedPlan.primaryFs.subtype === 'PAD' && selectedPlan.primaryFs.iachPlanId;\n\n var foundCorrespondingPlan = masterPlanList.some(function (plan) {\n return plan.planId === id;\n });\n\n // if we are displaying a balance warning message for de installments we will clear it\n if (_this.displayDeInstallmentWarningMessage) {\n _this.displayDeInstallmentWarningMessage = false;\n }\n // with each balance...\n // TODO(refactor)\n _squid.$util.forEach(balanceCodes, function (balState, code) {\n var isFake =\n\n // When the primary is Balance with the same currency\n // user cannot deselect this balance, so show fake selected+disabled checkbox\n balState.fake = primaryCodeAsBalance === code;\n\n // if faking this checkbox\n if (isFake) {\n // fake that it's being forced\n includeCodes.push(code);\n }\n\n // if no plans allow this balance...\n if (combinedSerials.indexOf(code) === -1 && !foundCorrespondingPlan) {\n // deselect and disable this balance\n balState.checked = balState.enabled = false;\n if (!isFake) {\n // add currency code to exclude list\n excludeCodes.push(code);\n }\n } else if (foundCorrespondingPlan && _this.padToggleFeature.enabled) {\n // checks for crossed combination between IACH and PAD\n balState.enabled = true;\n balState.checked = balState.intent;\n } else if (selectedPlan.secondaryFIs === false && selectedPlan.primaryFs.subtype === 'PAD') {\n // disable balance if selected plan is PAD\n balState.enabled = false;\n balState.checked = false;\n } else {\n _this.installment = _this.installment || {};\n _this.installment.isSplitBalance = true;\n\n // assume all plans require this balance\n var requiresBalance = true;\n\n // with each plan...\n for (var serial in matchingPlans) {\n // if it can be used without this balance...\n if (matchingPlans.hasOwnProperty(serial) && serial.indexOf(code) === -1) {\n // flag that all plans do not use this balance\n requiresBalance = false;\n break;\n }\n }\n // if this balance is required for this (or all) plans...\n if (requiresBalance) {\n // select this balance\n balState.checked = true;\n // disable this balance\n balState.enabled = false;\n\n // add currency code to include list\n includeCodes.push(code);\n } else {\n // (otherwise) when this balance is optional for this primaryFs...\n // just enable the balance checkbox\n balState.enabled = true;\n // use intent state to persist user intent\n balState.checked = balState.intent;\n }\n }\n });\n\n // if not a balance plan, and we have any include and/or exclude messages to display...\n if (primary.type !== 'BALANCE' && (includeCodes.length || excludeCodes.length)) {\n var msgs = [];\n var fiName = (0, _squid.$renderContent)('fsMappings.' + primary.name).string || primary.name;\n\n // log when user messaging occurs\n _logger.$logger.info('checkout_fpti', {\n primary: primary.id || primary.type,\n denied: excludeCodes.join(),\n forced: includeCodes.join()\n });\n\n // build include and exclude messages\n [['yes', includeCodes], ['no', excludeCodes]].forEach(function (pair) {\n var codes = pair[1];\n var codesLn = codes.length;\n\n // if there are codes to report as in/ex-cluded...\n if (codesLn) {\n var msgKey = 'memberReview.' + pair[0] + 'Bal_' + cardName;\n var msgObj = { fi: fiName };\n\n // if more than one code...\n if (codesLn > 1) {\n // use plural content key\n msgKey += '_plural';\n // if more than two codes...\n if (codesLn > 2) {\n // group all but the last as the first code\n msgObj.code1 = codes.slice(0, -1).join(', ');\n // use last code alone\n msgObj.code2 = codes[codes.length - 1];\n } else {\n // set code to each token\n msgObj.code1 = codes[0];\n msgObj.code2 = codes[1];\n }\n } else {\n // (otherwise) when only one code...\n // list as first code\n msgObj.code1 = codes[0];\n }\n // capture final message\n msgs.push((0, _squid.$renderContent)(msgKey, msgObj));\n }\n });\n // show informational messages\n checkoutSession.message = {\n msgs: msgs,\n type: 'info'\n };\n } else {\n // clear (any) existing message(s)\n checkoutSession.message = '';\n }\n\n // check PAD related business logic to display PAD label and PAD warning message\n checkPad();\n if (_this.selectedmethod.planId === 0 && clickChosenPlan) {\n _this.selectedmethod.planId = clickChosenPlan.planId;\n }\n };\n\n // determine which plan to pre-select\n\n // if BA txn...\n if (this.isBillingNoPurchase) {\n // just deal with plan id - ignore index approach\n var selectStickyInstrument = checkoutSession.getSelectedStickyInstrument();\n\n if (selectStickyInstrument) {\n selectedmethod.planId = selectStickyInstrument.instrument_id;\n }\n } else if (balanceList.length) {\n // (or) there are balances...\n\n // Select checkboxes by default if first plan has balances by default\n if (masterPlanList[0].secondaryFIs) {\n masterPlanList[0].secondaryFIs.forEach(function (bal) {\n _this.capUserIntent(bal.amount.currency_code, true);\n });\n }\n\n // update balance checkboxes for the first/default selected plan\n this.updateBalances(0);\n } else {\n\n // (otherwise) without balances...\n\n // honor preferred/active/current plan\n var preferredPlanId = checkoutSession.plan.id;\n\n // behave as if the preferred plan were selected - if not, the first/default\n var preferredPlanIndex = _squid.$util.findIndex(primaryList, function (plan) {\n return plan.planId === preferredPlanId;\n }) || 0;\n\n var plan = primaryList[preferredPlanIndex];\n\n if (plan) {\n // specify selected method\n selectedmethod.index = preferredPlanIndex;\n\n // capture preferred plan id - should be same as `preferredPlanId`\n selectedmethod.planId = plan.planId;\n }\n }\n\n this.getBAPlans = function () {\n return checkoutSession.futurePaymentInstruments;\n };\n\n // Check if is variant where preferred can be set\n var preferredFiVariants = _squid.$config.choiceExperiment && _squid.$config.choiceExperiment.preferredCheckbox || [];\n\n this.preferredFiVariant = preferredFiVariants.indexOf(this.models.variant) > -1;\n\n var updateFS = function updateFS() {\n var planId = void 0;\n\n if (_this.selectedmethod.index === 'applyForPPCRadio') {\n return _squid.$promise.resolve();\n }\n\n // if BA plans...\n if (_this.isBillingNoPurchase) {\n planId = selectedmethod.planId;\n } else {\n\n // (otherwise) resolve plan from index and checked balance checkboxes\n\n var index = selectedmethod.index;\n var _plan = primaryList[index];\n\n // TODO: refactor this to FundingOptionsModel\n var getPadSplitBalPlan = function getPadSplitBalPlan(currentPlan) {\n return masterPlanList && masterPlanList.find(function (p) {\n return p.primaryFs.id === currentPlan.primaryFs.id && p.primaryFs.subtype === 'IACH' && p.secondaryFIs && p.secondaryFIs.length;\n });\n };\n\n // find iach or pad plan without balance\n var getIachOrPadPlanWithoutBalance = function getIachOrPadPlanWithoutBalance(currentPlan) {\n return masterPlanList.find(function (p) {\n return p.primaryFs.id === currentPlan.primaryFs.id && (checkoutSession.fundingOptions.isIACH(p) || checkoutSession.fundingOptions.isPAD(p)) && !p.secondaryFIs;\n });\n };\n\n // check if plan is IACH with a balance\n var isPlanIachWithBalance = function isPlanIachWithBalance(p) {\n return checkoutSession.fundingOptions.isIACH(p) && p.secondaryFIs && p.secondaryFIs.length;\n };\n\n var isChecked = balanceList.some(function (balance) {\n return balance.checked;\n });\n var planWithSplitBal = getPadSplitBalPlan(_plan);\n\n // if balance checkbox is checked make sure the selected plan is correct by looking for a plan with a balance\n // otherwise if unchecked and selected plan has balance -> find plan without balance\n if (isChecked) {\n if (planWithSplitBal) {\n _plan = planWithSplitBal;\n }\n } else if (isPlanIachWithBalance(_plan)) {\n var planWithIachOrPad = getIachOrPadPlanWithoutBalance(_plan);\n\n if (planWithIachOrPad) {\n _plan = planWithIachOrPad;\n }\n }\n\n // get plan with serial, built from user selections\n // TODO(refactor): use $MultiFiPlanFactory.getCheckedBalances()\n var checkedBalances = [];\n\n _squid.$util.forEach(balanceCodes, function (balance, code) {\n if (balance.checked) {\n checkedBalances.push(code);\n }\n });\n\n // use plan with this primaryFs and balance options\n var fundingsource = serializedPlans[getSerializedPlanId(_plan, checkedBalances)];\n\n // if no plan matches the user's selections...\n if (!fundingsource) {\n\n // FUZZY MATCHING x-{\n\n var pid = getSerializedPrimary(_plan.primaryFs);\n var pidForLogger = _plan.primaryFs.id || _plan.primaryFs.type;\n\n _logger.$logger.info('checkout_fpti', {\n primary: pidForLogger,\n denied: checkedBalances.join()\n });\n\n // (perhaps only one of the selected balances is applicable?)\n\n // find a plan with each individual balance\n checkedBalances.some(function (code) {\n // match plan with this serial combination\n fundingsource = serializedPlans[pid + code];\n return fundingsource;\n });\n\n // flag that one of the checked balances was unusable\n if (fundingsource) {\n _logger.$logger.info('checkout_fpti', {\n primary: pidForLogger,\n denied: checkedBalances.join()\n });\n }\n\n // if no plan yet...\n // (perhaps the plan doesn't have any balance combination?)\n if (!fundingsource) {\n // get the plan with just this primaryFs\n fundingsource = serializedPlans[pid];\n // if we now have a plan...\n if (fundingsource) {\n _logger.$logger.info('checkout_fpti', {\n primary: pidForLogger,\n denied: checkedBalances.join()\n });\n }\n }\n\n // if still no plan...\n // (at this point, the plan requires a specific balance combination)\n if (!fundingsource) {\n var serializedPlanKeys = Object.keys(serializedPlans);\n\n // use the first plan that begins with this primary id\n fundingsource = serializedPlans[serializedPlanKeys[_squid.$util.findIndex(serializedPlanKeys, function (serial) {\n return serial.indexOf(pid) === 0;\n })]];\n\n _logger.$logger.info('checkout_fpti', {\n primary: pidForLogger,\n forced: balanceList.map(function (balance) {\n return balance.code;\n }).join()\n });\n }\n }\n // use of the matched plan\n planId = fundingsource.planId;\n }\n\n if (_this.isBillingNoPurchase && checkoutSession.getSelectedStickyInstrument() && checkoutSession.getSelectedStickyInstrument().instrument_id !== planId) {\n return checkoutSession.action('setStickyFI', {\n data: {\n instrument_id: planId\n },\n success: function success(result) {\n checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n return result;\n },\n DEFAULT: function DEFAULT() {\n // Error message for failures\n _uiRouter.$state.go('checkout.review');\n }\n });\n } else if (!_this.isBillingNoPurchase && checkoutSession.get('plan.sources')[0].id !== planId) {\n\n return checkoutSession.fundingOptions.action('select', {\n data: {\n planId: planId\n },\n success: function success(result) {\n checkoutSession.populate(result);\n return result;\n },\n contingencies: {\n NEED_AUTHENTICATED_CARD: function NEED_AUTHENTICATED_CARD(name, result) {\n // Route to the Confirm Upop page. When finished, use the default handlers to return to the review page\n if (result && result.resolution) {\n var card = result.resolution.data;\n\n if (card.fundingId && card.fi && card.fi.type) {\n _this.cardModel = new _index.$AddCardModel();\n _this.cardModel.id = card.fundingId;\n _this.cardModel.card = new _index.$CardModel({\n number: 'xxxx-xxxx-xxxx-' + card.fi.number,\n type: card.fi.type.toUpperCase(),\n productType: card.fi.productType\n });\n }\n }\n\n // Reject to break out of the promise chain\n _uiRouter.$state.go('.confirmUpop');\n return _squid.$promise.shortCircuit();\n },\n\n DEFAULT: function DEFAULT() {\n // Error message for failures\n _uiRouter.$state.go('checkout.review');\n }\n }\n });\n } else {\n return _squid.$promise.resolve();\n }\n };\n\n this['continue'] = function (evt) {\n return updateFS().then(function (result) {\n _logger.$logger.debug('xo_credit_banner_monitoring', { tag: 'T4' });\n // clear (any) existing message(s)\n checkoutSession.message = '';\n\n // Decide routing after update\n if (result) {\n // Update the installments to support the user selecting a card that does not support installments.\n _this.models.checkoutSession.installments = result.installments;\n }\n if (_this.models.checkoutSession.get('plan.paypal_credit') || _this.selectedmethod.index === 'applyForPPCRadio') {\n // for PPC reuse radio banner testing we want to indicate whether the user selected PPC via radio button or banner.\n _logger.$logger.info('checkout_fpti', {\n from: 'clickPPCReuse',\n to: 'radio_click'\n });\n }\n // If paypal credit, check for installments and redirect if needed\n if ((_this.models.checkoutSession.get('plan.paypal_credit') || _this.selectedmethod.index === 'applyForPPCRadio') && _this.models.checkoutSession.creditInstallmentOffer) {\n var token = _this.props.token;\n var installments = _checkout.$InstallmentOptionsModel.instance(token);\n var data = {\n isMemberCredit: true\n };\n\n return (0, _squid.$populate)(data, {\n payee: _this.models.checkoutPayeeModel,\n checkoutCart: _checkout.$CheckoutCartModel.instance(token),\n checkoutAppData: _this.models.checkoutAppData\n }).then(function () {\n if ((0, _squid.$feature)('creditInstallmentOffers')) {\n return installments.save({\n cache: true, // Cache between here and $ChoiceEligibilityModel\n data: data,\n success: function success(installmentResult) {\n var offers = installmentResult.installments && installmentResult.installments[0];\n var hasInstallments = offers && offers.installment_options && offers.installment_options.length;\n\n return hasInstallments;\n },\n contingencies: {\n DEFAULT: function DEFAULT() {\n // Assume is eligible if contingency\n return false;\n }\n },\n error: function error() {\n return false;\n }\n });\n } else {\n return false;\n }\n }).then(function (hasInstallments) {\n if (hasInstallments) {\n // This flag is set in the xo-credit-components banner. If its true we will take customers to the new CYCO page in CAPE\n return _this.models.creditSharedInfo.getRedirectToCapeCyco() ? _uiRouter.$state.go('checkout.redirectToCape', { showCapeCyco: true }) : _uiRouter.$state.go('checkout.chooseCreditOffer');\n } else if (_this.selectedmethod.index === 'applyForPPCRadio') {\n if (_this.isCountryDE && _this.models.creditSharedInfo.hasInstallmentOffers() && _this.models.creditSharedInfo.hasInstallmentOfferFinancingDetails()) {\n return _uiRouter.$state.go('checkout.redirectToCape', { financing_option: _this.models.creditSharedInfo.getInstallmentOfferFinancingDetails() });\n } else {\n return _uiRouter.$state.go('checkout.redirectToCape');\n }\n } else {\n return _uiRouter.$state.go('checkout.review');\n }\n });\n } else {\n return _uiRouter.$state.go('checkout.review');\n }\n });\n };\n }\n },\n controller: ['$scope', function ($scope) {\n _angular.$rootScope.showFiSelectPage = true;\n $scope.installment = $scope.installment || {};\n $scope.installment.showBanner = false;\n $scope.installment.showCYCO = false;\n $scope.installment.showCreditExample = false;\n $scope.showPPCAcquisitionRadioButton = function () {\n return $scope.installment && $scope.installment.showPPCAcquisitionRadioButton;\n };\n $scope.showCreditPlacement = function (plan) {\n return plan && !plan.primaryFs.isPinlessDebit && plan.primaryFs.name === 'BILL_ME_LATER';\n };\n }]\n});\n\nangular.value(\"$xoSelectFiComponent\", $xoSelectFiComponent);\n_squid.$Component;\n\n_squid.$renderContent;\n\n_squid.$populate;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$integration;\n\n_squid.formatNameInformal;\n\n_squid.$util;\n\n_squid.$locale;\n\n_squid.$promise;\n\n;\n\n_angular.noop;\n\n_angular.$rootScope;\n\n_angular.$q;\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$InstallmentOptionsModel;\n\n_checkout.$CheckoutPayeeModel;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_credit.$CreditSharedInfoModel;\n\n_choice.$ChoiceEligibility;\n\n_index.$AddCardModel;\n\n_index.$CardModel;\n\n_fiMessages.$fiMessages;\n\n_factory.$BalanceFactory;\n\n_cardartInstrument.$CardArtInstrument;\n\n_sharedUtil.$SharedUtil;\n\n_balance.$BalanceEligibilityFactory;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-select-fi/directive.js\n// module id = ./pages/xo-select-fi/directive.js\n// module chunks = 3","\n\nexports.__esModule = true;\nexports.$SelectFiRoute = undefined;\n\nvar _squid = require('squid');\n\nvar _directive = require('./directive');\n\nvar $SelectFiRoute = exports.$SelectFiRoute = _squid.$ComponentRoute.extend('$SelectFiRoute', {\n path: 'selectFi',\n directive: _directive.$xoSelectFiComponent,\n titleContent: 'memberReview.selectFi',\n trackingData: {\n fptiState: 'choose_FI_interstitial',\n buzname: {\n 'fullpage': {\n 'pagename': '%::select-fi',\n 'pagename2': '%::select-fi:member:hermes:',\n 'version': 'member:%:'\n }\n }\n },\n children: [{\n name: '$xoConfirmUpopRoute',\n props: function props() {\n return {\n token: this.props.token,\n cardmodel: this.cardModel\n };\n },\n\n lazyRoute: function lazyRoute() {\n return import('xo-wallet-components/src/confirm-upop/route');\n },\n slug: 'confirmUpop'\n }]\n});\n\nangular.value(\"$SelectFiRoute\", $SelectFiRoute);\n_squid.$ComponentRoute;\n\n_directive.$xoSelectFiComponent;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-select-fi/route.js\n// module id = ./pages/xo-select-fi/route.js\n// module chunks = 3","module.exports = \"
\\n \\n\\n
\\n
\\n \\n \\n

\\n {{ content(!personalizedBanner.isFBSkipLogin ? 'memberReview.loggedInWithOneTouch' : 'memberReview.loggedInFaceBookBA', {userName: formattedNameInformal, lastName: models.auth.last_name, firstName: models.auth.first_name}) }}\\n \\n \\n \\n

\\n
\\n \\n \\n
\\n

\\n {{ content('creditcard.hi', {userName: formattedNameInformal}) }}\\n \\n \\n \\n

\\n
\\n\\n
\\n
\\n
\\n
\\n

\\n {{ content('memberReview.selectFi') }}\\n

\\n\\n
\\n \\n
\\n\\n \\n \\n \\n \\n \\n \\n
\\n
\\n\\n
\\n {{ content('memberReview.padWarningMsg') }}\\n
\\n\\n
\\n {{ content('memberReview.balanceInstallmentsConflictMsg') }}\\n
\\n\\n
    \\n \\n
  • \\n \\n
    \\n \\n\\n \\n
    \\n
    \\n\\n \\n
    \\n \\n\\n \\n
    \\n
    \\n
    \\n {{ content('paymentMethod.eCheckDescription') }}\\n
    \\n
    \\n
    \\n
  • \\n
  • \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n\\n
  • \\n\\n
  • \\n
    \\n

    \\n
    \\n \\n \\n
    \\n
    \\n
  • \\n\\n
\\n\\n
\\n \\n
\\n\\n \\n\\n \\n\\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n\\n \\n\\n
\\n
\\n \\n
\\n \\n \\n
\\n \\n
\\n
\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-select-fi/template.html\n// module id = ./pages/xo-select-fi/template.html\n// module chunks = 3"],"sourceRoot":""}