hmpo-date-controller
A controller for the hmpo-form-wizard that provides out-of-the-box
support for hmpo-template-mixins' 'input-date' mixin. It is a drop-in
replacement for the standard controller and, if need be, can be
inherited from in your custom controllers.
The functionality in this module could, at some point, be merged into
hmpo-form-controller as that already has knowledge of the date
component fields provided by input-date.
Main Benefits
- No more silly custom controllers just so that date fields can be
handled.
- The date validators from hmpo-form-controller can finally be
leaveraged, giving us easy validation on date fields. (e.g. Date must
not be in the future, person must be over 18 etc.)
- No more date components in the steps definition. (Surely a source of
confusion for new developers?)
- The date components are also validated individually allowing a missing
month, let's say, to be highlighted directly. The validators are
automatically applied and come from hmpo-form-controller. i.e.
'date-year', 'date-month' and 'date-day'. This gives the developer a
lot of date validation for free helping to avoid bugs in their forms.
Quality Assurance
The controller's functionality is fully documented in the unit test.
Whilst this is the first version of this module the code coverage is
100% as measured by [Istanbul]. This is tested for in CI to ensure new
changes do not introduce untested code.
Linting is also checked in CI using the .eslintrc
from
hmpo-form-controller.
Migrating from HOF's date-controller
If you were using HOF's date-controller then you would have had a custom
controller which declared a single field as being the only date field.
You will also have added the date components to your steps definition.
None of this is required in hmpo-date-controller so your migration is
more about deleting this redundant code.
e.g. Consider the following steps definition:
[...]
'/step-one': {
controller: require('dob-controller'),
fields: [
'fullname',
'date-of-birth',
'date-of-birth-day',
'date-of-birth-month',
'date-of-birth-year',
'nationality'
],
next:
'/step-two'
},
[...]
This can now become simply:
[...]
'/step-one': {
fields: [
'fullname',
'date-of-birth',
'nationality'
],
next:
'/step-two'
},
[...]
This of course means that you are now free to have more than one date
field per step.
If you were doing any validation on the date you might need to add it to
the definition for the field.
The only thing left to do is to ensure the default controller is, or
inherits from, hmpo-date-controller.