@financial-times/n-conversion-forms 20.3.1 → 20.3.5

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 (118) hide show
  1. package/.circleci/config.yml +8 -6
  2. package/.circleci/shared-helpers/helper-npm-install-peer-deps +6 -6
  3. package/.eslintignore +3 -0
  4. package/.github/workflows/gh-pages-deploy.yml +2 -1
  5. package/build-state/npm-shrinkwrap.json +47829 -8580
  6. package/components/__snapshots__/accept-terms.spec.js.snap +94 -6
  7. package/components/__snapshots__/app-banner.spec.js.snap +2 -0
  8. package/components/__snapshots__/confirmation.spec.js.snap +11 -11
  9. package/components/__snapshots__/delivery-address.spec.js.snap +2 -2
  10. package/components/__snapshots__/graduation-date.spec.js.snap +3 -3
  11. package/components/__snapshots__/registration-confirmation.spec.js.snap +2 -2
  12. package/components/accept-terms.jsx +67 -9
  13. package/components/accept-terms.spec.js +12 -0
  14. package/components/app-banner.jsx +3 -1
  15. package/components/b2c-partnership-confirmation.jsx +7 -8
  16. package/components/b2c-partnership-confirmation.spec.js +1 -1
  17. package/components/b2c-partnership-payment-term.jsx +5 -2
  18. package/components/billing-country.jsx +1 -1
  19. package/components/billing-postcode.jsx +1 -1
  20. package/components/company-name.spec.js +9 -3
  21. package/components/confirmation.jsx +1 -1
  22. package/components/continue-reading.jsx +1 -1
  23. package/components/country.jsx +3 -2
  24. package/components/customer-care.jsx +1 -1
  25. package/components/debug.jsx +1 -1
  26. package/components/decision-maker.jsx +1 -1
  27. package/components/delivery-address-type.jsx +9 -9
  28. package/components/delivery-address-type.stories.js +10 -2
  29. package/components/delivery-address.jsx +108 -77
  30. package/components/delivery-address.spec.js +3 -1
  31. package/components/delivery-address.stories.js +1 -1
  32. package/components/delivery-city.jsx +2 -2
  33. package/components/delivery-county.jsx +1 -1
  34. package/components/delivery-instructions.jsx +48 -18
  35. package/components/delivery-instructions.spec.js +6 -2
  36. package/components/delivery-option.jsx +6 -2
  37. package/components/delivery-option.spec.js +4 -4
  38. package/components/delivery-option.stories.js +17 -5
  39. package/components/delivery-po-box.jsx +3 -5
  40. package/components/delivery-po-box.spec.js +3 -1
  41. package/components/delivery-po-box.stories.js +1 -1
  42. package/components/delivery-postcode.jsx +6 -3
  43. package/components/delivery-security-instructions.jsx +1 -2
  44. package/components/delivery-start-date.jsx +3 -1
  45. package/components/education-job-title.jsx +1 -1
  46. package/components/email.jsx +1 -1
  47. package/components/error-page.jsx +1 -1
  48. package/components/fieldset.jsx +1 -1
  49. package/components/first-name.jsx +1 -1
  50. package/components/form.jsx +1 -1
  51. package/components/google-sign-in.jsx +8 -4
  52. package/components/google-sign-in.stories.js +2 -1
  53. package/components/graduation-date.jsx +1 -1
  54. package/components/graduation-date.spec.js +1 -9
  55. package/components/industry.jsx +2 -2
  56. package/components/industry.spec.js +3 -1
  57. package/components/job-title.jsx +2 -2
  58. package/components/job-title.spec.js +3 -1
  59. package/components/last-name.jsx +1 -1
  60. package/components/licence-confirmation.jsx +7 -5
  61. package/components/licence-confirmation.stories.js +3 -1
  62. package/components/licence-header.jsx +2 -2
  63. package/components/licence-sign-in.jsx +2 -2
  64. package/components/licence-title.jsx +2 -2
  65. package/components/lite-sub-confirmation.jsx +92 -40
  66. package/components/lite-sub-confirmation.stories.js +3 -3
  67. package/components/loader.jsx +1 -1
  68. package/components/message.jsx +1 -1
  69. package/components/message.spec.jsx +1 -1
  70. package/components/organisation.jsx +1 -1
  71. package/components/package-change.jsx +13 -4
  72. package/components/password.jsx +1 -1
  73. package/components/payment-term.jsx +1 -1
  74. package/components/payment-type.jsx +7 -4
  75. package/components/personal-title.jsx +0 -1
  76. package/components/personal-title.spec.js +8 -6
  77. package/components/phone.jsx +2 -2
  78. package/components/phone.spec.js +3 -1
  79. package/components/position.jsx +2 -2
  80. package/components/position.spec.js +3 -1
  81. package/components/progress-indicator.jsx +4 -4
  82. package/components/registration-confirmation.jsx +1 -1
  83. package/components/responsibility.jsx +3 -5
  84. package/components/responsibility.spec.js +3 -1
  85. package/components/section.jsx +1 -1
  86. package/components/state.jsx +1 -1
  87. package/components/submit.jsx +1 -1
  88. package/components/trial-banner.jsx +1 -1
  89. package/dist/accept-terms.js +42 -7
  90. package/dist/app-banner.js +4 -2
  91. package/dist/confirmation.js +3 -3
  92. package/dist/continue-reading.js +2 -2
  93. package/dist/decision-maker.js +2 -2
  94. package/dist/delivery-address.js +7 -7
  95. package/dist/delivery-instructions.js +2 -2
  96. package/dist/delivery-security-instructions.js +2 -3
  97. package/dist/delivery-start-date.js +2 -2
  98. package/dist/fieldset.js +2 -2
  99. package/dist/licence-confirmation.js +2 -2
  100. package/dist/lite-sub-confirmation.js +7 -7
  101. package/dist/loader.js +2 -2
  102. package/dist/message.spec.js +2 -2
  103. package/dist/package-change.js +1 -1
  104. package/dist/payment-term.js +2 -2
  105. package/dist/payment-type.js +3 -3
  106. package/dist/registration-confirmation.js +1 -1
  107. package/jest.config.js +6 -1
  108. package/package.json +23 -12
  109. package/utils/billing-country.js +2 -3
  110. package/utils/company-name.spec.js +11 -3
  111. package/utils/delivery-address-type.js +4 -1
  112. package/utils/delivery-address-type.spec.js +11 -3
  113. package/utils/delivery-option-messages.js +61 -32
  114. package/utils/delivery-option-messages.spec.js +42 -12
  115. package/utils/delivery-option.js +14 -7
  116. package/utils/delivery-option.spec.js +7 -3
  117. package/utils/delivery-start-date.js +5 -3
  118. package/utils/zuora.js +6 -1
