Skip to content

Commit 4a6aab4

Browse files
authored
feat(DF-789): render unavailable view when form is offline (#398)
* feat(DF-789): render unavailable view when form is offline * chore: update @defra/forms-model dependency to version 3.0.663 in package.json and package-lock.json * chore: fix CI check failures (formatting, linting, and typing) * test: increase coverage for form offline feature * chore: add full stop to unavailable message and reiterate registration order comment
1 parent 3ddb572 commit 4a6aab4

14 files changed

Lines changed: 369 additions & 52 deletions

package-lock.json

Lines changed: 5 additions & 38 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
},
8888
"license": "SEE LICENSE IN LICENSE",
8989
"dependencies": {
90-
"@defra/forms-model": "^3.0.655",
90+
"@defra/forms-model": "^3.0.663",
9191
"@defra/hapi-tracing": "^1.29.0",
9292
"@defra/interactive-map": "^0.0.22-alpha",
9393
"@elastic/ecs-pino-format": "^1.5.0",

src/server/index.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ describe('Model cache', () => {
2727
let server: Server
2828

2929
const getCacheSize = () => {
30-
return server.app.models.size
30+
return server.app.models?.size ?? 0
3131
}
3232

3333
const getCacheItem = (key: string) => {
34-
return server.app.models.get(key)
34+
return server.app.models?.get(key)
3535
}
3636

3737
beforeAll(async () => {
@@ -43,7 +43,7 @@ describe('Model cache', () => {
4343

4444
beforeEach(() => {
4545
jest.mocked(getFormMetadata).mockResolvedValue(fixtures.form.metadata)
46-
server.app.models.clear()
46+
server.app.models?.clear()
4747
})
4848

4949
afterAll(async () => {

src/server/plugins/engine/beta/form-context.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { type Request, type Server } from '@hapi/hapi'
33
import { isEqual } from 'date-fns'
44

55
import { PREVIEW_PATH_PREFIX } from '~/src/server/constants.js'
6+
import { assertFormAvailable } from '~/src/server/plugins/engine/form-availability.js'
67
import {
78
checkEmailAddressForLiveFormSubmission,
89
getCacheService
@@ -52,6 +53,7 @@ export async function getFormModel(
5253
const formState = resolveState(state)
5354

5455
const metadata = await formsService.getFormMetadata(slug)
56+
assertFormAvailable(metadata)
5557

5658
const definition = await formsService.getFormDefinition(
5759
metadata.id,
@@ -134,6 +136,7 @@ export async function resolveFormModel(
134136
const { formsService } = services
135137

136138
const metadata = await formsService.getFormMetadata(slug)
139+
assertFormAvailable(metadata)
137140
const formState = resolveState(state)
138141
const isPreview = options.isPreview ?? isPreviewState(state, options)
139142
const stateMetadata = metadata[formState]
@@ -145,15 +148,10 @@ export async function resolveFormModel(
145148
}
146149

147150
// The models cache is created lazily per server instance
148-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
149-
if (!server.app.models) {
150-
server.app.models = new Map<string, { model: FormModel; updatedAt: Date }>()
151-
}
152151

153-
const cache = server.app.models as Map<
154-
string,
155-
{ model: FormModel; updatedAt: Date }
156-
>
152+
server.app.models ??= new Map<string, { model: FormModel; updatedAt: Date }>()
153+
154+
const cache = server.app.models
157155

158156
const cacheKey = `${metadata.id}_${formState}_${isPreview}`
159157
let entry = cache.get(cacheKey)

src/server/plugins/engine/components/helpers/geospatial.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ export function getGeospatialSchema(country?: GeospatialFieldOptionsCountry) {
116116
return value
117117
}
118118

119-
const result = booleanWithin(value, countryFeature)
119+
const result = booleanWithin(value as Geometry | Feature, countryFeature)
120120

121121
if (!result) {
122122
return helpers.error('any.custom', {

0 commit comments

Comments
 (0)