UNPKG

@defra/wls-eps-web-service

Version:

The web service for wildlife licencing of European Protected Species

101 lines (88 loc) 3.59 kB
import Joi from 'joi' import pageRoute from '../../../routes/page-route.js' import { workActivityURIs } from '../../../uris.js' import { APIRequests } from '../../../services/api-requests.js' import { PowerPlatformKeys } from '@defra/wls-powerapps-keys' import { checkApplication } from '../../common/check-application.js' const exemptDetails = 'exempt-details' const { PAYMENT_EXEMPT_REASON: { PRESERVING_PUBLIC_HEALTH_AND_SAFETY, PREVENT_DAMAGE_TO_LIVESTOCK_CROPS_TIMBER_OR_PROPERTY, HOUSEHOLDER_HOME_IMPROVEMENTS, SCIENTIFIC_RESEARCH_OR_EDUCATION, CONSERVATION_OF_PROTECTED_SPECIES, CONSERVATION_OF_A_MONUMENT_OR_BUILDING, OTHER } } = PowerPlatformKeys export const getData = async request => { const { applicationId } = await request.cache().getData() const pageData = await request.cache().getPageData() const applicationData = await APIRequests.APPLICATION.getById(applicationId) let paymentExemptReasonExplanation = '' if (pageData?.payload[exemptDetails]) { paymentExemptReasonExplanation = pageData.payload[exemptDetails] } else if (applicationData?.paymentExemptReasonExplanation) { paymentExemptReasonExplanation = applicationData.paymentExemptReasonExplanation } return { radioChecked: applicationData?.paymentExemptReason, paymentExemptReasonExplanation, PRESERVING_PUBLIC_HEALTH_AND_SAFETY, PREVENT_DAMAGE_TO_LIVESTOCK_CROPS_TIMBER_OR_PROPERTY, HOUSEHOLDER_HOME_IMPROVEMENTS, SCIENTIFIC_RESEARCH_OR_EDUCATION, CONSERVATION_OF_PROTECTED_SPECIES, CONSERVATION_OF_A_MONUMENT_OR_BUILDING, OTHER } } export const setData = async request => { const { applicationId } = await request.cache().getData() const applicationData = await APIRequests.APPLICATION.getById(applicationId) let newData = {} if (parseInt(request.payload[workActivityURIs.PAYMENT_EXEMPT_REASON.page]) === OTHER) { newData = Object.assign( applicationData, { paymentExemptReason: parseInt(request.payload[workActivityURIs.PAYMENT_EXEMPT_REASON.page]), paymentExemptReasonExplanation: request.payload[exemptDetails] }) } else { newData = Object.assign( applicationData, { paymentExemptReason: parseInt(request.payload[workActivityURIs.PAYMENT_EXEMPT_REASON.page]) }) // If you've changed an answer, we want to ensure we don't retain the // `paymentExemptReasonExplanation` from a past answer delete newData.paymentExemptReasonExplanation } await APIRequests.APPLICATION.update(applicationId, newData) } export const validator = async payload => { if (!payload[workActivityURIs.PAYMENT_EXEMPT_REASON.page]) { Joi.assert(payload, Joi.object({ 'work-payment-exempt-reason': Joi.any().required() }).options({ abortEarly: false, allowUnknown: true })) } if ((parseInt(payload[workActivityURIs.PAYMENT_EXEMPT_REASON.page])) === OTHER) { Joi.assert(payload, Joi.object({ // JS post message here sends line breaks with \r\n (CRLF) but the Gov.uk prototypes counts newlines as \n // Which leads to a mismatch on the character count as // '\r\n'.length == 2 // '\n'.length == 1 [exemptDetails]: Joi.string().required().trim().replace('\r\n', '\n').max(4000) }).options({ abortEarly: false, allowUnknown: true })) } } export default pageRoute({ uri: workActivityURIs.PAYMENT_EXEMPT_REASON.uri, page: workActivityURIs.PAYMENT_EXEMPT_REASON.page, completion: workActivityURIs.WORK_CATEGORY.uri, checkData: checkApplication, getData, validator, setData })