@@ -1,5 +1,93 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
+ exports[`AcceptTerms renders appropriately if a isAuthFirstAccount 1`] = `
4
+ <div id="acceptTermsField"
5
+ class="o-forms-field o-layout-typography ncf__validation-error"
6
+ data-validate="required,checked"
7
+ >
8
+ <ul class="o-typography-list ncf__accept-terms-list">
9
+ <li>
10
+ <span class="terms-auth-first-step">
11
+ For more information about how we use your data, please refer to our
12
+ <a class="ncf__link--external"
13
+ href="http://help.ft.com/help/legal-privacy/terms-conditions/"
14
+ target="_blank"
15
+ rel="noopener noreferrer"
16
+ data-trackable="terms-and-conditions"
17
+ >
18
+ privacy
19
+ </a>
20
+ and 
21
+ <a class="ncf__link--external"
22
+ href="http://help.ft.com/help/legal-privacy/terms-conditions/"
23
+ target="_blank"
24
+ rel="noopener noreferrer"
25
+ data-trackable="terms-and-conditions"
26
+ >
27
+ cookie
28
+ </a>
29
+ policies.
30
+ </span>
31
+ </li>
32
+ </ul>
33
+ <label class="o-forms-input o-forms-input--checkbox"
34
+ for="termsAcceptance"
35
+ >
36
+ <input type="checkbox"
37
+ id="termsAcceptance"
38
+ name="termsAcceptance"
39
+ value="true"
40
+ data-trackable="field-terms"
41
+ aria-required="true"
42
+ required
43
+ >
44
+ <span class="o-forms-input__label terms-auth-first-step">
45
+ I confirm that I am 16 years or older and agree to the full
46
+ <a class="ncf__link--external"
47
+ href="http://help.ft.com/help/legal-privacy/terms-conditions/"
48
+ target="_blank"
49
+ rel="noopener noreferrer"
50
+ data-trackable="terms-and-conditions"
51
+ >
52
+ Terms &amp; Conditions
53
+ </a>
54
+ .
55
+ </span>
56
+ <p class="o-forms-input__error">
57
+ Please accept our terms &amp; conditions
58
+ </p>
59
+ </label>
60
+ </div>
61
+ `;
62
+
63
+ exports[`AcceptTerms renders appropriately if a isAuthFirstPayment 1`] = `
64
+ <div id="acceptTermsField"
65
+ class="o-forms-field o-layout-typography ncf__validation-error"
66
+ data-validate="required,checked"
67
+ >
68
+ <ul class="o-typography-list ncf__accept-terms-list">
69
+ </ul>
70
+ <label class="o-forms-input o-forms-input--checkbox"
71
+ for="termsAcceptance"
72
+ >
73
+ <input type="checkbox"
74
+ id="termsAcceptance"
75
+ name="termsAcceptance"
76
+ value="true"
77
+ data-trackable="field-terms"
78
+ aria-required="true"
79
+ required
80
+ >
81
+ <span class="o-forms-input__label">
82
+ I agree to the above terms &amp; conditions.
83
+ </span>
84
+ <p class="o-forms-input__error">
85
+ Please accept our terms &amp; conditions
86
+ </p>
87
+ </label>
88
+ </div>
89
+ `;
90
+
3
91
  exports[`AcceptTerms renders appropriately if a registration 1`] = `
4
92
  <div id="acceptTermsField"
5
93
  class="o-forms-field o-layout-typography ncf__validation-error"
@@ -72,7 +160,7 @@ exports[`AcceptTerms renders appropriately if a signup 1`] = `
72
160
  </li>
