@benwatsonuk/govuk-pages-plugin 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/LICENCE.txt +21 -0
- package/README.md +192 -0
- package/dist/assets/images/arrow.svg +27 -0
- package/dist/assets/images/page-types/arrow-base.svg +13 -0
- package/dist/assets/images/page-types/arrow-head.svg +13 -0
- package/dist/assets/images/page-types/check-answers.svg +142 -0
- package/dist/assets/images/page-types/checkbox-input.svg +85 -0
- package/dist/assets/images/page-types/confirmation.svg +73 -0
- package/dist/assets/images/page-types/content-page.svg +84 -0
- package/dist/assets/images/page-types/email.svg +56 -0
- package/dist/assets/images/page-types/radio-input.svg +115 -0
- package/dist/assets/images/page-types/start-page.svg +101 -0
- package/dist/assets/images/page-types/task-list.svg +179 -0
- package/dist/assets/images/page-types/text-input.svg +65 -0
- package/dist/assets/javascripts/all.js +1 -0
- package/dist/assets/styles/all.scss +2 -0
- package/dist/assets/styles/scss/_pages.scss +169 -0
- package/dist/assets/styles/scss/_variables.scss +19 -0
- package/dist/functions/pages/getPages.js +9 -0
- package/dist/functions/stages/getStages.js +65 -0
- package/dist/index.js +39 -0
- package/dist/schema.json +89 -0
- package/dist/types.js +2 -0
- package/dist/validate.js +27 -0
- package/dist/views/page-index.html +34 -0
- package/dist/views/stage-index.html +41 -0
- package/govuk-prototype-kit.config.json +12 -0
- package/index.js +22 -0
- package/package.json +43 -0
- package/src/assets/images/arrow.svg +27 -0
- package/src/assets/images/page-types/arrow-base.svg +13 -0
- package/src/assets/images/page-types/arrow-head.svg +13 -0
- package/src/assets/images/page-types/check-answers.svg +142 -0
- package/src/assets/images/page-types/checkbox-input.svg +85 -0
- package/src/assets/images/page-types/confirmation.svg +73 -0
- package/src/assets/images/page-types/content-page.svg +84 -0
- package/src/assets/images/page-types/email.svg +56 -0
- package/src/assets/images/page-types/radio-input.svg +115 -0
- package/src/assets/images/page-types/start-page.svg +101 -0
- package/src/assets/images/page-types/task-list.svg +179 -0
- package/src/assets/images/page-types/text-input.svg +65 -0
- package/src/assets/javascripts/all.js +1 -0
- package/src/assets/styles/all.scss +2 -0
- package/src/assets/styles/scss/_pages.scss +169 -0
- package/src/assets/styles/scss/_variables.scss +19 -0
- package/src/functions/pages/getPages.ts +7 -0
- package/src/functions/stages/getStages.ts +78 -0
- package/src/index.ts +40 -0
- package/src/schema.json +89 -0
- package/src/types.ts +40 -0
- package/src/validate.ts +35 -0
- package/src/views/page-index.html +34 -0
- package/src/views/stage-index.html +41 -0
- package/test/data/outputs.ts +197 -0
- package/test/data/pages.ts +61 -0
- package/test/data/stages.ts +87 -0
- package/test/getPages.test.js +19 -0
- package/test/getStages.test.js +46 -0
- package/tsconfig.json +14 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
export const getPagesTest = {
|
|
2
|
+
output: [
|
|
3
|
+
{
|
|
4
|
+
id: 1,
|
|
5
|
+
title: "Title 1",
|
|
6
|
+
type: "email",
|
|
7
|
+
description: "A description about item 1",
|
|
8
|
+
route: "/a/a/1",
|
|
9
|
+
stage: {
|
|
10
|
+
main: "stage1",
|
|
11
|
+
subStage: 1,
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
id: 2,
|
|
16
|
+
title: 'Title 2',
|
|
17
|
+
type: 'email',
|
|
18
|
+
description: 'A description about item 2',
|
|
19
|
+
route: '/b/b/2',
|
|
20
|
+
stage: {
|
|
21
|
+
main: "stage2",
|
|
22
|
+
subStage: 2,
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: 3,
|
|
27
|
+
title: 'Title 3',
|
|
28
|
+
type: 'email',
|
|
29
|
+
description: 'A description about item 3',
|
|
30
|
+
route: '/a/b/3'
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const getStagesTest = {
|
|
36
|
+
output: [
|
|
37
|
+
{
|
|
38
|
+
id: "stage1",
|
|
39
|
+
title: "Stage 1",
|
|
40
|
+
description: "A description about stage 1",
|
|
41
|
+
route: "/a",
|
|
42
|
+
subStages: [
|
|
43
|
+
{
|
|
44
|
+
id: 1,
|
|
45
|
+
title: "Sub-stage 1-1",
|
|
46
|
+
description: "A description about sub-stage 1-1",
|
|
47
|
+
route: "/a/a",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: 2,
|
|
51
|
+
title: "Sub-stage 1-2",
|
|
52
|
+
description: "A description about sub-stage 1-2",
|
|
53
|
+
route: "/a/b",
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
},{
|
|
57
|
+
id: "stage2",
|
|
58
|
+
title: "Stage 2",
|
|
59
|
+
description: "A description about stage 2",
|
|
60
|
+
route: "/b",
|
|
61
|
+
subStages: [
|
|
62
|
+
{
|
|
63
|
+
id: 1,
|
|
64
|
+
title: "Sub-stage 2-1",
|
|
65
|
+
description: "A description about sub-stage 2-1",
|
|
66
|
+
route: "/b/a",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: 2,
|
|
70
|
+
title: "Sub-stage 2-2",
|
|
71
|
+
description: "A description about sub-stage 2-2",
|
|
72
|
+
route: "/b/b",
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export const getStagesWithPagesTestA = {
|
|
80
|
+
output: [
|
|
81
|
+
{
|
|
82
|
+
id: "unassigned",
|
|
83
|
+
title: "Unassigned",
|
|
84
|
+
description: "Pages not assigned to any stage or sub-stage",
|
|
85
|
+
pages: [
|
|
86
|
+
{
|
|
87
|
+
id: 1,
|
|
88
|
+
title: "Title 1",
|
|
89
|
+
type: "email",
|
|
90
|
+
description: "A description about item 1",
|
|
91
|
+
route: "/a/a/1",
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: 2,
|
|
95
|
+
title: "Title 2",
|
|
96
|
+
type: "email",
|
|
97
|
+
description: "A description about item 2",
|
|
98
|
+
route: "/a/b/2",
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
}]
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export const getStagesWithPagesTestB = {
|
|
105
|
+
output: [
|
|
106
|
+
{
|
|
107
|
+
id: "stage1",
|
|
108
|
+
title: "Stage 1",
|
|
109
|
+
description: "A description about stage 1",
|
|
110
|
+
subStages: [
|
|
111
|
+
{
|
|
112
|
+
id: 1,
|
|
113
|
+
title: "Sub-stage 1-1",
|
|
114
|
+
description: "A description about sub-stage 1-1",
|
|
115
|
+
pages: [
|
|
116
|
+
{
|
|
117
|
+
id: 1,
|
|
118
|
+
title: "Title 1",
|
|
119
|
+
type: "email",
|
|
120
|
+
description: "A description about item 1",
|
|
121
|
+
route: "/a/a/1",
|
|
122
|
+
stage: {
|
|
123
|
+
main: "stage1",
|
|
124
|
+
subStage: 1,
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
pages: [
|
|
131
|
+
{
|
|
132
|
+
id: 1,
|
|
133
|
+
title: "Title 1",
|
|
134
|
+
type: "email",
|
|
135
|
+
description: "A description about item 1",
|
|
136
|
+
route: "/a/a/1",
|
|
137
|
+
stage: {
|
|
138
|
+
main: "stage1",
|
|
139
|
+
subStage: 1,
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
id: "stage2",
|
|
146
|
+
title: "Stage 2",
|
|
147
|
+
description: "A description about stage 2",
|
|
148
|
+
subStages: [
|
|
149
|
+
{
|
|
150
|
+
id: 2,
|
|
151
|
+
title: "Sub-stage 2-2",
|
|
152
|
+
description: "A description about sub-stage 2-2",
|
|
153
|
+
pages: [
|
|
154
|
+
{
|
|
155
|
+
id: 2,
|
|
156
|
+
title: "Title 2",
|
|
157
|
+
type: "email",
|
|
158
|
+
description: "A description about item 2",
|
|
159
|
+
route: "/b/b/2",
|
|
160
|
+
stage: {
|
|
161
|
+
main: "stage2",
|
|
162
|
+
subStage: 2,
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
},
|
|
167
|
+
],
|
|
168
|
+
pages: [
|
|
169
|
+
{
|
|
170
|
+
id: 2,
|
|
171
|
+
title: "Title 2",
|
|
172
|
+
type: "email",
|
|
173
|
+
description: "A description about item 2",
|
|
174
|
+
route: "/b/b/2",
|
|
175
|
+
stage: {
|
|
176
|
+
main: "stage2",
|
|
177
|
+
subStage: 2,
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
id: "unassigned",
|
|
184
|
+
title: "Unassigned",
|
|
185
|
+
description: "Pages not assigned to any stage or sub-stage",
|
|
186
|
+
pages: [
|
|
187
|
+
{
|
|
188
|
+
id: 3,
|
|
189
|
+
title: "Title 3",
|
|
190
|
+
type: "email",
|
|
191
|
+
description: "A description about item 3",
|
|
192
|
+
route: "/a/b/3",
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
}
|
|
196
|
+
]
|
|
197
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { PagesArray } from '../../src/types.js';
|
|
2
|
+
|
|
3
|
+
export const validPages: PagesArray = [
|
|
4
|
+
{
|
|
5
|
+
id: 1,
|
|
6
|
+
title: 'Title 1',
|
|
7
|
+
type: 'email',
|
|
8
|
+
description: 'A description about item 1',
|
|
9
|
+
route: '/a/a/1',
|
|
10
|
+
stage: {main: 'stage1', subStage: 1}
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
id: 2,
|
|
14
|
+
title: 'Title 2',
|
|
15
|
+
type: 'email',
|
|
16
|
+
description: 'A description about item 2',
|
|
17
|
+
route: '/b/b/2',
|
|
18
|
+
stage: {main: 'stage2', subStage: 2}
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: 3,
|
|
22
|
+
title: 'Title 3',
|
|
23
|
+
type: 'email',
|
|
24
|
+
description: 'A description about item 3',
|
|
25
|
+
route: '/a/b/3'
|
|
26
|
+
}
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
export const invalidPages: any = [
|
|
30
|
+
{
|
|
31
|
+
badValue: 1,
|
|
32
|
+
anotherBadValue: 'Title 1',
|
|
33
|
+
type: 'email',
|
|
34
|
+
description: 'A description about item 1',
|
|
35
|
+
route: '/a/a/1'
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
badValue: 2,
|
|
39
|
+
anotherBadValue: 'Title 2',
|
|
40
|
+
type: 'email',
|
|
41
|
+
description: 'A description about item 2',
|
|
42
|
+
route: '/a/b/2'
|
|
43
|
+
}
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
export const pagesWithNoStages: PagesArray = [
|
|
47
|
+
{
|
|
48
|
+
id: 1,
|
|
49
|
+
title: 'Title 1',
|
|
50
|
+
type: 'email',
|
|
51
|
+
description: 'A description about item 1',
|
|
52
|
+
route: '/a/a/1'
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: 2,
|
|
56
|
+
title: 'Title 2',
|
|
57
|
+
type: 'email',
|
|
58
|
+
description: 'A description about item 2',
|
|
59
|
+
route: '/a/b/2'
|
|
60
|
+
}
|
|
61
|
+
];
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { StagesArray } from '../../src/types.js';
|
|
2
|
+
|
|
3
|
+
export const validStages: StagesArray = [
|
|
4
|
+
{
|
|
5
|
+
id: 'stage1',
|
|
6
|
+
title: 'Stage 1',
|
|
7
|
+
description: 'A description about stage 1',
|
|
8
|
+
route: '/a',
|
|
9
|
+
subStages: [
|
|
10
|
+
{
|
|
11
|
+
id: 1,
|
|
12
|
+
title: 'Sub-stage 1-1',
|
|
13
|
+
description: 'A description about sub-stage 1-1',
|
|
14
|
+
route: '/a/a'
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
id: 2,
|
|
18
|
+
title: 'Sub-stage 1-2',
|
|
19
|
+
description: 'A description about sub-stage 1-2',
|
|
20
|
+
route: '/a/b'
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 'stage2',
|
|
26
|
+
title: 'Stage 2',
|
|
27
|
+
description: 'A description about stage 2',
|
|
28
|
+
route: '/b',
|
|
29
|
+
subStages: [
|
|
30
|
+
{
|
|
31
|
+
id: 1,
|
|
32
|
+
title: 'Sub-stage 2-1',
|
|
33
|
+
description: 'A description about sub-stage 2-1',
|
|
34
|
+
route: '/b/a'
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: 2,
|
|
38
|
+
title: 'Sub-stage 2-2',
|
|
39
|
+
description: 'A description about sub-stage 2-2',
|
|
40
|
+
route: '/b/b'
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
export const invalidStages: any = [
|
|
47
|
+
{
|
|
48
|
+
badValue: 'stage1',
|
|
49
|
+
anotherBadValue: 'Stage 1',
|
|
50
|
+
description: 'A description about stage 1',
|
|
51
|
+
route: '/a',
|
|
52
|
+
subStages: [
|
|
53
|
+
{
|
|
54
|
+
id: 1,
|
|
55
|
+
title: 'Sub-stage 1-1',
|
|
56
|
+
description: 'A description about sub-stage 1-1',
|
|
57
|
+
route: '/a/a'
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: 2,
|
|
61
|
+
title: 'Sub-stage 1-2',
|
|
62
|
+
description: 'A description about sub-stage 1-2',
|
|
63
|
+
route: '/a/b'
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 'stage2',
|
|
69
|
+
title: 'Stage 2',
|
|
70
|
+
description: 'A description about stage 2',
|
|
71
|
+
route: '/b',
|
|
72
|
+
subStages: [
|
|
73
|
+
{
|
|
74
|
+
id: 1,
|
|
75
|
+
title: 'Sub-stage 2-1',
|
|
76
|
+
description: 'A description about sub-stage 2-1',
|
|
77
|
+
route: '/b/a'
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: 2,
|
|
81
|
+
title: 'Sub-stage 2-2',
|
|
82
|
+
description: 'A description about sub-stage 2-2',
|
|
83
|
+
route: '/b/b'
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const expect = require('chai').expect
|
|
2
|
+
|
|
3
|
+
const getPages = require('../src/functions/pages/getPages.ts')
|
|
4
|
+
const {validPages, invalidPages} = require('./data/pages.ts')
|
|
5
|
+
const outputs = require('./data/outputs.ts')
|
|
6
|
+
|
|
7
|
+
describe('Basic getPages functions', () => {
|
|
8
|
+
describe('getPages', () => {
|
|
9
|
+
it('should return a simple array of pages when VALID pages JSON is provided', () => {
|
|
10
|
+
const result = getPages.getPages(validPages)
|
|
11
|
+
const output = outputs.getPagesTest.output
|
|
12
|
+
expect(result).to.eql(output)
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
it('should return a useful error when INVALID pages JSON is provided', () => {
|
|
16
|
+
expect(() => getPages.getPages(invalidPages)).to.throw("Invalid array of PAGES passed to govuk-pages-plugin - please check the documentation to ensure the JSON schema you are passing matches what is expected")
|
|
17
|
+
})
|
|
18
|
+
});
|
|
19
|
+
});
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
const expect = require('chai').expect
|
|
2
|
+
|
|
3
|
+
const getStages = require('../src/functions/stages/getStages.ts')
|
|
4
|
+
const {validStages, invalidStages} = require('./data/stages.ts')
|
|
5
|
+
const {validPages, invalidPages, pagesWithNoStages} = require('./data/pages.ts')
|
|
6
|
+
const outputs = require('./data/outputs.ts')
|
|
7
|
+
|
|
8
|
+
describe('Basic getStages functions', () => {
|
|
9
|
+
describe('getStages', () => {
|
|
10
|
+
it('should return a simple array of stages when VALID stages JSON is provided', () => {
|
|
11
|
+
const result = getStages.getStages(validStages)
|
|
12
|
+
const output = outputs.getStagesTest.output
|
|
13
|
+
expect(result).to.eql(output)
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
it('should return a useful error when INVALID stages JSON is provided', () => {
|
|
17
|
+
expect(() => getStages.getStages(invalidStages)).to.throw("Invalid array of STAGES passed to govuk-pages-plugin - please check the documentation to ensure the JSON schema you are passing matches what is expected")
|
|
18
|
+
})
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
describe('getStagesWithPages', () => {
|
|
22
|
+
it('should return an array of stages with pages inside when VALID stages and pages JSON are provided', () => {
|
|
23
|
+
const result = getStages.getStagesWithPages(validStages, validPages)
|
|
24
|
+
const output = outputs.getStagesWithPagesTestB.output
|
|
25
|
+
expect(result).to.eql(output)
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
it('should return an array with a single "Unassigned" stage with all unassigned pages inside when VALID stages and pages JSON are provided but pages have no parent stage', () => {
|
|
29
|
+
const result = getStages.getStagesWithPages(validStages, pagesWithNoStages)
|
|
30
|
+
const output = outputs.getStagesWithPagesTestA.output
|
|
31
|
+
expect(result).to.eql(output)
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
it('should return a useful error when INVALID stages but VALID pages JSON is provided', () => {
|
|
35
|
+
expect(() => getStages.getStagesWithPages(invalidStages, validPages)).to.throw("Invalid array of STAGES passed to govuk-pages-plugin - please check the documentation to ensure the JSON schema you are passing matches what is expected")
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
it('should return a useful error when INVALID stages and INVALID pages JSON is provided', () => {
|
|
39
|
+
expect(() => getStages.getStagesWithPages(invalidStages, invalidPages)).to.throw("Invalid array of STAGES passed to govuk-pages-plugin - please check the documentation to ensure the JSON schema you are passing matches what is expected")
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
it('should return a useful error when VALID stages and INVALID pages JSON is provided', () => {
|
|
43
|
+
expect(() => getStages.getStagesWithPages(validStages, invalidPages)).to.throw("Invalid array of PAGES passed to govuk-pages-plugin - please check the documentation to ensure the JSON schema you are passing matches what is expected")
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
});
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2019",
|
|
4
|
+
"module": "CommonJS",
|
|
5
|
+
"moduleResolution": "node",
|
|
6
|
+
"declaration": false,
|
|
7
|
+
"outDir": "dist",
|
|
8
|
+
"rootDir": "src",
|
|
9
|
+
"strict": true,
|
|
10
|
+
"esModuleInterop": true,
|
|
11
|
+
"resolveJsonModule": true
|
|
12
|
+
},
|
|
13
|
+
"include": ["src"]
|
|
14
|
+
}
|