hof 20.0.0-beta.9 → 20.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. package/.nyc_output/7c548a7f-5c40-44b2-b9fb-648341a23d6f.json +1 -0
  2. package/.nyc_output/processinfo/7c548a7f-5c40-44b2-b9fb-648341a23d6f.json +1 -0
  3. package/.nyc_output/processinfo/index.json +1 -1
  4. package/README.md +335 -256
  5. package/components/index.js +2 -1
  6. package/components/notify/index.js +60 -0
  7. package/components/notify/notify.js +25 -0
  8. package/config/sanitisation-rules.js +20 -17
  9. package/controller/base-controller.js +5 -3
  10. package/controller/controller.js +19 -4
  11. package/frontend/template-mixins/mixins/template-mixins.js +7 -3
  12. package/frontend/template-mixins/partials/forms/checkbox-group.html +10 -1
  13. package/frontend/template-mixins/partials/forms/input-text-date.html +1 -1
  14. package/frontend/template-mixins/partials/forms/input-text-group.html +5 -3
  15. package/frontend/template-mixins/partials/forms/option-group.html +9 -0
  16. package/frontend/template-mixins/partials/forms/select.html +1 -1
  17. package/frontend/template-mixins/partials/forms/textarea-group.html +2 -2
  18. package/frontend/template-partials/views/layout.html +10 -3
  19. package/frontend/template-partials/views/partials/cookie-banner.html +1 -1
  20. package/frontend/template-partials/views/partials/form.html +2 -1
  21. package/frontend/template-partials/views/partials/maincontent-left.html +2 -2
  22. package/frontend/template-partials/views/partials/navigation.html +2 -2
  23. package/frontend/template-partials/views/partials/summary-table-row.html +2 -2
  24. package/frontend/template-partials/views/partials/warn.html +7 -0
  25. package/frontend/template-partials/views/session-timeout.html +2 -1
  26. package/frontend/themes/gov-uk/styles/govuk.scss +4 -0
  27. package/frontend/themes/gov-uk/styles/modules/_validation.scss +2 -2
  28. package/frontend/toolkit/assets/javascript/form-focus.js +10 -1
  29. package/frontend/toolkit/assets/javascript/progressive-reveal.js +3 -1
  30. package/frontend/toolkit/assets/javascript/validation.js +6 -1
  31. package/index.js +1 -1
  32. package/middleware/errors.js +2 -0
  33. package/package.json +4 -2
  34. package/sandbox/apps/sandbox/fields.js +1 -0
  35. package/sandbox/apps/sandbox/index.js +1 -5
  36. package/sandbox/assets/scss/app.scss +0 -52
  37. package/sandbox/package.json +2 -0
  38. package/sandbox/public/css/app.css +4938 -4990
  39. package/sandbox/public/js/bundle.js +79 -65
  40. package/sandbox/server.js +2 -1
  41. package/sandbox/yarn.lock +39 -564
  42. package/wizard/middleware/check-progress.js +36 -1
  43. package/.nyc_output/e2fdc3eb-4fd2-47e0-a392-fe5f665776a4.json +0 -1
  44. package/.nyc_output/processinfo/e2fdc3eb-4fd2-47e0-a392-fe5f665776a4.json +0 -1
@@ -28,6 +28,41 @@ module.exports = (route, controller, steps, begin) => {
28
28
  return _.uniq(allSteps);
29
29
  };
30
30
 
31
+ // Gets all the possible routes
32
+ const walkAllPossibleSteps = (stepName, allStepsInService, allVisitedSteps) => {
33
+ const stepIncludingFieldsAndForks = allStepsInService[stepName];
34
+ if (!stepIncludingFieldsAndForks) { return; }
35
+
36
+ const forkTargets = _.map(stepIncludingFieldsAndForks.forks, 'target') || [];
37
+ const nextStep = stepIncludingFieldsAndForks.next || '';
38
+
39
+ // If there is no next step or fork, then we have reached the end of the journey
40
+ if (!forkTargets.length && !nextStep) {
41
+ allVisitedSteps.push(stepName);
42
+ // eslint-disable-next-line consistent-return
43
+ return _.uniq(allVisitedSteps);
44
+ }
45
+
46
+ const nextStepsAndForks = _.uniq(forkTargets.concat(nextStep));
47
+
48
+ // We need to transverse through all 'Next' and 'Forks' for this route
49
+ nextStepsAndForks.map(each => {
50
+ if (!allVisitedSteps.includes(each)) {
51
+ allVisitedSteps.push(each);
52
+ walkAllPossibleSteps(each, allStepsInService, allVisitedSteps);
53
+ }
54
+ });
55
+ };
56
+
57
+ // Create a list of all visited steps
58
+ const createAllVisitedSteps = (stepName, allStepsInService) => {
59
+ const allVisitedSteps = [stepName];
60
+ if (allStepsInService[stepName]) {
61
+ walkAllPossibleSteps(stepName, allStepsInService, allVisitedSteps);
62
+ }
63
+ return _.uniq(allVisitedSteps);
64
+ };
65
+
31
66
  const invalidateStep = (stepName, scopedSteps, sessionModel) => {
32
67
  debug('Invalidating', stepName);
33
68
  const step = scopedSteps[stepName] || {};
@@ -55,7 +90,7 @@ module.exports = (route, controller, steps, begin) => {
55
90
  debug('next', nextStep);
56
91
  debug('potential paths', potentialPaths);
57
92
  // if we're following a loop then allow the loop to be invalidated
58
- const whitelist = isLoop(nextStep, req.path) ? [route] : getAllPossibleSteps(nextStep, steps);
93
+ const whitelist = isLoop(nextStep, req.path) ? [route] : createAllVisitedSteps(nextStep, steps);
59
94
  // aggregate all potential journeys from the invalidating step
60
95
  const invalidateSteps = potentialPaths.reduce((arr, step) => arr.concat(getAllPossibleSteps(step, steps)), []);
61
96