73
161
  <li>
74
162
  <span class="terms-signup">
75
- By placing my order, my subscription will start immediately. Cancellation notice would take effect at the end of the subscription period and previously paid amounts are non-refundable.
163
+ By placing my order, my subscription will start immediately and I am aware and agree that I will therefore lose my statutory right to cancel my subscription within 14 days of acceptance of my order. Any notice of cancellation that I provide will only take effect at the end of my subscription period and previously paid amounts are non-refundable, except in the event that there is a fault in the provision of the services.
76
164
  </span>
77
165
  </li>
78
166
  <li>
@@ -146,7 +234,7 @@ exports[`AcceptTerms renders appropriately if a signup and has special terms 1`]
146
234
  </li>
147
235
  <li>
148
236
  <span class="terms-signup">
149
- By placing my order, my subscription will start immediately. Cancellation notice would take effect at the end of the subscription period and previously paid amounts are non-refundable.
237
+ By placing my order, my subscription will start immediately and I am aware and agree that I will therefore lose my statutory right to cancel my subscription within 14 days of acceptance of my order. Any notice of cancellation that I provide will only take effect at the end of my subscription period and previously paid amounts are non-refundable, except in the event that there is a fault in the provision of the services.
150
238
  </span>
151
239
  </li>
152
240
  <li>
