@financial-times/n-conversion-forms 26.0.0 → 27.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 +4 -4
- package/.eslintignore +1 -0
- package/.github/workflows/gh-pages-deploy.yml +1 -0
- package/.storybook/main.js +0 -1
- package/__mocks__/@financial-times/o-expander.js +9 -0
- package/__mocks__/@financial-times/o-forms-input.js +11 -0
- package/__mocks__/@financial-times/o-forms.js +40 -0
- package/build-state/npm-shrinkwrap.json +294 -6334
- package/components/__snapshots__/b2c-partnership-confirmation.spec.js.snap +1 -1
- package/components/__snapshots__/confirmation.spec.js.snap +0 -3
- package/components/__snapshots__/debug.spec.js.snap +25 -13
- package/components/__snapshots__/delivery-postcode.spec.js.snap +1 -1
- package/components/__snapshots__/payment-term.spec.js.snap +1 -1
- package/components/__snapshots__/payment-type.spec.js.snap +19 -0
- package/components/__snapshots__/registration-confirmation.spec.js.snap +230 -74
- package/components/accept-terms.jsx +57 -36
- package/components/accept-terms.stories.js +28 -1
- package/components/b2c-partnership-confirmation.jsx +1 -1
- package/components/confirmation.jsx +15 -8
- package/components/confirmation.spec.js +1 -1
- package/components/debug.jsx +19 -12
- package/components/debug.stories.js +13 -0
- package/components/delivery-address.jsx +21 -58
- package/components/delivery-address.stories.js +7 -0
- package/components/delivery-city.jsx +4 -2
- package/components/delivery-city.stories.js +9 -0
- package/components/delivery-option.jsx +5 -3
- package/components/delivery-option.stories.js +7 -1
- package/components/delivery-postcode.jsx +32 -13
- package/components/delivery-postcode.stories.js +2 -1
- package/components/delivery-security-instructions.spec.js +3 -3
- package/components/graduation-date.spec.js +8 -8
- package/components/index.jsx +1 -1
- package/components/message.jsx +1 -1
- package/components/payment-term.jsx +152 -25
- package/components/payment-term.spec.js +46 -4
- package/components/payment-term.stories.js +69 -14
- package/components/payment-type.jsx +3 -1
- package/components/position.jsx +6 -3
- package/components/position.spec.js +15 -5
- package/components/registration-confirmation.jsx +111 -32
- package/components/responsibility.jsx +6 -3
- package/components/responsibility.spec.js +15 -5
- package/components/text-input.jsx +73 -0
- package/components/text-input.spec.js +118 -0
- package/components/text-input.stories.js +31 -0
- package/dist/accept-terms.js +15 -7
- package/dist/b2c-partnership-confirmation.js +1 -1
- package/dist/confirmation.js +11 -2
- package/dist/debug.js +6 -6
- package/dist/delivery-address.js +19 -32
- package/dist/delivery-city.js +4 -2
- package/dist/delivery-option.js +5 -2
- package/dist/delivery-postcode.js +31 -12
- package/dist/index.js +9 -9
- package/dist/message.js +1 -1
- package/dist/payment-term.js +117 -11
- package/dist/payment-type.js +5 -2
- package/dist/position.js +6 -2
- package/dist/registration-confirmation.js +87 -29
- package/dist/responsibility.js +6 -2
- package/dist/text-input.js +84 -0
- package/helpers/constants.js +7 -0
- package/helpers/deliveryAddressMap.js +167 -0
- package/helpers/index.js +7 -0
- package/helpers/index.spec.js +11 -0
- package/helpers/ncf-common-data.spec.js +34 -0
- package/helpers/ncf-countries.spec.js +136 -0
- package/helpers/supportedCountries.js +76 -0
- package/helpers/supportedPostcodeExamples.js +57 -0
- package/helpers/supportedPostcodeValidators.js +53 -0
- package/helpers/utilities.js +14 -0
- package/jest.config.js +8 -1
- package/main.scss +461 -0
- package/package.json +6 -3
- package/styles/confirmation.scss +122 -0
- package/styles/payment-term.scss +3 -0
- package/utils/app-banner.spec.js +68 -0
- package/utils/apple-pay.spec.js +177 -0
- package/utils/billing-country.spec.js +87 -0
- package/utils/billing-postcode.spec.js +138 -0
- package/utils/company-name.spec.js +3 -7
- package/utils/country.spec.js +87 -0
- package/utils/delivery-address-type.spec.js +24 -11
- package/utils/delivery-option-messages.js +15 -0
- package/utils/delivery-option-messages.spec.js +3 -3
- package/utils/delivery-option.spec.js +100 -15
- package/utils/delivery-postcode.spec.js +138 -0
- package/utils/delivery-start-date.spec.js +177 -0
- package/utils/email.spec.js +210 -0
- package/utils/event-notifier.spec.js +116 -0
- package/utils/form-element.spec.js +71 -0
- package/utils/loader.spec.js +161 -0
- package/utils/password.spec.js +65 -0
- package/utils/payment-term.js +25 -1
- package/utils/payment-term.spec.js +198 -0
- package/utils/payment-type.js +1 -1
- package/utils/payment-type.spec.js +136 -0
- package/utils/postcode.spec.js +122 -0
- package/utils/salesforce.spec.js +30 -0
- package/utils/submit.spec.js +81 -0
- package/utils/tracking.spec.js +174 -0
- package/utils/validation.js +2 -2
- package/utils/validation.spec.js +234 -0
- package/utils/zuora.spec.js +249 -0
- package/components/__snapshots__/b2c-partnership-payment-term.spec.js.snap +0 -193
- package/components/b2c-partnership-payment-term.jsx +0 -126
- package/components/b2c-partnership-payment-term.spec.js +0 -52
- package/components/b2c-partnership-payment-term.stories.js +0 -44
- package/dist/b2c-partnership-payment-term.js +0 -91
- package/styles/b2c-partnership-payment-term.scss +0 -20
package/dist/delivery-address.js
CHANGED
|
@@ -13,6 +13,10 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
13
13
|
|
|
14
14
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
15
15
|
|
|
16
|
+
var _deliveryAddressMap = _interopRequireDefault(require("../helpers/deliveryAddressMap"));
|
|
17
|
+
|
|
18
|
+
var _supportedCountries = require("../helpers/supportedCountries");
|
|
19
|
+
|
|
16
20
|
function DeliveryAddress(_ref) {
|
|
17
21
|
var _ref$fieldId = _ref.fieldId,
|
|
18
22
|
fieldId = _ref$fieldId === void 0 ? 'deliveryAddressFields' : _ref$fieldId,
|
|
@@ -29,31 +33,16 @@ function DeliveryAddress(_ref) {
|
|
|
29
33
|
_ref$isHidden = _ref.isHidden,
|
|
30
34
|
isHidden = _ref$isHidden === void 0 ? false : _ref$isHidden,
|
|
31
35
|
_ref$country = _ref.country,
|
|
32
|
-
country = _ref$country === void 0 ? 'GBR' : _ref$country
|
|
36
|
+
country = _ref$country === void 0 ? 'GBR' : _ref$country,
|
|
37
|
+
_ref$addressType = _ref.addressType,
|
|
38
|
+
addressType = _ref$addressType === void 0 ? 'home' : _ref$addressType;
|
|
33
39
|
var divClassNames = (0, _classnames["default"])([{
|
|
34
40
|
ncf__hidden: isHidden
|
|
35
41
|
}]);
|
|
36
42
|
var inputWrapperClassNames = (0, _classnames["default"])(['o-forms-input', 'o-forms-input--text', {
|
|
37
43
|
'o-forms-input--invalid': hasError
|
|
38
44
|
}]);
|
|
39
|
-
var
|
|
40
|
-
GBR: 'Address line 3',
|
|
41
|
-
USA: 'APT/FL/STE',
|
|
42
|
-
CAN: 'APT/FL/STE'
|
|
43
|
-
};
|
|
44
|
-
var addressLine3Prompt = {
|
|
45
|
-
USA: 'Max. 6 characters. Please enter “Apartment 2C” as “Apt 2C”, “Floor 10 as FL 10”',
|
|
46
|
-
CAN: 'Max. 6 characters. Please enter “Apartment 2C” as “Apt 2C”, “Floor 10 as FL 10”'
|
|
47
|
-
};
|
|
48
|
-
var addressLine3Placeholder = {
|
|
49
|
-
USA: 'e.g Apt 2C / FL 10 / STE 50',
|
|
50
|
-
CAN: 'e.g Apt 2C / FL 10 / STE 50'
|
|
51
|
-
};
|
|
52
|
-
var addressLine1Placeholder = {
|
|
53
|
-
GBR: 'e.g. 10 Elm Street',
|
|
54
|
-
USA: 'e.g. 10 Elm St.',
|
|
55
|
-
CAN: 'e.g. 36 Poirier Blvd.'
|
|
56
|
-
};
|
|
45
|
+
var FTShippingZone = (0, _supportedCountries.identifyFTShippingZone)(country);
|
|
57
46
|
|
|
58
47
|
var addressLine1 = /*#__PURE__*/_react["default"].createElement("label", {
|
|
59
48
|
className: "o-forms-field ncf__validation-error",
|
|
@@ -62,7 +51,7 @@ function DeliveryAddress(_ref) {
|
|
|
62
51
|
className: "o-forms-title"
|
|
63
52
|
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
64
53
|
className: "o-forms-title__main"
|
|
65
|
-
}, "Address line 1
|
|
54
|
+
}, _deliveryAddressMap["default"][addressType].addressLine1Title[FTShippingZone] || 'Address line 1')), /*#__PURE__*/_react["default"].createElement("span", {
|
|
66
55
|
className: inputWrapperClassNames
|
|
67
56
|
}, /*#__PURE__*/_react["default"].createElement("input", {
|
|
68
57
|
type: "text",
|
|
@@ -70,7 +59,7 @@ function DeliveryAddress(_ref) {
|
|
|
70
59
|
name: "deliveryAddressLine1",
|
|
71
60
|
"data-trackable": "field-deliveryAddressLine1",
|
|
72
61
|
autoComplete: "address-line1",
|
|
73
|
-
placeholder: addressLine1Placeholder[
|
|
62
|
+
placeholder: _deliveryAddressMap["default"][addressType].addressLine1Placeholder[FTShippingZone],
|
|
74
63
|
maxLength: 50,
|
|
75
64
|
"aria-required": "true",
|
|
76
65
|
required: true,
|
|
@@ -95,7 +84,7 @@ function DeliveryAddress(_ref) {
|
|
|
95
84
|
name: "deliveryAddressLine2",
|
|
96
85
|
"data-trackable": "field-deliveryAddressLine2",
|
|
97
86
|
autoComplete: "address-line2",
|
|
98
|
-
placeholder: "",
|
|
87
|
+
placeholder: _deliveryAddressMap["default"][addressType].addressLine2Placeholder[FTShippingZone] || '',
|
|
99
88
|
maxLength: 50,
|
|
100
89
|
disabled: isDisabled,
|
|
101
90
|
defaultValue: line2
|
|
@@ -108,9 +97,9 @@ function DeliveryAddress(_ref) {
|
|
|
108
97
|
className: "o-forms-title"
|
|
109
98
|
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
110
99
|
className: "o-forms-title__main"
|
|
111
|
-
}, addressLine3Title[
|
|
100
|
+
}, _deliveryAddressMap["default"][addressType].addressLine3Title[FTShippingZone]), /*#__PURE__*/_react["default"].createElement("span", {
|
|
112
101
|
className: "o-forms-title__prompt"
|
|
113
|
-
}, addressLine3Prompt[
|
|
102
|
+
}, _deliveryAddressMap["default"][addressType].addressLine3Prompt[FTShippingZone])), /*#__PURE__*/_react["default"].createElement("span", {
|
|
114
103
|
className: inputWrapperClassNames
|
|
115
104
|
}, /*#__PURE__*/_react["default"].createElement("input", {
|
|
116
105
|
type: "text",
|
|
@@ -118,22 +107,19 @@ function DeliveryAddress(_ref) {
|
|
|
118
107
|
name: "deliveryAddressLine3",
|
|
119
108
|
"data-trackable": "field-deliveryAddressLine3",
|
|
120
109
|
autoComplete: "address-line3",
|
|
121
|
-
placeholder: addressLine3Placeholder[
|
|
110
|
+
placeholder: _deliveryAddressMap["default"][addressType].addressLine3Placeholder[FTShippingZone] || 'e.g. Apt. 1',
|
|
122
111
|
maxLength: 50,
|
|
123
112
|
disabled: isDisabled,
|
|
124
113
|
defaultValue: line3
|
|
125
114
|
})));
|
|
126
115
|
|
|
127
|
-
var addressLines =
|
|
128
|
-
|
|
129
|
-
USA: /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, ' ', addressLine1, addressLine3, addressLine2, ' '),
|
|
130
|
-
CAN: /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, ' ', addressLine1, addressLine3, addressLine2, ' ')
|
|
131
|
-
};
|
|
116
|
+
var addressLines = _deliveryAddressMap["default"][addressType].template(addressLine1, addressLine2, addressLine3, FTShippingZone);
|
|
117
|
+
|
|
132
118
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
133
119
|
id: fieldId,
|
|
134
120
|
"data-validate": "required",
|
|
135
121
|
className: divClassNames
|
|
136
|
-
}, addressLines
|
|
122
|
+
}, addressLines);
|
|
137
123
|
}
|
|
138
124
|
|
|
139
125
|
DeliveryAddress.propTypes = {
|
|
@@ -144,5 +130,6 @@ DeliveryAddress.propTypes = {
|
|
|
144
130
|
line3: _propTypes["default"].string,
|
|
145
131
|
isDisabled: _propTypes["default"].bool,
|
|
146
132
|
isHidden: _propTypes["default"].bool,
|
|
147
|
-
country: _propTypes["default"].oneOf(
|
|
133
|
+
country: _propTypes["default"].oneOf(_supportedCountries.countriesSupportedISO),
|
|
134
|
+
addressType: _propTypes["default"].oneOf(['home', 'company', 'pobox'])
|
|
148
135
|
};
|
package/dist/delivery-city.js
CHANGED
|
@@ -13,6 +13,8 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
13
13
|
|
|
14
14
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
15
15
|
|
|
16
|
+
var _supportedCountries = require("../helpers/supportedCountries");
|
|
17
|
+
|
|
16
18
|
function DeliveryCity(_ref) {
|
|
17
19
|
var _ref$hasError = _ref.hasError,
|
|
18
20
|
hasError = _ref$hasError === void 0 ? false : _ref$hasError,
|
|
@@ -47,7 +49,7 @@ function DeliveryCity(_ref) {
|
|
|
47
49
|
name: "deliveryCity",
|
|
48
50
|
"data-trackable": "field-deliveryCity",
|
|
49
51
|
autoComplete: "address-level2",
|
|
50
|
-
placeholder: inputPlaceholder[country],
|
|
52
|
+
placeholder: inputPlaceholder[country] || '',
|
|
51
53
|
maxLength: 40,
|
|
52
54
|
"aria-required": "true",
|
|
53
55
|
required: true,
|
|
@@ -63,5 +65,5 @@ DeliveryCity.propTypes = {
|
|
|
63
65
|
value: _propTypes["default"].string,
|
|
64
66
|
isDisabled: _propTypes["default"].bool,
|
|
65
67
|
maxlength: _propTypes["default"].number,
|
|
66
|
-
country: _propTypes["default"].oneOf(
|
|
68
|
+
country: _propTypes["default"].oneOf(_supportedCountries.countriesSupportedISO)
|
|
67
69
|
};
|
package/dist/delivery-option.js
CHANGED
|
@@ -15,6 +15,8 @@ var _classnames = _interopRequireDefault(require("classnames"));
|
|
|
15
15
|
|
|
16
16
|
var _deliveryOptionMessages = require("../utils/delivery-option-messages");
|
|
17
17
|
|
|
18
|
+
var _supportedCountries = require("../helpers/supportedCountries");
|
|
19
|
+
|
|
18
20
|
function DeliveryOption(_ref) {
|
|
19
21
|
var _ref$fieldId = _ref.fieldId,
|
|
20
22
|
fieldId = _ref$fieldId === void 0 ? 'deliveryOptionField' : _ref$fieldId,
|
|
@@ -28,6 +30,7 @@ function DeliveryOption(_ref) {
|
|
|
28
30
|
var divClassName = (0, _classnames["default"])(['o-forms-field', 'ncf__delivery-option', {
|
|
29
31
|
'ncf__delivery-option--single': isSingle
|
|
30
32
|
}]);
|
|
33
|
+
var FTShippingZone = (0, _supportedCountries.identifyFTShippingZone)(country);
|
|
31
34
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
32
35
|
id: fieldId,
|
|
33
36
|
className: divClassName,
|
|
@@ -39,7 +42,7 @@ function DeliveryOption(_ref) {
|
|
|
39
42
|
var value = option.value,
|
|
40
43
|
isValidDeliveryOption = option.isValidDeliveryOption,
|
|
41
44
|
isSelected = option.isSelected;
|
|
42
|
-
var deliveryOptionValue = (0, _deliveryOptionMessages.getDeliveryOption)(productCode, option,
|
|
45
|
+
var deliveryOptionValue = (0, _deliveryOptionMessages.getDeliveryOption)(productCode, option, FTShippingZone);
|
|
43
46
|
|
|
44
47
|
if (!isValidDeliveryOption || !deliveryOptionValue) {
|
|
45
48
|
return null;
|
|
@@ -70,7 +73,7 @@ function DeliveryOption(_ref) {
|
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
DeliveryOption.propTypes = {
|
|
73
|
-
country: _propTypes["default"].oneOf(
|
|
76
|
+
country: _propTypes["default"].oneOf(_supportedCountries.countriesSupportedISO).isRequired,
|
|
74
77
|
productCode: _propTypes["default"].string,
|
|
75
78
|
options: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
76
79
|
value: _propTypes["default"].oneOf(['PV', 'HD', 'EV']),
|
|
@@ -13,18 +13,37 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
13
13
|
|
|
14
14
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
15
15
|
|
|
16
|
-
var
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
var
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
16
|
+
var _supportedCountries = require("../helpers/supportedCountries");
|
|
17
|
+
|
|
18
|
+
var _supportedPostcodeExamples = require("../helpers/supportedPostcodeExamples");
|
|
19
|
+
|
|
20
|
+
var postcodeLabel = Object.keys(_supportedCountries.countriesSupported).reduce(function (previous, countryCode) {
|
|
21
|
+
if (countryCode === 'USA') {
|
|
22
|
+
previous[countryCode] = 'Zip Code';
|
|
23
|
+
} else if (countryCode === 'GBR') {
|
|
24
|
+
previous[countryCode] = 'Postcode';
|
|
25
|
+
} else {
|
|
26
|
+
previous[countryCode] = 'Postal Code';
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return previous;
|
|
30
|
+
}, {});
|
|
31
|
+
var promptLabel = Object.keys(_supportedCountries.countriesSupported).reduce(function (previous, countryCode) {
|
|
32
|
+
if (countryCode === 'USA') {
|
|
33
|
+
previous[countryCode] = 'Please enter your 5 digit Zip Code';
|
|
34
|
+
} else if (countryCode === 'CAN') {
|
|
35
|
+
previous[countryCode] = 'Please enter your 6 digit postal code';
|
|
36
|
+
} else if (countryCode !== 'GBR') {
|
|
37
|
+
//GBR has no label
|
|
38
|
+
previous[countryCode] = 'Please enter your postal code';
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return previous;
|
|
42
|
+
}, {});
|
|
43
|
+
var placeholderLabel = Object.keys(_supportedPostcodeExamples.allSupportedPostcodeExamples).reduce(function (previous, countryCode) {
|
|
44
|
+
previous[countryCode] = 'e.g. ' + _supportedPostcodeExamples.allSupportedPostcodeExamples[countryCode];
|
|
45
|
+
return previous;
|
|
46
|
+
}, {});
|
|
28
47
|
|
|
29
48
|
function DeliveryPostcode(_ref) {
|
|
30
49
|
var _ref$value = _ref.value,
|
package/dist/index.js
CHANGED
|
@@ -21,12 +21,6 @@ Object.defineProperty(exports, "B2CPartnershipConfirmation", {
|
|
|
21
21
|
return _b2cPartnershipConfirmation.B2CPartnershipConfirmation;
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
|
-
Object.defineProperty(exports, "B2cPartnershipPaymentTerm", {
|
|
25
|
-
enumerable: true,
|
|
26
|
-
get: function get() {
|
|
27
|
-
return _b2cPartnershipPaymentTerm.B2cPartnershipPaymentTerm;
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
24
|
Object.defineProperty(exports, "BillingCity", {
|
|
31
25
|
enumerable: true,
|
|
32
26
|
get: function get() {
|
|
@@ -333,6 +327,12 @@ Object.defineProperty(exports, "Submit", {
|
|
|
333
327
|
return _submit.Submit;
|
|
334
328
|
}
|
|
335
329
|
});
|
|
330
|
+
Object.defineProperty(exports, "TextInput", {
|
|
331
|
+
enumerable: true,
|
|
332
|
+
get: function get() {
|
|
333
|
+
return _textInput.TextInput;
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
336
|
Object.defineProperty(exports, "TrialBanner", {
|
|
337
337
|
enumerable: true,
|
|
338
338
|
get: function get() {
|
|
@@ -344,8 +344,6 @@ var _acceptTerms = require("./accept-terms");
|
|
|
344
344
|
|
|
345
345
|
var _appBanner = require("./app-banner");
|
|
346
346
|
|
|
347
|
-
var _b2cPartnershipPaymentTerm = require("./b2c-partnership-payment-term");
|
|
348
|
-
|
|
349
347
|
var _billingCity = require("./billing-city");
|
|
350
348
|
|
|
351
349
|
var _billingCountry = require("./billing-country");
|
|
@@ -450,4 +448,6 @@ var _graduationDate = require("./graduation-date");
|
|
|
450
448
|
|
|
451
449
|
var _liteSubConfirmation = require("./lite-sub-confirmation");
|
|
452
450
|
|
|
453
|
-
var _googleSignIn = require("./google-sign-in");
|
|
451
|
+
var _googleSignIn = require("./google-sign-in");
|
|
452
|
+
|
|
453
|
+
var _textInput = require("./text-input");
|
package/dist/message.js
CHANGED
|
@@ -89,7 +89,7 @@ var actionType = _propTypes["default"].shape({
|
|
|
89
89
|
link: _propTypes["default"].string.isRequired,
|
|
90
90
|
isSecondary: _propTypes["default"].bool,
|
|
91
91
|
text: _propTypes["default"].string,
|
|
92
|
-
target: '_self'
|
|
92
|
+
target: _propTypes["default"].oneOf(['_self'])
|
|
93
93
|
});
|
|
94
94
|
|
|
95
95
|
Message.propTypes = {
|
package/dist/payment-term.js
CHANGED
|
@@ -15,6 +15,8 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
15
15
|
|
|
16
16
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
17
17
|
|
|
18
|
+
var _nPricing = require("@financial-times/n-pricing");
|
|
19
|
+
|
|
18
20
|
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; }
|
|
19
21
|
|
|
20
22
|
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) { (0, _defineProperty2["default"])(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; }
|
|
@@ -32,13 +34,54 @@ function PaymentTerm(_ref) {
|
|
|
32
34
|
options = _ref$options === void 0 ? [] : _ref$options,
|
|
33
35
|
_ref$isFixedTermOffer = _ref.isFixedTermOffer,
|
|
34
36
|
isFixedTermOffer = _ref$isFixedTermOffer === void 0 ? false : _ref$isFixedTermOffer,
|
|
35
|
-
|
|
37
|
+
offerDisplayName = _ref.offerDisplayName,
|
|
36
38
|
_ref$showLegal = _ref.showLegal,
|
|
37
39
|
showLegal = _ref$showLegal === void 0 ? true : _ref$showLegal,
|
|
38
40
|
_ref$largePrice = _ref.largePrice,
|
|
39
41
|
largePrice = _ref$largePrice === void 0 ? false : _ref$largePrice,
|
|
40
42
|
_ref$optionsInARow = _ref.optionsInARow,
|
|
41
43
|
optionsInARow = _ref$optionsInARow === void 0 ? false : _ref$optionsInARow;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Compute monthly price for given term name
|
|
47
|
+
* @param {number} amount price in number format
|
|
48
|
+
* @param {string} currency country id of the currency
|
|
49
|
+
* @param {string} period PxY (yearly) or PxM (montly) where x is the amount of years/months
|
|
50
|
+
* @returns {string}
|
|
51
|
+
*/
|
|
52
|
+
var getMontlyPriceFromPeriod = function getMontlyPriceFromPeriod(amount, currency, period) {
|
|
53
|
+
var periodObj = new _nPricing.Period(period);
|
|
54
|
+
var monthlyPrice = periodObj.calculatePrice('P1M', amount);
|
|
55
|
+
return new _nPricing.Monthly({
|
|
56
|
+
value: monthlyPrice,
|
|
57
|
+
currency: currency
|
|
58
|
+
}).getAmount('monthly');
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* returns period converted to time if found
|
|
62
|
+
* otherwise returns empty string to avoid show information not mapped
|
|
63
|
+
* @param {string} period PxY (yearly) or PxM (montly) where x is the amount of years/months
|
|
64
|
+
* @returns {string}
|
|
65
|
+
*/
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
var getTimeFromPeriod = function getTimeFromPeriod(period) {
|
|
69
|
+
var freq = period.substring(period.length - 1) === 'Y' ? 'years' : 'months';
|
|
70
|
+
var amount = period.substring(1, period.length - 1);
|
|
71
|
+
return period ? "".concat(amount, " ").concat(freq) : '';
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
var isValidPeriod = function isValidPeriod(period) {
|
|
75
|
+
try {
|
|
76
|
+
// Period should throw an error if it is not properly provided
|
|
77
|
+
// in order to validate it, we just send in case type is string
|
|
78
|
+
new _nPricing.Period(typeof period === 'string' ? period : '');
|
|
79
|
+
return true;
|
|
80
|
+
} catch (e) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
42
85
|
var nameMap = {
|
|
43
86
|
annual: {
|
|
44
87
|
title: 'Annual',
|
|
@@ -103,6 +146,30 @@ function PaymentTerm(_ref) {
|
|
|
103
146
|
className: "ncf__payment-term__renews-text"
|
|
104
147
|
}, textToDisplay);
|
|
105
148
|
}
|
|
149
|
+
},
|
|
150
|
+
custom: {
|
|
151
|
+
price: function price(_price4) {
|
|
152
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, "Single", ' ', /*#__PURE__*/_react["default"].createElement("span", {
|
|
153
|
+
className: "ncf__payment-term__price ncf__strong"
|
|
154
|
+
}, _price4), ' ', "payment");
|
|
155
|
+
},
|
|
156
|
+
trialPrice: function trialPrice(_trialPrice, trialPeriod) {
|
|
157
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, "Unless you cancel during your trial you will be billed", ' ', /*#__PURE__*/_react["default"].createElement("span", {
|
|
158
|
+
className: "ncf__payment-term__price"
|
|
159
|
+
}, _trialPrice), " per ", trialPeriod, "after the trial period.");
|
|
160
|
+
},
|
|
161
|
+
monthlyPrice: function monthlyPrice(_monthlyPrice) {
|
|
162
|
+
return Boolean(_monthlyPrice) && /*#__PURE__*/_react["default"].createElement("span", {
|
|
163
|
+
className: "ncf__payment-term__equivalent-price"
|
|
164
|
+
}, "That\u2019s equivalent to", ' ', /*#__PURE__*/_react["default"].createElement("span", {
|
|
165
|
+
className: "ncf__payment-term__monthly-price"
|
|
166
|
+
}, _monthlyPrice), ' ', "per month");
|
|
167
|
+
},
|
|
168
|
+
renewsText: function renewsText(renewalPeriod) {
|
|
169
|
+
return Boolean(renewalPeriod) && /*#__PURE__*/_react["default"].createElement("p", {
|
|
170
|
+
className: "ncf__payment-term__renews-text"
|
|
171
|
+
}, "Renews every ", renewalPeriod, " unless cancelled");
|
|
172
|
+
}
|
|
106
173
|
}
|
|
107
174
|
};
|
|
108
175
|
|
|
@@ -122,14 +189,16 @@ function PaymentTerm(_ref) {
|
|
|
122
189
|
defaultChecked: true
|
|
123
190
|
});
|
|
124
191
|
|
|
125
|
-
var showTrialCopyInTitle = option.isTrial && !isPrintOrBundle && !isEpaper;
|
|
126
|
-
var defaultTitle = option.name ? nameMap[option.name].title : '';
|
|
127
|
-
var title = isFixedTermOffer ? "".concat(displayName, " - ").concat(defaultTitle) : defaultTitle;
|
|
128
|
-
|
|
129
192
|
var createDiscount = function createDiscount() {
|
|
130
193
|
return option.discount && /*#__PURE__*/_react["default"].createElement("span", {
|
|
131
194
|
className: "ncf__payment-term__discount"
|
|
132
|
-
}, option.bestOffer ? 'Best offer
|
|
195
|
+
}, option.bestOffer ? 'Best offer' : "Save ".concat(option.discount, " off RRP"));
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
var createB2cDiscountCopy = function createB2cDiscountCopy() {
|
|
199
|
+
return option.name === 'annual' && option.b2cPartnership && option.b2cDiscountCopy && /*#__PURE__*/_react["default"].createElement("span", {
|
|
200
|
+
className: "ncf__payment-term__discount"
|
|
201
|
+
}, option.b2cDiscountCopy);
|
|
133
202
|
};
|
|
134
203
|
|
|
135
204
|
var createDescription = function createDescription() {
|
|
@@ -139,24 +208,59 @@ function PaymentTerm(_ref) {
|
|
|
139
208
|
className: "ncf__payment-term__trial-price"
|
|
140
209
|
}, 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", {
|
|
141
210
|
className: "ncf__payment-term__description"
|
|
142
|
-
}, nameMap[option.name].price(option.price), nameMap[option.name].monthlyPrice(option.monthlyPrice), nameMap[option.name].renewsText(isFixedTermOffer)) :
|
|
211
|
+
}, nameMap[option.name].price(option.price), nameMap[option.name].monthlyPrice(option.monthlyPrice), nameMap[option.name].renewsText(isFixedTermOffer)) : // this should cover the cases different than annual, quarterly and monthly
|
|
212
|
+
// for those containing period on option.value, render custom template, for the rest keep legacy render
|
|
213
|
+
isValidPeriod(option.value) ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
214
|
+
className: "ncf__payment-term__description"
|
|
215
|
+
}, 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", {
|
|
143
216
|
className: largePrice ? 'ncf__payment-term__large-price' : ''
|
|
144
217
|
}, option.price), option.chargeOnText && /*#__PURE__*/_react["default"].createElement("p", {
|
|
145
218
|
className: "ncf__payment-term__charge-on-text"
|
|
146
219
|
}, option.chargeOnText)));
|
|
147
220
|
};
|
|
148
221
|
|
|
222
|
+
var getTermDisplayName = function getTermDisplayName() {
|
|
223
|
+
var showTrialCopyInTitle = option.isTrial && !isPrintOrBundle && !isEpaper;
|
|
224
|
+
var defaultTitle = option.name && nameMap[option.name] ? nameMap[option.name].title : '';
|
|
225
|
+
var title = isFixedTermOffer ? "".concat(offerDisplayName, " - ").concat(defaultTitle) : defaultTitle;
|
|
226
|
+
var termDisplayName = '';
|
|
227
|
+
|
|
228
|
+
if (showTrialCopyInTitle) {
|
|
229
|
+
var termName = option.displayName ? option.displayName : 'Premium Digital';
|
|
230
|
+
termDisplayName = "Trial: ".concat(termName, " - ");
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
var getTermPeriod = function getTermPeriod() {
|
|
234
|
+
// annual, quarterly and monthly
|
|
235
|
+
if (nameMap[option.name]) {
|
|
236
|
+
return title;
|
|
237
|
+
} // custom offer with period provided
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
if (isValidPeriod(option.value)) {
|
|
241
|
+
return getTimeFromPeriod(option.value);
|
|
242
|
+
} // custom legacy cases, where period is not provided
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
return option.title;
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
var termPeriod = getTermPeriod();
|
|
249
|
+
termDisplayName = "".concat(termDisplayName).concat(termPeriod, " ");
|
|
250
|
+
return termDisplayName;
|
|
251
|
+
};
|
|
252
|
+
|
|
149
253
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
150
254
|
key: option.value,
|
|
151
255
|
className: className
|
|
152
256
|
}, /*#__PURE__*/_react["default"].createElement("input", props), /*#__PURE__*/_react["default"].createElement("label", {
|
|
153
257
|
htmlFor: option.value,
|
|
154
258
|
className: "o-forms-input__label ncf__payment-term__label"
|
|
155
|
-
}, createDiscount(), /*#__PURE__*/_react["default"].createElement("span", {
|
|
259
|
+
}, createDiscount(), createB2cDiscountCopy(), /*#__PURE__*/_react["default"].createElement("span", {
|
|
156
260
|
className: (0, _classnames["default"])(['ncf__payment-term__title', {
|
|
157
261
|
'ncf__payment-term__title--large-price': largePrice
|
|
158
262
|
}])
|
|
159
|
-
},
|
|
263
|
+
}, getTermDisplayName(), option.subTitle && /*#__PURE__*/_react["default"].createElement("span", {
|
|
160
264
|
className: "ncf__regular ncf__payment-term__sub-title"
|
|
161
265
|
}, option.subTitle)), createDescription()));
|
|
162
266
|
};
|
|
@@ -191,6 +295,8 @@ PaymentTerm.propTypes = {
|
|
|
191
295
|
isPrintOrBundle: _propTypes["default"].bool,
|
|
192
296
|
isEpaper: _propTypes["default"].bool,
|
|
193
297
|
options: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
298
|
+
b2cDiscountCopy: _propTypes["default"].string,
|
|
299
|
+
isB2cPartnership: _propTypes["default"].bool,
|
|
194
300
|
discount: _propTypes["default"].string,
|
|
195
301
|
isTrial: _propTypes["default"].bool,
|
|
196
302
|
name: _propTypes["default"].string.isRequired,
|
|
@@ -198,7 +304,7 @@ PaymentTerm.propTypes = {
|
|
|
198
304
|
selected: _propTypes["default"].bool,
|
|
199
305
|
trialDuration: _propTypes["default"].string,
|
|
200
306
|
trialPrice: _propTypes["default"].string,
|
|
201
|
-
amount: _propTypes["default"].
|
|
307
|
+
amount: _propTypes["default"].string,
|
|
202
308
|
trialAmount: _propTypes["default"].number,
|
|
203
309
|
value: _propTypes["default"].string.isRequired,
|
|
204
310
|
monthlyPrice: _propTypes["default"].string,
|
|
@@ -208,7 +314,7 @@ PaymentTerm.propTypes = {
|
|
|
208
314
|
chargeOnText: _propTypes["default"].string
|
|
209
315
|
})),
|
|
210
316
|
isFixedTermOffer: _propTypes["default"].bool,
|
|
211
|
-
|
|
317
|
+
offerDisplayName: _propTypes["default"].string,
|
|
212
318
|
showLegal: _propTypes["default"].bool,
|
|
213
319
|
largePrice: _propTypes["default"].bool,
|
|
214
320
|
optionsInARow: _propTypes["default"].bool
|
package/dist/payment-type.js
CHANGED
|
@@ -189,7 +189,8 @@ function PaymentType(_ref) {
|
|
|
189
189
|
type: 'checkbox',
|
|
190
190
|
name: 'payFasterNextTime',
|
|
191
191
|
value: 'true',
|
|
192
|
-
required: false
|
|
192
|
+
required: false,
|
|
193
|
+
checked: true
|
|
193
194
|
}, isSingleTermChecked && {
|
|
194
195
|
defaultChecked: true
|
|
195
196
|
});
|
|
@@ -201,7 +202,9 @@ function PaymentType(_ref) {
|
|
|
201
202
|
className: "o-forms-input o-forms-input--radio-box ncf__payment-type-selector"
|
|
202
203
|
}, createPaymentTypes()), /*#__PURE__*/_react["default"].createElement("div", {
|
|
203
204
|
className: "o-forms-input__error"
|
|
204
|
-
}, "Please enter a valid payment type"), createDirectDebitPanel(), createZuoraPanel(),
|
|
205
|
+
}, "Please enter a valid payment type"), createDirectDebitPanel(), createZuoraPanel()), /*#__PURE__*/_react["default"].createElement("div", {
|
|
206
|
+
className: "o-forms-field"
|
|
207
|
+
}, isSingleTerm && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
205
208
|
className: "o-forms-input o-forms-input--checkbox o-forms-input--suffix ncf__payment-type-pay-faster-next-time-checkbox",
|
|
206
209
|
htmlFor: "payFasterNextTime"
|
|
207
210
|
}, /*#__PURE__*/_react["default"].createElement("input", inputCheckProps), /*#__PURE__*/_react["default"].createElement("span", {
|
package/dist/position.js
CHANGED
|
@@ -15,7 +15,8 @@ var _classnames = _interopRequireDefault(require("classnames"));
|
|
|
15
15
|
|
|
16
16
|
var _nCommonStaticData = require("n-common-static-data");
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var B2CPositions = _nCommonStaticData.demographics.positions.positions;
|
|
19
|
+
var B2BPositions = _nCommonStaticData.b2b.demographics.positions.positions;
|
|
19
20
|
|
|
20
21
|
function Position(_ref) {
|
|
21
22
|
var value = _ref.value,
|
|
@@ -29,8 +30,10 @@ function Position(_ref) {
|
|
|
29
30
|
selectId = _ref$selectId === void 0 ? 'position' : _ref$selectId,
|
|
30
31
|
_ref$selectName = _ref.selectName,
|
|
31
32
|
selectName = _ref$selectName === void 0 ? 'position' : _ref$selectName,
|
|
33
|
+
_ref$isB2B = _ref.isB2B,
|
|
34
|
+
isB2B = _ref$isB2B === void 0 ? false : _ref$isB2B,
|
|
32
35
|
_ref$options = _ref.options,
|
|
33
|
-
options = _ref$options === void 0 ?
|
|
36
|
+
options = _ref$options === void 0 ? isB2B ? B2BPositions : B2CPositions : _ref$options,
|
|
34
37
|
_ref$isRequired = _ref.isRequired,
|
|
35
38
|
isRequired = _ref$isRequired === void 0 ? true : _ref$isRequired,
|
|
36
39
|
_ref$fieldLabel = _ref.fieldLabel,
|
|
@@ -81,6 +84,7 @@ Position.propTypes = {
|
|
|
81
84
|
fieldId: _propTypes["default"].string,
|
|
82
85
|
selectId: _propTypes["default"].string,
|
|
83
86
|
selectName: _propTypes["default"].string,
|
|
87
|
+
isB2B: _propTypes["default"].bool,
|
|
84
88
|
options: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
85
89
|
code: _propTypes["default"].string,
|
|
86
90
|
description: _propTypes["default"].string
|