DEFRA/ivory-front-office

View on GitHub
server/modules/common/person/name/person-name.handlers.js

Summary

Maintainability
A
0 mins
Test Coverage
const Joi = require('@hapi/joi')

class PersonNameHandlers extends require('defra-hapi-handlers') {
  get maxNameLength () {
    return 100
  }

  get schema () {
    return Joi.object({
      'full-name': Joi.string().trim().max(this.maxNameLength).required()
    })
  }

  get errorMessages () {
    return {
      'full-name': {
        'any.required': 'Enter your full name',
        'string.empty': 'Enter your full name',
        'string.max': `Enter your full name in ${this.maxNameLength} characters or less`
      }
    }
  }

  async fullNameLabel () {
    return 'Enter your full name'
  }

  // Overrides parent class handleGet
  async handleGet (request, h, errors) {
    const { Person } = this
    const person = await Person.get(request) || {}
    this.viewData = {
      'full-name': person.fullName,
      'full-name-label': await this.fullNameLabel(request)
    }
    return super.handleGet(request, h, errors)
  }

  // Overrides parent class handlePost
  async handlePost (request, h) {
    const { Person } = this
    const person = await Person.get(request) || {}
    person.fullName = request.payload['full-name']
    await Person.set(request, person)
    return super.handlePost(request, h)
  }
}

module.exports = PersonNameHandlers