@@ -408,7 +496,7 @@ exports[`AcceptTerms renders appropriately if a signup not for the print product
408
496
  </li>
409
497
  <li>
410
498
  <span class="terms-signup">
411
- By placing my order, my subscription will start immediately. Cancellation notice would take effect at the end of the subscription period and previously paid amounts are non-refundable.
499
+ By placing my order, my subscription will start immediately and I am aware and agree that I will therefore lose my statutory right to cancel my subscription within 14 days of acceptance of my order. Any notice of cancellation that I provide will only take effect at the end of my subscription period and previously paid amounts are non-refundable, except in the event that there is a fault in the provision of the services.
412
500
  </span>
413
501
  </li>
414
502
  <li>
@@ -482,7 +570,7 @@ exports[`AcceptTerms renders appropriately if a signup not for the print product
482
570
  </li>
483
571
  <li>
484
572
  <span class="terms-signup">
485
- By placing my order, my subscription will start immediately. Cancellation notice would take effect at the end of the subscription period and previously paid amounts are non-refundable.
573
+ By placing my order, my subscription will start immediately and I am aware and agree that I will therefore lose my statutory right to cancel my subscription within 14 days of acceptance of my order. Any notice of cancellation that I provide will only take effect at the end of my subscription period and previously paid amounts are non-refundable, except in the event that there is a fault in the provision of the services.
486
574
  </span>
487
575
  </li>
488
576
  <li>
@@ -556,7 +644,7 @@ exports[`AcceptTerms renders appropriately if a signup not for the print product
556
644
  </li>
557
645
  <li>
558
646
  <span class="terms-signup">
559
- By placing my order, my subscription will start immediately. Cancellation notice would take effect at the end of the subscription period and previously paid amounts are non-refundable.
647
+ By placing my order, my subscription will start immediately and I am aware and agree that I will therefore lose my statutory right to cancel my subscription within 14 days of acceptance of my order. Any notice of cancellation that I provide will only take effect at the end of my subscription period and previously paid amounts are non-refundable, except in the event that there is a fault in the provision of the services.
560
648
  </span>
561
649
  </li>
562
650
  <li>
@@ -1155,7 +1243,7 @@ exports[`AcceptTerms renders appropriately if is transition with transition type
1155
1243
  </li>
1156
1244
  <li>
1157
1245
  <span class="terms-transition terms-transition--immediate">
1158
- By placing my order, my subscription will start immediately. Cancellation notice would take effect at the end of the subscription period and previously paid amounts are non-refundable.
1246
+ By placing my order, my subscription will start immediately and I am aware and agree that I will therefore lose my statutory right to cancel my subscription within 14 days of acceptance of my order. Any notice of cancellation that I provide will only take effect at the end of my subscription period and previously paid amounts are non-refundable, except in the event that there is a fault in the provision of the services.
1159
1247
  </span>
1160
1248
  </li>
1161
1249
  <li>
@@ -25,6 +25,7 @@ exports[`AppBanner renders 1`] = `
25
25
  <a href="https://itunes.apple.com/app/apple-store/id1200842933?pt=246269&amp;ct=onsite-app-promotion&amp;mt=8"
26
26
  target="_blank"
27
27
  role="link"
28
+ rel="noreferrer"
28
29
  >
29
30
  <img src="https://www.ft.com/__assets/creatives/tour/apps/ios-download.svg"
30
31
  alt="Download from the iOS App store"
@@ -36,6 +37,7 @@ exports[`AppBanner renders 1`] = `
36
37
  <a href="https://play.google.com/store/apps/details?id=com.ft.news&amp;referrer=utm_source%3Donsite-app-promotion%26utm_campaign%3DOnsite%2520Messaging"
37
38
  target="_blank"
38
39
  role="link"
40
+ rel="noreferrer"
39
41
  >
40
42
  <img src="https://www.ft.com/__origami/service/image/v2/images/raw/https%253A%252F%252Fwww.ft.com%252F__assets%252Fcreatives%252Ftour%252Fapps%252Fgoogle-play-badge-3x.png?source=ip-envoy"
41
43
  height="35"
@@ -29,7 +29,7 @@ exports[`Confirmation renders appropriately if is B2C Partnership 1`] = `
29
29
  <a class="ncf__link ncf__link--external"
30
30
  href="https://www.ft.com/myaccount/personal-details"
31
31
  target="_blank"
32
- rel="noopener"
32
+ rel="noopener noreferrer"
33
33
  data-trackable="yourAccount"
34
34
  >
35
35
  account settings
@@ -86,7 +86,7 @@ exports[`Confirmation renders appropriately if is trial 1`] = `
86
86
  <a class="ncf__link ncf__link--external"
87
87
  href="https://www.ft.com/myaccount/personal-details"
88
88
  target="_blank"
89
- rel="noopener"
89
+ rel="noopener noreferrer"
90
90
  data-trackable="yourAccount"
91
91
  >
92
92
  account settings
@@ -141,7 +141,7 @@ exports[`Confirmation renders appropriately if nextActionBottom is not supplied
141
141
  <a class="ncf__link ncf__link--external"
142
142
  href="https://www.ft.com/myaccount/personal-details"
143
143
  target="_blank"
144
- rel="noopener"
144
+ rel="noopener noreferrer"
145
145
  data-trackable="yourAccount"
146
146
  >
147
147
  account settings
@@ -196,7 +196,7 @@ exports[`Confirmation renders appropriately if nextActionBottom is supplied 1`]
196
196
  <a class="ncf__link ncf__link--external"
197
197
  href="https://www.ft.com/myaccount/personal-details"
198
198
  target="_blank"
199
- rel="noopener"
199
+ rel="noopener noreferrer"
200
200
  data-trackable="yourAccount"
201
201
  >
202
202
  account settings
@@ -252,7 +252,7 @@ exports[`Confirmation renders appropriately if nextActionTop is not supplied 1`]
252
252
  <a class="ncf__link ncf__link--external"
253
253
  href="https://www.ft.com/myaccount/personal-details"
254
254
  target="_blank"
255
- rel="noopener"
255
+ rel="noopener noreferrer"
256
256
  data-trackable="yourAccount"
257
257
  >
258
258
  account settings
@@ -308,7 +308,7 @@ exports[`Confirmation renders appropriately if nextActionTop is supplied 1`] = `
308
308
  <a class="ncf__link ncf__link--external"
309
309
  href="https://www.ft.com/myaccount/personal-details"
310
310
  target="_blank"
311
- rel="noopener"
311
+ rel="noopener noreferrer"
312
312
  data-trackable="yourAccount"
313
313
  >
314
314
  account settings
@@ -377,7 +377,7 @@ exports[`Confirmation renders with complete details 1`] = `
377
377
  <a class="ncf__link ncf__link--external"
378
378
  href="https://www.ft.com/myaccount/personal-details"
379
379
  target="_blank"
380
- rel="noopener"
380
+ rel="noopener noreferrer"
381
381
  data-trackable="yourAccount"
382
382
  >
383
383
  account settings
@@ -432,7 +432,7 @@ exports[`Confirmation renders with custom email 1`] = `
432
432
  <a class="ncf__link ncf__link--external"
433
433
  href="https://www.ft.com/myaccount/personal-details"
434
434
  target="_blank"
435
- rel="noopener"
435
+ rel="noopener noreferrer"
436
436
  data-trackable="yourAccount"
437
437
  >
438
438
  account settings
@@ -487,7 +487,7 @@ exports[`Confirmation renders with default props 1`] = `
487
487
  <a class="ncf__link ncf__link--external"
488
488
  href="https://www.ft.com/myaccount/personal-details"
489
489
  target="_blank"
490
- rel="noopener"
490
+ rel="noopener noreferrer"
491
491
  data-trackable="yourAccount"
492
492
  >
493
493
  account settings
@@ -553,7 +553,7 @@ exports[`Confirmation renders with details missing a description 1`] = `
553
553
  <a class="ncf__link ncf__link--external"
554
554
  href="https://www.ft.com/myaccount/personal-details"
555
555
  target="_blank"
556
- rel="noopener"
556
+ rel="noopener noreferrer"
557
557
  data-trackable="yourAccount"
558
558
  >
559
559
  account settings
@@ -621,7 +621,7 @@ exports[`Confirmation renders with direct debit mandate URL 1`] = `
621
621
  <a class="ncf__link ncf__link--external"
622
622
  href="https://www.ft.com/myaccount/personal-details"
623
623
  target="_blank"
624
- rel="noopener"
624
+ rel="noopener noreferrer"
625
625
  data-trackable="yourAccount"
626
626
  >
627
627
  account settings
@@ -185,7 +185,7 @@ exports[`DeliveryAddress renders with country different than default 1`] = `
185
185
  >
186
186
  <span class="o-forms-title">
187
187
  <span class="o-forms-title__main">
188
- Apt/Floor/Suite
188
+ APT/FL/STE
189
189
  </span>
190
190
  <span class="o-forms-title__prompt">
191
191
  Max. 6 characters. Please enter “Apartment 2C” as “Apt 2C”, “Floor 10 as FL 10”
@@ -197,7 +197,7 @@ exports[`DeliveryAddress renders with country different than default 1`] = `
197
197
  name="deliveryAddressLine3"
198
198
  data-trackable="field-deliveryAddressLine3"
199
199
  autocomplete="address-line3"
200
- placeholder="e.g Apt 2c / FL 10 / STE 5"
200
+ placeholder="e.g Apt 2C / FL 10 / STE 50"
201
201
  maxlength="50"
202
202
  value
203
203
  >
@@ -71,9 +71,6 @@ exports[`GraduationDate renders with default props 1`] = `
71
71
  name="graduationDateYear"
72
72
  aria-required="false"
73
73
  >
74
- <option value="2017">
75
- 2017
76
- </option>
77
74
  <option value="2018">
78
75
  2018
79
76
  </option>
@@ -98,6 +95,9 @@ exports[`GraduationDate renders with default props 1`] = `
98
95
  <option value="2025">
99
96
  2025
100
97
  </option>
98
+ <option value="2026">
99
+ 2026
100
+ </option>
101
101
  </select>
102
102
  </span>
103
103
  </div>
@@ -23,7 +23,7 @@ exports[`RegistrationConfirmation renders with a custom email 1`] = `
23
23
  <a class="ncf__link ncf__link--external"
24
24
  href="https://www.ft.com/myaccount/personal-details"
25
25
  target="_blank"
26
- rel="noopener"
26
+ rel="noopener noreferrer"
27
27
  data-trackable="yourAccount"
28
28
  >
29
29
  account settings
@@ -70,7 +70,7 @@ exports[`RegistrationConfirmation renders with default props 1`] = `
70
70
  <a class="ncf__link ncf__link--external"
71
71
  href="https://www.ft.com/myaccount/personal-details"
72
72
  target="_blank"
73
- rel="noopener"
73
+ rel="noopener noreferrer"
74
74
  data-trackable="yourAccount"
75
75
  >
76
76
  account settings
@@ -4,7 +4,9 @@ import classNames from 'classnames';
4
4
 
5
5
  const DEFAULT_AGE_RESTRICTION = '16';
6
6
 
7
- export function AcceptTerms({
7
+ export function AcceptTerms ({
8
+ isAuthFirstAccount = false,
9
+ isAuthFirstPayment = false,
8
10
  hasError = false,
9
11
  isSignup = false,
10
12
  isRegister = false,
@@ -46,6 +48,54 @@ export function AcceptTerms({
46
48
  ...(isChecked && { defaultChecked: true }),
47
49
  };
48
50
 
51
+ const authFirstStepTerms = (
52
+ <>
53
+ <ul className="o-typography-list ncf__accept-terms-list">
54
+ <li>
55
+ <span className="terms-auth-first-step">
56
+ For more information about how we use your data, please refer to our <a
57
+ className="ncf__link--external"
58
+ href="http://help.ft.com/help/legal-privacy/terms-conditions/"
59
+ target='_blank'
60
+ rel="noopener noreferrer"
61
+ data-trackable="terms-and-conditions"
62
+ >
63
+ privacy
64
+ </a> and&nbsp;
65
+ <a
66
+ className="ncf__link--external"
67
+ href="http://help.ft.com/help/legal-privacy/terms-conditions/"
68
+ target='_blank'
69
+ rel="noopener noreferrer"
70
+ data-trackable="terms-and-conditions"
71
+ >
72
+ cookie
73
+ </a> policies.
74
+ </span>
75
+ </li>
76
+ </ul>
77
+ <label className={labelClassName} htmlFor="termsAcceptance">
78
+ <input {...inputProps} />
79
+ <span className="o-forms-input__label terms-auth-first-step">
80
+ I confirm that I am {ageRestriction} years or older and agree to the full {' '}
81
+ <a
82
+ className="ncf__link--external"
83
+ href="http://help.ft.com/help/legal-privacy/terms-conditions/"
84
+ target={isEmbedded ? '_top' : '_blank'}
85
+ rel="noopener noreferrer"
86
+ data-trackable="terms-and-conditions"
87
+ >
88
+ Terms &amp; Conditions
89
+ </a>
90
+ .
91
+ </span>
92
+ <p className="o-forms-input__error">
93
+ Please accept our terms &amp; conditions
94
+ </p>
95
+ </label>
96
+ </>
97
+ );
98
+
49
99
  const registerTerms = (
50
100
  <label className={labelClassName} htmlFor="termsAcceptance">
51
101
  <input {...inputProps} />
@@ -154,9 +204,12 @@ export function AcceptTerms({
154
204
  {transitionType === 'immediate' ? (
155
205
  <li>
156
206
  <span className="terms-transition terms-transition--immediate">
157
- By placing my order, my subscription will start immediately.
158
- Cancellation notice would take effect at the end of the subscription
159
- period and previously paid amounts are non-refundable.
207
+ By placing my order, my subscription will start immediately and I am
208
+ aware and agree that I will therefore lose my statutory right to cancel my
209
+ subscription within 14 days of acceptance of my order. Any notice of
210
+ cancellation that I provide will only take effect at the end of my subscription
211
+ period and previously paid amounts are non-refundable, except in the event that
212
+ there is a fault in the provision of the services.
160
213
  </span>
161
214
  </li>
162
215
  ) : (
@@ -192,6 +245,7 @@ export function AcceptTerms({
192
245
  const printSignupTermText = isTrial
193
246
  ? 'Credits for delivery suspension or delivery failure are not available during introductory offer periods.'
194
247
  : 'Credit for delivery suspensions is only available for hand-delivered subscriptions and is limited to a maximum of 24 issues per yearly subscription terms (4 issues per yearly FT Weekend subscription term).';
248
+
195
249
  const signupTerms = isSignup && (
196
250
  <>
197
251
  {isPrintProduct ? (
@@ -234,10 +288,12 @@ export function AcceptTerms({
234
288
  </li>
235
289
  <li>
236
290
  <span className="terms-signup">
237
- By placing my order, my subscription will start immediately.
238
- Cancellation notice would take effect at the end of the
239
- subscription period and previously paid amounts are
240
- non-refundable.
291
+ By placing my order, my subscription will start immediately and I am
292
+ aware and agree that I will therefore lose my statutory right to cancel
293
+ my subscription within 14 days of acceptance of my order. Any notice of
294
+ cancellation that I provide will only take effect at the end of my
295
+ subscription period and previously paid amounts are non-refundable,
296
+ except in the event that there is a fault in the provision of the services.
241
297
  </span>
242
298
  </li>
243
299
  <li>
@@ -294,10 +350,12 @@ export function AcceptTerms({
294
350
  b2cPartnershipTerms
295
351
  ) : isRegister ? (
296
352
  registerTerms
353
+ ) : isAuthFirstAccount ? (
354
+ authFirstStepTerms
297
355
  ) : (
298
356
  <>
299
357
  <ul className="o-typography-list ncf__accept-terms-list">
300
- {b2bTerms}
358
+ {!isAuthFirstPayment && b2bTerms}
301
359
  {corpSignupTerms}
302
360
  {transitionTerms}
303
361
  {signupTerms}
@@ -16,6 +16,18 @@ describe('AcceptTerms', () => {
16
16
  expect(AcceptTerms).toRenderCorrectly(props);
17
17
  });
18
18
 
19
+ it('renders appropriately if a isAuthFirstAccount', () => {
20
+ const props = { isAuthFirstAccount: true };
21
+
22
+ expect(AcceptTerms).toRenderCorrectly(props);
23
+ });
24
+
25
+ it('renders appropriately if a isAuthFirstPayment', () => {
26
+ const props = { isAuthFirstPayment: true };
27
+
28
+ expect(AcceptTerms).toRenderCorrectly(props);
29
+ });
30
+
19
31
  it('renders appropriately if a signup', () => {
20
32
  const props = { isSignup: true };
21
33
 
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
 
3
- export function AppBanner() {
3
+ export function AppBanner () {
4
4
  return (
5
5
  <div id="appBanner" className="ncf ncf__app-banner">
6
6
  <div className="ncf__app-banner-inner">
@@ -21,6 +21,7 @@ export function AppBanner() {
21
21
  href="https://itunes.apple.com/app/apple-store/id1200842933?pt=246269&ct=onsite-app-promotion&mt=8"
22
22
  target="_blank"
23
23
  role="link"
24
+ rel="noreferrer"
24
25
  >
25
26
  <img
26
27
  src="https://www.ft.com/__assets/creatives/tour/apps/ios-download.svg"
@@ -34,6 +35,7 @@ export function AppBanner() {
34
35
  href="https://play.google.com/store/apps/details?id=com.ft.news&referrer=utm_source%3Donsite-app-promotion%26utm_campaign%3DOnsite%2520Messaging"
35
36
  target="_blank"
36
37
  role="link"
38
+ rel="noreferrer"
37
39
  >
38
40
  <img
39
41
  src="https://www.ft.com/__origami/service/image/v2/images/raw/https%253A%252F%252Fwww.ft.com%252F__assets%252Fcreatives%252Ftour%252Fapps%252Fgoogle-play-badge-3x.png?source=ip-envoy"
@@ -1,10 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
 
4
- export function B2CPartnershipConfirmation ({
5
- ctaElement = null,
6
- }) {
7
-
4
+ export function B2CPartnershipConfirmation ({ ctaElement = null }) {
8
5
  const readingLinkProps = {
9
6
  href: '/',
10
7
  className: 'ncf__link',
@@ -37,10 +34,13 @@ export function B2CPartnershipConfirmation ({
37
34
  content.
38
35
  </p>
39
36
 
40
- {ctaElement ||
37
+ {ctaElement || (
41
38
  <p className="ncf__paragraph ncf__center">
42
- <a className="ncf__button ncf__button--submit" href="/myft">Go to myFT</a>
43
- </p>}
39
+ <a className="ncf__button ncf__button--submit" href="/myft">
40
+ Go to myFT
41
+ </a>
42
+ </p>
43
+ )}
44
44
 
45
45
  <p className="ncf__paragraph ncf__center">
46
46
  <a {...readingLinkProps}>Start reading</a>
@@ -55,7 +55,6 @@ export function B2CPartnershipConfirmation ({
55
55
  );
56
56
  }
57
57
 
58
-
59
58
  B2CPartnershipConfirmation.propTypes = {
60
59
  ctaElement: PropTypes.node,
61
60
  };
@@ -5,7 +5,7 @@ expect.extend(expectToRenderCorrectly);
5
5
 
6
6
  describe('B2CPartnershipConfirmation', () => {
7
7
  it('renders as default', () => {
8
- const props = {ctaElement: 'hello'};
8
+ const props = { ctaElement: 'hello' };
9
9
 
10
10
  expect(B2CPartnershipConfirmation).toRenderCorrectly(props);
11
11
  });
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
 
4
- export function B2cPartnershipPaymentTerm({
4
+ export function B2cPartnershipPaymentTerm ({
5
5
  fieldId = 'paymentTermField',
6
6
  inputName = 'paymentTerm',
7
7
  options = [],
@@ -30,7 +30,10 @@ export function B2cPartnershipPaymentTerm({
30
30
  {options.map(
31
31
  (option) =>
32
32
  option.selected && (
33
- <div className="ncf__payment-term__item o-forms-input--radio-round" key={option.value}>
33
+ <div
34
+ className="ncf__payment-term__item o-forms-input--radio-round"
35
+ key={option.value}
36
+ >
34
37
  <input
35
38
  type="radio"
36
39
  id={option.value}
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
3
3
  import classNames from 'classnames';
4
4
  import { getCountries } from '../utils/countries';
5
5
 
6
- export function BillingCountry({
6
+ export function BillingCountry ({
7
7
  fieldId = 'billingCountryField',
8
8
  filterList = [],
9
9
  hasError = false,
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import classNames from 'classnames';
4
4
 
5
- export function BillingPostcode({
5
+ export function BillingPostcode ({
6
6
  postcodeReference,
7
7
  value = '',
8
8
  pattern = null,
@@ -87,7 +87,9 @@ describe('CompanyName', () => {
87
87
  it('renders as required field', () => {
88
88
  const component = mount(CompanyName({}));
89
89
 
90
- expect(component.find('#companyNameField').hasClass('o-forms-field--optional')).toBe(false);
90
+ expect(
91
+ component.find('#companyNameField').hasClass('o-forms-field--optional')
92
+ ).toBe(false);
91
93
  expect(component.find('input#companyName').prop('required')).toBe(true);
92
94
  });
93
95
 
@@ -102,7 +104,9 @@ describe('CompanyName', () => {
102
104
 
103
105
  const component = mount(CompanyName(props));
104
106
 
105
- expect(component.find('#companyNameField').hasClass('o-forms-field--optional')).toBe(true);
107
+ expect(
108
+ component.find('#companyNameField').hasClass('o-forms-field--optional')
109
+ ).toBe(true);
106
110
  expect(component.find('input#companyName').prop('required')).toBe(false);
107
111
  });
108
112
 
@@ -111,6 +115,8 @@ describe('CompanyName', () => {
111
115
 
112
116
  const component = mount(CompanyName(props));
113
117
 
114
- expect(component.find('#companyNameField').hasClass('ncf__hidden')).toBe(true);
118
+ expect(component.find('#companyNameField').hasClass('ncf__hidden')).toBe(
119
+ true
120
+ );
115
121
  });
116
122
  });
@@ -92,7 +92,7 @@ export function Confirmation ({
92
92
  className="ncf__link ncf__link--external"
93
93
  href="https://www.ft.com/myaccount/personal-details"
94
94
  target="_blank"
95
- rel="noopener"
95
+ rel="noopener noreferrer"
96
96
  data-trackable="yourAccount"
97
97
  >
98
98
  account settings
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
 
4
- export function ContinueReading({
4
+ export function ContinueReading ({
5
5
  link = null,
6
6
  quote = '',
7
7
  isEmbedded = false,
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
3
3
  import classNames from 'classnames';
4
4
  import { getCountries } from '../utils/countries';
5
5
 
6
- export function Country({
6
+ export function Country ({
7
7
  fieldId = 'countryField',
8
8
  filterList = [],
9
9
  hasError = false,
@@ -52,7 +52,8 @@ export function Country({
52
52
  const fieldErrorClassNames = classNames([
53
53
  'o-forms-input__error',
54
54
  {
55
- 'additional-field-information__with-field-error': additionalFieldInformation,
55
+ 'additional-field-information__with-field-error':
56
+ additionalFieldInformation,
56
57
  },
57
58
  ]);
58
59
 
@@ -6,7 +6,7 @@ const DEFAULT_HEADER_TEXT = 'Sorry, this is not available online';
6
6
  const DEFAULT_MESSAGE_TEXT =
7
7
  'Speak now to our Customer Care team to discuss your options';
8
8
 
9
- export function CustomerCare({
9
+ export function CustomerCare ({
10
10
  header = DEFAULT_HEADER_TEXT,
11
11
  isCompact = false,
12
12
  message = DEFAULT_MESSAGE_TEXT,
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
 
4
- export function Debug({ isTest = false, showHelpers = false, links = {} }) {
4
+ export function Debug ({ isTest = false, showHelpers = false, links = {} }) {
5
5
  // Strings are used rather than JSX as this component is injected into HTML
6
6
  // along with onclick handlers, styles and javascript. JSX will escape and
7
7
  // modify the HTML which we do not want. Once our applications are on JSX