Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Runner #20

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions address-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ async function findByPostcode (key, postcode) {

const results = payload.results.map(item => item.DPA)

let addresses = results
const addresses = results

return addresses
.map(item => {
return {
uprn: item.UPRN,
postcode: item.POSTCODE,
address: item.ADDRESS,
item: item
item
}
})
}
Expand Down
43 changes: 22 additions & 21 deletions client/ukaddressfield.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
var $components = document.querySelectorAll('.uk-address-component')
const $components = document.querySelectorAll('.uk-address-component')

$components.forEach(function (component) {
var form = component.parentNode.parentNode
var lookup = component.querySelector('.uk-address-lookup')
var manual = component.querySelector('.uk-address-manual')
var submitButton = form.querySelector('button[type=submit]')
var lookupQuery = form.querySelector('.uk-address-query')
var lookupSelector = form.querySelector('.uk-address-selector')
var postcode = lookupQuery.querySelector('input.postcode-query')
var lookupButton = lookupQuery.querySelector('button.postcode-lookup')
var postcodeDisplay = lookupSelector.querySelector('.postcode-query-display')
var selector = lookupSelector.querySelector('.uk-address-selector select')
var lookupLinks = form.querySelectorAll('.postcode-query-link')
var manualLink = form.querySelector('.postcode-manual-link')
const form = component.parentNode.parentNode
const lookup = component.querySelector('.uk-address-lookup')
const manual = component.querySelector('.uk-address-manual')
const submitButton = form.querySelector('button[type=submit]')
const lookupQuery = form.querySelector('.uk-address-query')
const lookupSelector = form.querySelector('.uk-address-selector')
const postcode = lookupQuery.querySelector('input.postcode-query')
const lookupButton = lookupQuery.querySelector('button.postcode-lookup')
const postcodeDisplay = lookupSelector.querySelector('.postcode-query-display')
const selector = lookupSelector.querySelector('.uk-address-selector select')
const lookupLinks = form.querySelectorAll('.postcode-query-link')
const manualLink = form.querySelector('.postcode-manual-link')

if (!component.querySelector('.uk-address-manual .govuk-form-group--error')) {
showLookup()
Expand All @@ -22,7 +22,7 @@ $components.forEach(function (component) {

lookupButton.addEventListener('click', function (e) {
e.preventDefault()
var postcodeQuery = postcode.value.trim().toUpperCase()
const postcodeQuery = postcode.value.trim().toUpperCase()

if (!postcodeQuery) {
return showManual()
Expand All @@ -34,9 +34,9 @@ $components.forEach(function (component) {
return
}

var label = results.length + ' Address' + (results.length > 1 ? 'es' : '') + ' found'
const label = results.length + ' Address' + (results.length > 1 ? 'es' : '') + ' found'

var options = '<option>' + label + '</option>'
let options = '<option>' + label + '</option>'

results.forEach(function (result) {
options += '<option value="' + result.uprn + '">' + result.address + '</option>'
Expand All @@ -53,9 +53,9 @@ $components.forEach(function (component) {
})

selector.addEventListener('change', function (e) {
var results = selector._results
var value = selector.value
var result = results.find(result => result.uprn === value).item
const results = selector._results
const value = selector.value
const result = results.find(result => result.uprn === value).item
// console.log(result)
form.querySelector('[name$="premises"]').value = result.BUILDING_NUMBER || result.BUILDING_NAME || ''
form.querySelector('[name$="street"]').value = result.THOROUGHFARE_NAME || ''
Expand Down Expand Up @@ -92,14 +92,15 @@ $components.forEach(function (component) {
})

function getJSON (url, callback) {
var request = new window.XMLHttpRequest()
const request = new window.XMLHttpRequest()
request.open('GET', url, true)

request.onload = function () {
if (request.status >= 200 && request.status < 400) {
let data
// Success!
try {
var data = JSON.parse(request.responseText)
data = JSON.parse(request.responseText)
} catch (err) {
callback(err)
return
Expand Down
10 changes: 5 additions & 5 deletions components/checkboxesfield.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ class CheckboxesField extends FormComponent {
const list = model.lists.find(list => list.name === options.list)
const items = list.items
const values = items.map(item => item.value)
const itemSchema = joi[list.type]().valid(values)
const itemsSchema = joi.array().items(itemSchema)
const alternatives = joi.alternatives([itemSchema, itemsSchema])
const itemSchema = joi[list.type]().valid(...values)
const itemsSchema = joi.array().items(itemSchema).single()
// const alternatives = joi.alternatives([itemSchema, itemsSchema])

this.list = list
this.items = items
this.formSchema = helpers.buildFormSchema(alternatives, this, options.required !== false)
this.stateSchema = helpers.buildStateSchema(alternatives, this)
this.formSchema = helpers.buildFormSchema(itemsSchema, this, options.required !== false)
this.stateSchema = helpers.buildStateSchema(itemsSchema, this)
}

getFormSchemaKeys () {
Expand Down
52 changes: 28 additions & 24 deletions components/factory.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ function getBaseFormFieldViewModel (component, formData, errors) {
classes: 'govuk-label--s'
},
id: name,
name: name,
name,
value: formData[name]
}

Expand Down Expand Up @@ -631,11 +631,11 @@ const makeComponentTypes = {

// Component collection
const childFormComponentList = [
{ type: 'TextField', name: `premises`, title: 'Premises', schema: { max: 100 }, options: { required: options.required } },
{ type: 'TextField', name: `street`, title: 'Street', schema: { max: 100, allow: '' }, options: { required: false } },
{ type: 'TextField', name: `locality`, title: 'Locality', schema: { max: 100, allow: '' }, options: { required: false } },
{ type: 'TextField', name: `town`, title: 'Town', schema: { max: 100 }, options: { required: options.required } },
{ type: 'TextField', name: `postcode`, title: 'Postcode', schema: { max: 10 }, options: { required: options.required } }
{ type: 'TextField', name: 'premises', title: 'Premises', schema: { max: 100 }, options: { required: options.required } },
{ type: 'TextField', name: 'street', title: 'Street', schema: { max: 100, allow: '' }, options: { required: false } },
{ type: 'TextField', name: 'locality', title: 'Locality', schema: { max: 100, allow: '' }, options: { required: false } },
{ type: 'TextField', name: 'town', title: 'Town', schema: { max: 100 }, options: { required: options.required } },
{ type: 'TextField', name: 'postcode', title: 'Postcode', schema: { max: 10 }, options: { required: options.required } }
]
const stateComponents = makeComponentCollection(childFormComponentList, def)

Expand Down Expand Up @@ -669,26 +669,30 @@ const makeComponentTypes = {
},
getStateFromValidForm (payload) {
return {
[name]: payload[`${name}__premises`] ? {
premises: payload[`${name}__premises`],
street: payload[`${name}__street`],
locality: payload[`${name}__locality`],
town: payload[`${name}__town`],
postcode: payload[`${name}__postcode`]
} : null
[name]: payload[`${name}__premises`]
? {
premises: payload[`${name}__premises`],
street: payload[`${name}__street`],
locality: payload[`${name}__locality`],
town: payload[`${name}__town`],
postcode: payload[`${name}__postcode`]
}
: null
}
},
getDisplayStringFromState (state) {
const value = state[name]
return value ? [
value.premises,
value.street,
value.locality,
value.town,
value.postcode
].filter(p => {
return !!p
}).join(', ') : ''
return value
? [
value.premises,
value.street,
value.locality,
value.town,
value.postcode
].filter(p => {
return !!p
}).join(', ')
: ''
},
getViewModel (formData, errors) {
const viewModel = getBaseFormFieldViewModel(component, formData, errors)
Expand Down Expand Up @@ -764,10 +768,10 @@ function makeComponent (componentDef, def) {
const schema = componentDef.schema

Object.assign(component, {
name: name,
name,
hint: componentDef.hint,
title: componentDef.title,
schema: schema,
schema,
getFormSchemaKeys () { return { [name]: joi.any() } },
getStateSchemaKeys () { return { [name]: joi.any() } },
getFormDataFromState (state) {
Expand Down
2 changes: 1 addition & 1 deletion components/helpers.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const joi = require('joi')

function buildSchema (type, keys) {
let schema = type.isJoi ? type : joi[type]()
let schema = joi.isSchema(type) ? type : joi[type]()

Object.keys(keys).forEach(key => {
const val = keys[key]
Expand Down
2 changes: 1 addition & 1 deletion components/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class FormComponent extends Component {
classes: 'govuk-label--s'
},
id: name,
name: name,
name,
value: formData[name]
}

Expand Down
4 changes: 2 additions & 2 deletions components/radiosfield.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ class RadiosField extends FormComponent {
const list = model.lists.find(list => list.name === options.list)
const items = list.items
const values = items.map(item => item.value)
const formSchema = helpers.buildFormSchema(list.type, this, options.required !== false).valid(values)
const stateSchema = helpers.buildStateSchema(list.type, this).valid(values)
const formSchema = helpers.buildFormSchema(list.type, this, options.required !== false).valid(...values)
const stateSchema = helpers.buildStateSchema(list.type, this).valid(...values)

this.list = list
this.items = items
Expand Down
2 changes: 1 addition & 1 deletion components/selectfield.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class SelectField extends FormComponent {
const items = list.items
const values = items.map(item => item.value)
const formSchema = helpers.buildFormSchema('string'/* list.type */, this) // .valid(values)
const stateSchema = helpers.buildStateSchema(list.type, this).valid(values)
const stateSchema = helpers.buildStateSchema(list.type, this).valid(...values)

this.list = list
this.items = items
Expand Down
2 changes: 1 addition & 1 deletion components/timefield.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ class TimeField extends FormComponent {
const { options } = this

if (!options.classes) {
options.classes = 'govuk-input--width-4'
options.classes = 'govuk-input--width-10'
}
}

Expand Down
46 changes: 25 additions & 21 deletions components/ukaddressfield.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ class UkAddressField extends FormComponent {
const stateSchema = helpers.buildStateSchema('date', this)

const childrenList = [
{ type: 'TextField', name: `premises`, title: 'Premises', schema: { max: 100 }, options: { required: options.required } },
{ type: 'TextField', name: `street`, title: 'Street', schema: { max: 100, allow: '' }, options: { required: false } },
{ type: 'TextField', name: `locality`, title: 'Locality', schema: { max: 100, allow: '' }, options: { required: false } },
{ type: 'TextField', name: `town`, title: 'Town', schema: { max: 100 }, options: { required: options.required } },
{ type: 'TextField', name: `postcode`, title: 'Postcode', schema: { max: 10 }, options: { required: options.required } }
{ type: 'TextField', name: 'premises', title: 'Premises', schema: { max: 100 }, options: { required: options.required } },
{ type: 'TextField', name: 'street', title: 'Street', schema: { max: 100, allow: '' }, options: { required: false } },
{ type: 'TextField', name: 'locality', title: 'Locality', schema: { max: 100, allow: '' }, options: { required: false } },
{ type: 'TextField', name: 'town', title: 'Town', schema: { max: 100 }, options: { required: options.required } },
{ type: 'TextField', name: 'postcode', title: 'Postcode', schema: { max: 10 }, options: { required: options.required } }
]

const stateChildren = new ComponentCollection(childrenList, model)
Expand Down Expand Up @@ -61,28 +61,32 @@ class UkAddressField extends FormComponent {
// parts together constitute a valid date.
// E.g. 31 November is not a valid date
const name = this.name
return payload[`${name}__premises`] ? {
premises: payload[`${name}__premises`],
street: payload[`${name}__street`],
locality: payload[`${name}__locality`],
town: payload[`${name}__town`],
postcode: payload[`${name}__postcode`]
} : null
return payload[`${name}__premises`]
? {
premises: payload[`${name}__premises`],
street: payload[`${name}__street`],
locality: payload[`${name}__locality`],
town: payload[`${name}__town`],
postcode: payload[`${name}__postcode`]
}
: null
}

getDisplayStringFromState (state) {
const name = this.name
const value = state[name]

return value ? [
value.premises,
value.street,
value.locality,
value.town,
value.postcode
].filter(p => {
return !!p
}).join(', ') : ''
return value
? [
value.premises,
value.street,
value.locality,
value.town,
value.postcode
].filter(p => {
return !!p
}).join(', ')
: ''
}

getViewModel (formData, errors) {
Expand Down
4 changes: 2 additions & 2 deletions components/yesnofield.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ class YesNoField extends FormComponent {
const list = model.lists.find(list => list.name === options.list)
const items = list.items
const values = items.map(item => item.value)
const formSchema = helpers.buildFormSchema(list.type, this, options.required !== false).valid(values)
const stateSchema = helpers.buildStateSchema(list.type, this).valid(values)
const formSchema = helpers.buildFormSchema(list.type, this, options.required !== false).valid(...values)
const stateSchema = helpers.buildStateSchema(list.type, this).valid(...values)

this.list = list
this.items = items
Expand Down
20 changes: 10 additions & 10 deletions helpers.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
function proceed (request, h, nextUrl, force) {
let url = nextUrl
const url = nextUrl

const returnUrl = request.query.returnUrl
if (returnUrl) {
if (force) {
const hasQuery = ~url.indexOf('?')
url += (hasQuery ? '&' : '?') + 'returnUrl=' + returnUrl
} else {
url = returnUrl
}
}
// const returnUrl = request.query.returnUrl
// if (returnUrl) {
// if (force) {
// const hasQuery = ~url.indexOf('?')
// url += (hasQuery ? '&' : '?') + 'returnUrl=' + returnUrl
// } else {
// url = returnUrl
// }
// }

return h.redirect(url)
}
Expand Down
8 changes: 4 additions & 4 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
const joi = require('joi')
const boom = require('boom')
const boom = require('@hapi/boom')
const pkg = require('./package.json')
const addressService = require('./address-service')

module.exports = {
plugin: {
name: pkg.name,
version: pkg.version,
dependencies: 'vision',
dependencies: '@hapi/vision',
register: (server, options) => {
const { model, ordnanceSurveyKey } = options

Expand Down Expand Up @@ -36,9 +36,9 @@ module.exports = {
},
options: {
validate: {
query: {
query: joi.object().keys({
postcode: joi.string().required()
}
})
}
}
})
Expand Down
Loading