{"version":3,"sources":["images/products sync /^/.//.*/.svg$","images/IFG-Logo-Precept.svg","images/products/AHLI_UNITED.svg","images/products/AL_RAYAN.svg","images/products/GATEHOUSE BANK.svg","images/products/STRIDE_UP.svg","serviceWorker.js","actions/inputs.js","actions/selectedProduct.js","lib/enums.js","lib/PMT.js","lib/getFilteredProducts.js","lib/getFormulaResults.js","lib/formats.js","lib/getFee.js","lib/getInitialPeriod.js","lib/getFirstInitialPeriod.js","types/index.js","actions/calculatedProducts.js","components/ProductDetail.js","components/Products.js","decorators/withSelectMe.js","decorators/withInput.js","components/Aside.js","components/Calculator.js","lib/consts.js","components/Success.js","components/Header.js","components/Error404.js","components/Footer.js","components/ProductTypePurposeSelect.js","components/ProductLocation.js","components/CallbackRequest.js","lib/validationForms.js","components/BridgingCallbackRequest.js","App.js","reducers/index.js","reducers/products.js","reducers/inputs.js","reducers/calculatedProducts.js","reducers/selectedProduct.js","index.js","initialState.js"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","Boolean","window","location","hostname","match","setUrlParams","url","params","type","changeInput","value","name","changeProductType","payload","changeLocation","changeFTV","propertyValue","financeRequired","setSelectedProduct","inputs","calculatedProduct","setUrlProductType","setPresetBridgingProduct","ProductType","Purpose","PURCHASE","REFINANCE","PURCHASE_OR_REFINANCE","ProductTypePurpose","RepaymentType","HPP","RENT_ONLY","Locations","Appointment","PMT","ir","np","pv","fv","pvif","Math","pow","pmt","getFilteredProducts","products","s","Stream","filter","productType","product","purpose","repaymentType","fTV","prodMin","Number","minFinance","prodMax","maxFinance","inputFin","minTerm","maxTerm","inputTerm","term","console","log","lender","groupBy","prod","initialRateType","initialPeriodMonths","fixedAmountFee","variableFee","values","lenders","reduce","acc","currentValue","filteredProduct","formulaResults","financingAmount","fees","rentAndAcquisition","initialRate","followOnRate","formulaArray","balance","totalCashFlows","i","rate","monthlyPayment","rent","acquisition","push","initialMonthlyPayment","followOnPayment","length","totalRentPayable","totalAmountPayable","getFormulaResults","variableRate","sorted","calculatedProductA","calculatedProductB","toArray","formatCurrency","num","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","currency","style","format","formatPercentage","parseFloat","toFixed","monthsToYears","parseInt","formatMonthsToYears","months","monthFormat","years","yearFormat","getInitialRateType","getRawFee","fixed","variable","max","getFee","getInitialPeriod","getFirstInitialPeriod","initialPeriodLimit","d1","d2","getFullYear","getMonth","monthDiff","Date","inputsDefaultTypes","PropTypes","shape","string","number","productTypes","logo","productName","minPropertyValue","productDefaultTypes","productsDefaultTypes","arrayOf","calculatedProductProptypes","calculatedProductDefaultProptypes","calculatedProductsDefaultProptypes","setCalculatedProducts","ProductDetail","setModalToOpen","actions","className","aria-label","onClick","src","require","alt","to","defaultProps","connect","dispatch","bindActionCreators","Products","calculatedProducts","useState","modalToOpen","useEffect","filteredProducts","renderFilteredProductsList","key","ReactGA","modalview","MenuContext","Consumer","setClassName","state","withSelectMe","Select","props","listRenderer","optionRenderer","onChange","option","label","withInput","minValue","maxValue","newProps","toLocaleString","Aside","options","handleChangeInput","handleChangeInputCurrency","target","replace","action","handleChangeProductType","min","step","tooltip","handleLabel","checked","htmlFor","Calculator","path","substr","queryString","parse","search","IFG_URL","Success","subtitle","href","Header","Error404","Footer","rel","ProductTypePurposeSelect","handleClick","ProductLocation","CallbackRequest","selectedProduct","history","validEmail","setValidEmail","validPhone","setValidPhone","validName","setValidName","pristine","setPristine","lenderName","handleChangePhone","phone","valid","phoneUtil","PhoneNumberUtil","getInstance","isValidNumber","validatePhone","handleChangeEmail","test","String","toLowerCase","renderInputClassname","input","renderFormError","renderForm","noValidate","method","onSubmit","preventDefault","endpoint","host","newProduct","newSelectedProduct","formValues","fetch","headers","Accept","body","JSON","stringify","sendData","placeholder","email","callRequest","disabled","withRouter","BridgingCallbackRequest","React","createContext","createBrowserHistory","listen","set","page","pathname","pageview","App","modalClassname","setModalClassname","Provider","exact","component","ifgApp","combineReducers","financeAmount","propertyPrice","indexOf","example","urlProductType","deposit","fee","initialMonthlyPmt","variableMonthlyPmt","totalRent","totalCost","initialize","store","createStore","compose","applyMiddleware","reduxThunk","__REDUX_DEVTOOLS_EXTENSION__","f","ReactDOM","render","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.698fa8e5.chunk.js","sourcesContent":["var map = {\n\t\"./AHLI_UNITED.svg\": 58,\n\t\"./AL_RAYAN.svg\": 59,\n\t\"./GATEHOUSE BANK.svg\": 60,\n\t\"./STRIDE_UP.svg\": 61\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 28;","module.exports = __webpack_public_path__ + \"static/media/IFG-Logo-Precept.44cbe196.svg\";","module.exports = __webpack_public_path__ + \"static/media/AHLI_UNITED.4dab23b9.svg\";","module.exports = __webpack_public_path__ + \"static/media/AL_RAYAN.016bff76.svg\";","module.exports = __webpack_public_path__ + \"static/media/GATEHOUSE BANK.ad249662.svg\";","module.exports = __webpack_public_path__ + \"static/media/STRIDE_UP.f7af3677.svg\";","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","export const setUrlParams = (url, params) => ({\n type: 'INPUTS.SET_URL_PARAMS',\n url,\n params\n});\n\nexport const changeInput = (value, name) => ({\n type: 'INPUTS.CHANGE_INPUT',\n value,\n name\n});\n\nexport const changeProductType = (payload) => ({\n type: 'INPUTS.CHANGE_PRODUCT_TYPE',\n payload,\n});\n\nexport const changeLocation = (payload) => ({\n type: 'INPUTS.CHANGE_LOCATION',\n payload,\n});\n\nexport const changeFTV = (propertyValue, financeRequired) => ({\n type: 'INPUTS.CHANGE_FTV',\n propertyValue,\n financeRequired\n});\n","export const setSelectedProduct = (inputs, calculatedProduct) => ({\n type: 'SELECTED_PRODUCT.SET_SELECTED_PRODUCT',\n inputs,\n calculatedProduct\n});\n\nexport const changeInput = (value, name) => ({\n type: 'SELECTED_PRODUCT.CHANGE_INPUT',\n value,\n name\n});\n\nexport const setUrlProductType = (url) => ({\n type: 'SELECTED_PRODUCT.SET_URL_PRODUCT_TYPE',\n url\n});\n\nexport const setPresetBridgingProduct = () => ({\n type: 'SELECTED_PRODUCT.SET_PRESET_BRIDGING_PRODUCT'\n});\n\nexport default setSelectedProduct;\n","export const ProductType = {\n RESIDENTIAL: 'RESIDENTIAL',\n BUY_TO_LET: 'BUY_TO_LET',\n BRIDGING: 'BRIDGING'\n};\n\nexport const Purpose = {\n PURCHASE: 'PURCHASE',\n REFINANCE: 'REFINANCE',\n PURCHASE_OR_REFINANCE: 'PURCHASE_OR_REFINANCE'\n};\n\n\nexport const ProductTypePurpose = {\n HOME_PURCHASE: 'Home purchase',\n HOME_REFINANCE: 'Home refinance',\n BUY_TO_LET: 'Buy-to-let'\n};\n\nexport const RepaymentType = {\n HPP: 'HPP',\n RENT_ONLY: 'RENT_ONLY'\n};\n\nexport const Locations = {\n LONDON_AND_HOME_COUNTIES: 'LONDON_AND_HOME_COUNTIES',\n ELSEWHERE: 'ELSEWHERE',\n PRIME_CENTRAL_LON_OUTER_LON: 'PRIME_CENTRAL_LON_OUTER_LON',\n ENGLAND_SCOTLAND_WALES: 'ENGLAND_SCOTLAND_WALES',\n ENGLAND_WALES: 'ENGLAND_WALES',\n HOME_COUNTIES: 'HOME_COUNTIES',\n};\n\nexport const Appointment = {\n MORNING: 'MORNING',\n LUNCH: 'LUNCH',\n AFTERNOON: 'AFTERNOON',\n EVENING: 'EVENING',\n ASAP: 'ASAP',\n};\n","/* eslint-disable */\n// The PMT function calculates the payment for a loan \n// based on constant payments and a constant interest rate\nexport default function PMT(ir, np, pv, fv, type) {\n /*\n * ir - interest rate per month\n * np - number of periods (months)\n * pv - present value\n * fv - future value\n * type - when the payments are due:\n * 0: end of the period, e.g. end of month (default)\n * 1: beginning of period\n */\n\n fv || (fv = 0);\n type || (type = 0);\n\n if (ir === 0) { return -(pv + fv) / np; }\n\n const pvif = Math.pow(1 + ir, np);\n let pmt = -ir * pv * (pvif + fv) / (pvif - 1);\n\n if (type === 1) { pmt /= (1 + ir); }\n\n\n return pmt;\n}\n","import Stream from 'streamjs';\nimport { Purpose, RepaymentType } from './enums';\nimport getFormulaResults from './getFormulaResults';\n\n\nexport default function getFilteredProducts(products, inputs) {\n const s = Stream(products)\n .filter(({ productType: inputs.productType }))\n .filter((product) => product.purpose === inputs.purpose\n || product.purpose === Purpose.PURCHASE_OR_REFINANCE)\n .filter(({ repaymentType: inputs.repaymentType }))\n .filter((product) => product.fTV >= inputs.fTV)\n .filter((product) => {\n const prodMin = Number(product.minFinance) || 0;\n const prodMax = Number(product.maxFinance) || 0;\n const inputFin = Number(inputs.financeRequired) || 0;\n return prodMin <= inputFin && prodMax >= inputFin;\n })\n .filter((product) => {\n const prodMin = Number(product.minTerm) || 0;\n const prodMax = Number(product.maxTerm) || 0;\n const inputTerm = Number(inputs.term) || 0;\n console.log(inputTerm);\n console.log(prodMin, prodMax);\n console.log(product.lender, prodMin <= inputTerm && prodMax >= inputTerm);\n return prodMin <= inputTerm && prodMax >= inputTerm;\n })\n .groupBy((prod) => `${prod.lender} ${prod.initialRateType} ${prod.initialPeriodMonths} ${prod.fixedAmountFee == null ? prod.variableFee : prod.fixedAmountFee}`);\n\n return Stream(Object.values(s).map((lenders) => lenders.reduce((acc, currentValue) => (acc.fTV <= currentValue.fTV ? acc : currentValue))))\n .map((filteredProduct) => {\n const formulaResults = getFormulaResults(\n inputs.financeRequired,\n filteredProduct.fixedAmountFee,\n inputs.repaymentType === RepaymentType.HPP,\n filteredProduct.initialRate,\n filteredProduct.variableRate,\n inputs.term\n );\n return ({\n product: filteredProduct,\n ...formulaResults\n });\n })\n .sorted((calculatedProductA, calculatedProductB) => {\n if (calculatedProductA.initialMonthlyPayment === calculatedProductB.initialMonthlyPayment) {\n if (calculatedProductA.product.fTV === calculatedProductB.product.fTV) {\n return 0;\n }\n if (calculatedProductA.product.fTV < calculatedProductB.product.fTV) {\n return -1;\n }\n return 1;\n }\n if (calculatedProductA.initialMonthlyPayment < calculatedProductB.initialMonthlyPayment) {\n return -1;\n }\n return 1;\n })\n .toArray();\n}\n","import PMT from './PMT';\n\nexport default function getFormulaResults(\n financingAmount,\n fees,\n rentAndAcquisition,\n initialRate,\n followOnRate,\n term\n) {\n const FIXED_RATE_PERIOD = 24;\n\n const formulaArray = [{\n balance: financingAmount * -1,\n totalCashFlows: (financingAmount * -1) + fees,\n }];\n\n for (let i = 1; i <= term; i += 1) {\n const rate = i <= FIXED_RATE_PERIOD ? initialRate : followOnRate;\n const monthlyPayment = rentAndAcquisition\n ? PMT((rate / 12), (term - (i - 1)), formulaArray[i - 1].balance)\n : (formulaArray[i - 1].balance * -1) * (rate / 12);\n const rent = ((formulaArray[i - 1].balance * -1) * rate) / 12;\n const acquisition = monthlyPayment - rent;\n const balance = formulaArray[i - 1].balance + acquisition;\n const totalCashFlows = monthlyPayment;\n\n formulaArray.push({\n balance,\n rate,\n monthlyPayment,\n rent,\n acquisition,\n totalCashFlows\n });\n }\n\n const initialMonthlyPayment = formulaArray[1].monthlyPayment;\n const followOnPayment = formulaArray[formulaArray.length - 1].monthlyPayment;\n const totalRentPayable = initialMonthlyPayment\n * FIXED_RATE_PERIOD\n + followOnPayment\n * (term - FIXED_RATE_PERIOD);\n const totalAmountPayable = totalRentPayable\n + fees\n + (!rentAndAcquisition ? financingAmount : 0);\n\n return {\n initialMonthlyPayment,\n followOnPayment,\n totalRentPayable,\n totalAmountPayable,\n };\n}\n","export function formatCurrency(num) {\n return new Intl.NumberFormat(\n 'en-GB',\n {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n currency: 'GBP',\n style: 'currency'\n }\n ).format(num);\n}\n\nexport function formatPercentage(num) {\n return `${parseFloat((num * 100).toFixed(2))}%`;\n}\n\nexport function monthsToYears(num) {\n return parseInt(num / 12, 10);\n}\n\nexport function formatMonthsToYears(months) {\n if (months < 12) {\n const monthFormat = months === 1 ? 'month' : 'months';\n return `${months} ${monthFormat}`;\n }\n const years = monthsToYears(months);\n const yearFormat = years === 1 ? 'year' : 'years';\n return `${years} ${yearFormat}`;\n}\n\n\nexport function currencyToInt(currency) {\n return parseInt(currency.replace(/[^0-9.]+/g, ''), 10) || 0;\n}\n\nexport function intToCurrency(number) {\n return parseInt(number, 10).toLocaleString('en-GB');\n}\n\nexport function getInitialRateType(initialRateType) {\n return initialRateType === 'FIXED' ? 'fixed' : 'discounted variable';\n}\n","import { formatCurrency } from './formats';\n\nexport function getRawFee(fixed, variable, financeRequired) {\n if (fixed && variable) {\n return Math.max(fixed, variable * financeRequired);\n }\n return fixed || variable * financeRequired;\n}\n\nexport function getFee(fixed, variable, financeRequired) {\n return formatCurrency(getRawFee(fixed, variable, financeRequired));\n}\n","export default function getInitialPeriod(initialPeriodMonths) {\n return initialPeriodMonths || 24;\n}\n","function monthDiff(d1, d2) {\n let months;\n months = (d2.getFullYear() - d1.getFullYear()) * 12;\n months -= d1.getMonth() + 1;\n months += d2.getMonth();\n return months <= 0 ? 0 : months;\n}\n\nexport default function getFirstInitialPeriod(initialPeriodMonths, initialPeriodLimit) {\n if (initialPeriodLimit) {\n const currentDate = new Date();\n const date = new Date(initialPeriodLimit);\n return monthDiff(currentDate, date);\n }\n return initialPeriodMonths;\n}\n","import PropTypes from 'prop-types';\n\nexport const inputsTypes = PropTypes.shape({\n productType: PropTypes.string,\n purpose: PropTypes.string,\n repaymentType: PropTypes.string,\n propertyValue: PropTypes.number,\n financeRequired: PropTypes.number,\n fTV: PropTypes.number,\n term: PropTypes.number,\n});\n\nexport const inputsDefaultTypes = {\n productType: null,\n purpose: null,\n repaymentType: null,\n propertyValue: null,\n financeRequired: null,\n fTV: null,\n term: null,\n};\n\nexport const productTypes = PropTypes.shape({\n logo: PropTypes.string,\n productName: PropTypes.string,\n purpose: PropTypes.string,\n productType: PropTypes.string,\n repaymentType: PropTypes.string,\n fTV: PropTypes.number,\n initialPeriodMonths: PropTypes.number,\n initialPeriodLimit: PropTypes.string,\n initialRate: PropTypes.number,\n initialRateType: PropTypes.string,\n minTerm: PropTypes.number,\n maxTerm: PropTypes.number,\n variableRate: PropTypes.number,\n fixedAmountFee: PropTypes.number,\n variableFee: PropTypes.number,\n minFinance: PropTypes.number,\n maxFinance: PropTypes.number,\n minPropertyValue: PropTypes.number,\n location: PropTypes.string,\n});\n\nexport const productDefaultTypes = {\n logo: null,\n productName: null,\n purpose: null,\n productType: null,\n repaymentType: null,\n fTV: null,\n initialPeriodMonths: null,\n initialPeriodLimit: null,\n initialRate: null,\n initialRateType: null,\n minTerm: null,\n maxTerm: null,\n variableRate: null,\n fixedAmountFee: null,\n variableFee: null,\n minFinance: null,\n maxFinance: null,\n minPropertyValue: null,\n location: null,\n};\nexport const productsTypes = PropTypes.arrayOf(productTypes);\n\nexport const productsDefaultTypes = [productDefaultTypes];\n\nexport const calculatedProductProptypes = PropTypes.shape({\n product: productTypes,\n followOnPayment: PropTypes.number,\n initialMonthlyPayment: PropTypes.number,\n totalAmountPayable: PropTypes.number,\n totalRentPayable: PropTypes.number,\n});\n\nexport const calculatedProductsProptypes = PropTypes.arrayOf(calculatedProductProptypes);\n\nexport const calculatedProductDefaultProptypes = {\n product: productDefaultTypes,\n followOnPayment: null,\n initialMonthlyPayment: null,\n totalAmountPayable: null,\n totalRentPayable: null,\n};\n\n\nexport const calculatedProductsDefaultProptypes = [calculatedProductDefaultProptypes];\n","export const setCalculatedProducts = (payload) => ({\n type: 'CALCULATED_PRODUCTS.SET_CALCULATED_PRODUCTS',\n payload,\n});\n\nexport default setCalculatedProducts;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { bindActionCreators } from 'redux';\nimport {Link} from 'react-router-dom';\nimport {\n inputsTypes,\n inputsDefaultTypes,\n calculatedProductProptypes,\n calculatedProductDefaultProptypes\n} from '../types';\n\nimport {\n formatCurrency, formatPercentage, formatMonthsToYears, getInitialRateType\n} from '../lib/formats';\nimport { getFee } from '../lib/getFee';\nimport getInitialPeriod from '../lib/getInitialPeriod';\nimport getFirstInitialPeriod from '../lib/getFirstInitialPeriod';\nimport { setSelectedProduct } from '../actions/selectedProduct';\nimport { ProductType } from '../lib/enums';\n\nconst ProductDetail = ({\n filteredProduct, setModalToOpen, inputs, actions\n}) => {\n function getCallbackRequestUrl() {\n return inputs.productType === ProductType.BUY_TO_LET ? './btl' : './residential';\n }\n\n return (\n
\n
\n
\n
\n );\n};\n\nProductDetail.propTypes = {\n filteredProduct: calculatedProductProptypes,\n setModalToOpen: PropTypes.func.isRequired,\n inputs: inputsTypes,\n actions: PropTypes.shape({\n setSelectedProduct: PropTypes.func,\n }),\n};\n\nProductDetail.defaultProps = {\n filteredProduct: calculatedProductDefaultProptypes,\n inputs: inputsDefaultTypes,\n actions: {\n setSelectedProduct: () => {},\n },\n};\n\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators({\n setSelectedProduct,\n },\n dispatch)\n});\nexport default connect(\n null,\n mapDispatchToProps\n)(ProductDetail);\n","import React, { useEffect, useState } from 'react';\nimport ReactGA from 'react-ga';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { bindActionCreators } from 'redux';\nimport getFilteredProducts from '../lib/getFilteredProducts';\nimport {\n formatCurrency, formatPercentage, formatMonthsToYears, getInitialRateType\n} from '../lib/formats';\nimport { getFee } from '../lib/getFee';\nimport getInitialPeriod from '../lib/getInitialPeriod';\nimport getFirstInitialPeriod from '../lib/getFirstInitialPeriod';\nimport {\n inputsTypes,\n inputsDefaultTypes,\n productsTypes,\n productsDefaultTypes,\n calculatedProductsProptypes,\n calculatedProductsDefaultProptypes\n} from '../types';\nimport { setCalculatedProducts } from '../actions/calculatedProducts';\nimport ProductDetail from './ProductDetail';\nimport { MenuContext } from '../App';\n\nconst Products = ({\n inputs, products, calculatedProducts, actions\n}) => {\n const [modalToOpen, setModalToOpen] = useState(-1);\n\n useEffect(() => {\n const filteredProducts = getFilteredProducts(products, inputs);\n actions.setCalculatedProducts(filteredProducts);\n // eslint-disable-next-line\n }, [actions.setCalculatedProducts, inputs]);\n\n const handleMoreDetailsRequest = (product) => {\n setModalToOpen(product);\n ReactGA.modalview('product-detail');\n }\n\n function renderFilteredProductsList(filteredProducts) {\n return filteredProducts.map((filteredProduct, i) => (\n
  • \n \n
  • \n ));\n }\n\n function renderContent() {\n return (\n
    \n
    \n \n {(value) => (\n value.setClassName('showMenu')}\n >\n Refine details\n \n )}\n \n
    \n {calculatedProducts.length\n ? (\n <>\n
    \n

    Products are sorted in increasing order of initial monthly payment

    \n

    \n {`${calculatedProducts.length} Results`}\n

    \n
    \n \n \n )\n : (\n
    \n
    \n

    No results found

    \n

    Sorry we haven’t been able to find any products matching those requirements.

    \n
    \n
    \n )}\n
    \n );\n }\n\n return (\n
    \n {modalToOpen >= 0\n && (\n \n )}\n
    \n

    Compare our best deals and rates

    \n

    Use this calculator to get an idea of what you could finance.

    \n
    \n {renderContent()}\n
    \n );\n};\n\nProducts.propTypes = {\n inputs: inputsTypes,\n products: productsTypes,\n calculatedProducts: calculatedProductsProptypes,\n actions: PropTypes.shape({\n setCalculatedProducts: PropTypes.func,\n }),\n};\n\nProducts.defaultProps = {\n inputs: inputsDefaultTypes,\n products: productsDefaultTypes,\n calculatedProducts: calculatedProductsDefaultProptypes,\n actions: {\n setCalculatedProducts: () => {},\n },\n};\n\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators({\n setCalculatedProducts,\n },\n dispatch)\n});\n\nconst mapStateToProps = (state) => ({\n inputs: state.inputs,\n products: state.products,\n calculatedProducts: state.calculatedProducts\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(Products);\n","import React from 'react';\nimport Select from 'react-select-me';\n\nconst withSelectMe = () => ({ ...props }) => (\n (\n \n )}\n />\n);\n\nexport default withSelectMe(Select);\n","import React from 'react';\n\nimport { intToCurrency } from '../lib/formats';\n\nconst withInput = () => (props) => {\n // eslint-disable-next-line react/prop-types\n const { minValue, maxValue, ...newProps } = props;\n const className = newProps.value > maxValue || newProps.value < minValue\n ? 'error'\n : '';\n return (\n \n );\n};\n\nexport default withInput();\n","import React, { useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport PropTypes from 'prop-types';\nimport Slider from 'react-rangeslider';\nimport Select from '../decorators/withSelectMe';\nimport Input from '../decorators/withInput';\nimport {\n inputsTypes, inputsDefaultTypes, calculatedProductsProptypes, calculatedProductsDefaultProptypes\n} from '../types';\nimport { changeInput, changeProductType, changeFTV } from '../actions/inputs';\nimport {\n RepaymentType, ProductType, Purpose, ProductTypePurpose\n} from '../lib/enums';\nimport { currencyToInt, monthsToYears } from '../lib/formats';\nimport { MenuContext } from '../App';\n\nconst Aside = ({\n inputs, actions, calculatedProducts\n}) => {\n useEffect(() => {\n actions.changeFTV(inputs.propertyValue, inputs.financeRequired);\n // eslint-disable-next-line\n }, [inputs.propertyValue, inputs.financeRequired]);\n\n const options = [\n {\n value: 1,\n label: ProductTypePurpose.HOME_PURCHASE,\n productType: ProductType.RESIDENTIAL,\n purpose: Purpose.PURCHASE\n },\n {\n value: 2,\n label: ProductTypePurpose.HOME_REFINANCE,\n productType: ProductType.RESIDENTIAL,\n purpose: Purpose.REFINANCE\n },\n {\n value: 3,\n label: ProductTypePurpose.BUY_TO_LET,\n productType: ProductType.BUY_TO_LET,\n purpose: Purpose.PURCHASE_OR_REFINANCE\n }\n ];\n\n function handleChangeInput(value, name) {\n actions.changeInput(value, name);\n }\n\n function handleChangeInputCurrency(e, name) {\n handleChangeInput(currencyToInt(e.target.value), name);\n }\n\n function handleChangeProductType(e) {\n actions.changeProductType(e);\n }\n\n function getProductType() {\n if (inputs.productType === ProductType.RESIDENTIAL) {\n if (inputs.purpose === Purpose.PURCHASE) {\n return ProductTypePurpose.HOME_PURCHASE;\n }\n return ProductTypePurpose.HOME_REFINANCE;\n\n }\n return ProductTypePurpose.BUY_TO_LET;\n }\n\n function renderRepaymentType() {\n return inputs.productType === ProductType.BUY_TO_LET\n ? (\n
    \n

    Repayment type

    \n
    \n handleChangeInput(e.target.value, 'repaymentType')}\n />\n \n handleChangeInput(e.target.value, 'repaymentType')}\n />\n \n
    \n
    \n ) : null;\n\n }\n\n return (\n \n );\n};\n\nAside.propTypes = {\n inputs: inputsTypes,\n actions: PropTypes.shape({\n changeInput: PropTypes.func,\n changeProductType: PropTypes.func,\n changeFTV: PropTypes.func\n }),\n calculatedProducts: calculatedProductsProptypes,\n\n};\n\nAside.defaultProps = {\n inputs: inputsDefaultTypes,\n actions: {\n changeInput: () => {},\n changeProductType: () => {},\n changeFTV: () => {}\n },\n calculatedProducts: calculatedProductsDefaultProptypes,\n};\n\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators({\n changeInput,\n changeProductType,\n changeFTV\n },\n dispatch)\n});\n\nconst mapStateToProps = (state) => ({\n inputs: state.inputs,\n calculatedProducts: state.calculatedProducts\n});\n\nexport default connect(\n mapStateToProps, mapDispatchToProps\n)(Aside);\n","import React, { useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport queryString from 'query-string';\nimport { bindActionCreators } from 'redux';\nimport { setUrlParams } from '../actions/inputs';\nimport { setUrlProductType } from '../actions/selectedProduct';\nimport Products from './Products';\nimport Aside from './Aside';\n\nconst Calculator = ({\n actions, location, match\n}) => {\n useEffect(() => {\n const url = match.path.substr(1);\n const params = queryString.parse(location.search);\n actions.setUrlParams(url, params);\n actions.setUrlProductType(url);\n // eslint-disable-next-line\n }, []);\n\n return (\n
    \n
    \n );\n};\n\nCalculator.propTypes = {\n actions: PropTypes.shape({\n setUrlParams: PropTypes.func,\n setUrlProductType: PropTypes.func\n }),\n match: PropTypes.shape({\n path: PropTypes.string,\n }),\n location: PropTypes.shape({\n search: PropTypes.string,\n }),\n};\n\nCalculator.defaultProps = {\n actions: {\n setUrlProductType: () => {},\n setUrlParams: () => {}\n },\n match: {\n path: null\n },\n location: {\n search: null\n },\n};\n\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators({\n setUrlParams,\n setUrlProductType\n },\n dispatch)\n});\n\nexport default connect(\n null, mapDispatchToProps\n)(Calculator);\n","export const IFG_URL = 'https://www.islamicfinanceguru.com/islamicmortgages/';\nexport const FORM_ENDPOINT_DEV = 'https://xvbjchc1z2.execute-api.eu-west-2.amazonaws.com/Prod/lead';\nexport const FORM_ENDPOINT = 'https://xvbjchc1z2.execute-api.eu-west-2.amazonaws.com/Prod/lead';\n\nexport const LOCAL_DOMAIN = 'localhost:3000';\nexport const DEV_DOMAIN = 'islamicmortgage.co';\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport queryString from 'query-string';\nimport { ProductType } from '../lib/enums';\nimport { IFG_URL } from '../lib/consts';\n\nconst Success = ({ location }) => {\n const params = queryString.parse(location.search);\n let subtitle = 'Thanks for your interest, you should receive a callback shortly. 😊';\n if (params.type === ProductType.BUY_TO_LET) {\n subtitle = 'Thanks for your interest, Precept Finance will be in touch soon. 😊';\n }\n return (\n
    \n

    We’ve received your details!

    \n

    {subtitle}

    \n \n BACK TO ISLAMIC FINANCE GURU\n \n
    \n );\n};\n\nSuccess.propTypes = {\n location: PropTypes.shape({\n search: PropTypes.string,\n }),\n};\n\nSuccess.defaultProps = {\n location: {\n search: null\n },\n};\n\nexport default Success;\n","import React from 'react';\nimport logo from '../images/IFG-Logo-Precept.svg';\n\nconst Header = () => (\n
    \n \"Islamic\n {/* eslint-disable-next-line */}\n {/* */}\n
    \n);\n\nexport default Header;\n","import React from 'react';\nimport { IFG_URL } from '../lib/consts';\n\nconst Error404 = () => (\n
    \n

    Oops!

    \n

    We can't seem to find the page you're looking for.

    \n

    Error code: 404

    \n \n BACK TO ISLAMIC FINANCE GURU\n
    \n
    \n);\n\nexport default Error404;\n","import React from 'react';\n\nconst Footer = () => (\n
    \n

    This information is a simple comparison service. Listings are provided in partnership by Islamicfinanceguru Limited and Precept Finance Ltd on a non-advised basis and Islamicfinanceguru does not receive payment for each lead generated.

    \n

    This means that no advice is given or implied and you are solely responsible for deciding whether the product is suitable for your needs. If you are not sure which is the right product for you, you should seek advice.

    \n

    The table shows a range of products from the market and this service service does not consider your personal credit position.

    \n

    You can review the\n {' '}\n IFG Privacy Policy\n {' '}\nand the\n {' '}\n Precept Finance Privacy Policy\n.\n

    \n
    \n);\n\nexport default Footer;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport { ProductType, Purpose } from '../lib/enums';\nimport { changeProductType } from '../actions/inputs';\n\nconst ProductTypePurposeSelect = ({ actions }) => {\n function handleClick(productType, purpose) {\n actions.changeProductType({productType, purpose});\n }\n\n return (\n
    \n
    \n

    Let’s find the right product for you.

    \n

    Chose one

    \n
      \n
    • \n handleClick(ProductType.RESIDENTIAL, Purpose.PURCHASE)}\n >\n Home purchase\n \n
    • \n
    • \n handleClick(ProductType.RESIDENTIAL, Purpose.REFINANCE)}\n >\n Home refinance\n \n
    • \n
    • \n Buy-to-let\n
    • \n
    \n
    \n
    \n );\n};\n\nProductTypePurposeSelect.propTypes = {\n actions: PropTypes.shape({\n changeProductType: PropTypes.func\n }),\n};\n\nProductTypePurposeSelect.defaultProps = {\n actions: {\n changeProductType: () => {}\n },\n};\n\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators({\n changeProductType\n },\n dispatch)\n});\n\n\nexport default connect(\n null, mapDispatchToProps\n)(ProductTypePurposeSelect);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport { Locations } from '../lib/enums';\nimport { changeLocation } from '../actions/inputs';\n\nconst ProductLocation = ({ actions }) => {\n function handleClick(location) {\n actions.changeLocation(location);\n }\n\n return (\n
    \n
    \n

    Where's the property you want to Purchase?

    \n
      \n
    • \n handleClick(Locations.LONDON_AND_HOME_COUNTIES)}\n >\n London and the Home Counties\n \n
    • \n
    • \n handleClick(Locations.ELSEWHERE)}\n >\n Elsewhere\n \n
    • \n
    \n
    \n
    \n );\n};\n\nProductLocation.propTypes = {\n actions: PropTypes.shape({\n changeLocation: PropTypes.func\n }),\n};\n\nProductLocation.defaultProps = {\n actions: {\n changeLocation: () => {}\n },\n};\n\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators({\n changeLocation\n },\n dispatch)\n});\n\nexport default connect(\n null, mapDispatchToProps\n)(ProductLocation);\n","import React, { useState, useEffect } from 'react';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport PropTypes from 'prop-types';\nimport { validatePhone, validateEmail } from '../lib/validationForms';\nimport { changeInput } from '../actions/selectedProduct';\nimport { ProductType, Appointment } from '../lib/enums';\nimport {\n FORM_ENDPOINT, FORM_ENDPOINT_DEV, LOCAL_DOMAIN, DEV_DOMAIN\n} from '../lib/consts';\n\nconst CallbackRequest = ({\n actions, selectedProduct, type, history\n}) => {\n const [validEmail, setValidEmail] = useState(false);\n const [validPhone, setValidPhone] = useState(false);\n const [validName, setValidName] = useState(false);\n const [pristine, setPristine] = useState(true);\n const lender = (selectedProduct.product && selectedProduct.product.lenderName) || '';\n\n useEffect(() => {\n actions.changeInput(Appointment.ASAP, 'callRequest');\n // eslint-disable-next-line\n }, []);\n\n function handleChangeInput(value, name) {\n actions.changeInput(value, name);\n }\n\n function handleChangePhone(value, name) {\n handleChangeInput(value, name);\n setValidPhone(validatePhone(value));\n }\n\n function handleChangeEmail(value, name) {\n handleChangeInput(value, name);\n setValidEmail(validateEmail(value));\n }\n\n function handleChangeText(value, name) {\n handleChangeInput(value, name);\n setValidName(value.length > 5);\n }\n\n function renderInputClassname(input) {\n switch (input) {\n case 'email': {\n return (pristine || validEmail) ? '' : 'error';\n }\n case 'phone': {\n return (pristine || validPhone) ? '' : 'error';\n }\n case 'name': {\n return (pristine || validName) ? '' : 'error';\n }\n default: {\n return '';\n }\n }\n }\n\n function renderFormError() {\n return !(validEmail && validPhone && validName);\n }\n\n function sendData(e) {\n e.preventDefault();\n const endpoint = (window.location.host === DEV_DOMAIN || window.location.host === LOCAL_DOMAIN) ? FORM_ENDPOINT_DEV : FORM_ENDPOINT;\n\n if (pristine) setPristine(false);\n\n if (!renderFormError()) {\n const { lenderName, ...newProduct } = selectedProduct.product;\n const { product, ...newSelectedProduct } = selectedProduct;\n const formValues = {\n product: newProduct,\n ...newSelectedProduct\n };\n\n fetch(endpoint, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(formValues),\n });\n history.push(`./success?type=${type}`);\n }\n }\n\n function renderForm() {\n return (\n <>\n {!pristine && renderFormError() &&
    Oops! That form is not valid.
    }\n
    sendData(e)}>\n
    \n
    \n handleChangeText(e.target.value, 'name')}\n type=\"text\"\n value={selectedProduct.name}\n />\n
    \n
    \n
    \n
    \n handleChangeEmail(e.target.value, 'email')}\n type=\"email\"\n value={selectedProduct.email}\n />\n
    \n
    \n
    \n
    \n handleChangePhone(e.target.value, 'phone')}\n type=\"tel\"\n value={selectedProduct.phone}\n />\n
    \n
    \n
    \n

    What time is good for you?

    \n
    \n handleChangeInput(e.target.value, 'callRequest')}\n />\n \n handleChangeInput(e.target.value, 'callRequest')}\n />\n \n handleChangeInput(e.target.value, 'callRequest')}\n />\n \n
    \n
    \n \n Submit\n \n \n

    \n Clicking Submit accepts both IFG's and Precept Finance's Privacy Policies.\n

    \n \n );\n }\n\n if (type === ProductType.BRIDGING) {\n return (\n
    \n

    Request a callback

    \n

    Let's talk about your bridge finance requirements.

    \n
      \n
    1. Quick responses
    2. \n
    3. Up to 75% LTV
    4. \n
    5. Residential or commercial property
    6. \n
    \n {renderForm()}\n
    \n );\n }\n return (\n
    \n

    Request a callback

    \n

    Speak to one of Precept Finance's underwriting experts to discuss your finance requirements.

    \n {renderForm()}\n
    \n );\n};\n\n\nCallbackRequest.propTypes = {\n type: PropTypes.string.isRequired,\n history: PropTypes.shape({\n push: PropTypes.func.isRequired\n }),\n selectedProduct: PropTypes.shape({\n phone: PropTypes.string,\n email: PropTypes.string,\n name: PropTypes.string,\n product: PropTypes.shape({\n lenderName: PropTypes.string\n }),\n callRequest: PropTypes.string\n }),\n actions: PropTypes.shape({\n changeInput: PropTypes.func,\n }),\n location: PropTypes.shape({\n host: PropTypes.string,\n }),\n};\n\nCallbackRequest.defaultProps = {\n selectedProduct: {},\n history: () => {},\n actions: {\n changeInput: () => {},\n },\n location: {\n host: null,\n }\n};\n\nconst mapStateToProps = (state) => ({\n selectedProduct: state.selectedProduct\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators({\n changeInput,\n },\n dispatch)\n});\n\nexport default connect(\n mapStateToProps, mapDispatchToProps\n)(withRouter(CallbackRequest));\n","import { PhoneNumberUtil } from 'google-libphonenumber';\n\n\nexport function validatePhone(phone) {\n /*\n Phone number validation using google-libphonenumber\n */\n let valid = false;\n try {\n const phoneUtil = PhoneNumberUtil.getInstance();\n valid = phoneUtil.isValidNumber(phoneUtil.parse(phone, 'GB'));\n } catch (e) {\n valid = false;\n }\n return valid;\n}\n\nexport function validateEmail(email) {\n const re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(String(email).toLowerCase());\n}\n","import React, { useEffect } from 'react';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { bindActionCreators } from 'redux';\nimport { setPresetBridgingProduct } from '../actions/selectedProduct';\nimport { ProductType } from '../lib/enums';\n\nimport CallbackRequest from './CallbackRequest';\n\n\nconst BridgingCallbackRequest = ({\n actions\n}) => {\n useEffect(() => {\n actions.setPresetBridgingProduct();\n // eslint-disable-next-line\n }, []);\n\n return ;\n};\n\nBridgingCallbackRequest.propTypes = {\n actions: PropTypes.shape({\n setPresetBridgingProduct: PropTypes.func,\n }),\n};\n\nBridgingCallbackRequest.defaultProps = {\n actions: {\n setPresetBridgingProduct: () => {},\n },\n};\n\nconst mapStateToProps = (state) => ({\n selectedProduct: state.selectedProduct\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators({\n setPresetBridgingProduct,\n },\n dispatch)\n});\n\nexport default connect(\n mapStateToProps, mapDispatchToProps\n)(withRouter(BridgingCallbackRequest));\n","import React, { useState, useEffect } from 'react';\nimport { Route, BrowserRouter as Router, Switch } from 'react-router-dom';\nimport { createBrowserHistory } from 'history';\nimport ReactGA from 'react-ga';\nimport Calculator from './components/Calculator';\nimport Success from './components/Success';\nimport Header from './components/Header';\nimport Error404 from './components/Error404';\nimport Footer from './components/Footer';\nimport ProductTypePurposeSelect from './components/ProductTypePurposeSelect';\nimport ProductLocation from './components/ProductLocation';\nimport CallbackRequest from './components/CallbackRequest';\nimport BridgingCallbackRequest from './components/BridgingCallbackRequest';\nimport { ProductType } from './lib/enums';\n\nexport const MenuContext = React.createContext();\nconst history = createBrowserHistory();\nhistory.listen((location) => {\n ReactGA.set({ page: location.pathname });\n ReactGA.pageview(location.pathname);\n});\n\nconst App = () => {\n const [modalClassname, setModalClassname] = useState('');\n useEffect(() => {\n ReactGA.pageview(window.location.pathname);\n }, []);\n\n return (\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\nexport default App;\n","import { combineReducers } from 'redux';\nimport products from './products';\nimport inputs from './inputs';\nimport calculatedProducts from './calculatedProducts';\nimport selectedProduct from './selectedProduct';\n\nconst ifgApp = combineReducers({\n products,\n inputs,\n calculatedProducts,\n selectedProduct\n});\n\nexport default ifgApp;\n","export default (state = [], action) => {\n switch (action.type) {\n default:\n return state.map((product, i) => ({\n id: i,\n ...product\n }));\n }\n};\n","import { Purpose, ProductType, RepaymentType } from '../lib/enums';\n\nexport default (state = {}, action) => {\n switch (action.type) {\n case 'INPUTS.SET_URL_PARAMS': {\n let purpose;\n let productType;\n let term;\n let financeRequired;\n let propertyValue;\n let repaymentType;\n if (action.params) {\n term = parseInt(action.params.term, 10)\n || state.term;\n financeRequired = parseInt(action.params.financeAmount, 10)\n || state.financeRequired;\n propertyValue = parseInt(action.params.propertyPrice, 10)\n || state.propertyValue;\n repaymentType = Object.values(RepaymentType).indexOf(action.params.repaymentType) >= 0\n ? action.params.repaymentType\n : state.repaymentType;\n purpose = Object.values(Purpose).indexOf(action.params.purpose) >= 0\n ? action.params.purpose\n : state.purpose;\n }\n\n switch (action.url) {\n case 'buy-to-let': {\n purpose = Purpose.PURCHASE;\n productType = ProductType.BUY_TO_LET;\n break;\n }\n case 'home-purchase': {\n purpose = Purpose.PURCHASE;\n productType = ProductType.RESIDENTIAL;\n break;\n }\n case 'refinance': {\n purpose = Purpose.REFINANCE;\n productType = ProductType.RESIDENTIAL;\n break;\n }\n default: {\n purpose = state.purpose;\n productType = state.productType;\n }\n }\n\n return {\n ...state,\n purpose,\n repaymentType,\n term,\n financeRequired,\n propertyValue,\n productType,\n };\n }\n case 'INPUTS.CHANGE_INPUT': {\n return {\n ...state,\n [action.name]: action.value\n };\n }\n case 'INPUTS.CHANGE_PRODUCT_TYPE': {\n return {\n ...state,\n productType: action.payload.productType,\n purpose: action.payload.purpose\n };\n }\n case 'INPUTS.CHANGE_LOCATION': {\n return {\n ...state,\n location: action.payload,\n };\n }\n case 'INPUTS.CHANGE_FTV': {\n return {\n ...state,\n fTV: action.financeRequired / action.propertyValue,\n };\n }\n default:\n return state;\n }\n};\n","export default (state = [], action) => {\n switch (action.type) {\n case 'CALCULATED_PRODUCTS.SET_CALCULATED_PRODUCTS': {\n return action.payload;\n }\n default:\n return state;\n }\n};\n","import { getRawFee } from '../lib/getFee';\nimport { ProductType } from '../lib/enums';\n\n\nexport default (state = {}, action) => {\n switch (action.type) {\n case 'SELECTED_PRODUCT.SET_PRESET_BRIDGING_PRODUCT': {\n return {\n ...state,\n product: {\n lenderName: 'Offa',\n productName: 'Offa Bridging',\n productType: ProductType.BRIDGING,\n minTerm: 1,\n maxTerm: 12\n }\n };\n }\n case 'SELECTED_PRODUCT.CHANGE_INPUT': {\n return {\n ...state,\n [action.name]: action.value\n };\n }\n case 'SELECTED_PRODUCT.SET_URL_PRODUCT_TYPE': {\n return {\n ...state,\n example: {\n ...state.example,\n urlProductType: action.url\n }\n };\n }\n case 'SELECTED_PRODUCT.SET_SELECTED_PRODUCT': {\n const {\n lenderName,\n productName,\n purpose,\n productType,\n repaymentType,\n fTV,\n initialPeriodMonths,\n initialPeriodLimit,\n initialRate,\n initialRateType,\n minTerm,\n maxTerm,\n variableRate,\n fixedAmountFee,\n variableFee,\n minFinance,\n maxFinance,\n minPropertyValue,\n location\n } = action.calculatedProduct.product;\n\n const {\n initialMonthlyPayment,\n followOnPayment,\n totalRentPayable,\n totalAmountPayable\n } = action.calculatedProduct;\n\n const {\n propertyValue,\n financeRequired,\n term,\n } = action.inputs;\n\n return {\n ...state,\n product: {\n lenderName,\n productName,\n purpose,\n productType,\n repaymentType,\n fTV,\n initialPeriodMonths,\n initialPeriodLimit,\n initialRate,\n initialRateType,\n minTerm,\n maxTerm,\n variableRate,\n fixedAmountFee,\n variableFee,\n minFinance,\n maxFinance,\n minPropertyValue,\n location\n },\n example: {\n ...state.example,\n propertyPrice: propertyValue,\n financeAmount: financeRequired,\n deposit: propertyValue - financeRequired,\n term,\n fee: getRawFee(fixedAmountFee, variableFee, financeRequired),\n initialMonthlyPmt: initialMonthlyPayment,\n variableMonthlyPmt: followOnPayment,\n totalRent: totalRentPayable,\n totalCost: totalAmountPayable,\n }\n };\n }\n default:\n return state;\n }\n};\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport reduxThunk from 'redux-thunk';\nimport { Provider } from 'react-redux';\nimport { createStore, compose, applyMiddleware } from 'redux';\nimport ReactGA from 'react-ga';\nimport * as serviceWorker from './serviceWorker';\nimport App from './App';\nimport ifgApp from './reducers';\nimport initialState from './initialState';\n\nimport './styles/index.scss';\n\nReactGA.initialize('UA-75292476-2');\n\nconst store = createStore(\n ifgApp,\n initialState,\n compose(\n applyMiddleware(reduxThunk),\n // process.env.NODE_ENV === 'development' && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__() : (f) => f\n // eslint-disable-next-line no-underscore-dangle\n window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__() : (f) => f\n )\n);\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","export default {\n inputs: {\n productType: \"RESIDENTIAL\",\n purpose: \"PURCHASE\",\n repaymentType: \"HPP\",\n propertyValue: 200000,\n financeRequired: 100000,\n fTV: 0.5,\n term: 360,\n },\n selectedProduct: {\n name: \"\",\n email: \"\",\n phone: \"\",\n callRequest: null,\n },\n products: [\n {\n lender: \"STRIDE_UP\",\n lenderName: \"StrideUp\",\n productName: \"StrideUp HPP, 2 year fixed, 90% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.9,\n initialPeriodMonths: 24,\n initialPeriodLimit: null,\n initialRate: 0.0719,\n initialRateType: \"FIXED\",\n minTerm: 36,\n maxTerm: 480,\n variableRate: 0.0899,\n fixedAmountFee: 1249.0,\n variableFee: null,\n minFinance: 50000,\n maxFinance: 1500000,\n minPropertyValue: 85000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"STRIDE_UP\",\n lenderName: \"StrideUp\",\n productName: \"StrideUp HPP, 2 year fixed, 85% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.85,\n initialPeriodMonths: 24,\n initialPeriodLimit: null,\n initialRate: 0.0699,\n initialRateType: \"FIXED\",\n minTerm: 36,\n maxTerm: 480,\n variableRate: 0.0899,\n fixedAmountFee: 1249.0,\n variableFee: null,\n minFinance: 50000,\n maxFinance: 1500000,\n minPropertyValue: 85000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"STRIDE_UP\",\n lenderName: \"StrideUp\",\n productName: \"StrideUp HPP, 2 year fixed, 80% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.8,\n initialPeriodMonths: 24,\n initialPeriodLimit: null,\n initialRate: 0.0689,\n initialRateType: \"FIXED\",\n minTerm: 36,\n maxTerm: 480,\n variableRate: 0.0899,\n fixedAmountFee: 1249.0,\n variableFee: null,\n minFinance: 50000,\n maxFinance: 1500000,\n minPropertyValue: 85000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"STRIDE_UP\",\n lenderName: \"StrideUp\",\n productName: \"StrideUp HPP, 2 year fixed, 65% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.65,\n initialPeriodMonths: 24,\n initialPeriodLimit: null,\n initialRate: 0.0679,\n initialRateType: \"FIXED\",\n minTerm: 36,\n maxTerm: 480,\n variableRate: 0.0899,\n fixedAmountFee: 1249.0,\n variableFee: null,\n minFinance: 50000,\n maxFinance: 1500000,\n minPropertyValue: 85000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"STRIDE_UP\",\n lenderName: \"StrideUp\",\n productName: \"StrideUp HPP, 5 year fixed, 85% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.85,\n initialPeriodMonths: 60,\n initialPeriodLimit: null,\n initialRate: 0.0689,\n initialRateType: \"FIXED\",\n minTerm: 36,\n maxTerm: 480,\n variableRate: 0.0899,\n fixedAmountFee: 1249.0,\n variableFee: null,\n minFinance: 50000,\n maxFinance: 1500000,\n minPropertyValue: 85000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"STRIDE_UP\",\n lenderName: \"StrideUp\",\n productName: \"StrideUp HPP, 5 year fixed, 85% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.85,\n initialPeriodMonths: 60,\n initialPeriodLimit: null,\n initialRate: 0.0669,\n initialRateType: \"FIXED\",\n minTerm: 36,\n maxTerm: 480,\n variableRate: 0.0899,\n fixedAmountFee: 1249.0,\n variableFee: null,\n minFinance: 50000,\n maxFinance: 1500000,\n minPropertyValue: 85000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"STRIDE_UP\",\n lenderName: \"StrideUp\",\n productName: \"StrideUp HPP, 5 year fixed, 80% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.8,\n initialPeriodMonths: 60,\n initialPeriodLimit: null,\n initialRate: 0.0614,\n initialRateType: \"FIXED\",\n minTerm: 36,\n maxTerm: 480,\n variableRate: 0.0899,\n fixedAmountFee: 1249.0,\n variableFee: null,\n minFinance: 50000,\n maxFinance: 1500000,\n minPropertyValue: 85000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"STRIDE_UP\",\n lenderName: \"StrideUp\",\n productName: \"StrideUp HPP, 5 year fixed, 65% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.65,\n initialPeriodMonths: 60,\n initialPeriodLimit: null,\n initialRate: 0.0604,\n initialRateType: \"FIXED\",\n minTerm: 36,\n maxTerm: 480,\n variableRate: 0.0899,\n fixedAmountFee: 1249.0,\n variableFee: null,\n minFinance: 50000,\n maxFinance: 1500000,\n minPropertyValue: 85000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 2 years fixed Green Product 65% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.65,\n initialPeriodMonths: 24,\n initialPeriodLimit: null,\n initialRate: 0.0589,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: 499.0,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 2 years fixed Green Product 80% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.8,\n initialPeriodMonths: 60,\n initialPeriodLimit: null,\n initialRate: 0.0599,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: 499.0,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 5 years fixed Green Product 65% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.65,\n initialPeriodMonths: 24,\n initialPeriodLimit: null,\n initialRate: 0.0585,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: 499.0,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 5 years fixed Green Product 80% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.8,\n initialPeriodMonths: 60,\n initialPeriodLimit: null,\n initialRate: 0.0595,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: 499.0,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 2 years fixed, 65% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.65,\n initialPeriodMonths: 24,\n initialPeriodLimit: null,\n initialRate: 0.0599,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: 499.0,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 2 years fixed, 80% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.8,\n initialPeriodMonths: 60,\n initialPeriodLimit: null,\n initialRate: 0.0609,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: 499.0,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 5 years fixed, 65% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.65,\n initialPeriodMonths: 24,\n initialPeriodLimit: null,\n initialRate: 0.0595,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: 499.0,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 5 years fixed, 80% FTV\",\n purpose: \"PURCHASE\",\n productType: \"RESIDENTIAL\",\n repaymentType: \"HPP\",\n fTV: 0.8,\n initialPeriodMonths: 60,\n initialPeriodLimit: null,\n initialRate: 0.0605,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: 499.0,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 2 years fixed Green Product 65% FTV\",\n purpose: \"PURCHASE\",\n productType: \"BUY TO LET\",\n repaymentType: \"BTL\",\n fTV: 0.65,\n initialPeriodMonths: 24,\n initialPeriodLimit: null,\n initialRate: 0.0614,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: null,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 2 years fixed Green Product 80% FTV\",\n purpose: \"PURCHASE\",\n productType: \"BUY TO LET\",\n repaymentType: \"BTL\",\n fTV: 0.8,\n initialPeriodMonths: 60,\n initialPeriodLimit: null,\n initialRate: 0.0634,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: null,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 5 years fixed Green Product 65% FTV\",\n purpose: \"PURCHASE\",\n productType: \"BUY TO LET\",\n repaymentType: \"BTL\",\n fTV: 0.65,\n initialPeriodMonths: 24,\n initialPeriodLimit: null,\n initialRate: 0.065,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: null,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 5 years fixed Green Product 80% FTV\",\n purpose: \"PURCHASE\",\n productType: \"BUY TO LET\",\n repaymentType: \"BTL\",\n fTV: 0.8,\n initialPeriodMonths: 60,\n initialPeriodLimit: null,\n initialRate: 0.0664,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: null,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 2 years fixed, 65% FTV\",\n purpose: \"PURCHASE\",\n productType: \"BUY TO LET\",\n repaymentType: \"BTL\",\n fTV: 0.65,\n initialPeriodMonths: 24,\n initialPeriodLimit: null,\n initialRate: 0.0624,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: null,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 2 years fixed, 80% FTV\",\n purpose: \"PURCHASE\",\n productType: \"BUY TO LET\",\n repaymentType: \"BTL\",\n fTV: 0.8,\n initialPeriodMonths: 60,\n initialPeriodLimit: null,\n initialRate: 0.0644,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: null,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 5 years fixed, 65% FTV\",\n purpose: \"PURCHASE\",\n productType: \"BUY TO LET\",\n repaymentType: \"BTL\",\n fTV: 0.65,\n initialPeriodMonths: 24,\n initialPeriodLimit: null,\n initialRate: 0.066,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: null,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n {\n lender: \"GATEHOUSE BANK\",\n lenderName: \"Gatehouse Bank\",\n productName: \"Gatehouse Bank, 5 years fixed, 80% FTV\",\n purpose: \"PURCHASE\",\n productType: \"BUY TO LET\",\n repaymentType: \"BTL\",\n fTV: 0.8,\n initialPeriodMonths: 60,\n initialPeriodLimit: null,\n initialRate: 0.0674,\n initialRateType: \"FIXED\",\n minTerm: 60,\n maxTerm: 420,\n variableRate: 0.07,\n fixedAmountFee: null,\n variableFee: null,\n minFinance: 75000,\n maxFinance: 5000000,\n minPropertyValue: 115000,\n location: \"ENGLAND_WALES\",\n },\n ],\n};\n"],"sourceRoot":""}