@financial-times/n-conversion-forms 31.0.1 → 31.0.3

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.
Files changed (75) hide show
  1. package/.babelrc.js +7 -0
  2. package/.storybook/main.js +18 -10
  3. package/.toolkitrc.yml +7 -0
  4. package/.toolkitstate/ci.json +2 -2
  5. package/README.md +1 -1
  6. package/dist/accept-terms-business.jsx +74 -0
  7. package/dist/accept-terms-business.spec.jsx +40 -0
  8. package/dist/accept-terms-privacy-policy.jsx +71 -0
  9. package/dist/accept-terms-subscription.jsx +150 -0
  10. package/dist/accept-terms.jsx +217 -0
  11. package/dist/app-banner.jsx +51 -0
  12. package/dist/b2c-partnership-confirmation.jsx +64 -0
  13. package/dist/billing-city.jsx +58 -0
  14. package/dist/billing-country.jsx +43 -0
  15. package/dist/billing-postcode.jsx +76 -0
  16. package/dist/company-name.jsx +78 -0
  17. package/dist/confirmation.jsx +117 -0
  18. package/dist/continue-reading.jsx +45 -0
  19. package/dist/country.jsx +106 -0
  20. package/dist/customer-care.jsx +52 -0
  21. package/dist/debug.jsx +50 -0
  22. package/dist/decision-maker.jsx +72 -0
  23. package/dist/deferred-billing-terms.jsx +112 -0
  24. package/dist/delivery-address-map.jsx +184 -0
  25. package/dist/delivery-address-type.jsx +74 -0
  26. package/dist/delivery-address.jsx +123 -0
  27. package/dist/delivery-city.jsx +70 -0
  28. package/dist/delivery-county.jsx +48 -0
  29. package/dist/delivery-instructions.jsx +123 -0
  30. package/dist/delivery-option.jsx +77 -0
  31. package/dist/delivery-po-box.jsx +75 -0
  32. package/dist/delivery-postcode.jsx +116 -0
  33. package/dist/delivery-security-instructions.jsx +72 -0
  34. package/dist/delivery-start-date.jsx +77 -0
  35. package/dist/education-job-title.jsx +67 -0
  36. package/dist/email.jsx +90 -0
  37. package/dist/error-page.jsx +45 -0
  38. package/dist/fieldset.jsx +58 -0
  39. package/dist/first-name.jsx +73 -0
  40. package/dist/form.jsx +29 -0
  41. package/dist/google-sign-in.jsx +24 -0
  42. package/dist/graduation-date.jsx +112 -0
  43. package/dist/index.jsx +432 -0
  44. package/dist/industry.jsx +81 -0
  45. package/dist/job-title.jsx +65 -0
  46. package/dist/last-name.jsx +73 -0
  47. package/dist/licence-confirmation.jsx +67 -0
  48. package/dist/licence-header.jsx +52 -0
  49. package/dist/licence-sign-in.jsx +36 -0
  50. package/dist/licence-title.jsx +46 -0
  51. package/dist/lite-sub-confirmation.jsx +118 -0
  52. package/dist/loader.jsx +54 -0
  53. package/dist/message.jsx +101 -0
  54. package/dist/message.spec.jsx +96 -0
  55. package/dist/organisation.jsx +73 -0
  56. package/dist/package-change.jsx +38 -0
  57. package/dist/password.jsx +95 -0
  58. package/dist/payment-term.jsx +328 -0
  59. package/dist/payment-type.jsx +213 -0
  60. package/dist/personal-title.jsx +94 -0
  61. package/dist/phone.jsx +85 -0
  62. package/dist/position.jsx +86 -0
  63. package/dist/progress-indicator.jsx +66 -0
  64. package/dist/province.jsx +80 -0
  65. package/dist/registration-confirmation.jsx +108 -0
  66. package/dist/responsibility.jsx +84 -0
  67. package/dist/section.jsx +20 -0
  68. package/dist/seven-day-pass-experiment-confirmation.jsx +93 -0
  69. package/dist/state.jsx +80 -0
  70. package/dist/submit.jsx +52 -0
  71. package/dist/text-input.jsx +78 -0
  72. package/dist/trial-banner.jsx +29 -0
  73. package/package.json +19 -19
  74. package/toolkit/run-storybook/.toolkitrc.yml +1 -0
  75. package/toolkit/run-storybook/index.js +17 -0
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.Confirmation = Confirmation;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
+ var EMAIL_DEFAULT_TEXT = 'your email';
14
+ function Confirmation(_ref) {
15
+ var _ref$isTrial = _ref.isTrial,
16
+ isTrial = _ref$isTrial === void 0 ? false : _ref$isTrial,
17
+ _ref$isB2cPartnership = _ref.isB2cPartnership,
18
+ isB2cPartnership = _ref$isB2cPartnership === void 0 ? false : _ref$isB2cPartnership,
19
+ _ref$b2cPartnershipCo = _ref.b2cPartnershipCopy,
20
+ b2cPartnershipCopy = _ref$b2cPartnershipCo === void 0 ? [] : _ref$b2cPartnershipCo,
21
+ _ref$offer = _ref.offer,
22
+ offer = _ref$offer === void 0 ? '' : _ref$offer,
23
+ _ref$email = _ref.email,
24
+ email = _ref$email === void 0 ? EMAIL_DEFAULT_TEXT : _ref$email,
25
+ _ref$details = _ref.details,
26
+ details = _ref$details === void 0 ? null : _ref$details,
27
+ _ref$directDebitManda = _ref.directDebitMandateUrl,
28
+ directDebitMandateUrl = _ref$directDebitManda === void 0 ? null : _ref$directDebitManda,
29
+ _ref$nextActionTop = _ref.nextActionTop,
30
+ nextActionTop = _ref$nextActionTop === void 0 ? null : _ref$nextActionTop,
31
+ _ref$nextActionBottom = _ref.nextActionBottom,
32
+ nextActionBottom = _ref$nextActionBottom === void 0 ? null : _ref$nextActionBottom;
33
+ var containerDivProps = _objectSpread({
34
+ className: 'ncf ncf__wrapper'
35
+ }, isTrial && {
36
+ 'data-signup-is-trial': 'true'
37
+ });
38
+ var isB2cPartnershipCopyAvailable = isB2cPartnership && b2cPartnershipCopy.length > 0;
39
+ var detailElements = details && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("h2", {
40
+ className: "ncf__header2--afterline"
41
+ }, "Your billing details"), /*#__PURE__*/_react["default"].createElement("dl", {
42
+ className: "ncf__list"
43
+ }, details.map(function (detail, index) {
44
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, {
45
+ key: index
46
+ }, /*#__PURE__*/_react["default"].createElement("dt", {
47
+ className: "ncf__list-title"
48
+ }, detail.title), /*#__PURE__*/_react["default"].createElement("dd", {
49
+ className: "ncf__list-data"
50
+ }, detail.data), detail.description && /*#__PURE__*/_react["default"].createElement("dd", {
51
+ className: "ncf__list-description"
52
+ }, detail.description));
53
+ })));
54
+ var directDebitMandateUrlElement = directDebitMandateUrl && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("p", {
55
+ className: "ncf__paragraph--reduced-padding"
56
+ }, "Download your", ' ', /*#__PURE__*/_react["default"].createElement("a", {
57
+ href: directDebitMandateUrl,
58
+ "data-trackable": "dd-mandate-link",
59
+ id: "encryptedMandateLink"
60
+ }, "direct debit mandate"), /*#__PURE__*/_react["default"].createElement("i", {
61
+ className: "ncf__icon-download"
62
+ })));
63
+ return /*#__PURE__*/_react["default"].createElement("div", containerDivProps, /*#__PURE__*/_react["default"].createElement("div", {
64
+ className: "ncf__center"
65
+ }, /*#__PURE__*/_react["default"].createElement("div", {
66
+ className: "ncf__icon ncf__icon--tick ncf__icon--large"
67
+ }), /*#__PURE__*/_react["default"].createElement("p", {
68
+ className: "ncf__paragraph--reduced-padding ncf__paragraph--subscription-confirmation"
69
+ }, "You are now subscribed to:"), /*#__PURE__*/_react["default"].createElement("h1", {
70
+ className: "ncf__header ncf__header--confirmation"
71
+ }, offer)), nextActionTop, !isB2cPartnershipCopyAvailable && /*#__PURE__*/_react["default"].createElement("p", {
72
+ className: "ncf__paragraph"
73
+ }, "We\u2019ve sent confirmation to ", email, ". Make sure you check your spam folder if you don\u2019t receive it."), isB2cPartnershipCopyAvailable ? /*#__PURE__*/_react["default"].createElement("p", {
74
+ className: "ncf__paragraph"
75
+ }, b2cPartnershipCopy[0], /*#__PURE__*/_react["default"].createElement("span", {
76
+ className: "ncf__legend"
77
+ }, " ".concat(email, ". ")), b2cPartnershipCopy[1]) : '', /*#__PURE__*/_react["default"].createElement("p", {
78
+ className: "ncf__paragraph"
79
+ }, "Here\u2019s a summary of your ", offer, " subscription:"), detailElements, directDebitMandateUrlElement, /*#__PURE__*/_react["default"].createElement("div", {
80
+ className: "ncf__headed-paragraph"
81
+ }, /*#__PURE__*/_react["default"].createElement("h3", {
82
+ className: "ncf__header"
83
+ }, "Something not right?"), /*#__PURE__*/_react["default"].createElement("p", {
84
+ className: "ncf__paragraph"
85
+ }, "Go to your", ' ', /*#__PURE__*/_react["default"].createElement("a", {
86
+ className: "ncf__link ncf__link--external",
87
+ href: "https://www.ft.com/myaccount/personal-details",
88
+ target: "_blank",
89
+ rel: "noopener noreferrer",
90
+ "data-trackable": "yourAccount"
91
+ }, "account settings"), ' ', "to view or edit your account. If you need to get in touch call us on", ' ', /*#__PURE__*/_react["default"].createElement("a", {
92
+ href: "tel:+442077556248",
93
+ className: "ncf__link ncf__link--external"
94
+ }, "+44 (0) 207 755 6248"), ". Or contact us for additional support.")), /*#__PURE__*/_react["default"].createElement("p", {
95
+ className: "ncf__paragraph"
96
+ }, "We will automatically renew your subscription using the payment method provided unless you cancel before your renewal date. See our", ' ', /*#__PURE__*/_react["default"].createElement("a", {
97
+ className: "ncf__link ncf__link--external",
98
+ href: "http://help.ft.com/help/legal-privacy/terms-conditions/",
99
+ target: "_top",
100
+ rel: "noopener"
101
+ }, "Terms & Conditions"), ' ', "for details on how to cancel."), nextActionBottom);
102
+ }
103
+ Confirmation.propTypes = {
104
+ isTrial: _propTypes["default"].bool,
105
+ isB2cPartnership: _propTypes["default"].bool,
106
+ b2cPartnershipCopy: _propTypes["default"].array,
107
+ offer: _propTypes["default"].string.isRequired,
108
+ email: _propTypes["default"].string,
109
+ details: _propTypes["default"].arrayOf(_propTypes["default"].shape({
110
+ title: _propTypes["default"].string.isRequired,
111
+ data: _propTypes["default"].string.isRequired,
112
+ description: _propTypes["default"].string
113
+ })),
114
+ directDebitMandateUrl: _propTypes["default"].string,
115
+ nextActionTop: _propTypes["default"].node,
116
+ nextActionBottom: _propTypes["default"].node
117
+ };
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.ContinueReading = ContinueReading;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
+ function ContinueReading(_ref) {
14
+ var _ref$link = _ref.link,
15
+ link = _ref$link === void 0 ? null : _ref$link,
16
+ _ref$quote = _ref.quote,
17
+ quote = _ref$quote === void 0 ? '' : _ref$quote,
18
+ _ref$isEmbedded = _ref.isEmbedded,
19
+ isEmbedded = _ref$isEmbedded === void 0 ? false : _ref$isEmbedded;
20
+ var titleElement = link ? /*#__PURE__*/_react["default"].createElement("p", {
21
+ className: "ncf__continue-reading-title"
22
+ }, "You can now continue reading:") : /*#__PURE__*/_react["default"].createElement("p", {
23
+ className: "ncf__continue-reading-title"
24
+ }, "Become an FT subscriber to read:");
25
+ var aTagProps = _objectSpread(_objectSpread({
26
+ href: link
27
+ }, isEmbedded && {
28
+ target: '_top'
29
+ }), {}, {
30
+ className: 'ncf__button ncf__button--secondary'
31
+ });
32
+ var linkElement = link && /*#__PURE__*/_react["default"].createElement("p", {
33
+ className: "ncf__center"
34
+ }, /*#__PURE__*/_react["default"].createElement("a", aTagProps, "Continue reading"));
35
+ return /*#__PURE__*/_react["default"].createElement("div", {
36
+ className: "ncf__continue-reading-wrapper"
37
+ }, titleElement, /*#__PURE__*/_react["default"].createElement("blockquote", {
38
+ className: "ncf__continue-reading-quote"
39
+ }, quote), linkElement);
40
+ }
41
+ ContinueReading.propTypes = {
42
+ link: _propTypes["default"].string,
43
+ quote: _propTypes["default"].string,
44
+ isEmbedded: _propTypes["default"].bool
45
+ };
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.Country = Country;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _classnames = _interopRequireDefault(require("classnames"));
11
+ var _countries = require("../utils/countries");
12
+ function Country(_ref) {
13
+ var additionalFieldInformation = _ref.additionalFieldInformation,
14
+ _ref$dataTrackable = _ref.dataTrackable,
15
+ dataTrackable = _ref$dataTrackable === void 0 ? 'field-country' : _ref$dataTrackable,
16
+ _ref$fieldId = _ref.fieldId,
17
+ fieldId = _ref$fieldId === void 0 ? 'countryField' : _ref$fieldId,
18
+ _ref$filterList = _ref.filterList,
19
+ filterList = _ref$filterList === void 0 ? [] : _ref$filterList,
20
+ _ref$hasError = _ref.hasError,
21
+ hasError = _ref$hasError === void 0 ? false : _ref$hasError,
22
+ _ref$inputId = _ref.inputId,
23
+ inputId = _ref$inputId === void 0 ? 'country' : _ref$inputId,
24
+ _ref$isB2b = _ref.isB2b,
25
+ isB2b = _ref$isB2b === void 0 ? false : _ref$isB2b,
26
+ _ref$isDisabled = _ref.isDisabled,
27
+ isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
28
+ _ref$isPlaceholderDis = _ref.isPlaceholderDisabled,
29
+ isPlaceholderDisabled = _ref$isPlaceholderDis === void 0 ? false : _ref$isPlaceholderDis,
30
+ value = _ref.value,
31
+ _ref$label = _ref.label,
32
+ label = _ref$label === void 0 ? "Country".concat(isB2b ? '/Region' : '') : _ref$label,
33
+ _ref$errorText = _ref.errorText,
34
+ errorText = _ref$errorText === void 0 ? "Please select your country".concat(isB2b ? '/region' : '') : _ref$errorText;
35
+ var selectWrapperClassName = (0, _classnames["default"])(['o-forms-input', 'o-forms-input--select', {
36
+ 'o-forms-input--invalid': hasError
37
+ }]);
38
+ var selectProps = {
39
+ id: inputId,
40
+ 'aria-required': true,
41
+ required: true,
42
+ name: inputId,
43
+ 'data-trackable': dataTrackable,
44
+ disabled: isDisabled
45
+ };
46
+ var countries = (0, _countries.getCountries)({
47
+ filter: filterList,
48
+ value: value
49
+ });
50
+ var createOption = function createOption(country) {
51
+ return /*#__PURE__*/_react["default"].createElement("option", {
52
+ key: country.code,
53
+ value: country.code,
54
+ selected: country.selected
55
+ }, country.name);
56
+ };
57
+ var createOptGroup = function createOptGroup(country) {
58
+ return /*#__PURE__*/_react["default"].createElement("optgroup", {
59
+ key: country.label,
60
+ label: country.label
61
+ }, country.countries.map(function (country) {
62
+ return createOption(country);
63
+ }));
64
+ };
65
+ var createSelect = function createSelect(countries) {
66
+ return /*#__PURE__*/_react["default"].createElement("select", selectProps, /*#__PURE__*/_react["default"].createElement("option", {
67
+ value: "",
68
+ disabled: isPlaceholderDisabled
69
+ }, "Please select a country", isB2b ? '/region' : ''), countries.map(function (country) {
70
+ return country.label ? createOptGroup(country) : createOption(country);
71
+ }));
72
+ };
73
+ var fieldErrorClassNames = (0, _classnames["default"])(['o-forms-input__error', {
74
+ 'additional-field-information__with-field-error': additionalFieldInformation
75
+ }]);
76
+ return /*#__PURE__*/_react["default"].createElement("label", {
77
+ id: fieldId,
78
+ className: "o-forms-field ncf__validation-error",
79
+ "data-validate": "required",
80
+ htmlFor: selectProps.id
81
+ }, /*#__PURE__*/_react["default"].createElement("span", {
82
+ className: "o-forms-title"
83
+ }, /*#__PURE__*/_react["default"].createElement("span", {
84
+ className: "o-forms-title__main"
85
+ }, label)), /*#__PURE__*/_react["default"].createElement("span", {
86
+ className: selectWrapperClassName
87
+ }, createSelect(countries), /*#__PURE__*/_react["default"].createElement("span", {
88
+ className: fieldErrorClassNames
89
+ }, errorText), additionalFieldInformation ? /*#__PURE__*/_react["default"].createElement("p", {
90
+ className: "additional-field-information"
91
+ }, additionalFieldInformation) : null));
92
+ }
93
+ Country.propTypes = {
94
+ additionalFieldInformation: _propTypes["default"].node,
95
+ dataTrackable: _propTypes["default"].string,
96
+ errorText: _propTypes["default"].string,
97
+ fieldId: _propTypes["default"].string,
98
+ filterList: _propTypes["default"].arrayOf(_propTypes["default"].string),
99
+ hasError: _propTypes["default"].bool,
100
+ inputId: _propTypes["default"].string,
101
+ isB2b: _propTypes["default"].bool,
102
+ isDisabled: _propTypes["default"].bool,
103
+ isPlaceholderDisabled: _propTypes["default"].bool,
104
+ label: _propTypes["default"].string,
105
+ value: _propTypes["default"].string
106
+ };
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.CustomerCare = CustomerCare;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _classnames = _interopRequireDefault(require("classnames"));
11
+ var DEFAULT_HEADER_TEXT = 'Sorry, this is not available online';
12
+ var DEFAULT_MESSAGE_TEXT = 'Speak now to our Customer Care team to discuss your options';
13
+ function CustomerCare(_ref) {
14
+ var _ref$header = _ref.header,
15
+ header = _ref$header === void 0 ? DEFAULT_HEADER_TEXT : _ref$header,
16
+ _ref$isCompact = _ref.isCompact,
17
+ isCompact = _ref$isCompact === void 0 ? false : _ref$isCompact,
18
+ _ref$message = _ref.message,
19
+ message = _ref$message === void 0 ? DEFAULT_MESSAGE_TEXT : _ref$message;
20
+ var className = (0, _classnames["default"])(['ncf__wrapper', 'ncf__center', 'ncf__customer-care', {
21
+ 'ncf__customer-care--compact': isCompact === true
22
+ }]);
23
+ return /*#__PURE__*/_react["default"].createElement("div", {
24
+ className: className
25
+ }, (header || message) && /*#__PURE__*/_react["default"].createElement("div", {
26
+ className: "ncf__paragraph"
27
+ }, header && /*#__PURE__*/_react["default"].createElement("h1", {
28
+ className: "ncf__header"
29
+ }, header), message && /*#__PURE__*/_react["default"].createElement("p", {
30
+ id: "customer-care-message"
31
+ }, message)), /*#__PURE__*/_react["default"].createElement("div", {
32
+ className: "ncf__paragraph"
33
+ }, /*#__PURE__*/_react["default"].createElement("div", {
34
+ className: "ncf__icon ncf__icon--phone ncf__icon--large"
35
+ }), /*#__PURE__*/_react["default"].createElement("p", null, "International Toll Free Number"), /*#__PURE__*/_react["default"].createElement("p", {
36
+ className: "ncf__customer-care__phone"
37
+ }, /*#__PURE__*/_react["default"].createElement("a", {
38
+ id: "customer-care-international-number",
39
+ className: "ncf__header ncf__link",
40
+ href: "tel:+80007056477"
41
+ }, "+ 800 0705 6477"))), /*#__PURE__*/_react["default"].createElement("div", {
42
+ className: "ncf__paragraph"
43
+ }, /*#__PURE__*/_react["default"].createElement("a", {
44
+ className: "ncf__link",
45
+ href: "https://help.ft.com/help/contact-us/"
46
+ }, "Find a local phone number")));
47
+ }
48
+ CustomerCare.propTypes = {
49
+ header: _propTypes["default"].string,
50
+ isCompact: _propTypes["default"].bool,
51
+ message: _propTypes["default"].string
52
+ };
package/dist/debug.jsx ADDED
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.Debug = Debug;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ function Debug(_ref) {
11
+ var _ref$isTest = _ref.isTest,
12
+ isTest = _ref$isTest === void 0 ? false : _ref$isTest,
13
+ _ref$showHelpers = _ref.showHelpers,
14
+ showHelpers = _ref$showHelpers === void 0 ? false : _ref$showHelpers,
15
+ _ref$links = _ref.links,
16
+ links = _ref$links === void 0 ? {} : _ref$links;
17
+ // Strings are used rather than JSX as this component is injected into HTML
18
+ // along with onclick handlers, styles and javascript. JSX will escape and
19
+ // modify the HTML which we do not want. Once our applications are on JSX
20
+ // entirely this component should be rethought.
21
+ var testEnvironment = "\n\t\t<span class=\"ncf__debug-environment\">\n\t\t\t<a class=\"ncf__button ncf__button--debug ncf__button--inverse ncf__debug-button--test\" onclick=\"setTestEnvironment('off');\"><strong>TEST</strong> relax you are using the test API</a>\n\t\t</span>\n\t";
22
+ var productionEnvironment = "\n\t\t<span class=\"ncf__debug-environment\">\n\t\t\t<a class=\"ncf__button ncf__button--debug ncf__button--inverse ncf__debug-button--production\" onclick=\"setTestEnvironment('on');\"><strong>PRODUCTION</strong> careful you are using the production API</a>\n\t\t</span>\n\t";
23
+ var testCards = "\n\t\t<button id=\"ncf-copy-visa-checkout-card\" class=\"ncf__button ncf__button--debug ncf__button--inverse\" onclick=\"copyToClipboard('checkoutVisa');\" title=\"Copy Checkout Visa test card number to clipboard\">EU Visa (cvv:100)</button>\n\t\t<button id=\"ncf-copy-visa-checkout-3ds\" class=\"ncf__button ncf__button--debug ncf__button--inverse\" onclick=\"copyToClipboard('checkout3dsChallenge');\" title=\"Copy Checkout challenge code -Checkout1!- to clipboard\">EU 3ds challenge</button>\n\t\t<button id=\"ncf-copy-visa-chase-card\" class=\"ncf__button ncf__button--debug ncf__button--inverse\" onclick=\"copyToClipboard('chaseVisa');\" title=\"Copy Chase card number to clipboard\">US Visa (exp:1230,cvv:111)</button>\n\t\t<button id=\"ncf-link-checkout-cards\" class=\"ncf__button ncf__button--debug ncf__button--inverse\" onclick=\"window.open('https://www.checkout.com/docs/testing/test-card-numbers#Credit_cards', '_blank');\" title=\"Checkout test cards documentation\">Doc:Checkout</button>\n\t";
24
+ var linksString = Object.keys(links).map(function (link) {
25
+ return "<a key=".concat(link, " class=\"ncf__button ncf__button--inverse ncf__link\" href=\"").concat(links[link], "\">").concat(link, "</a>");
26
+ });
27
+ var helpers = "\n\t\t<span class=\"ncf__debug-helpers\">\n\t\t\t<button class=\"ncf__button ncf__button--debug ncf__button--inverse\" onclick=\"logout();\" title=\"Logout and refresh\">Logout</button>\n\t\t\t<button class=\"ncf__button ncf__button--debug ncf__button--inverse\" onclick=\"fillForm();\" title=\"Fill form with debug data\">Fill</button>\n\t\t\t<button class=\"ncf__button ncf__button--debug ncf__button--inverse\" onclick=\"fillForm(); submitForm();\" title=\"Fill form with debug data and submit\">Fill &amp; Submit</button>\n\t\t\t".concat(isTest ? testCards : '', "\n\t\t\t").concat(links.length ? linksString : '', "\n\t\t</span>\n\t");
28
+ var html = {
29
+ __html: "".concat(isTest ? testEnvironment : productionEnvironment).concat(showHelpers ? helpers : '')
30
+ };
31
+ var javascript = {
32
+ __html: "\n\tvar FORM_SELECTOR = 'form.ncf';\n\tvar INPUT_SELECTOR = FORM_SELECTOR + ' input:not([type=\"checkbox\"]):not([type=\"radio\"])';\n\tvar SELECT_SELECTOR = FORM_SELECTOR + ' select';\n\tvar CHECKBOX_SELECTOR = FORM_SELECTOR + ' input[type=\"checkbox\"]';\n\tvar RADIO_SELECTOR = FORM_SELECTOR + ' input[type=\"radio\"]';\n\t// This env var gets set in production. We use this when creating email addresses in case any\n\t// get into production so Membership know who to come to about deleting them.\n\tvar SYSTEM_CODE = document.documentElement.getAttribute('data-next-app') || 'n-conversion-forms';\n\tvar COUNTRY_CODE = window.FT && window.FT.country || 'GBR';\n\n\tvar postcodeByCountry = {\n\t\tGBR: 'EC4M9BT',\n\t\tUSA: '10028',\n\t\tCAN: 'K0E 9Z9'\n\t};\n\n\tvar debugData = {\n\t\tbillingCity: 'London',\n\t\tbillingCountry: COUNTRY_CODE,\n\t\tbillingPostcode: postcodeByCountry[COUNTRY_CODE],\n\t\tcountry: COUNTRY_CODE,\n\t\tdeliveryAddressLine1: 'delivery test1',\n\t\tdeliveryAddressLine2: 'delivery test2',\n\t\tdeliveryAddressLine3: 'APT 2C',\n\t\tdeliveryCity: 'delivery city',\n\t\tdeliveryCounty: 'delivery county',\n\t\tdeliveryPostcode: postcodeByCountry[COUNTRY_CODE],\n\t\temail: SYSTEM_CODE + '-' + Date.now() + '@ftqa.org',\n\t\tfirstName: 'Test',\n\t\tindustry: 'DEF',\n\t\tlastName: 'Test',\n\t\tjobTitle: 'CEO',\n\t\torganisation: 'ft-org',\n\t\tpassword: 'password123',\n\t\tposition: 'AS',\n\t\tpostCode: postcodeByCountry[COUNTRY_CODE],\n\t\tprimaryTelephone: '0987654321',\n\t\tresponsibility: 'ADL',\n\t\tukVisaWorldpay: '4111111111111111',\n\t\tusAmex: '378282246310005',\n\t\tusVisaWorldpay: '4112344112344113',\n\t\tcheckoutVisa: '4242424242424242',\n\t\tcheckout3dsChallenge: 'Checkout1!',\n\t\tchaseVisa: '4011361100000010',\n\t\tverificationEmail: SYSTEM_CODE + '-' + Date.now() + '@ftqa.org',\n\t};\n\n\tfunction logout () {\n\t\tconst options = {\n\t\t\tmode: 'no-cors',\n\t\t\tcredentials: 'include'\n\t\t};\n\t\tfetch('https://www.ft.com/logout', options).then(function () {\n\t\t\twindow.location.reload();\n\t\t});\n\t}\n\n\tfunction fillForm () {\n\t\tvar changeEvent = document.createEvent('HTMLEvents');\n\t\tchangeEvent.initEvent('change', false, true);\n\n\t\tvar inputs = document.querySelectorAll(INPUT_SELECTOR + ', ' + SELECT_SELECTOR);\n\t\tinputs.forEach(function (input) {\n\t\t\tif (!/hidden/i.test(input.type) && input.disabled === false) {\n\t\t\t\tvar value = debugData[input.name];\n\t\t\t\tinput.value = value;\n\t\t\t\tinput.dispatchEvent(changeEvent);\n\t\t\t}\n\t\t});\n\t\tvar checkboxes = document.querySelectorAll(CHECKBOX_SELECTOR + ', ' + RADIO_SELECTOR);\n\t\tcheckboxes.forEach(function (checkbox) {\n\t\t\tcheckbox.checked = true;\n\t\t\tcheckbox.dispatchEvent(changeEvent);\n\t\t});\n\t}\n\n\tfunction submitForm () {\n\t\tdocument.querySelector(FORM_SELECTOR).submit();\n\t}\n\n\tfunction copyToClipboard (name) {\n\t\tvar string = debugData[name];\n\t\tvar textarea = document.createElement('textarea');\n\t\ttextarea.value = string;\n\t\tdocument.body.appendChild(textarea);\n\t\ttextarea.select();\n\t\tdocument.execCommand('copy');\n\t\tdocument.body.removeChild(textarea);\n\t}\n\n\tfunction setTestEnvironment (state) {\n\t\tvar flags = document.cookie.match('(^|[^;]+)\\\\s*next-flags\\\\s*=\\\\s*([^;]+)').pop();\n\t\tvar flag = 'conversionSandbox%3A';\n\t\tflags = flags.replace(flag + 'on', '');\n\t\tflags = flags.replace(flag + 'off', '');\n\t\tdocument.cookie = 'next-flags=' + flags + '%2C' + flag + state + '; path=/; domain=.ft.com;';\n\t\twindow.location.reload();\n\t}\n\t"
33
+ };
34
+ var style = {
35
+ __html: "\n\t.ncf__debug-panel {\n\t\tposition: absolute;\n\t\tbackground-color: #262a33;\n\t\tcolor: #ffffff;\n\t\tbottom: 0;\n\t\tleft: 0;\n\t\twidth: 100%;\n\t\tpadding: 10px;\n\t\tposition: fixed;\n\t\tz-index: 1000;\n\t\topacity: 0.8;\n\t}\n\t.ncf__debug-button--test {\n\t\tbackground-color: #008040;\n\t}\n\t.ncf__debug-button--production {\n\t\tbackground-color: #990000;\n\t}\n\t.ncf__button--debug {\n\t\tpadding: 0px 5px;\n\t}\n\t"
36
+ };
37
+ return (isTest || showHelpers) && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
38
+ className: "ncf__debug-panel",
39
+ dangerouslySetInnerHTML: html
40
+ }), /*#__PURE__*/_react["default"].createElement("script", {
41
+ dangerouslySetInnerHTML: javascript
42
+ }), /*#__PURE__*/_react["default"].createElement("style", {
43
+ dangerouslySetInnerHTML: style
44
+ }));
45
+ }
46
+ Debug.propTypes = {
47
+ isTest: _propTypes["default"].bool,
48
+ showHelpers: _propTypes["default"].bool,
49
+ links: _propTypes["default"].object
50
+ };
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.DecisionMaker = DecisionMaker;
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
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
+ function DecisionMaker(_ref) {
15
+ var _ref$hasError = _ref.hasError,
16
+ hasError = _ref$hasError === void 0 ? false : _ref$hasError,
17
+ _ref$value = _ref.value,
18
+ value = _ref$value === void 0 ? 'yes' : _ref$value;
19
+ var radioButtonsWrapperClassNames = (0, _classnames["default"])(['o-forms-input', 'o-forms-input--radio-box', 'o-forms-input--inline', {
20
+ 'o-forms-input--invalid': hasError
21
+ }]);
22
+ var decisionMakerYesInputProps = _objectSpread({
23
+ type: 'radio',
24
+ id: 'decisionMakerYes',
25
+ name: 'decisionMaker',
26
+ 'aria-label': 'Yes',
27
+ value: 'yes'
28
+ }, value === 'yes' && {
29
+ defaultChecked: true
30
+ });
31
+ var decisionMakerNoInputProps = _objectSpread({
32
+ type: 'radio',
33
+ id: 'decisionMakerNo',
34
+ name: 'decisionMaker',
35
+ 'aria-label': 'No',
36
+ value: 'no'
37
+ }, value === 'no' && {
38
+ defaultChecked: true
39
+ });
40
+ return /*#__PURE__*/_react["default"].createElement("div", {
41
+ id: "decisionMakerField",
42
+ role: "group",
43
+ "aria-labelledby": "decisionMakerFieldLabel",
44
+ className: "o-forms-field o-forms-field--inline",
45
+ "data-validate": "required"
46
+ }, /*#__PURE__*/_react["default"].createElement("span", {
47
+ className: "o-forms-title"
48
+ }, /*#__PURE__*/_react["default"].createElement("span", {
49
+ className: "o-forms-title__main",
50
+ id: "decisionMakerFieldLabel"
51
+ }, "Are you a manager with direct reports?")), /*#__PURE__*/_react["default"].createElement("span", {
52
+ className: radioButtonsWrapperClassNames
53
+ }, /*#__PURE__*/_react["default"].createElement("div", {
54
+ className: "o-forms-input--radio-box__container"
55
+ }, /*#__PURE__*/_react["default"].createElement("label", {
56
+ htmlFor: decisionMakerYesInputProps.id
57
+ }, /*#__PURE__*/_react["default"].createElement("input", decisionMakerYesInputProps), /*#__PURE__*/_react["default"].createElement("span", {
58
+ className: "o-forms-input__label",
59
+ "aria-hidden": "true"
60
+ }, "Yes")), /*#__PURE__*/_react["default"].createElement("label", {
61
+ htmlFor: decisionMakerNoInputProps.id
62
+ }, /*#__PURE__*/_react["default"].createElement("input", decisionMakerNoInputProps), /*#__PURE__*/_react["default"].createElement("span", {
63
+ className: "o-forms-input__label o-forms-input__label--negative",
64
+ "aria-hidden": "true"
65
+ }, "No"))), /*#__PURE__*/_react["default"].createElement("span", {
66
+ className: "o-forms-input__error"
67
+ }, "Please select an option")));
68
+ }
69
+ DecisionMaker.propTypes = {
70
+ hasError: _propTypes["default"].bool,
71
+ value: _propTypes["default"].string
72
+ };
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.DeferredBillingTerms = DeferredBillingTerms;
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
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
+ var CONSENT_AGE = 16;
15
+ function DeferredBillingTerms(_ref) {
16
+ var _ref$isDeferredBillin = _ref.isDeferredBilling,
17
+ isDeferredBilling = _ref$isDeferredBillin === void 0 ? false : _ref$isDeferredBillin,
18
+ _ref$checkBoxTrackabl = _ref.checkBoxTrackableAttr,
19
+ checkBoxTrackableAttr = _ref$checkBoxTrackabl === void 0 ? 'field-terms' : _ref$checkBoxTrackabl,
20
+ _ref$trackableAttr = _ref.trackableAttr,
21
+ trackableAttr = _ref$trackableAttr === void 0 ? 'deferred-billing-terms' : _ref$trackableAttr,
22
+ _ref$errorMessage = _ref.errorMessage,
23
+ errorMessage = _ref$errorMessage === void 0 ? 'Please accept our terms &amp; conditions' : _ref$errorMessage,
24
+ _ref$inputId = _ref.inputId,
25
+ inputId = _ref$inputId === void 0 ? 'accept-deferred-billing-terms' : _ref$inputId,
26
+ _ref$fieldId = _ref.fieldId,
27
+ fieldId = _ref$fieldId === void 0 ? 'accept-deferred-terms' : _ref$fieldId,
28
+ _ref$isChecked = _ref.isChecked,
29
+ isChecked = _ref$isChecked === void 0 ? false : _ref$isChecked,
30
+ _ref$hasError = _ref.hasError,
31
+ hasError = _ref$hasError === void 0 ? false : _ref$hasError;
32
+ var labelClassName = (0, _classnames["default"])(['o-forms-input', 'o-forms-input--checkbox', {
33
+ 'o-forms-input--invalid': hasError
34
+ }]);
35
+ var inputProps = _objectSpread({
36
+ id: "".concat(inputId),
37
+ type: 'checkbox',
38
+ name: "".concat(inputId),
39
+ value: 'true',
40
+ 'data-trackable': checkBoxTrackableAttr,
41
+ 'aria-required': 'true',
42
+ required: true
43
+ }, isChecked && {
44
+ defaultChecked: true
45
+ });
46
+ var divProps = _objectSpread({
47
+ id: 'acceptTermsField',
48
+ className: 'o-forms-field o-layout-typography ncf__validation-error',
49
+ 'data-validate': 'required,checked'
50
+ }, isChecked && {
51
+ 'data-trackable': trackableAttr
52
+ });
53
+ return isDeferredBilling && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("p", {
54
+ className: labelClassName
55
+ }, /*#__PURE__*/_react["default"].createElement("span", {
56
+ className: "ncf__paragraph"
57
+ }, "I confirm I am ", CONSENT_AGE, " years or older and have read and agree to the", ' ', /*#__PURE__*/_react["default"].createElement("a", {
58
+ className: "ncf__link--external",
59
+ href: "https://help.ft.com/legal-privacy/terms-and-conditions/",
60
+ title: "FT Legal Terms and Conditions help page",
61
+ target: "_blank",
62
+ rel: "noopener noreferrer",
63
+ "data-trackable": "terms-and-conditions"
64
+ }, "Terms & Conditions"), ".")), /*#__PURE__*/_react["default"].createElement("p", {
65
+ className: labelClassName
66
+ }, /*#__PURE__*/_react["default"].createElement("span", {
67
+ className: "ncf__paragraph"
68
+ }, "I give consent for my chosen payment method to be charged automatically at the end of each subscription term until I cancel it by contacting Customer Care through chat, phone or email.")), /*#__PURE__*/_react["default"].createElement("p", {
69
+ className: labelClassName
70
+ }, /*#__PURE__*/_react["default"].createElement("span", {
71
+ className: "ncf__paragraph"
72
+ }, "By placing my order, I acknowledge that my subscription will start on the date given above. Any cancellation notice received after that date will take effect at the end of my subscription term and previously paid amounts are non-refundable.")), /*#__PURE__*/_react["default"].createElement("p", {
73
+ className: labelClassName
74
+ }, /*#__PURE__*/_react["default"].createElement("span", {
75
+ className: "ncf__paragraph"
76
+ }, "Find out more about our cancellation policy in our", ' ', /*#__PURE__*/_react["default"].createElement("a", {
77
+ className: "ncf__link--external",
78
+ href: "https://help.ft.com/legal-privacy/terms-and-conditions/",
79
+ title: "FT Legal Terms and Conditions help page",
80
+ target: "_blank",
81
+ rel: "noopener noreferrer",
82
+ "data-trackable": "terms-and-conditions"
83
+ }, "Terms & Conditions"), ".")), /*#__PURE__*/_react["default"].createElement("p", {
84
+ className: labelClassName
85
+ }, /*#__PURE__*/_react["default"].createElement("span", {
86
+ className: "ncf__paragraph"
87
+ }, "Please note that if you fail to make payment for your Deferred Billing Plan within the due date your subscription will be automatically cancelled.", ' ', /*#__PURE__*/_react["default"].createElement("a", {
88
+ className: "ncf__link--external",
89
+ href: "https://help.ft.com/legal-privacy/terms-and-conditions/",
90
+ title: "FT Legal Terms and Conditions help page",
91
+ target: "_blank",
92
+ rel: "noopener noreferrer",
93
+ "data-trackable": "terms-and-conditions"
94
+ }, "Terms & Conditions"), ".")), /*#__PURE__*/_react["default"].createElement("div", divProps, /*#__PURE__*/_react["default"].createElement("label", {
95
+ className: labelClassName,
96
+ htmlFor: inputId,
97
+ id: fieldId
98
+ }, /*#__PURE__*/_react["default"].createElement("input", inputProps), /*#__PURE__*/_react["default"].createElement("span", {
99
+ className: "o-forms-input__label"
100
+ }, "I agree with terms & conditions."), /*#__PURE__*/_react["default"].createElement("p", {
101
+ className: "o-forms-input__error"
102
+ }, errorMessage))));
103
+ }
104
+ DeferredBillingTerms.propTypes = {
105
+ hasError: _propTypes["default"].bool,
106
+ isChecked: _propTypes["default"].bool,
107
+ isDeferredBilling: _propTypes["default"].bool,
108
+ fieldId: _propTypes["default"].string,
109
+ inputId: _propTypes["default"].string,
110
+ trackableAttr: _propTypes["default"].string,
111
+ errorMessage: _propTypes["default"].string
112
+ };