@financial-times/n-conversion-forms 30.1.0 → 31.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.circleci/config.yml +97 -150
- package/.toolkitrc.yml +19 -0
- package/.toolkitstate/ci.json +6 -0
- package/README.md +2 -2
- package/jest.config.js +2 -0
- package/package.json +30 -16
- package/.circleci/shared-helpers/.github/settings.yml +0 -1
- package/.circleci/shared-helpers/CODEOWNERS +0 -3
- package/.circleci/shared-helpers/README.md +0 -72
- package/.circleci/shared-helpers/helper-check-service-ready +0 -37
- package/.circleci/shared-helpers/helper-configure-awscli +0 -20
- package/.circleci/shared-helpers/helper-generate-build-state-artifacts +0 -29
- package/.circleci/shared-helpers/helper-install-awscli +0 -14
- package/.circleci/shared-helpers/helper-install-puppeteer-deps +0 -25
- package/.circleci/shared-helpers/helper-npm-install-peer-deps +0 -40
- package/.circleci/shared-helpers/helper-npm-store-auth-token +0 -14
- package/.circleci/shared-helpers/helper-npm-update +0 -26
- package/.circleci/shared-helpers/helper-npm-version-and-publish-public +0 -19
- package/.circleci/shared-helpers/helper-publish-github-pages +0 -43
- package/.circleci/shared-helpers/helper-setup-heroku-cli +0 -46
- package/.circleci/shared-helpers/helper-setup-s3-upload +0 -17
- package/.circleci/shared-helpers/helper-upload-assets-to-s3 +0 -69
- package/.circleci/shared-helpers/helper.example +0 -13
- package/build-state/npm-shrinkwrap.json +0 -58461
- package/dist/accept-terms-business.js +0 -74
- package/dist/accept-terms-business.spec.js +0 -40
- package/dist/accept-terms-privacy-policy.js +0 -71
- package/dist/accept-terms-subscription.js +0 -150
- package/dist/accept-terms.js +0 -217
- package/dist/app-banner.js +0 -51
- package/dist/b2c-partnership-confirmation.js +0 -64
- package/dist/billing-city.js +0 -58
- package/dist/billing-country.js +0 -43
- package/dist/billing-postcode.js +0 -76
- package/dist/company-name.js +0 -78
- package/dist/confirmation.js +0 -117
- package/dist/continue-reading.js +0 -45
- package/dist/country.js +0 -106
- package/dist/customer-care.js +0 -52
- package/dist/debug.js +0 -50
- package/dist/decision-maker.js +0 -72
- package/dist/deferred-billing-terms.js +0 -112
- package/dist/delivery-address-map.js +0 -184
- package/dist/delivery-address-type.js +0 -74
- package/dist/delivery-address.js +0 -123
- package/dist/delivery-city.js +0 -70
- package/dist/delivery-county.js +0 -48
- package/dist/delivery-instructions.js +0 -123
- package/dist/delivery-option.js +0 -77
- package/dist/delivery-po-box.js +0 -75
- package/dist/delivery-postcode.js +0 -116
- package/dist/delivery-security-instructions.js +0 -72
- package/dist/delivery-start-date.js +0 -77
- package/dist/education-job-title.js +0 -67
- package/dist/email.js +0 -90
- package/dist/error-page.js +0 -45
- package/dist/fieldset.js +0 -58
- package/dist/first-name.js +0 -73
- package/dist/form.js +0 -29
- package/dist/google-sign-in.js +0 -24
- package/dist/graduation-date.js +0 -112
- package/dist/index.js +0 -432
- package/dist/industry.js +0 -81
- package/dist/job-title.js +0 -65
- package/dist/last-name.js +0 -73
- package/dist/licence-confirmation.js +0 -67
- package/dist/licence-header.js +0 -52
- package/dist/licence-sign-in.js +0 -36
- package/dist/licence-title.js +0 -46
- package/dist/lite-sub-confirmation.js +0 -118
- package/dist/loader.js +0 -54
- package/dist/message.js +0 -101
- package/dist/message.spec.js +0 -96
- package/dist/organisation.js +0 -73
- package/dist/package-change.js +0 -38
- package/dist/password.js +0 -95
- package/dist/payment-term.js +0 -328
- package/dist/payment-type.js +0 -213
- package/dist/personal-title.js +0 -94
- package/dist/phone.js +0 -85
- package/dist/position.js +0 -86
- package/dist/progress-indicator.js +0 -66
- package/dist/province.js +0 -80
- package/dist/registration-confirmation.js +0 -108
- package/dist/responsibility.js +0 -84
- package/dist/section.js +0 -20
- package/dist/seven-day-pass-experiment-confirmation.js +0 -93
- package/dist/state.js +0 -80
- package/dist/submit.js +0 -52
- package/dist/text-input.js +0 -78
- package/dist/trial-banner.js +0 -29
package/dist/package-change.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.PackageChange = PackageChange;
|
|
8
|
-
var _react = _interopRequireDefault(require("react"));
|
|
9
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
10
|
-
function PackageChange(_ref) {
|
|
11
|
-
var changePackageUrl = _ref.changePackageUrl,
|
|
12
|
-
currentPackage = _ref.currentPackage,
|
|
13
|
-
packageDescription = _ref.packageDescription,
|
|
14
|
-
is7DayPassExperiment = _ref.is7DayPassExperiment;
|
|
15
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
16
|
-
className: "ncf__package-change"
|
|
17
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
18
|
-
className: "ncf__package-change__package"
|
|
19
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
20
|
-
className: "ncf__package-change__content"
|
|
21
|
-
}, /*#__PURE__*/_react["default"].createElement("p", null, "You have chosen", ' ', /*#__PURE__*/_react["default"].createElement("span", {
|
|
22
|
-
className: "ncf__strong"
|
|
23
|
-
}, currentPackage)), packageDescription && /*#__PURE__*/_react["default"].createElement("p", {
|
|
24
|
-
className: "ncf__package-change__content__description"
|
|
25
|
-
}, packageDescription)), !is7DayPassExperiment && /*#__PURE__*/_react["default"].createElement("div", {
|
|
26
|
-
className: "ncf__package-change__actions"
|
|
27
|
-
}, /*#__PURE__*/_react["default"].createElement("a", {
|
|
28
|
-
href: changePackageUrl,
|
|
29
|
-
className: "ncf__button ncf__button--mono ncf__button--baseline",
|
|
30
|
-
"data-trackable": "change"
|
|
31
|
-
}, "Change"))));
|
|
32
|
-
}
|
|
33
|
-
PackageChange.propTypes = {
|
|
34
|
-
changePackageUrl: _propTypes["default"].string.isRequired,
|
|
35
|
-
currentPackage: _propTypes["default"].string.isRequired,
|
|
36
|
-
packageDescription: _propTypes["default"].string,
|
|
37
|
-
is7DayPassExperiment: _propTypes["default"].bool
|
|
38
|
-
};
|
package/dist/password.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.Password = Password;
|
|
8
|
-
var _react = _interopRequireDefault(require("react"));
|
|
9
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
10
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
|
11
|
-
function Password(_ref) {
|
|
12
|
-
var _ref$unknownUser = _ref.unknownUser,
|
|
13
|
-
unknownUser = _ref$unknownUser === void 0 ? false : _ref$unknownUser,
|
|
14
|
-
_ref$hasError = _ref.hasError,
|
|
15
|
-
hasError = _ref$hasError === void 0 ? false : _ref$hasError,
|
|
16
|
-
_ref$pattern = _ref.pattern,
|
|
17
|
-
pattern = _ref$pattern === void 0 ? null : _ref$pattern,
|
|
18
|
-
_ref$isDisabled = _ref.isDisabled,
|
|
19
|
-
isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
|
|
20
|
-
_ref$fieldId = _ref.fieldId,
|
|
21
|
-
fieldId = _ref$fieldId === void 0 ? 'passwordField' : _ref$fieldId,
|
|
22
|
-
_ref$inputId = _ref.inputId,
|
|
23
|
-
inputId = _ref$inputId === void 0 ? 'password' : _ref$inputId,
|
|
24
|
-
inputName = _ref.inputName,
|
|
25
|
-
_ref$label = _ref.label,
|
|
26
|
-
label = _ref$label === void 0 ? 'Password' : _ref$label,
|
|
27
|
-
_ref$placeholder = _ref.placeholder,
|
|
28
|
-
placeholder = _ref$placeholder === void 0 ? 'Enter a password' : _ref$placeholder,
|
|
29
|
-
_ref$description = _ref.description,
|
|
30
|
-
description = _ref$description === void 0 ? 'Use 8 or more characters. You can use letters, numbers or symbols' : _ref$description,
|
|
31
|
-
_ref$showDescription = _ref.showDescription,
|
|
32
|
-
showDescription = _ref$showDescription === void 0 ? true : _ref$showDescription,
|
|
33
|
-
_ref$hasShowPassword = _ref.hasShowPassword,
|
|
34
|
-
hasShowPassword = _ref$hasShowPassword === void 0 ? true : _ref$hasShowPassword;
|
|
35
|
-
// This is necessary to make this backward compatible with the Handlebars partial.
|
|
36
|
-
var showPasswordId = inputId === 'password' ? 'showPassword' : "".concat(inputId, "-showPassword");
|
|
37
|
-
var showPasswordName = showPasswordId;
|
|
38
|
-
// Use inputId if inputName is not explicitly passed.
|
|
39
|
-
inputName = inputName || inputId;
|
|
40
|
-
var fieldClassNames = (0, _classnames["default"])(['o-forms-field', 'ncf__password-field', 'ncf__validation-error', {
|
|
41
|
-
'js-unknown-user-field': unknownUser
|
|
42
|
-
}]);
|
|
43
|
-
var inputWrapperClassNames = (0, _classnames["default"])(['o-forms-input', 'o-forms-input--password', 'o-forms-input--checkbox', 'o-forms-input--suffix', {
|
|
44
|
-
'o-forms-input--invalid': hasError
|
|
45
|
-
}]);
|
|
46
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
47
|
-
id: fieldId,
|
|
48
|
-
className: fieldClassNames,
|
|
49
|
-
"data-validate": "required,password"
|
|
50
|
-
}, /*#__PURE__*/_react["default"].createElement("label", {
|
|
51
|
-
htmlFor: inputId,
|
|
52
|
-
className: "o-forms-title"
|
|
53
|
-
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
54
|
-
className: "o-forms-title__main"
|
|
55
|
-
}, label), showDescription ? /*#__PURE__*/_react["default"].createElement("span", {
|
|
56
|
-
className: "o-forms-title__prompt"
|
|
57
|
-
}, description) : null), /*#__PURE__*/_react["default"].createElement("div", {
|
|
58
|
-
className: inputWrapperClassNames
|
|
59
|
-
}, /*#__PURE__*/_react["default"].createElement("input", {
|
|
60
|
-
type: "password",
|
|
61
|
-
id: inputId,
|
|
62
|
-
name: inputName,
|
|
63
|
-
placeholder: placeholder,
|
|
64
|
-
autoComplete: "new-password",
|
|
65
|
-
"data-trackable": "field-password",
|
|
66
|
-
"aria-required": "true",
|
|
67
|
-
required: true,
|
|
68
|
-
pattern: pattern,
|
|
69
|
-
disabled: isDisabled
|
|
70
|
-
}), hasShowPassword ? /*#__PURE__*/_react["default"].createElement("label", {
|
|
71
|
-
className: "ncf__password-field--show-password"
|
|
72
|
-
}, /*#__PURE__*/_react["default"].createElement("input", {
|
|
73
|
-
type: "checkbox",
|
|
74
|
-
id: showPasswordId,
|
|
75
|
-
name: showPasswordName,
|
|
76
|
-
"data-trackable": "field-show-password",
|
|
77
|
-
"aria-label": "Show password"
|
|
78
|
-
}), /*#__PURE__*/_react["default"].createElement("span", {
|
|
79
|
-
className: "o-forms-input__label",
|
|
80
|
-
"aria-hidden": "true"
|
|
81
|
-
}, "Show password")) : null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
82
|
-
className: "o-forms-input__error"
|
|
83
|
-
}, "Please enter a valid password")));
|
|
84
|
-
}
|
|
85
|
-
Password.propTypes = {
|
|
86
|
-
unknownUser: _propTypes["default"].bool,
|
|
87
|
-
hasError: _propTypes["default"].bool,
|
|
88
|
-
pattern: _propTypes["default"].string,
|
|
89
|
-
isDisabled: _propTypes["default"].bool,
|
|
90
|
-
fieldId: _propTypes["default"].string,
|
|
91
|
-
inputId: _propTypes["default"].string,
|
|
92
|
-
inputName: _propTypes["default"].string,
|
|
93
|
-
label: _propTypes["default"].string,
|
|
94
|
-
placeholder: _propTypes["default"].string
|
|
95
|
-
};
|
package/dist/payment-term.js
DELETED
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.PaymentTerm = PaymentTerm;
|
|
8
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
-
var _react = _interopRequireDefault(require("react"));
|
|
10
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
|
12
|
-
var _nPricing = require("@financial-times/n-pricing");
|
|
13
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
14
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
15
|
-
function PaymentTerm(_ref) {
|
|
16
|
-
var _ref$fieldId = _ref.fieldId,
|
|
17
|
-
fieldId = _ref$fieldId === void 0 ? 'paymentTermField' : _ref$fieldId,
|
|
18
|
-
_ref$inputName = _ref.inputName,
|
|
19
|
-
inputName = _ref$inputName === void 0 ? 'paymentTerm' : _ref$inputName,
|
|
20
|
-
_ref$isPrintOrBundle = _ref.isPrintOrBundle,
|
|
21
|
-
isPrintOrBundle = _ref$isPrintOrBundle === void 0 ? false : _ref$isPrintOrBundle,
|
|
22
|
-
_ref$isEpaper = _ref.isEpaper,
|
|
23
|
-
isEpaper = _ref$isEpaper === void 0 ? false : _ref$isEpaper,
|
|
24
|
-
_ref$options = _ref.options,
|
|
25
|
-
options = _ref$options === void 0 ? [] : _ref$options,
|
|
26
|
-
_ref$isFixedTermOffer = _ref.isFixedTermOffer,
|
|
27
|
-
isFixedTermOffer = _ref$isFixedTermOffer === void 0 ? false : _ref$isFixedTermOffer,
|
|
28
|
-
offerDisplayName = _ref.offerDisplayName,
|
|
29
|
-
_ref$showLegal = _ref.showLegal,
|
|
30
|
-
showLegal = _ref$showLegal === void 0 ? true : _ref$showLegal,
|
|
31
|
-
_ref$largePrice = _ref.largePrice,
|
|
32
|
-
largePrice = _ref$largePrice === void 0 ? false : _ref$largePrice,
|
|
33
|
-
_ref$optionsInARow = _ref.optionsInARow,
|
|
34
|
-
optionsInARow = _ref$optionsInARow === void 0 ? false : _ref$optionsInARow,
|
|
35
|
-
_ref$billingCountry = _ref.billingCountry,
|
|
36
|
-
billingCountry = _ref$billingCountry === void 0 ? '' : _ref$billingCountry,
|
|
37
|
-
_ref$is7DayPassExperi = _ref.is7DayPassExperiment,
|
|
38
|
-
is7DayPassExperiment = _ref$is7DayPassExperi === void 0 ? false : _ref$is7DayPassExperi;
|
|
39
|
-
/**
|
|
40
|
-
* Compute monthly price for given term name
|
|
41
|
-
* @param {number} amount price in number format
|
|
42
|
-
* @param {string} currency country id of the currency
|
|
43
|
-
* @param {string} period PxY (yearly) or PxM (montly) where x is the amount of years/months
|
|
44
|
-
* @returns {string}
|
|
45
|
-
*/
|
|
46
|
-
var getMontlyPriceFromPeriod = function getMontlyPriceFromPeriod(amount, currency, period) {
|
|
47
|
-
var periodObj = new _nPricing.Period(period);
|
|
48
|
-
var monthlyPrice = periodObj.calculatePrice('P1M', amount);
|
|
49
|
-
return new _nPricing.Monthly({
|
|
50
|
-
value: monthlyPrice,
|
|
51
|
-
currency: currency
|
|
52
|
-
}).getAmount('monthly');
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* returns period converted to time if found
|
|
57
|
-
* otherwise returns empty string to avoid show information not mapped
|
|
58
|
-
* @param {string} period PxY (yearly) or PxM (montly) where x is the amount of years/months
|
|
59
|
-
* @returns {string}
|
|
60
|
-
*/
|
|
61
|
-
var getTimeFromPeriod = function getTimeFromPeriod(period) {
|
|
62
|
-
var freq = period.substring(period.length - 1) === 'Y' ? 'years' : 'months';
|
|
63
|
-
var amount = period.substring(1, period.length - 1);
|
|
64
|
-
return period ? "".concat(amount, " ").concat(freq) : '';
|
|
65
|
-
};
|
|
66
|
-
var isValidPeriod = function isValidPeriod(period) {
|
|
67
|
-
try {
|
|
68
|
-
// Period should throw an error if it is not properly provided
|
|
69
|
-
// in order to validate it, we just send in case type is string
|
|
70
|
-
new _nPricing.Period(typeof period === 'string' ? period : '');
|
|
71
|
-
return true;
|
|
72
|
-
} catch (e) {
|
|
73
|
-
return false;
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
var nameMap = {
|
|
77
|
-
annual: {
|
|
78
|
-
title: 'Annual',
|
|
79
|
-
price: function price(_price) {
|
|
80
|
-
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, "Single", ' ', /*#__PURE__*/_react["default"].createElement("span", {
|
|
81
|
-
className: "ncf__payment-term__price ncf__strong"
|
|
82
|
-
}, _price), ' ', "payment");
|
|
83
|
-
},
|
|
84
|
-
trialPrice: function trialPrice(price) {
|
|
85
|
-
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, "Unless you cancel during your trial you will be billed", ' ', /*#__PURE__*/_react["default"].createElement("span", {
|
|
86
|
-
className: "ncf__payment-term__price"
|
|
87
|
-
}, price), " per year after the trial period.");
|
|
88
|
-
},
|
|
89
|
-
monthlyPrice: function monthlyPrice(price) {
|
|
90
|
-
return price && /*#__PURE__*/_react["default"].createElement("span", {
|
|
91
|
-
className: "ncf__payment-term__equivalent-price"
|
|
92
|
-
}, "That\u2019s equivalent to", ' ', /*#__PURE__*/_react["default"].createElement("span", {
|
|
93
|
-
className: "ncf__payment-term__monthly-price"
|
|
94
|
-
}, price), ' ', "per month");
|
|
95
|
-
},
|
|
96
|
-
renewsText: function renewsText() {
|
|
97
|
-
return /*#__PURE__*/_react["default"].createElement("p", {
|
|
98
|
-
className: "ncf__payment-term__renews-text"
|
|
99
|
-
}, "Renews annually unless cancelled");
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
quarterly: {
|
|
103
|
-
title: 'Quarterly',
|
|
104
|
-
price: function price(_price2) {
|
|
105
|
-
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
|
|
106
|
-
className: "ncf__payment-term__price"
|
|
107
|
-
}, _price2), " per quarter");
|
|
108
|
-
},
|
|
109
|
-
trialPrice: function trialPrice(price) {
|
|
110
|
-
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, "Unless you cancel during your trial you will be billed", ' ', /*#__PURE__*/_react["default"].createElement("span", {
|
|
111
|
-
className: "ncf__payment-term__price"
|
|
112
|
-
}, price), " per quarter after the trial period.");
|
|
113
|
-
},
|
|
114
|
-
monthlyPrice: function monthlyPrice() {},
|
|
115
|
-
renewsText: function renewsText() {
|
|
116
|
-
return /*#__PURE__*/_react["default"].createElement("p", {
|
|
117
|
-
className: "ncf__payment-term__renews-text"
|
|
118
|
-
}, "Renews quarterly unless cancelled");
|
|
119
|
-
}
|
|
120
|
-
},
|
|
121
|
-
monthly: {
|
|
122
|
-
title: 'Monthly',
|
|
123
|
-
price: function price(_price3, is7DayPassExperiment) {
|
|
124
|
-
var paymentIntervalTextToDisplay = function () {
|
|
125
|
-
switch (true) {
|
|
126
|
-
case is7DayPassExperiment:
|
|
127
|
-
return ' one-time payment';
|
|
128
|
-
default:
|
|
129
|
-
return ' per month';
|
|
130
|
-
}
|
|
131
|
-
}();
|
|
132
|
-
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
|
|
133
|
-
className: "ncf__payment-term__price"
|
|
134
|
-
}, _price3), paymentIntervalTextToDisplay);
|
|
135
|
-
},
|
|
136
|
-
trialPrice: function trialPrice(price) {
|
|
137
|
-
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, "Unless you cancel during your trial you will be billed", ' ', /*#__PURE__*/_react["default"].createElement("span", {
|
|
138
|
-
className: "ncf__payment-term__price"
|
|
139
|
-
}, price), " per month after the trial period.");
|
|
140
|
-
},
|
|
141
|
-
monthlyPrice: function monthlyPrice() {},
|
|
142
|
-
renewsText: function renewsText(isFixedTermOffer, is7DayPassExperiment) {
|
|
143
|
-
var textToDisplay = function () {
|
|
144
|
-
switch (true) {
|
|
145
|
-
case is7DayPassExperiment:
|
|
146
|
-
return 'This subscription is for 7 days, charged at the outset.';
|
|
147
|
-
case isFixedTermOffer:
|
|
148
|
-
return 'This subscription is for 3 months, charged monthly. You can cancel at anytime';
|
|
149
|
-
default:
|
|
150
|
-
return 'Renews monthly unless cancelled';
|
|
151
|
-
}
|
|
152
|
-
}();
|
|
153
|
-
return /*#__PURE__*/_react["default"].createElement("p", {
|
|
154
|
-
className: "ncf__payment-term__renews-text"
|
|
155
|
-
}, textToDisplay);
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
custom: {
|
|
159
|
-
price: function price(_price4) {
|
|
160
|
-
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, "Single", ' ', /*#__PURE__*/_react["default"].createElement("span", {
|
|
161
|
-
className: "ncf__payment-term__price ncf__strong"
|
|
162
|
-
}, _price4), ' ', "payment");
|
|
163
|
-
},
|
|
164
|
-
trialPrice: function trialPrice(_trialPrice, trialPeriod) {
|
|
165
|
-
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, "Unless you cancel during your trial you will be billed", ' ', /*#__PURE__*/_react["default"].createElement("span", {
|
|
166
|
-
className: "ncf__payment-term__price"
|
|
167
|
-
}, _trialPrice), " per", ' ', trialPeriod, "after the trial period.");
|
|
168
|
-
},
|
|
169
|
-
monthlyPrice: function monthlyPrice(_monthlyPrice) {
|
|
170
|
-
return Boolean(_monthlyPrice) && /*#__PURE__*/_react["default"].createElement("span", {
|
|
171
|
-
className: "ncf__payment-term__equivalent-price"
|
|
172
|
-
}, "That\u2019s equivalent to", ' ', /*#__PURE__*/_react["default"].createElement("span", {
|
|
173
|
-
className: "ncf__payment-term__monthly-price"
|
|
174
|
-
}, _monthlyPrice), ' ', "per month");
|
|
175
|
-
},
|
|
176
|
-
renewsText: function renewsText(renewalPeriod) {
|
|
177
|
-
return Boolean(renewalPeriod) && /*#__PURE__*/_react["default"].createElement("p", {
|
|
178
|
-
className: "ncf__payment-term__renews-text"
|
|
179
|
-
}, "Renews every ", renewalPeriod, " unless cancelled");
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
};
|
|
183
|
-
var createPaymentTerm = function createPaymentTerm(option) {
|
|
184
|
-
var className = (0, _classnames["default"])(['ncf__payment-term__item', 'o-forms-input--radio-round', {
|
|
185
|
-
'ncf__payment-term__item--discount': option.discount
|
|
186
|
-
}]);
|
|
187
|
-
var props = _objectSpread({
|
|
188
|
-
type: 'radio',
|
|
189
|
-
id: option.value,
|
|
190
|
-
'data-base-amount': option.isTrial ? option.trialAmount : option.amount,
|
|
191
|
-
name: inputName,
|
|
192
|
-
value: option.value,
|
|
193
|
-
className: 'o-forms-input__radio o-forms-input__radio--right ncf__payment-term__input'
|
|
194
|
-
}, option.selected && {
|
|
195
|
-
defaultChecked: true
|
|
196
|
-
});
|
|
197
|
-
var createDiscount = function createDiscount() {
|
|
198
|
-
return option.discount && /*#__PURE__*/_react["default"].createElement("span", {
|
|
199
|
-
className: "ncf__payment-term__discount"
|
|
200
|
-
}, option.bestOffer ? 'Best offer' : "Save ".concat(option.discount, " off RRP"));
|
|
201
|
-
};
|
|
202
|
-
var createB2cDiscountCopy = function createB2cDiscountCopy() {
|
|
203
|
-
return option.name === 'annual' && option.b2cPartnership && option.b2cDiscountCopy && /*#__PURE__*/_react["default"].createElement("span", {
|
|
204
|
-
className: "ncf__payment-term__discount"
|
|
205
|
-
}, option.b2cDiscountCopy);
|
|
206
|
-
};
|
|
207
|
-
var createDescription = function createDescription() {
|
|
208
|
-
return option.isTrial ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
209
|
-
className: "ncf__payment-term__description"
|
|
210
|
-
}, option.trialDuration || '4 weeks', " for", ' ', /*#__PURE__*/_react["default"].createElement("span", {
|
|
211
|
-
className: "ncf__payment-term__trial-price"
|
|
212
|
-
}, option.trialPrice), /*#__PURE__*/_react["default"].createElement("br", null), nameMap[option.name] && nameMap[option.name].trialPrice(option.price)) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, nameMap[option.name] ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
213
|
-
className: "ncf__payment-term__description"
|
|
214
|
-
}, nameMap[option.name].price(option.price, is7DayPassExperiment), nameMap[option.name].monthlyPrice(option.monthlyPrice), nameMap[option.name].renewsText(isFixedTermOffer, is7DayPassExperiment)) :
|
|
215
|
-
// this should cover the cases different than annual, quarterly and monthly
|
|
216
|
-
// for those containing period on option.value, render custom template, for the rest keep legacy render
|
|
217
|
-
isValidPeriod(option.value) ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
218
|
-
className: "ncf__payment-term__description"
|
|
219
|
-
}, nameMap['custom'].price(option.price), nameMap['custom'].monthlyPrice(option.monthlyPrice && option.monthlyPrice !== '0' ? Number(option.monthlyPrice) : getMontlyPriceFromPeriod(option.amount, option.currency, option.value)), nameMap['custom'].renewsText(getTimeFromPeriod(option.value))) : /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("span", {
|
|
220
|
-
className: largePrice ? 'ncf__payment-term__large-price' : ''
|
|
221
|
-
}, option.price), option.chargeOnText && /*#__PURE__*/_react["default"].createElement("p", {
|
|
222
|
-
className: "ncf__payment-term__charge-on-text"
|
|
223
|
-
}, option.chargeOnText)));
|
|
224
|
-
};
|
|
225
|
-
var getTermDisplayName = function getTermDisplayName() {
|
|
226
|
-
var showTrialCopyInTitle = option.isTrial && !isPrintOrBundle && !isEpaper;
|
|
227
|
-
var defaultTitle = function () {
|
|
228
|
-
switch (true) {
|
|
229
|
-
case is7DayPassExperiment:
|
|
230
|
-
return '';
|
|
231
|
-
case Boolean(option.name && nameMap[option.name]):
|
|
232
|
-
return nameMap[option.name].title;
|
|
233
|
-
default:
|
|
234
|
-
return '';
|
|
235
|
-
}
|
|
236
|
-
}();
|
|
237
|
-
var title = isFixedTermOffer ? [offerDisplayName, defaultTitle].filter(Boolean).join(' - ') : defaultTitle;
|
|
238
|
-
var termDisplayName = '';
|
|
239
|
-
if (showTrialCopyInTitle) {
|
|
240
|
-
var termName = option.displayName ? option.displayName : 'Premium Digital';
|
|
241
|
-
termDisplayName = "Trial: ".concat(termName, " - ");
|
|
242
|
-
}
|
|
243
|
-
var getTermPeriod = function getTermPeriod() {
|
|
244
|
-
// annual, quarterly and monthly
|
|
245
|
-
if (nameMap[option.name]) {
|
|
246
|
-
return title;
|
|
247
|
-
}
|
|
248
|
-
// custom offer with period provided
|
|
249
|
-
if (isValidPeriod(option.value)) {
|
|
250
|
-
return getTimeFromPeriod(option.value);
|
|
251
|
-
}
|
|
252
|
-
// custom legacy cases, where period is not provided
|
|
253
|
-
return option.title;
|
|
254
|
-
};
|
|
255
|
-
var termPeriod = getTermPeriod();
|
|
256
|
-
termDisplayName = "".concat(termDisplayName).concat(termPeriod, " ");
|
|
257
|
-
return termDisplayName;
|
|
258
|
-
};
|
|
259
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
260
|
-
key: option.value,
|
|
261
|
-
className: className
|
|
262
|
-
}, /*#__PURE__*/_react["default"].createElement("input", props), /*#__PURE__*/_react["default"].createElement("label", {
|
|
263
|
-
htmlFor: option.value,
|
|
264
|
-
className: "o-forms-input__label ncf__payment-term__label"
|
|
265
|
-
}, createDiscount(), createB2cDiscountCopy(), /*#__PURE__*/_react["default"].createElement("span", {
|
|
266
|
-
className: (0, _classnames["default"])(['ncf__payment-term__title', {
|
|
267
|
-
'ncf__payment-term__title--large-price': largePrice
|
|
268
|
-
}])
|
|
269
|
-
}, getTermDisplayName(), option.subTitle && /*#__PURE__*/_react["default"].createElement("span", {
|
|
270
|
-
className: "ncf__regular ncf__payment-term__sub-title"
|
|
271
|
-
}, option.subTitle)), createDescription()));
|
|
272
|
-
};
|
|
273
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
274
|
-
id: fieldId,
|
|
275
|
-
className: "o-forms__group ncf__payment-term",
|
|
276
|
-
"data-country-code": billingCountry
|
|
277
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
278
|
-
className: optionsInARow ? 'ncf__payment-term__options-grid' : ''
|
|
279
|
-
}, options.map(function (option) {
|
|
280
|
-
return createPaymentTerm(option);
|
|
281
|
-
})), showLegal && /*#__PURE__*/_react["default"].createElement("div", {
|
|
282
|
-
className: "ncf__payment-term__legal"
|
|
283
|
-
}, isFixedTermOffer ? /*#__PURE__*/_react["default"].createElement("p", null, "Find out more about our cancellation policy in our", ' ', /*#__PURE__*/_react["default"].createElement("a", {
|
|
284
|
-
className: "ncf__link--external",
|
|
285
|
-
href: "https://help.ft.com/legal-privacy/terms-and-conditions/",
|
|
286
|
-
title: "FT Legal Terms and Conditions help page",
|
|
287
|
-
target: "_blank",
|
|
288
|
-
rel: "noopener noreferrer"
|
|
289
|
-
}, "Terms & Conditions"), ".") : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("p", null, "With all subscription types, we will automatically renew your subscription using the payment method provided unless you cancel before your renewal date."), /*#__PURE__*/_react["default"].createElement("p", null, "We will notify you at least 14 days in advance of any changes to the price in your subscription that would apply upon next renewal. Find out more about our cancellation policy in our", ' ', /*#__PURE__*/_react["default"].createElement("a", {
|
|
290
|
-
className: "ncf__link--external",
|
|
291
|
-
href: "https://help.ft.com/legal-privacy/terms-and-conditions/",
|
|
292
|
-
title: "FT Legal Terms and Conditions help page",
|
|
293
|
-
target: "_blank",
|
|
294
|
-
rel: "noopener noreferrer"
|
|
295
|
-
}, "Terms & Conditions"), "."))));
|
|
296
|
-
}
|
|
297
|
-
PaymentTerm.propTypes = {
|
|
298
|
-
fieldId: _propTypes["default"].string,
|
|
299
|
-
inputName: _propTypes["default"].string,
|
|
300
|
-
isPrintOrBundle: _propTypes["default"].bool,
|
|
301
|
-
isEpaper: _propTypes["default"].bool,
|
|
302
|
-
options: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
303
|
-
b2cDiscountCopy: _propTypes["default"].string,
|
|
304
|
-
isB2cPartnership: _propTypes["default"].bool,
|
|
305
|
-
discount: _propTypes["default"].string,
|
|
306
|
-
isTrial: _propTypes["default"].bool,
|
|
307
|
-
name: _propTypes["default"].string.isRequired,
|
|
308
|
-
price: _propTypes["default"].string.isRequired,
|
|
309
|
-
selected: _propTypes["default"].bool,
|
|
310
|
-
trialDuration: _propTypes["default"].string,
|
|
311
|
-
trialPrice: _propTypes["default"].string,
|
|
312
|
-
amount: _propTypes["default"].string,
|
|
313
|
-
trialAmount: _propTypes["default"].number,
|
|
314
|
-
value: _propTypes["default"].string.isRequired,
|
|
315
|
-
monthlyPrice: _propTypes["default"].string,
|
|
316
|
-
title: _propTypes["default"].string,
|
|
317
|
-
subTitle: _propTypes["default"].string,
|
|
318
|
-
bestOffer: _propTypes["default"].bool,
|
|
319
|
-
chargeOnText: _propTypes["default"].string,
|
|
320
|
-
fulfilmentOption: _propTypes["default"].string
|
|
321
|
-
})),
|
|
322
|
-
isFixedTermOffer: _propTypes["default"].bool,
|
|
323
|
-
offerDisplayName: _propTypes["default"].string,
|
|
324
|
-
showLegal: _propTypes["default"].bool,
|
|
325
|
-
largePrice: _propTypes["default"].bool,
|
|
326
|
-
optionsInARow: _propTypes["default"].bool,
|
|
327
|
-
billingCountry: _propTypes["default"].string
|
|
328
|
-
};
|