@defra-fish/gafl-webapp-service
Version:
The websales frontend for the GAFL service
431 lines (402 loc) • 9.58 kB
JavaScript
import {
LICENCE_LENGTH,
LICENCE_TO_START,
LICENCE_START_TIME,
DATE_OF_BIRTH,
NO_LICENCE_REQUIRED,
LICENCE_TYPE,
LICENCE_FOR,
NAME,
DISABILITY_CONCESSION,
ADDRESS_LOOKUP,
ADDRESS_SELECT,
ADDRESS_ENTRY,
LICENCE_FULFILMENT,
LICENCE_CONFIRMATION_METHOD,
CHECK_CONFIRMATION_CONTACT,
CONTACT,
NEWSLETTER,
CONTACT_SUMMARY,
LICENCE_SUMMARY,
TERMS_AND_CONDITIONS,
AGREED,
PAYMENT_CANCELLED,
PAYMENT_FAILED,
ORDER_COMPLETE,
LICENCE_DETAILS,
IDENTIFY,
RENEWAL_INACTIVE,
RENEWAL_START_DATE,
CHOOSE_PAYMENT,
SET_UP_PAYMENT,
LICENCE_NOT_FOUND
} from '../uri.js'
import { CommonResults, CONTACT_SUMMARY_SEEN, ShowDigitalLicencePages } from '../constants.js'
import { licenceTypeResults } from '../pages/licence-details/licence-type/result-function.js'
import { licenceToStartResults } from '../pages/licence-details/licence-to-start/result-function.js'
import { addressLookupResults } from '../pages/contact/address/lookup/result-function.js'
import { ageConcessionResults } from '../pages/concessions/date-of-birth/result-function.js'
import { licenceLengthResults } from '../pages/licence-details/licence-length/result-function.js'
import { isPhysical } from '../processors/licence-type-display.js'
/**
* The structure of each atom is as follows
* current - the current page
* next - the page the use proceeds to as a consequence of the results of result-function for the page
* backLink - the location the back link, a uri literal, a function of the current status of a function of the status and transaction
*/
export default [
{
current: { page: 'start' },
next: {
[CommonResults.OK]: {
page: LICENCE_FOR
}
}
},
{
current: LICENCE_FOR,
next: {
[CommonResults.OK]: {
page: NAME
},
[CommonResults.SUMMARY]: {
page: LICENCE_SUMMARY
}
},
backLink: s => (s.fromSummary ? LICENCE_SUMMARY.uri : null)
},
{
current: NAME,
next: {
[CommonResults.OK]: {
page: DATE_OF_BIRTH
},
[CommonResults.SUMMARY]: {
page: LICENCE_SUMMARY
}
},
backLink: s => (s.fromSummary ? LICENCE_SUMMARY.uri : LICENCE_FOR.uri)
},
{
current: DATE_OF_BIRTH,
next: {
[CommonResults.OK]: {
page: DISABILITY_CONCESSION
},
[ageConcessionResults.NO_LICENCE_REQUIRED]: {
page: NO_LICENCE_REQUIRED
},
[CommonResults.SUMMARY]: {
page: LICENCE_SUMMARY
}
},
backLink: s => (s.fromSummary ? LICENCE_SUMMARY.uri : NAME.uri)
},
{
current: DISABILITY_CONCESSION,
next: {
[CommonResults.OK]: {
page: LICENCE_TO_START
},
[CommonResults.SUMMARY]: {
page: LICENCE_SUMMARY
}
},
backLink: s => (s.fromSummary ? LICENCE_SUMMARY.uri : DATE_OF_BIRTH.uri)
},
{
current: LICENCE_TO_START,
next: {
[CommonResults.OK]: {
page: LICENCE_TYPE
},
[ageConcessionResults.NO_LICENCE_REQUIRED]: {
page: NO_LICENCE_REQUIRED
},
[licenceToStartResults.AND_START_TIME]: {
page: LICENCE_START_TIME
},
[CommonResults.SUMMARY]: {
page: LICENCE_SUMMARY
}
},
backLink: s => (s.fromSummary ? LICENCE_SUMMARY.uri : DISABILITY_CONCESSION.uri)
},
{
current: NO_LICENCE_REQUIRED,
backLink: DATE_OF_BIRTH.uri
},
{
current: LICENCE_TYPE,
next: {
[licenceTypeResults.ASK_LICENCE_LENGTH]: {
page: LICENCE_LENGTH
},
[licenceTypeResults.SKIP_LICENCE_LENGTH]: {
page: LICENCE_SUMMARY
},
[CommonResults.SUMMARY]: {
page: LICENCE_SUMMARY
}
},
backLink: s => (s.fromSummary ? LICENCE_SUMMARY.uri : LICENCE_TO_START.uri)
},
{
current: LICENCE_LENGTH,
next: {
[CommonResults.OK]: {
page: LICENCE_SUMMARY
},
[licenceLengthResults.REQUIRE_TIME]: {
page: LICENCE_START_TIME
},
[CommonResults.SUMMARY]: {
page: LICENCE_SUMMARY
}
},
backLink: s => (s.fromSummary ? LICENCE_SUMMARY.uri : LICENCE_TYPE.uri)
},
{
current: LICENCE_START_TIME,
next: {
[CommonResults.OK]: {
page: LICENCE_SUMMARY
},
[CommonResults.SUMMARY]: {
page: LICENCE_SUMMARY
}
},
backLink: s => (s.fromSummary ? LICENCE_TO_START.uri : LICENCE_LENGTH.uri)
},
{
current: LICENCE_SUMMARY,
next: {
[CommonResults.OK]: {
page: ADDRESS_LOOKUP
},
[CommonResults.SUMMARY]: {
page: CONTACT_SUMMARY
},
[ShowDigitalLicencePages.YES]: {
page: LICENCE_FULFILMENT
}
}
},
{
current: ADDRESS_LOOKUP,
next: {
[addressLookupResults.FOUND_SOME]: {
page: ADDRESS_SELECT
},
[addressLookupResults.FOUND_NONE]: {
page: ADDRESS_ENTRY
}
},
backLink: s => (s.fromSummary === CONTACT_SUMMARY_SEEN ? CONTACT_SUMMARY.uri : LICENCE_SUMMARY.uri)
},
{
current: ADDRESS_ENTRY,
next: {
[ShowDigitalLicencePages.YES]: {
page: LICENCE_FULFILMENT
},
[ShowDigitalLicencePages.NO]: {
page: CONTACT
},
[CommonResults.SUMMARY]: {
page: CONTACT_SUMMARY
}
},
backLink: s => (s.fromSummary === CONTACT_SUMMARY_SEEN ? CONTACT_SUMMARY.uri : ADDRESS_LOOKUP.uri)
},
{
current: ADDRESS_SELECT,
next: {
[ShowDigitalLicencePages.YES]: {
page: LICENCE_FULFILMENT
},
[ShowDigitalLicencePages.NO]: {
page: CONTACT
},
[CommonResults.SUMMARY]: {
page: CONTACT_SUMMARY
}
},
backLink: ADDRESS_LOOKUP.uri
},
{
current: LICENCE_FULFILMENT,
next: {
[CommonResults.OK]: {
page: LICENCE_CONFIRMATION_METHOD
},
[CommonResults.SUMMARY]: {
page: LICENCE_CONFIRMATION_METHOD
}
},
backLink: (status, permission) => {
if (status.fromSummary === CONTACT_SUMMARY_SEEN) {
return CONTACT_SUMMARY.uri
} else if (permission?.isRenewal) {
return LICENCE_SUMMARY.uri
} else {
return ADDRESS_LOOKUP.uri
}
}
},
{
current: LICENCE_CONFIRMATION_METHOD,
next: {
[CommonResults.OK]: {
page: CHECK_CONFIRMATION_CONTACT
},
[CommonResults.SUMMARY]: {
page: CONTACT
}
},
backLink: s => {
const seenContactSummary = s.fromSummary === CONTACT_SUMMARY_SEEN
if (
([LICENCE_FULFILMENT.page, LICENCE_CONFIRMATION_METHOD.page].includes(s.currentPage) && seenContactSummary) ||
!seenContactSummary
) {
return LICENCE_FULFILMENT.uri
}
return CONTACT_SUMMARY.uri
}
},
{
current: CHECK_CONFIRMATION_CONTACT,
next: {
[CommonResults.OK]: {
page: CONTACT
}
},
backLink: LICENCE_CONFIRMATION_METHOD.uri
},
{
current: CONTACT,
next: {
[CommonResults.OK]: {
page: NEWSLETTER
},
[CommonResults.SUMMARY]: {
page: CONTACT_SUMMARY
}
},
backLink: (status, transaction) => {
const contactSummarySeen = status.fromSummary === CONTACT_SUMMARY_SEEN
if (status.currentPage === LICENCE_CONFIRMATION_METHOD.page && contactSummarySeen) {
return LICENCE_CONFIRMATION_METHOD.uri
} else if (contactSummarySeen) {
return CONTACT_SUMMARY.uri
} else if (isPhysical(transaction)) {
return LICENCE_CONFIRMATION_METHOD.uri
}
return ADDRESS_LOOKUP.uri
}
},
{
current: NEWSLETTER,
next: {
[CommonResults.OK]: {
page: CONTACT_SUMMARY
}
},
backLink: s => (s.fromSummary === CONTACT_SUMMARY_SEEN ? CONTACT_SUMMARY.uri : CONTACT.uri)
},
{
current: CONTACT_SUMMARY,
next: {
[CommonResults.OK]: {
page: TERMS_AND_CONDITIONS
}
}
},
// This is the end of the journey. The rest is handled by the agreed handler
// and the transaction is locked
{
current: TERMS_AND_CONDITIONS,
next: {
[CommonResults.OK]: {
page: AGREED
},
[CommonResults.RECURRING]: {
page: CHOOSE_PAYMENT
}
},
backLink: CONTACT_SUMMARY.uri
},
{
current: CHOOSE_PAYMENT,
next: {
[CommonResults.OK]: {
page: AGREED
},
[CommonResults.RECURRING]: {
page: SET_UP_PAYMENT
}
},
backLink: TERMS_AND_CONDITIONS.uri
},
{
current: SET_UP_PAYMENT,
next: {
[CommonResults.OK]: {
page: AGREED
}
},
backLink: CHOOSE_PAYMENT.uri
},
{
current: PAYMENT_CANCELLED,
next: {
[CommonResults.OK]: {
page: AGREED
}
}
},
{
current: PAYMENT_FAILED,
next: {
[CommonResults.OK]: {
page: AGREED
}
}
},
{
current: RENEWAL_INACTIVE,
next: {
[CommonResults.OK]: {
page: LICENCE_LENGTH
}
},
backLink: IDENTIFY.uri
},
{
current: ORDER_COMPLETE,
backLink: ORDER_COMPLETE.uri
},
{
current: LICENCE_DETAILS,
backLink: ORDER_COMPLETE.uri
},
// This is the authentication journey
{
current: IDENTIFY,
next: {
[CommonResults.OK]: {
page: LICENCE_SUMMARY
}
}
},
{
current: LICENCE_NOT_FOUND,
backLink: IDENTIFY.uri
},
// The change start time is handled directly - not via the controller, as it has dynamic validation
{
current: RENEWAL_START_DATE,
backLink: LICENCE_SUMMARY.uri
}
]