UNPKG

@defra/wls-eps-web-service

Version:

The web service for wildlife licencing of European Protected Species

71 lines (61 loc) 2.9 kB
import Joi from 'joi' import pageRoute from '../../../routes/page-route.js' import { permissionsURIs } from '../../../uris.js' import { APIRequests } from '../../../services/api-requests.js' import { checkApplication } from '../../common/check-application.js' import { PowerPlatformKeys } from '@defra/wls-powerapps-keys' import { SECTION_TASKS } from '../../tasklist/general-sections.js' import { isCompleteOrConfirmed } from '../../common/tag-functions.js' const noPermissionRadio = 'no-permission' const otherPermissionRadio = 'other-reason' const { NO_PERMISSION_REQUIRED: { PERMITTED_DEVELOPMENT, HEALTH_AND_SAFETY, OTHER } } = PowerPlatformKeys export const getData = async request => { const { applicationId } = await request.cache().getData() const permissionDetails = await APIRequests.PERMISSION.getPermissionDetailsById(applicationId) const noPermissionRequired = permissionDetails?.noPermissionReason const noPermissionRequiredReason = permissionDetails?.noPermissionDescription return { PERMITTED_DEVELOPMENT, HEALTH_AND_SAFETY, OTHER, noPermissionRequired, noPermissionRequiredReason } } export const validator = async payload => { if (!payload[noPermissionRadio]) { Joi.assert(payload, Joi.object({ 'no-permission': Joi.any().required() }).options({ abortEarly: false, allowUnknown: true })) } if (OTHER === parseInt(payload[noPermissionRadio])) { Joi.assert(payload, Joi.object({ 'other-reason': Joi.string().trim().required().max(100) }).options({ abortEarly: false, allowUnknown: true })) } } export const setData = async request => { const journeyData = await request.cache().getData() const { applicationId } = journeyData const noPermissionReason = parseInt(request.payload[noPermissionRadio]) const noPermissionDescription = request.payload[otherPermissionRadio] const permissionDetails = await APIRequests.PERMISSION.getPermissionDetailsById(applicationId) let payload = { ...permissionDetails, noPermissionReason } if (noPermissionReason === OTHER) { payload = { ...payload, noPermissionDescription } } await APIRequests.PERMISSION.updatePermissionsSection(applicationId, payload) journeyData.permissionData = { ...journeyData.permissionData || {}, noPermissionReason, noPermissionDescription } await request.cache().setData(journeyData) } export const completion = async request => { const { applicationId } = await request.cache().getData() const tagState = await APIRequests.APPLICATION.tags(applicationId).get(SECTION_TASKS.PERMISSIONS) if (isCompleteOrConfirmed(tagState)) { return permissionsURIs.CHECK_YOUR_ANSWERS.uri } return permissionsURIs.POTENTIAL_CONFLICTS.uri } export default pageRoute({ page: permissionsURIs.WHY_NO_PERMISSIONS.page, uri: permissionsURIs.WHY_NO_PERMISSIONS.uri, checkData: checkApplication, validator, getData, setData, completion })