source map exposed
analyzed
https://4njbets.us.betfair.com/fnd/assets/sightline.b31fc5891ac719eef7d6.js
map: https://4njbets.us.betfair.com/fnd/assets/sightline.b31fc5891ac719eef7d6.js.map
70 source files
933.0 KB map size
3 endpoints found
0 secrets found
discovered 5 hours, 21 minutes ago
70
source files
933.0 KB
map size
0
secrets
3
endpoints
endpoints from source map (3)
GET
/v1.0/depositInitialData
GET
../../../../data/parameterization.json
GET
../data/messages.json
source file tree (70)
70 files with original sourcewebpack:///sightline.b31fc5891ac719eef7d6.js
window["sightline"] =
webpackJsonpsightline([0],{
/***/ 136:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_fp_padCharsStart__ = __webpack_require__(359);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_fp_padCharsStart___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_fp_padCharsStart__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_defaultTo__ = __webpack_require__(144);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_defaultTo___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_defaultTo__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_noop__ = __webpack_require__(32);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_noop__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_get__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_get__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_lodash_bindAll__ = __webpack_require__(29);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_lodash_bindAll___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lodash_bindAll__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_classnames__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_classnames__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_credit_card_type__ = __webpack_require__(385);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_credit_card_type___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_credit_card_type__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__tvg_conf__ = __webpack_require__(6);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Form_Input__ = __webpack_require__(50);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__luhn__ = __webpack_require__(455);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__SecurityNumber__ = __webpack_require__(155);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__styles_css__ = __webpack_require__(459);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__styles_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12__styles_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__Brand__ = __webpack_require__(156);
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _extends() { _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; }; return _extends.apply(this, arguments); }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var tvgConf = Object(__WEBPACK_IMPORTED_MODULE_8__tvg_conf__["a" /* default */])();
// const getCurrentMonth = () => new Date().getUTCMonth() + 1;
var getCurrentYear = function getCurrentYear() {
return new Date().getUTCFullYear().toString().substr(2, 3);
};
var leftPad = __WEBPACK_IMPORTED_MODULE_0_lodash_fp_padCharsStart___default()("0", 2);
var toMonth = function toMonth(month) {
var monthNum = parseInt(month, 10);
return monthNum > 0 && monthNum <= 12 ? monthNum : null; // eslint-disable-line flowtype/no-weak-types
};
var _ref = /*#__PURE__*/_jsx("legend", {}, void 0, "Credit Card");
var CreditCard = /*#__PURE__*/function (_Component) {
_inherits(CreditCard, _Component);
var _super = _createSuper(CreditCard);
function CreditCard(props) {
var _this;
_classCallCheck(this, CreditCard);
_this = _super.call(this, props);
__WEBPACK_IMPORTED_MODULE_4_lodash_bindAll___default()(_assertThisInitialized(_this), ["handleCardNumberChange", "handleCardNumberBlur", "handleSecurityNumberChange", "handleSecurityNumberBlur", "handleExpirationMonthChange", "handleExpirationMonthBlur", "handleExpirationYearChange", "handleExpirationYearBlur", "validateCardNumber", "handleExpirationMonthFocus", "handleExpirationYearFocus"]);
_this.state = _objectSpread(_objectSpread({
// Copy initial seed props
cardNumber: _this.props.initialCardNumber,
expirationMonth: _this.props.initialExpirationMonth,
expirationYear: _this.props.initialExpirationYear,
securityNumber: _this.props.initialSecurityNumber
}, CreditCard.findCardType(_this.props.initialCardNumber)), {}, {
// Error messages
cardNumberError: null,
expirationMonthError: null,
expirationYearError: null,
securityNumberError: null,
isInvalidMonth: false,
maskedCardNumber: _this.props.initialCardNumber.replace(/.(?=.{4,}$)/g, "*"),
alreadyErasedMask: false,
isFdr: tvgConf.product.indexOf("fdr") === 0,
isExpirationMonthFocused: false,
isExpirationYearFocused: false
});
return _this;
}
_createClass(CreditCard, [{
key: "componentDidMount",
value: function componentDidMount() {
var _this2 = this;
if (this.props.initialExpirationMonth || this.props.initialExpirationYear) {
this.handleExpirationMonthChange(this.props.initialExpirationMonth);
this.handleExpirationYearChange(this.props.initialExpirationYear);
}
if (this.props.initialCardNumber && this.props.hadCardFromRedirect) {
this.validateCardNumber(this.props.initialCardNumber); // trigger cvv error - to be refactored (when the input component changes)
// eslint-disable-next-line
this.setState({
securityNumber: "0"
}, function () {
return _this2.setState({
securityNumber: ""
});
});
}
}
}, {
key: "validateCardNumber",
value: function validateCardNumber(cardNumber) {
var _this3 = this;
this.setState({
isValid: true
}, function () {
return _this3.setState({
isValid: Object(__WEBPACK_IMPORTED_MODULE_10__luhn__["a" /* isValid */])(cardNumber)
});
});
}
}, {
key: "handleCardNumberChange",
value: function handleCardNumberChange(cardNumber) {
var _this4 = this;
var card = CreditCard.findCardType(cardNumber);
var oldState = this.state;
var oldCardNumber = oldState.cardNumber;
var newState = _objectSpread(_objectSpread({}, this.state), {}, {
cardNumber: cardNumber
}, card);
if (this.props.hadCardFromRedirect && !this.state.alreadyErasedMask) {
newState.cardNumber = "";
newState.alreadyErasedMask = true;
}
this.setState(newState, function () {
if (_this4.state.cardNumber !== oldCardNumber) {
_this4.props.onCardNumberChange(newState, oldState);
_this4.props.onChange(newState, oldState);
}
});
}
}, {
key: "handleCardNumberBlur",
value: function handleCardNumberBlur(cardNumber) {
var _this5 = this;
var card = CreditCard.findCardType(cardNumber);
var oldState = this.state;
var newState = _objectSpread(_objectSpread({}, this.state), {}, {
cardNumber: cardNumber
}, card);
if (this.props.hadCardFromRedirect && !this.state.alreadyErasedMask) {
newState.cardNumber = "";
newState.alreadyErasedMask = true;
}
this.setState(newState, function () {
_this5.props.onCardNumberBlur(newState, oldState);
_this5.props.onBlur(newState, oldState);
});
}
}, {
key: "handleExpirationMonthChange",
value: function handleExpirationMonthChange(newMonth) {
var _this6 = this;
var oldState = this.state;
var expirationMonth = toMonth(newMonth);
var isInvalidMonth = CreditCard.isInvalidMonth(newMonth, "20".concat(this.state.expirationYear));
if (!this.state.expirationYear && !this.state.isFdr) {
isInvalidMonth = false; // not to show error whenever the only input fulfilled is the month one
}
if (expirationMonth && this.state.expirationMonth !== expirationMonth) {
this.setState({
expirationMonth: expirationMonth,
isInvalidMonth: isInvalidMonth
}, function () {
_this6.props.onExpirationMonthChange(expirationMonth, oldState.expirationMonth);
_this6.props.onChange(_this6.state, oldState);
});
} else if (!expirationMonth || expirationMonth === "") {
this.setState({
expirationMonth: "",
isInvalidMonth: isInvalidMonth
}, function () {
_this6.props.onChange(_this6.state, oldState);
});
}
}
}, {
key: "handleExpirationMonthBlur",
value: function handleExpirationMonthBlur(newMonth) {
var _this7 = this;
this.setState({
isExpirationMonthFocused: false
});
var oldState = this.state;
var isInvalidMonth = CreditCard.isInvalidMonth(newMonth, "20".concat(this.state.expirationYear));
var bluredMonth = toMonth(newMonth);
if (!this.state.expirationYear && !this.state.isFdr) {
isInvalidMonth = false; // not to show error whenever the only input fulfilled is the month one
}
if (bluredMonth && bluredMonth !== "") {
var month = "";
if (bluredMonth && bluredMonth > 0) {
month = bluredMonth.toString().length === 1 ? leftPad(bluredMonth.toString()) : +bluredMonth.toString();
}
this.setState({
expirationMonth: month,
isInvalidMonth: isInvalidMonth
}, function () {
_this7.props.onExpirationMonthBlur(month, oldState.expirationMonth);
_this7.props.onBlur(_this7.state, oldState);
});
} else if (!bluredMonth || bluredMonth === "") {
this.setState({
expirationMonth: "",
isInvalidMonth: isInvalidMonth
}, function () {
_this7.props.onBlur(_this7.state, oldState);
});
}
}
}, {
key: "handleExpirationYearChange",
value: function handleExpirationYearChange(newYear) {
var _this8 = this;
var oldState = this.state;
var expirationYear = parseInt(newYear, 10);
var isInvalidMonth = CreditCard.isInvalidMonth(this.state.expirationMonth, "20".concat(newYear));
this.setState({
expirationYear: expirationYear,
isInvalidMonth: isInvalidMonth
}, function () {
_this8.props.onExpirationYearChange(expirationYear, oldState.expirationYear);
_this8.props.onChange(_this8.state, oldState);
});
}
}, {
key: "handleExpirationYearBlur",
value: function handleExpirationYearBlur(newYear) {
var _this9 = this;
var oldState = this.state;
var expirationYear = parseInt(newYear, 10);
var isInvalidMonth = CreditCard.isInvalidMonth(this.state.expirationMonth, "20".concat(newYear));
this.setState({
expirationYear: expirationYear,
isInvalidMonth: isInvalidMonth,
isExpirationYearFocused: false
}, function () {
_this9.props.onExpirationYearBlur(expirationYear, oldState.expirationYear);
_this9.props.onBlur(_this9.state, oldState);
});
}
}, {
key: "handleExpirationMonthFocus",
value: function handleExpirationMonthFocus() {
this.setState({
isExpirationMonthFocused: true
});
}
}, {
key: "handleExpirationYearFocus",
value: function handleExpirationYearFocus() {
this.setState({
isExpirationYearFocused: true
});
}
}, {
key: "handleSecurityNumberChange",
value: function handleSecurityNumberChange(newSecurityNumber) {
var _this10 = this;
var oldState = this.state;
var securityNumber = newSecurityNumber;
this.setState({
securityNumber: securityNumber
}, function () {
_this10.props.onSecurityNumberChange(securityNumber, oldState.securityNumber);
_this10.props.onChange(_this10.state, oldState);
});
}
}, {
key: "handleSecurityNumberBlur",
value: function handleSecurityNumberBlur(newSecurityNumber) {
var _this11 = this;
var oldState = this.state;
var securityNumber = newSecurityNumber;
this.setState({
securityNumber: securityNumber
}, function () {
_this11.props.onSecurityNumberBlur(securityNumber, oldState.securityNumber);
_this11.props.onBlur(_this11.state, oldState);
});
}
}, {
key: "renderCardBrandIcon",
value: function renderCardBrandIcon() {
var dimensions = {
width: "30px",
height: "18px"
};
var cardType = this.state.cardType;
var classes = __WEBPACK_IMPORTED_MODULE_6_classnames___default()(["js-card-icon", "js-card-".concat(cardType), __WEBPACK_IMPORTED_MODULE_12__styles_css___default.a[cardType], __WEBPACK_IMPORTED_MODULE_12__styles_css___default.a.cardBrand]).toLowerCase();
return /*#__PURE__*/__WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_13__Brand__["a" /* default */], _extends({
brand: cardType,
className: classes
}, dimensions));
}
}, {
key: "renderCardNumber",
value: function renderCardNumber() {
var classes = __WEBPACK_IMPORTED_MODULE_6_classnames___default()(["js-card-number", __WEBPACK_IMPORTED_MODULE_12__styles_css___default.a.cardNumber]);
return /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_12__styles_css___default.a.cardNumberWrapper
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Form_Input__["a" /* default */], {
className: classes,
required: true,
type: this.props.hadCardFromRedirect && !this.state.alreadyErasedMask ? "text" : "number",
size: "small",
dislabelText: "Card Number",
forbidInput: function forbidInput(key) {
return key === 101 || key === 189 || key === 46 || key < 48 || key > 57;
},
placeholder: "0000 0000 0000 0000",
value: this.props.hadCardFromRedirect && !this.state.alreadyErasedMask ? this.state.maskedCardNumber : __WEBPACK_IMPORTED_MODULE_1_lodash_defaultTo___default()(this.state.cardNumber, ""),
onChange: this.handleCardNumberChange,
onBlur: this.handleCardNumberBlur,
onFill: this.props.onCardNumberFill,
onError: this.props.onCardNumberError,
labelText: "Credit Card Number",
maxLength: Math.max.apply(Math, _toConsumableArray(this.state.cardNumberSize || [])),
autocomplete: "cc-number",
customError: !this.state.isValid,
messages: {
required: "Card number is invalid",
customError: "Card number is invalid"
},
qaLabel: "cardNumber",
preventOnErrorOnChange: true
}), this.renderCardBrandIcon());
}
}, {
key: "renderExpirationMonth",
value: function renderExpirationMonth() {
return /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Form_Input__["a" /* default */], {
className: __WEBPACK_IMPORTED_MODULE_6_classnames___default()(["js-expiration-month", __WEBPACK_IMPORTED_MODULE_12__styles_css___default.a.expirationMonth]),
required: true,
type: "number",
size: "small",
placeholder: "MM",
maxLength: 2,
min: 1,
max: 12,
value: this.state.expirationMonth,
forbidInput: function forbidInput(key) {
return key === 101 || key === 189 || key === 46 || key < 48 || key > 57;
},
onFocus: this.handleExpirationMonthFocus,
onBlur: this.handleExpirationMonthBlur,
onChange: this.handleExpirationMonthChange,
onFill: this.props.onExpirationMonthFill,
onError: this.props.onExpirationMonthError,
showIcon: false,
autocomplete: "cc-exp-month",
customError: this.state.isInvalidMonth,
messages: {
required: "Date is invalid (MM/YY)",
min: "Date is invalid (MM/YY)",
max: "Date is invalid (MM/YY)",
customError: "Date can not be in the past"
},
qaLabel: "expiryDateMonth",
preventOnErrorOnChange: true
});
}
}, {
key: "renderExpirationYear",
value: function renderExpirationYear() {
return /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Form_Input__["a" /* default */], {
className: __WEBPACK_IMPORTED_MODULE_6_classnames___default()(["js-expiration-year", __WEBPACK_IMPORTED_MODULE_12__styles_css___default.a.expirationYear]),
required: true,
type: "number",
size: "small",
value: (this.state.expirationYear || "").toString(),
placeholder: "YY",
min: getCurrentYear(),
maxLength: 2,
forbidInput: function forbidInput(key) {
return key === 101 || key === 189 || key === 46 || key < 48 || key > 57;
},
onFocus: this.handleExpirationYearFocus,
onChange: this.handleExpirationYearChange,
onBlur: this.handleExpirationYearBlur,
onFill: this.props.onExpirationYearFill,
onError: this.props.onExpirationYearError,
showIcon: false,
autocomplete: "cc-exp-year",
messages: {
required: "Date is invalid (MM/YY)",
min: "Date can not be in the past"
},
qaLabel: "expiryDateYear",
preventOnErrorOnChange: true
});
}
}, {
key: "renderSecurityNumber",
value: function renderSecurityNumber() {
return /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_11__SecurityNumber__["a" /* default */], {
value: this.state.securityNumber,
className: "js-security-number",
maxLength: this.state.securityCodeSize,
labelText: this.state.securityCodeLabel,
onChange: this.handleSecurityNumberChange,
onBlur: this.handleSecurityNumberBlur,
onFill: this.props.onSecurityNumberFill,
onError: this.props.onSecurityNumberError,
onTooltipShow: this.props.onSecurityTooltipShow
});
}
}, {
key: "render",
value: function render() {
var cvvClasses = __WEBPACK_IMPORTED_MODULE_6_classnames___default()({
"row-cvv": true,
row: true
});
var expirationDateClasses = __WEBPACK_IMPORTED_MODULE_6_classnames___default()({
"expiry-date-label": true,
"expiry-date-label-focused": this.state.isExpirationMonthFocused || this.state.isExpirationYearFocused,
"expiry-date-label-error": this.state.isInvalidMonth
});
return /*#__PURE__*/_jsx("fieldset", {
className: __WEBPACK_IMPORTED_MODULE_12__styles_css___default.a.containerFieldset,
"data-qa-label": this.props.qaLabel.concat("CardDetails")
}, void 0, _ref, this.renderCardNumber(), /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_12__styles_css___default.a.row
}, void 0, /*#__PURE__*/_jsx("fieldset", {
className: __WEBPACK_IMPORTED_MODULE_12__styles_css___default.a.expirationDate
}, void 0, /*#__PURE__*/_jsx("legend", {
"data-qa-label": "expiryDateLabel",
className: expirationDateClasses
}, void 0, this.state.isFdr ? "Expiration Date (MM/YY)" : "Expiry Date"), this.renderExpirationMonth(), /*#__PURE__*/_jsx("span", {
className: __WEBPACK_IMPORTED_MODULE_12__styles_css___default.a.divider,
"data-qa-label": "expiryDateSplitBar"
}, void 0, "/"), this.renderExpirationYear()), !this.state.isFdr && this.renderSecurityNumber()), /*#__PURE__*/_jsx("p", {
className: __WEBPACK_IMPORTED_MODULE_12__styles_css___default.a.information,
"data-qa-label": "cardDetailsHelperMessage"
}, void 0, "Card details are securely stored for future transactions"), /*#__PURE__*/_jsx("div", {
className: cvvClasses
}, void 0, this.state.isFdr && this.renderSecurityNumber()));
}
}], [{
key: "findCardType",
value: function findCardType(cardNumber) {
var card = cardNumber.length ? __WEBPACK_IMPORTED_MODULE_7_credit_card_type___default()(cardNumber).shift() || {} : {};
var whiteList = ["VISA", "MASTERCARD", "DISCOVER", "UNKNOWN"];
var whiteListLabels = ["CVV", "CVC", "CID"];
var securityLabel = __WEBPACK_IMPORTED_MODULE_3_lodash_get___default()(card, "code.name", "CVV");
var cardType = __WEBPACK_IMPORTED_MODULE_3_lodash_get___default()(card, "niceType", "UNKNOWN").toUpperCase();
var cardNumberSize = __WEBPACK_IMPORTED_MODULE_3_lodash_get___default()(card, "length", [16]);
return {
cardType: whiteList.indexOf(cardType) !== -1 ? cardType : "UNKNOWN",
cardNumberSize: cardNumberSize,
cardNumberGaps: __WEBPACK_IMPORTED_MODULE_3_lodash_get___default()(card, "gaps", [4, 8, 12]),
securityCodeLabel: whiteListLabels.indexOf(securityLabel) !== -1 ? securityLabel : "CVV",
securityCodeSize: __WEBPACK_IMPORTED_MODULE_3_lodash_get___default()(card, "code.size", 3),
isValid: cardNumberSize.indexOf(cardNumber.length) !== -1 && Object(__WEBPACK_IMPORTED_MODULE_10__luhn__["a" /* isValid */])(cardNumber) && whiteList.indexOf(cardType) !== -1
};
}
}, {
key: "isInvalidMonth",
value: function isInvalidMonth(month, year) {
var nowMonth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date().getMonth() + 1;
var nowYear = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Date().getFullYear();
return !(month && year && month >= nowMonth && year >= nowYear || year > nowYear) || // to allow lower months but greater years
month === "" || year === "";
}
}]);
return CreditCard;
}(__WEBPACK_IMPORTED_MODULE_5_react__["Component"]);
_defineProperty(CreditCard, "defaultProps", {
initialCardNumber: "",
initialExpirationMonth: "",
initialExpirationYear: "",
initialSecurityNumber: "",
onChange: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onBlur: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onCardNumberChange: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onCardNumberBlur: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onCardNumberFill: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onCardNumberError: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onExpirationMonthChange: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onExpirationMonthBlur: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onExpirationMonthFill: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onExpirationMonthError: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onExpirationYearChange: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onExpirationYearBlur: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onExpirationYearFill: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onExpirationYearError: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onSecurityNumberChange: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onSecurityNumberBlur: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onSecurityNumberFill: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onSecurityNumberError: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
onSecurityTooltipShow: __WEBPACK_IMPORTED_MODULE_2_lodash_noop___default.a,
qaLabel: "",
hadCardFromRedirect: false
});
/* harmony default export */ __webpack_exports__["a"] = (CreditCard);
/***/ }),
/***/ 155:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_noop__ = __webpack_require__(32);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_noop___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_noop__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_defaultTo__ = __webpack_require__(144);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_defaultTo___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_defaultTo__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_classnames__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_classnames__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Form_Input__ = __webpack_require__(50);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__style_css__ = __webpack_require__(457);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5__style_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__assets_security_number_png__ = __webpack_require__(458);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__assets_security_number_png___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6__assets_security_number_png__);
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
var _ref = /*#__PURE__*/_jsx("img", {
src: __WEBPACK_IMPORTED_MODULE_6__assets_security_number_png___default.a,
width: "150px",
alt: "Security Number",
"data-qa-label": "cvvHelperModal"
});
var SecurityNumber = function SecurityNumber(props) {
return /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Form_Input__["a" /* default */], {
className: __WEBPACK_IMPORTED_MODULE_3_classnames___default()(props.className, __WEBPACK_IMPORTED_MODULE_5__style_css___default.a.securityNumber),
required: true,
type: "tel" // we need minLength here
,
size: "small",
maxLength: props.maxLength,
minLength: 3,
labelText: props.labelText,
forbidInput: function forbidInput(key) {
return key === 101 || key === 189 || key === 46 || key < 48 || key > 57;
},
placeholder: "XXX",
onChange: props.onChange,
pattern: "^\\d{1,3}$",
value: __WEBPACK_IMPORTED_MODULE_1_lodash_defaultTo___default()(props.value, ""),
showIcon: false,
onBlur: props.onBlur,
onFill: props.onFill,
onError: props.onError,
preventOnErrorOnChange: true,
onTooltipShow: props.onTooltipShow,
autocomplete: "cc-csc",
messages: {
required: "Valid number required",
tooShort: "Valid number required",
pattern: "Valid number required"
},
qaLabel: "cvv"
}, void 0, _ref);
};
SecurityNumber.defaultProps = {
value: "",
className: "",
maxLength: 3,
labelText: "CVC",
onChange: __WEBPACK_IMPORTED_MODULE_0_lodash_noop___default.a,
onBlur: __WEBPACK_IMPORTED_MODULE_0_lodash_noop___default.a,
onFill: __WEBPACK_IMPORTED_MODULE_0_lodash_noop___default.a,
onError: __WEBPACK_IMPORTED_MODULE_0_lodash_noop___default.a
};
/* harmony default export */ __webpack_exports__["a"] = (SecurityNumber);
/***/ }),
/***/ 156:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils__ = __webpack_require__(460);
function _extends() { _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; }; return _extends.apply(this, arguments); }
var EmptyTemplate = function EmptyTemplate(props) {
return /*#__PURE__*/__WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("span", props);
};
var Brand = function Brand(props) {
var BrandIcon = __WEBPACK_IMPORTED_MODULE_1__utils__["a" /* BrandsIcons */][props.brand] || EmptyTemplate;
return /*#__PURE__*/__WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(BrandIcon, _extends({
className: props.className,
"data-qa-label": props.qaLabel
}, props.dimensions));
};
Brand.defaultProps = {
brand: "UNKNOWN",
className: "",
qaLabel: "brand-icon",
dimensions: {}
};
/* harmony default export */ __webpack_exports__["a"] = (Brand);
/***/ }),
/***/ 157:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_noop__ = __webpack_require__(32);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_noop___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_noop__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__tvg_ui_bootstrap_components_Form_Input__ = __webpack_require__(50);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_classnames__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_classnames__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__data_parameterization_json__ = __webpack_require__(158);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__data_parameterization_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4__data_parameterization_json__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__style_css__ = __webpack_require__(464);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5__style_css__);
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
var customMsgsToTransfer = {
valueMissing: "Field is Required",
required: "Field is Required",
min: "Minimum $".concat(__WEBPACK_IMPORTED_MODULE_4__data_parameterization_json___default.a.sightlineTransferConfigs.minValue),
max: "Insufficient funds to transfer your requested amount. Please take note of any transaction fee on the Review and Authorize Pane below",
pattern: "Invalid Value",
tooLong: "Too long",
tooShort: "Too short value",
badInput: "Invalid Value",
stepMismatch: "Maximum 2 decimal points"
};
var Transfer = function Transfer(props) {
return /*#__PURE__*/_jsx("div", {
"data-qa-label": props.qaLabel.concat("TransferToTVG")
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_2__tvg_ui_bootstrap_components_Form_Input__["a" /* default */], {
value: props.value || "",
type: "number",
forbidInput: function forbidInput(key) {
return key === 101 || key === 189 || (key < 48 || key > 57) && key !== 8 && key !== 44 && key !== 46;
},
size: "small",
required: true,
currency: true,
className: __WEBPACK_IMPORTED_MODULE_3_classnames___default()(__WEBPACK_IMPORTED_MODULE_5__style_css___default.a.transfer),
min: __WEBPACK_IMPORTED_MODULE_4__data_parameterization_json___default.a.sightlineTransferConfigs.minValue,
max: props.max,
onChange: props.onChange,
onBlur: props.onBlur,
onFill: props.onFill,
onError: props.onError,
messages: customMsgsToTransfer,
qaLabel: "transferToTVG"
}));
};
Transfer.defaultProps = {
onChange: __WEBPACK_IMPORTED_MODULE_0_lodash_noop___default.a,
onBlur: __WEBPACK_IMPORTED_MODULE_0_lodash_noop___default.a,
onFill: __WEBPACK_IMPORTED_MODULE_0_lodash_noop___default.a,
onError: __WEBPACK_IMPORTED_MODULE_0_lodash_noop___default.a,
onTooltipShow: __WEBPACK_IMPORTED_MODULE_0_lodash_noop___default.a,
qaLabel: ""
};
/* harmony default export */ __webpack_exports__["a"] = (Transfer);
/***/ }),
/***/ 158:
/***/ (function(module, exports) {
module.exports = {"sightlineDepositConfigs":{"minValue":10},"sightlineTransferConfigs":{"minValue":10}}
/***/ }),
/***/ 159:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_bindAll__ = __webpack_require__(29);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_bindAll___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_bindAll__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_noop__ = __webpack_require__(32);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_noop___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_noop__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__tvg_ui_bootstrap_components_Buttons__ = __webpack_require__(17);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Form_Input__ = __webpack_require__(50);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__data_parameterization_json__ = __webpack_require__(158);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__data_parameterization_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5__data_parameterization_json__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__styles_css__ = __webpack_require__(467);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__styles_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6__styles_css__);
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
/**
* TVG DepositAmount Component
*/
var DepositAmount = /*#__PURE__*/function (_Component) {
_inherits(DepositAmount, _Component);
var _super = _createSuper(DepositAmount);
function DepositAmount(props) {
var _this;
_classCallCheck(this, DepositAmount);
_this = _super.call(this, props);
_this.state = {
inputValue: _this.props.value
};
__WEBPACK_IMPORTED_MODULE_0_lodash_bindAll___default()(_assertThisInitialized(_this), ["handleButtonClick", "setValue"]);
return _this;
}
_createClass(DepositAmount, [{
key: "setValue",
value: function setValue(value) {
var isFloat = !!(!isNaN(value) && (value.indexOf(".") !== -1 || value.indexOf(",") !== -1));
var twoDecimals = parseFloat(value).toFixed(2) === value || parseFloat(value).toFixed(1) === value;
var isValid = isFloat ? !!value && value.length > 0 && value !== "" && value !== "0" && twoDecimals : !!value && value.length > 0 && value !== "" && value !== "0";
if (value !== this.state.inputValue) {
this.setState({
inputValue: value
});
this.props.onChange(value, isValid);
}
}
}, {
key: "handleButtonClick",
value: function handleButtonClick(value) {
this.props.onButtonClick(value, true);
this.setValue(value);
}
}, {
key: "renderButtons",
value: function renderButtons() {
var _this2 = this;
return this.props.values.map(function (value, i) {
return /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_3__tvg_ui_bootstrap_components_Buttons__["a" /* default */], {
type: "secondary",
value: value,
isSelected: parseInt(value, 10) === parseInt(_this2.state.inputValue, 10),
onClick: _this2.handleButtonClick,
qaLabel: "default".concat(i + 1)
}, i.toString(), "$", value);
});
}
}, {
key: "render",
value: function render() {
return /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_6__styles_css___default.a.depositAmount,
"data-qa-label": this.props.qaLabel
}, void 0, /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_6__styles_css___default.a.defaultAmounts
}, void 0, this.renderButtons()), /*#__PURE__*/_jsx("span", {
className: __WEBPACK_IMPORTED_MODULE_6__styles_css___default.a.or,
"data-qa-label": "orLabel"
}, void 0, "Or"), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Form_Input__["a" /* default */], {
className: __WEBPACK_IMPORTED_MODULE_6__styles_css___default.a.depositAmountInput,
type: "number",
size: "small",
onBlur: this.props.onBlur,
onFill: this.props.onFill,
onError: this.props.onError,
min: __WEBPACK_IMPORTED_MODULE_5__data_parameterization_json___default.a.sightlineDepositConfigs.minValue,
onChange: this.setValue,
value: this.state.inputValue,
forbidInput: function forbidInput(key) {
return key === 101 || key === 189 || (key < 48 || key > 57) && key !== 8 && key !== 44 && key !== 46;
},
maxLength: 6,
placeholder: "Other Amount",
required: true,
currency: true,
messages: this.props.messages,
onTooltipShow: this.props.onTooltipShow,
qaLabel: "otherAmount"
}, void 0, /*#__PURE__*/_jsx("p", {
"data-qa-label": "otherAmountHelperTooltipContent"
}, void 0, !this.props.isFdr ? this.props.message : this.props.message.replace(/TVG/g, "FanDuel").replace(/Play\+/g, ""))));
}
}]);
return DepositAmount;
}(__WEBPACK_IMPORTED_MODULE_2_react__["Component"]);
_defineProperty(DepositAmount, "defaultProps", {
values: ["50", "100", "300"],
value: "",
onChange: __WEBPACK_IMPORTED_MODULE_1_lodash_noop___default.a,
onBlur: __WEBPACK_IMPORTED_MODULE_1_lodash_noop___default.a,
onButtonClick: __WEBPACK_IMPORTED_MODULE_1_lodash_noop___default.a,
onError: __WEBPACK_IMPORTED_MODULE_1_lodash_noop___default.a,
messages: {
required: "Field is Required",
min: "Minimum $".concat(__WEBPACK_IMPORTED_MODULE_5__data_parameterization_json___default.a.sightlineDepositConfigs.minValue),
max: "Value is higher than allowed",
pattern: "Invalid Value",
tooLong: "Too long",
tooShort: "Too short value",
badInput: "Invalid Value",
stepMismatch: "Maximum 2 decimal points"
},
qaLabel: "",
isFdr: false
});
/* harmony default export */ __webpack_exports__["a"] = (DepositAmount);
/***/ }),
/***/ 160:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__style_css__ = __webpack_require__(471);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__style_css__);
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
var Disclaimer = function Disclaimer() {
return /*#__PURE__*/_jsx("p", {
className: __WEBPACK_IMPORTED_MODULE_1__style_css___default.a.disclaimer,
"data-qa-label": "bankDisclaimer"
}, void 0, "Discover\xAE, the Discover Acceptance Mark, PULSE\xAE, and the PULSE Logo are service marks used by Sutton Bank, Member FDIC, under license from Discover.");
};
/* harmony default export */ __webpack_exports__["a"] = (Disclaimer);
/***/ }),
/***/ 161:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return validCard; });
var validCard = function validCard(card) {
return card && card.isValid && !card.securityNumberError && card.securityNumber && !card.expirationMonthError && card.expirationMonth && !card.expirationYearError && card.expirationYear && card.expirationYear.toString().length === 2 && card.isInvalidMonth === false && card.securityNumber.toString().length === 3 && /^0*$/.test(card.securityNumber.toString()) === false && // allZeros
/^\d+$/.test(card.securityNumber.toString()) === true;
}; // allNumbers
// We may need to export more
//eslint-disable-line
/***/ }),
/***/ 162:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","sightline-deposit":"sightline-deposit","sightlineDeposit":"sightline-deposit","authorize":"authorize","defaultCard":"defaultCard","black-list-card":"black-list-card","blackListCard":"black-list-card","addCardModal":"addCardModal","scroll":"scroll","header":"header","addCardBody":"addCardBody","addCardButton":"addCardButton","balance":"balance","openSlideDown":"openSlideDown","slpEnrolledMsg":"slpEnrolledMsg","enrolled-warning-text-wrapper":"enrolled-warning-text-wrapper","enrolledWarningTextWrapper":"enrolled-warning-text-wrapper","warning-add-card-box":"warning-add-card-box","warningAddCardBox":"warning-add-card-box"};
/***/ }),
/***/ 164:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mount", function() { return mount; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "destroy", function() { return destroy; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__tvg_ui_bootstrap_assets_fonts_LinotypeUnivers_CondBold_LinotypeUnivers_CondBold_css__ = __webpack_require__(165);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__tvg_ui_bootstrap_assets_fonts_LinotypeUnivers_CondBold_LinotypeUnivers_CondBold_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__tvg_ui_bootstrap_assets_fonts_LinotypeUnivers_CondBold_LinotypeUnivers_CondBold_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_dom__ = __webpack_require__(19);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_dom___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react_dom__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react_redux__ = __webpack_require__(20);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react_router_dom__ = __webpack_require__(198);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5____ = __webpack_require__(223);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__configureStore__ = __webpack_require__(489);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__Pages_actions__ = __webpack_require__(497);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__styles_css__ = __webpack_require__(519);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__styles_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8__styles_css__);
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
var mount = function mount(placeholder, props) {
var store = Object(__WEBPACK_IMPORTED_MODULE_6__configureStore__["a" /* default */])(); // This gets capi stuff since deposit does not need it LEGACY
store.dispatch(Object(__WEBPACK_IMPORTED_MODULE_7__Pages_actions__["a" /* fetchCAPI */])());
store.dispatch(Object(__WEBPACK_IMPORTED_MODULE_7__Pages_actions__["b" /* fetchFeatures */])());
store.dispatch(Object(__WEBPACK_IMPORTED_MODULE_7__Pages_actions__["c" /* fetchTVGUserAccountDetails */])()); // Populate store on loading
store.dispatch({
type: "LEGACY_WRAPPER_DATA",
data: props
});
return Object(__WEBPACK_IMPORTED_MODULE_2_react_dom__["render"])( /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_3_react_redux__["a" /* Provider */], {
store: store
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_4_react_router_dom__["a" /* BrowserRouter */], {}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_5____["a" /* default */], {
onPaymentComplete: props.onPaymentComplete,
onFundComplete: props.onFundComplete,
onDepositComplete: props.onDepositComplete,
onInvalidCardType: props.onInvalidCardType
}))), placeholder);
};
var destroy = function destroy(placeholder) {
return Object(__WEBPACK_IMPORTED_MODULE_2_react_dom__["unmountComponentAtNode"])(placeholder);
};
/***/ }),
/***/ 223:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* unused harmony export Deposit */
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_toNumber__ = __webpack_require__(97);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_toNumber___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_toNumber__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_replace__ = __webpack_require__(224);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_replace___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_replace__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_has__ = __webpack_require__(225);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_has___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_has__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_get__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_get__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react_redux__ = __webpack_require__(20);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__tvg_ui_bootstrap_components_Loading__ = __webpack_require__(101);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__tvg_ui_bootstrap_components_Notifications__ = __webpack_require__(102);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__actions__ = __webpack_require__(62);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__selectors__ = __webpack_require__(310);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__NotEnrolled__ = __webpack_require__(311);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__Enrolled__ = __webpack_require__(473);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__style_css__ = __webpack_require__(488);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12__style_css__);
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
var mapStateToProps = function mapStateToProps(state) {
return {
capi: state.capi,
features: state.features,
isFetching: Object(__WEBPACK_IMPORTED_MODULE_9__selectors__["a" /* isFetching */])(state),
userAccountDetails: state.userAccountDetails,
isAuthenticated: state.isAuthenticated.success,
sightlineUserAccount: state.deposits.sightline.sightlineUserAccount,
showRedirectMessage: state.deposits.showRedirectMessage,
notification: Object(__WEBPACK_IMPORTED_MODULE_9__selectors__["b" /* showNotification */])(state),
wrapperDepositInfo: state.deposits.wrapperDepositInfo,
alreadyProcessedRedirect: state.deposits.alreadyProcessedRedirect,
isOpenInvalidCardModal: state.deposits.sightline.invalidCardModal.isOpen
};
};
var _ref = /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_6__tvg_ui_bootstrap_components_Loading__["a" /* default */], {
size: "big",
show: true
});
var Deposit = /*#__PURE__*/function (_Component) {
_inherits(Deposit, _Component);
var _super = _createSuper(Deposit);
function Deposit(props) {
var _this;
_classCallCheck(this, Deposit);
_this = _super.call(this, props);
_this.state = {
error: false,
debounce: false
};
_this.handleDebounce = _this.handleDebounce.bind(_assertThisInitialized(_this));
return _this;
}
_createClass(Deposit, [{
key: "componentDidUpdate",
value: function componentDidUpdate(prevProps) {
if (typeof this.props.onInvalidCardType === "function" && this.props.isOpenInvalidCardModal && prevProps.isOpenInvalidCardModal !== this.props.isOpenInvalidCardModal) {
this.props.onInvalidCardType();
this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_8__actions__["c" /* clearInvalidCardModal */])());
}
if (!this.props.sightlineUserAccount.isFetching && !this.props.sightlineUserAccount.success && !this.props.sightlineUserAccount.error) {
var accountId = __WEBPACK_IMPORTED_MODULE_3_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountDetails.accountNumber", this.props.userAccountDetails.accountNumber);
if (!accountId) {
accountId = __WEBPACK_IMPORTED_MODULE_3_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountNumber") || __WEBPACK_IMPORTED_MODULE_3_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountDetails.accountNumber");
}
if (accountId) {
return this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_8__actions__["g" /* getSightlineAccountInfo */])(accountId, true));
}
}
return this;
}
}, {
key: "setNotificationProps",
value: function setNotificationProps(status) {
var _this2 = this;
if (!status) {
return {
show: false
};
}
var message;
var type;
var title;
if (status.error || typeof status === "string") {
var path;
if (typeof status === "string") {
path = status;
} else if (typeof status.error === "string") {
path = status.error;
} else {
path = __WEBPACK_IMPORTED_MODULE_3_lodash_get___default()(status, "error.code");
}
message = __WEBPACK_IMPORTED_MODULE_3_lodash_get___default()(this.props.capi, path, status.error ? this.props.capi.SLP_GENERIC_ERROR : this.props.capi.SLP_GENERIC_SUCCESS);
}
if (status.error && status.error.message && status.error.message.indexOf("scenario") !== -1) {
var messages = __WEBPACK_IMPORTED_MODULE_3_lodash_get___default()(this.props.capi, "sightlineDepositMessages");
message = JSON.parse(messages)[status.error.message];
title = "";
}
if (status.success && typeof status !== "string") {
// only fund was successful
var amount = "<strong>$".concat(parseFloat(status.fundedAmount).toFixed(2), "</strong>");
message = "You funded your Pre Paid Play+ Card with ".concat(amount, ". You now need to transfer this amount to your TVG Account.");
type = "warning";
}
var statusMessage = status.error ? "error" : "success";
if (title !== "") {
title = status.error ? "DEPOSIT FAILED!" : status.success && typeof status !== "string" && "FUND SUCCESSFUL";
}
if (__WEBPACK_IMPORTED_MODULE_2_lodash_has___default()(status, "errorData")) {
var errorType = __WEBPACK_IMPORTED_MODULE_3_lodash_get___default()(status, "errorData.type");
if (errorType === "RESP_GAMING_LIMITS_EXCEEDED") {
var floatRegex = new RegExp(/\d*\.\d*/g);
var limit = __WEBPACK_IMPORTED_MODULE_0_lodash_toNumber___default()(__WEBPACK_IMPORTED_MODULE_3_lodash_get___default()(status, "errorData.message", "").match(floatRegex)[0]).toFixed(2);
message = __WEBPACK_IMPORTED_MODULE_1_lodash_replace___default()(message, "[limit]", limit);
}
}
if (!type) {
type = status.notifType ? status.notifType : statusMessage;
}
return {
show: true,
type: type,
title: title,
message: message,
onClose: function onClose() {
return _this2.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_8__actions__["i" /* resetAllOperationState */])());
},
icon: true,
dismissible: true,
scrollTop: true
};
}
}, {
key: "handleDebounce",
value: function handleDebounce() {
var _this3 = this;
this.setState({
debounce: true
});
setTimeout(function () {
_this3.setState({
debounce: false
});
}, parseInt(this.props.capi.debounceAfterDeposit, 10) || 0);
}
}, {
key: "isEnrolled",
value: function isEnrolled() {
return this.props.sightlineUserAccount.enrolled || __WEBPACK_IMPORTED_MODULE_3_lodash_get___default()(this.props, "sightlineUserAccount.cards.length", 0);
}
}, {
key: "render",
value: function render() {
var declinedCardList = ["VISA"];
if (this.props.isFetching) {
return _ref;
}
if (!this.props.isAuthenticated || !this.props.sightlineUserAccount.success) {
return /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_7__tvg_ui_bootstrap_components_Notifications__["a" /* default */], {
type: "error",
title: this.props.capi.slpPaymentMethodErrorMsg,
message: this.props.capi.slpAssistanceMsg,
show: true,
icon: true,
dismissable: false
});
}
return /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_12__style_css___default.a.sightlineDeposit
}, void 0, /*#__PURE__*/__WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_7__tvg_ui_bootstrap_components_Notifications__["a" /* default */], this.setNotificationProps(this.props.notification)), this.isEnrolled() ? /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_11__Enrolled__["a" /* default */], {
onPaymentComplete: this.props.onPaymentComplete,
onFundComplete: this.props.onFundComplete,
onHandleDebounce: this.handleDebounce,
debounce: this.state.debounce,
declinedCardList: declinedCardList
}) : /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_10__NotEnrolled__["a" /* default */], {
onFundComplete: this.props.onFundComplete,
declinedCardList: declinedCardList
}));
}
}]);
return Deposit;
}(__WEBPACK_IMPORTED_MODULE_4_react__["Component"]);
/* harmony default export */ __webpack_exports__["a"] = (Object(__WEBPACK_IMPORTED_MODULE_5_react_redux__["b" /* connect */])(mapStateToProps)(Deposit));
/***/ }),
/***/ 309:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
var _arguments = arguments;
/*
@fn function that executes a request and returns the value of the break condition
@timeout expiration time for the poller (requests will be made until that time) - milliseconds
@interval time between requests - milliseconds
*/
var poller = function poller(fn, timeout, interval) {
var endTime = Number(new Date()) + (timeout || 300000);
var interv = interval || 3000;
var checkCondition = function checkCondition(resolve, reject) {
// If the condition is met, we're done!
var result = fn();
if (result.then) {
result.then(function (res) {
if (res === "FINISH_DEPOSIT_SUCCESS" || res === "FINISH_DEPOSIT_ERROR" || window.pollerRes && (window.pollerRes === "FINISH_DEPOSIT_SUCCESS" || window.pollerRes === "FINISH_DEPOSIT_ERROR")) {
resolve(res === "FINISH_DEPOSIT_SUCCESS" || window.pollerRes === "FINISH_DEPOSIT_SUCCESS");
} // If the condition isn't met but the timeout hasn't elapsed, go again
else if (Number(new Date()) < endTime) {
setTimeout(checkCondition, interv, resolve, reject);
} // Didn't match and too much time, reject!
else {
reject(new Error("timed out for ".concat(fn, ": ").concat(_arguments)));
}
});
} else if (result) {
resolve(result);
} // If the condition isn't met but the timeout hasn't elapsed, go again
else if (Number(new Date()) < endTime) {
setTimeout(checkCondition, interv, resolve, reject);
} // Didn't match and too much time, reject!
else {
reject(new Error("timed out for ".concat(fn, ": ").concat(_arguments)));
}
};
return new Promise(checkCondition);
};
/*
EXECUTION EXAMPLE
------------------------
function ajaxRequest () {
return axios.get('https://jsonplaceholder.typicode.com/posts/1')
}
poll(function() {
return ajaxRequest().then(function(data){
return data.status === 200;
});
}, 100, 150).then(function(data) {
console.log('done', data);
}).catch(function(err) {
console.error(err);
console.error('lel');
});
*/
/* harmony default export */ __webpack_exports__["a"] = (poller);
/***/ }),
/***/ 310:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return showNotification; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return isFetching; });
var showNotification = function showNotification(state) {
return state.deposits.sightline.enrollUser && state.deposits.sightline.enrollUser.error || state.deposits.sightline.fundSightline.success && state.deposits.sightline.transferToTVG.error && !state.deposits.sightline.transferToTVG.isFetching && state.deposits.sightline.fundSightline || state.deposits.sightline.transferToTVG && state.deposits.sightline.transferToTVG.error || (!state.deposits.sightline.transferToTVG.success || !state.deposits.sightline.fundSightline.success) && state.deposits.sightline.addNewCard && state.deposits.sightline.addNewCard.success || state.deposits.sightline.fundSightline.error && !state.deposits.sightline.transferToTVG.success && !state.deposits.sightline.transferToTVG.isFetching && state.deposits.sightline.fundSightline.error || state.deposits.sightline.addNewCard && !state.deposits.sightline.transferToTVG.success && state.deposits.sightline.addNewCard.error || null;
};
var isFetching = function isFetching(state) {
return state.deposits.sightline.isProcessingRedirect || state.isAuthenticated.isFetching || state.deposits.sightline.addNewCard.isFetching || state.isFetchingCAPI || state.deposits.sightline.wrapperDepositInfo || state.deposits.sightline.isFetching || state.deposits.sightline.fundSightline.isFetching || state.deposits.sightline.transferToTVG.isFetching && !state.deposits.sightline.transferToTVG.error || state.deposits.sightline.sightlineUserAccount.isFetching;
};
/***/ }),
/***/ 311:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* unused harmony export NotEnrolled */
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_isError__ = __webpack_require__(66);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_isError___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isError__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_attempt__ = __webpack_require__(122);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_attempt___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_attempt__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_debounce__ = __webpack_require__(124);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_debounce___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_debounce__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_bindAll__ = __webpack_require__(29);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_bindAll___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_bindAll__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_lodash_get__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lodash_get__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react_redux__ = __webpack_require__(20);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__tvg_conf__ = __webpack_require__(6);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__tvg_ui_bootstrap_assets_svg_lock_svg__ = __webpack_require__(71);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__tvg_ui_bootstrap_assets_svg_lock_svg___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8__tvg_ui_bootstrap_assets_svg_lock_svg__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Buttons__ = __webpack_require__(17);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__MarketingBanner__ = __webpack_require__(335);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__PrivacyDisclosure__ = __webpack_require__(351);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__Common_CreditCard__ = __webpack_require__(136);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__Common_Transfer__ = __webpack_require__(157);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__Common_Titles__ = __webpack_require__(33);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__style_css__ = __webpack_require__(466);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_15__style_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__Common_DepositAmount__ = __webpack_require__(159);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__Common_Review__ = __webpack_require__(77);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__Common_Fees__ = __webpack_require__(469);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__Common_BankDisclaimer__ = __webpack_require__(160);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__Common_CreditCard_utils__ = __webpack_require__(161);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__actions__ = __webpack_require__(62);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__services_slp__ = __webpack_require__(63);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__Common_WarningText__ = __webpack_require__(34);
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var tvgConf = Object(__WEBPACK_IMPORTED_MODULE_7__tvg_conf__["a" /* default */])();
var getFeesDebounced = __WEBPACK_IMPORTED_MODULE_2_lodash_debounce___default()(function (_ref) {
var amount = _ref.amount,
accountId = _ref.accountId,
callback = _ref.callback;
return Object(__WEBPACK_IMPORTED_MODULE_22__services_slp__["h" /* getSightlineFees */])({
amount: amount,
accountId: accountId
}).then(callback);
}, 500);
var getFeesThen = function getFeesThen(_ref2) {
var amount = _ref2.amount,
accountId = _ref2.accountId,
callback = _ref2.callback;
var getFees = Promise.resolve(null);
if (amount && accountId) {
getFees = getFeesDebounced({
amount: amount,
accountId: accountId,
callback: callback
});
}
return getFees;
};
var _ref6 = /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_14__Common_Titles__["a" /* default */], {
qaLabel: "cardDetailsLabel"
}, void 0, "Card Details");
var _ref7 = /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_8__tvg_ui_bootstrap_assets_svg_lock_svg___default.a, {
fill: "#fff",
width: "16px",
height: "16px"
});
var _ref8 = /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_19__Common_BankDisclaimer__["a" /* default */], {});
var NotEnrolled = /*#__PURE__*/function (_Component) {
_inherits(NotEnrolled, _Component);
var _super = _createSuper(NotEnrolled);
function NotEnrolled(props) {
var _this;
_classCallCheck(this, NotEnrolled);
_this = _super.call(this, props);
_this.state = {
enrollmentChecked: false,
disabled: true,
depositAmount: 0,
depositAmountValid: false,
transferAmount: 0,
transferAmountValid: false,
card: null,
isDirty: false,
isFdr: tvgConf.product === "fdrmobile" || tvgConf.product === "fdrios" || tvgConf.product === "fdrandroid",
depositFee: 0,
feeAmount: 0,
feeRefundAmount: 0,
declinedCardList: [],
features: {
showCardDeclinedModal: false
}
};
__WEBPACK_IMPORTED_MODULE_3_lodash_bindAll___default()(_assertThisInitialized(_this), ["setMax", "handleDepositAmount", "enrollUser", "handleCheckbox", "handleTransferAmount", "handleCreditCardBlur"]);
return _this;
}
_createClass(NotEnrolled, [{
key: "componentDidMount",
value: function componentDidMount() {
var _this2 = this;
if (__WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "wrapperDepositInfo.amount", false) && this.props.sightlineUserAccount) {
var accountId = __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountNumber");
if (!accountId) {
accountId = this.props.userAccountDetails.accountDetails && this.props.userAccountDetails.accountDetails.accountNumber || this.props.userAccountDetails.accountDetails.accountDetails && this.props.userAccountDetails.accountDetails.accountDetails.accountNumber;
}
this.props.dispatch({
type: "PROCESSING_REDIRECT",
data: {
isRedirect: true,
amount: +this.props.wrapperDepositInfo.amount,
accountId: accountId
}
});
getFeesThen({
amount: +this.props.wrapperDepositInfo.amount,
accountId: accountId,
callback: function callback(_ref3) {
var feeAmount = _ref3.feeAmount,
feeTotalAmount = _ref3.feeTotalAmount,
feeRefundAmount = _ref3.feeRefundAmount;
_this2.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_21__actions__["e" /* fullEnroll */])(true, _this2.props.wrapperDepositInfo.amount, {
expirationMonth: _this2.props.wrapperDepositInfo.expirationMonth,
expirationYear: parseInt("20".concat(_this2.props.wrapperDepositInfo.expirationYear), 10),
number: _this2.props.wrapperDepositInfo.cardNumber.toString()
}, _this2.props.wrapperDepositInfo.cvv.toString(), // card data
+_this2.props.wrapperDepositInfo.amount + +feeTotalAmount, accountId, true, feeTotalAmount, feeAmount, feeRefundAmount));
}
});
}
}
}, {
key: "setMax",
value: function setMax() {
var value = this.state.depositAmount;
return parseInt(value, 10) - (this.state.depositFee || 0);
}
}, {
key: "handleDepositAmount",
value: function handleDepositAmount(value, valid) {
var _this3 = this;
var accountId = __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountNumber") || __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountDetails.accountNumber");
getFeesThen({
amount: value,
accountId: accountId,
callback: function callback(_ref4) {
var feeAmount = _ref4.feeAmount,
feeTotalAmount = _ref4.feeTotalAmount,
feeRefundAmount = _ref4.feeRefundAmount;
var transferAmountValue = parseFloat(value) - feeTotalAmount;
var transferAmount = transferAmountValue > 0 ? transferAmountValue : 0;
_this3.setState({
transferAmount: transferAmount,
transferAmountValid: transferAmountValue > 0,
isDirty: true,
depositFee: feeTotalAmount,
feeAmount: feeAmount,
feeRefundAmount: feeRefundAmount
}, _this3.isDisabled);
}
});
this.setState({
depositAmount: !isNaN(parseFloat(value)) ? parseFloat(value) : "",
depositAmountValid: valid,
isDirty: true
}); // This is currently only being used by the GTM
// but we could start saving data in the store.
this.props.dispatch({
type: "CHANGE_TRANSFER_AMOUNT",
data: {
amount: value ? parseFloat(value) : 0
}
});
}
}, {
key: "handleTransferAmount",
value: function handleTransferAmount(value, valid) {
var _this4 = this;
var transferAmount = value;
if (!isNaN(value) && value !== "" && value.toString().indexOf(".") === -1) {
// it is indeed an int and not a float
transferAmount = parseInt(value, 10);
}
var accountId = __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountNumber") || __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountDetails.accountNumber");
getFeesThen({
amount: transferAmount,
accountId: accountId,
callback: function callback(_ref5) {
var feeAmount = _ref5.feeAmount,
feeTotalAmount = _ref5.feeTotalAmount,
feeRefundAmount = _ref5.feeRefundAmount;
_this4.setState({
depositFee: feeTotalAmount,
feeAmount: feeAmount,
feeRefundAmount: feeRefundAmount
});
}
});
this.setState({
transferAmount: transferAmount,
transferAmountValid: valid,
isDirty: true
}, this.isDisabled);
}
}, {
key: "handleCreditCardBlur",
value: function handleCreditCardBlur(card) {
this.setState({
card: card,
isDirty: true
}, this.isDisabled);
}
}, {
key: "handleCheckbox",
value: function handleCheckbox(checked) {
this.setState({
enrollmentChecked: checked,
isDirty: true
}, this.isDisabled);
}
}, {
key: "enrollUser",
value: function enrollUser() {
var card = this.state.card;
var accountId = __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountDetails.accountNumber", this.props.userAccountDetails.accountNumber);
if (!accountId) {
accountId = this.props.userAccountDetails.accountDetails && this.props.userAccountDetails.accountDetails.accountNumber || this.props.userAccountDetails.accountDetails.accountDetails && this.props.userAccountDetails.accountDetails.accountDetails.accountNumber;
}
this.props.dispatch({
type: "DEPOSIT_ATTEMPT",
data: {
amount: this.state.transferAmount
}
});
if (card) {
if (this.props.features.showCardDeclinedModal && this.props.declinedCardList.includes(card.cardType)) {
this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_21__actions__["h" /* openInvalidCardModal */])());
} else {
this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_21__actions__["e" /* fullEnroll */])(this.state.enrollmentChecked, // checkbox checked
this.state.transferAmount, // depositAmount - fee
{
expirationMonth: card.expirationMonth,
// card data
expirationYear: parseInt("20".concat(card.expirationYear), 10),
// card data
number: card.cardNumber.toString() // card data
}, card.securityNumber.toString(), // card data
this.state.depositAmount, accountId, false, this.state.depositFee, this.state.feeAmount, this.state.feeRefundAmount));
}
}
}
}, {
key: "isDisabled",
value: function isDisabled() {
var disabled = !(this.state.enrollmentChecked && this.state.depositAmountValid && this.state.transferAmountValid && Object(__WEBPACK_IMPORTED_MODULE_20__Common_CreditCard_utils__["a" /* validCard */])(this.state.card));
this.setState({
disabled: disabled
});
}
}, {
key: "render",
value: function render() {
var wrapperDepositInfo = this.props.wrapperDepositInfo;
var cardType = __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.state, "card.cardType");
return /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_15__style_css___default.a.sightlineDeposit,
"data-qa-label": "notEnrolled"
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_10__MarketingBanner__["a" /* default */], {
banner: this.props.capi.slpMarketingBanner,
msg: this.props.capi.slpMarketingMsg
}), /*#__PURE__*/_jsx("div", {
"data-qa-label": "depositToPrePaidCardSection"
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_14__Common_Titles__["a" /* default */], {
qaLabel: "depositToPrePaidCardLabel"
}, void 0, this.state.isFdr ? "Deposit to Pre Paid Card" : "Deposit to Pre Paid Play+ Card"), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_16__Common_DepositAmount__["a" /* default */], {
message: this.props.capi.slpTransferMsg,
value: __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(wrapperDepositInfo, "amount", ""),
onChange: this.handleDepositAmount,
onButtonClick: this.props.onDepositAmountClick,
onFill: this.props.onDepositFill("Deposit Amount"),
onError: this.props.onError("Standard Deposit Start | Other Amount"),
onTooltipShow: this.props.onTooltipShow("Transfer Amount"),
qaLabel: "depositToPrePaidCardContent",
isFdr: this.state.isFdr
})), /*#__PURE__*/_jsx("div", {
className: "credit-card-section",
"data-qa-label": "creditCardSection"
}, void 0, _ref6, this.props.features.showCardDeclinedModal && /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_15__style_css___default.a.notEnrolledWarningBox
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_23__Common_WarningText__["b" /* default */], {
mode: "light"
}, void 0, this.props.cardDeclinedWarningLabels.full)), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_12__Common_CreditCard__["a" /* default */], {
initialCardNumber: __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(wrapperDepositInfo, "cardNumber", ""),
hadCardFromRedirect: !!__WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(wrapperDepositInfo, "cardNumber", ""),
initialExpirationMonth: __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(wrapperDepositInfo, "expirationMonth", ""),
initialExpirationYear: __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(wrapperDepositInfo, "expirationYear", ""),
onBlur: this.handleCreditCardBlur,
onChange: this.handleCreditCardBlur,
onCardNumberFill: this.props.onFill("cardNumber"),
onCardNumberError: this.props.onError("cardNumber"),
onExpirationMonthFill: this.props.onFill("cardExpMonth"),
onExpirationMonthError: this.props.onError("cardExpMonth"),
onExpirationYearFill: this.props.onFill("cardExpYr"),
onExpirationYearError: this.props.onError("cardExpYr"),
onSecurityNumberFill: this.props.onFill("cardCvn"),
onSecurityNumberError: this.props.onError("cardCvn"),
onSecurityTooltipShow: this.props.onTooltipShow("cardCvn"),
qaLabel: "notEnrolled"
})), /*#__PURE__*/_jsx("div", {
className: "transfer-to-tvg-section",
"data-qa-label": "transferToTVGAccountSection"
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_14__Common_Titles__["a" /* default */], {
qaLabel: "transferToTVGAccountLabel"
}, void 0, this.state.isFdr ? "Transfer to FanDuel Racing Account" : "Transfer to TVG Account"), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_13__Common_Transfer__["a" /* default */], {
value: this.state.transferAmount,
max: this.setMax(),
onChange: this.handleTransferAmount,
onFill: this.props.onFill("Transfer Amount"),
onError: this.props.onError("Transfer Amount"),
qaLabel: ""
})), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_17__Common_Review__["a" /* default */], {
labels: this.props.dmaDepositLabels,
fee: this.state.depositFee,
feeFull: this.state.feeAmount,
feeRefund: this.state.feeRefundAmount,
depositAmount: this.state.depositAmount,
applyError: this.state.isDirty,
transferAmount: this.state.transferAmount,
balance: this.state.depositAmount - this.state.depositFee - this.state.transferAmount,
qaLabel: ""
}), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_11__PrivacyDisclosure__["a" /* default */], {
capi: this.props.capi,
checked: this.handleCheckbox,
fdr: this.state.isFdr
}), /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_15__style_css___default.a.authorizeBtn
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Buttons__["a" /* default */], {
onClick: this.enrollUser,
size: "big",
type: "legacy",
disabled: this.props.features.showCardDeclinedModal && this.props.declinedCardList.includes(cardType) || this.state.disabled || this.props.sightlineUserAccount.disableAuthorize,
icon: true,
qaLabel: "authorize"
}, void 0, _ref7, "Authorize")), _ref8, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_18__Common_Fees__["a" /* default */], {
qaLabel: "prePaidCardFees",
isFdr: this.state.isFdr,
mainFeesLandscape: tvgConf.product === "tvg4"
}));
}
}]);
return NotEnrolled;
}(__WEBPACK_IMPORTED_MODULE_5_react__["Component"]);
_defineProperty(NotEnrolled, "defaultProps", {
wrapperDepositInfo: 12
});
var mapStateToProps = function mapStateToProps(store) {
var dmaDepositLabels = __WEBPACK_IMPORTED_MODULE_1_lodash_attempt___default()(function () {
return JSON.parse(store.capi.dmaDepositLabels);
});
dmaDepositLabels = __WEBPACK_IMPORTED_MODULE_0_lodash_isError___default()(dmaDepositLabels) ? null : dmaDepositLabels;
var cardDeclinedWarningLabels = __WEBPACK_IMPORTED_MODULE_1_lodash_attempt___default()(function () {
var capiMessage = JSON.parse(store.capi.cardErrorRedirect);
return {
full: capiMessage.cardDeclinedWarningFullText,
short: capiMessage.cardDeclinedWarningShortText
};
});
cardDeclinedWarningLabels = __WEBPACK_IMPORTED_MODULE_0_lodash_isError___default()(cardDeclinedWarningLabels) ? {} : cardDeclinedWarningLabels;
return {
capi: store.capi,
dmaDepositLabels: dmaDepositLabels,
cardDeclinedWarningLabels: cardDeclinedWarningLabels,
enrollUser: store.deposits.sightline.enrollUser,
sightlineUserAccount: store.deposits.sightline.sightlineUserAccount,
wrapperDepositInfo: store.deposits.wrapperDepositInfo,
userAccountDetails: store.userAccountDetails,
features: store.features
};
};
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
return {
dispatch: dispatch,
onError: function onError(fieldName) {
return function (value, errors) {
return dispatch(Object(__WEBPACK_IMPORTED_MODULE_21__actions__["d" /* errorShown */])(fieldName, value, errors));
};
},
onFill: function onFill(fieldName) {
return function (value) {
return dispatch(Object(__WEBPACK_IMPORTED_MODULE_21__actions__["l" /* userFilledField */])(fieldName, value));
};
},
onDepositFill: function onDepositFill(fieldName) {
return function (value) {
return dispatch(Object(__WEBPACK_IMPORTED_MODULE_21__actions__["k" /* userFilledDepositField */])(fieldName, value));
};
},
onDepositAmountClick: function onDepositAmountClick(value) {
return dispatch({
type: "USER_SELECTED_DEPOSIT_AMOUNT",
data: {
value: value
}
});
},
onTooltipShow: function onTooltipShow(fieldName) {
return function () {
return dispatch({
type: "SHOW_TOOLTIP",
data: {
fieldName: fieldName
}
});
};
}
};
};
/* harmony default export */ __webpack_exports__["a"] = (Object(__WEBPACK_IMPORTED_MODULE_6_react_redux__["b" /* connect */])(mapStateToProps, mapDispatchToProps)(NotEnrolled));
/***/ }),
/***/ 33:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__style_css__ = __webpack_require__(465);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__style_css__);
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
var Title = function Title(props) {
return /*#__PURE__*/_jsx("h3", {
className: __WEBPACK_IMPORTED_MODULE_1__style_css___default.a.sectionTitle,
"data-qa-label": props.qaLabel
}, void 0, props.children);
}; // @TODO https://github.com/facebook/flow/issues/1964
Title.defaultProps = {
children: '',
qaLabel: ''
};
/* harmony default export */ __webpack_exports__["a"] = (Title);
/***/ }),
/***/ 335:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_html_react_parser__ = __webpack_require__(132);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__style_css__ = __webpack_require__(350);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__style_css__);
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
var MarketingBanner = function MarketingBanner(props) {
return /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_2__style_css___default.a.banner,
"data-qa-label": "bannerContent"
}, void 0, /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_2__style_css___default.a.img
}, void 0, Object(__WEBPACK_IMPORTED_MODULE_1_html_react_parser__["a" /* default */])(props.banner)), /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_2__style_css___default.a.msg
}, void 0, Object(__WEBPACK_IMPORTED_MODULE_1_html_react_parser__["a" /* default */])(props.msg)));
};
/* harmony default export */ __webpack_exports__["a"] = (MarketingBanner);
/***/ }),
/***/ 34:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return WarningIcon; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__style_css__ = __webpack_require__(472);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__style_css__);
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
var _ref2 = /*#__PURE__*/_jsx("path", {
d: "M1.82179 14.25H14.1775C14.5524 14.25 14.794 13.8527 14.6214 13.5198L8.44387 1.606C8.25732 1.24622 7.74269 1.24621 7.55612 1.60598L1.37792 13.5198C1.20532 13.8527 1.44687 14.25 1.82179 14.25Z",
fill: "#FAD5AF"
});
var _ref3 = /*#__PURE__*/_jsx("path", {
d: "M8.00002 6V10M8.00002 11V12.5M7.55612 1.60598L1.37792 13.5198C1.20532 13.8527 1.44687 14.25 1.82179 14.25H14.1775C14.5524 14.25 14.794 13.8527 14.6214 13.5198L8.44387 1.606C8.25732 1.24622 7.74269 1.24621 7.55612 1.60598Z",
stroke: "#BD6909",
strokeWidth: "1.5"
});
var _ref4 = /*#__PURE__*/_jsx("rect", {
x: "5",
y: "4",
width: "6",
height: "10",
fill: "white"
});
var _ref5 = /*#__PURE__*/_jsx("path", {
fillRule: "evenodd",
clipRule: "evenodd",
d: "M9.56544 1.10338C8.92053 -0.186459 7.07986 -0.186459 6.43495 1.10338L0.302977 13.3673C-0.27881 14.5309 0.567305 15.8999 1.86823 15.8999H14.1322C15.4331 15.8999 16.2792 14.5309 15.6974 13.3673L9.56544 1.10338ZM7.25019 5.99994C7.25019 5.7238 7.47405 5.49994 7.75019 5.49994H8.25019C8.52634 5.49994 8.75019 5.7238 8.75019 5.99994V9.49994C8.75019 9.77608 8.52634 9.99994 8.25019 9.99994H7.75019C7.47405 9.99994 7.25019 9.77608 7.25019 9.49994V5.99994ZM7.25019 11.9999C7.25019 11.7238 7.47405 11.4999 7.75019 11.4999H8.25019C8.52634 11.4999 8.75019 11.7238 8.75019 11.9999V12.4999C8.75019 12.7761 8.52634 12.9999 8.25019 12.9999H7.75019C7.47405 12.9999 7.25019 12.7761 7.25019 12.4999V11.9999Z",
fill: "#D67A11"
});
var WarningIcon = function WarningIcon(_ref) {
var _ref$qaLabel = _ref.qaLabel,
qaLabel = _ref$qaLabel === void 0 ? "icon" : _ref$qaLabel,
_ref$size = _ref.size,
size = _ref$size === void 0 ? 16 : _ref$size,
_ref$mode = _ref.mode,
mode = _ref$mode === void 0 ? "default" : _ref$mode;
return mode === "light" ? /*#__PURE__*/_jsx("svg", {
className: __WEBPACK_IMPORTED_MODULE_1__style_css___default.a.warningIcon,
width: size,
height: size,
viewBox: "0 0 ".concat(size, " ").concat(size),
fill: "none",
xmlns: "http://www.w3.org/2000/svg"
}, void 0, _ref2, _ref3) : /*#__PURE__*/_jsx("svg", {
className: __WEBPACK_IMPORTED_MODULE_1__style_css___default.a.warningIcon,
"data-qa-label": qaLabel,
width: size,
height: size,
viewBox: "0 0 ".concat(size, " ").concat(size),
fill: "none",
xmlns: "http://www.w3.org/2000/svg"
}, void 0, _ref4, _ref5);
};
var WarningText = function WarningText(_ref6) {
var showIcon = _ref6.showIcon,
qaLabel = _ref6.qaLabel,
children = _ref6.children,
mode = _ref6.mode;
return /*#__PURE__*/_jsx("span", {
className: __WEBPACK_IMPORTED_MODULE_1__style_css___default.a.warningContainer,
"data-qa-label": qaLabel
}, void 0, showIcon && /*#__PURE__*/_jsx(WarningIcon, {
mode: mode
}), /*#__PURE__*/_jsx("p", {
className: __WEBPACK_IMPORTED_MODULE_1__style_css___default.a.warningText,
"data-qa-label": "text"
}, void 0, children));
}; // @TODO https://github.com/facebook/flow/issues/1964
WarningText.defaultProps = {
children: "",
qaLabel: "warning-text",
showIcon: true,
mode: "default"
};
/* harmony default export */ __webpack_exports__["b"] = (WarningText);
/***/ }),
/***/ 350:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","banner":"banner"};
/***/ }),
/***/ 351:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__tvg_ui_bootstrap_components_Form_Checkbox__ = __webpack_require__(352);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__style_css__ = __webpack_require__(354);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__style_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Modals_generalModal__ = __webpack_require__(355);
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
var _ref = /*#__PURE__*/_jsx("a", {
href: "https://betfair.mycardplace.com/cholder/showContent.action?page=TVGTERMS",
target: "_blank",
rel: "noopener noreferrer",
"data-qa-label": "agreementTermsCond"
}, void 0, "Terms and Conditions");
var _ref2 = /*#__PURE__*/_jsx("strong", {}, void 0, " and ");
var PrivacyDisclosure = /*#__PURE__*/function (_Component) {
_inherits(PrivacyDisclosure, _Component);
var _super = _createSuper(PrivacyDisclosure);
function PrivacyDisclosure() {
_classCallCheck(this, PrivacyDisclosure);
return _super.apply(this, arguments);
}
_createClass(PrivacyDisclosure, [{
key: "render",
value: function render() {
var _this = this;
return /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_2__style_css___default.a.privacyDisclosureAgreement,
"data-qa-label": "privacyDisclosureAgreementSection"
}, void 0, /*#__PURE__*/_jsx("p", {
"data-qa-label": "agreementTestHelper"
}, void 0, !this.props.fdr ? this.props.capi.slpEnrollWarning : this.props.capi.slpEnrollWarning.replace("TVG", "FanDuel")), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_3__Modals_generalModal__["a" /* default */], {
headerText: "Privacy Disclosure",
reference: function reference(c) {
_this.privacyPolicy = c;
} // $FlowFixMe
,
onClose: function onClose() {
return _this.privacyPolicy.close();
},
id: "privacyPolicy",
bodyTemplate: this.props.capi.slpPrivacyTemplate,
qaLabel: "privacyDisclosure",
classnames: __WEBPACK_IMPORTED_MODULE_2__style_css___default.a.privacyDisclosureModal
}), /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_2__style_css___default.a.privacyDisclosureCheckbox
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_1__tvg_ui_bootstrap_components_Form_Checkbox__["a" /* default */], {
id: "sightlineAgreement",
onChange: this.props.checked,
qaLabel: "agreement"
}, void 0, /*#__PURE__*/_jsx("p", {}, void 0, /*#__PURE__*/_jsx("strong", {}, void 0, this.props.fdr ? "I agree with FanDuel Racing Pre Paid Card " : "I agree with TVG Pre Paid Play+ Card "), _ref, _ref2, /*#__PURE__*/_jsx("a", {
tabIndex: 0,
role: "button",
className: __WEBPACK_IMPORTED_MODULE_2__style_css___default.a.privacyPolicyOpen,
onClick: function onClick(e) {
e.preventDefault();
PrivacyDisclosure.handleModalOpen(_this.privacyPolicy);
},
"data-qa-label": "agreementPrivacyDiscl"
}, void 0, "Privacy Disclosure")))));
}
}], [{
key: "handleModalOpen",
value: function handleModalOpen(modal) {
// $FlowFixMe
modal.open();
}
}]);
return PrivacyDisclosure;
}(__WEBPACK_IMPORTED_MODULE_0_react__["Component"]);
/* harmony default export */ __webpack_exports__["a"] = (PrivacyDisclosure);
/***/ }),
/***/ 354:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","sightline-deposit":"sightline-deposit","sightlineDeposit":"sightline-deposit","privacy-disclosure-agreement":"privacy-disclosure-agreement","privacyDisclosureAgreement":"privacy-disclosure-agreement","privacy-disclosure-checkbox":"privacy-disclosure-checkbox","privacyDisclosureCheckbox":"privacy-disclosure-checkbox","privacyDisclosureModal":"privacyDisclosureModal","container-fluid":"container-fluid","containerFluid":"container-fluid","row":"row"};
/***/ }),
/***/ 355:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_html_react_parser__ = __webpack_require__(132);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_classnames__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_classnames__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__tvg_ui_bootstrap_components_Modal__ = __webpack_require__(47);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Modal_example_css__ = __webpack_require__(30);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Modal_example_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Modal_example_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__tvg_ui_bootstrap_components_Buttons_index_css__ = __webpack_require__(26);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__tvg_ui_bootstrap_components_Buttons_index_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5__tvg_ui_bootstrap_components_Buttons_index_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__tvg_ui_bootstrap_assets_svg_close_svg__ = __webpack_require__(27);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__tvg_ui_bootstrap_assets_svg_close_svg___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6__tvg_ui_bootstrap_assets_svg_close_svg__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__general_css__ = __webpack_require__(358);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__general_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7__general_css__);
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
var _ref = /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_6__tvg_ui_bootstrap_assets_svg_close_svg___default.a, {
width: "16px",
height: "16px",
fill: "#fff"
});
// can't use stateless component because of the ref
var GeneralModal = /*#__PURE__*/function (_PureComponent) {
_inherits(GeneralModal, _PureComponent);
var _super = _createSuper(GeneralModal);
function GeneralModal() {
_classCallCheck(this, GeneralModal);
return _super.apply(this, arguments);
}
_createClass(GeneralModal, [{
key: "render",
value: function render() {
return /*#__PURE__*/__WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_3__tvg_ui_bootstrap_components_Modal__["a" /* default */], {
ref: this.props.reference,
modalIdentifier: this.props.id,
bodyClass: __WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Modal_example_css___default.a.modal,
type: "scrollContent",
modalParent: "#funds",
qaLabel: this.props.qaLabel,
classnames: this.props.classnames
}, /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_2_classnames___default()(__WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Modal_example_css___default.a.modalHeader, __WEBPACK_IMPORTED_MODULE_7__general_css___default.a.header)
}, void 0, /*#__PURE__*/_jsx("span", {
"data-qa-label": "modalHeaderTitle"
}, void 0, this.props.headerText), /*#__PURE__*/_jsx("button", {
onClick: this.props.onClose,
className: __WEBPACK_IMPORTED_MODULE_5__tvg_ui_bootstrap_components_Buttons_index_css___default.a.inlineButton,
"data-qa-label": "modalHeaderCloseButton"
}, void 0, _ref)), /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_2_classnames___default()(__WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Modal_example_css___default.a.modalBody, __WEBPACK_IMPORTED_MODULE_7__general_css___default.a.modalBody),
"data-qa-label": "modalBody"
}, void 0, /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_2_classnames___default()(__WEBPACK_IMPORTED_MODULE_7__general_css___default.a.firstdiv)
}, void 0, Object(__WEBPACK_IMPORTED_MODULE_1_html_react_parser__["a" /* default */])(this.props.bodyTemplate))));
}
}]);
return GeneralModal;
}(__WEBPACK_IMPORTED_MODULE_0_react__["PureComponent"]);
/* harmony default export */ __webpack_exports__["a"] = (GeneralModal);
/***/ }),
/***/ 358:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","header":"header","modal":"modal","firstdiv":"firstdiv","modalBody":"modalBody"};
/***/ }),
/***/ 40:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return headers; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ApiError; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__tvg_conf__ = __webpack_require__(6);
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }
function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
var tvgConf = Object(__WEBPACK_IMPORTED_MODULE_0__tvg_conf__["a" /* default */])();
var clientApp = "tvg4";
if (tvgConf.product === "ios") {
clientApp = "touch2";
if (tvgConf.wrapper === "true") {
clientApp = "ios2";
}
}
if (tvgConf.product === "touch3") {
clientApp = "touch3";
}
var xtvgContext = tvgConf.product === "njx" && tvgConf.brand === "4njbets" ? "exchange-exchange" : "".concat(tvgConf.product || "tvg4", "-").concat(tvgConf.brand);
var headers = {
"x-clientapp": clientApp,
"x-tvgcontext": JSON.stringify({
application: tvgConf.device,
wrapper: false,
device: tvgConf.device,
residence: "all",
location: "all",
product: tvgConf.product ? tvgConf.product : "tvg4",
user_status: "logged_in"
}),
"x-requested-with": "XMLHttpRequest",
"x-tvg-context": xtvgContext
};
// We're using an Error here because it's useful to throw personalized errors.
var ApiError = /*#__PURE__*/function (_Error) {
_inherits(ApiError, _Error);
var _super = _createSuper(ApiError);
function ApiError(data) {
var _this;
_classCallCheck(this, ApiError);
_this = _super.call(this, data.message || "");
_this.code = data.code;
_this.status = data.status;
_this.exception = data.exception;
return _this;
}
_createClass(ApiError, null, [{
key: "fromAxios",
value: function fromAxios(request, customMesage) {
if (customMesage) {
throw new ApiError({
message: customMesage
});
}
if (request.response) {
if (request.response.status === 403) {
throw new ApiError({
message: request.message,
status: request.response.status,
code: request.response.status
});
}
throw new ApiError(request.response.data);
}
throw new ApiError({
code: 600,
message: "Network Error",
status: 600
});
}
}]);
return ApiError;
}( /*#__PURE__*/_wrapNativeSuper(Error));
/***/ }),
/***/ 455:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* unused harmony export luhn */
/* unused harmony export getCheckDigit */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return isValid; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_isNaN__ = __webpack_require__(154);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_isNaN___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isNaN__);
/**
* Luhn algorithm
* @see https://en.wikipedia.org/wiki/Luhn_algorithm
*/
var toDigits = function toDigits(digits) {
return digits.split('').map(function (digit) {
return parseInt(digit, 10);
});
};
var sum = function sum(a, b) {
return a + b;
};
var isEven = function isEven(n) {
return n % 2 === 0;
};
var multiplyAndSum = function multiplyAndSum(n) {
var m = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
var prod = n * m;
return prod > 9 ? prod - 9 : prod;
};
var luhn = function luhn(n) {
return toDigits(n).reverse().map(function (d, i) {
return isEven(i) ? multiplyAndSum(d) : d;
}).reduce(sum, 0);
};
var getCheckDigit = function getCheckDigit(n) {
var mod10 = luhn(n) % 10;
return mod10 === 0 ? mod10 : Math.abs(10 - mod10);
};
var isValid = function isValid(n) {
var checkDigit = parseInt(n[n.length - 1], 10);
var remainingDigits = n.slice(0, n.length - 1);
var allZeros = /^0*$/.test(n);
return !__WEBPACK_IMPORTED_MODULE_0_lodash_isNaN___default()(checkDigit) && getCheckDigit(remainingDigits) === checkDigit && !allZeros;
};
/* unused harmony default export */ var _unused_webpack_default_export = (luhn);
/***/ }),
/***/ 457:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","security-number":"security-number","securityNumber":"security-number"};
/***/ }),
/***/ 458:
/***/ (function(module, exports) {
module.exports = "data:image/png;base64,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"
/***/ }),
/***/ 459:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","container-fieldset":"container-fieldset","containerFieldset":"container-fieldset","card-number-wrapper":"card-number-wrapper","cardNumberWrapper":"card-number-wrapper","card-brand":"card-brand","cardBrand":"card-brand","expiration-month":"expiration-month","expirationMonth":"expiration-month","expiration-year":"expiration-year","expirationYear":"expiration-year","card-number":"card-number","cardNumber":"card-number","expiration-date":"expiration-date","expirationDate":"expiration-date","divider":"divider","row":"row","information":"information"};
/***/ }),
/***/ 460:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return BrandsIcons; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__svg_discover_svg__ = __webpack_require__(461);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__svg_discover_svg___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__svg_discover_svg__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__svg_mastercard_svg__ = __webpack_require__(462);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__svg_mastercard_svg___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__svg_mastercard_svg__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__svg_visa_svg__ = __webpack_require__(463);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__svg_visa_svg___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__svg_visa_svg__);
var BrandsIcons = {
DISCOVER: __WEBPACK_IMPORTED_MODULE_0__svg_discover_svg___default.a,
MASTERCARD: __WEBPACK_IMPORTED_MODULE_1__svg_mastercard_svg___default.a,
VISA: __WEBPACK_IMPORTED_MODULE_2__svg_visa_svg___default.a
};
/* unused harmony default export */ var _unused_webpack_default_export = (BrandsIcons);
/***/ }),
/***/ 461:
/***/ (function(module, exports, __webpack_require__) {
var React = __webpack_require__(0);
function Discover(props) {
return React.createElement("svg", props, [React.createElement("defs", {
"key": 0
}, React.createElement("rect", {
"id": "discover-a",
"width": "320",
"height": "40",
"x": "-274",
"y": "-8",
"rx": "2"
})), React.createElement("g", {
"fill": "none",
"fillRule": "evenodd",
"key": 1
}, [React.createElement("rect", {
"width": "788",
"height": "429",
"x": "-391",
"y": "-223",
"fill": "#EBEBEB",
"key": 0
}), React.createElement("use", {
"fill": "#FFF",
"xlinkHref": "#discover-a",
"key": 1
}), React.createElement("rect", {
"width": "319",
"height": "39",
"x": "-273.5",
"y": "-7.5",
"stroke": "#979797",
"rx": "2",
"key": 2
}), React.createElement("g", {
"fillRule": "nonzero",
"transform": "matrix(1 0 0 -1 0 24)",
"key": 3
}, [React.createElement("path", {
"fill": "#F47216",
"d": "M37.7104358,10.6641747 C37.7104358,10.6641747 27.4079777,3.48639301 8.53938547,0.273956332 L37.7104358,0.273956332",
"key": 0
}), React.createElement("path", {
"fill": "#231F20",
"d": "M4.58037989,12.5720175 C4.24368715,12.2716507 3.80615642,12.1406463 3.1136648,12.1406463 L2.82601117,12.1406463 L2.82601117,15.7284891 L3.1136648,15.7284891 C3.80615642,15.7284891 4.22649162,15.6060786 4.58037989,15.2895721 C4.95103911,14.9638428 5.17394413,14.45869 5.17394413,13.9390742 C5.17394413,13.4182009 4.95103911,12.8977467 4.58037989,12.5720175 M3.3282905,16.6476157 L1.75500559,16.6476157 L1.75500559,11.2223581 L3.32001117,11.2223581 C4.15218994,11.2223581 4.75297207,11.4160349 5.28051397,11.8486638 C5.90740782,12.3607336 6.27806704,13.1327162 6.27806704,13.9311092 C6.27806704,15.5322969 5.06652514,16.6476157 3.3282905,16.6476157",
"key": 1
}), React.createElement("polygon", {
"fill": "#231F20",
"points": "6.771 11.222 7.843 11.222 7.843 16.648 6.771 16.648",
"key": 2
}), React.createElement("path", {
"fill": "#231F20",
"d": "M10.4637989 14.5655895C9.82055866 14.800559 9.6318324 14.9554585 9.6318324 15.2486987 9.6318324 15.5903581 9.96831285 15.8500611 10.430257 15.8500611 10.7512402 15.8500611 11.0153296 15.7196856 11.2944916 15.4107249L11.8553631 16.1357555C11.3944804 16.5337991 10.843162 16.7371179 10.2406816 16.7371179 9.26839106 16.7371179 8.52686034 16.0705677 8.52686034 15.1826725 8.52686034 14.435214 8.87204469 14.0526812 9.87872626 13.6948821 10.2984246 13.5485764 10.5119888 13.4513188 10.6196201 13.386131 10.8338212 13.248 10.9410279 13.0522271 10.9410279 12.8245939 10.9410279 12.3848384 10.5871397 12.0591092 10.1088492 12.0591092 9.59765363 12.0591092 9.18581006 12.3118952 8.93912849 12.7830917L8.24663687 12.1247162C8.74042458 11.4086987 9.33356425 11.0915633 10.1491844 11.0915633 11.2628603 11.0915633 12.0443017 11.8228821 12.0443017 12.8730131 12.0443017 13.7353362 11.6829832 14.1252052 10.4637989 14.5655895M12.3824804 13.9311092C12.3824804 12.3364192 13.6507039 11.0999476 15.2827933 11.0999476 15.7441006 11.0999476 16.1393855 11.1894498 16.6265922 11.4160349L16.6265922 12.6617293C16.1981899 12.2383231 15.8186145 12.0674934 15.3326816 12.0674934 14.2531844 12.0674934 13.4870279 12.8403144 13.4870279 13.9390742 13.4870279 14.9806114 14.2773855 15.8022707 15.2827933 15.8022707 15.7939888 15.8022707 16.1809944 15.6222183 16.6265922 15.1918952L16.6265922 16.4369607C16.1561564 16.672559 15.7693631 16.7702358 15.3080559 16.7702358 13.6842458 16.7702358 12.3824804 15.5086114 12.3824804 13.9311092",
"key": 3
}), React.createElement("polyline", {
"fill": "#231F20",
"points": "25.125 13.003 23.66 16.648 22.489 16.648 24.82 11.083 25.397 11.083 27.771 16.648 26.609 16.648",
"key": 4
}), React.createElement("polyline", {
"fill": "#231F20",
"points": "28.256 11.222 31.295 11.222 31.295 12.141 29.327 12.141 29.327 13.605 31.223 13.605 31.223 14.524 29.327 14.524 29.327 15.728 31.295 15.728 31.295 16.648 28.256 16.648",
"key": 5
}), React.createElement("path", {
"fill": "#231F20",
"d": "M33.388838,14.1499389 L33.0757095,14.1499389 L33.0757095,15.793048 L33.4058212,15.793048 C34.0734749,15.793048 34.4362793,15.5169956 34.4362793,14.988786 C34.4362793,14.4433886 34.0734749,14.1499389 33.388838,14.1499389 M35.5391285,15.0460087 C35.5391285,16.0615546 34.8305028,16.6476157 33.5945475,16.6476157 L32.0051285,16.6476157 L32.0051285,11.2221485 L33.0757095,11.2221485 L33.0757095,13.4018515 L33.2156089,13.4018515 L34.699095,11.2221485 L36.0172067,11.2221485 L34.2872514,13.5077031 C35.0945922,13.6697293 35.5391285,14.2151266 35.5391285,15.0460087",
"key": 6
}), React.createElement("path", {
"fill": "#F47216",
"d": "M16.9766592,13.9162271 C16.9766592,12.3221659 18.2852179,11.0299389 19.8996872,11.0299389 L19.8996872,11.0299389 C21.5141564,11.0299389 22.8229274,12.3221659 22.8229274,13.9162271 L22.8229274,13.9162271 C22.8229274,15.5102882 21.5141564,16.8020961 19.8996872,16.8020961 L19.8996872,16.8020961 C18.2852179,16.8020961 16.9766592,15.5102882 16.9766592,13.9162271",
"transform": "rotate(-174 19.9 13.916)",
"key": 7
}), React.createElement("path", {
"stroke": "#333",
"strokeWidth": ".5",
"d": "M0.250055728,23.7478922 L37.75,23.749986 L37.75,0.250843132 L0.255293409,0.250005583 L0.250055728,23.7478922 Z",
"key": 8
})])])]);
}
Discover.displayName = "Discover";
Discover.defaultProps = {
"width": "38",
"height": "24",
"viewBox": "0 0 38 24"
};
module.exports = Discover;
Discover.default = Discover;
/***/ }),
/***/ 462:
/***/ (function(module, exports, __webpack_require__) {
var React = __webpack_require__(0);
function Mastercard(props) {
return React.createElement("svg", props, [React.createElement("rect", {
"width": "34",
"height": "24",
"rx": "2",
"fill": "#353A48",
"key": 0
}), React.createElement("circle", {
"cx": "13",
"cy": "12",
"r": "6",
"fill": "#ED0006",
"key": 1
}), React.createElement("g", {
"style": {
"mixBlendMode": "screen"
},
"key": 2
}, React.createElement("circle", {
"cx": "21",
"cy": "12",
"r": "6",
"fill": "#F9A000"
}))]);
}
Mastercard.displayName = "Mastercard";
Mastercard.defaultProps = {
"width": "34",
"height": "24",
"viewBox": "0 0 34 24",
"fill": "none"
};
module.exports = Mastercard;
Mastercard.default = Mastercard;
/***/ }),
/***/ 463:
/***/ (function(module, exports, __webpack_require__) {
var React = __webpack_require__(0);
function Visa(props) {
return React.createElement("svg", props, [React.createElement("rect", {
"width": "34",
"height": "24",
"rx": "2",
"fill": "#224DBA",
"key": 0
}), React.createElement("g", {
"clipPath": "url(#clip0)",
"key": 1
}, [React.createElement("path", {
"d": "M14.4 15.6553H12.4558L13.6718 8.13635H15.6159L14.4 15.6553Z",
"fill": "white",
"key": 0
}), React.createElement("path", {
"d": "M21.4477 8.32011C21.0642 8.16798 20.456 8 19.7039 8C17.784 8 16.432 9.02381 16.4237 10.4875C16.4078 11.5675 17.3917 12.1673 18.1276 12.5274C18.8798 12.8953 19.1355 13.1355 19.1355 13.4635C19.1278 13.9672 18.5277 14.1994 17.9679 14.1994C17.1917 14.1994 16.7758 14.0797 16.1438 13.7994L15.8878 13.6793L15.6157 15.3672C16.0717 15.5749 16.9118 15.7592 17.784 15.7673C19.824 15.7673 21.152 14.7594 21.1678 13.1995C21.1755 12.3436 20.656 11.6877 19.5359 11.1518C18.8559 10.8078 18.4394 10.5758 18.4394 10.2238C18.4474 9.90377 18.7917 9.576 19.5592 9.576C20.1913 9.55995 20.6557 9.71187 21.0075 9.8639L21.1833 9.94374L21.4477 8.32011Z",
"fill": "white",
"key": 1
}), React.createElement("path", {
"d": "M24.0316 12.9916C24.1917 12.5597 24.8078 10.8879 24.8078 10.8879C24.7997 10.9039 24.9676 10.4479 25.0636 10.168L25.1995 10.8159C25.1995 10.8159 25.5676 12.6157 25.6476 12.9916C25.3437 12.9916 24.4156 12.9916 24.0316 12.9916ZM26.4314 8.13635H24.9276C24.4639 8.13635 24.1116 8.27222 23.9115 8.7602L21.0237 15.6552H23.0636C23.0636 15.6552 23.3995 14.7272 23.4717 14.5273C23.6955 14.5273 25.6799 14.5273 25.9678 14.5273C26.0236 14.7913 26.1998 15.6552 26.1998 15.6552H27.9999L26.4314 8.13635Z",
"fill": "white",
"key": 2
}), React.createElement("path", {
"d": "M10.832 8.13635L8.92798 13.2636L8.71992 12.2237C8.36792 11.0238 7.26395 9.72022 6.03198 9.07202L7.77596 15.6474H9.83187L12.8878 8.13635H10.832Z",
"fill": "white",
"key": 3
}), React.createElement("path", {
"d": "M7.15998 8.13635H4.032L4 8.28828C6.44002 8.91223 8.05599 10.4163 8.71993 12.224L8.03994 8.76839C7.92799 8.28817 7.58396 8.15219 7.15998 8.13635Z",
"fill": "white",
"key": 4
})]), React.createElement("defs", {
"key": 2
}, React.createElement("clipPath", {
"id": "clip0"
}, React.createElement("rect", {
"width": "24",
"height": "7.76731",
"fill": "white",
"transform": "translate(4 8)"
})))]);
}
Visa.displayName = "Visa";
Visa.defaultProps = {
"width": "34",
"height": "24",
"viewBox": "0 0 34 24",
"fill": "none"
};
module.exports = Visa;
Visa.default = Visa;
/***/ }),
/***/ 464:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","transfer":"transfer"};
/***/ }),
/***/ 465:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","section-title":"section-title","sectionTitle":"section-title"};
/***/ }),
/***/ 466:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","sightline-deposit":"sightline-deposit","sightlineDeposit":"sightline-deposit","input-prepend":"input-prepend","inputPrepend":"input-prepend","transfer":"transfer","fee":"fee","authorizeBtn":"authorizeBtn","not-enrolled-warning-box":"not-enrolled-warning-box","notEnrolledWarningBox":"not-enrolled-warning-box"};
/***/ }),
/***/ 467:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","deposit-amount":"deposit-amount","depositAmount":"deposit-amount","deposit-amount-input":"deposit-amount-input","depositAmountInput":"deposit-amount-input","or":"or"};
/***/ }),
/***/ 468:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","review":"review","error":"error"};
/***/ }),
/***/ 469:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_isNaN__ = __webpack_require__(154);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_isNaN___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isNaN__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Titles__ = __webpack_require__(33);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__style_css__ = __webpack_require__(470);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__style_css__);
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var _ref3 = /*#__PURE__*/_jsx("p", {}, void 0, /*#__PURE__*/_jsx("strong", {}, void 0, "We charge 5 other types of fees."), " Here are some of them:");
var _ref4 = /*#__PURE__*/_jsx("p", {}, void 0, /*#__PURE__*/_jsx("strong", {}, void 0, "No overdraft/credit feature."));
var _ref5 = /*#__PURE__*/_jsx("p", {}, void 0, "Your funds are eligible for FDIC insurance.");
var _ref6 = /*#__PURE__*/_jsx("br", {});
var _ref7 = /*#__PURE__*/_jsx("br", {});
var _ref8 = /*#__PURE__*/_jsx("br", {});
var _ref9 = /*#__PURE__*/_jsx("br", {});
var _ref10 = /*#__PURE__*/_jsx("br", {});
var _ref11 = /*#__PURE__*/_jsx("br", {});
var Fees = /*#__PURE__*/function (_Component) {
_inherits(Fees, _Component);
var _super = _createSuper(Fees);
function Fees() {
var _this;
_classCallCheck(this, Fees);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _super.call.apply(_super, [this].concat(args));
_defineProperty(_assertThisInitialized(_this), "getValue", function (moneyVal) {
if (!moneyVal || __WEBPACK_IMPORTED_MODULE_0_lodash_isNaN___default()(moneyVal)) return "N/A";
var parsedValue = parseFloat(moneyVal);
if (parsedValue === 0) return "$0";
return parsedValue < 0 ? "-$".concat(Math.abs(parsedValue).toFixed(2)) : "$".concat(parsedValue.toFixed(2));
});
_defineProperty(_assertThisInitialized(_this), "renderItem", function (text, value) {
var qaLabelName = "".concat(_this.props.qaLabel, "ItemName").concat(text);
var qaLabelValue = "".concat(_this.props.qaLabel, "ItemValue").concat(value);
return [/*#__PURE__*/_jsx("dt", {
"data-qa-label": qaLabelName
}, qaLabelName, text), /*#__PURE__*/_jsx("dd", {
"data-qa-label": qaLabelValue
}, qaLabelValue, /*#__PURE__*/_jsx("strong", {}, void 0, _this.getValue(value)))];
});
_defineProperty(_assertThisInitialized(_this), "renderFees", function (fees) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
_ref$className = _ref.className,
className = _ref$className === void 0 ? __WEBPACK_IMPORTED_MODULE_3__style_css___default.a.fees : _ref$className,
_ref$qaLabel = _ref.qaLabel,
qaLabel = _ref$qaLabel === void 0 ? "fees" : _ref$qaLabel,
_ref$isMain = _ref.isMain,
isMain = _ref$isMain === void 0 ? false : _ref$isMain;
return fees.length > 0 && /*#__PURE__*/_jsx("div", {
className: className,
"data-qa-label": "".concat(_this.props.qaLabel, "-").concat(qaLabel)
}, void 0, /*#__PURE__*/_jsx("dl", {}, qaLabel, fees.map(function (_ref2) {
var text = _ref2.text,
value = _ref2.value;
return isMain ? /*#__PURE__*/_jsx("div", {}, text + value, _this.renderItem(text, value)) : _this.renderItem(text, value);
})));
});
return _this;
}
_createClass(Fees, [{
key: "render",
value: function render() {
return /*#__PURE__*/_jsx("div", {
"data-qa-label": this.props.qaLabel,
className: __WEBPACK_IMPORTED_MODULE_3__style_css___default.a.fees
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_2__Titles__["a" /* default */], {
qaLabel: this.props.qaLabel.concat("Title")
}, void 0, this.props.title || "".concat(this.props.isFdr ? "FanDuel Pre Paid Fees" : "TVG Pre Paid Play+ Fees")), /*#__PURE__*/_jsx("div", {
id: "feesContent"
}, void 0, this.props.mainFees && this.renderFees(this.props.mainFees, {
className: this.props.mainFeesLandscape ? __WEBPACK_IMPORTED_MODULE_3__style_css___default.a.mainFeesLandscape : __WEBPACK_IMPORTED_MODULE_3__style_css___default.a.mainFees,
qaLabel: "mainFees",
isMain: true
}), this.props.secondaryFees && this.renderFees(this.props.secondaryFees, {
className: this.props.mainFeesLandscape ? __WEBPACK_IMPORTED_MODULE_3__style_css___default.a.otherFeesLandscape : __WEBPACK_IMPORTED_MODULE_3__style_css___default.a.otherFees,
qaLabel: "secondaryFees",
isMain: false
}), _ref3, this.props.otherFees && this.renderFees(this.props.otherFees, {
className: this.props.mainFeesLandscape ? __WEBPACK_IMPORTED_MODULE_3__style_css___default.a.otherFeesLandscape : __WEBPACK_IMPORTED_MODULE_3__style_css___default.a.otherFees,
qaLabel: "otherFees",
isMain: false
}), _ref4, _ref5, _ref6, _ref7, /*#__PURE__*/_jsx("p", {}, void 0, "For general information about prepaid accounts, visit", " ", this.props.infoGovURL, "."), /*#__PURE__*/_jsx("p", {}, void 0, "Find details and conditions for all fees and services inside the Terms & Conditions or call", " ", /*#__PURE__*/_jsx("strong", {}, void 0, this.props.infoContactNbr), " or visit", " ", /*#__PURE__*/_jsx("strong", {}, void 0, this.props.infoURL, ".")), _ref8, _ref9, /*#__PURE__*/_jsx("p", {}, void 0, /*#__PURE__*/_jsx("strong", {}, void 0, "".concat(this.props.isFdr ? "FanDuel Pre Paid Card" : "TVG Pre Paid Play+", " is offered\n by Sutton Bank. There is no charge to obtain an account and no\n charge to activate your account."))), _ref10, _ref11));
}
}]);
return Fees;
}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"]);
_defineProperty(Fees, "defaultProps", {
transactionNumber: null,
title: "",
isFdr: false,
mainFeesLandscape: false,
mainFees: [{
name: "monthlyFee",
text: "Monthly Fee",
value: "0"
}, {
name: "perPurchase",
text: "Per Purchase",
value: "0"
}, {
name: "ATMWithdrawal",
text: "ATM Withdrawal",
value: "2"
}, {
name: "cashReload",
text: "Cash Reload",
value: null
}],
secondaryFees: [{
name: "ATMBalanceInquiry",
text: "ATM Balance Inquiry",
value: "0.75"
}, {
name: "customerService",
text: "Customer Service (automated or live agent)",
value: "0"
}, {
name: "inactivity",
text: "Inactivity (monthly fee after six (6) months of no activity)",
value: "2.95"
}],
otherFees: [{
name: "accountBankTransfer",
text: "Account to Bank Transfer",
value: "2"
}, {
name: "ATMWithdrawalDecline",
text: "ATM Withdrawal Decline",
value: "0.75"
}],
infoContactNbr: "877-220-3988",
infoURL: "playplusgo.com/terms",
infoGovURL: "cfpb.gov/prepaid",
qaLabel: ""
});
/* harmony default export */ __webpack_exports__["a"] = (Fees);
/***/ }),
/***/ 470:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","feesContent":"feesContent","mainFees":"mainFees","mainFeesLandscape":"mainFeesLandscape","otherFees":"otherFees","otherFeesLandscape":"otherFeesLandscape"};
/***/ }),
/***/ 471:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","disclaimer":"disclaimer"};
/***/ }),
/***/ 472:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","warning-container":"warning-container","warningContainer":"warning-container","warning-icon":"warning-icon","warningIcon":"warning-icon","warning-text":"warning-text","warningText":"warning-text"};
/***/ }),
/***/ 473:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* unused harmony export getCardSecurityCodeLabel */
/* unused harmony export Enrolled */
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_isError__ = __webpack_require__(66);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_isError___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isError__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_attempt__ = __webpack_require__(122);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_attempt___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_attempt__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_debounce__ = __webpack_require__(124);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_debounce___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_debounce__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_bindAll__ = __webpack_require__(29);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_bindAll___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_bindAll__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_lodash_get__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lodash_get__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react_redux__ = __webpack_require__(20);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_classnames__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_classnames__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__tvg_conf__ = __webpack_require__(6);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Buttons__ = __webpack_require__(17);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__tvg_ui_bootstrap_assets_svg_lock_svg__ = __webpack_require__(71);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__tvg_ui_bootstrap_assets_svg_lock_svg___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10__tvg_ui_bootstrap_assets_svg_lock_svg__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__tvg_ui_bootstrap_assets_svg_plus_svg__ = __webpack_require__(474);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__tvg_ui_bootstrap_assets_svg_plus_svg___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_11__tvg_ui_bootstrap_assets_svg_plus_svg__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__tvg_ui_bootstrap_assets_svg_minus_svg__ = __webpack_require__(475);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__tvg_ui_bootstrap_assets_svg_minus_svg___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12__tvg_ui_bootstrap_assets_svg_minus_svg__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__tvg_ui_bootstrap_assets_svg_close_svg__ = __webpack_require__(27);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__tvg_ui_bootstrap_assets_svg_close_svg___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_13__tvg_ui_bootstrap_assets_svg_close_svg__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__tvg_ui_bootstrap_components_Buttons_index_css__ = __webpack_require__(26);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__tvg_ui_bootstrap_components_Buttons_index_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_14__tvg_ui_bootstrap_components_Buttons_index_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__tvg_ui_bootstrap_components_Modal__ = __webpack_require__(47);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__tvg_ui_bootstrap_components_Modal_example_css__ = __webpack_require__(30);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__tvg_ui_bootstrap_components_Modal_example_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_16__tvg_ui_bootstrap_components_Modal_example_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__Common_DepositAmount__ = __webpack_require__(159);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__DepositFeedback__ = __webpack_require__(476);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__Common_CreditCard_SecurityNumber__ = __webpack_require__(155);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__Card__ = __webpack_require__(479);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__Common_Titles__ = __webpack_require__(33);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__Common_Transfer__ = __webpack_require__(157);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__Common_Review__ = __webpack_require__(77);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__AddCardModal__ = __webpack_require__(487);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__Common_BankDisclaimer__ = __webpack_require__(160);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__style_css__ = __webpack_require__(162);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_26__style_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__actions__ = __webpack_require__(62);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__services_slp__ = __webpack_require__(63);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__Common_WarningText__ = __webpack_require__(34);
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _extends() { _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; }; return _extends.apply(this, arguments); }
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var tvgConf = Object(__WEBPACK_IMPORTED_MODULE_8__tvg_conf__["a" /* default */])();
var iconProps = {
fill: "#5c9de0",
width: 16,
height: 16
};
var getFeesDebounced = __WEBPACK_IMPORTED_MODULE_2_lodash_debounce___default()(function (_ref) {
var amount = _ref.amount,
accountId = _ref.accountId,
callback = _ref.callback;
return Object(__WEBPACK_IMPORTED_MODULE_28__services_slp__["h" /* getSightlineFees */])({
amount: amount,
accountId: accountId
}).then(callback);
}, 500);
var getFeesThen = function getFeesThen(_ref2) {
var amount = _ref2.amount,
accountId = _ref2.accountId,
callback = _ref2.callback;
var getFees = Promise.resolve(null);
if (amount && accountId) {
getFees = getFeesDebounced({
amount: amount,
accountId: accountId,
callback: callback
});
}
return getFees;
}; // In the future probably remove this by adding a property 'securityCodeLabel' on CardType instance, to avoid extra processing
var getCardSecurityCodeLabel = function getCardSecurityCodeLabel(type) {
if (!type) {
return "CVV";
}
switch (type) {
case "VISA":
return "CVV";
case "MASTERCARD":
return "CVC";
case "DISCOVER":
return "CID";
default:
return "CVV";
}
};
var _ref6 = /*#__PURE__*/_jsx("span", {
"data-qa-label": "modalHeaderTitle"
}, void 0, "Add a new card");
var _ref7 = /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_13__tvg_ui_bootstrap_assets_svg_close_svg___default.a, {
width: "16px",
height: "16px",
fill: "#fff"
});
var _ref8 = /*#__PURE__*/_jsx("span", {
"data-qa-label": "balanceLabel"
}, void 0, "Balance:");
var _ref9 = /*#__PURE__*/_jsx("span", {
"data-qa-label": "RegisteredCardLabel"
}, void 0, "Registered Card");
var _ref10 = /*#__PURE__*/_jsx("span", {}, void 0, "Registered Card");
var _ref11 = /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_10__tvg_ui_bootstrap_assets_svg_lock_svg___default.a, {
fill: "#fff",
width: "16px",
height: "16px"
});
var _ref12 = /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_25__Common_BankDisclaimer__["a" /* default */], {});
var Enrolled = /*#__PURE__*/function (_Component) {
_inherits(Enrolled, _Component);
var _super = _createSuper(Enrolled);
function Enrolled(props) {
var _this;
_classCallCheck(this, Enrolled);
_this = _super.call(this, props);
_defineProperty(_assertThisInitialized(_this), "checkBlackListCards", function (cardType) {
return _this.props.declinedCardList.includes(cardType);
});
_this.state = {
disabled: true,
transferAmount: 0,
transferAmountValid: false,
depositAmount: 0,
depositAmountValid: false,
securityNumber: "",
securityNumberValid: false,
defaultCard: Enrolled.getDefaultCard(props.defaultCard, props.cards),
card: null,
disabledCardButton: true,
balance: props.balance,
wrapperDepositInfo: _this.props.alreadyProcessedRedirect ? null : _this.props.wrapperDepositInfo,
isDirty: false,
isFdr: tvgConf.product === "fdrmobile" || tvgConf.product === "fdrios" || tvgConf.product === "fdrandroid",
showCardDeclinedModal: false
};
__WEBPACK_IMPORTED_MODULE_3_lodash_bindAll___default()(_assertThisInitialized(_this), ["setMax", "openSlideDown", "handleAddCard", "handleTransferAmount", "handleDepositAmount", "handleSecurityNumber", "handleAuthorize", "closeAddCardModal"]);
return _this;
}
_createClass(Enrolled, [{
key: "componentDidMount",
value: function componentDidMount() {
var _this2 = this;
if (this.state.wrapperDepositInfo && this.state.wrapperDepositInfo.amount && !this.props.alreadyProcessedRedirect && this.props.sightlineUserAccount) {
var accountId = __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountDetails.accountNumber", this.props.userAccountDetails.accountNumber);
if (!accountId) {
accountId = __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountNumber") || __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountDetails.accountNumber");
}
this.props.dispatch({
type: "PROCESSING_REDIRECT",
data: {
isRedirect: true,
amount: +this.props.wrapperDepositInfo.amount,
accountId: accountId
}
});
getFeesThen({
amount: +this.props.wrapperDepositInfo.amount,
accountId: accountId,
callback: function callback(_ref3) {
var feeAmount = _ref3.feeAmount,
feeTotalAmount = _ref3.feeTotalAmount,
feeRefundAmount = _ref3.feeRefundAmount;
var redirectFundData = {
amount: +_this2.props.wrapperDepositInfo.amount + parseInt(feeTotalAmount, 10),
securityNumber: __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(_this2.props, "wrapperDepositInfo.cvv", "").toString(),
newPaymentCardInfo: {
number: _this2.props.wrapperDepositInfo.cardNumber,
expirationMonth: parseInt(_this2.props.wrapperDepositInfo.expirationMonth, 10),
expirationYear: parseInt("20".concat(_this2.props.wrapperDepositInfo.expirationYear), 10)
}
};
_this2.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_27__actions__["f" /* fundSightlineAndTransferToTVG */])(redirectFundData, +_this2.props.wrapperDepositInfo.amount, accountId, true, "", feeTotalAmount, feeAmount, feeRefundAmount)).then(function () {
return _this2.props.dispatch({
type: "REDIRECT_PROCESSED"
});
});
}
});
}
}
}, {
key: "componentWillReceiveProps",
value: function componentWillReceiveProps(props) {
if (this.props.transferAmount === props.transferAmount) {
this.setState({
defaultCard: Enrolled.getDefaultCard(props.defaultCard, props.cards),
securityNumber: props.defaultCard !== this.props.defaultCard ? "" : this.state.securityNumber
}, this.isDisabled);
} else {
// if transfer amount is changed externally - redirect case: only funding success
this.setState({
transferAmount: props.transferAmount,
disabled: false
});
}
}
}, {
key: "setMax",
value: function setMax() {
var value = this.props.addFundsSectionVisible && this.state.depositAmount > 0 ? this.state.depositAmount + this.props.balance : this.props.balance;
return parseInt(value, 10) - this.state.depositFee;
}
}, {
key: "handleTransferAmount",
value: function handleTransferAmount(value, valid) {
var _this3 = this;
var transferAmount = value;
if (!isNaN(value) && value !== "" && value.toString().indexOf(".") === -1) {
// it is indeed an int and not a float
transferAmount = parseInt(value, 10);
}
var accountId = __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountNumber") || __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountDetails.accountNumber");
getFeesThen({
amount: transferAmount,
accountId: accountId,
callback: function callback(_ref4) {
var feeAmount = _ref4.feeAmount,
feeTotalAmount = _ref4.feeTotalAmount,
feeRefundAmount = _ref4.feeRefundAmount;
_this3.setState({
depositFee: feeTotalAmount,
feeAmount: feeAmount,
feeRefundAmount: feeRefundAmount
});
}
});
this.setState({
transferAmount: value ? transferAmount : 0,
transferAmountValid: valid,
isDirty: true
}, this.isDisabled); // This is currently only being used by the GTM
// but we could start saving data in the store.
this.props.dispatch({
type: "CHANGE_TRANSFER_AMOUNT",
data: {
amount: value ? transferAmount : 0,
isValid: valid
}
});
}
}, {
key: "isDisabled",
value: function isDisabled() {
var disabled = this.props.addFundsSectionVisible && this.state.defaultCard ? !(this.state.transferAmountValid && this.state.depositAmountValid && this.state.securityNumberValid && this.state.transferAmount <= this.setMax()) : !(this.state.transferAmountValid && this.state.transferAmount <= this.setMax());
this.setState({
disabled: disabled
});
}
}, {
key: "openSlideDown",
value: function openSlideDown() {
var _this4 = this;
this.setState({
depositAmount: this.props.addFundsSectionVisible ? 0 : this.state.depositAmount,
depositAmountValid: this.props.addFundsSectionVisible ? false : this.state.depositAmountValid,
securityNumber: this.props.addFundsSectionVisible ? "" : this.state.securityNumber,
securityNumberValid: this.props.addFundsSectionVisible ? false : this.state.securityNumberValid
}, function () {
_this4.isDisabled();
if (_this4.props.alreadyProcessedRedirect || !__WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(_this4.state.wrapperDepositInfo, "cardNumber", "")) {
if (_this4.props.addFundsSectionVisible) {
_this4.props.onAddFundsHideSection();
} else {
_this4.props.onAddFundsOpenSection();
}
}
if (!_this4.props.alreadyProcessedRedirect && __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(_this4.state.wrapperDepositInfo, "cardNumber", "")) {
_this4.props.onAddFundsOpenSection();
}
});
}
}, {
key: "transferToTVG",
value: function transferToTVG() {
var accountId = __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountDetails.accountNumber", this.props.userAccountDetails.accountNumber);
if (!accountId) {
accountId = this.props.userAccountDetails.accountDetails && this.props.userAccountDetails.accountDetails.accountNumber || this.props.userAccountDetails.accountDetails.accountDetails && this.props.userAccountDetails.accountDetails.accountDetails.accountNumber;
}
this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_27__actions__["j" /* transferFundsToTVG */])(this.state.transferAmount, accountId, false, this.state.depositFee, this.state.feeAmount, this.state.feeRefundAmount)).then(this.props.onPaymentComplete).then(this.props.onFundComplete).then(this.props.onHandleDebounce);
}
}, {
key: "fundSightline",
value: function fundSightline() {
if (this.state.defaultCard) {
var cardType = this.state.defaultCard.type;
if (this.props.showCardDeclinedModal && this.checkBlackListCards(cardType)) {
this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_27__actions__["h" /* openInvalidCardModal */])());
} else {
var accountId = __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountDetails.accountNumber", this.props.userAccountDetails.accountNumber);
if (!accountId) {
accountId = this.props.userAccountDetails.accountDetails && this.props.userAccountDetails.accountDetails.accountNumber || this.props.userAccountDetails.accountDetails.accountDetails && this.props.userAccountDetails.accountDetails.accountDetails.accountNumber;
}
this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_27__actions__["f" /* fundSightlineAndTransferToTVG */])({
amount: this.state.depositAmount,
paymentCard: {
securityNumber: this.state.securityNumber
}
}, this.state.transferAmount, accountId, false, this.state.defaultCard.id.toString(), this.state.depositFee, this.state.feeAmount, this.state.feeRefundAmount)).then(this.props.onFundComplete);
}
}
}
}, {
key: "handleAddCard",
value: function handleAddCard(card) {
var _this5 = this;
var hideModal = function hideModal() {
_this5.props.dispatch({
type: "HIDE_ADD_CARD_MODAL"
});
};
var processRedirect = function processRedirect() {
_this5.props.dispatch({
type: "PROCESS_REDIRECT"
});
};
if (card) {
if (this.props.showCardDeclinedModal && this.checkBlackListCards(card.cardType)) {
hideModal();
this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_27__actions__["h" /* openInvalidCardModal */])());
} else {
var accountId = __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountDetails.accountNumber", this.props.userAccountDetails.accountNumber);
if (!accountId) {
accountId = this.props.userAccountDetails.accountDetails && this.props.userAccountDetails.accountDetails.accountNumber || this.props.userAccountDetails.accountDetails.accountDetails && this.props.userAccountDetails.accountDetails.accountDetails.accountNumber;
}
this.setState({
defaultCard: card,
isDirty: true
});
this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_27__actions__["a" /* addNewCard */])({
expirationMonth: card.expirationMonth,
expirationYear: parseInt("20".concat(card.expirationYear), 10),
number: card.cardNumber.toString()
}, accountId)).then(hideModal).then(processRedirect).catch(hideModal);
}
}
}
}, {
key: "handleSecurityNumber",
value: function handleSecurityNumber(value, valid) {
var allZeros = /^0*$/.test(value);
var allNumbers = /^\d+$/.test(value);
this.setState({
securityNumber: value,
securityNumberValid: valid && !allZeros && allNumbers,
isDirty: true
}, this.isDisabled);
}
}, {
key: "handleDepositAmount",
value: function handleDepositAmount(value, valid) {
var _this6 = this;
console.log("\n\n\n\nValue:\n\n\n\n", value);
var accountId = __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountNumber") || __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.props, "userAccountDetails.accountDetails.accountDetails.accountNumber");
getFeesThen({
amount: value,
accountId: accountId,
callback: function callback(_ref5) {
var feeAmount = _ref5.feeAmount,
feeTotalAmount = _ref5.feeTotalAmount,
feeRefundAmount = _ref5.feeRefundAmount;
var netAmount = parseFloat(value) - feeTotalAmount;
var transferAmount = netAmount > 0 ? netAmount : 0;
_this6.props.dispatch({
type: "CHANGE_TRANSFER_AMOUNT",
data: {
amount: transferAmount
}
});
_this6.setState({
transferAmount: transferAmount,
depositFee: feeTotalAmount,
feeAmount: feeAmount,
feeRefundAmount: feeRefundAmount,
transferAmountValid: netAmount > 0,
isDirty: true
});
}
});
this.setState({
depositAmount: !isNaN(parseFloat(value)) ? parseFloat(value) : "",
depositAmountValid: valid,
transferAmount: parseFloat(value),
isDirty: true
});
}
}, {
key: "handleAuthorize",
value: function handleAuthorize() {
this.props.dispatch({
type: "DEPOSIT_ATTEMPT",
data: {
amount: this.state.transferAmount
}
});
this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_27__actions__["i" /* resetAllOperationState */])());
return this.props.addFundsSectionVisible && this.state.defaultCard ? this.fundSightline() : this.transferToTVG();
}
}, {
key: "closeAddCardModal",
value: function closeAddCardModal() {
this.setState({
wrapperDepositInfo: null
}, this.props.onAddCardModalHide);
}
}, {
key: "isInvalidCard",
value: function isInvalidCard() {
var cardType = __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.state, "defaultCard.type");
return this.props.showCardDeclinedModal && this.props.addFundsSectionVisible && this.checkBlackListCards(cardType);
}
}, {
key: "renderAddCardModal",
value: function renderAddCardModal() {
if (!this.props.addCardModalVisible) {
return null;
}
return /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_15__tvg_ui_bootstrap_components_Modal__["a" /* default */], {
bodyClass: __WEBPACK_IMPORTED_MODULE_16__tvg_ui_bootstrap_components_Modal_example_css___default.a.modal,
classnames: __WEBPACK_IMPORTED_MODULE_7_classnames___default()(__WEBPACK_IMPORTED_MODULE_26__style_css___default.a.scroll, __WEBPACK_IMPORTED_MODULE_26__style_css___default.a.addCardModal),
alwaysOpen: true,
modalIdentifier: "addNewCardModal",
modalParent: "#funds",
closeModal: this.closeAddCardModal,
qaLabel: "addCard"
}, void 0, /*#__PURE__*/_jsx("div", {}, void 0, /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_7_classnames___default()(__WEBPACK_IMPORTED_MODULE_16__tvg_ui_bootstrap_components_Modal_example_css___default.a.modalHeader, __WEBPACK_IMPORTED_MODULE_26__style_css___default.a.header)
}, void 0, _ref6, /*#__PURE__*/_jsx("button", {
type: "button",
onClick: this.closeAddCardModal,
className: __WEBPACK_IMPORTED_MODULE_14__tvg_ui_bootstrap_components_Buttons_index_css___default.a.inlineButton,
"data-qa-label": "modalHeaderCloseButton"
}, void 0, _ref7)), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_24__AddCardModal__["a" /* AddCardModal */], {
addNewCard: this.props.addNewCard,
onCardNumberFill: this.props.onFill("cardNumber"),
onCardNumberError: this.props.onError("cardNumber"),
onExpirationMonthFill: this.props.onFill("cardExpMonth"),
onExpirationMonthError: this.props.onError("cardExpMonth"),
onExpirationYearFill: this.props.onFill("cardExpYr"),
onExpirationYearError: this.props.onError("cardExpYr"),
onSecurityNumberFill: this.props.onFill("cardCvn"),
onSecurityNumberError: this.props.onError("cardCvn"),
onSecurityTooltipShow: this.props.onTooltipShow("cardCvn"),
onSubmit: this.handleAddCard,
disabledCardButton: this.state.disabledCardButton,
initialCardNumber: !this.props.alreadyProcessedRedirect ? __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.state.wrapperDepositInfo, "cardNumber", "") : "",
initialExpirationMonth: !this.props.alreadyProcessedRedirect ? __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.state.wrapperDepositInfo, "expirationMonth", "") : "",
initialExpirationYear: !this.props.alreadyProcessedRedirect ? __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.state.wrapperDepositInfo, "expirationYear", "") : "",
hadCardFromRedirect: !this.props.alreadyProcessedRedirect ? !!__WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.state.wrapperDepositInfo, "cardNumber", "") : false,
declineCardText: this.props.cardDeclinedWarningLabels.addCard,
showCardDeclinedModal: this.props.showCardDeclinedModal,
declinedCardList: this.props.declinedCardList
})));
}
}, {
key: "renderDepositFeedback",
value: function renderDepositFeedback() {
var _this7 = this;
return /*#__PURE__*/_jsx("div", {}, void 0, this.props.transferToTVG.completed && /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_18__DepositFeedback__["a" /* default */], {
className: "depositFeedback",
onClose: function onClose() {
return _this7.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_27__actions__["i" /* resetAllOperationState */])());
},
user: this.props.sightlineUserAccount,
fundSightline: this.props.fundSightline,
transferToTVG: this.props.transferToTVG,
enrollUser: this.props.enrollUser,
capi: this.props.capi,
fee: this.props.transferToTVG.depositFee,
feeFull: this.props.transferToTVG.feeAmount,
feeRefund: this.props.transferToTVG.feeRefundAmount
}));
}
}, {
key: "renderPrePaidCard",
value: function renderPrePaidCard() {
var buttonIconState = __WEBPACK_IMPORTED_MODULE_7_classnames___default()({
"minus-sign": this.props.addFundsSectionVisible,
"plus-sign": !this.props.addFundsSectionVisible
});
return /*#__PURE__*/_jsx("div", {
className: "prepaid-card-section",
"data-qa-label": "prepaidCardSection"
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_21__Common_Titles__["a" /* default */], {}, void 0, /*#__PURE__*/_jsx("span", {
"data-qa-label": "prepaidCardLabel"
}, void 0, this.state.isFdr ? "Pre Paid Card:" : "Pre Paid Play+ Card:"), /*#__PURE__*/_jsx("button", {
type: "button",
onClick: this.openSlideDown,
className: __WEBPACK_IMPORTED_MODULE_7_classnames___default()(__WEBPACK_IMPORTED_MODULE_14__tvg_ui_bootstrap_components_Buttons_index_css___default.a.inlineButton, __WEBPACK_IMPORTED_MODULE_26__style_css___default.a.openSlideDown, "js-add-funds-btn", buttonIconState),
"data-qa-label": "addFundsButton"
}, void 0, this.props.addFundsSectionVisible ? /*#__PURE__*/__WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_12__tvg_ui_bootstrap_assets_svg_minus_svg___default.a, _extends({
"data-qa-label": "addFundsButtonIcon"
}, iconProps)) : /*#__PURE__*/__WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_11__tvg_ui_bootstrap_assets_svg_plus_svg___default.a, _extends({
"data-qa-label": "addFundsButtonIcon"
}, iconProps)), "Add Funds")), /*#__PURE__*/_jsx("p", {}, void 0, _ref8, /*#__PURE__*/_jsx("strong", {
className: __WEBPACK_IMPORTED_MODULE_26__style_css___default.a.balance,
"data-qa-label": "balanceValue"
}, void 0, "$", !this.state.balance ? "0.00" : parseFloat(this.state.balance).toFixed(2))));
}
}, {
key: "renderCard",
value: function renderCard(isOnlyDeclinedCard) {
var _this8 = this;
if (!this.state.defaultCard) {
return null;
}
var _this$state$defaultCa = this.state.defaultCard,
number = _this$state$defaultCa.number,
expired = _this$state$defaultCa.expired,
type = _this$state$defaultCa.type;
var defaultCardStyle = [__WEBPACK_IMPORTED_MODULE_26__style_css___default.a.defaultCard];
if (this.checkBlackListCards(type)) {
defaultCardStyle.push(__WEBPACK_IMPORTED_MODULE_26__style_css___default.a.blackListCard);
}
return /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_20__Card__["a" /* default */], {
className: __WEBPACK_IMPORTED_MODULE_7_classnames___default.a.apply(void 0, defaultCardStyle),
number: number,
expired: expired,
type: type,
cards: this.props.cards,
defaultCard: this.state.defaultCard,
change: true,
onSelect: function onSelect(card) {
return _this8.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_27__actions__["b" /* changeDefaultCard */])(card.id));
},
onOpen: this.props.onChangeCardModalOpen,
qaLabel: "defaultCard",
onAddNewCard: this.props.onAddCardModalOpen,
isOnlyDeclinedCard: isOnlyDeclinedCard,
declineCardText: this.props.cardDeclinedWarningLabels.short,
declinedCardList: this.props.declinedCardList,
showCardDeclinedModal: this.props.showCardDeclinedModal
});
}
}, {
key: "renderReview",
value: function renderReview() {
return /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_23__Common_Review__["a" /* default */], {
labels: this.props.dmaDepositLabels,
depositAmount: this.state.depositAmount,
transferAmount: this.state.transferAmount,
fee: this.state.depositFee,
feeFull: this.state.feeAmount,
feeRefund: this.state.feeRefundAmount,
applyError: this.state.isDirty,
balance: parseFloat(this.state.balance) + parseFloat(this.state.depositAmount || "0") - parseFloat(this.state.depositFee) - parseFloat(this.state.transferAmount),
qaLabel: ""
});
}
}, {
key: "renderEnrolledMsg",
value: function renderEnrolledMsg() {
if (this.state.isFdr) {
return /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_26__style_css___default.a.slpEnrolledMsg
}, void 0, /*#__PURE__*/_jsx("h3", {}, void 0, this.props.capi.slpEnrolledMsg), /*#__PURE__*/_jsx("p", {}, void 0, this.props.capi.slpEnrolledText));
}
return /*#__PURE__*/_jsx("h3", {
className: __WEBPACK_IMPORTED_MODULE_26__style_css___default.a.slpEnrolledMsg
}, void 0, this.props.capi.slpEnrolledMsg);
}
}, {
key: "render",
value: function render() {
var _this9 = this;
var isOnlyDeclinedCard = this.props.cards && !this.props.cards.find(function (card) {
return !_this9.checkBlackListCards(card.type);
});
return /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_26__style_css___default.a.sightlineDeposit,
"data-qa-label": "enrolled"
}, void 0, this.renderEnrolledMsg(), this.renderAddCardModal(), this.renderDepositFeedback(), this.renderPrePaidCard(), this.props.addFundsSectionVisible && /*#__PURE__*/_jsx("div", {}, void 0, this.state.defaultCard ? /*#__PURE__*/_jsx("section", {
className: "js-default-card-section"
}, void 0, /*#__PURE__*/_jsx("div", {
"data-qa-label": "depositToPrePaidCardSection"
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_21__Common_Titles__["a" /* default */], {
qaLabel: "depositToPrePaidCardLabel"
}, void 0, this.state.isFdr ? "Deposit to Pre Paid Card" : "Deposit to Pre Paid Play+ Card"), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_17__Common_DepositAmount__["a" /* default */], {
message: this.props.capi.slpTransferMsg,
value: !this.props.alreadyProcessedRedirect ? __WEBPACK_IMPORTED_MODULE_4_lodash_get___default()(this.state.wrapperDepositInfo, "amount", "") : "",
onChange: this.handleDepositAmount,
onButtonClick: this.props.onDepositAmountClick,
onFill: this.props.onDepositFill("depositAmount"),
onError: this.props.onError("Standard Deposit Start | Other Amount"),
onTooltipShow: this.props.onTooltipShow("Deposit Amount"),
qaLabel: "depositToPrePaidCardContent",
isFdr: this.state.isFdr
})), /*#__PURE__*/_jsx("div", {
"data-qa-label": "creditCardSection"
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_21__Common_Titles__["a" /* default */], {}, void 0, _ref9, (!this.props.showCardDeclinedModal || !isOnlyDeclinedCard) && /*#__PURE__*/_jsx("button", {
type: "button",
onClick: this.props.onAddCardModalOpen,
className: __WEBPACK_IMPORTED_MODULE_7_classnames___default()("js-add-card-button", __WEBPACK_IMPORTED_MODULE_14__tvg_ui_bootstrap_components_Buttons_index_css___default.a.inlineButton, __WEBPACK_IMPORTED_MODULE_26__style_css___default.a.openSlideDown),
"data-qa-label": "addCardButton"
}, void 0, /*#__PURE__*/__WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_11__tvg_ui_bootstrap_assets_svg_plus_svg___default.a, _extends({
"data-qa-label": "addCardButtonIcon"
}, iconProps)), "Add Card")), this.renderCard(isOnlyDeclinedCard), this.props.showCardDeclinedModal && this.checkBlackListCards(this.state.defaultCard.type) && /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_26__style_css___default.a.enrolledWarningTextWrapper
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_29__Common_WarningText__["b" /* default */], {}, void 0, this.props.cardDeclinedWarningLabels.full)), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_19__Common_CreditCard_SecurityNumber__["a" /* default */], {
onChange: this.handleSecurityNumber,
onBlur: this.handleSecurityNumber,
onFill: this.props.onFill("cardCvn"),
onError: this.props.onError("cardCvn"),
onTooltipShow: this.props.onTooltipShow("cardCvn"),
value: this.state.securityNumber,
labelText: "Card ".concat(getCardSecurityCodeLabel(this.state.defaultCard.type))
}))) : /*#__PURE__*/_jsx("div", {
className: "js-no-default-card-section",
"data-qa-label": "creditCardSection"
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_21__Common_Titles__["a" /* default */], {
qaLabel: "RegisteredCardLabel"
}, void 0, _ref10, /*#__PURE__*/_jsx("button", {
type: "button",
onClick: this.props.onAddCardModalOpen,
className: __WEBPACK_IMPORTED_MODULE_7_classnames___default()(__WEBPACK_IMPORTED_MODULE_14__tvg_ui_bootstrap_components_Buttons_index_css___default.a.inlineButton, __WEBPACK_IMPORTED_MODULE_26__style_css___default.a.openSlideDown),
"data-qa-label": "addCardButton"
}, void 0, /*#__PURE__*/__WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_11__tvg_ui_bootstrap_assets_svg_plus_svg___default.a, _extends({
"data-qa-label": "addCardButtonIcon"
}, iconProps)), "Add Card")), /*#__PURE__*/_jsx("p", {
className: "js-no-default-card-msg",
"data-qa-label": "declinedInfoMessage" // eslint-disable-next-line react/no-danger
,
dangerouslySetInnerHTML: {
__html: this.props.capi.slpCardDeclinedTryToAddAgain
}
}))), /*#__PURE__*/_jsx("div", {
className: "transfer-to-tvg-section",
"data-qa-label": "transferToTVGAccountSection"
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_21__Common_Titles__["a" /* default */], {
qaLabel: "transferToTVGAccountLabel"
}, void 0, this.state.isFdr ? " Transfer To FanDuel Racing Account" : " Transfer To TVG Account"), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_22__Common_Transfer__["a" /* default */], {
value: this.state.transferAmount,
max: this.setMax(),
onChange: this.handleTransferAmount,
onFill: this.props.onTransferFill("transferAmount"),
onError: this.props.onError("Transfer Amount"),
qaLabel: ""
})), this.renderReview(), /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_26__style_css___default.a.authorize
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Buttons__["a" /* default */], {
size: "big",
type: "legacy",
className: "js-authorize-button",
disabled: this.isInvalidCard() || this.state.disabled || this.props.sightlineUserAccount.disableAuthorize || this.props.debounce,
onClick: this.handleAuthorize,
icon: true,
qaLabel: "authorize"
}, void 0, _ref11, "Authorize")), _ref12);
}
}], [{
key: "getDefaultCard",
value: function getDefaultCard(id, cards) {
if (!id) {
return null;
}
return cards.filter(function (card) {
return card.id === id;
}).pop() || null;
}
}]);
return Enrolled;
}(__WEBPACK_IMPORTED_MODULE_5_react__["Component"]);
_defineProperty(Enrolled, "defaultProps", {
cards: [],
defaultCard: null,
balance: 0,
transferToTVG: null,
wrapperDepositInfo: null,
declinedCardList: [],
showCardDeclinedModal: false,
cardDeclinedWarningLabels: {
full: "Visa cards can no longer be used to load pre-paid TVG cards",
short: "Visa cards are no longer accepted",
addCard: "Visa cards can no longer be used to load pre-paid TVG cards"
}
});
var mapStateToProps = function mapStateToProps(store) {
var dmaDepositLabels = __WEBPACK_IMPORTED_MODULE_1_lodash_attempt___default()(function () {
return JSON.parse(store.capi.dmaDepositLabels);
});
dmaDepositLabels = __WEBPACK_IMPORTED_MODULE_0_lodash_isError___default()(dmaDepositLabels) ? null : dmaDepositLabels;
var cardDeclinedWarningLabels = __WEBPACK_IMPORTED_MODULE_1_lodash_attempt___default()(function () {
var capiMessage = JSON.parse(store.capi.cardErrorRedirect);
return {
full: capiMessage.cardDeclinedWarningFullText,
short: capiMessage.cardDeclinedWarningShortText,
addCard: capiMessage.cardDeclinedWarningAddCardText
};
});
cardDeclinedWarningLabels = __WEBPACK_IMPORTED_MODULE_0_lodash_isError___default()(cardDeclinedWarningLabels) ? {
full: "Visa cards can no longer be used to load pre-paid TVG cards",
short: "Visa cards are no longer accepted",
addCard: "Visa cards can no longer be used to load pre-paid TVG cards"
} : cardDeclinedWarningLabels;
return {
capi: store.capi,
dmaDepositLabels: dmaDepositLabels,
cardDeclinedWarningLabels: cardDeclinedWarningLabels,
sightlineUserAccount: store.deposits.sightline.sightlineUserAccount,
userAccountDetails: store.userAccountDetails,
balance: store.deposits.sightline.sightlineUserAccount.balance,
cards: store.deposits.sightline.cards.cardList,
defaultCard: store.deposits.sightline.cards.defaultCard,
addNewCard: store.deposits.sightline.addNewCard,
transferToTVG: store.deposits.sightline.transferToTVG,
fundSightline: store.deposits.sightline.fundSightline,
enrollUser: store.deposits.sightline.enrollUser,
addCardModalVisible: store.deposits.sightline.addCardModalVisible,
wrapperDepositInfo: store.deposits.wrapperDepositInfo,
alreadyProcessedRedirect: store.deposits.alreadyProcessedRedirect,
addFundsSectionVisible: store.deposits.sightline.addFundsSectionVisible,
features: store.features,
transferAmount: store.deposits.sightline.transferAmount,
showCardDeclinedModal: store.features.showCardDeclinedModal
};
};
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
return {
dispatch: dispatch,
onError: function onError(fieldName) {
return function (value, errors) {
return dispatch(Object(__WEBPACK_IMPORTED_MODULE_27__actions__["d" /* errorShown */])(fieldName, value, errors));
};
},
onFill: function onFill(fieldName) {
return function (value) {
return dispatch(Object(__WEBPACK_IMPORTED_MODULE_27__actions__["l" /* userFilledField */])(fieldName, value));
};
},
onDepositFill: function onDepositFill(fieldName) {
return function (value) {
return dispatch(Object(__WEBPACK_IMPORTED_MODULE_27__actions__["k" /* userFilledDepositField */])(fieldName, value));
};
},
onTransferFill: function onTransferFill(fieldName) {
return function (value) {
return dispatch(Object(__WEBPACK_IMPORTED_MODULE_27__actions__["m" /* userFilledTransferField */])(fieldName, value));
};
},
onAddFundsOpenSection: function onAddFundsOpenSection() {
return dispatch({
type: "OPEN_ADD_FUNDS_SECTION"
});
},
onAddFundsHideSection: function onAddFundsHideSection() {
return dispatch({
type: "HIDE_ADD_FUNDS_SECTION"
});
},
onAddCardModalOpen: function onAddCardModalOpen() {
return dispatch({
type: "OPEN_ADD_CARD_MODAL"
});
},
onAddCardModalHide: function onAddCardModalHide() {
return dispatch({
type: "HIDE_ADD_CARD_MODAL"
});
},
onChangeCardModalOpen: function onChangeCardModalOpen() {
return dispatch({
type: "OPEN_CHANGE_CARD_MODAL"
});
},
onDepositAmountClick: function onDepositAmountClick(value) {
return dispatch({
type: "USER_SELECTED_DEPOSIT_AMOUNT",
data: {
value: value
}
});
},
onTooltipShow: function onTooltipShow(fieldName) {
return function () {
return dispatch({
type: "SHOW_TOOLTIP",
data: {
fieldName: fieldName
}
});
};
}
};
};
/* harmony default export */ __webpack_exports__["a"] = (Object(__WEBPACK_IMPORTED_MODULE_6_react_redux__["b" /* connect */])(mapStateToProps, mapDispatchToProps)(Enrolled));
/***/ }),
/***/ 476:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_get__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__SuccessModal__ = __webpack_require__(477);
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
/* eslint-disable */
var setMessage = function setMessage(capi, transferToTVG, fundSightline, enrollUser) {
var wasEnrolled = enrollUser.success && !enrollUser.isFetching;
var amount = parseFloat(transferToTVG.depositAmount).toFixed(2);
var capiMessage = wasEnrolled ? __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(capi, "slpDepositSuccessFirstTime", "You successfully deposited <strong>$XXX</strong> into your TVG account through your new pre-paid card. Expect to receive your card in the mail shortly.") : __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(capi, "slpDepositSuccess", "You successfully deposited <strong>$XXX</strong> into your TVG account through your Pre Paid Play+ Card.");
return capiMessage.replace("XXX", "".concat(amount));
};
var DepositFeedback = function DepositFeedback(props) {
return /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_2__SuccessModal__["a" /* default */], {
balance: props.user.balance,
transactionNumber: props.transferToTVG.paymentProcessorTransactionId,
message: setMessage(props.capi, props.transferToTVG, props.fundSightline, props.enrollUser),
depositAmount: __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(props, "fundSightline.data.fundedAmount", props.fundSightline.fundedAmount),
fee: props.fee,
feeFull: props.feeFull,
feeRefund: props.feeRefund,
transferAmount: props.transferToTVG.depositAmount,
onClose: props.onClose
});
};
DepositFeedback.defaultProps = {
user: {},
fundSightline: {},
transferToTVG: {
depositAmount: 0
},
onClose: function onClose() {},
enrollUser: {
success: false,
isFetching: false
}
};
/* harmony default export */ __webpack_exports__["a"] = (DepositFeedback);
/***/ }),
/***/ 477:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* unused harmony export SuccessModal */
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_get__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_noop__ = __webpack_require__(32);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_noop___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_noop__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react_redux__ = __webpack_require__(20);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_classnames__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_classnames__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_query_string__ = __webpack_require__(121);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_query_string___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_query_string__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__tvg_ui_bootstrap_components_Modal__ = __webpack_require__(47);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__tvg_ui_bootstrap_components_Modal_example_css__ = __webpack_require__(30);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__tvg_ui_bootstrap_components_Modal_example_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7__tvg_ui_bootstrap_components_Modal_example_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__tvg_ui_bootstrap_components_Notifications__ = __webpack_require__(102);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Buttons_index_css__ = __webpack_require__(26);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Buttons_index_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Buttons_index_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__tvg_ui_bootstrap_assets_svg_close_svg__ = __webpack_require__(27);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__tvg_ui_bootstrap_assets_svg_close_svg___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10__tvg_ui_bootstrap_assets_svg_close_svg__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__Common_Review__ = __webpack_require__(77);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__style_css__ = __webpack_require__(478);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12__style_css__);
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
/* eslint-disable */
var _ref = /*#__PURE__*/_jsx("span", {
"data-qa-label": "successModalTitle"
}, void 0, "Deposit Summary");
var _ref2 = /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_10__tvg_ui_bootstrap_assets_svg_close_svg___default.a, {
width: "16px",
height: "16px",
fill: "#fff"
});
var SuccessModal = /*#__PURE__*/function (_PureComponent) {
_inherits(SuccessModal, _PureComponent);
var _super = _createSuper(SuccessModal);
function SuccessModal() {
_classCallCheck(this, SuccessModal);
return _super.apply(this, arguments);
}
_createClass(SuccessModal, [{
key: "render",
value: function render() {
var _this = this,
_classnames;
var desktopView = true;
var iosProduct = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);
var queryParameters = __WEBPACK_IMPORTED_MODULE_5_query_string___default.a.parse(window.location.search);
var isWrapped = queryParameters.wrapper || window.isWrapped;
if (__WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(window, "__TVG_GLOBALS__.DEVICE", "desktop") === "mobile") {
desktopView = false;
}
return /*#__PURE__*/__WEBPACK_IMPORTED_MODULE_2_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_6__tvg_ui_bootstrap_components_Modal__["a" /* default */], {
autoOpen: true,
ref: function ref(c) {
return _this.modal = c;
},
type: "scrollContent",
classnames: [__WEBPACK_IMPORTED_MODULE_12__style_css___default.a.scroll, __WEBPACK_IMPORTED_MODULE_12__style_css___default.a.successModal],
modalIdentifier: "ModalSuccess",
modalParent: "#funds",
bodyClass: __WEBPACK_IMPORTED_MODULE_7__tvg_ui_bootstrap_components_Modal_example_css___default.a.modal,
onClose: function onClose() {
_this.props.onClose();
_this.props.onModalClose();
},
qaLabel: "success"
}, /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_4_classnames___default()(__WEBPACK_IMPORTED_MODULE_7__tvg_ui_bootstrap_components_Modal_example_css___default.a.modalHeader, __WEBPACK_IMPORTED_MODULE_12__style_css___default.a.header)
}, void 0, _ref, /*#__PURE__*/_jsx("button", {
onClick: function onClick() {
return _this.modal.close();
},
className: __WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Buttons_index_css___default.a.inlineButton,
"data-qa-label": "successModalCloseButton"
}, void 0, _ref2)), /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_12__style_css___default.a.modalBody
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_8__tvg_ui_bootstrap_components_Notifications__["a" /* default */], {
type: "success",
title: "DEPOSIT SUCCESSFUL!",
message: this.props.message,
show: true,
icon: true
}), /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_12__style_css___default.a.reviewContainer
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_11__Common_Review__["a" /* default */], {
title: false,
depositAmount: this.props.depositAmount,
fee: this.props.fee,
feeFull: this.props.feeFull,
feeRefund: this.props.feeRefund,
transferAmount: this.props.transferAmount,
transactionNumber: this.props.transactionNumber,
balance: this.props.balance,
qaLabel: "successModal"
}), /*#__PURE__*/_jsx("section", {
className: __WEBPACK_IMPORTED_MODULE_4_classnames___default()((_classnames = {}, _defineProperty(_classnames, __WEBPACK_IMPORTED_MODULE_12__style_css___default.a.oneBtn, !desktopView), _defineProperty(_classnames, __WEBPACK_IMPORTED_MODULE_12__style_css___default.a.iosView, iosProduct), _classnames))
}, void 0, !isWrapped && /*#__PURE__*/_jsx("a", {
href: "/races",
className: __WEBPACK_IMPORTED_MODULE_4_classnames___default()([__WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Buttons_index_css___default.a.tvgBtnSecondary, __WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Buttons_index_css___default.a.big, __WEBPACK_IMPORTED_MODULE_12__style_css___default.a.buttons]),
onClick: this.props.onClick("See Full Schedule", "/races"),
"data-qa-label": "seeFullSchedule"
}, void 0, "See Full Schedule"), !isWrapped && desktopView && /*#__PURE__*/_jsx("a", {
href: "/nextrace",
className: __WEBPACK_IMPORTED_MODULE_4_classnames___default()([__WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Buttons_index_css___default.a.tvgBtnSecondary, __WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Buttons_index_css___default.a.big, __WEBPACK_IMPORTED_MODULE_12__style_css___default.a.buttons]),
onClick: this.props.onClick("Go To Next Race", "/nextrace"),
"data-qa-label": "goToNextRace"
}, void 0, "Go to next race"), isWrapped && /*#__PURE__*/_jsx("button", {
onClick: function onClick(event) {
if (event) {
event.preventDefault();
event.stopPropagation();
}
_this.props.onClose();
_this.props.onModalClose();
},
className: __WEBPACK_IMPORTED_MODULE_4_classnames___default()([__WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Buttons_index_css___default.a.tvgBtnSecondary, __WEBPACK_IMPORTED_MODULE_9__tvg_ui_bootstrap_components_Buttons_index_css___default.a.big, __WEBPACK_IMPORTED_MODULE_12__style_css___default.a.buttons]),
"data-qa-label": "closeWrappedDeposit",
style: {
margin: "0 auto"
}
}, void 0, "Close")))));
}
}]);
return SuccessModal;
}(__WEBPACK_IMPORTED_MODULE_2_react__["PureComponent"]);
_defineProperty(SuccessModal, "defaultProps", {
onClose: __WEBPACK_IMPORTED_MODULE_1_lodash_noop___default.a,
onModalClose: __WEBPACK_IMPORTED_MODULE_1_lodash_noop___default.a,
onClick: __WEBPACK_IMPORTED_MODULE_1_lodash_noop___default.a
});
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
return {
dispatch: dispatch,
onClick: function onClick(fieldName, href) {
return function () {
return dispatch({
type: "NAVIGATE_TO",
data: {
fieldName: fieldName,
href: href
}
});
};
},
onModalClose: function onModalClose() {
return dispatch({
type: "HIDE_DEPOSIT_SUCCESS_MODAL"
});
}
};
};
/* harmony default export */ __webpack_exports__["a"] = (Object(__WEBPACK_IMPORTED_MODULE_3_react_redux__["b" /* connect */])(null, mapDispatchToProps)(SuccessModal)); // eslint-disable-line
/***/ }),
/***/ 478:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","header":"header","successModal":"successModal","modalBody":"modalBody","error":"error","buttons":"buttons","oneBtn":"oneBtn","iosView":"iosView","reviewContainer":"reviewContainer"};
/***/ }),
/***/ 479:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_classnames__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_classnames__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__tvg_ui_bootstrap_components_Buttons__ = __webpack_require__(17);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Modal__ = __webpack_require__(480);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__CardBrand__ = __webpack_require__(482);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__style_css__ = __webpack_require__(484);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5__style_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__CardBody__ = __webpack_require__(485);
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var renderButton = function renderButton(props, onOpenModal) {
var text = "";
var buttonProps = {
onClick: function onClick() {},
qaLabel: "",
type: "tertiary"
};
if (props.showCardDeclinedModal && props.isOnlyDeclinedCard) {
text = "+ Add card";
buttonProps = _objectSpread(_objectSpread({}, buttonProps), {}, {
onClick: function onClick() {
props.onAddNewCard();
},
qaLabel: "defaultCardAdd"
});
} else if (props.cards.length > 1) {
text = "Change";
buttonProps = _objectSpread(_objectSpread({}, buttonProps), {}, {
onClick: function onClick() {
if (onOpenModal) {
onOpenModal();
}
props.onOpen();
},
qaLabel: "defaultCardChange"
});
}
return text && /*#__PURE__*/__WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2__tvg_ui_bootstrap_components_Buttons__["a" /* default */], buttonProps, text);
};
var Card = function Card(props) {
var cardModal;
var handleOpenModal = function handleOpenModal() {
cardModal.open();
};
var modalCards = function modalCards(cards) {
return cards && cards.filter(function (card) {
return card.id !== props.defaultCard.id;
}).map(function (card, idx) {
var isDisabled = props.declinedCardList.includes(card.type);
var wrapperStyles = [__WEBPACK_IMPORTED_MODULE_5__style_css___default.a.card, "js-stored-card"];
if (props.showCardDeclinedModal && isDisabled) {
wrapperStyles.push(__WEBPACK_IMPORTED_MODULE_5__style_css___default.a.cardDisabled);
}
return /*#__PURE__*/_jsx("div", {
role: "button",
tabIndex: idx,
className: __WEBPACK_IMPORTED_MODULE_1_classnames___default.a.apply(void 0, wrapperStyles),
"data-key": "selectCard",
"data-id": card.id,
onClick: function onClick() {
if (!props.showCardDeclinedModal || !isDisabled) {
cardModal.close();
props.onSelect(card);
}
},
"data-qa-label": "changeCardButton".concat(idx + 1)
}, card.id.toString(), /*#__PURE__*/_jsx("section", {}, void 0, card.expired && /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_5__style_css___default.a.expired
}, void 0, "Expired"), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_4__CardBrand__["a" /* default */], {
type: card.type,
qaLabel: "changeCardButtonIcon",
disabled: props.showCardDeclinedModal && isDisabled
}), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_6__CardBody__["a" /* default */], {
number: card.number,
type: card.type,
qaLabel: "changeCard",
select: true,
disabled: props.showCardDeclinedModal && isDisabled,
declineCardText: props.declineCardText
})));
});
};
return /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_1_classnames___default()(props.className, __WEBPACK_IMPORTED_MODULE_5__style_css___default.a.card),
"data-qa-label": props.qaLabel.concat("Area")
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_3__Modal__["a" /* default */], {
reference: function reference(c) {
cardModal = c;
},
onClose: function onClose() {
return cardModal.close();
},
id: "cardModal",
qaLabel: "changeCard"
}, void 0, modalCards(props.cards)), /*#__PURE__*/_jsx("section", {}, void 0, props.expired && /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_5__style_css___default.a.expired
}, void 0, "Expired"), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_4__CardBrand__["a" /* default */], {
type: props.type,
qaLabel: props.qaLabel.concat("Image")
}), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_6__CardBody__["a" /* default */], {
number: props.number,
type: props.type,
change: props.change,
select: props.select,
qaLabel: "defaultCard"
}), props.change && props.cards && renderButton(props, handleOpenModal)));
};
Card.defaultProps = {
cards: [],
number: 0,
type: "UNKNOWN",
balance: 0,
select: false,
change: false,
className: "",
onSelect: function onSelect() {},
onOpen: function onOpen() {},
qaLabel: "",
onAddNewCard: function onAddNewCard() {},
isOnlyDeclinedCard: false,
declineCardText: "VISA no longer accepted",
declinedCardList: [],
showCardDeclinedModal: false
};
/* harmony default export */ __webpack_exports__["a"] = (Card);
/***/ }),
/***/ 480:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_classnames__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_classnames__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__tvg_ui_bootstrap_components_Modal__ = __webpack_require__(47);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__tvg_ui_bootstrap_components_Modal_example_css__ = __webpack_require__(30);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__tvg_ui_bootstrap_components_Modal_example_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__tvg_ui_bootstrap_components_Modal_example_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Buttons_index_css__ = __webpack_require__(26);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Buttons_index_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Buttons_index_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__tvg_ui_bootstrap_assets_svg_close_svg__ = __webpack_require__(27);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__tvg_ui_bootstrap_assets_svg_close_svg___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5__tvg_ui_bootstrap_assets_svg_close_svg__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__style_css__ = __webpack_require__(481);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6__style_css__);
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
var _ref = /*#__PURE__*/_jsx("span", {
"data-qa-label": "modalHeaderTitle"
}, void 0, "Change Card");
var _ref2 = /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_5__tvg_ui_bootstrap_assets_svg_close_svg___default.a, {
width: "16px",
height: "16px",
fill: "#fff"
});
// @SEE https://github.com/facebook/flow/issues/1964
// $FlowBug
var CardModal = function CardModal(props) {
return /*#__PURE__*/__WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2__tvg_ui_bootstrap_components_Modal__["a" /* default */], {
ref: props.reference,
type: "scrollContent",
modalIdentifier: props.id,
modalParent: "#funds",
bodyClass: __WEBPACK_IMPORTED_MODULE_3__tvg_ui_bootstrap_components_Modal_example_css___default.a.modal,
classnames: __WEBPACK_IMPORTED_MODULE_1_classnames___default()(__WEBPACK_IMPORTED_MODULE_6__style_css___default.a.changeCardModal, __WEBPACK_IMPORTED_MODULE_6__style_css___default.a.scroll),
qaLabel: props.qaLabel
}, /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_1_classnames___default()(__WEBPACK_IMPORTED_MODULE_3__tvg_ui_bootstrap_components_Modal_example_css___default.a.modalHeader, __WEBPACK_IMPORTED_MODULE_6__style_css___default.a.header)
}, void 0, _ref, /*#__PURE__*/_jsx("button", {
onClick: props.onClose,
className: __WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Buttons_index_css___default.a.inlineButton,
"data-qa-label": "modalHeaderCloseButton"
}, void 0, _ref2)), /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_1_classnames___default()(__WEBPACK_IMPORTED_MODULE_3__tvg_ui_bootstrap_components_Modal_example_css___default.a.modalBody, __WEBPACK_IMPORTED_MODULE_6__style_css___default.a.cardsModal, __WEBPACK_IMPORTED_MODULE_6__style_css___default.a.modalBody),
"data-qa-label": "modalBody"
}, void 0, props.children));
};
CardModal.defaultProps = {
qaLabel: ""
};
/* harmony default export */ __webpack_exports__["a"] = (CardModal);
/***/ }),
/***/ 481:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","cards-modal":"cards-modal","cardsModal":"cards-modal","changeCardModal":"changeCardModal","scroll":"scroll","modalBody":"modalBody","header":"header"};
/***/ }),
/***/ 482:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_classnames__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_classnames__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Common_Brand__ = __webpack_require__(156);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__style_css__ = __webpack_require__(483);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__style_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__Common_WarningText__ = __webpack_require__(34);
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
var _ref = /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_4__Common_WarningText__["a" /* WarningIcon */], {
qaLabel: "brand-icon"
});
var CardBrand = function CardBrand(props) {
var wrapperStyles = [__WEBPACK_IMPORTED_MODULE_3__style_css___default.a.cardBrandWrapper];
if (props.disabled) {
wrapperStyles.push(__WEBPACK_IMPORTED_MODULE_3__style_css___default.a.cardBrandDisabled);
}
return /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_1_classnames___default.a.apply(void 0, wrapperStyles)
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_2__Common_Brand__["a" /* default */], {
brand: props.type,
className: __WEBPACK_IMPORTED_MODULE_3__style_css___default.a.cardIcon,
qaLabel: props.qaLabel,
dimensions: props.dimensions
}), props.disabled && /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_3__style_css___default.a.warningIconBrand
}, void 0, _ref));
};
CardBrand.defaultProps = {
type: "UNKNOWN",
dimensions: {
width: "48px",
height: "30px"
},
qaLabel: "",
disabled: false
};
/* harmony default export */ __webpack_exports__["a"] = (CardBrand);
/***/ }),
/***/ 483:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","card-brand-wrapper":"card-brand-wrapper","cardBrandWrapper":"card-brand-wrapper","card-icon":"card-icon","cardIcon":"card-icon","warning-icon-brand":"warning-icon-brand","warningIconBrand":"warning-icon-brand","card-brand-disabled":"card-brand-disabled","cardBrandDisabled":"card-brand-disabled"};
/***/ }),
/***/ 484:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","card":"card","expired":"expired","card-disabled":"card-disabled","cardDisabled":"card-disabled"};
/***/ }),
/***/ 485:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_classnames__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_classnames__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__style_css__ = __webpack_require__(486);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__style_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Common_WarningText__ = __webpack_require__(34);
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
var CardBody = function CardBody(props) {
var wrapperClassNames = [__WEBPACK_IMPORTED_MODULE_2__style_css___default.a.wrapper];
if (props.disabled) {
wrapperClassNames.push(__WEBPACK_IMPORTED_MODULE_2__style_css___default.a.cardBodyDisabled);
}
return /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_2__style_css___default.a.cardBodyWrapper
}, void 0, props.change && /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_1_classnames___default.a.apply(void 0, wrapperClassNames)
}, void 0, /*#__PURE__*/_jsx("strong", {
className: __WEBPACK_IMPORTED_MODULE_2__style_css___default.a.defaultPayment,
"data-qa-label": props.qaLabel.concat("Title")
}, void 0, "Default Payment"), /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_2__style_css___default.a.bottomWrapper
}, void 0, /*#__PURE__*/_jsx("strong", {
className: __WEBPACK_IMPORTED_MODULE_2__style_css___default.a.cardType,
"data-qa-label": props.qaLabel.concat("Type")
}, void 0, props.type), /*#__PURE__*/_jsx("span", {
"data-qa-label": props.qaLabel.concat("Number")
}, void 0, props.number))), props.select && [/*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_1_classnames___default.a.apply(void 0, wrapperClassNames)
}, void 0, /*#__PURE__*/_jsx("strong", {
className: __WEBPACK_IMPORTED_MODULE_2__style_css___default.a.defaultPayment,
"data-qa-label": props.qaLabel.concat("Type")
}, void 0, props.type), /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_2__style_css___default.a.bottomWrapper
}, void 0, /*#__PURE__*/_jsx("span", {
"data-qa-label": props.qaLabel.concat("Number")
}, void 0, props.number))), props.disabled && /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_3__Common_WarningText__["b" /* default */], {
showIcon: false
}, void 0, props.declineCardText)]);
};
/* harmony default export */ __webpack_exports__["a"] = (CardBody);
CardBody.defaultProps = {
change: false,
select: false,
qaLabel: "",
disabled: false,
declineCardText: "VISA no longer accepted"
};
/***/ }),
/***/ 486:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","cardName":"cardName","cardType":"cardType","card-body-wrapper":"card-body-wrapper","cardBodyWrapper":"card-body-wrapper","card-body-disabled":"card-body-disabled","cardBodyDisabled":"card-body-disabled"};
/***/ }),
/***/ 487:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AddCardModal; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_bindAll__ = __webpack_require__(29);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_bindAll___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_bindAll__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_classnames__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_classnames__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__tvg_ui_bootstrap_components_Buttons__ = __webpack_require__(17);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Loading__ = __webpack_require__(101);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__tvg_ui_bootstrap_assets_svg_lock_svg__ = __webpack_require__(71);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__tvg_ui_bootstrap_assets_svg_lock_svg___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5__tvg_ui_bootstrap_assets_svg_lock_svg__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__tvg_ui_bootstrap_components_Modal_example_css__ = __webpack_require__(30);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__tvg_ui_bootstrap_components_Modal_example_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6__tvg_ui_bootstrap_components_Modal_example_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__Common_CreditCard__ = __webpack_require__(136);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__Common_Titles__ = __webpack_require__(33);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__Common_CreditCard_utils__ = __webpack_require__(161);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__style_css__ = __webpack_require__(162);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10__style_css__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__Common_WarningText__ = __webpack_require__(34);
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
var _ref = /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_8__Common_Titles__["a" /* default */], {
qaLabel: "cardDetailsLabel"
}, void 0, "Card Details");
var _ref2 = /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_5__tvg_ui_bootstrap_assets_svg_lock_svg___default.a, {
fill: "#fff",
width: "16px",
height: "16px"
});
var _ref3 = /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_4__tvg_ui_bootstrap_components_Loading__["a" /* default */], {
size: "small"
});
var AddCardModal = /*#__PURE__*/function (_Component) {
_inherits(AddCardModal, _Component);
var _super = _createSuper(AddCardModal);
function AddCardModal(props) {
var _this;
_classCallCheck(this, AddCardModal);
_this = _super.call(this, props);
_this.state = {
card: null,
disabledCardButton: true
};
__WEBPACK_IMPORTED_MODULE_0_lodash_bindAll___default()(_assertThisInitialized(_this), ["handleCreditCardChange", "isDisabledCardButton"]);
return _this;
}
_createClass(AddCardModal, [{
key: "handleCreditCardChange",
value: function handleCreditCardChange(card) {
this.setState({
card: card
}, this.isDisabledCardButton);
}
}, {
key: "isDisabledCardButton",
value: function isDisabledCardButton() {
var disabledCardButton = !Object(__WEBPACK_IMPORTED_MODULE_9__Common_CreditCard_utils__["a" /* validCard */])(this.state.card) || this.props.declinedCardList.includes(this.state.card.cardType);
this.setState({
disabledCardButton: disabledCardButton
});
}
}, {
key: "render",
value: function render() {
var _this2 = this;
return /*#__PURE__*/_jsx("div", {}, void 0, this.props.showCardDeclinedModal && /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_10__style_css___default.a.warningAddCardBox
}, void 0, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_11__Common_WarningText__["b" /* default */], {
mode: "light"
}, void 0, this.props.declineCardText)), /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_2_classnames___default()(__WEBPACK_IMPORTED_MODULE_6__tvg_ui_bootstrap_components_Modal_example_css___default.a.modalBody, __WEBPACK_IMPORTED_MODULE_10__style_css___default.a.addCardBody),
"data-qa-label": "modalBody"
}, void 0, _ref, /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_7__Common_CreditCard__["a" /* default */], {
onBlur: this.handleCreditCardChange,
onChange: this.handleCreditCardChange,
onCardNumberFill: this.props.onCardNumberFill,
onCardNumberError: this.props.onCardNumberError,
onExpirationMonthFill: this.props.onExpirationMonthFill,
onExpirationMonthError: this.props.onExpirationMonthError,
onExpirationYearFill: this.props.onExpirationYearFill,
onExpirationYearError: this.props.onExpirationYearError,
onSecurityNumberFill: this.props.onSecurityNumberFill,
onSecurityNumberError: this.props.onSecurityNumberError,
onSecurityTooltipShow: this.props.onSecurityTooltipShow,
qaLabel: "enrolled",
initialCardNumber: this.props.initialCardNumber,
hadCardFromRedirect: this.props.hadCardFromRedirect,
initialExpirationYear: this.props.initialExpirationYear,
initialExpirationMonth: this.props.initialExpirationMonth
}), /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_3__tvg_ui_bootstrap_components_Buttons__["a" /* default */], {
size: "big",
type: "legacy",
className: __WEBPACK_IMPORTED_MODULE_10__style_css___default.a.addCardButton,
onClick: function onClick() {
return _this2.props.onSubmit(_this2.state.card);
},
disabled: this.state.disabledCardButton,
icon: true,
qaLabel: "addCardModal"
}, void 0, _ref2, "Add Card", this.props.addNewCard.isFetching && _ref3)));
}
}]);
return AddCardModal;
}(__WEBPACK_IMPORTED_MODULE_1_react__["Component"]);
/* unused harmony default export */ var _unused_webpack_default_export = (AddCardModal);
/***/ }),
/***/ 488:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","label":"label","label-container":"label-container","labelContainer":"label-container","container":"container","loading":"loading","loadingBig":"loadingBig"};
/***/ }),
/***/ 489:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_redux__ = __webpack_require__(21);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_redux_thunk__ = __webpack_require__(490);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_redux_thunk___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_redux_thunk__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Pages_reducers__ = __webpack_require__(491);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__middleware_analytics__ = __webpack_require__(495);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__middleware_qubit__ = __webpack_require__(496);
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var composeEnhancers = __WEBPACK_IMPORTED_MODULE_0_redux__["d" /* compose */];
var middlewares = function middlewares() {
return [__WEBPACK_IMPORTED_MODULE_1_redux_thunk___default.a, Object(__WEBPACK_IMPORTED_MODULE_3__middleware_analytics__["a" /* default */])({
event: 'deposit',
gaEventCategory: 'Deposit',
microApp: 'Deposit'
}), __WEBPACK_IMPORTED_MODULE_4__middleware_qubit__["a" /* default */]];
};
/* eslint-disable */
composeEnhancers = (typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({}) : __WEBPACK_IMPORTED_MODULE_0_redux__["d" /* compose */];
/* eslint-enable */
/* harmony default export */ __webpack_exports__["a"] = (function () {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : __WEBPACK_IMPORTED_MODULE_2__Pages_reducers__["b" /* initialState */];
var store = Object(__WEBPACK_IMPORTED_MODULE_0_redux__["e" /* createStore */])(__WEBPACK_IMPORTED_MODULE_2__Pages_reducers__["a" /* default */], state, composeEnhancers(__WEBPACK_IMPORTED_MODULE_0_redux__["a" /* applyMiddleware */].apply(void 0, _toConsumableArray(middlewares()))));
if (false) {
module.hot.accept('./Pages/reducers', function () {
return System.import('./Pages/reducers').then(function (reducerModule) {
return store.replaceReducer(reducerModule.default);
});
});
}
return store;
});
/***/ }),
/***/ 491:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return initialState; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_get__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_redux__ = __webpack_require__(21);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Deposits_reducers__ = __webpack_require__(492);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__data_messages_json__ = __webpack_require__(494);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__data_messages_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__data_messages_json__);
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var initialState = {
isFetchingCAPI: true,
isFetchingFeatures: true,
isFetchingUserAccountDetails: true,
capi: __WEBPACK_IMPORTED_MODULE_3__data_messages_json___default.a,
features: [],
deposits: __WEBPACK_IMPORTED_MODULE_2__Deposits_reducers__["b" /* initialState */],
isAuthenticated: {
isFetching: false,
success: false,
error: null
},
hasMadeInitialDeposit: false,
userAccountDetails: {}
};
var isFetchingCAPI = function isFetchingCAPI() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.isFetchingCAPI;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "FETCH_CAPI_REQUEST":
return true;
case "FETCH_CAPI_SUCCESS":
case "FETCH_CAPI_FAILURE":
return false;
default:
return state;
}
};
var isFetchingFeatures = function isFetchingFeatures() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.isFetchingFeatures;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "FETCH_FEATURES_REQUEST":
return true;
case "FETCH_FEATURES_SUCCESS":
case "FETCH_FEATURES_FAILURE":
return false;
default:
return state;
}
};
var capi = function capi() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.capi;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "FETCH_CAPI_SUCCESS":
return _objectSpread(_objectSpread({}, state), action.data);
default:
return state;
}
};
var features = function features() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.features;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "FETCH_FEATURES_SUCCESS":
{
var featureToggles = [];
action.data.featureToggles.map(function (feature) {
var random = Math.floor(Math.random() * 100 + 1); // random number between 1 and 100
var throttle = feature.percentage;
var returnValue = false;
if (feature.enabled && (random <= throttle || throttle === "100%")) {
returnValue = true;
}
featureToggles[feature.name] = returnValue;
return returnValue;
});
return _objectSpread(_objectSpread({}, state), featureToggles);
}
default:
return state;
}
};
var isAuthenticated = function isAuthenticated() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.isAuthenticated;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "FETCH_USER_AUTHENTICATION":
return _objectSpread(_objectSpread({}, state), {}, {
isFetching: true,
success: false,
error: null
});
case "LEGACY_WRAPPER_DATA":
return _objectSpread(_objectSpread({}, state), {}, {
isFetching: false,
success: !!action.data.isAuthenticated,
error: null
});
case "FETCH_USER_AUTHENTICATION_SUCCESS":
return {
isFetching: false,
success: true,
error: null
};
case "FETCH_USER_AUTHENTICATION_FAILURE":
return {
isFetching: false,
success: false,
error: action.error
};
default:
return state;
}
};
var userAccountDetails = function userAccountDetails() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.userAccountDetails;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "LEGACY_WRAPPER_DATA":
case "FETCH_TVG_USER_ACCOUNT_DETAILS_SUCCESS":
return _objectSpread(_objectSpread({}, state), action.data);
default:
return state;
}
};
var isFetchingUserAccountDetails = function isFetchingUserAccountDetails() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.isFetchingUserAccountDetails;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "FETCH_TVG_USER_ACCOUNT_DETAILS":
return true;
case "FETCH_TVG_USER_ACCOUNT_DETAILS_SUCCESS":
case "FETCH_TVG_USER_ACCOUNT_DETAILS_FAILURE":
return false;
default:
return state;
}
};
var hasMadeInitialDeposit = function hasMadeInitialDeposit() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.hasMadeInitialDeposit;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "TRANSFER_FUNDS_TO_TVG_SUCCESS":
return true;
case "FUND_AND_TRANSFER_REQUEST_SUCCESS":
return true;
case "FETCH_TVG_USER_ACCOUNT_DETAILS_SUCCESS":
return action.data.hasMadeInitialDeposit || state;
case "FETCH_SIGHTLINE_USER_SUCCESS":
return __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(action, "data.cards.length", 0) > 0 || state;
default:
return state;
}
};
/* harmony default export */ __webpack_exports__["a"] = (Object(__WEBPACK_IMPORTED_MODULE_1_redux__["c" /* combineReducers */])({
isFetchingCAPI: isFetchingCAPI,
isFetchingFeatures: isFetchingFeatures,
isFetchingUserAccountDetails: isFetchingUserAccountDetails,
capi: capi,
features: features,
deposits: __WEBPACK_IMPORTED_MODULE_2__Deposits_reducers__["a" /* default */],
isAuthenticated: isAuthenticated,
hasMadeInitialDeposit: hasMadeInitialDeposit,
userAccountDetails: userAccountDetails
}));
/***/ }),
/***/ 492:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return initialState; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_redux__ = __webpack_require__(21);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Sightline_Deposit_reducers__ = __webpack_require__(493);
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var initialState = {
showRedirectMessage: false,
wrapperDepositInfo: null,
sightline: __WEBPACK_IMPORTED_MODULE_1__Sightline_Deposit_reducers__["b" /* initialState */],
alreadyProcessedRedirect: false
};
var showRedirectMessage = function showRedirectMessage() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.showRedirectMessage;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "LEGACY_WRAPPER_DATA":
return !!action.data.showRedirectMessage;
default:
return state;
}
};
var wrapperDepositInfo = function wrapperDepositInfo() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.wrapperDepositInfo;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "LEGACY_WRAPPER_DATA":
return _objectSpread(_objectSpread({}, state), action.data.depositInfo);
case "ADD_NEW_CARD_REQUEST":
case "FUND_SIGHTLINE_REQUEST":
case "ENROLL_USER_REQUEST":
return null;
default:
return state;
}
};
var alreadyProcessedRedirect = function alreadyProcessedRedirect() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.alreadyProcessedRedirect;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "PROCESS_REDIRECT":
return true;
case "USER_SELECTED_DEPOSIT_AMOUNT":
return true;
case "USER_FILLED_DEPOSIT_AMOUNT":
return true;
case "USER_FILLED_TRANSFER_AMOUNT":
return true;
case "REPROCESS_REDIRECT":
return false;
case "TRANSFER_FUNDS_TO_TVG_REQUEST":
return true;
default:
return state;
}
};
/* harmony default export */ __webpack_exports__["a"] = (Object(__WEBPACK_IMPORTED_MODULE_0_redux__["c" /* combineReducers */])({
sightline: __WEBPACK_IMPORTED_MODULE_1__Sightline_Deposit_reducers__["a" /* default */],
showRedirectMessage: showRedirectMessage,
wrapperDepositInfo: wrapperDepositInfo,
alreadyProcessedRedirect: alreadyProcessedRedirect
}));
/***/ }),
/***/ 493:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return initialState; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_get__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_redux__ = __webpack_require__(21);
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var initialState = {
isFetching: false,
isProcessingRedirect: false,
sightlineUserAccount: {
isFetching: false,
success: false,
error: null,
enrolled: false,
balance: 0,
depositFee: 0,
defaultCard: null
},
cards: {
cardList: [],
defaultCard: null
},
addNewCard: {
isFetching: false,
success: false,
error: null
},
enrollUser: {
isFetching: false,
success: false,
error: null
},
transferToTVG: {
isFetching: false,
success: false,
error: null,
completed: false,
depositFee: null,
depositAmount: null,
paymentProcessorTransactionId: null
},
fundSightline: {
isFetching: false,
success: false,
error: null,
fundedAmount: null,
depositFee: null
},
addCardModalVisible: false,
addFundsSectionVisible: false,
depositAmountPreSelected: false,
transferAmount: null,
invalidCardModal: {
isOpen: false
}
};
var isFetching = function isFetching(state, action) {
switch (action.type) {
case "FETCH_SIGHTLINE_USER_REQUEST":
case "TRANSFER_FUNDS_TO_TVG_REQUEST":
case "ENROLL_USER_REQUEST":
case "CREATE_CARD_AND_FUND_SIGHTLINE_REQUEST":
case "FUND_SIGHTLINE_REQUEST":
return true;
default:
return false;
}
};
var isProcessingRedirect = function isProcessingRedirect() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.isProcessingRedirect;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "PROCESSING_REDIRECT":
return true;
case "REDIRECT_PROCESSED":
case "DEPOSIT_POLLER_DONE":
return false;
default:
return state;
}
};
var getDefaultCardId = function getDefaultCardId(cards) {
return cards && __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(cards.filter(function (card) {
return card.default;
}).pop(), "id", null);
};
var cards = function cards() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.cards;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "FETCH_SIGHTLINE_CARDS_SUCCESS":
return _objectSpread(_objectSpread({}, state), {}, {
cardList: action.data.cards,
defaultCard: getDefaultCardId(action.data.cards)
});
case "CHANGE_DEFAULT_CARD":
return _objectSpread(_objectSpread({}, state), {}, {
defaultCard: action.data
});
default:
return state;
}
};
var sightlineUserAccount = function sightlineUserAccount() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.sightlineUserAccount;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "FETCH_SIGHTLINE_USER_REQUEST":
return _objectSpread(_objectSpread({}, state), {}, {
isFetching: true,
isFetchingUserAccountDetails: true,
success: false,
error: null
});
case "FETCH_SIGHTLINE_USER_SUCCESS":
return _objectSpread(_objectSpread(_objectSpread({}, state), action.data), {}, {
isFetching: false,
isFetchingUserAccountDetails: false,
success: true,
error: null
});
case "FETCH_SIGHTLINE_USER_FAILURE":
return _objectSpread(_objectSpread({}, state), {}, {
isFetching: false,
success: false,
isFetchingUserAccountDetails: false,
error: action.error
});
case "ENROLL_USER_SUCCESS":
return _objectSpread(_objectSpread({}, state), {}, {
enrolled: true
});
case "ADD_NEW_CARD_SUCCESS":
return _objectSpread(_objectSpread({}, state), {}, {
notification: {
type: "success"
}
});
case "DEPOSIT_POLLER_DONE":
return _objectSpread(_objectSpread({}, state), {}, {
notification: {
notifType: action.data.notifType
},
disableAuthorize: action.data.shouldBlock || false
});
case "CHANGE_DEFAULT_CARD":
return _objectSpread(_objectSpread({}, state), {}, {
defaultCard: action.data
});
case "CREATE_CARD_AND_FUND_SIGHTLINE_SUCCESS":
case "FUND_SIGHTLINE_REQUEST_SUCCESS":
return _objectSpread(_objectSpread({}, state), {}, {
balance: action.data.balance
});
case "UPDATE_BALANCE_ON_DEPOSIT":
return _objectSpread(_objectSpread({}, state), {}, {
balance: action.data.sightlineBalance
});
case "TRANSFER_FUNDS_TO_TVG_SUCCESS":
return _objectSpread(_objectSpread({}, state), {}, {
balance: action.data.sightlineBalance ? parseFloat(action.data.sightlineBalance) : parseFloat(action.data.balance),
disableAuthorize: false
});
default:
return state;
}
};
var transferToTVG = function transferToTVG() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.transferToTVG;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "TRANSFER_FUNDS_TO_TVG_REQUEST":
return _objectSpread(_objectSpread({}, state), {}, {
isFetching: true,
success: false,
error: null
});
case "TRANSFER_FUNDS_TO_TVG_RESET":
return initialState.transferToTVG;
case "TRANSFER_FUNDS_TO_TVG_SUCCESS":
return {
isFetching: false,
success: true,
error: null,
completed: action.data.completed || true,
depositFee: action.data.depositFee,
feeAmount: action.data.feeAmount,
feeRefundAmount: action.data.feeRefundAmount,
depositAmount: action.data.amount || action.data.depositAmount,
paymentProcessorTransactionId: action.data.transactionUUID ? action.data.transactionUUID : action.data.paymentProcessorTransactionId
};
case "TRANSFER_FUNDS_TO_TVG_FAILURE":
return _objectSpread(_objectSpread({}, state), {}, {
isFetching: false,
success: false,
error: action
});
case "DEPOSIT_POLLER_DONE":
return _objectSpread(_objectSpread({}, state), {}, {
error: !action.data.success ? {
error: {
code: action.data.error,
message: action.data.message
},
type: action.data.type,
notifType: action.data.notifType
} : null,
success: action.data.success
});
default:
return state;
}
};
var addNewCard = function addNewCard() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.addNewCard;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
// Erase our previous operation feedback
case "ADD_NEW_CARD_REQUEST":
return _objectSpread(_objectSpread({}, state), {}, {
isFetching: true,
success: false,
error: null
});
case "ADD_NEW_CARD_RESET":
return _objectSpread(_objectSpread({}, state), {}, {
isFetching: false,
success: false,
error: null
});
case "ADD_NEW_CARD_SUCCESS":
return _objectSpread(_objectSpread({}, state), {}, {
isFetching: false,
success: "slpCardAddedWithSuccess",
error: null
});
case "ADD_NEW_CARD_FAILURE":
return _objectSpread(_objectSpread({}, state), {}, {
isFetching: false,
success: false,
error: action
});
default:
return state;
}
};
var enrollUser = function enrollUser() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.enrollUser;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "ENROLL_USER_REQUEST":
return {
isFetching: true,
success: false,
error: null
};
case "ENROLL_USER_SUCCESS":
return {
isFetching: false,
success: true,
error: null
};
case "ENROLL_USER_FAILURE":
return {
isFetching: false,
success: false,
error: action
};
case "ENROLL_USER_RESET_STATE":
return {
isFetching: false,
success: false,
error: null
};
default:
return state;
}
};
var fundSightline = function fundSightline() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.fundSightline;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "CREATE_CARD_AND_FUND_SIGHTLINE_REQUEST":
case "FUND_SIGHTLINE_REQUEST":
return _objectSpread(_objectSpread({}, state), {}, {
isFetching: true,
success: false,
error: null
});
case "CREATE_CARD_AND_FUND_SIGHTLINE_RESET":
case "FUND_SIGHTLINE_REQUEST_RESET":
return initialState.fundSightline;
case "CREATE_CARD_AND_FUND_SIGHTLINE_SUCCESS":
case "FUND_SIGHTLINE_REQUEST_SUCCESS":
return _objectSpread(_objectSpread({}, state), {}, {
isFetching: false,
success: true,
error: null
}, action.data);
case "CREATE_CARD_AND_FUND_SIGHTLINE_FAILURE":
case "FUND_SIGHTLINE_REQUEST_FAILURE":
return _objectSpread(_objectSpread({}, state), {}, {
isFetching: false,
success: false,
error: action
});
default:
return state;
}
};
var addCardModalVisible = function addCardModalVisible() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.addCardModalVisible;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "OPEN_ADD_CARD_MODAL":
return true;
case "HIDE_ADD_CARD_MODAL":
return false;
default:
return state;
}
};
var addFundsSectionVisible = function addFundsSectionVisible() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.addFundsSectionVisible;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "OPEN_ADD_FUNDS_SECTION":
return true;
case "HIDE_ADD_FUNDS_SECTION":
return false;
case "FETCH_SIGHTLINE_CARDS_SUCCESS":
if (action.data.addFundsSectionVisible || state) {
return true;
}
return __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(action, "data.cards.length", 0) === 0;
case "FETCH_SIGHTLINE_USER_SUCCESS":
return parseFloat(action.data.balance) === 0;
case "TRANSFER_FUNDS_TO_TVG_SUCCESS":
return parseFloat(action.data.balance) === 0 || parseFloat(action.data.sightlineBalance) === 0;
default:
return state;
}
};
var depositAmountPreSelected = function depositAmountPreSelected() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.depositAmountPreSelected;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "USER_SELECTED_DEPOSIT_AMOUNT":
return true;
case "USER_FILLED_DEPOSIT_AMOUNT":
return ["50", "100", "300"].indexOf(action.data.value) > -1;
default:
return state;
}
};
var transferAmount = function transferAmount() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.transferAmount;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "CHANGE_TRANSFER_AMOUNT":
return action.data.amount;
default:
return state;
}
};
var invalidCardModal = function invalidCardModal() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState.invalidCardModal;
var action = arguments.length > 1 ? arguments[1] : undefined;
switch (action.type) {
case "OPEN_INVALID_CARD_MODAL":
return {
isOpen: true
};
case "CLEAR_INVALID_CARD_MODAL":
return initialState.invalidCardModal;
default:
return state;
}
};
/* harmony default export */ __webpack_exports__["a"] = (Object(__WEBPACK_IMPORTED_MODULE_1_redux__["c" /* combineReducers */])({
isFetching: isFetching,
cards: cards,
sightlineUserAccount: sightlineUserAccount,
transferToTVG: transferToTVG,
addNewCard: addNewCard,
enrollUser: enrollUser,
fundSightline: fundSightline,
addCardModalVisible: addCardModalVisible,
addFundsSectionVisible: addFundsSectionVisible,
depositAmountPreSelected: depositAmountPreSelected,
transferAmount: transferAmount,
isProcessingRedirect: isProcessingRedirect,
invalidCardModal: invalidCardModal
}));
/***/ }),
/***/ 494:
/***/ (function(module, exports) {
module.exports = {"slpAddingCardErrorMsg":"There has been a problem adding your card. If you think this is an error, please try to add your card again or a different card. Otherwise for assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpAssistanceMsg":"For assistance, please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpCardAddedWithSuccess":"Your card has been added. You can use it to fund your TVG Pre Paid Play+ card and transfer to your TVG Account.","slpCardDeclinedTryToAddAgain":"It seems your credit card was declined. If you think this is an error, please try to add your card again or a different card. Otherwise for assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpDeclinedCCErrorMsg":"There has been a problem with your card. If you think this is an error, please try to add your card again or a different card. Otherwise for assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpDepositLimitExceededErrorMsg":"Your deposit limit has been exceed. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpDepositTvgErrorMsg":"There was a problem depositing into your TVG account. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpDuplicatedCardErrorMsg":"This card appears to be already registered. Please try another card.","slpEnrollErrorMsg":"There was a problem during the TVG Pre Paid Play+ enrollment. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpEnrollWarning":"By selecting to enroll, the personal information previously provided on your TVG account will be sent to Sightline Payments to process the enrollment.","slpMarketingBanner":"","slpMarketingMsg":"","slpPaymentMethodErrorMsg":"This method of payment doesn't seem to be going through.","slpPrivacyTemplate":"","slpRedirectedMsg":"However, you can enrol into TVG Pre Paid Play+ below to deposit instantly to your account.","slpRedirectedTitle":"YOUR DEPOSIT WAS NOT SUCCESSFUL AS SOME BANKS DO NOT APPROVE TRANSACTIONS FROM GAMING SITES.","slpDiscoverRedirectedMsg":"Fill in the details below to continue and instantly deposit into your account.","slpDiscoverRedirectedTitle":"DISCOVER CARDS ARE ELIGIBLE TO DEPOSIT WHEN USED WITH OUR PRE-PAID CARD.","slpTransferMsg":"You can fund your TVG account with Pre Paid Play+ Card balance instantaneously. Customers are limited to $2,000 per day and $10,000 per month in funding their Pre Paid Play+ Card.","slpUnsuccessfulFundingErrorMsg":"There was a problem depositing into your TVG Pre Paid Play+ card. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","sightlineEnrollmentFailed":"There was a problem with your TVG Pre Paid Play+ enrollment. Please contact [email protected] or 702 - 851 - 4747 between 7:30AM and 9:30PM PST.","slpDepositSuccess":"You successfully deposited <strong>$XXX</strong> into your TVG account through your Pre Paid Play+ Card.","slpDepositSuccessFirstTime":"You successfully deposited <strong>$XXX</strong> into your TVG account through your new Pre Paid Play+ Card. Expect to receive your card in the mail shortly.","SLP_CARD_ALREADY_EXISTS":"There has been a problem adding your card. If you think this is an error, please try to add your card again or a different card. Otherwise for assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_CARD_DECLINED_BY_SLP":"There was a problem depositing into your TVG Pre Paid Play+ card. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_CARD_NOT_FOUND":"There was a problem depositing into your TVG Pre Paid Play+ card. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_CARD_NOT_SAVED":"There has been a problem adding your card. If you think this is an error, please try to add your card again or a different card. Otherwise for assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_DEPOSIT_TO_TVG_FAILED":"There was a problem depositing into your TVG account. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_ENROLL_USER_FAILURE":"There was a problem during the TVG Pre Paid Play+ enrollment. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_ENROLLMENT_REJECTED_BY_SLP":"There was a problem during the TVG Pre Paid Play+ enrollment. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_FAILED_REGISTER_TERMS_AGREED":"There was a problem during the TVG Pre Paid Play+ enrollment. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_FUNDING_LIMIT_EXCEEDED":"Your deposit limit has been exceeded. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_FUNDING_SIGHTLINE_FAILED":"There was a problem depositing into your TVG Pre Paid Play+ card. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_GENERIC_ERROR":"Please review the deposit details and try again. If problem persists, please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_GENERIC_SUCCESS":"Success!","SLP_NO_SIGHTLINE_ACCOUNT_FOUND":"There was a problem depositing into your TVG Pre Paid Play+ card. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_TERMS_NOT_ACCEPTED":"There was a problem during the TVG Pre Paid Play+ enrollment. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_WITHDRAW_DECLINED_BY_SLP":"It seems your credit card was declined. If you think this is an error, please try to deposit again. Otherwise for assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_WITHDRAW_FROM_SLP_FAILED":"An error occurred when trying to withdraw from Sightline.","SLP_ADD_NEW_CARD_SUCCESS":"Your card has been added. You can use it to fund your TVG Pre Paid Play+ card and transfer to your TVG Account.","SLP_FUND_SIGHTLINE_REQUEST_FAILURE":"There was a problem depositing into your TVG Pre Paid Play+ card. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpEnrolledMsg":"You are enrolled with Sightline","slpEnrolledText":"You can fund your FanDuel account with Pre Paid balance instantaneously. Customers are limited to $2,000 per day and $10,000 per month in funding their Pre Paid Play+ Card."}
/***/ }),
/***/ 495:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_get__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__tvg_conf__ = __webpack_require__(6);
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
// Helpers
var customerStatus = function customerStatus(state) {
return state.hasMadeInitialDeposit ? "Returning" : "First Time";
};
var preSelectedAmount = function preSelectedAmount(state) {
return state.deposits.sightline.depositAmountPreSelected ? "Yes" : "No";
};
var getDepositFee = function getDepositFee(state) {
return !state.deposits.sightline.sightlineUserAccount.depositFee ? state.deposits.sightline.sightlineUserAccount.depositFee : undefined;
};
var depositStart = function depositStart(action, state) {
var finalValue = "No";
if (action.type === "USER_SELECTED_DEPOSIT_AMOUNT") {
finalValue = "Yes";
} else if (["50", "100", "300"].indexOf(action.data.value) > -1) {
finalValue = "Yes";
}
return {
gaEventAction: "Deposit Start",
gaEventLabel: state.deposits.sightline.transferAmount ? state.deposits.sightline.transferAmount.toString() : undefined,
sightlineDeposit: parseInt(action.data.value, 10),
depositAmount: state.deposits.sightline.transferAmount || undefined,
amountOption: finalValue
};
}; // @FIXME the use of this flags is most likely a hack and they should be fixed
// They most likely can be replaced by a better store structure or by better
// organize our actions
var flags = {
isFundAndTransfer: false,
hasStarted: false,
depositToPPCValue: null // we do not have other amount in state so this is a hack
}; // Create GTM event
// @SEE https://betfairus.atlassian.net/browse/EC-1568
var createEvent = function createEvent(state, action) {
var fundAmount = __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(action, "data.fund.amount") || __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(action, "data.fundAmount");
switch (action.type) {
// 1
case "USER_FILLED_FIELD":
return {
gaEventAction: "Field Complete",
gaEventLabel: action.data.fieldName,
depositAmount: state.deposits.sightline.transferAmount ? state.deposits.sightline.transferAmount : undefined,
sightlineDeposit: flags.depositToPPCValue ? parseInt(flags.depositToPPCValue, 10) : undefined
};
// 2
case "ERROR_SHOWN":
return {
gaEventAction: "Field Error",
gaEventLabel: action.data.errors[0] ? "".concat(action.data.errors[0], " - ").concat(action.data.fieldName) : "No specific error message - ".concat(action.data.fieldName)
};
// 3
case "USER_SELECTED_DEPOSIT_AMOUNT":
flags.depositToPPCValue = action.data.value;
if (!flags.hasStarted) {
flags.hasStarted = true;
return depositStart(action, state);
}
return {
gaEventAction: "Select Amount",
gaEventLabel: state.deposits.sightline.transferAmount ? state.deposits.sightline.transferAmount.toString() : undefined,
sightlineDeposit: parseInt(action.data.value, 10),
depositAmount: state.deposits.sightline.transferAmount ? state.deposits.sightline.transferAmount : undefined,
amountOption: preSelectedAmount(state)
};
case "USER_FILLED_DEPOSIT_AMOUNT":
flags.depositToPPCValue = action.data.value;
if (!flags.hasStarted) {
flags.hasStarted = true;
return depositStart(action, state);
}
return {
gaEventAction: "Field Complete",
gaEventLabel: state.deposits.sightline.transferAmount ? state.deposits.sightline.transferAmount.toString() : undefined,
sightlineDeposit: parseInt(action.data.value, 10),
depositAmount: state.deposits.sightline.transferAmount ? state.deposits.sightline.transferAmount : undefined,
amountOption: preSelectedAmount(state)
};
case "USER_FILLED_TRANSFER_AMOUNT":
return {
gaEventAction: "Field Complete",
gaEventLabel: action.data.fieldName,
depositAmount: parseInt(action.data.value, 10),
sightlineDeposit: flags.depositToPPCValue ? parseInt(flags.depositToPPCValue, 10) : undefined
};
// 4
case "SHOW_TOOLTIP":
return {
gaEventAction: "Hovered Tooltip",
gaEventLabel: action.data.fieldName
};
// 5
case "OPEN_ADD_CARD_MODAL":
return {
gaEventAction: "Open",
gaEventLabel: "Add Card"
};
// 5
case "OPEN_ADD_FUNDS_SECTION":
return {
gaEventAction: "Open",
gaEventLabel: "Add Funds"
};
// 5
case "OPEN_CHANGE_CARD_MODAL":
return {
gaEventAction: "Open",
gaEventLabel: "Change Card"
};
// 6
case "FULL_ENROLL_REQUEST":
case "FUND_AND_TRANSFER_REQUEST":
flags.isFundAndTransfer = true;
return {
gaEventAction: "Fund Pre-Paid & Deposit Attempt",
gaEventValue: fundAmount.toString(),
// pass as a string!
gaEventLabel: action.data.transferAmount,
// pass as a integer!
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId: action.data.accountId || state.userAccountDetails.accountNumber,
cardType: "Credit",
netDepositFee: undefined
};
// 7
case "FUND_AND_TRANSFER_REQUEST_SUCCESS":
flags.isFundAndTransfer = false;
flags.hasStarted = false;
return {
gaEventAction: "Fund Pre-Paid & Deposit Success",
gaEventValue: state.deposits.sightline.transferAmount ? state.deposits.sightline.transferAmount.toString() : undefined,
gaEventLabel: flags.depositToPPCValue ? parseInt(flags.depositToPPCValue, 10) : undefined,
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
accountId: state.userAccountDetails.accountNumber,
customerStatus: customerStatus(state),
cardType: "Credit",
netDepositFee: getDepositFee(state),
isFeePaid: !!__WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(state, "deposits.sightline.sightlineUserAccount.depositFee", false)
};
// 8
case "FULL_ENROLL_REQUEST_FAILURE":
return {
gaEventAction: "Fund Pre-Paid & Deposit Error",
gaEventLabel: action.error.code,
// error Type
gaEventValue: action.data.transferAmount,
// pass as an integer!
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId: state.userAccountDetails.accountNumber,
cardType: "Credit",
netDepositFee: undefined
};
case "FUND_AND_TRANSFER_REQUEST_FAILURE":
flags.isFundAndTransfer = false;
if (action.data.ignoreGTM) {
return false;
}
return {
gaEventAction: "Fund Pre-Paid & Deposit Error",
gaEventLabel: action.error.code,
gaEventValue: action.data.transferAmount,
// pass as an integer!
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId: state.userAccountDetails.accountNumber,
cardType: "Credit",
netDepositFee: getDepositFee(state)
};
// 9
case "TRANSFER_FUNDS_TO_TVG_SUCCESS":
flags.hasStarted = false;
return {
event: "deposit",
gaEventCategory: "Deposit",
gaEventAction: "Deposit Success",
gaEventLabel: action.data.isRedirect ? "Sightline flow pop-up" : undefined,
depositAmount: action.data.amount,
// pass as an integer!
gaEventValue: action.data.amount,
// pass as a string!
amountOption: undefined,
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId: __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(state, "userAccountDetails.accountDetails.accountNumber", state.userAccountDetails.accountNumber),
cardType: undefined,
netDepositFee: undefined,
isFeePaid: !!__WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(state, "deposits.sightline.sightlineUserAccount.depositFee", false)
};
// 10
case "TRANSFER_FUNDS_TO_TVG_FAILURE":
return action.data.ignoreGTM ? false : {
event: "deposit",
gaEventCategory: "Deposit",
gaEventAction: "Deposit Error",
gaEventLabel: action.data.isRedirect ? "Sightline flow pop-up - ".concat(action.error) : action.error,
gaEventValue: action.data.amount,
// pass as an integer!
depositAmount: action.data.amount,
// pass as an integer!
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId: __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(state, "userAccountDetails.accountDetails.accountNumber", state.userAccountDetails.accountNumber),
cardType: undefined,
netDepositFee: getDepositFee(state)
};
// 11
case "PROCESSING_REDIRECT":
return {
event: "deposit",
gaEventCategory: "Deposit",
gaEventAction: "Deposit Attempt",
gaEventLabel: "Sightline flow pop-up",
gaEventValue: action.data.amount,
// pass as an integer!
depositAmount: action.data.amount,
// pass as an integer!
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId: action.data.accountId,
cardType: undefined,
netDepositFee: getDepositFee(state)
};
case "DEPOSIT_ATTEMPT":
return {
event: "deposit",
gaEventCategory: "Deposit",
gaEventAction: "Deposit Attempt",
gaEventLabel: undefined,
gaEventValue: action.data.amount,
// pass as an integer!
depositAmount: action.data.amount,
// pass as an integer!
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId: __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(state, "userAccountDetails.accountDetails.accountNumber", state.userAccountDetails.accountNumber),
cardType: undefined,
netDepositFee: getDepositFee(state)
};
case "DEPOSIT_POLLER_DONE":
if (action.data.ignoreGTM) {
return false;
}
return {
gaEventAction: action.data.success ? "Fund Pre-Paid Success" : "Fund Pre-Paid Error",
gaEventLabel: action.data.gaLabel,
gaEventValue: action.data.amount,
// pass as an integer!
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId: state.userAccountDetails.accountNumber,
cardType: undefined,
netDepositFee: getDepositFee(state)
};
// 11
case "ADD_NEW_CARD_REQUEST":
return {
gaEventAction: "Add Card Attempt"
};
// 12
case "ADD_NEW_CARD_SUCCESS":
flags.hasStarted = false;
return {
gaEventAction: "Add Card Success"
};
// 13
case "CHANGE_DEFAULT_CARD":
return {
gaEventAction: "Select Card"
};
// 15
case "HIDE_DEPOSIT_SUCCESS_MODAL":
return {
gaEventAction: "Close",
gaEventLabel: "Deposit Success Modal",
module: "Deposit Success Modal"
};
// 16
case "NAVIGATE_TO":
return {
event: "navigation",
gaEventCategory: "Navigation",
gaEventAction: "Navigated To",
gaEventLabel: action.data.fieldName,
// pass 'See Full Schedule' or 'Go To Next Race'
module: "Deposit Success Modal",
destinationUrl: window.location.href // e.g 'www.tvg.com/full-schedule'
};
case "SITE_CLICK":
return {
event: "siteClick",
gaEventCategory: "Site click",
gaEventAction: action.data.fieldAction,
gaEventLabel: undefined,
module: "Deposit Success Modal",
tag: undefined,
microApp: undefined
};
default:
return false;
}
};
var logEvent = function logEvent(type, data) {
/* eslint-disable */
if (false) {
console.groupCollapsed("GTM:".concat(type)); // Stupid Chrome bug
console.table(Object.keys(data).map(function (key) {
return {
property: key,
value: data[key]
};
}));
console.groupEnd("GTM:".concat(type));
}
/* eslint-enable */
};
var saveEvent = function saveEvent(type, data) {
if (window) {
window.dataLayer = window.dataLayer || [];
return window.dataLayer.push(data);
}
return {
type: type,
data: data
};
};
var logAndSave = function logAndSave(type, data) {
logEvent(type, data);
saveEvent(type, data);
}; // hack for gtm hardcode strings
var getSiteVersion = function getSiteVersion(product) {
var siteVersionKeys = {
touch3: "v2-revamp",
ios2: "iOS",
fdrmobile: "fdrmobileWeb",
fdrios: "fdriOS"
};
return siteVersionKeys[product] ? siteVersionKeys[product] : product.toUpperCase();
};
var getProduct = function getProduct(product) {
var productKeys = {
touch3: "MEP-01",
ios2: "iOS",
fdrmobile: "FDR-01",
fdrios: "FDR-01"
};
return productKeys[product] ? productKeys[product] : product.toUpperCase();
};
/* harmony default export */ __webpack_exports__["a"] = (function (defaults) {
return function (store) {
return function (next) {
return function (action) {
var state = store.getState();
var module = "My Funds";
var namespace = "SIGHTLINE:";
var event = createEvent(state, action);
if (event) {
logAndSave("".concat(namespace).concat(action.type), _objectSpread(_objectSpread(_objectSpread({}, defaults), {}, {
module: module,
depositType: "Sightline",
gaEventLabel: undefined,
depositAmount: undefined
}, event), {}, {
siteVersion: getSiteVersion(Object(__WEBPACK_IMPORTED_MODULE_1__tvg_conf__["a" /* default */])().product),
productVersion: getProduct(Object(__WEBPACK_IMPORTED_MODULE_1__tvg_conf__["a" /* default */])().product)
}));
}
return next(action);
};
};
};
});
/***/ }),
/***/ 496:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_get__);
var logEvent = function logEvent(type, data) {
/* eslint-disable */
if (false) {
console.groupCollapsed("GTM:".concat(type)); // Stupid Chrome bug
console.table(Object.keys(data).map(function (key) {
return {
property: key,
value: data[key]
};
}));
console.groupEnd("QUBIT:".concat(type));
}
/* eslint-enable */
};
var saveEvent = function saveEvent(type, data) {
if (window) {
window.uv = window.uv;
return window.uv && window.uv.emit ? window.uv.emit(type, data) : {
type: type,
data: data
};
}
return {
type: type,
data: data
};
};
var logAndSave = function logAndSave(type, data) {
logEvent(type, data);
saveEvent(type, data);
};
/* harmony default export */ __webpack_exports__["a"] = (function (store) {
return function (next) {
return function (action) {
var state = store.getState();
switch (action.type) {
case "TRANSFER_FUNDS_TO_TVG_SUCCESS":
logAndSave("egFund", {
user: {
id: __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(state, "userAccountDetails.accountDetails.accountDetails.accountNumber", state.userAccountDetails.accountNumber),
balance: {
value: 0,
currency: "USD"
}
},
type: "Deposit Success",
amount: {
value: action.data.depositAmount || 0,
currency: "USD"
},
method: "Sightline New Flow",
location: "My Funds"
});
break;
default:
return next(action);
}
return next(action);
};
};
});
/***/ }),
/***/ 497:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return fetchTVGUserAccountDetails; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return fetchCAPI; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return fetchFeatures; });
/* unused harmony export isAuthenticated */
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__tvg_conf__ = __webpack_require__(6);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__services_capi__ = __webpack_require__(498);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__services_usa__ = __webpack_require__(499);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__services_deposits__ = __webpack_require__(500);
var fetchTVGUserAccountDetails = function fetchTVGUserAccountDetails() {
return function (dispatch) {
return Promise.resolve(dispatch({
type: "FETCH_TVG_USER_ACCOUNT_DETAILS"
})).then(__WEBPACK_IMPORTED_MODULE_3__services_deposits__["a" /* getAccountDetails */]).then(function (data) {
return dispatch({
type: "FETCH_TVG_USER_ACCOUNT_DETAILS_SUCCESS",
data: data
});
}).catch(function (error) {
dispatch({
type: "FETCH_TVG_USER_ACCOUNT_DETAILS_FAILURE",
error: error
});
});
};
};
var fetchCAPI = function fetchCAPI() {
return function (dispatch) {
return Promise.resolve(dispatch({
type: "FETCH_CAPI_REQUEST"
})).then(__WEBPACK_IMPORTED_MODULE_1__services_capi__["a" /* getMessages */]).then(function (data) {
dispatch({
type: "FETCH_CAPI_SUCCESS",
data: data
});
}).catch(function (error) {
dispatch({
type: "FETCH_CAPI_FAILURE",
error: error
});
});
};
};
var fetchFeatures = function fetchFeatures() {
return function (dispatch) {
return Promise.resolve(dispatch({
type: "FETCH_FEATURES_REQUEST"
})).then(function () {
return Object(__WEBPACK_IMPORTED_MODULE_0__tvg_conf__["a" /* default */])().getFeatures("desktop", true);
}).then(function (data) {
dispatch({
type: "FETCH_FEATURES_SUCCESS",
data: data
});
}).catch(function (error) {
dispatch({
type: "FETCH_FEATURES_FAILURE",
error: error
});
});
};
};
var isAuthenticated = function isAuthenticated() {
return function (dispatch) {
return Promise.resolve(dispatch({
type: "FETCH_USER_AUTHENTICATION"
})).then(__WEBPACK_IMPORTED_MODULE_2__services_usa__["a" /* default */].isAuthenticated).then(function (data) {
return dispatch({
type: "FETCH_USER_AUTHENTICATION_SUCCESS",
data: data
});
}).catch(function (error) {
console.error(error);
dispatch({
type: "FETCH_USER_AUTHENTICATION_FAILURE",
error: error
});
});
};
};
/***/ }),
/***/ 498:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* unused harmony export client */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getMessages; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_fp_get__ = __webpack_require__(163);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_fp_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_fp_get__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_axios__ = __webpack_require__(18);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_axios___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_axios__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__tvg_conf__ = __webpack_require__(6);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__shared__ = __webpack_require__(40);
// @TODO Fill this as you need more CMS properties
var client = __WEBPACK_IMPORTED_MODULE_1_axios___default.a.create({
baseURL: Object(__WEBPACK_IMPORTED_MODULE_2__tvg_conf__["a" /* default */])().config("service.capi"),
headers: __WEBPACK_IMPORTED_MODULE_3__shared__["b" /* headers */],
responseType: "json"
});
var getMessages = function getMessages() {
return client.get("/messages/namespace", {
params: {
product: Object(__WEBPACK_IMPORTED_MODULE_2__tvg_conf__["a" /* default */])().product || "tvg4",
device: Object(__WEBPACK_IMPORTED_MODULE_2__tvg_conf__["a" /* default */])().device,
brand: Object(__WEBPACK_IMPORTED_MODULE_2__tvg_conf__["a" /* default */])().brand,
namespace: ["Deposits", "Funds", "Global"].join(",")
}
}).then(__WEBPACK_IMPORTED_MODULE_0_lodash_fp_get___default()("data.response")).then(function (_ref) {
var Deposits = _ref.Deposits,
Funds = _ref.Funds,
Global = _ref.Global;
return Object.assign({}, Global, Deposits, Funds);
}).catch(__WEBPACK_IMPORTED_MODULE_3__shared__["a" /* ApiError */].fromAxios);
};
/***/ }),
/***/ 499:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_axios__ = __webpack_require__(18);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_axios___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_axios__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__tvg_conf__ = __webpack_require__(6);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__shared__ = __webpack_require__(40);
var client = __WEBPACK_IMPORTED_MODULE_0_axios___default.a.create({
baseURL: Object(__WEBPACK_IMPORTED_MODULE_1__tvg_conf__["a" /* default */])().config("service.usa"),
headers: __WEBPACK_IMPORTED_MODULE_2__shared__["b" /* headers */],
withCredentials: true,
responseType: "json"
});
/* harmony default export */ __webpack_exports__["a"] = ({
isAuthenticated: function isAuthenticated() {
return client.get("/authenticated").then(function () {
return true;
}).catch(function (error) {
throw new __WEBPACK_IMPORTED_MODULE_2__shared__["a" /* ApiError */]({
message: error.message,
status: error.response.status,
code: error.response.statusText
});
});
}
});
/***/ }),
/***/ 500:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* unused harmony export client */
/* unused harmony export uamClient */
/* unused harmony export usaClient */
/* unused harmony export uwtClient */
/* unused harmony export getAccountDetailsOld */
/* unused harmony export getProfile */
/* unused harmony export getAccountNumber */
/* unused harmony export getHasMadeInitialDeposit */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getAccountDetails; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_fp_camelCase__ = __webpack_require__(501);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_fp_camelCase___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_fp_camelCase__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_fp_mapKeys__ = __webpack_require__(514);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_fp_mapKeys___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_fp_mapKeys__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_fp_get__ = __webpack_require__(163);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_fp_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_fp_get__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_axios__ = __webpack_require__(18);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_axios___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_axios__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__tvg_conf__ = __webpack_require__(6);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__shared__ = __webpack_require__(40);
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var client = __WEBPACK_IMPORTED_MODULE_3_axios___default.a.create({
method: "get",
baseURL: Object(__WEBPACK_IMPORTED_MODULE_4__tvg_conf__["a" /* default */])().config("service.deposit"),
headers: __WEBPACK_IMPORTED_MODULE_5__shared__["b" /* headers */],
withCredentials: true,
responseType: "json"
});
var uamClient = __WEBPACK_IMPORTED_MODULE_3_axios___default.a.create({
baseURL: Object(__WEBPACK_IMPORTED_MODULE_4__tvg_conf__["a" /* default */])().config("service.uam"),
headers: __WEBPACK_IMPORTED_MODULE_5__shared__["b" /* headers */],
withCredentials: true,
responseType: "json"
});
var usaClient = __WEBPACK_IMPORTED_MODULE_3_axios___default.a.create({
baseURL: Object(__WEBPACK_IMPORTED_MODULE_4__tvg_conf__["a" /* default */])().config("service.usa"),
headers: __WEBPACK_IMPORTED_MODULE_5__shared__["b" /* headers */],
withCredentials: true,
responseType: "json"
});
var uwtClient = __WEBPACK_IMPORTED_MODULE_3_axios___default.a.create({
baseURL: Object(__WEBPACK_IMPORTED_MODULE_4__tvg_conf__["a" /* default */])().config("service.uwt"),
headers: __WEBPACK_IMPORTED_MODULE_5__shared__["b" /* headers */],
withCredentials: true,
responseType: "json"
});
var toCamelCase = __WEBPACK_IMPORTED_MODULE_1_lodash_fp_mapKeys___default()(__WEBPACK_IMPORTED_MODULE_0_lodash_fp_camelCase___default.a);
var getAccountDetailsOld = function getAccountDetailsOld() {
return client.get("/v1.0/depositInitialData", {
params: {
showAccountDetails: true
}
}).then(__WEBPACK_IMPORTED_MODULE_2_lodash_fp_get___default()("data.response")) // This service still uses the very old .NET API which means that the
// response comes with .NET standards (PascalCase). We try to convert this
// into a more familiar JavaScript convention (camelCase)
.then(function (res) {
return _objectSpread(_objectSpread({}, toCamelCase(__WEBPACK_IMPORTED_MODULE_2_lodash_fp_get___default()("accountDetails", res))), {}, {
hasMadeInitialDeposit: __WEBPACK_IMPORTED_MODULE_2_lodash_fp_get___default()("availableOptions.HasMadeInitialDeposit", res),
homeAddress: toCamelCase(__WEBPACK_IMPORTED_MODULE_2_lodash_fp_get___default()("accountDetails.HomeAddress", res)),
mailingAddress: toCamelCase(__WEBPACK_IMPORTED_MODULE_2_lodash_fp_get___default()("accountDetails.MailingAddress", res))
});
}).catch(__WEBPACK_IMPORTED_MODULE_5__shared__["a" /* ApiError */].fromAxios);
};
var getProfile = function getProfile(accountId) {
return uamClient.get("/users/".concat(accountId, "/profile")).then(function (res) {
return res.data;
});
};
var getAccountNumber = function getAccountNumber() {
return usaClient.get("session/context").then(function (res) {
return res.data.accountNumber;
});
};
var getHasMadeInitialDeposit = function getHasMadeInitialDeposit(profile) {
return uwtClient.get("users/".concat(profile.accountNumber, "/deposits?pageSize=1")).then(function (res) {
return {
profile: profile,
hasMadeInitialDeposit: res.data && res.data.deposits && res.data.deposits.length > 0
};
});
};
var getAccountDetails = function getAccountDetails() {
return getAccountNumber().then(function (accountId) {
return getProfile(accountId).then(function (profile) {
return getHasMadeInitialDeposit(profile).then(function (res) {
return {
accountDetails: res.profile,
hasMadeInitialDeposit: res.hasMadeInitialDeposit,
homeAddress: res.profile.homeAddress,
mailingAddress: res.profile.mailingAddress
};
});
});
}).catch(__WEBPACK_IMPORTED_MODULE_5__shared__["a" /* ApiError */].fromAxios);
};
/***/ }),
/***/ 519:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds"};
/***/ }),
/***/ 62:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* unused harmony export enrollReset */
/* unused harmony export addCardReset */
/* unused harmony export fundSightlineReset */
/* unused harmony export createCardAndFundSightlineReset */
/* unused harmony export transferFundsToTVGReset */
/* unused harmony export changeTransferAmount */
/* unused harmony export processRedirect */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return openInvalidCardModal; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return clearInvalidCardModal; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return resetAllOperationState; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return getSightlineAccountInfo; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return transferFundsToTVG; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return changeDefaultCard; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return addNewCard; });
/* unused harmony export fundSightline */
/* unused harmony export fundSightlineRedirect */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return fundSightlineAndTransferToTVG; });
/* unused harmony export enrollUser */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return fullEnroll; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return userFilledField; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return userFilledDepositField; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return userFilledTransferField; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return errorShown; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_get__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_tvg_mediator_classic_src___ = __webpack_require__(236);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__services_slp__ = __webpack_require__(63);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__services_utils__ = __webpack_require__(309);
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var enrollReset = function enrollReset() {
return {
type: "ENROLL_USER_RESET_STATE"
};
};
var addCardReset = function addCardReset() {
return {
type: "ADD_NEW_CARD_RESET"
};
};
var fundSightlineReset = function fundSightlineReset() {
return {
type: "FUND_SIGHTLINE_REQUEST_RESET"
};
};
var createCardAndFundSightlineReset = function createCardAndFundSightlineReset() {
return {
type: "CREATE_CARD_AND_FUND_SIGHTLINE_RESET"
};
};
var transferFundsToTVGReset = function transferFundsToTVGReset() {
return {
type: "TRANSFER_FUNDS_TO_TVG_RESET"
};
};
var changeTransferAmount = function changeTransferAmount() {
var amount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
return {
type: "CHANGE_TRANSFER_AMOUNT",
data: {
amount: amount
}
};
};
var processRedirect = function processRedirect(dispatch) {
return dispatch({
type: "PROCESS_REDIRECT"
});
};
var openInvalidCardModal = function openInvalidCardModal() {
return {
type: "OPEN_INVALID_CARD_MODAL"
};
};
var clearInvalidCardModal = function clearInvalidCardModal() {
return {
type: "CLEAR_INVALID_CARD_MODAL"
};
};
var resetAllOperationState = function resetAllOperationState() {
return function (dispatch) {
return Promise.all([dispatch(enrollReset()), dispatch(addCardReset()), dispatch(fundSightlineReset()), dispatch(createCardAndFundSightlineReset()), dispatch(transferFundsToTVGReset()), processRedirect(dispatch), dispatch(changeTransferAmount())]);
};
};
var injectedSuccessModal = function injectedSuccessModal(dispatch, fundedAmount) {
var SUCCESS_MODAL_LABELS = {
title: "Successful Deposit!",
textTemplate: "Your $@@@deposit_amount@@@ are now available!",
buttonText: "Let's bet!"
};
var successModalOnOpenCallback = function successModalOnOpenCallback() {
dispatch({
type: "SITE_CLICK",
data: {
fieldAction: "seen"
}
});
};
var successModalButtonCallback = function successModalButtonCallback() {
dispatch({
type: "NAVIGATE_TO",
data: {
fieldName: SUCCESS_MODAL_LABELS.buttonText,
href: "https://www.tvg.com/"
}
});
if (window && window.handleNativeMessages) {
window.handleNativeMessages("CLOSE_DMA");
}
};
var successModalCloseCallback = function successModalCloseCallback() {
dispatch({
type: "SITE_CLICK",
data: {
fieldAction: "close"
}
});
};
if (["iosnative", "androidnative"].includes(__WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(window, "__TVG_GLOBALS__.PRODUCT", "touch3"))) {
if (window.ReactInjector) {
window.ReactInjector.renderDepositSuccess(document.getElementById("injected-modal"), // eslint-disable-line
{
title: SUCCESS_MODAL_LABELS.title,
text: SUCCESS_MODAL_LABELS.textTemplate.replace("@@@deposit_amount@@@", fundedAmount),
buttonText: SUCCESS_MODAL_LABELS.buttonText,
sharedState: {
isOpen: true
},
buttonCallback: successModalButtonCallback,
closeCallback: successModalCloseCallback,
onOpenCallback: successModalOnOpenCallback
});
}
}
};
var getSightlineAccountInfo = function getSightlineAccountInfo(accountId) {
return function (dispatch) {
return Promise.resolve(dispatch({
type: "FETCH_SIGHTLINE_USER_REQUEST"
})).then(function () {
return __WEBPACK_IMPORTED_MODULE_2__services_slp__["f" /* getSightlineAccountInfo */](accountId);
}).then(function (data) {
return dispatch({
type: "FETCH_SIGHTLINE_USER_SUCCESS",
data: data.data
});
}).then(function () {
return dispatch({
type: "FETCH_SIGHTLINE_CARDS_REQUEST"
});
}).then(function () {
return __WEBPACK_IMPORTED_MODULE_2__services_slp__["g" /* getSightlineCards */](accountId);
}).then(function (data) {
return dispatch({
type: "FETCH_SIGHTLINE_CARDS_SUCCESS",
data: data.data
});
}).catch(function (error) {
console.error(error);
dispatch({
type: "FETCH_SIGHTLINE_USER_FAILURE",
error: error
});
});
};
};
var transferFundsToTVG = function transferFundsToTVG(amount, accountId) {
var isRedirect = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var fee = arguments.length > 3 ? arguments[3] : undefined;
var feeFull = arguments.length > 4 ? arguments[4] : undefined;
var feeRefund = arguments.length > 5 ? arguments[5] : undefined;
return function (dispatch) {
return Promise.resolve(dispatch({
type: "TRANSFER_FUNDS_TO_TVG_REQUEST",
data: {
amount: amount,
isRedirect: isRedirect
}
})).then(function () {
return __WEBPACK_IMPORTED_MODULE_2__services_slp__["i" /* transferFundsToTVG */](amount, accountId);
}).then(function (data) {
if (data.data && data.data.sightlineBalance) {
dispatch({
type: "UPDATE_BALANCE_ON_DEPOSIT",
data: {
sightlineBalance: parseFloat(data.data.sightlineBalance)
}
});
}
if (data.status.toString()[0] === "2") {
injectedSuccessModal(dispatch, amount);
}
switch (data.status) {
case 200:
if (data.data.tvgBalance) {
__WEBPACK_IMPORTED_MODULE_1__node_modules_tvg_mediator_classic_src___["a" /* dispatch */]("ACCOUNT_BALANCE_CHANGED", {
balance: parseFloat(data.data.tvgBalance)
});
}
injectedSuccessModal(dispatch, amount);
return dispatch({
type: "TRANSFER_FUNDS_TO_TVG_SUCCESS",
data: _objectSpread(_objectSpread({}, data.data), {}, {
amount: amount,
isRedirect: isRedirect,
depositFee: fee,
feeAmount: feeFull,
feeRefundAmount: feeRefund
})
});
case 207:
if (Array.isArray(data.data)) {
var slpWithdrawal = data.data.filter(function (item) {
return item.id === "SIGHTLINE_WITHDRAWAL";
});
var firstStep = slpWithdrawal.length === 1 ? slpWithdrawal[0] : null;
if (firstStep && firstStep.body) {
var sightlineBalance = parseFloat(firstStep.body.sightlineBalance);
dispatch({
type: "UPDATE_BALANCE_ON_DEPOSIT",
data: {
sightlineBalance: sightlineBalance
}
});
}
var toteDeposit = data.data.filter(function (item) {
return item.id === "TOTE_DEPOSIT";
});
var secondStep = toteDeposit.length === 1 ? toteDeposit[0] : null;
if (secondStep && secondStep.body) {
var statusCode = secondStep.body.status;
var errorCode = secondStep.body.exception;
var errorMsg = secondStep.body.message;
switch (statusCode) {
case 504:
case 502:
return dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositPollerTimeout",
amount: amount,
message: "scenario2",
gaLabel: errorMsg
}
});
case 500:
if (errorCode === "SLP_WITHDRAW_FROM_SLP_DECLINED") {
return dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositStatusPoller",
amount: amount,
message: "scenario1",
gaLabel: errorMsg
}
});
} else if (errorCode === "SLP_TOTE_DEPOSIT_FAILED") {
return dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "warning",
error: "depositStatusPoller",
amount: amount,
message: "scenario3a",
gaLabel: errorMsg
}
});
}
return dispatch({
type: "TRANSFER_FUNDS_TO_TVG_FAILURE",
error: {
message: errorMsg
},
data: {
amount: amount,
isRedirect: isRedirect
}
});
default:
return dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositPollerTimeout",
message: "scenario3c",
amount: amount,
gaLabel: errorMsg
}
});
}
}
}
break;
case 202:
if (data.data.tvgBalance) {
__WEBPACK_IMPORTED_MODULE_1__node_modules_tvg_mediator_classic_src___["a" /* dispatch */]("ACCOUNT_BALANCE_CHANGED", {
balance: data.data.tvgBalance
});
}
dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
shouldBlock: true,
success: false,
notifType: "warning",
error: "depositStatusPoller",
message: "scenario3b",
gaLabel: "Deposit Poller Initiated",
ignoreGTM: true
}
});
return Object(__WEBPACK_IMPORTED_MODULE_3__services_utils__["a" /* default */])(function () {
return __WEBPACK_IMPORTED_MODULE_2__services_slp__["e" /* getDepositStatus */](data.headers.location).then(function (response) {
return response.status;
}).catch(function (error) {
if (error.status === 504 || error.status === 502) {
dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositPollerTimeout",
message: "scenario2",
amount: amount,
gaLabel: "Deposit Poller ".concat(error.status, " error")
}
});
} else if (error.status === 500) {
if (error.code === "SLP_WITHDRAW_FROM_SLP_DECLINED") {
dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositStatusPoller",
message: "scenario1",
amount: amount,
gaLabel: "Deposit Poller ".concat(error.code, " error")
}
});
} else {
dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositStatusPoller",
message: "scenario3a",
amount: amount,
gaLabel: "Deposit Poller ".concat(error.code, " error")
}
});
}
} else {
dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositPollerTimeout",
message: "scenario3c",
amount: amount,
gaLabel: "Deposit Poller ".concat(error.status, " error")
}
});
}
});
}, 10000, 2000).then(function (success) {
if (success) {
injectedSuccessModal(dispatch, amount);
return dispatch({
type: "TRANSFER_FUNDS_TO_TVG_SUCCESS",
data: _objectSpread(_objectSpread({}, data.data), {}, {
amount: amount,
depositFee: fee,
feeAmount: feeFull,
feeRefundAmount: feeRefund
})
});
}
return dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "warning",
error: "SLP_DEPOSIT_TO_TVG_FAILED",
message: "scenario3a",
amount: amount,
gaLabel: "Deposit Poller error - FINISH_DEPOSIT_ERROR"
}
});
}).catch(function () {
dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "warning",
error: "SLP_DEPOSIT_TO_TVG_FAILED",
message: "scenario3c",
amount: amount,
gaLabel: "Deposit Poller Timeout"
}
});
});
default:
injectedSuccessModal(dispatch, amount);
return dispatch({
type: "TRANSFER_FUNDS_TO_TVG_SUCCESS",
data: _objectSpread(_objectSpread({}, data.data), {}, {
amount: amount,
depositFee: fee,
feeAmount: feeFull,
feeRefundAmount: feeRefund
})
});
}
return {};
}).catch(function (error) {
var message = error.message;
var ecode = error.code || error.exception; // eslint-disable-next-line
error.depositFailed = true;
if (error.status === 504 || error.status === 502) {
message = "scenario2";
} else if (error.status === 500) {
if (ecode === "SLP_WITHDRAW_FROM_SLP_DECLINED") {
message = "scenario1";
} else if (ecode === "SLP_TOTE_DEPOSIT_FAILED") {
message = "scenario3a";
}
} else if (error.status === 422) {
if (ecode === "RESP_GAMING_LIMITS_EXCEEDED") {
message = "scenario6";
}
}
dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositStatusPoller",
message: message,
amount: amount,
gaLabel: ecode
}
});
dispatch({
type: "TRANSFER_FUNDS_TO_TVG_FAILURE",
error: ecode,
data: {
amount: amount,
ignoreGTM: false,
isRedirect: isRedirect
},
errorData: {
type: ecode,
message: error.message
}
});
throw error;
});
};
};
var changeDefaultCard = function changeDefaultCard(id) {
return {
type: "CHANGE_DEFAULT_CARD",
data: id
};
};
var addNewCard = function addNewCard(card, accountId) {
return function (dispatch) {
return Promise.resolve(dispatch({
type: "ADD_NEW_CARD_REQUEST"
})).then(function () {
return __WEBPACK_IMPORTED_MODULE_2__services_slp__["a" /* addNewCard */](card, accountId);
}).then(function () {
return dispatch({
type: "ADD_NEW_CARD_SUCCESS"
});
}).then(function () {
return dispatch({
type: "HIDE_ADD_CARD_MODAL"
});
}).then(function () {
return dispatch({
type: "FETCH_SIGHTLINE_CARDS_REQUEST"
});
}).then(function () {
return __WEBPACK_IMPORTED_MODULE_2__services_slp__["g" /* getSightlineCards */](accountId);
}).then(function (data) {
return dispatch({
type: "FETCH_SIGHTLINE_CARDS_SUCCESS",
data: _objectSpread({
addFundsSectionVisible: true
}, data)
});
}).catch(function (error) {
dispatch({
type: "REDIRECT_PROCESSED"
});
dispatch({
type: "ADD_NEW_CARD_FAILURE",
error: error
});
throw error;
});
};
};
var fundSightline = function fundSightline(transferData, accountId, isRedirect, cardId) {
return function (dispatch) {
return Promise.resolve(dispatch({
type: "FUND_SIGHTLINE_REQUEST",
data: transferData
})).then(function () {
if (isRedirect) {
return __WEBPACK_IMPORTED_MODULE_2__services_slp__["d" /* fundSightlineWithoutCardId */](transferData, accountId);
}
return __WEBPACK_IMPORTED_MODULE_2__services_slp__["c" /* fundSightline */](transferData, accountId, cardId);
}).then(function (data) {
changeDefaultCard(transferData.paymentCard.id);
dispatch({
type: "FUND_SIGHTLINE_REQUEST_SUCCESS",
data: _objectSpread({}, data)
});
}).catch(function (error) {
dispatch({
type: "FUND_SIGHTLINE_REQUEST_FAILURE",
data: transferData,
error: error
});
throw error;
});
};
};
var fundSightlineRedirect = function fundSightlineRedirect(transferData, accountId) {
return function (dispatch) {
return Promise.resolve(dispatch({
type: "FUND_SIGHTLINE_REQUEST",
data: transferData
})).then(function () {
return __WEBPACK_IMPORTED_MODULE_2__services_slp__["d" /* fundSightlineWithoutCardId */](transferData, accountId);
}).then(function (data) {
dispatch({
type: "FUND_SIGHTLINE_REQUEST_SUCCESS",
data: data
});
return __WEBPACK_IMPORTED_MODULE_2__services_slp__["g" /* getSightlineCards */](accountId);
}).then(function (data) {
dispatch({
type: "FETCH_SIGHTLINE_CARDS_SUCCESS",
data: data
});
return data;
}).then(function (data) {
return changeDefaultCard(data.cards[0].id);
}).catch(function (error) {
dispatch({
type: "FUND_SIGHTLINE_REQUEST_FAILURE",
data: transferData,
error: error
});
throw error;
});
};
}; // I dont like this action but it's required for GTM
var fundSightlineAndTransferToTVG = function fundSightlineAndTransferToTVG(fund, transferAmount, accountId) {
var isRedirect = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
var cardId = arguments.length > 4 ? arguments[4] : undefined;
var fee = arguments.length > 5 ? arguments[5] : undefined;
var feeFull = arguments.length > 6 ? arguments[6] : undefined;
var feeRefund = arguments.length > 7 ? arguments[7] : undefined;
return function (dispatch) {
return Promise.resolve(dispatch({
type: "FUND_AND_TRANSFER_REQUEST",
data: {
fund: fund,
transferAmount: transferAmount,
accountId: accountId
}
})).then(function () {
if (isRedirect) {
return dispatch(fundSightlineRedirect(fund, accountId));
}
return dispatch(fundSightline(fund, accountId, isRedirect, cardId));
}).then(function () {
return dispatch(transferFundsToTVG(transferAmount, accountId, isRedirect, fee, feeFull, feeRefund));
}).then(function () {
return dispatch({
type: "FUND_AND_TRANSFER_REQUEST_SUCCESS",
data: {
fund: fund,
transferAmount: transferAmount
}
});
}).catch(function (error) {
if (error.message === "Funding fail") {
dispatch(transferFundsToTVG(transferAmount, accountId, isRedirect, fee, feeFull, feeRefund));
} else {
dispatch({
type: "FUND_AND_TRANSFER_REQUEST_FAILURE",
data: {
fund: fund,
transferAmount: transferAmount,
ignoreGTM: !!error.depositFailed
},
error: error
}); // if funding success and error is from deposit and its redirect case should fill the transfer to TVG amount
if (isRedirect && error.depositFailed) {
dispatch({
type: "HIDE_ADD_FUNDS_SECTION"
});
dispatch(changeTransferAmount(transferAmount));
dispatch({
type: "REDIRECT_PROCESSED"
});
} else {
dispatch(openInvalidCardModal());
}
throw error;
}
});
};
};
var enrollUser = function enrollUser(acceptTerms, accountId) {
return function (dispatch) {
return Promise.resolve(dispatch({
type: "ENROLL_USER_REQUEST"
})).then(function () {
return __WEBPACK_IMPORTED_MODULE_2__services_slp__["b" /* enrollUser */](acceptTerms, accountId);
}).then(function () {
return dispatch({
type: "ENROLL_USER_SUCCESS"
});
}).catch(function (error) {
dispatch({
type: "ENROLL_USER_FAILURE",
error: error
});
throw error;
});
};
};
var fullEnroll = function fullEnroll(acceptTerms, transferAmount, card, securityNumber, fundAmount, accountId, isRedirect, fee, feeFull, feeRefund) {
return function (dispatch) {
return Promise.resolve(dispatch({
type: "FULL_ENROLL_REQUEST",
data: {
fundAmount: fundAmount,
transferAmount: transferAmount
}
})).then(function () {
return dispatch(enrollUser(acceptTerms, accountId));
}).then(function () {
return dispatch(addNewCard(card, accountId));
}).then(function (cards) {
var cardId = cards.data[0] ? cards.data[0].id : cards.data.cards[0].id;
return dispatch(fundSightline({
amount: fundAmount,
paymentCard: {
id: cardId,
securityNumber: securityNumber
}
}, accountId, false, cardId));
}).then(function () {
return dispatch(transferFundsToTVG(transferAmount, accountId, isRedirect, fee, feeFull, feeRefund));
}).then(function () {
if (isRedirect) {
dispatch({
type: "REDIRECT_PROCESSED"
});
}
dispatch({
type: "FULL_ENROLL_SUCCESS",
data: {
fundAmount: fundAmount,
transferAmount: transferAmount
}
});
}).then(function () {
var appsflyerEvent = {
type: "APPSFLYER_EVENT",
payload: {
appsflyer: {
key: "af_first_deposit",
value: {
account_id: accountId,
af_revenue: "".concat(parseFloat(fundAmount).toFixed(2))
}
}
}
}; // Send AppsFlyer event for iOS app
if (window && window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.APPSFLYER_EVENT) {
window.webkit.messageHandlers.APPSFLYER_EVENT.postMessage(appsflyerEvent);
} else if (window && window.mediatorChannels && window.mediatorChannels.ios) {
window.mediatorChannels.ios.dispatch(appsflyerEvent);
}
if (typeof window !== "undefined" && window.handleNativeMessages && !!window.clientApp) {
if (window.clientApp.indexOf("native") !== -1) {
window.handleNativeMessages("UPDATE_BALANCE");
}
}
}).catch(function (error) {
if (isRedirect) {
dispatch({
type: "REDIRECT_PROCESSED"
});
if (error.message !== "Funding fail" && error.depositFailed && transferAmount) {
dispatch({
type: "HIDE_ADD_FUNDS_SECTION"
});
dispatch(changeTransferAmount(transferAmount));
}
}
dispatch({
type: "FULL_ENROLL_REQUEST_FAILURE",
data: {
fundAmount: fundAmount,
transferAmount: transferAmount
},
error: error
});
});
};
};
var userFilledField = function userFilledField(fieldName, value) {
return {
type: "USER_FILLED_FIELD",
data: {
fieldName: fieldName,
value: value
}
};
};
var userFilledDepositField = function userFilledDepositField(fieldName, value) {
return {
type: "USER_FILLED_DEPOSIT_AMOUNT",
data: {
fieldName: fieldName,
value: value
}
};
};
var userFilledTransferField = function userFilledTransferField(fieldName, value) {
return {
type: "USER_FILLED_TRANSFER_AMOUNT",
data: {
fieldName: fieldName,
value: value
}
};
};
var errorShown = function errorShown(fieldName, value, errors) {
return {
type: "ERROR_SHOWN",
data: {
fieldName: fieldName,
value: value,
errors: errors
}
};
};
/***/ }),
/***/ 63:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return getSightlineAccountInfo; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return getSightlineCards; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return getDepositStatus; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return enrollUser; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return addNewCard; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return transferFundsToTVG; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return fundSightline; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return fundSightlineWithoutCardId; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return getSightlineFees; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_get__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_axios__ = __webpack_require__(18);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_axios___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_axios__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__tvg_conf__ = __webpack_require__(6);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__shared__ = __webpack_require__(40);
var client = null;
if (typeof window !== "undefined") {
client = __WEBPACK_IMPORTED_MODULE_1_axios___default.a.create({
baseURL: Object(__WEBPACK_IMPORTED_MODULE_2__tvg_conf__["a" /* default */])().config("service.slp"),
headers: __WEBPACK_IMPORTED_MODULE_3__shared__["b" /* headers */],
withCredentials: true,
responseType: "json"
});
}
var uwtClient = __WEBPACK_IMPORTED_MODULE_1_axios___default.a.create({
baseURL: Object(__WEBPACK_IMPORTED_MODULE_2__tvg_conf__["a" /* default */])().config("service.uwt"),
headers: __WEBPACK_IMPORTED_MODULE_3__shared__["b" /* headers */],
withCredentials: true,
responseType: "json"
});
/**
* Request to get the SLP account information of a tvg user
*/
var getSightlineAccountInfo = function getSightlineAccountInfo(accountId) {
return client.get("user/".concat(accountId, "/account-info")).then(__WEBPACK_IMPORTED_MODULE_0_lodash_get___default()("data")).catch(__WEBPACK_IMPORTED_MODULE_3__shared__["a" /* ApiError */].fromAxios);
};
/**
* Request to get the SLP cards from the logged user
*/
var getSightlineCards = function getSightlineCards(accountId) {
return client.get("user/".concat(accountId, "/payment-cards")).then(__WEBPACK_IMPORTED_MODULE_0_lodash_get___default()("data")).catch(__WEBPACK_IMPORTED_MODULE_3__shared__["a" /* ApiError */].fromAxios);
};
/**
* Get deposit status
*/
var getDepositStatus = function getDepositStatus(url) {
var uuid = url.split("deposits/").length > 0 ? url.split("deposits/")[1].split("/status")[0] : null;
var locationUrl = url;
if (locationUrl.indexOf("http") === -1 && uuid) {
locationUrl = locationUrl.split("/uwt/v1")[1];
}
return uwtClient.get(locationUrl).then(__WEBPACK_IMPORTED_MODULE_0_lodash_get___default()("data"));
};
/**
* Request to enroll a new user on Sightline
*/
var enrollUser = function enrollUser(termsAccepted, accountId) {
return client.post("user/".concat(accountId, "/enroll"), {
termsAccepted: termsAccepted,
version: 2
}).then(__WEBPACK_IMPORTED_MODULE_0_lodash_get___default()("status")).catch(__WEBPACK_IMPORTED_MODULE_3__shared__["a" /* ApiError */].fromAxios);
};
/**
* Request that associates a new payment card to be used in sightline
*/
var addNewCard = function addNewCard(data, accountId) {
return client.post("user/".concat(accountId, "/payment-cards"), data).catch(__WEBPACK_IMPORTED_MODULE_3__shared__["a" /* ApiError */].fromAxios);
};
/**
* Request to transfer funds from a Sightline account to a TVG account
*/
var transferFundsToTVG = function transferFundsToTVG(amount, accountId) {
return client.post("user/".concat(accountId, "/deposit"), {
amount: amount
}).then(function (response) {
return response;
}).catch(__WEBPACK_IMPORTED_MODULE_3__shared__["a" /* ApiError */].fromAxios);
};
/**
* Request to fund slp account with an existing debit/credit card
*/
var fundSightline = function fundSightline(data, accountId, cardId) {
return client.post("user/".concat(accountId, "/funding/").concat(cardId), data).then(__WEBPACK_IMPORTED_MODULE_0_lodash_get___default()("data")).catch(function (err) {
return __WEBPACK_IMPORTED_MODULE_3__shared__["a" /* ApiError */].fromAxios(err, "Funding fail");
});
};
/**
* Request to fund slp account through sightline flow (redirect will not use card id)
*/
var fundSightlineWithoutCardId = function fundSightlineWithoutCardId(data, accountId) {
return client.post("user/".concat(accountId, "/funding"), data).then(__WEBPACK_IMPORTED_MODULE_0_lodash_get___default()("data")).catch(function (err) {
return __WEBPACK_IMPORTED_MODULE_3__shared__["a" /* ApiError */].fromAxios(err, "Funding fail");
});
};
var getSightlineFees = function getSightlineFees(_ref) {
var amount = _ref.amount,
accountId = _ref.accountId;
return client.get("/user/".concat(accountId, "/deposit/fee?depositAmount=").concat(amount)).then(function (data) {
return data.data;
}).catch(function (err) {
return __WEBPACK_IMPORTED_MODULE_3__shared__["a" /* ApiError */].fromAxios(err, "Funding fail");
});
};
/***/ }),
/***/ 77:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_get__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_toInteger__ = __webpack_require__(46);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_toInteger___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_toInteger__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_classnames__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_classnames__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__tvg_conf__ = __webpack_require__(6);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__Titles__ = __webpack_require__(33);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__style_css__ = __webpack_require__(468);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6__style_css__);
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) { if (!REACT_ELEMENT_TYPE) { REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7; } var defaultProps = type && type.defaultProps; var childrenLength = arguments.length - 3; if (!props && childrenLength !== 0) { props = { children: void 0 }; } if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { var childArray = new Array(childrenLength); for (var i = 0; i < childrenLength; i++) { childArray[i] = arguments[i + 3]; } props.children = childArray; } if (props && defaultProps) { for (var propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } else if (!props) { props = defaultProps || {}; } return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : '' + key, ref: null, props: props, _owner: null }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var tvgConf = Object(__WEBPACK_IMPORTED_MODULE_4__tvg_conf__["a" /* default */])();
var twoDecimal = function twoDecimal(num) {
return !isNaN(num) ? parseFloat(num).toFixed(2) : __WEBPACK_IMPORTED_MODULE_1_lodash_toInteger___default()(0).toFixed(2);
};
var getValue = function getValue(balance) {
if (!isNaN(balance)) {
return __WEBPACK_IMPORTED_MODULE_1_lodash_toInteger___default()(balance) < 0 ? "-$".concat(twoDecimal(Math.abs(parseFloat(balance)))) : "$".concat(twoDecimal(parseFloat(balance)));
}
return "$".concat(twoDecimal(0));
};
var _ref = /*#__PURE__*/_jsx("dt", {}, "transactionNumberDt", "Transaction Number:");
var _ref2 = /*#__PURE__*/_jsx(__WEBPACK_IMPORTED_MODULE_5__Titles__["a" /* default */], {
qaLabel: "reviewAndAuthorizeLabel"
}, void 0, "Review and Authorize");
var Review = /*#__PURE__*/function (_Component) {
_inherits(Review, _Component);
var _super = _createSuper(Review);
function Review(props) {
var _this;
_classCallCheck(this, Review);
_this = _super.call(this, props);
_this.state = {
balance: props.balance,
applyError: false,
isFdr: tvgConf.product.indexOf("fdr") === 0
};
return _this;
}
_createClass(Review, [{
key: "componentWillReceiveProps",
value: function componentWillReceiveProps(nextProps) {
this.setState({
balance: nextProps.balance,
applyError: nextProps.applyError
});
}
}, {
key: "renderDepositAmount",
value: function renderDepositAmount() {
return [/*#__PURE__*/_jsx("dt", {
"data-qa-label": "reviewAndAuthorizeTotalLabel"
}, "reviewAndAuthorizeTotalLabelTotal", "Total Deposit to Pre Paid ".concat(this.state.isFdr ? "Card:" : "Play+ Card:")), /*#__PURE__*/_jsx("dd", {
"data-qa-label": "reviewAndAuthorizeTotalValue"
}, "reviewAndAuthorizeTotalValue", /*#__PURE__*/_jsx("strong", {}, void 0, "$", twoDecimal(Math.max(0, this.props.depositAmount))))];
}
}, {
key: "renderCreditCardFeeFull",
value: function renderCreditCardFeeFull() {
var feeValue = this.props.feeFull === undefined ? this.props.fee : this.props.feeFull;
return [/*#__PURE__*/_jsx("dt", {
"data-qa-label": "reviewAndAuthorizeFeeLabelFull"
}, "reviewAndAuthorizeFeeLabelFull", __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(this, 'props.labels["deposit-summary-fee-amount"]')), /*#__PURE__*/_jsx("dd", {
"data-qa-label": "reviewAndAuthorizeFeeValueFull"
}, "reviewAndAuthorizeFeeValueFull", /*#__PURE__*/_jsx("strong", {}, void 0, "$", twoDecimal(feeValue)))];
}
}, {
key: "renderCreditCardFeeRefund",
value: function renderCreditCardFeeRefund() {
return [/*#__PURE__*/_jsx("dt", {
"data-qa-label": "reviewAndAuthorizeFeeLabelRefund"
}, "reviewAndAuthorizeFeeLabelRefund", __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(this, 'props.labels["deposit-summary-fee-refund"]')), /*#__PURE__*/_jsx("dd", {
"data-qa-label": "reviewAndAuthorizeFeeValueRefund"
}, "reviewAndAuthorizeFeeValueRefund", /*#__PURE__*/_jsx("strong", {}, void 0, "$", twoDecimal(this.props.feeRefund)))];
}
}, {
key: "renderTransferAmount",
value: function renderTransferAmount() {
return [/*#__PURE__*/_jsx("dt", {
className: __WEBPACK_IMPORTED_MODULE_3_classnames___default()(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_6__style_css___default.a.error, __WEBPACK_IMPORTED_MODULE_1_lodash_toInteger___default()(this.props.transferAmount) < 0)),
"data-qa-label": "reviewAndAuthorizeAmountLabel"
}, "reviewAndAuthorizeAmountLabel", this.state.isFdr ? "Amount Transferred to FanDuel Racing Account:" : "Amount Transferred to TVG Account:"), /*#__PURE__*/_jsx("dd", {
className: __WEBPACK_IMPORTED_MODULE_3_classnames___default()(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_6__style_css___default.a.error, __WEBPACK_IMPORTED_MODULE_1_lodash_toInteger___default()(this.props.transferAmount) < 0)),
"data-qa-label": "reviewAndAuthorizeAmountValue"
}, "reviewAndAuthorizeAmountValue", /*#__PURE__*/_jsx("strong", {}, void 0, "$", twoDecimal(Math.max(0, this.props.transferAmount))))];
}
}, {
key: "renderRemainingPrePaidBalance",
value: function renderRemainingPrePaidBalance() {
var _classnames3, _classnames4;
return [/*#__PURE__*/_jsx("dt", {
className: __WEBPACK_IMPORTED_MODULE_3_classnames___default()((_classnames3 = {}, _defineProperty(_classnames3, __WEBPACK_IMPORTED_MODULE_6__style_css___default.a.error, parseFloat(this.state.balance) < 0 && this.state.applyError), _defineProperty(_classnames3, "reviewAndAuthorizeRemainingLabel", true), _classnames3)),
"data-qa-label": "reviewAndAuthorizeRemainingLabel"
}, "reviewAndAuthorizeRemainingLabel", "Remaining Pre Paid Balance:"), /*#__PURE__*/_jsx("dd", {
className: __WEBPACK_IMPORTED_MODULE_3_classnames___default()((_classnames4 = {}, _defineProperty(_classnames4, __WEBPACK_IMPORTED_MODULE_6__style_css___default.a.error, parseFloat(this.state.balance) < 0 && this.state.applyError), _defineProperty(_classnames4, "reviewAndAuthorizeRemainingValue", true), _classnames4)),
"data-qa-label": "reviewAndAuthorizeRemainingValue"
}, "reviewAndAuthorizeRemainingValue", /*#__PURE__*/_jsx("strong", {}, void 0, getValue(this.state.balance)))];
}
}, {
key: "renderTransactionNumber",
value: function renderTransactionNumber() {
return [_ref, /*#__PURE__*/_jsx("dd", {}, "transactionNumberDd", /*#__PURE__*/_jsx("strong", {}, void 0, this.props.transactionNumber))];
}
}, {
key: "render",
value: function render() {
return /*#__PURE__*/_jsx("div", {
className: __WEBPACK_IMPORTED_MODULE_6__style_css___default.a.review,
"data-qa-label": this.props.qaLabel.concat("ReviewAndAuthorize")
}, void 0, this.props.title && _ref2, /*#__PURE__*/_jsx("dl", {}, void 0, this.renderDepositAmount(), !this.state.isFdr && this.renderCreditCardFeeFull(), !this.state.isFdr && this.renderCreditCardFeeRefund(), this.renderTransferAmount(), this.renderRemainingPrePaidBalance(), this.props.transactionNumber && this.renderTransactionNumber()));
}
}]);
return Review;
}(__WEBPACK_IMPORTED_MODULE_2_react__["Component"]);
_defineProperty(Review, "defaultProps", {
transactionNumber: null,
title: true,
transferAmount: 0,
depositAmount: 0,
fee: 0,
qaLabel: "",
labels: {
"deposit-summary-fee-refund": "Discount",
"deposit-summary-fee-amount": "Fee"
}
});
/* harmony default export */ __webpack_exports__["a"] = (Review);
/***/ })
},[164]);
// WEBPACK FOOTER //
// sightline.b31fc5891ac719eef7d6.js
webpack:///./src/Sightline/Deposit/Common/CreditCard/index.jsx
// @flow
import React, { Component } from "react";
import classNames from "classnames";
import creditCardType from "credit-card-type";
import { bindAll, get, noop, defaultTo } from "lodash";
import { padCharsStart } from "lodash/fp";
import conf from "@tvg/conf";
import Input from "@tvg/ui-bootstrap/components/Form/Input";
import type { Element } from "react";
import type { Month } from "./Types.js.flow";
import { isValid as isLuhnValid } from "./luhn";
import SecurityNumber from "./SecurityNumber";
import style from "./styles.css";
import Brand from "../Brand";
const tvgConf = conf();
type State = {
/* ...CreditCardType, */
cardNumber: ?string,
expirationMonth: ?Month,
expirationYear: ?number,
securityNumber: ?string,
cardNumberError: ?string,
expirationMonthError: ?string,
expirationYearError: ?string,
securityNumberError: ?string,
securityCodeSize: ?number,
securityCodeLabel: ?string,
cardNumberSize: ?(number[]),
cardNumberGaps: ?(number[]),
isValid: boolean,
cardType: string,
isInvalidMonth: boolean,
maskedCardNumber: ?string,
alreadyErasedMask: boolean,
isFdr: boolean,
isExpirationMonthFocused: boolean,
isExpirationYearFocused: boolean
};
type Props = {
initialCardNumber: string,
initialExpirationMonth: string,
initialExpirationYear: string,
initialSecurityNumber: string,
onChange: (n: State, o: State) => mixed,
onBlur: (n: State, o: State) => mixed,
onCardNumberError: (v: string, e: string[]) => mixed,
onCardNumberChange: (n: State, o: ?State) => mixed,
onCardNumberBlur: (n: State, o: ?State) => mixed,
onCardNumberFill: (n: State, o: ?State) => mixed,
onExpirationMonthChange: (o: Month, n: ?Month) => mixed,
onExpirationMonthBlur: (o: ?Month, n: ?Month) => mixed,
onExpirationMonthFill: (o: ?Month, n: ?Month) => mixed,
onExpirationMonthError: (v: string, e: string[]) => mixed,
onExpirationYearChange: (o: number, n: ?number) => mixed,
onExpirationYearBlur: (o: number, n: ?number) => mixed,
onExpirationYearFill: (o: number, n: ?number) => mixed,
onExpirationYearError: (v: string, e: string[]) => mixed,
onSecurityNumberChange: (o: number, n: ?number) => mixed,
onSecurityNumberBlur: (o: number, n: ?number) => mixed,
onSecurityNumberFill: (o: number, n: ?number) => mixed,
onSecurityNumberError: (v: string, e: string[]) => mixed,
onSecurityTooltipShow: () => mixed,
qaLabel: string,
hadCardFromRedirect: boolean
};
// const getCurrentMonth = () => new Date().getUTCMonth() + 1;
const getCurrentYear = () =>
new Date()
.getUTCFullYear()
.toString()
.substr(2, 3);
const leftPad = padCharsStart("0", 2);
const toMonth = (month: string | number): ?Month => {
const monthNum = parseInt(month, 10);
return monthNum > 0 && monthNum <= 12 ? ((monthNum: any): Month) : null; // eslint-disable-line flowtype/no-weak-types
};
class CreditCard extends Component {
static findCardType(cardNumber: string) {
const card = cardNumber.length
? creditCardType(cardNumber).shift() || {}
: {};
const whiteList = ["VISA", "MASTERCARD", "DISCOVER", "UNKNOWN"];
const whiteListLabels = ["CVV", "CVC", "CID"];
const securityLabel = get(card, "code.name", "CVV");
const cardType = get(card, "niceType", "UNKNOWN").toUpperCase();
const cardNumberSize = get(card, "length", [16]);
return {
cardType: whiteList.indexOf(cardType) !== -1 ? cardType : "UNKNOWN",
cardNumberSize,
cardNumberGaps: get(card, "gaps", [4, 8, 12]),
securityCodeLabel:
whiteListLabels.indexOf(securityLabel) !== -1 ? securityLabel : "CVV",
securityCodeSize: get(card, "code.size", 3),
isValid:
cardNumberSize.indexOf(cardNumber.length) !== -1 &&
isLuhnValid(cardNumber) &&
whiteList.indexOf(cardType) !== -1
};
}
static isInvalidMonth(
month: ?Month,
year: ?number,
nowMonth = new Date().getMonth() + 1,
nowYear = new Date().getFullYear()
) {
return (
!(
(month && year && month >= nowMonth && year >= nowYear) ||
year > nowYear
) || // to allow lower months but greater years
month === "" ||
year === ""
);
}
static defaultProps = {
initialCardNumber: "",
initialExpirationMonth: "",
initialExpirationYear: "",
initialSecurityNumber: "",
onChange: noop,
onBlur: noop,
onCardNumberChange: noop,
onCardNumberBlur: noop,
onCardNumberFill: noop,
onCardNumberError: noop,
onExpirationMonthChange: noop,
onExpirationMonthBlur: noop,
onExpirationMonthFill: noop,
onExpirationMonthError: noop,
onExpirationYearChange: noop,
onExpirationYearBlur: noop,
onExpirationYearFill: noop,
onExpirationYearError: noop,
onSecurityNumberChange: noop,
onSecurityNumberBlur: noop,
onSecurityNumberFill: noop,
onSecurityNumberError: noop,
onSecurityTooltipShow: noop,
qaLabel: "",
hadCardFromRedirect: false
};
constructor(props: Props) {
super(props);
bindAll(this, [
"handleCardNumberChange",
"handleCardNumberBlur",
"handleSecurityNumberChange",
"handleSecurityNumberBlur",
"handleExpirationMonthChange",
"handleExpirationMonthBlur",
"handleExpirationYearChange",
"handleExpirationYearBlur",
"validateCardNumber",
"handleExpirationMonthFocus",
"handleExpirationYearFocus"
]);
this.state = {
// Copy initial seed props
cardNumber: this.props.initialCardNumber,
expirationMonth: this.props.initialExpirationMonth,
expirationYear: this.props.initialExpirationYear,
securityNumber: this.props.initialSecurityNumber,
// Find the initial Card type or return a default card
...CreditCard.findCardType(this.props.initialCardNumber),
// Error messages
cardNumberError: null,
expirationMonthError: null,
expirationYearError: null,
securityNumberError: null,
isInvalidMonth: false,
maskedCardNumber: this.props.initialCardNumber.replace(
/.(?=.{4,}$)/g,
"*"
),
alreadyErasedMask: false,
isFdr: tvgConf.product.indexOf("fdr") === 0,
isExpirationMonthFocused: false,
isExpirationYearFocused: false
};
}
state: State;
componentDidMount() {
if (this.props.initialExpirationMonth || this.props.initialExpirationYear) {
this.handleExpirationMonthChange(this.props.initialExpirationMonth);
this.handleExpirationYearChange(this.props.initialExpirationYear);
}
if (this.props.initialCardNumber && this.props.hadCardFromRedirect) {
this.validateCardNumber(this.props.initialCardNumber);
// trigger cvv error - to be refactored (when the input component changes)
// eslint-disable-next-line
this.setState({ securityNumber: "0" }, () =>
this.setState({ securityNumber: "" })
);
}
}
props: Props;
validateCardNumber(cardNumber: string): void {
this.setState({ isValid: true }, () =>
this.setState({ isValid: isLuhnValid(cardNumber) })
);
}
handleCardNumberChange(cardNumber: string): void {
const card = CreditCard.findCardType(cardNumber);
const oldState = this.state;
const oldCardNumber = oldState.cardNumber;
const newState = { ...this.state, cardNumber, ...card };
if (this.props.hadCardFromRedirect && !this.state.alreadyErasedMask) {
newState.cardNumber = "";
newState.alreadyErasedMask = true;
}
this.setState(newState, () => {
if (this.state.cardNumber !== oldCardNumber) {
this.props.onCardNumberChange(newState, oldState);
this.props.onChange(newState, oldState);
}
});
}
handleCardNumberBlur(cardNumber: string): void {
const card = CreditCard.findCardType(cardNumber);
const oldState = this.state;
const newState = { ...this.state, cardNumber, ...card };
if (this.props.hadCardFromRedirect && !this.state.alreadyErasedMask) {
newState.cardNumber = "";
newState.alreadyErasedMask = true;
}
this.setState(newState, () => {
this.props.onCardNumberBlur(newState, oldState);
this.props.onBlur(newState, oldState);
});
}
handleExpirationMonthChange(newMonth: string) {
const oldState = this.state;
const expirationMonth = toMonth(newMonth);
let isInvalidMonth = CreditCard.isInvalidMonth(
newMonth,
`20${this.state.expirationYear}`
);
if (!this.state.expirationYear && !this.state.isFdr) {
isInvalidMonth = false; // not to show error whenever the only input fulfilled is the month one
}
if (expirationMonth && this.state.expirationMonth !== expirationMonth) {
this.setState({ expirationMonth, isInvalidMonth }, () => {
this.props.onExpirationMonthChange(
expirationMonth,
oldState.expirationMonth
);
this.props.onChange(this.state, oldState);
});
} else if (!expirationMonth || expirationMonth === "") {
this.setState({ expirationMonth: "", isInvalidMonth }, () => {
this.props.onChange(this.state, oldState);
});
}
}
handleExpirationMonthBlur(newMonth: Month) {
this.setState({ isExpirationMonthFocused: false });
const oldState = this.state;
let isInvalidMonth = CreditCard.isInvalidMonth(
newMonth,
`20${this.state.expirationYear}`
);
const bluredMonth = toMonth(newMonth);
if (!this.state.expirationYear && !this.state.isFdr) {
isInvalidMonth = false; // not to show error whenever the only input fulfilled is the month one
}
if (bluredMonth && bluredMonth !== "") {
let month = "";
if (bluredMonth && bluredMonth > 0) {
month =
bluredMonth.toString().length === 1
? leftPad(bluredMonth.toString())
: +bluredMonth.toString();
}
this.setState({ expirationMonth: month, isInvalidMonth }, () => {
this.props.onExpirationMonthBlur(month, oldState.expirationMonth);
this.props.onBlur(this.state, oldState);
});
} else if (!bluredMonth || bluredMonth === "") {
this.setState({ expirationMonth: "", isInvalidMonth }, () => {
this.props.onBlur(this.state, oldState);
});
}
}
handleExpirationYearChange(newYear: string) {
const oldState = this.state;
const expirationYear = parseInt(newYear, 10);
const isInvalidMonth = CreditCard.isInvalidMonth(
this.state.expirationMonth,
`20${newYear}`
);
this.setState({ expirationYear, isInvalidMonth }, () => {
this.props.onExpirationYearChange(
expirationYear,
oldState.expirationYear
);
this.props.onChange(this.state, oldState);
});
}
handleExpirationYearBlur(newYear: string) {
const oldState = this.state;
const expirationYear = parseInt(newYear, 10);
const isInvalidMonth = CreditCard.isInvalidMonth(
this.state.expirationMonth,
`20${newYear}`
);
this.setState(
{ expirationYear, isInvalidMonth, isExpirationYearFocused: false },
() => {
this.props.onExpirationYearBlur(
expirationYear,
oldState.expirationYear
);
this.props.onBlur(this.state, oldState);
}
);
}
handleExpirationMonthFocus() {
this.setState({
isExpirationMonthFocused: true
});
}
handleExpirationYearFocus() {
this.setState({
isExpirationYearFocused: true
});
}
handleSecurityNumberChange(newSecurityNumber: string) {
const oldState = this.state;
const securityNumber = newSecurityNumber;
this.setState({ securityNumber }, () => {
this.props.onSecurityNumberChange(
securityNumber,
oldState.securityNumber
);
this.props.onChange(this.state, oldState);
});
}
handleSecurityNumberBlur(newSecurityNumber: string) {
const oldState = this.state;
const securityNumber = newSecurityNumber;
this.setState({ securityNumber }, () => {
this.props.onSecurityNumberBlur(securityNumber, oldState.securityNumber);
this.props.onBlur(this.state, oldState);
});
}
renderCardBrandIcon(): Element<*> {
const dimensions = { width: "30px", height: "18px" };
const cardType = this.state.cardType;
const classes = classNames([
"js-card-icon",
`js-card-${cardType}`,
style[cardType],
style.cardBrand
]).toLowerCase();
return <Brand brand={cardType} className={classes} {...dimensions} />;
}
renderCardNumber(): Element<*> {
const classes = classNames(["js-card-number", style.cardNumber]);
return (
<div className={style.cardNumberWrapper}>
<Input
className={classes}
required
type={
this.props.hadCardFromRedirect && !this.state.alreadyErasedMask
? "text"
: "number"
}
size="small"
dislabelText="Card Number"
forbidInput={key =>
key === 101 || key === 189 || key === 46 || key < 48 || key > 57
}
placeholder="0000 0000 0000 0000"
value={
this.props.hadCardFromRedirect && !this.state.alreadyErasedMask
? this.state.maskedCardNumber
: defaultTo(this.state.cardNumber, "")
}
onChange={this.handleCardNumberChange}
onBlur={this.handleCardNumberBlur}
onFill={this.props.onCardNumberFill}
onError={this.props.onCardNumberError}
labelText="Credit Card Number"
maxLength={Math.max(...(this.state.cardNumberSize || []))}
autocomplete="cc-number"
customError={!this.state.isValid}
messages={{
required: "Card number is invalid",
customError: "Card number is invalid"
}}
qaLabel="cardNumber"
preventOnErrorOnChange
/>
{this.renderCardBrandIcon()}
</div>
);
}
renderExpirationMonth(): Element<*> {
return (
<Input
className={classNames(["js-expiration-month", style.expirationMonth])}
required
type="number"
size="small"
placeholder="MM"
maxLength={2}
min={1}
max={12}
value={this.state.expirationMonth}
forbidInput={key =>
key === 101 || key === 189 || key === 46 || key < 48 || key > 57
}
onFocus={this.handleExpirationMonthFocus}
onBlur={this.handleExpirationMonthBlur}
onChange={this.handleExpirationMonthChange}
onFill={this.props.onExpirationMonthFill}
onError={this.props.onExpirationMonthError}
showIcon={false}
autocomplete="cc-exp-month"
customError={this.state.isInvalidMonth}
messages={{
required: "Date is invalid (MM/YY)",
min: "Date is invalid (MM/YY)",
max: "Date is invalid (MM/YY)",
customError: "Date can not be in the past"
}}
qaLabel="expiryDateMonth"
preventOnErrorOnChange
/>
);
}
renderExpirationYear(): Element<*> {
return (
<Input
className={classNames(["js-expiration-year", style.expirationYear])}
required
type="number"
size="small"
value={(this.state.expirationYear || "").toString()}
placeholder="YY"
min={getCurrentYear()}
maxLength={2}
forbidInput={key =>
key === 101 || key === 189 || key === 46 || key < 48 || key > 57
}
onFocus={this.handleExpirationYearFocus}
onChange={this.handleExpirationYearChange}
onBlur={this.handleExpirationYearBlur}
onFill={this.props.onExpirationYearFill}
onError={this.props.onExpirationYearError}
showIcon={false}
autocomplete="cc-exp-year"
messages={{
required: "Date is invalid (MM/YY)",
min: "Date can not be in the past"
}}
qaLabel="expiryDateYear"
preventOnErrorOnChange
/>
);
}
renderSecurityNumber(): Element<*> {
return (
<SecurityNumber
value={this.state.securityNumber}
className="js-security-number"
maxLength={this.state.securityCodeSize}
labelText={this.state.securityCodeLabel}
onChange={this.handleSecurityNumberChange}
onBlur={this.handleSecurityNumberBlur}
onFill={this.props.onSecurityNumberFill}
onError={this.props.onSecurityNumberError}
onTooltipShow={this.props.onSecurityTooltipShow}
/>
);
}
render(): Element<*> {
const cvvClasses = classNames({
"row-cvv": true,
row: true
});
const expirationDateClasses = classNames({
"expiry-date-label": true,
"expiry-date-label-focused":
this.state.isExpirationMonthFocused ||
this.state.isExpirationYearFocused,
"expiry-date-label-error": this.state.isInvalidMonth
});
return (
<fieldset
className={style.containerFieldset}
data-qa-label={this.props.qaLabel.concat("CardDetails")}
>
<legend>Credit Card</legend>
{this.renderCardNumber()}
<div className={style.row}>
<fieldset className={style.expirationDate}>
<legend
data-qa-label="expiryDateLabel"
className={expirationDateClasses}
>
{this.state.isFdr ? "Expiration Date (MM/YY)" : "Expiry Date"}
</legend>
{this.renderExpirationMonth()}
<span className={style.divider} data-qa-label="expiryDateSplitBar">
/
</span>
{this.renderExpirationYear()}
</fieldset>
{!this.state.isFdr && this.renderSecurityNumber()}
</div>
<p
className={style.information}
data-qa-label="cardDetailsHelperMessage"
>
Card details are securely stored for future transactions
</p>
<div className={cvvClasses}>
{this.state.isFdr && this.renderSecurityNumber()}
</div>
</fieldset>
);
}
}
export default CreditCard;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/CreditCard/index.jsx
webpack:///./src/Sightline/Deposit/Common/CreditCard/SecurityNumber/index.jsx
// @flow
import React from "react";
import type { Element } from "react";
import classnames from "classnames";
import { defaultTo, noop } from "lodash";
import Input from "@tvg/ui-bootstrap/components/Form/Input";
import style from "./style.css";
import securityImage from "./assets/security-number.png";
type Props = {
className?: string,
maxLength?: number,
labelText: string,
onChange: (e: string) => mixed,
onBlur: (v: string, b: boolean) => mixed,
onFill: (v: string, b: boolean) => mixed,
onError: (v: string, b: mixed) => mixed,
onTooltipShow: () => mixed,
value: string
};
const SecurityNumber = (props: Props): Element<*> => (
<Input
className={classnames(props.className, style.securityNumber)}
required
type="tel" // we need minLength here
size="small"
maxLength={props.maxLength}
minLength={3}
labelText={props.labelText}
forbidInput={key =>
key === 101 || key === 189 || key === 46 || key < 48 || key > 57
}
placeholder="XXX"
onChange={props.onChange}
pattern="^\d{1,3}$"
value={defaultTo(props.value, "")}
showIcon={false}
onBlur={props.onBlur}
onFill={props.onFill}
onError={props.onError}
preventOnErrorOnChange
onTooltipShow={props.onTooltipShow}
autocomplete="cc-csc"
messages={{
required: "Valid number required",
tooShort: "Valid number required",
pattern: "Valid number required"
}}
qaLabel="cvv"
>
<img
src={securityImage}
width="150px"
alt="Security Number"
data-qa-label="cvvHelperModal"
/>
</Input>
);
SecurityNumber.defaultProps = {
value: "",
className: "",
maxLength: 3,
labelText: "CVC",
onChange: noop,
onBlur: noop,
onFill: noop,
onError: noop
};
export default SecurityNumber;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/CreditCard/SecurityNumber/index.jsx
webpack:///./src/Sightline/Deposit/Common/Brand/index.jsx
// @flow
import React from "react";
import type { BrandProps } from "./Types.js.flow";
import { BrandsIcons } from "./utils";
const EmptyTemplate = props => <span {...props} />;
const Brand = (props: BrandProps) => {
const BrandIcon = BrandsIcons[props.brand] || EmptyTemplate;
return (
<BrandIcon
className={props.className}
data-qa-label={props.qaLabel}
{...props.dimensions}
/>
);
};
Brand.defaultProps = {
brand: "UNKNOWN",
className: "",
qaLabel: "brand-icon",
dimensions: {}
};
export default Brand;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/Brand/index.jsx
webpack:///./src/Sightline/Deposit/Common/Transfer/index.jsx
// @flow
import React from "react";
import Input from "@tvg/ui-bootstrap/components/Form/Input";
import { noop } from "lodash";
import classnames from "classnames";
import SLPConfigs from "../../../../data/parameterization.json";
import style from "./style.css";
type Props = {
max: number,
value: string | number,
onChange: (v: string, c: boolean) => mixed,
onBlur: (e: string) => mixed,
onFill: (v: string, c: boolean) => mixed,
onError: (v: string, c: mixed) => mixed,
qaLabel: string
};
const customMsgsToTransfer = {
valueMissing: "Field is Required",
required: "Field is Required",
min: `Minimum $${SLPConfigs.sightlineTransferConfigs.minValue}`,
max:
"Insufficient funds to transfer your requested amount. Please take note of any transaction fee on the Review and Authorize Pane below",
pattern: "Invalid Value",
tooLong: "Too long",
tooShort: "Too short value",
badInput: "Invalid Value",
stepMismatch: "Maximum 2 decimal points"
};
const Transfer = (props: Props) => (
<div data-qa-label={props.qaLabel.concat("TransferToTVG")}>
<Input
value={props.value || ""}
type="number"
forbidInput={key =>
key === 101 ||
key === 189 ||
((key < 48 || key > 57) && key !== 8 && key !== 44 && key !== 46)
}
size="small"
required
currency
className={classnames(style.transfer)}
min={SLPConfigs.sightlineTransferConfigs.minValue}
max={props.max}
onChange={props.onChange}
onBlur={props.onBlur}
onFill={props.onFill}
onError={props.onError}
messages={customMsgsToTransfer}
qaLabel="transferToTVG"
/>
</div>
);
Transfer.defaultProps = {
onChange: noop,
onBlur: noop,
onFill: noop,
onError: noop,
onTooltipShow: noop,
qaLabel: ""
};
export default Transfer;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/Transfer/index.jsx
webpack:///./src/data/parameterization.json
module.exports = {"sightlineDepositConfigs":{"minValue":10},"sightlineTransferConfigs":{"minValue":10}}
//////////////////
// WEBPACK FOOTER
// ./src/data/parameterization.json
// module id = 158
// module chunks = 0
webpack:///./src/Sightline/Deposit/Common/DepositAmount/index.jsx
// @flow
import React, { Component } from "react";
import { noop, bindAll } from "lodash";
import type { Element } from "react";
import Button from "@tvg/ui-bootstrap/components/Buttons";
import Input from "@tvg/ui-bootstrap/components/Form/Input";
import type { Messages } from "@tvg/ui-bootstrap/components/Form/Input/Types.js.flow";
import SLPConfigs from "../../../../data/parameterization.json";
import styles from "./styles.css";
type CallbackFn = (value: string, isValid: boolean) => mixed | void;
type Props = {
/**
* Function to run when the value of the input is changed
*/
onChange: CallbackFn,
/**
* Function to run when user leaves input
*/
onBlur: CallbackFn,
onFill: CallbackFn,
/**
* Function to run when the user clicks on an option button
*/
onButtonClick: CallbackFn,
onError: CallbackFn,
/**
* Array of Default Values for the buttons
*/
values: string[],
/**
* Error messages
* @type {Messages}
*/
messages: Messages,
/**
* Default Value
* @type {String}
*/
value: string,
onTooltipShow: (v: string) => mixed,
message: string,
qaLabel: string,
isFdr: boolean
};
type State = {
inputValue: string
};
/**
* TVG DepositAmount Component
*/
class DepositAmount extends Component {
static defaultProps = {
values: ["50", "100", "300"],
value: "",
onChange: noop,
onBlur: noop,
onButtonClick: noop,
onError: noop,
messages: {
required: "Field is Required",
min: `Minimum $${SLPConfigs.sightlineDepositConfigs.minValue}`,
max: "Value is higher than allowed",
pattern: "Invalid Value",
tooLong: "Too long",
tooShort: "Too short value",
badInput: "Invalid Value",
stepMismatch: "Maximum 2 decimal points"
},
qaLabel: "",
isFdr: false
};
constructor(props: Props) {
super(props);
this.state = { inputValue: this.props.value };
bindAll(this, ["handleButtonClick", "setValue"]);
}
state: State;
setValue: (i: string) => void;
setValue(value: string) {
const isFloat = !!(
!isNaN(value) &&
(value.indexOf(".") !== -1 || value.indexOf(",") !== -1)
);
const twoDecimals =
parseFloat(value).toFixed(2) === value ||
parseFloat(value).toFixed(1) === value;
const isValid = isFloat
? !!value &&
value.length > 0 &&
value !== "" &&
value !== "0" &&
twoDecimals
: !!value && value.length > 0 && value !== "" && value !== "0";
if (value !== this.state.inputValue) {
this.setState({ inputValue: value });
this.props.onChange(value, isValid);
}
}
handleButtonClick: (i: string) => void;
handleButtonClick(value: string) {
this.props.onButtonClick(value, true);
this.setValue(value);
}
props: Props;
renderButtons(): Element<*>[] {
return this.props.values.map((value, i) => (
<Button
key={i.toString()}
type="secondary"
value={value}
isSelected={parseInt(value, 10) === parseInt(this.state.inputValue, 10)}
onClick={this.handleButtonClick}
qaLabel={`default${i + 1}`}
>
${value}
</Button>
));
}
render() {
return (
<div className={styles.depositAmount} data-qa-label={this.props.qaLabel}>
<div className={styles.defaultAmounts}>{this.renderButtons()}</div>
<span className={styles.or} data-qa-label="orLabel">
Or
</span>
<Input
className={styles.depositAmountInput}
type="number"
size="small"
onBlur={this.props.onBlur}
onFill={this.props.onFill}
onError={this.props.onError}
min={SLPConfigs.sightlineDepositConfigs.minValue}
onChange={this.setValue}
value={this.state.inputValue}
forbidInput={key =>
key === 101 ||
key === 189 ||
((key < 48 || key > 57) && key !== 8 && key !== 44 && key !== 46)
}
maxLength={6}
placeholder="Other Amount"
required
currency
messages={this.props.messages}
onTooltipShow={this.props.onTooltipShow}
qaLabel="otherAmount"
>
<p data-qa-label="otherAmountHelperTooltipContent">
{!this.props.isFdr
? this.props.message
: this.props.message
.replace(/TVG/g, "FanDuel")
.replace(/Play\+/g, "")}
</p>
</Input>
</div>
);
}
}
export default DepositAmount;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/DepositAmount/index.jsx
webpack:///./src/Sightline/Deposit/Common/BankDisclaimer/index.jsx
// @flow
import React from "react";
import style from "./style.css";
const Disclaimer = (): Element<*> => (
<p className={style.disclaimer} data-qa-label="bankDisclaimer">
Discover®, the Discover Acceptance Mark, PULSE®, and the PULSE Logo are
service marks used by Sutton Bank, Member FDIC, under license from Discover.
</p>
);
export default Disclaimer;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/BankDisclaimer/index.jsx
webpack:///./src/Sightline/Deposit/Common/CreditCard/utils.js
const validCard = card =>
card &&
card.isValid &&
(!card.securityNumberError && card.securityNumber) &&
(!card.expirationMonthError && card.expirationMonth) &&
(!card.expirationYearError &&
card.expirationYear &&
card.expirationYear.toString().length === 2) &&
card.isInvalidMonth === false &&
card.securityNumber.toString().length === 3 &&
/^0*$/.test(card.securityNumber.toString()) === false && // allZeros
/^\d+$/.test(card.securityNumber.toString()) === true; // allNumbers
// We may need to export more
export { validCard }; //eslint-disable-line
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/CreditCard/utils.js
webpack:///./src/Sightline/Deposit/Enrolled/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","sightline-deposit":"sightline-deposit","sightlineDeposit":"sightline-deposit","authorize":"authorize","defaultCard":"defaultCard","black-list-card":"black-list-card","blackListCard":"black-list-card","addCardModal":"addCardModal","scroll":"scroll","header":"header","addCardBody":"addCardBody","addCardButton":"addCardButton","balance":"balance","openSlideDown":"openSlideDown","slpEnrolledMsg":"slpEnrolledMsg","enrolled-warning-text-wrapper":"enrolled-warning-text-wrapper","enrolledWarningTextWrapper":"enrolled-warning-text-wrapper","warning-add-card-box":"warning-add-card-box","warningAddCardBox":"warning-add-card-box"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/Enrolled/style.css
// module id = 162
// module chunks = 0
webpack:///./src/Sightline/Deposit/index.legacy.jsx
// @flow
import "@tvg/ui-bootstrap/assets/fonts/LinotypeUnivers-CondBold/LinotypeUnivers-CondBold.css";
import React from "react";
import { render, unmountComponentAtNode } from "react-dom";
import { Provider } from "react-redux";
import { BrowserRouter as Router } from "react-router-dom";
import Sightline from "./";
import configureStore from "../../configureStore";
import {
fetchCAPI,
fetchFeatures,
fetchTVGUserAccountDetails
} from "../../Pages/actions";
import type { WrapperDepositInfo } from "./Types.js.flow";
import "../styles.css";
type Props = {
depositInfo: WrapperDepositInfo,
showRedirectMessage: boolean,
isAuthenticated: boolean,
onPaymentComplete: () => mixed,
onFundComplete: () => mixed,
onDepositComplete: (payload: mixed) => mixed,
onDepositComplete: () => mixed
};
export const mount = (placeholder: HTMLElement, props: Props) => {
const store = configureStore();
// This gets capi stuff since deposit does not need it LEGACY
store.dispatch(fetchCAPI());
store.dispatch(fetchFeatures());
store.dispatch(fetchTVGUserAccountDetails());
// Populate store on loading
store.dispatch({ type: "LEGACY_WRAPPER_DATA", data: props });
return render(
<Provider store={store}>
<Router>
<Sightline
onPaymentComplete={props.onPaymentComplete}
onFundComplete={props.onFundComplete}
onDepositComplete={props.onDepositComplete}
onInvalidCardType={props.onInvalidCardType}
/>
</Router>
</Provider>,
placeholder
);
};
export const destroy = (placeholder: HTMLElement) =>
unmountComponentAtNode(placeholder);
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/index.legacy.jsx
webpack:///./src/Sightline/Deposit/index.jsx
// @flow
import React, { Component } from "react";
import { connect } from "react-redux";
import Loading from "@tvg/ui-bootstrap/components/Loading";
import Notification from "@tvg/ui-bootstrap/components/Notifications";
import { get, has, replace, toNumber } from "lodash";
import {
clearInvalidCardModal,
getSightlineAccountInfo,
resetAllOperationState
} from "./actions";
import { showNotification, isFetching } from "./selectors";
import ConnectedNotEnrolled from "./NotEnrolled";
import ConnectedEnrolled from "./Enrolled";
import type { Action } from "./actions";
import type { AccountInfo, CAPI, WrapperDepositInfo } from "./Types.js.flow";
import style from "./style.css";
type State = {
error: boolean,
debounce: boolean
};
type Props = {
dispatch: Dispatch<Action>,
isFetching: boolean,
sightlineUserAccount: AccountInfo,
showRedirectMessage: boolean,
isAuthenticated: boolean,
features: mixed,
userAccountDetails: mixed,
onPaymentComplete: () => mixed,
onFundComplete: () => mixed,
onInvalidCardType: () => mixed,
capi: CAPI,
notification: mixed,
wrapperDepositInfo: ?WrapperDepositInfo,
alreadyProcessedRedirect: boolean,
isOpenInvalidCardModal: boolean
};
const mapStateToProps = state => ({
capi: state.capi,
features: state.features,
isFetching: isFetching(state),
userAccountDetails: state.userAccountDetails,
isAuthenticated: state.isAuthenticated.success,
sightlineUserAccount: state.deposits.sightline.sightlineUserAccount,
showRedirectMessage: state.deposits.showRedirectMessage,
notification: showNotification(state),
wrapperDepositInfo: state.deposits.wrapperDepositInfo,
alreadyProcessedRedirect: state.deposits.alreadyProcessedRedirect,
isOpenInvalidCardModal: state.deposits.sightline.invalidCardModal.isOpen
});
export class Deposit extends Component<void, Props, State> {
constructor(props: Props) {
super(props);
this.state = {
error: false,
debounce: false
};
this.handleDebounce = this.handleDebounce.bind(this);
}
state: State;
componentDidUpdate(prevProps: Props) {
if (
typeof this.props.onInvalidCardType === "function" &&
this.props.isOpenInvalidCardModal &&
prevProps.isOpenInvalidCardModal !== this.props.isOpenInvalidCardModal
) {
this.props.onInvalidCardType();
this.props.dispatch(clearInvalidCardModal());
}
if (
!this.props.sightlineUserAccount.isFetching &&
!this.props.sightlineUserAccount.success &&
!this.props.sightlineUserAccount.error
) {
let accountId = get(
this.props,
"userAccountDetails.accountDetails.accountDetails.accountNumber",
this.props.userAccountDetails.accountNumber
);
if (!accountId) {
accountId =
get(this.props, "userAccountDetails.accountDetails.accountNumber") ||
get(
this.props,
"userAccountDetails.accountDetails.accountDetails.accountNumber"
);
}
if (accountId) {
return this.props.dispatch(getSightlineAccountInfo(accountId, true));
}
}
return this;
}
setNotificationProps(status) {
if (!status) {
return { show: false };
}
let message;
let type;
let title;
if (status.error || typeof status === "string") {
let path;
if (typeof status === "string") {
path = status;
} else if (typeof status.error === "string") {
path = status.error;
} else {
path = get(status, "error.code");
}
message = get(
this.props.capi,
path,
status.error
? this.props.capi.SLP_GENERIC_ERROR
: this.props.capi.SLP_GENERIC_SUCCESS
);
}
if (
status.error &&
status.error.message &&
status.error.message.indexOf("scenario") !== -1
) {
const messages = get(this.props.capi, "sightlineDepositMessages");
message = JSON.parse(messages)[status.error.message];
title = "";
}
if (status.success && typeof status !== "string") {
// only fund was successful
const amount = `<strong>$${parseFloat(status.fundedAmount).toFixed(
2
)}</strong>`;
message = `You funded your Pre Paid Play+ Card with ${amount}. You now need to transfer this amount to your TVG Account.`;
type = "warning";
}
const statusMessage = status.error ? "error" : "success";
if (title !== "") {
title = status.error
? "DEPOSIT FAILED!"
: status.success && typeof status !== "string" && "FUND SUCCESSFUL";
}
if (has(status, "errorData")) {
const errorType = get(status, "errorData.type");
if (errorType === "RESP_GAMING_LIMITS_EXCEEDED") {
const floatRegex = new RegExp(/\d*\.\d*/g);
const limit = toNumber(
get(status, "errorData.message", "").match(floatRegex)[0]
).toFixed(2);
message = replace(message, "[limit]", limit);
}
}
if (!type) {
type = status.notifType ? status.notifType : statusMessage;
}
return {
show: true,
type,
title,
message,
onClose: () => this.props.dispatch(resetAllOperationState()),
icon: true,
dismissible: true,
scrollTop: true
};
}
props: Props;
handleDebounce() {
this.setState({ debounce: true });
setTimeout(() => {
this.setState({ debounce: false });
}, parseInt(this.props.capi.debounceAfterDeposit, 10) || 0);
}
isEnrolled() {
return (
this.props.sightlineUserAccount.enrolled ||
get(this.props, "sightlineUserAccount.cards.length", 0)
);
}
render() {
const declinedCardList = ["VISA"];
if (this.props.isFetching) {
return <Loading size="big" show />;
}
if (
!this.props.isAuthenticated ||
!this.props.sightlineUserAccount.success
) {
return (
<Notification
type="error"
title={this.props.capi.slpPaymentMethodErrorMsg}
message={this.props.capi.slpAssistanceMsg}
show
icon
dismissable={false}
/>
);
}
return (
<div className={style.sightlineDeposit}>
<Notification {...this.setNotificationProps(this.props.notification)} />
{this.isEnrolled() ? (
<ConnectedEnrolled
onPaymentComplete={this.props.onPaymentComplete}
onFundComplete={this.props.onFundComplete}
onHandleDebounce={this.handleDebounce}
debounce={this.state.debounce}
declinedCardList={declinedCardList}
/>
) : (
<ConnectedNotEnrolled
onFundComplete={this.props.onFundComplete}
declinedCardList={declinedCardList}
/>
)}
</div>
);
}
}
export default connect(mapStateToProps)(Deposit);
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/index.jsx
webpack:///./src/services/utils.js
/*
@fn function that executes a request and returns the value of the break condition
@timeout expiration time for the poller (requests will be made until that time) - milliseconds
@interval time between requests - milliseconds
*/
const poller = (fn, timeout, interval) => {
const endTime = Number(new Date()) + (timeout || 300000);
const interv = interval || 3000;
const checkCondition = (resolve, reject) => {
// If the condition is met, we're done!
const result = fn();
if(result.then) {
result.then((res) => {
if((res === "FINISH_DEPOSIT_SUCCESS" || res === "FINISH_DEPOSIT_ERROR") ||
window.pollerRes && (window.pollerRes === "FINISH_DEPOSIT_SUCCESS" || window.pollerRes === "FINISH_DEPOSIT_ERROR")) {
resolve(res === "FINISH_DEPOSIT_SUCCESS" || window.pollerRes === "FINISH_DEPOSIT_SUCCESS");
}
// If the condition isn't met but the timeout hasn't elapsed, go again
else if (Number(new Date()) < endTime) {
setTimeout(checkCondition, interv, resolve, reject);
}
// Didn't match and too much time, reject!
else {
reject(new Error(`timed out for ${ fn }: ${ arguments}`));
}
})
} else if(result) {
resolve(result);
}
// If the condition isn't met but the timeout hasn't elapsed, go again
else if (Number(new Date()) < endTime) {
setTimeout(checkCondition, interv, resolve, reject);
}
// Didn't match and too much time, reject!
else {
reject(new Error(`timed out for ${ fn }: ${ arguments}`));
}
};
return new Promise(checkCondition);
};
/*
EXECUTION EXAMPLE
------------------------
function ajaxRequest () {
return axios.get('https://jsonplaceholder.typicode.com/posts/1')
}
poll(function() {
return ajaxRequest().then(function(data){
return data.status === 200;
});
}, 100, 150).then(function(data) {
console.log('done', data);
}).catch(function(err) {
console.error(err);
console.error('lel');
});
*/
export default poller;
// WEBPACK FOOTER //
// ./src/services/utils.js
webpack:///./src/Sightline/Deposit/selectors.js
// @flow
export const showNotification = state =>
(state.deposits.sightline.enrollUser &&
state.deposits.sightline.enrollUser.error) ||
(state.deposits.sightline.fundSightline.success &&
state.deposits.sightline.transferToTVG.error &&
!state.deposits.sightline.transferToTVG.isFetching &&
state.deposits.sightline.fundSightline) ||
(state.deposits.sightline.transferToTVG &&
state.deposits.sightline.transferToTVG.error) ||
((!state.deposits.sightline.transferToTVG.success ||
!state.deposits.sightline.fundSightline.success) &&
state.deposits.sightline.addNewCard &&
state.deposits.sightline.addNewCard.success) ||
(state.deposits.sightline.fundSightline.error &&
!state.deposits.sightline.transferToTVG.success &&
!state.deposits.sightline.transferToTVG.isFetching &&
state.deposits.sightline.fundSightline.error) ||
(state.deposits.sightline.addNewCard &&
!state.deposits.sightline.transferToTVG.success &&
state.deposits.sightline.addNewCard.error) ||
null;
export const isFetching = state =>
state.deposits.sightline.isProcessingRedirect ||
state.isAuthenticated.isFetching ||
state.deposits.sightline.addNewCard.isFetching ||
state.isFetchingCAPI ||
state.deposits.sightline.wrapperDepositInfo ||
state.deposits.sightline.isFetching ||
state.deposits.sightline.fundSightline.isFetching ||
(state.deposits.sightline.transferToTVG.isFetching &&
!state.deposits.sightline.transferToTVG.error) ||
state.deposits.sightline.sightlineUserAccount.isFetching;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/selectors.js
webpack:///./src/Sightline/Deposit/NotEnrolled/index.jsx
// @flow
import React, { Component } from "react";
import { connect } from "react-redux";
import { get, bindAll, debounce, attempt, isError } from "lodash";
import conf from "@tvg/conf";
import Lock from "@tvg/ui-bootstrap/assets/svg/lock.svg";
import Button from "@tvg/ui-bootstrap/components/Buttons";
import MarketingBanner from "./MarketingBanner";
import PrivacyDisclosure from "./PrivacyDisclosure";
import CreditCard from "../Common/CreditCard";
import Transfer from "../Common/Transfer";
import Title from "../Common/Titles";
import style from "./style.css";
import type { CreditCardType } from "../Common/CreditCard/Types.js.flow";
import DepositAmount from "../Common/DepositAmount";
import Review from "../Common/Review";
import Fees from "../Common/Fees";
import BankDisclaimer from "../Common/BankDisclaimer";
import { validCard } from "../Common/CreditCard/utils";
import type { Action } from "../actions";
import {
fullEnroll,
userFilledField,
errorShown,
userFilledDepositField,
openInvalidCardModal
} from "../actions";
import type { WrapperDepositInfo, AccountInfo } from "../Types.js.flow";
import type { CAPI, DepositLabels } from "../../../Types.js.flow";
import { getSightlineFees } from "../../../services/slp";
import WarningText from "../Common/WarningText";
const tvgConf = conf();
const getFeesDebounced = debounce(
({ amount, accountId, callback }) =>
getSightlineFees({ amount, accountId }).then(callback),
500
);
const getFeesThen = ({ amount, accountId, callback }) => {
let getFees = Promise.resolve(null);
if (amount && accountId) {
getFees = getFeesDebounced({
amount,
accountId,
callback
});
}
return getFees;
};
type Props = {
capi: CAPI,
dispatch: Dispatch<Action>,
sightlineUserAccount: AccountInfo,
wrapperDepositInfo: ?WrapperDepositInfo,
userAccountDetails: mixed,
dmaDepositLabels: DepositLabels,
onError: () => () => Dispatch<Action>,
onFill: () => () => Dispatch<Action>,
onDepositFill: () => () => Dispatch<Action>,
onDepositAmountClick: (amount: number) => Dispatch<Action>,
onTooltipShow: (fieldName: string) => () => Dispatch<Action>,
declinedCardList: string[],
features: {
showCardDeclinedModal: boolean
},
cardDeclinedWarningLabels: {
full: string,
short: string
}
};
type State = {
enrollmentChecked: boolean,
disabled: boolean,
depositAmount: number,
transferAmount: number,
depositAmountValid: boolean,
transferAmountValid: boolean,
card: ?CreditCardType,
isDirty: boolean,
isFdr: boolean,
depositFee: string,
feeAmount: string,
feeRefundAmount: string
};
export class NotEnrolled extends Component {
static defaultProps = { wrapperDepositInfo: 12 };
constructor(props: Props) {
super(props);
this.state = {
enrollmentChecked: false,
disabled: true,
depositAmount: 0,
depositAmountValid: false,
transferAmount: 0,
transferAmountValid: false,
card: null,
isDirty: false,
isFdr:
tvgConf.product === "fdrmobile" ||
tvgConf.product === "fdrios" ||
tvgConf.product === "fdrandroid",
depositFee: 0,
feeAmount: 0,
feeRefundAmount: 0,
declinedCardList: [],
features: {
showCardDeclinedModal: false
}
};
bindAll(this, [
"setMax",
"handleDepositAmount",
"enrollUser",
"handleCheckbox",
"handleTransferAmount",
"handleCreditCardBlur"
]);
}
state: State;
componentDidMount() {
if (
get(this.props, "wrapperDepositInfo.amount", false) &&
this.props.sightlineUserAccount
) {
let accountId = get(
this.props,
"userAccountDetails.accountDetails.accountNumber"
);
if (!accountId) {
accountId =
(this.props.userAccountDetails.accountDetails &&
this.props.userAccountDetails.accountDetails.accountNumber) ||
(this.props.userAccountDetails.accountDetails.accountDetails &&
this.props.userAccountDetails.accountDetails.accountDetails
.accountNumber);
}
this.props.dispatch({
type: "PROCESSING_REDIRECT",
data: {
isRedirect: true,
amount: +this.props.wrapperDepositInfo.amount,
accountId
}
});
getFeesThen({
amount: +this.props.wrapperDepositInfo.amount,
accountId,
callback: ({ feeAmount, feeTotalAmount, feeRefundAmount }) => {
this.props.dispatch(
fullEnroll(
true,
this.props.wrapperDepositInfo.amount,
{
expirationMonth: this.props.wrapperDepositInfo.expirationMonth,
expirationYear: parseInt(
`20${this.props.wrapperDepositInfo.expirationYear}`,
10
),
number: this.props.wrapperDepositInfo.cardNumber.toString()
},
this.props.wrapperDepositInfo.cvv.toString(), // card data
+this.props.wrapperDepositInfo.amount + +feeTotalAmount,
accountId,
true,
feeTotalAmount,
feeAmount,
feeRefundAmount
)
);
}
});
}
}
setMax: () => number;
setMax() {
const value = this.state.depositAmount;
return parseInt(value, 10) - (this.state.depositFee || 0);
}
props: Props;
handleDepositAmount: (a: mixed, b: mixed) => void;
handleDepositAmount(value: number, valid: boolean) {
const accountId =
get(this.props, "userAccountDetails.accountDetails.accountNumber") ||
get(
this.props,
"userAccountDetails.accountDetails.accountDetails.accountNumber"
);
getFeesThen({
amount: value,
accountId,
callback: ({ feeAmount, feeTotalAmount, feeRefundAmount }) => {
const transferAmountValue = parseFloat(value) - feeTotalAmount;
const transferAmount =
transferAmountValue > 0 ? transferAmountValue : 0;
this.setState(
{
transferAmount,
transferAmountValid: transferAmountValue > 0,
isDirty: true,
depositFee: feeTotalAmount,
feeAmount,
feeRefundAmount
},
this.isDisabled
);
}
});
this.setState({
depositAmount: !isNaN(parseFloat(value)) ? parseFloat(value) : "",
depositAmountValid: valid,
isDirty: true
});
// This is currently only being used by the GTM
// but we could start saving data in the store.
this.props.dispatch({
type: "CHANGE_TRANSFER_AMOUNT",
data: {
amount: value ? parseFloat(value) : 0
}
});
}
handleTransferAmount: (a: string, b: boolean) => void;
handleTransferAmount(value: string, valid: boolean) {
let transferAmount = value;
if (!isNaN(value) && value !== "" && value.toString().indexOf(".") === -1) {
// it is indeed an int and not a float
transferAmount = parseInt(value, 10);
}
const accountId =
get(this.props, "userAccountDetails.accountDetails.accountNumber") ||
get(
this.props,
"userAccountDetails.accountDetails.accountDetails.accountNumber"
);
getFeesThen({
amount: transferAmount,
accountId,
callback: ({ feeAmount, feeTotalAmount, feeRefundAmount }) => {
this.setState({
depositFee: feeTotalAmount,
feeAmount,
feeRefundAmount
});
}
});
this.setState(
{ transferAmount, transferAmountValid: valid, isDirty: true },
this.isDisabled
);
}
handleCreditCardBlur: (c: CreditCardType) => void;
handleCreditCardBlur(card: CreditCardType) {
this.setState({ card, isDirty: true }, this.isDisabled);
}
handleCheckbox: (c: boolean) => void;
handleCheckbox(checked: boolean) {
this.setState(
{ enrollmentChecked: checked, isDirty: true },
this.isDisabled
);
}
enrollUser: () => string;
enrollUser() {
const { card } = this.state;
let accountId = get(
this.props,
"userAccountDetails.accountDetails.accountDetails.accountNumber",
this.props.userAccountDetails.accountNumber
);
if (!accountId) {
accountId =
(this.props.userAccountDetails.accountDetails &&
this.props.userAccountDetails.accountDetails.accountNumber) ||
(this.props.userAccountDetails.accountDetails.accountDetails &&
this.props.userAccountDetails.accountDetails.accountDetails
.accountNumber);
}
this.props.dispatch({
type: "DEPOSIT_ATTEMPT",
data: { amount: this.state.transferAmount }
});
if (card) {
if (
this.props.features.showCardDeclinedModal &&
this.props.declinedCardList.includes(card.cardType)
) {
this.props.dispatch(openInvalidCardModal());
} else {
this.props.dispatch(
fullEnroll(
this.state.enrollmentChecked, // checkbox checked
this.state.transferAmount, // depositAmount - fee
{
expirationMonth: card.expirationMonth, // card data
expirationYear: parseInt(`20${card.expirationYear}`, 10), // card data
number: card.cardNumber.toString() // card data
},
card.securityNumber.toString(), // card data
this.state.depositAmount,
accountId,
false,
this.state.depositFee,
this.state.feeAmount,
this.state.feeRefundAmount
)
);
}
}
}
isDisabled: () => void;
isDisabled() {
const disabled = !(
this.state.enrollmentChecked &&
this.state.depositAmountValid &&
this.state.transferAmountValid &&
validCard(this.state.card)
);
this.setState({ disabled });
}
render() {
const wrapperDepositInfo = this.props.wrapperDepositInfo;
const cardType = get(this.state, "card.cardType");
return (
<div className={style.sightlineDeposit} data-qa-label="notEnrolled">
<MarketingBanner
banner={this.props.capi.slpMarketingBanner}
msg={this.props.capi.slpMarketingMsg}
/>
<div data-qa-label="depositToPrePaidCardSection">
<Title qaLabel="depositToPrePaidCardLabel">
{this.state.isFdr
? "Deposit to Pre Paid Card"
: "Deposit to Pre Paid Play+ Card"}
</Title>
<DepositAmount
message={this.props.capi.slpTransferMsg}
value={get(wrapperDepositInfo, "amount", "")}
onChange={this.handleDepositAmount}
onButtonClick={this.props.onDepositAmountClick}
onFill={this.props.onDepositFill("Deposit Amount")}
onError={this.props.onError(
"Standard Deposit Start | Other Amount"
)}
onTooltipShow={this.props.onTooltipShow("Transfer Amount")}
qaLabel="depositToPrePaidCardContent"
isFdr={this.state.isFdr}
/>
</div>
<div className="credit-card-section" data-qa-label="creditCardSection">
<Title qaLabel="cardDetailsLabel">Card Details</Title>
{this.props.features.showCardDeclinedModal && (
<div className={style.notEnrolledWarningBox}>
<WarningText mode="light">
{this.props.cardDeclinedWarningLabels.full}
</WarningText>
</div>
)}
<CreditCard
initialCardNumber={get(wrapperDepositInfo, "cardNumber", "")}
hadCardFromRedirect={!!get(wrapperDepositInfo, "cardNumber", "")}
initialExpirationMonth={get(
wrapperDepositInfo,
"expirationMonth",
""
)}
initialExpirationYear={get(
wrapperDepositInfo,
"expirationYear",
""
)}
onBlur={this.handleCreditCardBlur}
onChange={this.handleCreditCardBlur}
onCardNumberFill={this.props.onFill("cardNumber")}
onCardNumberError={this.props.onError("cardNumber")}
onExpirationMonthFill={this.props.onFill("cardExpMonth")}
onExpirationMonthError={this.props.onError("cardExpMonth")}
onExpirationYearFill={this.props.onFill("cardExpYr")}
onExpirationYearError={this.props.onError("cardExpYr")}
onSecurityNumberFill={this.props.onFill("cardCvn")}
onSecurityNumberError={this.props.onError("cardCvn")}
onSecurityTooltipShow={this.props.onTooltipShow("cardCvn")}
qaLabel="notEnrolled"
/>
</div>
<div
className="transfer-to-tvg-section"
data-qa-label="transferToTVGAccountSection"
>
<Title qaLabel="transferToTVGAccountLabel">
{this.state.isFdr
? "Transfer to FanDuel Racing Account"
: "Transfer to TVG Account"}
</Title>
<Transfer
value={this.state.transferAmount}
max={this.setMax()}
onChange={this.handleTransferAmount}
onFill={this.props.onFill("Transfer Amount")}
onError={this.props.onError("Transfer Amount")}
qaLabel=""
/>
</div>
<Review
labels={this.props.dmaDepositLabels}
fee={this.state.depositFee}
feeFull={this.state.feeAmount}
feeRefund={this.state.feeRefundAmount}
depositAmount={this.state.depositAmount}
applyError={this.state.isDirty}
transferAmount={this.state.transferAmount}
balance={
this.state.depositAmount -
this.state.depositFee -
this.state.transferAmount
}
qaLabel=""
/>
<PrivacyDisclosure
capi={this.props.capi}
checked={this.handleCheckbox}
fdr={this.state.isFdr}
/>
<div className={style.authorizeBtn}>
<Button
onClick={this.enrollUser}
size="big"
type="legacy"
disabled={
(this.props.features.showCardDeclinedModal &&
this.props.declinedCardList.includes(cardType)) ||
this.state.disabled ||
this.props.sightlineUserAccount.disableAuthorize
}
icon
qaLabel="authorize"
>
<Lock fill="#fff" width="16px" height="16px" />
Authorize
</Button>
</div>
<BankDisclaimer />
<Fees
qaLabel="prePaidCardFees"
isFdr={this.state.isFdr}
mainFeesLandscape={tvgConf.product === "tvg4"}
/>
</div>
);
}
}
const mapStateToProps = store => {
let dmaDepositLabels = attempt(() => JSON.parse(store.capi.dmaDepositLabels));
dmaDepositLabels = isError(dmaDepositLabels) ? null : dmaDepositLabels;
let cardDeclinedWarningLabels = attempt(() => {
const capiMessage = JSON.parse(store.capi.cardErrorRedirect);
return {
full: capiMessage.cardDeclinedWarningFullText,
short: capiMessage.cardDeclinedWarningShortText
};
});
cardDeclinedWarningLabels = isError(cardDeclinedWarningLabels)
? {}
: cardDeclinedWarningLabels;
return {
capi: store.capi,
dmaDepositLabels,
cardDeclinedWarningLabels,
enrollUser: store.deposits.sightline.enrollUser,
sightlineUserAccount: store.deposits.sightline.sightlineUserAccount,
wrapperDepositInfo: store.deposits.wrapperDepositInfo,
userAccountDetails: store.userAccountDetails,
features: store.features
};
};
const mapDispatchToProps = (dispatch: Dispatch) => ({
dispatch,
onError: (fieldName: string) => (value: string, errors: string[]) =>
dispatch(errorShown(fieldName, value, errors)),
onFill: (fieldName: string) => (value: string) =>
dispatch(userFilledField(fieldName, value)),
onDepositFill: (fieldName: string) => (value: string) =>
dispatch(userFilledDepositField(fieldName, value)),
onDepositAmountClick: (value: number) =>
dispatch({ type: "USER_SELECTED_DEPOSIT_AMOUNT", data: { value } }),
onTooltipShow: (fieldName: string) => () =>
dispatch({ type: "SHOW_TOOLTIP", data: { fieldName } })
});
export default connect(
mapStateToProps,
mapDispatchToProps
)(NotEnrolled);
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/NotEnrolled/index.jsx
webpack:///./src/Sightline/Deposit/Common/Titles/index.jsx
// @flow
import React from 'react';
import type { Element, Children } from 'react';
import style from './style.css';
type Props = {
children?: Children,
qaLabel: string,
};
const Title = (props: Props): Element<*> =>
<h3 className={style.sectionTitle} data-qa-label={props.qaLabel}>
{props.children}
</h3>;
// @TODO https://github.com/facebook/flow/issues/1964
Title.defaultProps = { children: '', qaLabel: '' };
export default Title;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/Titles/index.jsx
webpack:///./src/Sightline/Deposit/NotEnrolled/MarketingBanner/index.jsx
// @flow
import React from 'react';
import Parser from 'html-react-parser';
import style from './style.css';
type Props = {
banner: string,
msg: string,
};
const MarketingBanner = (props: Props) =>
<div className={style.banner} data-qa-label="bannerContent">
<div className={style.img}>
{Parser(props.banner)}
</div>
<div className={style.msg}>
{Parser(props.msg)}
</div>
</div>;
export default MarketingBanner;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/NotEnrolled/MarketingBanner/index.jsx
webpack:///./src/Sightline/Deposit/Common/WarningText/index.jsx
// @flow
import React from "react";
import type { Element, Children } from "react";
import style from "./style.css";
type Props = {
children?: Children,
qaLabel: string,
showIcon: boolean,
mode: string
};
type WarningIconProps = {
qaLabel: string,
size: number,
mode: string
};
export const WarningIcon = ({
qaLabel = "icon",
size = 16,
mode = "default"
}: WarningIconProps) =>
mode === "light" ? (
<svg
className={style.warningIcon}
width={size}
height={size}
viewBox={`0 0 ${size} ${size}`}
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M1.82179 14.25H14.1775C14.5524 14.25 14.794 13.8527 14.6214 13.5198L8.44387 1.606C8.25732 1.24622 7.74269 1.24621 7.55612 1.60598L1.37792 13.5198C1.20532 13.8527 1.44687 14.25 1.82179 14.25Z"
fill="#FAD5AF"
/>
<path
d="M8.00002 6V10M8.00002 11V12.5M7.55612 1.60598L1.37792 13.5198C1.20532 13.8527 1.44687 14.25 1.82179 14.25H14.1775C14.5524 14.25 14.794 13.8527 14.6214 13.5198L8.44387 1.606C8.25732 1.24622 7.74269 1.24621 7.55612 1.60598Z"
stroke="#BD6909"
strokeWidth="1.5"
/>
</svg>
) : (
<svg
className={style.warningIcon}
data-qa-label={qaLabel}
width={size}
height={size}
viewBox={`0 0 ${size} ${size}`}
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<rect x="5" y="4" width="6" height="10" fill="white" />
<path
fillRule="evenodd"
clipRule="evenodd"
d="M9.56544 1.10338C8.92053 -0.186459 7.07986 -0.186459 6.43495 1.10338L0.302977 13.3673C-0.27881 14.5309 0.567305 15.8999 1.86823 15.8999H14.1322C15.4331 15.8999 16.2792 14.5309 15.6974 13.3673L9.56544 1.10338ZM7.25019 5.99994C7.25019 5.7238 7.47405 5.49994 7.75019 5.49994H8.25019C8.52634 5.49994 8.75019 5.7238 8.75019 5.99994V9.49994C8.75019 9.77608 8.52634 9.99994 8.25019 9.99994H7.75019C7.47405 9.99994 7.25019 9.77608 7.25019 9.49994V5.99994ZM7.25019 11.9999C7.25019 11.7238 7.47405 11.4999 7.75019 11.4999H8.25019C8.52634 11.4999 8.75019 11.7238 8.75019 11.9999V12.4999C8.75019 12.7761 8.52634 12.9999 8.25019 12.9999H7.75019C7.47405 12.9999 7.25019 12.7761 7.25019 12.4999V11.9999Z"
fill="#D67A11"
/>
</svg>
);
const WarningText = ({
showIcon,
qaLabel,
children,
mode
}: Props): Element<*> => (
<span className={style.warningContainer} data-qa-label={qaLabel}>
{showIcon && <WarningIcon mode={mode} />}
<p className={style.warningText} data-qa-label="text">
{children}
</p>
</span>
);
// @TODO https://github.com/facebook/flow/issues/1964
WarningText.defaultProps = {
children: "",
qaLabel: "warning-text",
showIcon: true,
mode: "default"
};
export default WarningText;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/WarningText/index.jsx
webpack:///./src/Sightline/Deposit/NotEnrolled/MarketingBanner/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","banner":"banner"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/NotEnrolled/MarketingBanner/style.css
// module id = 350
// module chunks = 0
webpack:///./src/Sightline/Deposit/NotEnrolled/PrivacyDisclosure/index.jsx
// @flow
import React, { Component } from "react";
import type { Element } from "react";
import Checkbox from "@tvg/ui-bootstrap/components/Form/Checkbox";
import style from "./style.css";
import GeneralModal from "./../Modals/generalModal";
import type { CAPI } from "../../../../Types.js.flow";
type Props = {
checked: (e: boolean) => void,
capi: CAPI,
fdr: boolean
};
class PrivacyDisclosure extends Component {
static handleModalOpen(modal) {
// $FlowFixMe
modal.open();
}
props: Props;
termsAndConditions: ?Element<*>;
privacyPolicy: ?Element<*>;
capi: ?Element<*>;
render() {
return (
<div
className={style.privacyDisclosureAgreement}
data-qa-label="privacyDisclosureAgreementSection"
>
<p data-qa-label="agreementTestHelper">
{!this.props.fdr
? this.props.capi.slpEnrollWarning
: this.props.capi.slpEnrollWarning.replace("TVG", "FanDuel")}
</p>
<GeneralModal
headerText="Privacy Disclosure"
reference={(c: React$Element<*>) => {
this.privacyPolicy = c;
}}
// $FlowFixMe
onClose={(): void => this.privacyPolicy.close()}
id="privacyPolicy"
bodyTemplate={this.props.capi.slpPrivacyTemplate}
qaLabel="privacyDisclosure"
classnames={style.privacyDisclosureModal}
/>
<div className={style.privacyDisclosureCheckbox}>
<Checkbox
id="sightlineAgreement"
onChange={this.props.checked}
qaLabel="agreement"
>
<p>
<strong>
{this.props.fdr
? "I agree with FanDuel Racing Pre Paid Card "
: "I agree with TVG Pre Paid Play+ Card "}
</strong>
<a
href="https://betfair.mycardplace.com/cholder/showContent.action?page=TVGTERMS"
target="_blank"
rel="noopener noreferrer"
data-qa-label="agreementTermsCond"
>
Terms and Conditions
</a>
<strong> and </strong>
<a
tabIndex={0}
role="button"
className={style.privacyPolicyOpen}
onClick={(e): void => {
e.preventDefault();
PrivacyDisclosure.handleModalOpen(this.privacyPolicy);
}}
data-qa-label="agreementPrivacyDiscl"
>
Privacy Disclosure
</a>
</p>
</Checkbox>
</div>
</div>
);
}
}
export default PrivacyDisclosure;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/NotEnrolled/PrivacyDisclosure/index.jsx
webpack:///./src/Sightline/Deposit/NotEnrolled/PrivacyDisclosure/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","sightline-deposit":"sightline-deposit","sightlineDeposit":"sightline-deposit","privacy-disclosure-agreement":"privacy-disclosure-agreement","privacyDisclosureAgreement":"privacy-disclosure-agreement","privacy-disclosure-checkbox":"privacy-disclosure-checkbox","privacyDisclosureCheckbox":"privacy-disclosure-checkbox","privacyDisclosureModal":"privacyDisclosureModal","container-fluid":"container-fluid","containerFluid":"container-fluid","row":"row"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/NotEnrolled/PrivacyDisclosure/style.css
// module id = 354
// module chunks = 0
webpack:///./src/Sightline/Deposit/NotEnrolled/Modals/generalModal.jsx
// @flow
import React, { PureComponent } from "react";
import Parser from "html-react-parser";
import classnames from "classnames";
import ModalPortal from "@tvg/ui-bootstrap/components/Modal";
import ModalStyles from "@tvg/ui-bootstrap/components/Modal/example.css";
import ButtonStyles from "@tvg/ui-bootstrap/components/Buttons/index.css";
import Close from "@tvg/ui-bootstrap/assets/svg/close.svg";
import style from "./general.css";
type Props = {
reference: (c: React$Element<*>) => void,
onClose: () => void,
id: string,
headerText: string,
bodyTemplate: string,
qaLabel: string,
classnames: string
};
// can't use stateless component because of the ref
class GeneralModal extends PureComponent {
props: Props;
render() {
return (
<ModalPortal
ref={this.props.reference}
modalIdentifier={this.props.id}
bodyClass={ModalStyles.modal}
type="scrollContent"
modalParent="#funds"
qaLabel={this.props.qaLabel}
classnames={this.props.classnames}
>
<div className={classnames(ModalStyles.modalHeader, style.header)}>
<span data-qa-label="modalHeaderTitle">{this.props.headerText}</span>
<button
onClick={this.props.onClose}
className={ButtonStyles.inlineButton}
data-qa-label="modalHeaderCloseButton"
>
<Close width="16px" height="16px" fill="#fff" />
</button>
</div>
<div
className={classnames(ModalStyles.modalBody, style.modalBody)}
data-qa-label="modalBody"
>
<div className={classnames(style.firstdiv)}>
{Parser(this.props.bodyTemplate)}
</div>
</div>
</ModalPortal>
);
}
}
export default GeneralModal;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/NotEnrolled/Modals/generalModal.jsx
webpack:///./src/Sightline/Deposit/NotEnrolled/Modals/general.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","header":"header","modal":"modal","firstdiv":"firstdiv","modalBody":"modalBody"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/NotEnrolled/Modals/general.css
// module id = 358
// module chunks = 0
webpack:///./src/services/shared.js
// @flow
import { type $AxiosError } from "axios";
import conf from "@tvg/conf";
const tvgConf = conf();
export type Headers = {
"x-clientapp": string,
"x-tvgcontext": string,
"x-requested-with": "XMLHttpRequest",
"x-tvg-context": string
};
let clientApp = "tvg4";
if (tvgConf.product === "ios") {
clientApp = "touch2";
if (tvgConf.wrapper === "true") {
clientApp = "ios2";
}
}
if (tvgConf.product === "touch3") {
clientApp = "touch3";
}
const xtvgContext =
tvgConf.product === "njx" && tvgConf.brand === "4njbets"
? "exchange-exchange"
: `${tvgConf.product || "tvg4"}-${tvgConf.brand}`;
export const headers: Headers = {
"x-clientapp": clientApp,
"x-tvgcontext": JSON.stringify({
application: tvgConf.device,
wrapper: false,
device: tvgConf.device,
residence: "all",
location: "all",
product: tvgConf.product ? tvgConf.product : "tvg4",
user_status: "logged_in"
}),
"x-requested-with": "XMLHttpRequest",
"x-tvg-context": xtvgContext
};
type ErrorMessage = {
message: string,
status: number,
code: number,
exception: string
};
// We're using an Error here because it's useful to throw personalized errors.
export class ApiError extends Error {
static fromAxios(request: $AxiosError<ErrorMessage>, customMesage?: string) {
if (customMesage) {
throw new ApiError({
message: customMesage
});
}
if (request.response) {
if (request.response.status === 403) {
throw new ApiError({
message: request.message,
status: request.response.status,
code: request.response.status
});
}
throw new ApiError(request.response.data);
}
throw new ApiError({
code: 600,
message: "Network Error",
status: 600
});
}
constructor(data: ErrorMessage) {
super(data.message || "");
this.code = data.code;
this.status = data.status;
this.exception = data.exception;
}
code: number;
status: number;
exception: string;
}
// WEBPACK FOOTER //
// ./src/services/shared.js
webpack:///./src/Sightline/Deposit/Common/CreditCard/luhn.js
// @flow
import { isNaN } from 'lodash';
/**
* Luhn algorithm
* @see https://en.wikipedia.org/wiki/Luhn_algorithm
*/
const toDigits = (digits: string): number[] =>
digits.split('').map(digit => parseInt(digit, 10));
const sum = (a: number, b: number): number => a + b;
const isEven = (n: number): boolean => n % 2 === 0;
const multiplyAndSum = (n: number, m: number = 2): number => {
const prod = n * m;
return prod > 9 ? prod - 9 : prod;
};
export const luhn = (n: string): number =>
toDigits(n)
.reverse()
.map((d, i) => (isEven(i) ? multiplyAndSum(d) : d))
.reduce(sum, 0);
export const getCheckDigit = (n: string): number => {
const mod10 = luhn(n) % 10;
return mod10 === 0 ? mod10 : Math.abs(10 - mod10);
};
export const isValid = (n: string): boolean => {
const checkDigit = parseInt(n[n.length - 1], 10);
const remainingDigits = n.slice(0, n.length - 1);
const allZeros = /^0*$/.test(n);
return !isNaN(checkDigit) && getCheckDigit(remainingDigits) === checkDigit && !allZeros;
};
export default luhn;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/CreditCard/luhn.js
webpack:///./src/Sightline/Deposit/Common/CreditCard/SecurityNumber/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","security-number":"security-number","securityNumber":"security-number"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/Common/CreditCard/SecurityNumber/style.css
// module id = 457
// module chunks = 0
webpack:///./src/Sightline/Deposit/Common/CreditCard/SecurityNumber/assets/security-number.png
module.exports = "data:image/png;base64,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" ////////////////// // WEBPACK FOOTER // ./src/Sightline/Deposit/Common/CreditCard/SecurityNumber/assets/security-number.png // module id = 458 // module chunks = 0
webpack:///./src/Sightline/Deposit/Common/CreditCard/styles.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","container-fieldset":"container-fieldset","containerFieldset":"container-fieldset","card-number-wrapper":"card-number-wrapper","cardNumberWrapper":"card-number-wrapper","card-brand":"card-brand","cardBrand":"card-brand","expiration-month":"expiration-month","expirationMonth":"expiration-month","expiration-year":"expiration-year","expirationYear":"expiration-year","card-number":"card-number","cardNumber":"card-number","expiration-date":"expiration-date","expirationDate":"expiration-date","divider":"divider","row":"row","information":"information"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/Common/CreditCard/styles.css
// module id = 459
// module chunks = 0
webpack:///./src/Sightline/Deposit/Common/Brand/utils.js
import Discover from "./svg/discover.svg";
import MasterCard from "./svg/mastercard.svg";
import Visa from "./svg/visa.svg";
export const BrandsIcons = {
DISCOVER: Discover,
MASTERCARD: MasterCard,
VISA: Visa
};
export default BrandsIcons;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/Brand/utils.js
webpack:///./src/Sightline/Deposit/Common/Brand/svg/discover.svg
var React = require('react');
function Discover (props) {
return React.createElement("svg",props,[React.createElement("defs",{"key":0},React.createElement("rect",{"id":"discover-a","width":"320","height":"40","x":"-274","y":"-8","rx":"2"})),React.createElement("g",{"fill":"none","fillRule":"evenodd","key":1},[React.createElement("rect",{"width":"788","height":"429","x":"-391","y":"-223","fill":"#EBEBEB","key":0}),React.createElement("use",{"fill":"#FFF","xlinkHref":"#discover-a","key":1}),React.createElement("rect",{"width":"319","height":"39","x":"-273.5","y":"-7.5","stroke":"#979797","rx":"2","key":2}),React.createElement("g",{"fillRule":"nonzero","transform":"matrix(1 0 0 -1 0 24)","key":3},[React.createElement("path",{"fill":"#F47216","d":"M37.7104358,10.6641747 C37.7104358,10.6641747 27.4079777,3.48639301 8.53938547,0.273956332 L37.7104358,0.273956332","key":0}),React.createElement("path",{"fill":"#231F20","d":"M4.58037989,12.5720175 C4.24368715,12.2716507 3.80615642,12.1406463 3.1136648,12.1406463 L2.82601117,12.1406463 L2.82601117,15.7284891 L3.1136648,15.7284891 C3.80615642,15.7284891 4.22649162,15.6060786 4.58037989,15.2895721 C4.95103911,14.9638428 5.17394413,14.45869 5.17394413,13.9390742 C5.17394413,13.4182009 4.95103911,12.8977467 4.58037989,12.5720175 M3.3282905,16.6476157 L1.75500559,16.6476157 L1.75500559,11.2223581 L3.32001117,11.2223581 C4.15218994,11.2223581 4.75297207,11.4160349 5.28051397,11.8486638 C5.90740782,12.3607336 6.27806704,13.1327162 6.27806704,13.9311092 C6.27806704,15.5322969 5.06652514,16.6476157 3.3282905,16.6476157","key":1}),React.createElement("polygon",{"fill":"#231F20","points":"6.771 11.222 7.843 11.222 7.843 16.648 6.771 16.648","key":2}),React.createElement("path",{"fill":"#231F20","d":"M10.4637989 14.5655895C9.82055866 14.800559 9.6318324 14.9554585 9.6318324 15.2486987 9.6318324 15.5903581 9.96831285 15.8500611 10.430257 15.8500611 10.7512402 15.8500611 11.0153296 15.7196856 11.2944916 15.4107249L11.8553631 16.1357555C11.3944804 16.5337991 10.843162 16.7371179 10.2406816 16.7371179 9.26839106 16.7371179 8.52686034 16.0705677 8.52686034 15.1826725 8.52686034 14.435214 8.87204469 14.0526812 9.87872626 13.6948821 10.2984246 13.5485764 10.5119888 13.4513188 10.6196201 13.386131 10.8338212 13.248 10.9410279 13.0522271 10.9410279 12.8245939 10.9410279 12.3848384 10.5871397 12.0591092 10.1088492 12.0591092 9.59765363 12.0591092 9.18581006 12.3118952 8.93912849 12.7830917L8.24663687 12.1247162C8.74042458 11.4086987 9.33356425 11.0915633 10.1491844 11.0915633 11.2628603 11.0915633 12.0443017 11.8228821 12.0443017 12.8730131 12.0443017 13.7353362 11.6829832 14.1252052 10.4637989 14.5655895M12.3824804 13.9311092C12.3824804 12.3364192 13.6507039 11.0999476 15.2827933 11.0999476 15.7441006 11.0999476 16.1393855 11.1894498 16.6265922 11.4160349L16.6265922 12.6617293C16.1981899 12.2383231 15.8186145 12.0674934 15.3326816 12.0674934 14.2531844 12.0674934 13.4870279 12.8403144 13.4870279 13.9390742 13.4870279 14.9806114 14.2773855 15.8022707 15.2827933 15.8022707 15.7939888 15.8022707 16.1809944 15.6222183 16.6265922 15.1918952L16.6265922 16.4369607C16.1561564 16.672559 15.7693631 16.7702358 15.3080559 16.7702358 13.6842458 16.7702358 12.3824804 15.5086114 12.3824804 13.9311092","key":3}),React.createElement("polyline",{"fill":"#231F20","points":"25.125 13.003 23.66 16.648 22.489 16.648 24.82 11.083 25.397 11.083 27.771 16.648 26.609 16.648","key":4}),React.createElement("polyline",{"fill":"#231F20","points":"28.256 11.222 31.295 11.222 31.295 12.141 29.327 12.141 29.327 13.605 31.223 13.605 31.223 14.524 29.327 14.524 29.327 15.728 31.295 15.728 31.295 16.648 28.256 16.648","key":5}),React.createElement("path",{"fill":"#231F20","d":"M33.388838,14.1499389 L33.0757095,14.1499389 L33.0757095,15.793048 L33.4058212,15.793048 C34.0734749,15.793048 34.4362793,15.5169956 34.4362793,14.988786 C34.4362793,14.4433886 34.0734749,14.1499389 33.388838,14.1499389 M35.5391285,15.0460087 C35.5391285,16.0615546 34.8305028,16.6476157 33.5945475,16.6476157 L32.0051285,16.6476157 L32.0051285,11.2221485 L33.0757095,11.2221485 L33.0757095,13.4018515 L33.2156089,13.4018515 L34.699095,11.2221485 L36.0172067,11.2221485 L34.2872514,13.5077031 C35.0945922,13.6697293 35.5391285,14.2151266 35.5391285,15.0460087","key":6}),React.createElement("path",{"fill":"#F47216","d":"M16.9766592,13.9162271 C16.9766592,12.3221659 18.2852179,11.0299389 19.8996872,11.0299389 L19.8996872,11.0299389 C21.5141564,11.0299389 22.8229274,12.3221659 22.8229274,13.9162271 L22.8229274,13.9162271 C22.8229274,15.5102882 21.5141564,16.8020961 19.8996872,16.8020961 L19.8996872,16.8020961 C18.2852179,16.8020961 16.9766592,15.5102882 16.9766592,13.9162271","transform":"rotate(-174 19.9 13.916)","key":7}),React.createElement("path",{"stroke":"#333","strokeWidth":".5","d":"M0.250055728,23.7478922 L37.75,23.749986 L37.75,0.250843132 L0.255293409,0.250005583 L0.250055728,23.7478922 Z","key":8})])])]);
}
Discover.displayName = "Discover";
Discover.defaultProps = {"width":"38","height":"24","viewBox":"0 0 38 24"};
module.exports = Discover;
Discover.default = Discover;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/Brand/svg/discover.svg
webpack:///./src/Sightline/Deposit/Common/Brand/svg/mastercard.svg
var React = require('react');
function Mastercard (props) {
return React.createElement("svg",props,[React.createElement("rect",{"width":"34","height":"24","rx":"2","fill":"#353A48","key":0}),React.createElement("circle",{"cx":"13","cy":"12","r":"6","fill":"#ED0006","key":1}),React.createElement("g",{"style":{"mixBlendMode":"screen"},"key":2},React.createElement("circle",{"cx":"21","cy":"12","r":"6","fill":"#F9A000"}))]);
}
Mastercard.displayName = "Mastercard";
Mastercard.defaultProps = {"width":"34","height":"24","viewBox":"0 0 34 24","fill":"none"};
module.exports = Mastercard;
Mastercard.default = Mastercard;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/Brand/svg/mastercard.svg
webpack:///./src/Sightline/Deposit/Common/Brand/svg/visa.svg
var React = require('react');
function Visa (props) {
return React.createElement("svg",props,[React.createElement("rect",{"width":"34","height":"24","rx":"2","fill":"#224DBA","key":0}),React.createElement("g",{"clipPath":"url(#clip0)","key":1},[React.createElement("path",{"d":"M14.4 15.6553H12.4558L13.6718 8.13635H15.6159L14.4 15.6553Z","fill":"white","key":0}),React.createElement("path",{"d":"M21.4477 8.32011C21.0642 8.16798 20.456 8 19.7039 8C17.784 8 16.432 9.02381 16.4237 10.4875C16.4078 11.5675 17.3917 12.1673 18.1276 12.5274C18.8798 12.8953 19.1355 13.1355 19.1355 13.4635C19.1278 13.9672 18.5277 14.1994 17.9679 14.1994C17.1917 14.1994 16.7758 14.0797 16.1438 13.7994L15.8878 13.6793L15.6157 15.3672C16.0717 15.5749 16.9118 15.7592 17.784 15.7673C19.824 15.7673 21.152 14.7594 21.1678 13.1995C21.1755 12.3436 20.656 11.6877 19.5359 11.1518C18.8559 10.8078 18.4394 10.5758 18.4394 10.2238C18.4474 9.90377 18.7917 9.576 19.5592 9.576C20.1913 9.55995 20.6557 9.71187 21.0075 9.8639L21.1833 9.94374L21.4477 8.32011Z","fill":"white","key":1}),React.createElement("path",{"d":"M24.0316 12.9916C24.1917 12.5597 24.8078 10.8879 24.8078 10.8879C24.7997 10.9039 24.9676 10.4479 25.0636 10.168L25.1995 10.8159C25.1995 10.8159 25.5676 12.6157 25.6476 12.9916C25.3437 12.9916 24.4156 12.9916 24.0316 12.9916ZM26.4314 8.13635H24.9276C24.4639 8.13635 24.1116 8.27222 23.9115 8.7602L21.0237 15.6552H23.0636C23.0636 15.6552 23.3995 14.7272 23.4717 14.5273C23.6955 14.5273 25.6799 14.5273 25.9678 14.5273C26.0236 14.7913 26.1998 15.6552 26.1998 15.6552H27.9999L26.4314 8.13635Z","fill":"white","key":2}),React.createElement("path",{"d":"M10.832 8.13635L8.92798 13.2636L8.71992 12.2237C8.36792 11.0238 7.26395 9.72022 6.03198 9.07202L7.77596 15.6474H9.83187L12.8878 8.13635H10.832Z","fill":"white","key":3}),React.createElement("path",{"d":"M7.15998 8.13635H4.032L4 8.28828C6.44002 8.91223 8.05599 10.4163 8.71993 12.224L8.03994 8.76839C7.92799 8.28817 7.58396 8.15219 7.15998 8.13635Z","fill":"white","key":4})]),React.createElement("defs",{"key":2},React.createElement("clipPath",{"id":"clip0"},React.createElement("rect",{"width":"24","height":"7.76731","fill":"white","transform":"translate(4 8)"})))]);
}
Visa.displayName = "Visa";
Visa.defaultProps = {"width":"34","height":"24","viewBox":"0 0 34 24","fill":"none"};
module.exports = Visa;
Visa.default = Visa;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/Brand/svg/visa.svg
webpack:///./src/Sightline/Deposit/Common/Transfer/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","transfer":"transfer"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/Common/Transfer/style.css
// module id = 464
// module chunks = 0
webpack:///./src/Sightline/Deposit/Common/Titles/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","section-title":"section-title","sectionTitle":"section-title"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/Common/Titles/style.css
// module id = 465
// module chunks = 0
webpack:///./src/Sightline/Deposit/NotEnrolled/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","sightline-deposit":"sightline-deposit","sightlineDeposit":"sightline-deposit","input-prepend":"input-prepend","inputPrepend":"input-prepend","transfer":"transfer","fee":"fee","authorizeBtn":"authorizeBtn","not-enrolled-warning-box":"not-enrolled-warning-box","notEnrolledWarningBox":"not-enrolled-warning-box"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/NotEnrolled/style.css
// module id = 466
// module chunks = 0
webpack:///./src/Sightline/Deposit/Common/DepositAmount/styles.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","deposit-amount":"deposit-amount","depositAmount":"deposit-amount","deposit-amount-input":"deposit-amount-input","depositAmountInput":"deposit-amount-input","or":"or"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/Common/DepositAmount/styles.css
// module id = 467
// module chunks = 0
webpack:///./src/Sightline/Deposit/Common/Review/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","review":"review","error":"error"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/Common/Review/style.css
// module id = 468
// module chunks = 0
webpack:///./src/Sightline/Deposit/Common/Fees/index.jsx
// @flow
import React, { Component } from "react";
import { isNaN } from "lodash";
import type { Item } from "../../Types.js.flow";
import Title from "../Titles";
import style from "./style.css";
type Props = {
title: ?string,
isFdr: boolean,
mainFeesLandscape: boolean,
mainFees: ?(Item[]),
secondaryFees: ?(Item[]),
otherFees: ?(Item[]),
infoContactNbr: ?string,
infoURL: ?string,
infoGovURL: ?string,
qaLabel: string
};
type Options = {
className: string,
qaLabel: string,
isMain: boolean
};
class Fees extends Component {
static defaultProps = {
transactionNumber: null,
title: "",
isFdr: false,
mainFeesLandscape: false,
mainFees: [
{ name: "monthlyFee", text: "Monthly Fee", value: "0" },
{ name: "perPurchase", text: "Per Purchase", value: "0" },
{ name: "ATMWithdrawal", text: "ATM Withdrawal", value: "2" },
{ name: "cashReload", text: "Cash Reload", value: null }
],
secondaryFees: [
{ name: "ATMBalanceInquiry", text: "ATM Balance Inquiry", value: "0.75" },
{
name: "customerService",
text: "Customer Service (automated or live agent)",
value: "0"
},
{
name: "inactivity",
text: "Inactivity (monthly fee after six (6) months of no activity)",
value: "2.95"
}
],
otherFees: [
{
name: "accountBankTransfer",
text: "Account to Bank Transfer",
value: "2"
},
{
name: "ATMWithdrawalDecline",
text: "ATM Withdrawal Decline",
value: "0.75"
}
],
infoContactNbr: "877-220-3988",
infoURL: "playplusgo.com/terms",
infoGovURL: "cfpb.gov/prepaid",
qaLabel: ""
};
getValue = (moneyVal: ?string | ?number): string => {
if (!moneyVal || isNaN(moneyVal)) return "N/A";
const parsedValue = parseFloat(moneyVal);
if (parsedValue === 0) return `$0`;
return parsedValue < 0
? `-$${Math.abs(parsedValue).toFixed(2)}`
: `$${parsedValue.toFixed(2)}`;
};
props: Props;
renderItem = (text: string, value: any) => {
const qaLabelName = `${this.props.qaLabel}ItemName${text}`;
const qaLabelValue = `${this.props.qaLabel}ItemValue${value}`;
return [
<dt key={qaLabelName} data-qa-label={qaLabelName}>
{text}
</dt>,
<dd key={qaLabelValue} data-qa-label={qaLabelValue}>
<strong>{this.getValue(value)}</strong>
</dd>
];
};
renderFees = (
fees: Item[],
{ className = style.fees, qaLabel = "fees", isMain = false }: Options = {}
) =>
fees.length > 0 && (
<div
className={className}
data-qa-label={`${this.props.qaLabel}-${qaLabel}`}
>
<dl key={qaLabel}>
{fees.map(
({ text, value }) =>
isMain ? (
<div key={text + value}>{this.renderItem(text, value)}</div>
) : (
this.renderItem(text, value)
)
)}
</dl>
</div>
);
render() {
return (
<div data-qa-label={this.props.qaLabel} className={style.fees}>
<Title qaLabel={this.props.qaLabel.concat("Title")}>
{this.props.title ||
`${
this.props.isFdr
? "FanDuel Pre Paid Fees"
: "TVG Pre Paid Play+ Fees"
}`}
</Title>
<div id="feesContent">
{this.props.mainFees &&
this.renderFees(this.props.mainFees, {
className: this.props.mainFeesLandscape
? style.mainFeesLandscape
: style.mainFees,
qaLabel: "mainFees",
isMain: true
})}
{this.props.secondaryFees &&
this.renderFees(this.props.secondaryFees, {
className: this.props.mainFeesLandscape
? style.otherFeesLandscape
: style.otherFees,
qaLabel: "secondaryFees",
isMain: false
})}
<p>
<strong>We charge 5 other types of fees.</strong> Here are some of
them:
</p>
{this.props.otherFees &&
this.renderFees(this.props.otherFees, {
className: this.props.mainFeesLandscape
? style.otherFeesLandscape
: style.otherFees,
qaLabel: "otherFees",
isMain: false
})}
<p>
<strong>No overdraft/credit feature.</strong>
</p>
<p>Your funds are eligible for FDIC insurance.</p>
<br />
<br />
<p>
For general information about prepaid accounts, visit{" "}
{this.props.infoGovURL}.
</p>
<p>
Find details and conditions for all fees and services inside the
Terms & Conditions or call{" "}
<strong>{this.props.infoContactNbr}</strong> or visit{" "}
<strong>{this.props.infoURL}.</strong>
</p>
<br />
<br />
<p>
<strong>
{`${
this.props.isFdr
? "FanDuel Pre Paid Card"
: "TVG Pre Paid Play+"
} is offered
by Sutton Bank. There is no charge to obtain an account and no
charge to activate your account.`}
</strong>
</p>
<br />
<br />
</div>
</div>
);
}
}
export default Fees;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/Fees/index.jsx
webpack:///./src/Sightline/Deposit/Common/Fees/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","feesContent":"feesContent","mainFees":"mainFees","mainFeesLandscape":"mainFeesLandscape","otherFees":"otherFees","otherFeesLandscape":"otherFeesLandscape"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/Common/Fees/style.css
// module id = 470
// module chunks = 0
webpack:///./src/Sightline/Deposit/Common/BankDisclaimer/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","disclaimer":"disclaimer"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/Common/BankDisclaimer/style.css
// module id = 471
// module chunks = 0
webpack:///./src/Sightline/Deposit/Common/WarningText/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","warning-container":"warning-container","warningContainer":"warning-container","warning-icon":"warning-icon","warningIcon":"warning-icon","warning-text":"warning-text","warningText":"warning-text"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/Common/WarningText/style.css
// module id = 472
// module chunks = 0
webpack:///./src/Sightline/Deposit/Enrolled/index.jsx
// @flow
import React, { Component, type Element } from "react";
import { connect } from "react-redux";
import classnames from "classnames";
import { get, bindAll, debounce, attempt, isError } from "lodash";
import conf from "@tvg/conf";
import Button from "@tvg/ui-bootstrap/components/Buttons";
import Lock from "@tvg/ui-bootstrap/assets/svg/lock.svg";
import Plus from "@tvg/ui-bootstrap/assets/svg/plus.svg";
import Minus from "@tvg/ui-bootstrap/assets/svg/minus.svg";
import Close from "@tvg/ui-bootstrap/assets/svg/close.svg";
import ButtonStyles from "@tvg/ui-bootstrap/components/Buttons/index.css";
import ModalPortal from "@tvg/ui-bootstrap/components/Modal";
import modalStyles from "@tvg/ui-bootstrap/components/Modal/example.css";
import DepositAmount from "../Common/DepositAmount";
import DepositFeedback from "./DepositFeedback";
import SecurityNumber from "../Common/CreditCard/SecurityNumber";
import Card from "./Card";
import Title from "../Common/Titles";
import Transfer from "../Common/Transfer";
import Review from "../Common/Review";
import { AddCardModal } from "./AddCardModal";
import BankDisclaimer from "../Common/BankDisclaimer";
import style from "./style.css";
import {
transferFundsToTVG,
addNewCard,
fundSightlineAndTransferToTVG,
changeDefaultCard,
resetAllOperationState,
errorShown,
userFilledField,
userFilledDepositField,
userFilledTransferField,
openInvalidCardModal
} from "../actions";
import type { Action } from "../actions";
import type {
WrapperDepositInfo,
AccountInfo,
CardType,
CreditCardType,
transferToTVGMap,
MinimalCardType
} from "../Types.js.flow";
import type { CAPI, DepositLabels } from "../../../Types.js.flow";
import { getSightlineFees } from "../../../services/slp";
import WarningText from "../Common/WarningText";
const tvgConf = conf();
type Props = {
balance: number,
cards: CardType[],
defaultCard: ?number,
transferAmount: ?number,
dispatch: Dispatch<Action>,
transferToTVG: ?transferToTVGMap,
addNewCard: MinimalCardType,
fundSightline: {
balance: number,
cards: CardType[],
depositFee: number,
feeAmount: number,
feeRefundAmount: number
},
enrollUser: {
isFetching: boolean,
success: boolean,
error: *
},
onPaymentComplete: () => mixed,
onFundComplete: () => mixed,
sightlineUserAccount: AccountInfo,
capi: CAPI,
dmaDepositLabels: DepositLabels,
wrapperDepositInfo: ?WrapperDepositInfo,
alreadyProcessedRedirect: boolean,
addCardModalVisible: boolean,
userAccountDetails: mixed,
addFundsSectionVisible: boolean,
onFill: (f: string) => (v: *) => Dispatch<Action>,
onDepositFill: (f: string) => (v: *) => Dispatch<Action>,
onTransferFill: (f: string) => (v: *) => Dispatch<Action>,
onError: (f: string) => (v: *) => Dispatch<Action>,
onAddFundsOpenSection: () => Dispatch<Action>,
onAddFundsHideSection: () => Dispatch<Action>,
onAddCardModalOpen: () => Dispatch<Action>,
onAddCardModalHide: () => Dispatch<Action>,
onChangeCardModalOpen: () => Dispatch<Action>,
onDepositAmountClick: (amount: number) => Dispatch<Action>,
onTooltipShow: (fieldName: string) => () => Dispatch<Action>,
debounce: boolean,
onHandleDebounce: () => mixed,
showCardDeclinedModal: boolean,
declinedCardList: string[],
cardDeclinedWarningLabels: {
full: string,
short: string,
addCard: string
}
};
type State = {
disabled: boolean,
transferAmountValid: boolean,
transferAmount: number,
depositAmount: number,
depositAmountValid: boolean,
securityNumber: string,
securityNumberValid: boolean,
defaultCard: ?CardType,
showAddCardModal: boolean,
card: ?CreditCardType,
balance: number,
disabledCardButton: boolean,
wrapperDepositInfo: ?WrapperDepositInfo,
isDirty: boolean,
isFdr: boolean
};
const iconProps = {
fill: "#5c9de0",
width: 16,
height: 16
};
const getFeesDebounced = debounce(
({ amount, accountId, callback }) =>
getSightlineFees({ amount, accountId }).then(callback),
500
);
const getFeesThen = ({ amount, accountId, callback }) => {
let getFees = Promise.resolve(null);
if (amount && accountId) {
getFees = getFeesDebounced({
amount,
accountId,
callback
});
}
return getFees;
};
// In the future probably remove this by adding a property 'securityCodeLabel' on CardType instance, to avoid extra processing
export const getCardSecurityCodeLabel = (type: string): string => {
if (!type) {
return "CVV";
}
switch (type) {
case "VISA":
return "CVV";
case "MASTERCARD":
return "CVC";
case "DISCOVER":
return "CID";
default:
return "CVV";
}
};
export class Enrolled extends Component {
static getDefaultCard(id: ?number, cards: CardType[]): ?CardType {
if (!id) {
return null;
}
return cards.filter(card => card.id === id).pop() || null;
}
static defaultProps = {
cards: [],
defaultCard: null,
balance: 0,
transferToTVG: null,
wrapperDepositInfo: null,
declinedCardList: [],
showCardDeclinedModal: false,
cardDeclinedWarningLabels: {
full: "Visa cards can no longer be used to load pre-paid TVG cards",
short: "Visa cards are no longer accepted",
addCard: "Visa cards can no longer be used to load pre-paid TVG cards"
}
};
constructor(props: Props) {
super(props);
this.state = {
disabled: true,
transferAmount: 0,
transferAmountValid: false,
depositAmount: 0,
depositAmountValid: false,
securityNumber: "",
securityNumberValid: false,
defaultCard: Enrolled.getDefaultCard(props.defaultCard, props.cards),
card: null,
disabledCardButton: true,
balance: props.balance,
wrapperDepositInfo: this.props.alreadyProcessedRedirect
? null
: this.props.wrapperDepositInfo,
isDirty: false,
isFdr:
tvgConf.product === "fdrmobile" ||
tvgConf.product === "fdrios" ||
tvgConf.product === "fdrandroid",
showCardDeclinedModal: false
};
bindAll(this, [
"setMax",
"openSlideDown",
"handleAddCard",
"handleTransferAmount",
"handleDepositAmount",
"handleSecurityNumber",
"handleAuthorize",
"closeAddCardModal"
]);
}
state: State;
componentDidMount() {
if (
this.state.wrapperDepositInfo &&
this.state.wrapperDepositInfo.amount &&
!this.props.alreadyProcessedRedirect &&
this.props.sightlineUserAccount
) {
let accountId = get(
this.props,
"userAccountDetails.accountDetails.accountDetails.accountNumber",
this.props.userAccountDetails.accountNumber
);
if (!accountId) {
accountId =
get(this.props, "userAccountDetails.accountDetails.accountNumber") ||
get(
this.props,
"userAccountDetails.accountDetails.accountDetails.accountNumber"
);
}
this.props.dispatch({
type: "PROCESSING_REDIRECT",
data: {
isRedirect: true,
amount: +this.props.wrapperDepositInfo.amount,
accountId
}
});
getFeesThen({
amount: +this.props.wrapperDepositInfo.amount,
accountId,
callback: ({ feeAmount, feeTotalAmount, feeRefundAmount }) => {
const redirectFundData = {
amount:
+this.props.wrapperDepositInfo.amount +
parseInt(feeTotalAmount, 10),
securityNumber: get(
this.props,
"wrapperDepositInfo.cvv",
""
).toString(),
newPaymentCardInfo: {
number: this.props.wrapperDepositInfo.cardNumber,
expirationMonth: parseInt(
this.props.wrapperDepositInfo.expirationMonth,
10
),
expirationYear: parseInt(
`20${this.props.wrapperDepositInfo.expirationYear}`,
10
)
}
};
this.props
.dispatch(
fundSightlineAndTransferToTVG(
redirectFundData,
+this.props.wrapperDepositInfo.amount,
accountId,
true,
"",
feeTotalAmount,
feeAmount,
feeRefundAmount
)
)
.then(() => this.props.dispatch({ type: "REDIRECT_PROCESSED" }));
}
});
}
}
componentWillReceiveProps(props) {
if (this.props.transferAmount === props.transferAmount) {
this.setState(
{
defaultCard: Enrolled.getDefaultCard(props.defaultCard, props.cards),
securityNumber:
props.defaultCard !== this.props.defaultCard
? ""
: this.state.securityNumber
},
this.isDisabled
);
} else {
// if transfer amount is changed externally - redirect case: only funding success
this.setState({
transferAmount: props.transferAmount,
disabled: false
});
}
}
setMax: () => number;
setMax() {
const value =
this.props.addFundsSectionVisible && this.state.depositAmount > 0
? this.state.depositAmount + this.props.balance
: this.props.balance;
return parseInt(value, 10) - this.state.depositFee;
}
checkBlackListCards: (ct: string) => boolean;
checkBlackListCards = cardType =>
this.props.declinedCardList.includes(cardType);
handleTransferAmount: (a: string, b: boolean) => void;
handleTransferAmount(value: string, valid: boolean) {
let transferAmount = value;
if (!isNaN(value) && value !== "" && value.toString().indexOf(".") === -1) {
// it is indeed an int and not a float
transferAmount = parseInt(value, 10);
}
const accountId =
get(this.props, "userAccountDetails.accountDetails.accountNumber") ||
get(
this.props,
"userAccountDetails.accountDetails.accountDetails.accountNumber"
);
getFeesThen({
amount: transferAmount,
accountId,
callback: ({ feeAmount, feeTotalAmount, feeRefundAmount }) => {
this.setState({
depositFee: feeTotalAmount,
feeAmount,
feeRefundAmount
});
}
});
this.setState(
{
transferAmount: value ? transferAmount : 0,
transferAmountValid: valid,
isDirty: true
},
this.isDisabled
);
// This is currently only being used by the GTM
// but we could start saving data in the store.
this.props.dispatch({
type: "CHANGE_TRANSFER_AMOUNT",
data: {
amount: value ? transferAmount : 0,
isValid: valid
}
});
}
isDisabled: () => void;
isDisabled() {
const disabled =
this.props.addFundsSectionVisible && this.state.defaultCard
? !(
this.state.transferAmountValid &&
this.state.depositAmountValid &&
this.state.securityNumberValid &&
this.state.transferAmount <= this.setMax()
)
: !(
this.state.transferAmountValid &&
this.state.transferAmount <= this.setMax()
);
this.setState({ disabled });
}
openSlideDown: () => void;
openSlideDown() {
this.setState(
{
depositAmount: this.props.addFundsSectionVisible
? 0
: this.state.depositAmount,
depositAmountValid: this.props.addFundsSectionVisible
? false
: this.state.depositAmountValid,
securityNumber: this.props.addFundsSectionVisible
? ""
: this.state.securityNumber,
securityNumberValid: this.props.addFundsSectionVisible
? false
: this.state.securityNumberValid
},
() => {
this.isDisabled();
if (
this.props.alreadyProcessedRedirect ||
!get(this.state.wrapperDepositInfo, "cardNumber", "")
) {
if (this.props.addFundsSectionVisible) {
this.props.onAddFundsHideSection();
} else {
this.props.onAddFundsOpenSection();
}
}
if (
!this.props.alreadyProcessedRedirect &&
get(this.state.wrapperDepositInfo, "cardNumber", "")
) {
this.props.onAddFundsOpenSection();
}
}
);
}
transferToTVG: () => {};
transferToTVG() {
let accountId = get(
this.props,
"userAccountDetails.accountDetails.accountDetails.accountNumber",
this.props.userAccountDetails.accountNumber
);
if (!accountId) {
accountId =
(this.props.userAccountDetails.accountDetails &&
this.props.userAccountDetails.accountDetails.accountNumber) ||
(this.props.userAccountDetails.accountDetails.accountDetails &&
this.props.userAccountDetails.accountDetails.accountDetails
.accountNumber);
}
this.props
.dispatch(
transferFundsToTVG(
this.state.transferAmount,
accountId,
false,
this.state.depositFee,
this.state.feeAmount,
this.state.feeRefundAmount
)
)
.then(this.props.onPaymentComplete)
.then(this.props.onFundComplete)
.then(this.props.onHandleDebounce);
}
fundSightline: () => void;
fundSightline() {
if (this.state.defaultCard) {
const cardType = this.state.defaultCard.type;
if (
this.props.showCardDeclinedModal &&
this.checkBlackListCards(cardType)
) {
this.props.dispatch(openInvalidCardModal());
} else {
let accountId = get(
this.props,
"userAccountDetails.accountDetails.accountDetails.accountNumber",
this.props.userAccountDetails.accountNumber
);
if (!accountId) {
accountId =
(this.props.userAccountDetails.accountDetails &&
this.props.userAccountDetails.accountDetails.accountNumber) ||
(this.props.userAccountDetails.accountDetails.accountDetails &&
this.props.userAccountDetails.accountDetails.accountDetails
.accountNumber);
}
this.props
.dispatch(
fundSightlineAndTransferToTVG(
{
amount: this.state.depositAmount,
paymentCard: {
securityNumber: this.state.securityNumber
}
},
this.state.transferAmount,
accountId,
false,
this.state.defaultCard.id.toString(),
this.state.depositFee,
this.state.feeAmount,
this.state.feeRefundAmount
)
)
.then(this.props.onFundComplete);
}
}
}
handleAddCard: (c: CreditCardType) => void;
handleAddCard(card: CreditCardType) {
const hideModal = () => {
this.props.dispatch({ type: "HIDE_ADD_CARD_MODAL" });
};
const processRedirect = () => {
this.props.dispatch({ type: "PROCESS_REDIRECT" });
};
if (card) {
if (
this.props.showCardDeclinedModal &&
this.checkBlackListCards(card.cardType)
) {
hideModal();
this.props.dispatch(openInvalidCardModal());
} else {
let accountId = get(
this.props,
"userAccountDetails.accountDetails.accountDetails.accountNumber",
this.props.userAccountDetails.accountNumber
);
if (!accountId) {
accountId =
(this.props.userAccountDetails.accountDetails &&
this.props.userAccountDetails.accountDetails.accountNumber) ||
(this.props.userAccountDetails.accountDetails.accountDetails &&
this.props.userAccountDetails.accountDetails.accountDetails
.accountNumber);
}
this.setState({ defaultCard: card, isDirty: true });
this.props
.dispatch(
addNewCard(
{
expirationMonth: card.expirationMonth,
expirationYear: parseInt(`20${card.expirationYear}`, 10),
number: card.cardNumber.toString()
},
accountId
)
)
.then(hideModal)
.then(processRedirect)
.catch(hideModal);
}
}
}
handleSecurityNumber: (v: string, b: boolean) => void;
handleSecurityNumber(value: string, valid: boolean) {
const allZeros = /^0*$/.test(value);
const allNumbers = /^\d+$/.test(value);
this.setState(
{
securityNumber: value,
securityNumberValid: valid && !allZeros && allNumbers,
isDirty: true
},
this.isDisabled
);
}
handleDepositAmount: (mixed, mixed) => void;
handleDepositAmount(value: number, valid: boolean) {
console.log("\n\n\n\nValue:\n\n\n\n", value);
const accountId =
get(this.props, "userAccountDetails.accountDetails.accountNumber") ||
get(
this.props,
"userAccountDetails.accountDetails.accountDetails.accountNumber"
);
getFeesThen({
amount: value,
accountId,
callback: ({ feeAmount, feeTotalAmount, feeRefundAmount }) => {
const netAmount = parseFloat(value) - feeTotalAmount;
const transferAmount = netAmount > 0 ? netAmount : 0;
this.props.dispatch({
type: "CHANGE_TRANSFER_AMOUNT",
data: { amount: transferAmount }
});
this.setState({
transferAmount,
depositFee: feeTotalAmount,
feeAmount,
feeRefundAmount,
transferAmountValid: netAmount > 0,
isDirty: true
});
}
});
this.setState({
depositAmount: !isNaN(parseFloat(value)) ? parseFloat(value) : "",
depositAmountValid: valid,
transferAmount: parseFloat(value),
isDirty: true
});
}
handleAuthorize: () => void;
handleAuthorize() {
this.props.dispatch({
type: "DEPOSIT_ATTEMPT",
data: { amount: this.state.transferAmount }
});
this.props.dispatch(resetAllOperationState());
return this.props.addFundsSectionVisible && this.state.defaultCard
? this.fundSightline()
: this.transferToTVG();
}
closeAddCardModal: () => void;
closeAddCardModal() {
this.setState({ wrapperDepositInfo: null }, this.props.onAddCardModalHide);
}
modal: Element<*>;
addCardModal: Element<*>;
props: Props;
isInvalidCard(): boolean {
const cardType = get(this.state, "defaultCard.type");
return (
this.props.showCardDeclinedModal &&
this.props.addFundsSectionVisible &&
this.checkBlackListCards(cardType)
);
}
renderAddCardModal(): ?Element<*> {
if (!this.props.addCardModalVisible) {
return null;
}
return (
<ModalPortal
bodyClass={modalStyles.modal}
classnames={classnames(style.scroll, style.addCardModal)}
alwaysOpen
modalIdentifier="addNewCardModal"
modalParent="#funds"
closeModal={this.closeAddCardModal}
qaLabel="addCard"
>
<div>
<div className={classnames(modalStyles.modalHeader, style.header)}>
<span data-qa-label="modalHeaderTitle">Add a new card</span>
<button
type="button"
onClick={this.closeAddCardModal}
className={ButtonStyles.inlineButton}
data-qa-label="modalHeaderCloseButton"
>
<Close width="16px" height="16px" fill="#fff" />
</button>
</div>
<AddCardModal
addNewCard={this.props.addNewCard}
onCardNumberFill={this.props.onFill("cardNumber")}
onCardNumberError={this.props.onError("cardNumber")}
onExpirationMonthFill={this.props.onFill("cardExpMonth")}
onExpirationMonthError={this.props.onError("cardExpMonth")}
onExpirationYearFill={this.props.onFill("cardExpYr")}
onExpirationYearError={this.props.onError("cardExpYr")}
onSecurityNumberFill={this.props.onFill("cardCvn")}
onSecurityNumberError={this.props.onError("cardCvn")}
onSecurityTooltipShow={this.props.onTooltipShow("cardCvn")}
onSubmit={this.handleAddCard}
disabledCardButton={this.state.disabledCardButton}
initialCardNumber={
!this.props.alreadyProcessedRedirect
? get(this.state.wrapperDepositInfo, "cardNumber", "")
: ""
}
initialExpirationMonth={
!this.props.alreadyProcessedRedirect
? get(this.state.wrapperDepositInfo, "expirationMonth", "")
: ""
}
initialExpirationYear={
!this.props.alreadyProcessedRedirect
? get(this.state.wrapperDepositInfo, "expirationYear", "")
: ""
}
hadCardFromRedirect={
!this.props.alreadyProcessedRedirect
? !!get(this.state.wrapperDepositInfo, "cardNumber", "")
: false
}
declineCardText={this.props.cardDeclinedWarningLabels.addCard}
showCardDeclinedModal={this.props.showCardDeclinedModal}
declinedCardList={this.props.declinedCardList}
/>
</div>
</ModalPortal>
);
}
renderDepositFeedback(): ?Element<*> {
return (
<div>
{this.props.transferToTVG.completed && (
<DepositFeedback
className="depositFeedback"
onClose={() => this.props.dispatch(resetAllOperationState())}
user={this.props.sightlineUserAccount}
fundSightline={this.props.fundSightline}
transferToTVG={this.props.transferToTVG}
enrollUser={this.props.enrollUser}
capi={this.props.capi}
fee={this.props.transferToTVG.depositFee}
feeFull={this.props.transferToTVG.feeAmount}
feeRefund={this.props.transferToTVG.feeRefundAmount}
/>
)}
</div>
);
}
renderPrePaidCard(): Element<*> {
const buttonIconState = classnames({
"minus-sign": this.props.addFundsSectionVisible,
"plus-sign": !this.props.addFundsSectionVisible
});
return (
<div className="prepaid-card-section" data-qa-label="prepaidCardSection">
<Title>
<span data-qa-label="prepaidCardLabel">
{this.state.isFdr ? "Pre Paid Card:" : "Pre Paid Play+ Card:"}
</span>
<button
type="button"
onClick={this.openSlideDown}
className={classnames(
ButtonStyles.inlineButton,
style.openSlideDown,
"js-add-funds-btn",
buttonIconState
)}
data-qa-label="addFundsButton"
>
{this.props.addFundsSectionVisible ? (
<Minus data-qa-label="addFundsButtonIcon" {...iconProps} />
) : (
<Plus data-qa-label="addFundsButtonIcon" {...iconProps} />
)}
Add Funds
</button>
</Title>
<p>
<span data-qa-label="balanceLabel">Balance:</span>
<strong className={style.balance} data-qa-label="balanceValue">
${!this.state.balance
? "0.00"
: parseFloat(this.state.balance).toFixed(2)}
</strong>
</p>
</div>
);
}
renderCard(isOnlyDeclinedCard: boolean): ?Element<*> {
if (!this.state.defaultCard) {
return null;
}
const { number, expired, type } = this.state.defaultCard;
const defaultCardStyle = [style.defaultCard];
if (this.checkBlackListCards(type)) {
defaultCardStyle.push(style.blackListCard);
}
return (
<Card
className={classnames(...defaultCardStyle)}
number={number}
expired={expired}
type={type}
cards={this.props.cards}
defaultCard={this.state.defaultCard}
change
onSelect={card => this.props.dispatch(changeDefaultCard(card.id))}
onOpen={this.props.onChangeCardModalOpen}
qaLabel="defaultCard"
onAddNewCard={this.props.onAddCardModalOpen}
isOnlyDeclinedCard={isOnlyDeclinedCard}
declineCardText={this.props.cardDeclinedWarningLabels.short}
declinedCardList={this.props.declinedCardList}
showCardDeclinedModal={this.props.showCardDeclinedModal}
/>
);
}
renderReview() {
return (
<Review
labels={this.props.dmaDepositLabels}
depositAmount={this.state.depositAmount}
transferAmount={this.state.transferAmount}
fee={this.state.depositFee}
feeFull={this.state.feeAmount}
feeRefund={this.state.feeRefundAmount}
applyError={this.state.isDirty}
balance={
parseFloat(this.state.balance) +
parseFloat(this.state.depositAmount || "0") -
parseFloat(this.state.depositFee) -
parseFloat(this.state.transferAmount)
}
qaLabel=""
/>
);
}
renderEnrolledMsg() {
if (this.state.isFdr) {
return (
<div className={style.slpEnrolledMsg}>
<h3>{this.props.capi.slpEnrolledMsg}</h3>
<p>{this.props.capi.slpEnrolledText}</p>
</div>
);
}
return (
<h3 className={style.slpEnrolledMsg}>{this.props.capi.slpEnrolledMsg}</h3>
);
}
render(): Element<*> {
const isOnlyDeclinedCard =
this.props.cards &&
!this.props.cards.find(card => !this.checkBlackListCards(card.type));
return (
<div className={style.sightlineDeposit} data-qa-label="enrolled">
{this.renderEnrolledMsg()}
{this.renderAddCardModal()}
{this.renderDepositFeedback()}
{this.renderPrePaidCard()}
{this.props.addFundsSectionVisible && (
<div>
{this.state.defaultCard ? (
<section className="js-default-card-section">
<div data-qa-label="depositToPrePaidCardSection">
<Title qaLabel="depositToPrePaidCardLabel">
{this.state.isFdr
? "Deposit to Pre Paid Card"
: "Deposit to Pre Paid Play+ Card"}
</Title>
<DepositAmount
message={this.props.capi.slpTransferMsg}
value={
!this.props.alreadyProcessedRedirect
? get(this.state.wrapperDepositInfo, "amount", "")
: ""
}
onChange={this.handleDepositAmount}
onButtonClick={this.props.onDepositAmountClick}
onFill={this.props.onDepositFill("depositAmount")}
onError={this.props.onError(
"Standard Deposit Start | Other Amount"
)}
onTooltipShow={this.props.onTooltipShow("Deposit Amount")}
qaLabel="depositToPrePaidCardContent"
isFdr={this.state.isFdr}
/>
</div>
<div data-qa-label="creditCardSection">
<Title>
<span data-qa-label="RegisteredCardLabel">
Registered Card
</span>
{(!this.props.showCardDeclinedModal ||
!isOnlyDeclinedCard) && (
<button
type="button"
onClick={this.props.onAddCardModalOpen}
className={classnames(
"js-add-card-button",
ButtonStyles.inlineButton,
style.openSlideDown
)}
data-qa-label="addCardButton"
>
<Plus
data-qa-label="addCardButtonIcon"
{...iconProps}
/>
Add Card
</button>
)}
</Title>
{this.renderCard(isOnlyDeclinedCard)}
{this.props.showCardDeclinedModal &&
this.checkBlackListCards(this.state.defaultCard.type) && (
<div className={style.enrolledWarningTextWrapper}>
<WarningText>
{this.props.cardDeclinedWarningLabels.full}
</WarningText>
</div>
)}
<SecurityNumber
onChange={this.handleSecurityNumber}
onBlur={this.handleSecurityNumber}
onFill={this.props.onFill("cardCvn")}
onError={this.props.onError("cardCvn")}
onTooltipShow={this.props.onTooltipShow("cardCvn")}
value={this.state.securityNumber}
labelText={`Card ${getCardSecurityCodeLabel(
this.state.defaultCard.type
)}`}
/>
</div>
</section>
) : (
<div
className="js-no-default-card-section"
data-qa-label="creditCardSection"
>
<Title qaLabel="RegisteredCardLabel">
<span>Registered Card</span>
<button
type="button"
onClick={this.props.onAddCardModalOpen}
className={classnames(
ButtonStyles.inlineButton,
style.openSlideDown
)}
data-qa-label="addCardButton"
>
<Plus data-qa-label="addCardButtonIcon" {...iconProps} />
Add Card
</button>
</Title>
<p
className="js-no-default-card-msg"
data-qa-label="declinedInfoMessage"
// eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML={{
__html: this.props.capi.slpCardDeclinedTryToAddAgain
}}
/>
</div>
)}
</div>
)}
<div
className="transfer-to-tvg-section"
data-qa-label="transferToTVGAccountSection"
>
<Title qaLabel="transferToTVGAccountLabel">
{this.state.isFdr
? " Transfer To FanDuel Racing Account"
: " Transfer To TVG Account"}
</Title>
<Transfer
value={this.state.transferAmount}
max={this.setMax()}
onChange={this.handleTransferAmount}
onFill={this.props.onTransferFill("transferAmount")}
onError={this.props.onError("Transfer Amount")}
qaLabel=""
/>
</div>
{this.renderReview()}
<div className={style.authorize}>
<Button
size="big"
type="legacy"
className="js-authorize-button"
disabled={
this.isInvalidCard() ||
this.state.disabled ||
this.props.sightlineUserAccount.disableAuthorize ||
this.props.debounce
}
onClick={this.handleAuthorize}
icon
qaLabel="authorize"
>
<Lock fill="#fff" width="16px" height="16px" />
Authorize
</Button>
</div>
<BankDisclaimer />
</div>
);
}
}
const mapStateToProps = store => {
let dmaDepositLabels = attempt(() => JSON.parse(store.capi.dmaDepositLabels));
dmaDepositLabels = isError(dmaDepositLabels) ? null : dmaDepositLabels;
let cardDeclinedWarningLabels = attempt(() => {
const capiMessage = JSON.parse(store.capi.cardErrorRedirect);
return {
full: capiMessage.cardDeclinedWarningFullText,
short: capiMessage.cardDeclinedWarningShortText,
addCard: capiMessage.cardDeclinedWarningAddCardText
};
});
cardDeclinedWarningLabels = isError(cardDeclinedWarningLabels)
? {
full: "Visa cards can no longer be used to load pre-paid TVG cards",
short: "Visa cards are no longer accepted",
addCard: "Visa cards can no longer be used to load pre-paid TVG cards"
}
: cardDeclinedWarningLabels;
return {
capi: store.capi,
dmaDepositLabels,
cardDeclinedWarningLabels,
sightlineUserAccount: store.deposits.sightline.sightlineUserAccount,
userAccountDetails: store.userAccountDetails,
balance: store.deposits.sightline.sightlineUserAccount.balance,
cards: store.deposits.sightline.cards.cardList,
defaultCard: store.deposits.sightline.cards.defaultCard,
addNewCard: store.deposits.sightline.addNewCard,
transferToTVG: store.deposits.sightline.transferToTVG,
fundSightline: store.deposits.sightline.fundSightline,
enrollUser: store.deposits.sightline.enrollUser,
addCardModalVisible: store.deposits.sightline.addCardModalVisible,
wrapperDepositInfo: store.deposits.wrapperDepositInfo,
alreadyProcessedRedirect: store.deposits.alreadyProcessedRedirect,
addFundsSectionVisible: store.deposits.sightline.addFundsSectionVisible,
features: store.features,
transferAmount: store.deposits.sightline.transferAmount,
showCardDeclinedModal: store.features.showCardDeclinedModal
};
};
const mapDispatchToProps = (dispatch: Dispatch) => ({
dispatch,
onError: (fieldName: string) => (value: string, errors: string[]) =>
dispatch(errorShown(fieldName, value, errors)),
onFill: (fieldName: string) => (value: string) =>
dispatch(userFilledField(fieldName, value)),
onDepositFill: (fieldName: string) => (value: string) =>
dispatch(userFilledDepositField(fieldName, value)),
onTransferFill: (fieldName: string) => (value: string) =>
dispatch(userFilledTransferField(fieldName, value)),
onAddFundsOpenSection: () => dispatch({ type: "OPEN_ADD_FUNDS_SECTION" }),
onAddFundsHideSection: () => dispatch({ type: "HIDE_ADD_FUNDS_SECTION" }),
onAddCardModalOpen: () => dispatch({ type: "OPEN_ADD_CARD_MODAL" }),
onAddCardModalHide: () => dispatch({ type: "HIDE_ADD_CARD_MODAL" }),
onChangeCardModalOpen: () => dispatch({ type: "OPEN_CHANGE_CARD_MODAL" }),
onDepositAmountClick: (value: number) =>
dispatch({ type: "USER_SELECTED_DEPOSIT_AMOUNT", data: { value } }),
onTooltipShow: (fieldName: string) => () =>
dispatch({ type: "SHOW_TOOLTIP", data: { fieldName } })
});
export default connect(
mapStateToProps,
mapDispatchToProps
)(Enrolled);
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Enrolled/index.jsx
webpack:///./src/Sightline/Deposit/Enrolled/DepositFeedback/index.jsx
/* eslint-disable */
// @flow
import React from "react";
import { get } from "lodash";
import SuccessModal from "../SuccessModal";
import type { ApiError } from "../../../API";
import type { AccountInfo, EnrollUser } from "../../Types.js.flow";
type TransferToTVG = {
error: ?ApiError,
success: boolean,
depositAmount: ?number,
completed: boolean,
paymentProcessorTransactionId: ?string,
depositFee: ?number
};
type Props = {
user: AccountInfo,
fundSightline: *,
transferToTVG: TransferToTVG,
enrollUser: EnrollUser,
onClose: () => void
};
const setMessage = (
capi: *,
transferToTVG: TransferToTVG,
fundSightline: *,
enrollUser: EnrollUser
) => {
let wasEnrolled = enrollUser.success && !enrollUser.isFetching;
const amount = parseFloat(transferToTVG.depositAmount).toFixed(2);
const capiMessage = wasEnrolled
? get(
capi,
"slpDepositSuccessFirstTime",
"You successfully deposited <strong>$XXX</strong> into your TVG account through your new pre-paid card. Expect to receive your card in the mail shortly."
)
: get(
capi,
"slpDepositSuccess",
"You successfully deposited <strong>$XXX</strong> into your TVG account through your Pre Paid Play+ Card."
);
return capiMessage.replace("XXX", `${amount}`);
};
const DepositFeedback = (props: Props) => {
return (
<SuccessModal
balance={props.user.balance}
transactionNumber={props.transferToTVG.paymentProcessorTransactionId}
message={setMessage(
props.capi,
props.transferToTVG,
props.fundSightline,
props.enrollUser
)}
depositAmount={get(props, "fundSightline.data.fundedAmount", props.fundSightline.fundedAmount)}
fee={props.fee}
feeFull={props.feeFull}
feeRefund={props.feeRefund}
transferAmount={props.transferToTVG.depositAmount}
onClose={props.onClose}
/>
);
};
DepositFeedback.defaultProps = {
user: {},
fundSightline: {},
transferToTVG: { depositAmount: 0 },
onClose: () => {},
enrollUser: { success: false, isFetching: false }
};
export default DepositFeedback;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Enrolled/DepositFeedback/index.jsx
webpack:///./src/Sightline/Deposit/Enrolled/SuccessModal/index.jsx
/* eslint-disable */
// @flow
import React, { PureComponent } from "react";
import { connect } from "react-redux";
import classnames from "classnames";
import { noop, get } from "lodash";
import type { Element } from "react";
import queryString from "query-string";
import ModalPortal from "@tvg/ui-bootstrap/components/Modal";
import modalStyles from "@tvg/ui-bootstrap/components/Modal/example.css";
import Notification from "@tvg/ui-bootstrap/components/Notifications";
import ButtonStyles from "@tvg/ui-bootstrap/components/Buttons/index.css";
import Close from "@tvg/ui-bootstrap/assets/svg/close.svg";
import Review from "../../Common/Review";
import style from "./style.css";
type Props = {
transferAmount: ?number,
message: string,
fee: number,
balance: number,
transactionNumber: string,
depositAmount: ?number,
onClose: () => mixed,
onModalClose: () => mixed,
onClick: () => mixed
};
export class SuccessModal extends PureComponent {
static defaultProps = {
onClose: noop,
onModalClose: noop,
onClick: noop
};
props: Props;
modal: Element<*>;
render() {
let desktopView = true;
const iosProduct = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(
window.navigator.userAgent
);
const queryParameters = queryString.parse(window.location.search);
const isWrapped = queryParameters.wrapper || window.isWrapped;
if (get(window, "__TVG_GLOBALS__.DEVICE", "desktop") === "mobile") {
desktopView = false;
}
return (
<ModalPortal
autoOpen
ref={(c: Element<*>) => (this.modal = c)}
type="scrollContent"
classnames={[style.scroll, style.successModal]}
modalIdentifier="ModalSuccess"
modalParent="#funds"
bodyClass={modalStyles.modal}
onClose={() => {
this.props.onClose();
this.props.onModalClose();
}}
qaLabel="success"
>
<div className={classnames(modalStyles.modalHeader, style.header)}>
<span data-qa-label="successModalTitle">Deposit Summary</span>
<button
onClick={() => this.modal.close()}
className={ButtonStyles.inlineButton}
data-qa-label="successModalCloseButton"
>
<Close width="16px" height="16px" fill="#fff" />
</button>
</div>
<div className={style.modalBody}>
<Notification
type="success"
title="DEPOSIT SUCCESSFUL!"
message={this.props.message}
show
icon
/>
<div className={style.reviewContainer}>
<Review
title={false}
depositAmount={this.props.depositAmount}
fee={this.props.fee}
feeFull={this.props.feeFull}
feeRefund={this.props.feeRefund}
transferAmount={this.props.transferAmount}
transactionNumber={this.props.transactionNumber}
balance={this.props.balance}
qaLabel="successModal"
/>
<section
className={classnames({
[style.oneBtn]: !desktopView,
[style.iosView]: iosProduct
})}
>
{!isWrapped && (
<a
href="/races"
className={classnames([
ButtonStyles.tvgBtnSecondary,
ButtonStyles.big,
style.buttons
])}
onClick={this.props.onClick("See Full Schedule", "/races")}
data-qa-label="seeFullSchedule"
>
See Full Schedule
</a>
)}
{!isWrapped &&
desktopView && (
<a
href="/nextrace"
className={classnames([
ButtonStyles.tvgBtnSecondary,
ButtonStyles.big,
style.buttons
])}
onClick={this.props.onClick("Go To Next Race", "/nextrace")}
data-qa-label="goToNextRace"
>
Go to next race
</a>
)}
{isWrapped && (
<button
onClick={event => {
if (event) {
event.preventDefault();
event.stopPropagation();
}
this.props.onClose();
this.props.onModalClose();
}}
className={classnames([
ButtonStyles.tvgBtnSecondary,
ButtonStyles.big,
style.buttons
])}
data-qa-label="closeWrappedDeposit"
style={{ margin: "0 auto" }}
>
Close
</button>
)}
</section>
</div>
</div>
</ModalPortal>
);
}
}
const mapDispatchToProps = (dispatch: Dispatch) => ({
dispatch,
onClick: (fieldName: string, href: string) => () =>
dispatch({ type: "NAVIGATE_TO", data: { fieldName, href } }),
onModalClose: () => dispatch({ type: "HIDE_DEPOSIT_SUCCESS_MODAL" })
});
export default connect(
null,
mapDispatchToProps
)(SuccessModal); // eslint-disable-line
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Enrolled/SuccessModal/index.jsx
webpack:///./src/Sightline/Deposit/Enrolled/SuccessModal/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","header":"header","successModal":"successModal","modalBody":"modalBody","error":"error","buttons":"buttons","oneBtn":"oneBtn","iosView":"iosView","reviewContainer":"reviewContainer"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/Enrolled/SuccessModal/style.css
// module id = 478
// module chunks = 0
webpack:///./src/Sightline/Deposit/Enrolled/Card/index.jsx
// @flow
import React from "react";
import classnames from "classnames";
import Button from "@tvg/ui-bootstrap/components/Buttons";
import CardModal from "./Modal";
import CardBrand from "./CardBrand";
import style from "./style.css";
import type { CardType } from "../../Types.js.flow";
import CardBody from "./CardBody";
type Props = {
cards: CardType[],
number: string,
type: string,
select?: boolean,
change: boolean,
defaultCard: CardType, // eslint-disable-line
onSelect: (card: CardType) => mixed, // eslint-disable-line
onOpen: () => mixed, // eslint-disable-line
className: string,
expired: boolean,
qaLabel: string,
onAddNewCard: () => mixed,
isOnlyDeclinedCard: boolean,
declineCardText: string,
declinedCardList: string[],
showCardDeclinedModal: boolean
};
const renderButton = (props: Props, onOpenModal?: () => mixed) => {
let text = "";
let buttonProps = {
onClick: () => {},
qaLabel: "",
type: "tertiary"
};
if (props.showCardDeclinedModal && props.isOnlyDeclinedCard) {
text = "+ Add card";
buttonProps = {
...buttonProps,
onClick: () => {
props.onAddNewCard();
},
qaLabel: "defaultCardAdd"
};
} else if (props.cards.length > 1) {
text = "Change";
buttonProps = {
...buttonProps,
onClick: () => {
if (onOpenModal) {
onOpenModal();
}
props.onOpen();
},
qaLabel: "defaultCardChange"
};
}
return text && <Button {...buttonProps}>{text}</Button>;
};
const Card = (props: Props) => {
let cardModal;
const handleOpenModal = () => {
cardModal.open();
};
const modalCards = cards =>
cards &&
cards.filter(card => card.id !== props.defaultCard.id).map((card, idx) => {
const isDisabled = props.declinedCardList.includes(card.type);
const wrapperStyles = [style.card, "js-stored-card"];
if (props.showCardDeclinedModal && isDisabled) {
wrapperStyles.push(style.cardDisabled);
}
return (
<div
role="button"
tabIndex={idx}
key={card.id.toString()}
className={classnames(...wrapperStyles)}
data-key="selectCard"
data-id={card.id}
onClick={() => {
if (!props.showCardDeclinedModal || !isDisabled) {
cardModal.close();
props.onSelect(card);
}
}}
data-qa-label={`changeCardButton${idx + 1}`}
>
<section>
{card.expired && <div className={style.expired}>Expired</div>}
<CardBrand
type={card.type}
qaLabel="changeCardButtonIcon"
disabled={props.showCardDeclinedModal && isDisabled}
/>
<CardBody
number={card.number}
type={card.type}
qaLabel="changeCard"
select
disabled={props.showCardDeclinedModal && isDisabled}
declineCardText={props.declineCardText}
/>
</section>
</div>
);
});
return (
<div
className={classnames(props.className, style.card)}
data-qa-label={props.qaLabel.concat("Area")}
>
<CardModal
reference={c => {
cardModal = c;
}}
onClose={() => cardModal.close()}
id="cardModal"
qaLabel="changeCard"
>
{modalCards(props.cards)}
</CardModal>
<section>
{props.expired && <div className={style.expired}>Expired</div>}
<CardBrand type={props.type} qaLabel={props.qaLabel.concat("Image")} />
<CardBody
number={props.number}
type={props.type}
change={props.change}
select={props.select}
qaLabel="defaultCard"
/>
{props.change && props.cards && renderButton(props, handleOpenModal)}
</section>
</div>
);
};
Card.defaultProps = {
cards: [],
number: 0,
type: "UNKNOWN",
balance: 0,
select: false,
change: false,
className: "",
onSelect: () => {},
onOpen: () => {},
qaLabel: "",
onAddNewCard: () => {},
isOnlyDeclinedCard: false,
declineCardText: "VISA no longer accepted",
declinedCardList: [],
showCardDeclinedModal: false
};
export default Card;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Enrolled/Card/index.jsx
webpack:///./src/Sightline/Deposit/Enrolled/Card/Modal/index.jsx
// @flow
import React from "react";
import type { Element } from "react";
import classnames from "classnames";
import ModalPortal from "@tvg/ui-bootstrap/components/Modal";
import ModalStyles from "@tvg/ui-bootstrap/components/Modal/example.css";
import ButtonStyles from "@tvg/ui-bootstrap/components/Buttons/index.css";
import Close from "@tvg/ui-bootstrap/assets/svg/close.svg";
import style from "./style.css";
type Props = {
children: Element<*>[],
id: string,
reference: (c: Element<*>) => void,
onClose: () => void,
qaLabel: string
};
// @SEE https://github.com/facebook/flow/issues/1964
// $FlowBug
const CardModal = (props: Props) => (
<ModalPortal
ref={props.reference}
type="scrollContent"
modalIdentifier={props.id}
modalParent="#funds"
bodyClass={ModalStyles.modal}
classnames={classnames(style.changeCardModal, style.scroll)}
qaLabel={props.qaLabel}
>
<div className={classnames(ModalStyles.modalHeader, style.header)}>
<span data-qa-label="modalHeaderTitle">Change Card</span>
<button
onClick={props.onClose}
className={ButtonStyles.inlineButton}
data-qa-label="modalHeaderCloseButton"
>
<Close width="16px" height="16px" fill="#fff" />
</button>
</div>
<div
className={classnames(
ModalStyles.modalBody,
style.cardsModal,
style.modalBody
)}
data-qa-label="modalBody"
>
{props.children}
</div>
</ModalPortal>
);
CardModal.defaultProps = {
qaLabel: ""
};
export default CardModal;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Enrolled/Card/Modal/index.jsx
webpack:///./src/Sightline/Deposit/Enrolled/Card/Modal/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","cards-modal":"cards-modal","cardsModal":"cards-modal","changeCardModal":"changeCardModal","scroll":"scroll","modalBody":"modalBody","header":"header"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/Enrolled/Card/Modal/style.css
// module id = 481
// module chunks = 0
webpack:///./src/Sightline/Deposit/Enrolled/Card/CardBrand/index.jsx
// @flow
import React from "react";
import classnames from "classnames";
import Brand from "../../../Common/Brand";
import type { Dimensions } from "../../../Types.js.flow";
import style from "./style.css";
import { WarningIcon } from "../../../Common/WarningText";
type Props = {
type?: ?string,
dimensions?: Dimensions,
qaLabel: string,
disabled: string
};
const CardBrand = (props: Props) => {
const wrapperStyles = [style.cardBrandWrapper];
if (props.disabled) {
wrapperStyles.push(style.cardBrandDisabled);
}
return (
<div className={classnames(...wrapperStyles)}>
<Brand
brand={props.type}
className={style.cardIcon}
qaLabel={props.qaLabel}
dimensions={props.dimensions}
/>
{props.disabled && (
<div className={style.warningIconBrand}>
<WarningIcon qaLabel="brand-icon" />
</div>
)}
</div>
);
};
CardBrand.defaultProps = {
type: "UNKNOWN",
dimensions: { width: "48px", height: "30px" },
qaLabel: "",
disabled: false
};
export default CardBrand;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Enrolled/Card/CardBrand/index.jsx
webpack:///./src/Sightline/Deposit/Enrolled/Card/CardBrand/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","card-brand-wrapper":"card-brand-wrapper","cardBrandWrapper":"card-brand-wrapper","card-icon":"card-icon","cardIcon":"card-icon","warning-icon-brand":"warning-icon-brand","warningIconBrand":"warning-icon-brand","card-brand-disabled":"card-brand-disabled","cardBrandDisabled":"card-brand-disabled"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/Enrolled/Card/CardBrand/style.css
// module id = 483
// module chunks = 0
webpack:///./src/Sightline/Deposit/Enrolled/Card/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","card":"card","expired":"expired","card-disabled":"card-disabled","cardDisabled":"card-disabled"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/Enrolled/Card/style.css
// module id = 484
// module chunks = 0
webpack:///./src/Sightline/Deposit/Enrolled/Card/CardBody/index.jsx
// @flow
import React from "react";
import classnames from "classnames";
import style from "./style.css";
import WarningText from "../../../Common/WarningText";
type Props = {
change?: boolean,
select?: boolean,
number: ?string,
type: ?string,
qaLabel: string,
disabled: boolean,
declineCardText: string
};
const CardBody = (props: Props) => {
const wrapperClassNames = [style.wrapper];
if (props.disabled) {
wrapperClassNames.push(style.cardBodyDisabled);
}
return (
<div className={style.cardBodyWrapper}>
{props.change && (
<div className={classnames(...wrapperClassNames)}>
<strong
className={style.defaultPayment}
data-qa-label={props.qaLabel.concat("Title")}
>
Default Payment
</strong>
<div className={style.bottomWrapper}>
<strong
className={style.cardType}
data-qa-label={props.qaLabel.concat("Type")}
>
{props.type}
</strong>
<span data-qa-label={props.qaLabel.concat("Number")}>
{props.number}
</span>
</div>
</div>
)}
{props.select && [
<div className={classnames(...wrapperClassNames)}>
<strong
className={style.defaultPayment}
data-qa-label={props.qaLabel.concat("Type")}
>
{props.type}
</strong>
<div className={style.bottomWrapper}>
<span data-qa-label={props.qaLabel.concat("Number")}>
{props.number}
</span>
</div>
</div>,
props.disabled && (
<WarningText showIcon={false}>{props.declineCardText}</WarningText>
)
]}
</div>
);
};
export default CardBody;
CardBody.defaultProps = {
change: false,
select: false,
qaLabel: "",
disabled: false,
declineCardText: "VISA no longer accepted"
};
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Enrolled/Card/CardBody/index.jsx
webpack:///./src/Sightline/Deposit/Enrolled/Card/CardBody/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","cardName":"cardName","cardType":"cardType","card-body-wrapper":"card-body-wrapper","cardBodyWrapper":"card-body-wrapper","card-body-disabled":"card-body-disabled","cardBodyDisabled":"card-body-disabled"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/Enrolled/Card/CardBody/style.css
// module id = 486
// module chunks = 0
webpack:///./src/Sightline/Deposit/Enrolled/AddCardModal.jsx
// @flow
import React, { Component } from "react";
import classnames from "classnames";
import { bindAll } from "lodash";
import Button from "@tvg/ui-bootstrap/components/Buttons";
import Loading from "@tvg/ui-bootstrap/components/Loading";
import Lock from "@tvg/ui-bootstrap/assets/svg/lock.svg";
import modalStyles from "@tvg/ui-bootstrap/components/Modal/example.css";
import CreditCard from "../Common/CreditCard";
import Title from "../Common/Titles";
import { validCard } from "../Common/CreditCard/utils";
import type { CreditCardType } from "../Types.js.flow";
import style from "./style.css";
import WarningText from "../Common/WarningText";
type Props = {
addNewCard: { isFetching: boolean },
onCardNumberFill: () => mixed,
onCardNumberError: () => mixed,
onExpirationMonthFill: () => mixed,
onExpirationMonthError: () => mixed,
onExpirationYearFill: () => mixed,
onExpirationYearError: () => mixed,
onSecurityNumberFill: () => mixed,
onSecurityNumberError: () => mixed,
onSecurityTooltipShow: () => mixed,
onSubmit: () => mixed,
initialCardNumber: number,
hadCardFromRedirect: boolean,
initialExpirationMonth: string,
initialExpirationYear: string,
declineCardText: string,
showCardDeclinedModal: boolean,
declinedCardList: string[]
};
type State = {
card: ?CreditCardType,
disabledCardButton: boolean
};
export class AddCardModal extends Component {
constructor(props: Props) {
super(props);
this.state = {
card: null,
disabledCardButton: true
};
bindAll(this, ["handleCreditCardChange", "isDisabledCardButton"]);
}
state: State;
props: Props;
handleCreditCardChange: (c: CreditCardType) => void;
handleCreditCardChange(card: CreditCardType) {
this.setState({ card }, this.isDisabledCardButton);
}
isDisabledCardButton: () => void;
isDisabledCardButton() {
const disabledCardButton =
!validCard(this.state.card) ||
this.props.declinedCardList.includes(this.state.card.cardType);
this.setState({ disabledCardButton });
}
render(): Element<*> {
return (
<div>
{this.props.showCardDeclinedModal && (
<div className={style.warningAddCardBox}>
<WarningText mode="light">{this.props.declineCardText}</WarningText>
</div>
)}
<div
className={classnames(modalStyles.modalBody, style.addCardBody)}
data-qa-label="modalBody"
>
<Title qaLabel="cardDetailsLabel">Card Details</Title>
<CreditCard
onBlur={this.handleCreditCardChange}
onChange={this.handleCreditCardChange}
onCardNumberFill={this.props.onCardNumberFill}
onCardNumberError={this.props.onCardNumberError}
onExpirationMonthFill={this.props.onExpirationMonthFill}
onExpirationMonthError={this.props.onExpirationMonthError}
onExpirationYearFill={this.props.onExpirationYearFill}
onExpirationYearError={this.props.onExpirationYearError}
onSecurityNumberFill={this.props.onSecurityNumberFill}
onSecurityNumberError={this.props.onSecurityNumberError}
onSecurityTooltipShow={this.props.onSecurityTooltipShow}
qaLabel="enrolled"
initialCardNumber={this.props.initialCardNumber}
hadCardFromRedirect={this.props.hadCardFromRedirect}
initialExpirationYear={this.props.initialExpirationYear}
initialExpirationMonth={this.props.initialExpirationMonth}
/>
<Button
size="big"
type="legacy"
className={style.addCardButton}
onClick={() => this.props.onSubmit(this.state.card)}
disabled={this.state.disabledCardButton}
icon
qaLabel="addCardModal"
>
<Lock fill="#fff" width="16px" height="16px" />
Add Card
{this.props.addNewCard.isFetching && <Loading size="small" />}
</Button>
</div>
</div>
);
}
}
export default AddCardModal;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Enrolled/AddCardModal.jsx
webpack:///./src/Sightline/Deposit/style.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds","label":"label","label-container":"label-container","labelContainer":"label-container","container":"container","loading":"loading","loadingBig":"loadingBig"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/Deposit/style.css
// module id = 488
// module chunks = 0
webpack:///./src/configureStore.js
// @flow
import { createStore, compose, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import type { Store } from 'redux';
import reducer, { initialState, type State } from './Pages/reducers';
import analytics from './middleware/analytics';
import qubit from './middleware/qubit';
let composeEnhancers = compose;
const middlewares = () => [
thunk,
analytics({
event: 'deposit',
gaEventCategory: 'Deposit',
microApp: 'Deposit',
}),
qubit,
];
/* eslint-disable */
composeEnhancers =
typeof window === 'object' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({})
: compose;
/* eslint-enable */
export default (state: State = initialState): Store<State, *> => {
const store = createStore(
reducer,
state,
composeEnhancers(applyMiddleware(...middlewares()))
);
if (module.hot) {
module.hot.accept('./Pages/reducers', () =>
System.import('./Pages/reducers').then(reducerModule =>
store.replaceReducer(reducerModule.default)
)
);
}
return store;
};
// WEBPACK FOOTER //
// ./src/configureStore.js
webpack:///./src/Pages/reducers.js
// @flow
import { combineReducers } from "redux";
import { get } from "lodash";
import deposits, {
type State as DepositType,
initialState as depositInitialState
} from "./Deposits/reducers";
import type { ApiOperationResult } from "../Types.js.flow";
import type { CAPIMessages } from "../services/capi";
import type { Action } from "./actions";
import messages from "../data/messages.json";
import type { AccountDetail } from "./Deposits/Types.js.flow";
// All of these are optional because of index.legacy
export type State = {
isFetchingCAPI?: boolean,
isFetchingFeatures?: boolean,
isFetchingUserAccountDetails?: boolean,
capi: ?CAPIMessages,
features: ?(Object[]),
deposits: DepositType,
isAuthenticated: ApiOperationResult<{}>,
hasMadeInitialDeposit: boolean,
userAccountDetails: AccountDetail
};
export const initialState: State = {
isFetchingCAPI: true,
isFetchingFeatures: true,
isFetchingUserAccountDetails: true,
capi: messages,
features: [],
deposits: depositInitialState,
isAuthenticated: {
isFetching: false,
success: false,
error: null
},
hasMadeInitialDeposit: false,
userAccountDetails: {}
};
const isFetchingCAPI = (
state: $PropertyType<State, "isFetchingCAPI"> = initialState.isFetchingCAPI,
action: Action
): $PropertyType<State, "isFetchingCAPI"> => {
switch (action.type) {
case "FETCH_CAPI_REQUEST":
return true;
case "FETCH_CAPI_SUCCESS":
case "FETCH_CAPI_FAILURE":
return false;
default:
return state;
}
};
const isFetchingFeatures = (
state: $PropertyType<
State,
"isFetchingFeatures"
> = initialState.isFetchingFeatures,
action: Action
): $PropertyType<State, "isFetchingFeatures"> => {
switch (action.type) {
case "FETCH_FEATURES_REQUEST":
return true;
case "FETCH_FEATURES_SUCCESS":
case "FETCH_FEATURES_FAILURE":
return false;
default:
return state;
}
};
const capi = (
state: $PropertyType<State, "capi"> = initialState.capi,
action: Action
): $PropertyType<State, "capi"> => {
switch (action.type) {
case "FETCH_CAPI_SUCCESS":
return {
...state,
...action.data
};
default:
return state;
}
};
const features = (
state: $PropertyType<State, "features"> = initialState.features,
action: Action
): $PropertyType<State, "features"> => {
switch (action.type) {
case "FETCH_FEATURES_SUCCESS": {
const featureToggles = [];
action.data.featureToggles.map(feature => {
const random = Math.floor(Math.random() * 100 + 1); // random number between 1 and 100
const throttle = feature.percentage;
let returnValue = false;
if (feature.enabled && (random <= throttle || throttle === "100%")) {
returnValue = true;
}
featureToggles[feature.name] = returnValue;
return returnValue;
});
return {
...state,
...featureToggles
};
}
default:
return state;
}
};
const isAuthenticated = (
state: $PropertyType<State, "isAuthenticated"> = initialState.isAuthenticated,
action: Action
): $PropertyType<State, "isAuthenticated"> => {
switch (action.type) {
case "FETCH_USER_AUTHENTICATION":
return {
...state,
isFetching: true,
success: false,
error: null
};
case "LEGACY_WRAPPER_DATA":
return {
...state,
isFetching: false,
success: !!action.data.isAuthenticated,
error: null
};
case "FETCH_USER_AUTHENTICATION_SUCCESS":
return {
isFetching: false,
success: true,
error: null
};
case "FETCH_USER_AUTHENTICATION_FAILURE":
return {
isFetching: false,
success: false,
error: action.error
};
default:
return state;
}
};
const userAccountDetails = (
state: $PropertyType<
State,
"userAccountDetails"
> = initialState.userAccountDetails,
action: Action
) => {
switch (action.type) {
case "LEGACY_WRAPPER_DATA":
case "FETCH_TVG_USER_ACCOUNT_DETAILS_SUCCESS":
return {
...state,
...action.data
};
default:
return state;
}
};
const isFetchingUserAccountDetails = (
state: $PropertyType<
State,
"isFetchingUserAccountDetails"
> = initialState.isFetchingUserAccountDetails,
action: Action
) => {
switch (action.type) {
case "FETCH_TVG_USER_ACCOUNT_DETAILS":
return true;
case "FETCH_TVG_USER_ACCOUNT_DETAILS_SUCCESS":
case "FETCH_TVG_USER_ACCOUNT_DETAILS_FAILURE":
return false;
default:
return state;
}
};
const hasMadeInitialDeposit = (
state: $PropertyType<
State,
"hasMadeInitialDeposit"
> = initialState.hasMadeInitialDeposit,
action: Action
): $PropertyType<State, "hasMadeInitialDeposit"> => {
switch (action.type) {
case "TRANSFER_FUNDS_TO_TVG_SUCCESS":
return true;
case "FUND_AND_TRANSFER_REQUEST_SUCCESS":
return true;
case "FETCH_TVG_USER_ACCOUNT_DETAILS_SUCCESS":
return action.data.hasMadeInitialDeposit || state;
case "FETCH_SIGHTLINE_USER_SUCCESS":
return get(action, "data.cards.length", 0) > 0 || state;
default:
return state;
}
};
export default combineReducers({
isFetchingCAPI,
isFetchingFeatures,
isFetchingUserAccountDetails,
capi,
features,
deposits,
isAuthenticated,
hasMadeInitialDeposit,
userAccountDetails
});
// WEBPACK FOOTER //
// ./src/Pages/reducers.js
webpack:///./src/Pages/Deposits/reducers.js
// @flow
import { combineReducers } from "redux";
import sightline, {
type State as SightlineState,
initialState as sightlineInitialState
} from "../../Sightline/Deposit/reducers";
import type { WrapperDepositInfo } from "../../Sightline/Deposit/Types.js.flow";
import type { Action } from "../../Sightline/Deposit/actions";
export type State = {
showRedirectMessage: boolean,
wrapperDepositInfo: ?WrapperDepositInfo,
sightline: SightlineState,
alreadyProcessedRedirect: boolean
};
export const initialState: State = {
showRedirectMessage: false,
wrapperDepositInfo: null,
sightline: sightlineInitialState,
alreadyProcessedRedirect: false
};
const showRedirectMessage = (
state: $PropertyType<
State,
"showRedirectMessage"
> = initialState.showRedirectMessage,
action: Action
): $PropertyType<State, "showRedirectMessage"> => {
switch (action.type) {
case "LEGACY_WRAPPER_DATA":
return !!action.data.showRedirectMessage;
default:
return state;
}
};
const wrapperDepositInfo = (
state: $PropertyType<
State,
"wrapperDepositInfo"
> = initialState.wrapperDepositInfo,
action: Action
): $PropertyType<State, "wrapperDepositInfo"> => {
switch (action.type) {
case "LEGACY_WRAPPER_DATA":
return {
...state,
...action.data.depositInfo
};
case "ADD_NEW_CARD_REQUEST":
case "FUND_SIGHTLINE_REQUEST":
case "ENROLL_USER_REQUEST":
return null;
default:
return state;
}
};
const alreadyProcessedRedirect = (
state: $PropertyType<
State,
"alreadyProcessedRedirect"
> = initialState.alreadyProcessedRedirect,
action: Action
): $PropertyType<State, "alreadyProcessedRedirect"> => {
switch (action.type) {
case "PROCESS_REDIRECT":
return true;
case "USER_SELECTED_DEPOSIT_AMOUNT":
return true;
case "USER_FILLED_DEPOSIT_AMOUNT":
return true;
case "USER_FILLED_TRANSFER_AMOUNT":
return true;
case "REPROCESS_REDIRECT":
return false;
case "TRANSFER_FUNDS_TO_TVG_REQUEST":
return true;
default:
return state;
}
};
export default combineReducers({
sightline,
showRedirectMessage,
wrapperDepositInfo,
alreadyProcessedRedirect
});
// WEBPACK FOOTER //
// ./src/Pages/Deposits/reducers.js
webpack:///./src/Sightline/Deposit/reducers.js
// @flow
import { combineReducers } from "redux";
import { get } from "lodash";
import type { ApiError } from "../../services/shared";
import type {
TVGTransferConfirmation,
AccountInfo,
CardType
} from "./Types.js.flow";
import type { Action } from "./actions";
export type State = {
isFetching: boolean,
cards: Object,
isProcessingRedirect: boolean,
sightlineUserAccount: AccountInfo,
enrollUser: {
isFetching: boolean,
success: boolean,
error: ?ApiError
},
transferToTVG: {
isFetching: boolean,
success: boolean,
error: ?ApiError,
completed: $PropertyType<TVGTransferConfirmation, "completed">,
depositFee: ?$PropertyType<TVGTransferConfirmation, "depositFee">,
depositAmount: ?$PropertyType<TVGTransferConfirmation, "depositAmount">,
paymentProcessorTransactionId: ?$PropertyType<
TVGTransferConfirmation,
"paymentProcessorTransactionId"
>
},
addNewCard: {
isFetching: boolean,
success: boolean,
error: ?ApiError
},
fundSightline: {
isFetching: boolean,
success: boolean,
error: ?ApiError,
fundedAmount: ?number,
depositFee: ?number
},
// @FIXME this should be handle with the Router
addCardModalVisible: boolean,
addFundsSectionVisible: boolean,
depositAmountPreSelected: boolean,
transferAmount: ?number,
invalidCardModal: {
isOpen: boolean
}
};
export const initialState: State = {
isFetching: false,
isProcessingRedirect: false,
sightlineUserAccount: {
isFetching: false,
success: false,
error: null,
enrolled: false,
balance: 0,
depositFee: 0,
defaultCard: null
},
cards: { cardList: [], defaultCard: null },
addNewCard: {
isFetching: false,
success: false,
error: null
},
enrollUser: {
isFetching: false,
success: false,
error: null
},
transferToTVG: {
isFetching: false,
success: false,
error: null,
completed: false,
depositFee: null,
depositAmount: null,
paymentProcessorTransactionId: null
},
fundSightline: {
isFetching: false,
success: false,
error: null,
fundedAmount: null,
depositFee: null
},
addCardModalVisible: false,
addFundsSectionVisible: false,
depositAmountPreSelected: false,
transferAmount: null,
invalidCardModal: {
isOpen: false
}
};
const isFetching = (
state: boolean,
action: Action
): $PropertyType<State, "isFetching"> => {
switch (action.type) {
case "FETCH_SIGHTLINE_USER_REQUEST":
case "TRANSFER_FUNDS_TO_TVG_REQUEST":
case "ENROLL_USER_REQUEST":
case "CREATE_CARD_AND_FUND_SIGHTLINE_REQUEST":
case "FUND_SIGHTLINE_REQUEST":
return true;
default:
return false;
}
};
const isProcessingRedirect = (
state: boolean = initialState.isProcessingRedirect,
action: Action
): $PropertyType<State, "isProcessingRedirect"> => {
switch (action.type) {
case "PROCESSING_REDIRECT":
return true;
case "REDIRECT_PROCESSED":
case "DEPOSIT_POLLER_DONE":
return false;
default:
return state;
}
};
const getDefaultCardId = (cards: CardType[]) =>
cards && get(cards.filter(card => card.default).pop(), "id", null);
const cards = (
state: $PropertyType<State, "cards"> = initialState.cards,
action: Action
): $PropertyType<State, "cards"> => {
switch (action.type) {
case "FETCH_SIGHTLINE_CARDS_SUCCESS":
return {
...state,
cardList: action.data.cards,
defaultCard: getDefaultCardId(action.data.cards)
};
case "CHANGE_DEFAULT_CARD":
return {
...state,
defaultCard: action.data
};
default:
return state;
}
};
const sightlineUserAccount = (
state: $PropertyType<
State,
"sightlineUserAccount"
> = initialState.sightlineUserAccount,
action: Action
): $PropertyType<State, "sightlineUserAccount"> => {
switch (action.type) {
case "FETCH_SIGHTLINE_USER_REQUEST":
return {
...state,
isFetching: true,
isFetchingUserAccountDetails: true,
success: false,
error: null
};
case "FETCH_SIGHTLINE_USER_SUCCESS":
return {
...state,
...action.data,
isFetching: false,
isFetchingUserAccountDetails: false,
success: true,
error: null
};
case "FETCH_SIGHTLINE_USER_FAILURE":
return {
...state,
isFetching: false,
success: false,
isFetchingUserAccountDetails: false,
error: action.error
};
case "ENROLL_USER_SUCCESS":
return { ...state, enrolled: true };
case "ADD_NEW_CARD_SUCCESS":
return {
...state,
notification: {
type: "success"
}
};
case "DEPOSIT_POLLER_DONE":
return {
...state,
notification: {
notifType: action.data.notifType
},
disableAuthorize: action.data.shouldBlock || false
};
case "CHANGE_DEFAULT_CARD":
return {
...state,
defaultCard: action.data
};
case "CREATE_CARD_AND_FUND_SIGHTLINE_SUCCESS":
case "FUND_SIGHTLINE_REQUEST_SUCCESS":
return {
...state,
balance: action.data.balance
};
case "UPDATE_BALANCE_ON_DEPOSIT":
return {
...state,
balance: action.data.sightlineBalance
};
case "TRANSFER_FUNDS_TO_TVG_SUCCESS":
return {
...state,
balance: action.data.sightlineBalance
? parseFloat(action.data.sightlineBalance)
: parseFloat(action.data.balance),
disableAuthorize: false
};
default:
return state;
}
};
const transferToTVG = (
state: $PropertyType<State, "transferToTVG"> = initialState.transferToTVG,
action: Action
): $PropertyType<State, "transferToTVG"> => {
switch (action.type) {
case "TRANSFER_FUNDS_TO_TVG_REQUEST":
return {
...state,
isFetching: true,
success: false,
error: null
};
case "TRANSFER_FUNDS_TO_TVG_RESET":
return initialState.transferToTVG;
case "TRANSFER_FUNDS_TO_TVG_SUCCESS":
return {
isFetching: false,
success: true,
error: null,
completed: action.data.completed || true,
depositFee: action.data.depositFee,
feeAmount: action.data.feeAmount,
feeRefundAmount: action.data.feeRefundAmount,
depositAmount: action.data.amount || action.data.depositAmount,
paymentProcessorTransactionId: action.data.transactionUUID
? action.data.transactionUUID
: action.data.paymentProcessorTransactionId
};
case "TRANSFER_FUNDS_TO_TVG_FAILURE":
return {
...state,
isFetching: false,
success: false,
error: action
};
case "DEPOSIT_POLLER_DONE":
return {
...state,
error: !action.data.success
? {
error: { code: action.data.error, message: action.data.message },
type: action.data.type,
notifType: action.data.notifType
}
: null,
success: action.data.success
};
default:
return state;
}
};
const addNewCard = (
state: $PropertyType<State, "addNewCard"> = initialState.addNewCard,
action: Action
): $PropertyType<State, "addNewCard"> => {
switch (action.type) {
// Erase our previous operation feedback
case "ADD_NEW_CARD_REQUEST":
return {
...state,
isFetching: true,
success: false,
error: null
};
case "ADD_NEW_CARD_RESET":
return {
...state,
isFetching: false,
success: false,
error: null
};
case "ADD_NEW_CARD_SUCCESS":
return {
...state,
isFetching: false,
success: "slpCardAddedWithSuccess",
error: null
};
case "ADD_NEW_CARD_FAILURE":
return {
...state,
isFetching: false,
success: false,
error: action
};
default:
return state;
}
};
const enrollUser = (
state: $PropertyType<State, "enrollUser"> = initialState.enrollUser,
action: Action
): $PropertyType<State, "enrollUser"> => {
switch (action.type) {
case "ENROLL_USER_REQUEST":
return { isFetching: true, success: false, error: null };
case "ENROLL_USER_SUCCESS":
return { isFetching: false, success: true, error: null };
case "ENROLL_USER_FAILURE":
return { isFetching: false, success: false, error: action };
case "ENROLL_USER_RESET_STATE":
return { isFetching: false, success: false, error: null };
default:
return state;
}
};
const fundSightline = (
state: $PropertyType<State, "fundSightline"> = initialState.fundSightline,
action: Action
): $PropertyType<State, "fundSightline"> => {
switch (action.type) {
case "CREATE_CARD_AND_FUND_SIGHTLINE_REQUEST":
case "FUND_SIGHTLINE_REQUEST":
return {
...state,
isFetching: true,
success: false,
error: null
};
case "CREATE_CARD_AND_FUND_SIGHTLINE_RESET":
case "FUND_SIGHTLINE_REQUEST_RESET":
return initialState.fundSightline;
case "CREATE_CARD_AND_FUND_SIGHTLINE_SUCCESS":
case "FUND_SIGHTLINE_REQUEST_SUCCESS":
return {
...state,
isFetching: false,
success: true,
error: null,
...action.data
};
case "CREATE_CARD_AND_FUND_SIGHTLINE_FAILURE":
case "FUND_SIGHTLINE_REQUEST_FAILURE":
return {
...state,
isFetching: false,
success: false,
error: action
};
default:
return state;
}
};
const addCardModalVisible = (
state: $PropertyType<State, "addCardBody"> = initialState.addCardModalVisible,
action: Action
): $PropertyType<State, "addCardBody"> => {
switch (action.type) {
case "OPEN_ADD_CARD_MODAL":
return true;
case "HIDE_ADD_CARD_MODAL":
return false;
default:
return state;
}
};
const addFundsSectionVisible = (
state: $PropertyType<
State,
"addFundsSectionVisible"
> = initialState.addFundsSectionVisible,
action: Action
): $PropertyType<State, "addFundsSectionVisible"> => {
switch (action.type) {
case "OPEN_ADD_FUNDS_SECTION":
return true;
case "HIDE_ADD_FUNDS_SECTION":
return false;
case "FETCH_SIGHTLINE_CARDS_SUCCESS":
if (action.data.addFundsSectionVisible || state) {
return true;
}
return get(action, "data.cards.length", 0) === 0;
case "FETCH_SIGHTLINE_USER_SUCCESS":
return parseFloat(action.data.balance) === 0;
case "TRANSFER_FUNDS_TO_TVG_SUCCESS":
return (
parseFloat(action.data.balance) === 0 ||
parseFloat(action.data.sightlineBalance) === 0
);
default:
return state;
}
};
const depositAmountPreSelected = (
state: $PropertyType<
State,
"depositAmountPreSelected"
> = initialState.depositAmountPreSelected,
action: Action
): $PropertyType<State, "depositAmountPreSelected"> => {
switch (action.type) {
case "USER_SELECTED_DEPOSIT_AMOUNT":
return true;
case "USER_FILLED_DEPOSIT_AMOUNT":
return ["50", "100", "300"].indexOf(action.data.value) > -1;
default:
return state;
}
};
const transferAmount = (
state: $PropertyType<State, "transferAmount"> = initialState.transferAmount,
action: Action
) => {
switch (action.type) {
case "CHANGE_TRANSFER_AMOUNT":
return action.data.amount;
default:
return state;
}
};
const invalidCardModal = (
state: $PropertyType<
State,
"invalidCardModal"
> = initialState.invalidCardModal,
action: Action
) => {
switch (action.type) {
case "OPEN_INVALID_CARD_MODAL":
return {
isOpen: true
};
case "CLEAR_INVALID_CARD_MODAL":
return initialState.invalidCardModal;
default:
return state;
}
};
export default combineReducers({
isFetching,
cards,
sightlineUserAccount,
transferToTVG,
addNewCard,
enrollUser,
fundSightline,
addCardModalVisible,
addFundsSectionVisible,
depositAmountPreSelected,
transferAmount,
isProcessingRedirect,
invalidCardModal
});
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/reducers.js
webpack:///./src/data/messages.json
module.exports = {"slpAddingCardErrorMsg":"There has been a problem adding your card. If you think this is an error, please try to add your card again or a different card. Otherwise for assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpAssistanceMsg":"For assistance, please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpCardAddedWithSuccess":"Your card has been added. You can use it to fund your TVG Pre Paid Play+ card and transfer to your TVG Account.","slpCardDeclinedTryToAddAgain":"It seems your credit card was declined. If you think this is an error, please try to add your card again or a different card. Otherwise for assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpDeclinedCCErrorMsg":"There has been a problem with your card. If you think this is an error, please try to add your card again or a different card. Otherwise for assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpDepositLimitExceededErrorMsg":"Your deposit limit has been exceed. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpDepositTvgErrorMsg":"There was a problem depositing into your TVG account. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpDuplicatedCardErrorMsg":"This card appears to be already registered. Please try another card.","slpEnrollErrorMsg":"There was a problem during the TVG Pre Paid Play+ enrollment. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpEnrollWarning":"By selecting to enroll, the personal information previously provided on your TVG account will be sent to Sightline Payments to process the enrollment.","slpMarketingBanner":"","slpMarketingMsg":"","slpPaymentMethodErrorMsg":"This method of payment doesn't seem to be going through.","slpPrivacyTemplate":"","slpRedirectedMsg":"However, you can enrol into TVG Pre Paid Play+ below to deposit instantly to your account.","slpRedirectedTitle":"YOUR DEPOSIT WAS NOT SUCCESSFUL AS SOME BANKS DO NOT APPROVE TRANSACTIONS FROM GAMING SITES.","slpDiscoverRedirectedMsg":"Fill in the details below to continue and instantly deposit into your account.","slpDiscoverRedirectedTitle":"DISCOVER CARDS ARE ELIGIBLE TO DEPOSIT WHEN USED WITH OUR PRE-PAID CARD.","slpTransferMsg":"You can fund your TVG account with Pre Paid Play+ Card balance instantaneously. Customers are limited to $2,000 per day and $10,000 per month in funding their Pre Paid Play+ Card.","slpUnsuccessfulFundingErrorMsg":"There was a problem depositing into your TVG Pre Paid Play+ card. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","sightlineEnrollmentFailed":"There was a problem with your TVG Pre Paid Play+ enrollment. Please contact [email protected] or 702 - 851 - 4747 between 7:30AM and 9:30PM PST.","slpDepositSuccess":"You successfully deposited <strong>$XXX</strong> into your TVG account through your Pre Paid Play+ Card.","slpDepositSuccessFirstTime":"You successfully deposited <strong>$XXX</strong> into your TVG account through your new Pre Paid Play+ Card. Expect to receive your card in the mail shortly.","SLP_CARD_ALREADY_EXISTS":"There has been a problem adding your card. If you think this is an error, please try to add your card again or a different card. Otherwise for assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_CARD_DECLINED_BY_SLP":"There was a problem depositing into your TVG Pre Paid Play+ card. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_CARD_NOT_FOUND":"There was a problem depositing into your TVG Pre Paid Play+ card. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_CARD_NOT_SAVED":"There has been a problem adding your card. If you think this is an error, please try to add your card again or a different card. Otherwise for assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_DEPOSIT_TO_TVG_FAILED":"There was a problem depositing into your TVG account. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_ENROLL_USER_FAILURE":"There was a problem during the TVG Pre Paid Play+ enrollment. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_ENROLLMENT_REJECTED_BY_SLP":"There was a problem during the TVG Pre Paid Play+ enrollment. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_FAILED_REGISTER_TERMS_AGREED":"There was a problem during the TVG Pre Paid Play+ enrollment. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_FUNDING_LIMIT_EXCEEDED":"Your deposit limit has been exceeded. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_FUNDING_SIGHTLINE_FAILED":"There was a problem depositing into your TVG Pre Paid Play+ card. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_GENERIC_ERROR":"Please review the deposit details and try again. If problem persists, please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_GENERIC_SUCCESS":"Success!","SLP_NO_SIGHTLINE_ACCOUNT_FOUND":"There was a problem depositing into your TVG Pre Paid Play+ card. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_TERMS_NOT_ACCEPTED":"There was a problem during the TVG Pre Paid Play+ enrollment. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_WITHDRAW_DECLINED_BY_SLP":"It seems your credit card was declined. If you think this is an error, please try to deposit again. Otherwise for assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","SLP_WITHDRAW_FROM_SLP_FAILED":"An error occurred when trying to withdraw from Sightline.","SLP_ADD_NEW_CARD_SUCCESS":"Your card has been added. You can use it to fund your TVG Pre Paid Play+ card and transfer to your TVG Account.","SLP_FUND_SIGHTLINE_REQUEST_FAILURE":"There was a problem depositing into your TVG Pre Paid Play+ card. For assistance please <a target='_blank' href='/redirectengine?type=messageus'>contact our customer service</a>.","slpEnrolledMsg":"You are enrolled with Sightline","slpEnrolledText":"You can fund your FanDuel account with Pre Paid balance instantaneously. Customers are limited to $2,000 per day and $10,000 per month in funding their Pre Paid Play+ Card."}
//////////////////
// WEBPACK FOOTER
// ./src/data/messages.json
// module id = 494
// module chunks = 0
webpack:///./src/middleware/analytics.js
// @flow
import { get } from "lodash";
import conf from "@tvg/conf";
import type { Middleware } from "redux";
import type { State } from "../Pages/reducers";
import type { Action as PageActions } from "../Pages/actions";
import type { Action as SightlineActions } from "../Sightline/Deposit/actions";
type Action = PageActions | SightlineActions;
// Helpers
const customerStatus = (state: State): "First Time" | "Returning" =>
state.hasMadeInitialDeposit ? "Returning" : "First Time";
const preSelectedAmount = (state: State): "Yes" | "No" =>
state.deposits.sightline.depositAmountPreSelected ? "Yes" : "No";
const getDepositFee = (state: State) =>
!state.deposits.sightline.sightlineUserAccount.depositFee
? state.deposits.sightline.sightlineUserAccount.depositFee
: undefined;
const depositStart = (action: Action, state: State) => {
let finalValue = "No";
if (action.type === "USER_SELECTED_DEPOSIT_AMOUNT") {
finalValue = "Yes";
} else if (["50", "100", "300"].indexOf(action.data.value) > -1) {
finalValue = "Yes";
}
return {
gaEventAction: "Deposit Start",
gaEventLabel: state.deposits.sightline.transferAmount
? state.deposits.sightline.transferAmount.toString()
: undefined,
sightlineDeposit: parseInt(action.data.value, 10),
depositAmount: state.deposits.sightline.transferAmount || undefined,
amountOption: finalValue
};
};
// @FIXME the use of this flags is most likely a hack and they should be fixed
// They most likely can be replaced by a better store structure or by better
// organize our actions
const flags = {
isFundAndTransfer: false,
hasStarted: false,
depositToPPCValue: null // we do not have other amount in state so this is a hack
};
// Create GTM event
// @SEE https://betfairus.atlassian.net/browse/EC-1568
const createEvent = (state: State, action: Action): * | false => {
const fundAmount =
get(action, "data.fund.amount") || get(action, "data.fundAmount");
switch (action.type) {
// 1
case "USER_FILLED_FIELD":
return {
gaEventAction: "Field Complete",
gaEventLabel: action.data.fieldName,
depositAmount: state.deposits.sightline.transferAmount
? state.deposits.sightline.transferAmount
: undefined,
sightlineDeposit: flags.depositToPPCValue
? parseInt(flags.depositToPPCValue, 10)
: undefined
};
// 2
case "ERROR_SHOWN":
return {
gaEventAction: "Field Error",
gaEventLabel: action.data.errors[0]
? `${action.data.errors[0]} - ${action.data.fieldName}`
: `No specific error message - ${action.data.fieldName}`
};
// 3
case "USER_SELECTED_DEPOSIT_AMOUNT":
flags.depositToPPCValue = action.data.value;
if (!flags.hasStarted) {
flags.hasStarted = true;
return depositStart(action, state);
}
return {
gaEventAction: "Select Amount",
gaEventLabel: state.deposits.sightline.transferAmount
? state.deposits.sightline.transferAmount.toString()
: undefined,
sightlineDeposit: parseInt(action.data.value, 10),
depositAmount: state.deposits.sightline.transferAmount
? state.deposits.sightline.transferAmount
: undefined,
amountOption: preSelectedAmount(state)
};
case "USER_FILLED_DEPOSIT_AMOUNT":
flags.depositToPPCValue = action.data.value;
if (!flags.hasStarted) {
flags.hasStarted = true;
return depositStart(action, state);
}
return {
gaEventAction: "Field Complete",
gaEventLabel: state.deposits.sightline.transferAmount
? state.deposits.sightline.transferAmount.toString()
: undefined,
sightlineDeposit: parseInt(action.data.value, 10),
depositAmount: state.deposits.sightline.transferAmount
? state.deposits.sightline.transferAmount
: undefined,
amountOption: preSelectedAmount(state)
};
case "USER_FILLED_TRANSFER_AMOUNT":
return {
gaEventAction: "Field Complete",
gaEventLabel: action.data.fieldName,
depositAmount: parseInt(action.data.value, 10),
sightlineDeposit: flags.depositToPPCValue
? parseInt(flags.depositToPPCValue, 10)
: undefined
};
// 4
case "SHOW_TOOLTIP":
return {
gaEventAction: "Hovered Tooltip",
gaEventLabel: action.data.fieldName
};
// 5
case "OPEN_ADD_CARD_MODAL":
return { gaEventAction: "Open", gaEventLabel: "Add Card" };
// 5
case "OPEN_ADD_FUNDS_SECTION":
return { gaEventAction: "Open", gaEventLabel: "Add Funds" };
// 5
case "OPEN_CHANGE_CARD_MODAL":
return { gaEventAction: "Open", gaEventLabel: "Change Card" };
// 6
case "FULL_ENROLL_REQUEST":
case "FUND_AND_TRANSFER_REQUEST":
flags.isFundAndTransfer = true;
return {
gaEventAction: "Fund Pre-Paid & Deposit Attempt",
gaEventValue: fundAmount.toString(), // pass as a string!
gaEventLabel: action.data.transferAmount, // pass as a integer!
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId:
action.data.accountId || state.userAccountDetails.accountNumber,
cardType: "Credit",
netDepositFee: undefined
};
// 7
case "FUND_AND_TRANSFER_REQUEST_SUCCESS":
flags.isFundAndTransfer = false;
flags.hasStarted = false;
return {
gaEventAction: "Fund Pre-Paid & Deposit Success",
gaEventValue: state.deposits.sightline.transferAmount
? state.deposits.sightline.transferAmount.toString()
: undefined,
gaEventLabel: flags.depositToPPCValue
? parseInt(flags.depositToPPCValue, 10)
: undefined,
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
accountId: state.userAccountDetails.accountNumber,
customerStatus: customerStatus(state),
cardType: "Credit",
netDepositFee: getDepositFee(state),
isFeePaid: !!get(
state,
"deposits.sightline.sightlineUserAccount.depositFee",
false
)
};
// 8
case "FULL_ENROLL_REQUEST_FAILURE":
return {
gaEventAction: "Fund Pre-Paid & Deposit Error",
gaEventLabel: action.error.code, // error Type
gaEventValue: action.data.transferAmount, // pass as an integer!
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId: state.userAccountDetails.accountNumber,
cardType: "Credit",
netDepositFee: undefined
};
case "FUND_AND_TRANSFER_REQUEST_FAILURE":
flags.isFundAndTransfer = false;
if (action.data.ignoreGTM) {
return false;
}
return {
gaEventAction: "Fund Pre-Paid & Deposit Error",
gaEventLabel: action.error.code,
gaEventValue: action.data.transferAmount, // pass as an integer!
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId: state.userAccountDetails.accountNumber,
cardType: "Credit",
netDepositFee: getDepositFee(state)
};
// 9
case "TRANSFER_FUNDS_TO_TVG_SUCCESS":
flags.hasStarted = false;
return {
event: "deposit",
gaEventCategory: "Deposit",
gaEventAction: "Deposit Success",
gaEventLabel: action.data.isRedirect
? "Sightline flow pop-up"
: undefined,
depositAmount: action.data.amount, // pass as an integer!
gaEventValue: action.data.amount, // pass as a string!
amountOption: undefined,
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId: get(
state,
"userAccountDetails.accountDetails.accountNumber",
state.userAccountDetails.accountNumber
),
cardType: undefined,
netDepositFee: undefined,
isFeePaid: !!get(
state,
"deposits.sightline.sightlineUserAccount.depositFee",
false)
};
// 10
case "TRANSFER_FUNDS_TO_TVG_FAILURE":
return action.data.ignoreGTM
? false
: {
event: "deposit",
gaEventCategory: "Deposit",
gaEventAction: "Deposit Error",
gaEventLabel: action.data.isRedirect
? `Sightline flow pop-up - ${action.error}`
: action.error,
gaEventValue: action.data.amount, // pass as an integer!
depositAmount: action.data.amount, // pass as an integer!
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId: get(
state,
"userAccountDetails.accountDetails.accountNumber",
state.userAccountDetails.accountNumber
),
cardType: undefined,
netDepositFee: getDepositFee(state)
};
// 11
case "PROCESSING_REDIRECT":
return {
event: "deposit",
gaEventCategory: "Deposit",
gaEventAction: "Deposit Attempt",
gaEventLabel: "Sightline flow pop-up",
gaEventValue: action.data.amount, // pass as an integer!
depositAmount: action.data.amount, // pass as an integer!
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId: action.data.accountId,
cardType: undefined,
netDepositFee: getDepositFee(state)
};
case "DEPOSIT_ATTEMPT":
return {
event: "deposit",
gaEventCategory: "Deposit",
gaEventAction: "Deposit Attempt",
gaEventLabel: undefined,
gaEventValue: action.data.amount, // pass as an integer!
depositAmount: action.data.amount, // pass as an integer!
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId: get(
state,
"userAccountDetails.accountDetails.accountNumber",
state.userAccountDetails.accountNumber
),
cardType: undefined,
netDepositFee: getDepositFee(state)
};
case "DEPOSIT_POLLER_DONE":
if (action.data.ignoreGTM) {
return false;
}
return {
gaEventAction: action.data.success
? "Fund Pre-Paid Success"
: "Fund Pre-Paid Error",
gaEventLabel: action.data.gaLabel,
gaEventValue: action.data.amount, // pass as an integer!
amountOption: preSelectedAmount(state),
sightlineDeposit: undefined,
customerStatus: customerStatus(state),
accountId: state.userAccountDetails.accountNumber,
cardType: undefined,
netDepositFee: getDepositFee(state)
};
// 11
case "ADD_NEW_CARD_REQUEST":
return { gaEventAction: "Add Card Attempt" };
// 12
case "ADD_NEW_CARD_SUCCESS":
flags.hasStarted = false;
return { gaEventAction: "Add Card Success" };
// 13
case "CHANGE_DEFAULT_CARD":
return { gaEventAction: "Select Card" };
// 15
case "HIDE_DEPOSIT_SUCCESS_MODAL":
return {
gaEventAction: "Close",
gaEventLabel: "Deposit Success Modal",
module: "Deposit Success Modal"
};
// 16
case "NAVIGATE_TO":
return {
event: "navigation",
gaEventCategory: "Navigation",
gaEventAction: "Navigated To",
gaEventLabel: action.data.fieldName, // pass 'See Full Schedule' or 'Go To Next Race'
module: "Deposit Success Modal",
destinationUrl: window.location.href // e.g 'www.tvg.com/full-schedule'
};
case "SITE_CLICK":
return {
event: "siteClick",
gaEventCategory: "Site click",
gaEventAction: action.data.fieldAction,
gaEventLabel: undefined,
module: "Deposit Success Modal",
tag: undefined,
microApp: undefined
};
default:
return false;
}
};
const logEvent = (type, data) => {
/* eslint-disable */
if (DEVELOPMENT) {
console.groupCollapsed(`GTM:${type}`);
// Stupid Chrome bug
console.table(
Object.keys(data).map(key => ({
property: key,
value: data[key]
}))
);
console.groupEnd(`GTM:${type}`);
}
/* eslint-enable */
};
const saveEvent = (type, data) => {
if (window) {
window.dataLayer = window.dataLayer || [];
return window.dataLayer.push(data);
}
return { type, data };
};
const logAndSave = (type, data) => {
logEvent(type, data);
saveEvent(type, data);
};
// hack for gtm hardcode strings
const getSiteVersion = product => {
const siteVersionKeys = {
touch3: "v2-revamp",
ios2: "iOS",
fdrmobile: "fdrmobileWeb",
fdrios: "fdriOS"
};
return siteVersionKeys[product]
? siteVersionKeys[product]
: product.toUpperCase();
};
const getProduct = product => {
const productKeys = {
touch3: "MEP-01",
ios2: "iOS",
fdrmobile: "FDR-01",
fdrios: "FDR-01"
};
return productKeys[product] ? productKeys[product] : product.toUpperCase();
};
export default (defaults: *): Middleware<State, Action> => (
store: Store<State, Action>
) => next => (action: Action): Action => {
const state = store.getState();
const module = "My Funds";
const namespace = "SIGHTLINE:";
const event = createEvent(state, action);
if (event) {
logAndSave(`${namespace}${action.type}`, {
...defaults,
module,
depositType: "Sightline",
gaEventLabel: undefined,
depositAmount: undefined,
...event,
siteVersion: getSiteVersion(conf().product),
productVersion: getProduct(conf().product)
});
}
return next(action);
};
// WEBPACK FOOTER //
// ./src/middleware/analytics.js
webpack:///./src/middleware/qubit.js
import { get } from "lodash";
const logEvent = (type, data) => {
/* eslint-disable */
if (DEVELOPMENT) {
console.groupCollapsed(`GTM:${type}`);
// Stupid Chrome bug
console.table(
Object.keys(data).map(key => ({
property: key,
value: data[key]
}))
);
console.groupEnd(`QUBIT:${type}`);
}
/* eslint-enable */
};
const saveEvent = (type, data) => {
if (window) {
window.uv = window.uv;
return window.uv && window.uv.emit
? window.uv.emit(type, data)
: { type, data };
}
return { type, data };
};
const logAndSave = (type, data) => {
logEvent(type, data);
saveEvent(type, data);
};
export default store => next => action => {
const state = store.getState();
switch (action.type) {
case "TRANSFER_FUNDS_TO_TVG_SUCCESS":
logAndSave("egFund", {
user: {
id: get(
state,
"userAccountDetails.accountDetails.accountDetails.accountNumber",
state.userAccountDetails.accountNumber
),
balance: {
value: 0,
currency: "USD"
}
},
type: "Deposit Success",
amount: {
value: action.data.depositAmount || 0,
currency: "USD"
},
method: "Sightline New Flow",
location: "My Funds"
});
break;
default:
return next(action);
}
return next(action);
};
// WEBPACK FOOTER //
// ./src/middleware/qubit.js
webpack:///./src/Pages/actions.js
// @flow
import tvgConf from "@tvg/conf";
import * as capi from "../services/capi";
import usa from "../services/usa";
import * as deposits from "../services/deposits";
import type { TVGAccountDetails } from "../services/deposits";
import { type ApiError } from "../services/shared";
import type { CAPI } from "../Types.js.flow";
export type FetchIsAuthenticatedAction = {|
type: "FETCH_USER_AUTHENTICATION"
|};
export type FetchIsAuthenticatedSuccessAction = {|
type: "FETCH_USER_AUTHENTICATION_SUCCESS",
data: boolean
|};
export type FetchIsAuthenticatedFailureAction = {|
type: "FETCH_USER_AUTHENTICATION_FAILURE",
error: ApiError
|};
export type RequestCAPIAction = {|
type: "FETCH_CAPI_REQUESt"
|};
export type RequestCAPISucceededAction = {|
type: "FETCH_CAPI_SUCCESS",
data: CAPI
|};
export type RequestCAPIFailedCAPIAction = {|
type: "FETCH_CAPI_FAILURE",
error: ApiError
|};
export type FetchTVGUserAccountDetails = {|
type: "FETCH_TVG_USER_ACCOUNT_DETAILS"
|};
export type FetchTVGUserAccountDetailsSuccess = {|
type: "FETCH_TVG_USER_ACCOUNT_DETAILS_SUCCESS",
data: TVGAccountDetails
|};
export type FetchTVGUserAccountDetailsFailure = {|
type: "FETCH_TVG_USER_ACCOUNT_DETAILS_FAILURE",
error: ApiError
|};
export type Action =
| RequestCAPIAction
| RequestCAPISucceededAction
| RequestCAPIFailedCAPIAction
| FetchIsAuthenticatedAction
| FetchIsAuthenticatedSuccessAction
| FetchIsAuthenticatedFailureAction
| FetchTVGUserAccountDetails
| FetchTVGUserAccountDetailsSuccess
| FetchTVGUserAccountDetailsFailure;
export const fetchTVGUserAccountDetails = () => (
dispatch: Dispatch<Action>
): Promise<*> =>
Promise.resolve(dispatch({ type: "FETCH_TVG_USER_ACCOUNT_DETAILS" }))
.then(deposits.getAccountDetails)
.then((data: *) =>
dispatch({ type: "FETCH_TVG_USER_ACCOUNT_DETAILS_SUCCESS", data })
)
.catch((error: Error) => {
dispatch({ type: "FETCH_TVG_USER_ACCOUNT_DETAILS_FAILURE", error });
});
export const fetchCAPI = () => (dispatch: Dispatch<Action>): Promise<CAPI> =>
Promise.resolve(dispatch({ type: "FETCH_CAPI_REQUEST" }))
.then(capi.getMessages)
.then((data: CAPI) => {
dispatch({ type: "FETCH_CAPI_SUCCESS", data });
})
.catch((error: Error) => {
dispatch({ type: "FETCH_CAPI_FAILURE", error });
});
export const fetchFeatures = () => (
dispatch: Dispatch<Action>
): Promise<CAPI> =>
Promise.resolve(dispatch({ type: "FETCH_FEATURES_REQUEST" }))
.then(() => tvgConf().getFeatures("desktop", true))
.then(data => {
dispatch({ type: "FETCH_FEATURES_SUCCESS", data });
})
.catch((error: Error) => {
dispatch({ type: "FETCH_FEATURES_FAILURE", error });
});
export const isAuthenticated = () => (
dispatch: Dispatch<Action>
): PromiseAction<Action> =>
Promise.resolve(dispatch({ type: "FETCH_USER_AUTHENTICATION" }))
.then(usa.isAuthenticated)
.then(data => dispatch({ type: "FETCH_USER_AUTHENTICATION_SUCCESS", data }))
.catch((error: ApiError) => {
console.error(error);
dispatch({ type: "FETCH_USER_AUTHENTICATION_FAILURE", error });
});
// WEBPACK FOOTER //
// ./src/Pages/actions.js
webpack:///./src/services/capi.js
// @flow
import axios from "axios";
import tvgConf from "@tvg/conf";
import { get } from "lodash/fp";
import { headers, ApiError } from "./shared";
// @TODO Fill this as you need more CMS properties
export type CAPIMessages = {
slpAddingCardErrorMsg: string,
slpAssistanceMsg: string,
slpCardAddedWithSuccess: string,
slpCardDeclinedTryToAddAgain: string,
slpDeclinedCCErrorMsg: string,
slpDepositLimitExceededErrorMsg: string,
slpDepositTvgErrorMsg: string,
slpDuplicatedCardErrorMsg: string,
slpEnrollErrorMsg: string,
slpEnrollWarning: string,
slpMarketingBanner: string,
slpMarketingMsg: string,
slpPaymentMethodErrorMsg: string,
slpPrivacyTemplate: string,
slpRedirectedMsg: string,
slpRedirectedTitle: string,
slpTransferMsg: string,
slpUnsuccessfulFundingErrorMsg: string,
SLP_CARD_ALREADY_EXISTS: string,
SLP_CARD_DECLINED_BY_SLP: string,
SLP_CARD_NOT_FOUND: string,
SLP_CARD_NOT_SAVED: string,
SLP_DEPOSIT_TO_TVG_FAILED: string,
SLP_ENROLL_USER_FAILURE: string,
SLP_ENROLLMENT_REJECTED_BY_SLP: string,
SLP_FAILED_REGISTER_TERMS_AGREED: string,
SLP_FUNDING_LIMIT_EXCEEDED: string,
SLP_FUNDING_SIGHTLINE_FAILED: string,
SLP_GENERIC_ERROR: string,
SLP_GENERIC_SUCCESS: string,
SLP_NO_SIGHTLINE_ACCOUNT_FOUND: string,
SLP_TERMS_NOT_ACCEPTED: string,
SLP_WITHDRAW_DECLINED_BY_SLP: string,
SLP_WITHDRAW_FROM_SLP_FAILED: string,
SLP_ADD_NEW_CARD_SUCCESS: string,
SLP_FUND_SIGHTLINE_REQUEST_FAILURE: string
};
export const client = axios.create({
baseURL: tvgConf().config("service.capi"),
headers,
responseType: "json"
});
export const getMessages = (): Promise<CAPIMessages> =>
client
.get("/messages/namespace", {
params: {
product: tvgConf().product || "tvg4",
device: tvgConf().device,
brand: tvgConf().brand,
namespace: ["Deposits", "Funds", "Global"].join(",")
}
})
.then(get("data.response"))
.then(({ Deposits, Funds, Global }) =>
Object.assign({}, Global, Deposits, Funds)
)
.catch(ApiError.fromAxios);
// WEBPACK FOOTER //
// ./src/services/capi.js
webpack:///./src/services/usa.js
// @flow
import axios from "axios";
import conf from "@tvg/conf";
import { headers, ApiError } from "./shared";
const client = axios.create({
baseURL: conf().config("service.usa"),
headers,
withCredentials: true,
responseType: "json"
});
export default {
isAuthenticated: (): Promise<boolean> =>
client
.get("/authenticated")
.then(() => true)
.catch(error => {
throw new ApiError({
message: error.message,
status: error.response.status,
code: error.response.statusText
});
})
};
// WEBPACK FOOTER //
// ./src/services/usa.js
webpack:///./src/services/deposits.js
// @flow
import axios from "axios";
import tvgConf from "@tvg/conf";
import { get, mapKeys, camelCase } from "lodash/fp";
import { headers, ApiError } from "./shared";
type Address = {
streetNumber: string,
address1: string,
address2: string,
city: string,
stateAbbr: string,
zip: string
};
type Gender = "Female" | "Male";
export type TVGAccountDetails = {
accountNumber: string,
accountStatus: number,
dateOfBirth: Date,
emailAddress: string,
exchangeSubAccountNumber: null,
firstName: string,
lastName: string,
gender: Gender,
homeAddress: Address,
mailingAddress: Address,
primaryPhone: string,
secondaryPhone: string,
signalProviderID: string,
transportID: string,
username: string,
wageringStatus: 0,
hasMadeInitialDeposit: boolean
};
export const client = axios.create({
method: "get",
baseURL: tvgConf().config("service.deposit"),
headers,
withCredentials: true,
responseType: "json"
});
export const uamClient = axios.create({
baseURL: tvgConf().config("service.uam"),
headers,
withCredentials: true,
responseType: "json"
});
export const usaClient = axios.create({
baseURL: tvgConf().config("service.usa"),
headers,
withCredentials: true,
responseType: "json"
});
export const uwtClient = axios.create({
baseURL: tvgConf().config("service.uwt"),
headers,
withCredentials: true,
responseType: "json"
});
const toCamelCase = mapKeys(camelCase);
export const getAccountDetailsOld = (): Promise<TVGAccountDetails> =>
client
.get("/v1.0/depositInitialData", { params: { showAccountDetails: true } })
.then(get("data.response"))
// This service still uses the very old .NET API which means that the
// response comes with .NET standards (PascalCase). We try to convert this
// into a more familiar JavaScript convention (camelCase)
.then(res => ({
...toCamelCase(get("accountDetails", res)),
hasMadeInitialDeposit: get("availableOptions.HasMadeInitialDeposit", res),
homeAddress: toCamelCase(get("accountDetails.HomeAddress", res)),
mailingAddress: toCamelCase(get("accountDetails.MailingAddress", res))
}))
.catch(ApiError.fromAxios);
export const getProfile = (accountId): Promise =>
uamClient.get(`/users/${accountId}/profile`).then(res => res.data);
export const getAccountNumber = (): Promise =>
usaClient.get("session/context").then(res => res.data.accountNumber);
export const getHasMadeInitialDeposit = (profile): Promise =>
uwtClient
.get(`users/${profile.accountNumber}/deposits?pageSize=1`)
.then(res => ({
profile,
hasMadeInitialDeposit:
res.data && res.data.deposits && res.data.deposits.length > 0
}));
export const getAccountDetails = (): Promise<TVGAccountDetails> =>
getAccountNumber()
.then(accountId =>
getProfile(accountId).then(profile =>
getHasMadeInitialDeposit(profile).then(res => ({
accountDetails: res.profile,
hasMadeInitialDeposit: res.hasMadeInitialDeposit,
homeAddress: res.profile.homeAddress,
mailingAddress: res.profile.mailingAddress
}))
)
)
.catch(ApiError.fromAxios);
// WEBPACK FOOTER //
// ./src/services/deposits.js
webpack:///./src/Sightline/styles.css
// removed by extract-text-webpack-plugin
module.exports = {"funds":"funds"};
//////////////////
// WEBPACK FOOTER
// ./src/Sightline/styles.css
// module id = 519
// module chunks = 0
webpack:///./src/Sightline/Deposit/actions.js
// @flow
import { get } from "lodash";
import * as mediator from "../../../node_modules/@tvg/mediator-classic/src/";
import * as API from "../../services/slp";
import type {
AccountInfo,
FundNewCardInput,
FundExistingCardInput,
CardType,
MinimalCardType,
TVGTransferConfirmation,
TransferExistingCardConfirmation,
TransferNewCardConfirmation,
GTMAnalytics
} from "./Types.js.flow";
import poller from "../../services/utils";
import type { ApiError } from "../../services/shared";
// FetchSightlineUser
export type FetchSightlineUserAction = {|
type: "FETCH_SIGHTLINE_USER_REQUEST"
|};
export type FetchSightlineUserSuccessAction = {|
type: "FETCH_SIGHTLINE_USER_SUCCESS",
data: AccountInfo
|};
export type FetchSightlineUserFailedAction = {|
type: "FETCH_SIGHTLINE_USER_FAILURE",
error: ApiError
|};
// Enroll
export type EnrollUserAction = {|
type: "ENROLL_USER_REQUEST"
|};
export type EnrollUserResetAction = {|
type: "ENROLL_USER_RESET_STATE"
|};
export type EnrollUserSuccessAction = {|
type: "ENROLL_USER_SUCCESS"
|};
export type EnrollUserFailedAction = {|
type: "ENROLL_USER_FAILURE",
error: ApiError
|};
// AddNewCard
export type AddCardAction = {|
type: "ADD_NEW_CARD_REQUEST"
|};
export type AddCardResetAction = {|
type: "ADD_NEW_CARD_RESET"
|};
export type AddCardSuccessAction = {|
type: "ADD_NEW_CARD_SUCCESS",
data: CardType[]
|};
export type AddCardFailedAction = {|
type: "ADD_NEW_CARD_FAILURE",
error: ApiError
|};
// Transfer funds from Sightline to TVG
export type TransferFundsToTVGRequestAction = {|
type: "TRANSFER_FUNDS_TO_TVG_REQUEST",
data: { amount: number }
|};
export type TransferFundsToTVGResetAction = {|
type: "TRANSFER_FUNDS_TO_TVG_RESET"
|};
export type TransferFundsToTVGSuccessAction = {|
type: "TRANSFER_FUNDS_TO_TVG_SUCCESS",
data: TVGTransferConfirmation
|};
export type TransferFundsToTVGFailedAction = {|
type: "TRANSFER_FUNDS_TO_TVG_FAILURE",
error: ApiError,
data: { amount: number }
|};
// Create a new card and Funds Sightline
export type CreateCardAndFundSightlineRequestAction = {|
type: "CREATE_CARD_AND_FUND_SIGHTLINE_REQUEST"
|};
export type CreateCardAndFundSightlineResetAction = {|
type: "CREATE_CARD_AND_FUND_SIGHTLINE_RESET"
|};
export type CreateCardAndFundSightlineSuccessAction = {|
type: "CREATE_CARD_AND_FUND_SIGHTLINE_SUCCESS",
data: TransferNewCardConfirmation
|};
export type CreateCardAndFundSightlineFailedAction = {|
type: "CREATE_CARD_AND_FUND_SIGHTLINE_FAILURE",
error: ApiError
|};
// Transfer funds from an Existing Card to Sightline
export type FundSightlineRequestAction = {|
type: "FUND_SIGHTLINE_REQUEST",
data: FundExistingCardInput
|};
export type FundSightlineResetAction = {|
type: "FUND_SIGHTLINE_REQUEST_RESET"
|};
export type FundSightlineSuccessAction = {|
type: "FUND_SIGHTLINE_REQUEST_SUCCESS",
data: TransferExistingCardConfirmation
|};
export type FundSightlineFailedAction = {|
type: "FUND_SIGHTLINE_REQUEST_FAILURE",
error: ApiError
|};
// Change Default Card
export type ChangeDefaultCardAction = {|
type: "CHANGE_DEFAULT_CARD",
data: number
|};
// User Actions
export type UserFilledFieldAction = {|
type: "USER_FILLED_FIELD",
data: {
fieldName: string,
value: string | number
},
meta?: GTMAnalytics
|};
export type UserFilledDepositFieldAction = {|
type: "USER_FILLED_DEPOSIT_AMOUNT",
data: {
fieldName: string,
value: string | number
},
meta?: GTMAnalytics
|};
export type UserFilledTransferFieldAction = {|
type: "USER_FILLED_TRANSFER_AMOUNT",
data: {
fieldName: string,
value: string | number
},
meta?: GTMAnalytics
|};
export type ErrorShownAction = {|
type: "ERROR_SHOWN",
data: {
fieldName: string,
value: string | number,
errors: string[]
},
meta?: GTMAnalytics
|};
export type ChangeTransferAmountAction = {|
type: "CHANGE_TRANSFER_AMOUNT",
data: {
amount: number
}
|};
export type OpenInvalidCardModalAction = {|
type: "OPEN_INVALID_CARD_MODAL"
|};
export type ClearInvalidCardModalAction = {|
type: "CLEAR_INVALID_CARD_MODAL"
|};
export type Action =
// FetchSightlineUser
| FetchSightlineUserAction
| FetchSightlineUserSuccessAction
| FetchSightlineUserFailedAction
// Enroll
| EnrollUserAction
| EnrollUserResetAction
| EnrollUserSuccessAction
| EnrollUserFailedAction
// AddCard
| AddCardAction
| AddCardSuccessAction
| AddCardFailedAction
| AddCardResetAction
// TransferFundsToTVG
| TransferFundsToTVGRequestAction
| TransferFundsToTVGResetAction
| TransferFundsToTVGSuccessAction
| TransferFundsToTVGFailedAction
// Funds Sightline with Existing Card
| FundSightlineRequestAction
| FundSightlineResetAction
| FundSightlineSuccessAction
| FundSightlineFailedAction
// Change Default Card
| ChangeDefaultCardAction
| UserFilledFieldAction
| UserFilledDepositFieldAction
| ErrorShownAction
// Common Actions
| ChangeTransferAmountAction;
export const enrollReset = (): EnrollUserResetAction => ({
type: "ENROLL_USER_RESET_STATE"
});
export const addCardReset = (): AddCardResetAction => ({
type: "ADD_NEW_CARD_RESET"
});
export const fundSightlineReset = (): FundSightlineResetAction => ({
type: "FUND_SIGHTLINE_REQUEST_RESET"
});
export const createCardAndFundSightlineReset = (): CreateCardAndFundSightlineResetAction => ({
type: "CREATE_CARD_AND_FUND_SIGHTLINE_RESET"
});
export const transferFundsToTVGReset = (): TransferFundsToTVGResetAction => ({
type: "TRANSFER_FUNDS_TO_TVG_RESET"
});
export const changeTransferAmount = (
amount: number = 0
): ChangeTransferAmountAction => ({
type: "CHANGE_TRANSFER_AMOUNT",
data: { amount }
});
export const processRedirect = (dispatch: Dispatch<Action>) =>
dispatch({ type: "PROCESS_REDIRECT" });
export const openInvalidCardModal = (): OpenInvalidCardModalAction => ({
type: "OPEN_INVALID_CARD_MODAL"
});
export const clearInvalidCardModal = (): ClearInvalidCardModalAction => ({
type: "CLEAR_INVALID_CARD_MODAL"
});
export const resetAllOperationState = () => (dispatch: Dispatch<Action>) =>
Promise.all([
dispatch(enrollReset()),
dispatch(addCardReset()),
dispatch(fundSightlineReset()),
dispatch(createCardAndFundSightlineReset()),
dispatch(transferFundsToTVGReset()),
processRedirect(dispatch),
dispatch(changeTransferAmount())
]);
const injectedSuccessModal = (dispatch, fundedAmount) => {
const SUCCESS_MODAL_LABELS = {
title: "Successful Deposit!",
textTemplate: "Your $@@@deposit_amount@@@ are now available!",
buttonText: "Let's bet!"
};
const successModalOnOpenCallback = () => {
dispatch({ type: "SITE_CLICK", data: { fieldAction: "seen" } });
};
const successModalButtonCallback = () => {
dispatch({
type: "NAVIGATE_TO",
data: {
fieldName: SUCCESS_MODAL_LABELS.buttonText,
href: "https://www.tvg.com/"
}
});
if (window && window.handleNativeMessages) {
window.handleNativeMessages("CLOSE_DMA");
}
};
const successModalCloseCallback = () => {
dispatch({ type: "SITE_CLICK", data: { fieldAction: "close" } });
};
if (
["iosnative", "androidnative"].includes(
get(window, "__TVG_GLOBALS__.PRODUCT", "touch3")
)
) {
if (window.ReactInjector) {
window.ReactInjector.renderDepositSuccess(
document.getElementById("injected-modal"), // eslint-disable-line
{
title: SUCCESS_MODAL_LABELS.title,
text: SUCCESS_MODAL_LABELS.textTemplate.replace(
"@@@deposit_amount@@@",
fundedAmount
),
buttonText: SUCCESS_MODAL_LABELS.buttonText,
sharedState: { isOpen: true },
buttonCallback: successModalButtonCallback,
closeCallback: successModalCloseCallback,
onOpenCallback: successModalOnOpenCallback
}
);
}
}
};
export const getSightlineAccountInfo = (accountId: ?number) => (
dispatch: Dispatch<Action>
) =>
Promise.resolve(dispatch({ type: "FETCH_SIGHTLINE_USER_REQUEST" }))
.then(() => API.getSightlineAccountInfo(accountId))
.then(data =>
dispatch({ type: "FETCH_SIGHTLINE_USER_SUCCESS", data: data.data })
)
.then(() => dispatch({ type: "FETCH_SIGHTLINE_CARDS_REQUEST" }))
.then(() => API.getSightlineCards(accountId))
.then(data =>
dispatch({ type: "FETCH_SIGHTLINE_CARDS_SUCCESS", data: data.data })
)
.catch((error: ApiError) => {
console.error(error);
dispatch({ type: "FETCH_SIGHTLINE_USER_FAILURE", error });
});
export const transferFundsToTVG = (
amount: number,
accountId: number,
isRedirect: boolean = false,
fee,
feeFull,
feeRefund
) => (dispatch: Dispatch<Action>) =>
Promise.resolve(
dispatch({
type: "TRANSFER_FUNDS_TO_TVG_REQUEST",
data: { amount, isRedirect }
})
)
.then(() => API.transferFundsToTVG(amount, accountId))
.then(data => {
if (data.data && data.data.sightlineBalance) {
dispatch({
type: "UPDATE_BALANCE_ON_DEPOSIT",
data: { sightlineBalance: parseFloat(data.data.sightlineBalance) }
});
}
if (data.status.toString()[0] === "2") {
injectedSuccessModal(dispatch, amount);
}
switch (data.status) {
case 200:
if (data.data.tvgBalance) {
mediator.dispatch("ACCOUNT_BALANCE_CHANGED", {
balance: parseFloat(data.data.tvgBalance)
});
}
injectedSuccessModal(dispatch, amount);
return dispatch({
type: "TRANSFER_FUNDS_TO_TVG_SUCCESS",
data: {
...data.data,
amount,
isRedirect,
depositFee: fee,
feeAmount: feeFull,
feeRefundAmount: feeRefund
}
});
case 207:
if (Array.isArray(data.data)) {
const slpWithdrawal = data.data.filter(
item => item.id === "SIGHTLINE_WITHDRAWAL"
);
const firstStep =
slpWithdrawal.length === 1 ? slpWithdrawal[0] : null;
if (firstStep && firstStep.body) {
const sightlineBalance = parseFloat(
firstStep.body.sightlineBalance
);
dispatch({
type: "UPDATE_BALANCE_ON_DEPOSIT",
data: { sightlineBalance }
});
}
const toteDeposit = data.data.filter(
item => item.id === "TOTE_DEPOSIT"
);
const secondStep = toteDeposit.length === 1 ? toteDeposit[0] : null;
if (secondStep && secondStep.body) {
const statusCode = secondStep.body.status;
const errorCode = secondStep.body.exception;
const errorMsg = secondStep.body.message;
switch (statusCode) {
case 504:
case 502:
return dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositPollerTimeout",
amount,
message: "scenario2",
gaLabel: errorMsg
}
});
case 500:
if (errorCode === "SLP_WITHDRAW_FROM_SLP_DECLINED") {
return dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositStatusPoller",
amount,
message: "scenario1",
gaLabel: errorMsg
}
});
} else if (errorCode === "SLP_TOTE_DEPOSIT_FAILED") {
return dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "warning",
error: "depositStatusPoller",
amount,
message: "scenario3a",
gaLabel: errorMsg
}
});
}
return dispatch({
type: "TRANSFER_FUNDS_TO_TVG_FAILURE",
error: { message: errorMsg },
data: { amount, isRedirect }
});
default:
return dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositPollerTimeout",
message: "scenario3c",
amount,
gaLabel: errorMsg
}
});
}
}
}
break;
case 202:
if (data.data.tvgBalance) {
mediator.dispatch("ACCOUNT_BALANCE_CHANGED", {
balance: data.data.tvgBalance
});
}
dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
shouldBlock: true,
success: false,
notifType: "warning",
error: "depositStatusPoller",
message: "scenario3b",
gaLabel: "Deposit Poller Initiated",
ignoreGTM: true
}
});
return poller(
() =>
API.getDepositStatus(data.headers.location)
.then(response => response.status)
.catch((error: ApiError) => {
if (error.status === 504 || error.status === 502) {
dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositPollerTimeout",
message: "scenario2",
amount,
gaLabel: `Deposit Poller ${error.status} error`
}
});
} else if (error.status === 500) {
if (error.code === "SLP_WITHDRAW_FROM_SLP_DECLINED") {
dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositStatusPoller",
message: "scenario1",
amount,
gaLabel: `Deposit Poller ${error.code} error`
}
});
} else {
dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositStatusPoller",
message: "scenario3a",
amount,
gaLabel: `Deposit Poller ${error.code} error`
}
});
}
} else {
dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositPollerTimeout",
message: "scenario3c",
amount,
gaLabel: `Deposit Poller ${error.status} error`
}
});
}
}),
10000,
2000
)
.then(success => {
if (success) {
injectedSuccessModal(dispatch, amount);
return dispatch({
type: "TRANSFER_FUNDS_TO_TVG_SUCCESS",
data: {
...data.data,
amount,
depositFee: fee,
feeAmount: feeFull,
feeRefundAmount: feeRefund
}
});
}
return dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "warning",
error: "SLP_DEPOSIT_TO_TVG_FAILED",
message: "scenario3a",
amount,
gaLabel: `Deposit Poller error - FINISH_DEPOSIT_ERROR`
}
});
})
.catch(() => {
dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "warning",
error: "SLP_DEPOSIT_TO_TVG_FAILED",
message: "scenario3c",
amount,
gaLabel: "Deposit Poller Timeout"
}
});
});
default:
injectedSuccessModal(dispatch, amount);
return dispatch({
type: "TRANSFER_FUNDS_TO_TVG_SUCCESS",
data: {
...data.data,
amount,
depositFee: fee,
feeAmount: feeFull,
feeRefundAmount: feeRefund
}
});
}
return {};
})
.catch((error: ApiError) => {
let message = error.message;
const ecode = error.code || error.exception;
// eslint-disable-next-line
error.depositFailed = true;
if (error.status === 504 || error.status === 502) {
message = "scenario2";
} else if (error.status === 500) {
if (ecode === "SLP_WITHDRAW_FROM_SLP_DECLINED") {
message = "scenario1";
} else if (ecode === "SLP_TOTE_DEPOSIT_FAILED") {
message = "scenario3a";
}
} else if (error.status === 422) {
if (ecode === "RESP_GAMING_LIMITS_EXCEEDED") {
message = "scenario6";
}
}
dispatch({
type: "DEPOSIT_POLLER_DONE",
data: {
success: false,
notifType: "error",
error: "depositStatusPoller",
message,
amount,
gaLabel: ecode
}
});
dispatch({
type: "TRANSFER_FUNDS_TO_TVG_FAILURE",
error: ecode,
data: { amount, ignoreGTM: false, isRedirect },
errorData: { type: ecode, message: error.message }
});
throw error;
});
export const changeDefaultCard = (id: number) => ({
type: "CHANGE_DEFAULT_CARD",
data: id
});
export const addNewCard = (card: MinimalCardType, accountId: number) => (
dispatch: Dispatch<Action>
) =>
Promise.resolve(dispatch({ type: "ADD_NEW_CARD_REQUEST" }))
.then(() => API.addNewCard(card, accountId))
.then(() => dispatch({ type: "ADD_NEW_CARD_SUCCESS" }))
.then(() => dispatch({ type: "HIDE_ADD_CARD_MODAL" }))
.then(() => dispatch({ type: "FETCH_SIGHTLINE_CARDS_REQUEST" }))
.then(() => API.getSightlineCards(accountId))
.then(data =>
dispatch({
type: "FETCH_SIGHTLINE_CARDS_SUCCESS",
data: { addFundsSectionVisible: true, ...data }
})
)
.catch((error: ApiError) => {
dispatch({ type: "REDIRECT_PROCESSED" });
dispatch({ type: "ADD_NEW_CARD_FAILURE", error });
throw error;
});
export const fundSightline = (
transferData: FundExistingCardInput,
accountId: number,
isRedirect: boolean,
cardId: string
) => (dispatch: Dispatch<Action>) =>
Promise.resolve(
dispatch({ type: "FUND_SIGHTLINE_REQUEST", data: transferData })
)
.then(() => {
if (isRedirect) {
return API.fundSightlineWithoutCardId(transferData, accountId);
}
return API.fundSightline(transferData, accountId, cardId);
})
.then(data => {
changeDefaultCard(transferData.paymentCard.id);
dispatch({
type: "FUND_SIGHTLINE_REQUEST_SUCCESS",
data: {
...data
}
});
})
.catch((error: ApiError) => {
dispatch({
type: "FUND_SIGHTLINE_REQUEST_FAILURE",
data: transferData,
error
});
throw error;
});
export const fundSightlineRedirect = (
transferData: FundExistingCardInput,
accountId: number
) => (dispatch: Dispatch<Action>) =>
Promise.resolve(
dispatch({ type: "FUND_SIGHTLINE_REQUEST", data: transferData })
)
.then(() => API.fundSightlineWithoutCardId(transferData, accountId))
.then(data => {
dispatch({
type: "FUND_SIGHTLINE_REQUEST_SUCCESS",
data
});
return API.getSightlineCards(accountId);
})
.then(data => {
dispatch({ type: "FETCH_SIGHTLINE_CARDS_SUCCESS", data });
return data;
})
.then(data => changeDefaultCard(data.cards[0].id))
.catch((error: ApiError) => {
dispatch({
type: "FUND_SIGHTLINE_REQUEST_FAILURE",
data: transferData,
error
});
throw error;
});
// I dont like this action but it's required for GTM
export const fundSightlineAndTransferToTVG = (
fund: FundExistingCardInput,
transferAmount: number,
accountId: number,
isRedirect: boolean = false,
cardId: string,
fee: string,
feeFull: string,
feeRefund: string
) => (dispatch: Dispatch<Action>) =>
Promise.resolve(
dispatch({
type: "FUND_AND_TRANSFER_REQUEST",
data: { fund, transferAmount, accountId }
})
)
.then(() => {
if (isRedirect) {
return dispatch(fundSightlineRedirect(fund, accountId));
}
return dispatch(fundSightline(fund, accountId, isRedirect, cardId));
})
.then(() =>
dispatch(
transferFundsToTVG(
transferAmount,
accountId,
isRedirect,
fee,
feeFull,
feeRefund
)
)
)
.then(() =>
dispatch({
type: "FUND_AND_TRANSFER_REQUEST_SUCCESS",
data: { fund, transferAmount }
})
)
.catch(error => {
if (error.message === "Funding fail") {
dispatch(
transferFundsToTVG(
transferAmount,
accountId,
isRedirect,
fee,
feeFull,
feeRefund
)
);
} else {
dispatch({
type: "FUND_AND_TRANSFER_REQUEST_FAILURE",
data: { fund, transferAmount, ignoreGTM: !!error.depositFailed },
error
});
// if funding success and error is from deposit and its redirect case should fill the transfer to TVG amount
if (isRedirect && error.depositFailed) {
dispatch({ type: "HIDE_ADD_FUNDS_SECTION" });
dispatch(changeTransferAmount(transferAmount));
dispatch({ type: "REDIRECT_PROCESSED" });
} else {
dispatch(openInvalidCardModal());
}
throw error;
}
});
export const enrollUser = (acceptTerms: boolean, accountId: number) => (
dispatch: Dispatch<Action>
) =>
Promise.resolve(dispatch({ type: "ENROLL_USER_REQUEST" }))
.then(() => API.enrollUser(acceptTerms, accountId))
.then(() => dispatch({ type: "ENROLL_USER_SUCCESS" }))
.catch((error: ApiError) => {
dispatch({ type: "ENROLL_USER_FAILURE", error });
throw error;
});
export const fullEnroll = (
acceptTerms: boolean,
transferAmount: number,
card: FundNewCardInput,
securityNumber: string,
fundAmount: number,
accountId: number,
isRedirect: boolean,
fee: string,
feeFull: string,
feeRefund: string
) => (dispatch: Dispatch<Action>) =>
Promise.resolve(
dispatch({
type: "FULL_ENROLL_REQUEST",
data: { fundAmount, transferAmount }
})
)
.then(() => dispatch(enrollUser(acceptTerms, accountId)))
.then(() => dispatch(addNewCard(card, accountId)))
.then((cards: Card[]) => {
const cardId = cards.data[0] ? cards.data[0].id : cards.data.cards[0].id;
return dispatch(
fundSightline(
{
amount: fundAmount,
paymentCard: {
id: cardId,
securityNumber
}
},
accountId,
false,
cardId
)
);
})
.then(() =>
dispatch(
transferFundsToTVG(
transferAmount,
accountId,
isRedirect,
fee,
feeFull,
feeRefund
)
)
)
.then(() => {
if (isRedirect) {
dispatch({ type: "REDIRECT_PROCESSED" });
}
dispatch({
type: "FULL_ENROLL_SUCCESS",
data: { fundAmount, transferAmount }
});
})
.then(() => {
const appsflyerEvent = {
type: "APPSFLYER_EVENT",
payload: {
appsflyer: {
key: "af_first_deposit",
value: {
account_id: accountId,
af_revenue: `${parseFloat(fundAmount).toFixed(2)}`
}
}
}
};
// Send AppsFlyer event for iOS app
if (
window &&
window.webkit &&
window.webkit.messageHandlers &&
window.webkit.messageHandlers.APPSFLYER_EVENT
) {
window.webkit.messageHandlers.APPSFLYER_EVENT.postMessage(
appsflyerEvent
);
} else if (
window &&
window.mediatorChannels &&
window.mediatorChannels.ios
) {
window.mediatorChannels.ios.dispatch(appsflyerEvent);
}
if (
typeof window !== "undefined" &&
window.handleNativeMessages &&
!!window.clientApp
) {
if (window.clientApp.indexOf("native") !== -1) {
window.handleNativeMessages("UPDATE_BALANCE");
}
}
})
.catch((error: ApiError) => {
if (isRedirect) {
dispatch({ type: "REDIRECT_PROCESSED" });
if (
error.message !== "Funding fail" &&
error.depositFailed &&
transferAmount
) {
dispatch({ type: "HIDE_ADD_FUNDS_SECTION" });
dispatch(changeTransferAmount(transferAmount));
}
}
dispatch({
type: "FULL_ENROLL_REQUEST_FAILURE",
data: { fundAmount, transferAmount },
error
});
});
export const userFilledField = (
fieldName: string,
value: string
): UserFilledFieldAction => ({
type: "USER_FILLED_FIELD",
data: { fieldName, value }
});
export const userFilledDepositField = (
fieldName: string,
value: string
): UserFilledDepositFieldAction => ({
type: "USER_FILLED_DEPOSIT_AMOUNT",
data: { fieldName, value }
});
export const userFilledTransferField = (
fieldName: string,
value: string
): UserFilledTransferFieldAction => ({
type: "USER_FILLED_TRANSFER_AMOUNT",
data: { fieldName, value }
});
export const errorShown = (
fieldName: string,
value: string,
errors: string[]
): ErrorShownAction => ({
type: "ERROR_SHOWN",
data: { fieldName, value, errors }
});
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/actions.js
webpack:///./src/services/slp.js
// @flow
import axios from "axios";
import { get } from "lodash";
import tvgConf from "@tvg/conf";
import { headers, ApiError } from "./shared";
import type {
AccountInfo,
FundExistingCardInput,
CardType,
MinimalCardType,
TVGTransferConfirmation,
TransferExistingCardConfirmation,
FeesDepositResponse
} from "../Sightline/Deposit/Types.js.flow";
let client = null;
if (typeof window !== "undefined") {
client = axios.create({
baseURL: tvgConf().config("service.slp"),
headers,
withCredentials: true,
responseType: "json"
});
}
const uwtClient = axios.create({
baseURL: tvgConf().config("service.uwt"),
headers,
withCredentials: true,
responseType: "json"
});
/**
* Request to get the SLP account information of a tvg user
*/
export const getSightlineAccountInfo = (
accountId: ?number
): Promise<AccountInfo> =>
client
.get(`user/${accountId}/account-info`)
.then(get("data"))
.catch(ApiError.fromAxios);
/**
* Request to get the SLP cards from the logged user
*/
export const getSightlineCards = (accountId: ?number): Promise<AccountInfo> =>
client
.get(`user/${accountId}/payment-cards`)
.then(get("data"))
.catch(ApiError.fromAxios);
/**
* Get deposit status
*/
export const getDepositStatus = (url: string) => {
const uuid =
url.split("deposits/").length > 0
? url.split("deposits/")[1].split("/status")[0]
: null;
let locationUrl = url;
if (locationUrl.indexOf("http") === -1 && uuid) {
locationUrl = locationUrl.split("/uwt/v1")[1];
}
return uwtClient.get(locationUrl).then(get("data"));
};
/**
* Request to enroll a new user on Sightline
*/
export const enrollUser = (
termsAccepted: boolean,
accountId: ?number
): Promise<void> =>
client
.post(`user/${accountId}/enroll`, {
termsAccepted,
version: 2
})
.then(get("status"))
.catch(ApiError.fromAxios);
/**
* Request that associates a new payment card to be used in sightline
*/
export const addNewCard = (
data: MinimalCardType,
accountId: ?number
): Promise<CardType[]> =>
client
.post(`user/${accountId}/payment-cards`, data)
.catch(ApiError.fromAxios);
/**
* Request to transfer funds from a Sightline account to a TVG account
*/
export const transferFundsToTVG = (
amount: number,
accountId: ?number
): Promise<TVGTransferConfirmation> =>
client
.post(`user/${accountId}/deposit`, { amount })
.then(response => response)
.catch(ApiError.fromAxios);
/**
* Request to fund slp account with an existing debit/credit card
*/
export const fundSightline = (
data: FundExistingCardInput,
accountId: ?number,
cardId: string
): Promise<TransferExistingCardConfirmation> =>
client
.post(`user/${accountId}/funding/${cardId}`, data)
.then(get("data"))
.catch(err => ApiError.fromAxios(err, "Funding fail"));
/**
* Request to fund slp account through sightline flow (redirect will not use card id)
*/
export const fundSightlineWithoutCardId = (
data: FundExistingCardInput,
accountId: ?number
): Promise<TransferExistingCardConfirmation> =>
client
.post(`user/${accountId}/funding`, data)
.then(get("data"))
.catch(err => ApiError.fromAxios(err, "Funding fail"));
export const getSightlineFees = ({
amount,
accountId
}: {
amount: Number,
accountId: number
}): Promise<FeesDepositResponse> =>
client
.get(`/user/${accountId}/deposit/fee?depositAmount=${amount}`)
.then(data => data.data)
.catch(err => ApiError.fromAxios(err, "Funding fail"));
// WEBPACK FOOTER //
// ./src/services/slp.js
webpack:///./src/Sightline/Deposit/Common/Review/index.jsx
// @flow
import React, { Component } from "react";
import classnames from "classnames";
import { toInteger, get } from "lodash";
import conf from "@tvg/conf";
import Title from "../Titles";
import style from "./style.css";
import type { DepositLabels } from "../../../../Types.js.flow";
const tvgConf = conf();
type Props = {
depositAmount: number,
transferAmount: number,
fee: number,
feeFull: number,
feeRefund: number,
balance: ?number,
transactionNumber: ?string,
title: boolean,
qaLabel: string,
applyError: boolean,
labels?: DepositLabels
};
type State = {
balance?: ?number,
applyError: boolean,
isFdr: boolean
};
const twoDecimal = (num: ?number): string =>
!isNaN(num) ? parseFloat(num).toFixed(2) : toInteger(0).toFixed(2);
const getValue = (balance: ?string | ?number): string => {
if (!isNaN(balance)) {
return toInteger(balance) < 0
? `-$${twoDecimal(Math.abs(parseFloat(balance)))}`
: `$${twoDecimal(parseFloat(balance))}`;
}
return `$${twoDecimal(0)}`;
};
class Review extends Component {
static defaultProps = {
transactionNumber: null,
title: true,
transferAmount: 0,
depositAmount: 0,
fee: 0,
qaLabel: "",
labels: {
"deposit-summary-fee-refund": "Discount",
"deposit-summary-fee-amount": "Fee"
}
};
constructor(props: Props) {
super(props);
this.state = {
balance: props.balance,
applyError: false,
isFdr: tvgConf.product.indexOf("fdr") === 0
};
}
state: State;
componentWillReceiveProps(nextProps: Props) {
this.setState({
balance: nextProps.balance,
applyError: nextProps.applyError
});
}
props: Props;
renderDepositAmount() {
return [
<dt
key="reviewAndAuthorizeTotalLabelTotal"
data-qa-label="reviewAndAuthorizeTotalLabel"
>
{`Total Deposit to Pre Paid ${
this.state.isFdr ? "Card:" : "Play+ Card:"
}`}
</dt>,
<dd
key="reviewAndAuthorizeTotalValue"
data-qa-label="reviewAndAuthorizeTotalValue"
>
<strong>
$
{twoDecimal(Math.max(0, this.props.depositAmount))}
</strong>
</dd>
];
}
renderCreditCardFeeFull() {
const feeValue =
this.props.feeFull === undefined ? this.props.fee : this.props.feeFull;
return [
<dt
key="reviewAndAuthorizeFeeLabelFull"
data-qa-label="reviewAndAuthorizeFeeLabelFull"
>
{get(this, 'props.labels["deposit-summary-fee-amount"]')}
</dt>,
<dd
key="reviewAndAuthorizeFeeValueFull"
data-qa-label="reviewAndAuthorizeFeeValueFull"
>
<strong>${twoDecimal(feeValue)}</strong>
</dd>
];
}
renderCreditCardFeeRefund() {
return [
<dt
key="reviewAndAuthorizeFeeLabelRefund"
data-qa-label="reviewAndAuthorizeFeeLabelRefund"
>
{get(this, 'props.labels["deposit-summary-fee-refund"]')}
</dt>,
<dd
key="reviewAndAuthorizeFeeValueRefund"
data-qa-label="reviewAndAuthorizeFeeValueRefund"
>
<strong>${twoDecimal(this.props.feeRefund)}</strong>
</dd>
];
}
renderTransferAmount() {
return [
<dt
className={classnames({
[style.error]: toInteger(this.props.transferAmount) < 0
})}
data-qa-label="reviewAndAuthorizeAmountLabel"
key="reviewAndAuthorizeAmountLabel"
>
{this.state.isFdr
? "Amount Transferred to FanDuel Racing Account:"
: "Amount Transferred to TVG Account:"}
</dt>,
<dd
className={classnames({
[style.error]: toInteger(this.props.transferAmount) < 0
})}
data-qa-label="reviewAndAuthorizeAmountValue"
key="reviewAndAuthorizeAmountValue"
>
<strong>
$
{twoDecimal(Math.max(0, this.props.transferAmount))}
</strong>
</dd>
];
}
renderRemainingPrePaidBalance() {
return [
<dt
className={classnames({
[style.error]:
parseFloat(this.state.balance) < 0 && this.state.applyError,
reviewAndAuthorizeRemainingLabel: true
})}
data-qa-label="reviewAndAuthorizeRemainingLabel"
key="reviewAndAuthorizeRemainingLabel"
>
Remaining Pre Paid Balance:
</dt>,
<dd
className={classnames({
[style.error]:
parseFloat(this.state.balance) < 0 && this.state.applyError,
reviewAndAuthorizeRemainingValue: true
})}
data-qa-label="reviewAndAuthorizeRemainingValue"
key="reviewAndAuthorizeRemainingValue"
>
<strong>{getValue(this.state.balance)}</strong>
</dd>
];
}
renderTransactionNumber() {
return [
<dt key="transactionNumberDt">Transaction Number:</dt>,
<dd key="transactionNumberDd">
<strong>{this.props.transactionNumber}</strong>
</dd>
];
}
render() {
return (
<div
className={style.review}
data-qa-label={this.props.qaLabel.concat("ReviewAndAuthorize")}
>
{this.props.title && (
<Title qaLabel="reviewAndAuthorizeLabel">Review and Authorize</Title>
)}
<dl>
{this.renderDepositAmount()}
{!this.state.isFdr && this.renderCreditCardFeeFull()}
{!this.state.isFdr && this.renderCreditCardFeeRefund()}
{this.renderTransferAmount()}
{this.renderRemainingPrePaidBalance()}
{this.props.transactionNumber && this.renderTransactionNumber()}
</dl>
</div>
);
}
}
export default Review;
// WEBPACK FOOTER //
// ./src/Sightline/Deposit/Common/Review/index.jsx