@bloom-housing/ui-components 3.0.1-alpha.4 → 3.0.1-alpha.40

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.
Files changed (35) hide show
  1. package/.jest/setup-tests.js +3 -0
  2. package/CHANGELOG.md +330 -0
  3. package/package.json +4 -4
  4. package/src/actions/Button.tsx +3 -0
  5. package/src/actions/LinkButton.tsx +7 -2
  6. package/src/blocks/DashBlock.tsx +6 -1
  7. package/src/forms/DOBField.tsx +3 -0
  8. package/src/forms/Field.tsx +3 -0
  9. package/src/forms/FieldGroup.tsx +100 -16
  10. package/src/forms/HouseholdMemberForm.tsx +2 -1
  11. package/src/forms/PhoneField.tsx +2 -1
  12. package/src/forms/Select.tsx +4 -0
  13. package/src/global/forms.scss +1 -0
  14. package/src/headers/Hero.tsx +1 -1
  15. package/src/helpers/blankApplication.ts +3 -1
  16. package/src/helpers/unitTypes.ts +1 -1
  17. package/src/icons/Icon.tsx +2 -1
  18. package/src/locales/es.json +53 -6
  19. package/src/locales/general.json +192 -18
  20. package/src/locales/general_OLD.json +1 -1
  21. package/src/locales/missing-translations.ts +2 -0
  22. package/src/locales/tl.json +5 -0
  23. package/src/locales/vi.json +51 -5
  24. package/src/locales/zh.json +53 -7
  25. package/src/notifications/AlertBox.tsx +1 -1
  26. package/src/notifications/ErrorMessage.tsx +6 -1
  27. package/src/overlays/Modal.scss +4 -1
  28. package/src/overlays/Modal.tsx +5 -6
  29. package/src/page_components/listing/AdditionalFees.tsx +2 -1
  30. package/src/page_components/listing/ListingCard.tsx +1 -1
  31. package/src/page_components/listing/listing_sidebar/GetApplication.tsx +2 -1
  32. package/src/page_components/listing/listing_sidebar/Waitlist.tsx +31 -62
  33. package/src/sections/GridSection.tsx +1 -1
  34. package/src/tables/MinimalTable.tsx +2 -0
  35. package/src/tables/StandardTable.tsx +2 -1
@@ -1,4 +1,5 @@
1
1
  import "@testing-library/jest-dom/extend-expect"
2
+ import { configure } from "@testing-library/dom"
2
3
 
3
4
  import { addTranslation } from "../src/helpers/translator"
4
5
  import general from "../src/locales/general.json"
@@ -18,3 +19,5 @@ window.matchMedia = jest.fn().mockImplementation((query) => {
18
19
  })
19
20
 
20
21
  addTranslation(general)
22
+
23
+ configure({ testIdAttribute: "data-test-id" })
package/CHANGELOG.md CHANGED
@@ -3,6 +3,336 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.0.1-alpha.40](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.39...@bloom-housing/ui-components@3.0.1-alpha.40) (2021-12-10)
7
+
8
+ **Note:** Version bump only for package @bloom-housing/ui-components
9
+
10
+
11
+
12
+
13
+
14
+ ## [3.0.1-alpha.39](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.38...@bloom-housing/ui-components@3.0.1-alpha.39) (2021-12-09)
15
+
16
+ **Note:** Version bump only for package @bloom-housing/ui-components
17
+
18
+
19
+
20
+
21
+
22
+ ## [3.0.1-alpha.38](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.37...@bloom-housing/ui-components@3.0.1-alpha.38) (2021-12-09)
23
+
24
+ **Note:** Version bump only for package @bloom-housing/ui-components
25
+
26
+
27
+
28
+
29
+
30
+ ## [3.0.1-alpha.37](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.36...@bloom-housing/ui-components@3.0.1-alpha.37) (2021-12-09)
31
+
32
+ **Note:** Version bump only for package @bloom-housing/ui-components
33
+
34
+
35
+
36
+
37
+
38
+ ## [3.0.1-alpha.36](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.35...@bloom-housing/ui-components@3.0.1-alpha.36) (2021-12-09)
39
+
40
+ **Note:** Version bump only for package @bloom-housing/ui-components
41
+
42
+
43
+
44
+
45
+
46
+ ## [3.0.1-alpha.35](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.34...@bloom-housing/ui-components@3.0.1-alpha.35) (2021-12-08)
47
+
48
+ **Note:** Version bump only for package @bloom-housing/ui-components
49
+
50
+
51
+
52
+
53
+
54
+ ## [3.0.1-alpha.34](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.33...@bloom-housing/ui-components@3.0.1-alpha.34) (2021-12-07)
55
+
56
+
57
+ ### Bug Fixes
58
+
59
+ * account translations ([#2278](https://github.com/bloom-housing/bloom/issues/2278)) ([1420282](https://github.com/bloom-housing/bloom/commit/1420282ec0de17b8629f2a7dd6c1149f7a1f8894))
60
+
61
+
62
+
63
+
64
+
65
+ ## [3.0.1-alpha.33](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.32...@bloom-housing/ui-components@3.0.1-alpha.33) (2021-12-07)
66
+
67
+
68
+ ### Features
69
+
70
+ * overrides fallback to english, tagalog support ([#2262](https://github.com/bloom-housing/bloom/issues/2262)) ([679ab9b](https://github.com/bloom-housing/bloom/commit/679ab9b1816d5934f48f02ca5f5696952ef88ae7))
71
+
72
+
73
+
74
+
75
+
76
+ ## [3.0.1-alpha.32](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.31...@bloom-housing/ui-components@3.0.1-alpha.32) (2021-12-07)
77
+
78
+
79
+ ### Bug Fixes
80
+
81
+ * Fix modal styles on mobile ([#2280](https://github.com/bloom-housing/bloom/issues/2280)) ([95f45e5](https://github.com/bloom-housing/bloom/commit/95f45e5a6d2c38c512f59d8cb35847cab59dc8bb)), closes [#2253](https://github.com/bloom-housing/bloom/issues/2253)
82
+
83
+
84
+
85
+
86
+
87
+ ## [3.0.1-alpha.31](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.30...@bloom-housing/ui-components@3.0.1-alpha.31) (2021-12-06)
88
+
89
+ **Note:** Version bump only for package @bloom-housing/ui-components
90
+
91
+
92
+
93
+
94
+
95
+ ## [3.0.1-alpha.30](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.29...@bloom-housing/ui-components@3.0.1-alpha.30) (2021-12-03)
96
+
97
+ **Note:** Version bump only for package @bloom-housing/ui-components
98
+
99
+
100
+
101
+
102
+
103
+ ## [3.0.1-alpha.29](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.28...@bloom-housing/ui-components@3.0.1-alpha.29) (2021-12-03)
104
+
105
+ **Note:** Version bump only for package @bloom-housing/ui-components
106
+
107
+
108
+
109
+
110
+
111
+ ## [3.0.1-alpha.28](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.27...@bloom-housing/ui-components@3.0.1-alpha.28) (2021-12-03)
112
+
113
+ **Note:** Version bump only for package @bloom-housing/ui-components
114
+
115
+
116
+
117
+
118
+
119
+ ## [3.0.1-alpha.27](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.26...@bloom-housing/ui-components@3.0.1-alpha.27) (2021-12-01)
120
+
121
+ **Note:** Version bump only for package @bloom-housing/ui-components
122
+
123
+
124
+
125
+
126
+
127
+ ## [3.0.1-alpha.26](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.25...@bloom-housing/ui-components@3.0.1-alpha.26) (2021-12-01)
128
+
129
+ **Note:** Version bump only for package @bloom-housing/ui-components
130
+
131
+
132
+
133
+
134
+
135
+ ## [3.0.1-alpha.25](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.24...@bloom-housing/ui-components@3.0.1-alpha.25) (2021-11-30)
136
+
137
+ **Note:** Version bump only for package @bloom-housing/ui-components
138
+
139
+
140
+
141
+
142
+
143
+ ## [3.0.1-alpha.24](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.23...@bloom-housing/ui-components@3.0.1-alpha.24) (2021-11-29)
144
+
145
+
146
+ ### Bug Fixes
147
+
148
+ * guard against 0 output ([0ea9012](https://github.com/bloom-housing/bloom/commit/0ea9012fdac02fb1cb4357abec2ec69633902654))
149
+ * remove bold style from current waitlist size ([2e2f414](https://github.com/bloom-housing/bloom/commit/2e2f4141e62c8544c0828b29de0b99bb97abb201))
150
+ * show waitlist values even if they're zero ([6a35e67](https://github.com/bloom-housing/bloom/commit/6a35e679f142105e40719e89bda3d957e3200e1d))
151
+ * simpler conditionals ([f3e588d](https://github.com/bloom-housing/bloom/commit/f3e588d5e6dd0a39d1aed99ef6eba0054540ed14))
152
+ * waitlist: handle both null and undefined ([90fd369](https://github.com/bloom-housing/bloom/commit/90fd369b471c7f9baa0a1d58f452159449fe6fcf))
153
+
154
+
155
+ ### Features
156
+
157
+ * simplify Waitlist component and use more flexible schema ([96df149](https://github.com/bloom-housing/bloom/commit/96df1496f377ddfa6f0e6c016c84954b6a43ff4a))
158
+
159
+
160
+
161
+
162
+
163
+ ## [3.0.1-alpha.23](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.22...@bloom-housing/ui-components@3.0.1-alpha.23) (2021-11-29)
164
+
165
+ **Note:** Version bump only for package @bloom-housing/ui-components
166
+
167
+
168
+
169
+
170
+
171
+ ## [3.0.1-alpha.22](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.21...@bloom-housing/ui-components@3.0.1-alpha.22) (2021-11-23)
172
+
173
+
174
+ ### Bug Fixes
175
+
176
+ * remove alameda reference in demographics ([#2209](https://github.com/bloom-housing/bloom/issues/2209)) ([7d5991c](https://github.com/bloom-housing/bloom/commit/7d5991cbf6dbe0b61f2b14d265e87ce3687f743d))
177
+
178
+
179
+
180
+
181
+
182
+ ## [3.0.1-alpha.21](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.20...@bloom-housing/ui-components@3.0.1-alpha.21) (2021-11-23)
183
+
184
+
185
+ ### Bug Fixes
186
+
187
+ * change the yes/no radio text to be more descriptive ([#2208](https://github.com/bloom-housing/bloom/issues/2208)) ([0c46054](https://github.com/bloom-housing/bloom/commit/0c46054574535523d6f217bb0677bbe732b8945f))
188
+
189
+
190
+
191
+
192
+
193
+ ## [3.0.1-alpha.20](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.19...@bloom-housing/ui-components@3.0.1-alpha.20) (2021-11-23)
194
+
195
+
196
+ ### Bug Fixes
197
+
198
+ * add ariaLabel prop to Button component ([509ddc8](https://github.com/bloom-housing/bloom/commit/509ddc898ba44c05e26f8ed8c777f1ba456eeee5))
199
+
200
+
201
+
202
+
203
+
204
+ ## [3.0.1-alpha.19](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.18...@bloom-housing/ui-components@3.0.1-alpha.19) (2021-11-23)
205
+
206
+
207
+ ### Bug Fixes
208
+
209
+ * add ariaHidden to Icon component ([c7bb86a](https://github.com/bloom-housing/bloom/commit/c7bb86aec6fd5ad386c7ca50087d0113b14503be))
210
+
211
+
212
+
213
+
214
+
215
+ ## [3.0.1-alpha.18](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.17...@bloom-housing/ui-components@3.0.1-alpha.18) (2021-11-23)
216
+
217
+
218
+ ### Features
219
+
220
+ * new demographics sub-race questions ([#2109](https://github.com/bloom-housing/bloom/issues/2109)) ([9ab8926](https://github.com/bloom-housing/bloom/commit/9ab892694c1ad2fa8890b411b3b32af68ade1fc3))
221
+
222
+
223
+
224
+
225
+
226
+ ## [3.0.1-alpha.17](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.16...@bloom-housing/ui-components@3.0.1-alpha.17) (2021-11-22)
227
+
228
+ **Note:** Version bump only for package @bloom-housing/ui-components
229
+
230
+
231
+
232
+
233
+
234
+ ## [3.0.1-alpha.16](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.15...@bloom-housing/ui-components@3.0.1-alpha.16) (2021-11-22)
235
+
236
+ **Note:** Version bump only for package @bloom-housing/ui-components
237
+
238
+
239
+
240
+
241
+
242
+ ## [3.0.1-alpha.15](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.14...@bloom-housing/ui-components@3.0.1-alpha.15) (2021-11-16)
243
+
244
+ **Note:** Version bump only for package @bloom-housing/ui-components
245
+
246
+
247
+
248
+
249
+
250
+ ## [3.0.1-alpha.14](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.13...@bloom-housing/ui-components@3.0.1-alpha.14) (2021-11-16)
251
+
252
+
253
+ ### Bug Fixes
254
+
255
+ * preference cleanup for avance ([d0aebbc](https://github.com/bloom-housing/bloom/commit/d0aebbcd334dfffc4a7a1a39e9964c90155c5bfb))
256
+
257
+
258
+
259
+
260
+
261
+ ## [3.0.1-alpha.13](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.12...@bloom-housing/ui-components@3.0.1-alpha.13) (2021-11-16)
262
+
263
+ **Note:** Version bump only for package @bloom-housing/ui-components
264
+
265
+
266
+
267
+
268
+
269
+ ## [3.0.1-alpha.12](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.11...@bloom-housing/ui-components@3.0.1-alpha.12) (2021-11-16)
270
+
271
+ **Note:** Version bump only for package @bloom-housing/ui-components
272
+
273
+
274
+
275
+
276
+
277
+ ## [3.0.1-alpha.11](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.10...@bloom-housing/ui-components@3.0.1-alpha.11) (2021-11-15)
278
+
279
+ **Note:** Version bump only for package @bloom-housing/ui-components
280
+
281
+
282
+
283
+
284
+
285
+ ## [3.0.1-alpha.10](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.9...@bloom-housing/ui-components@3.0.1-alpha.10) (2021-11-12)
286
+
287
+
288
+ ### Features
289
+
290
+ * refactor and add public site application flow cypress tests ([#2118](https://github.com/bloom-housing/bloom/issues/2118)) ([9ec0e8d](https://github.com/bloom-housing/bloom/commit/9ec0e8d05f9570773110754e7fdaf49254d1eab8))
291
+
292
+
293
+
294
+
295
+
296
+ ## [3.0.1-alpha.9](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.8...@bloom-housing/ui-components@3.0.1-alpha.9) (2021-11-12)
297
+
298
+ **Note:** Version bump only for package @bloom-housing/ui-components
299
+
300
+
301
+
302
+
303
+
304
+ ## [3.0.1-alpha.8](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.7...@bloom-housing/ui-components@3.0.1-alpha.8) (2021-11-09)
305
+
306
+ **Note:** Version bump only for package @bloom-housing/ui-components
307
+
308
+
309
+
310
+
311
+
312
+ ## [3.0.1-alpha.7](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.6...@bloom-housing/ui-components@3.0.1-alpha.7) (2021-11-09)
313
+
314
+ **Note:** Version bump only for package @bloom-housing/ui-components
315
+
316
+
317
+
318
+
319
+
320
+ ## [3.0.1-alpha.6](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.5...@bloom-housing/ui-components@3.0.1-alpha.6) (2021-11-09)
321
+
322
+ **Note:** Version bump only for package @bloom-housing/ui-components
323
+
324
+
325
+
326
+
327
+
328
+ ## [3.0.1-alpha.5](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.4...@bloom-housing/ui-components@3.0.1-alpha.5) (2021-11-09)
329
+
330
+ **Note:** Version bump only for package @bloom-housing/ui-components
331
+
332
+
333
+
334
+
335
+
6
336
  ## [3.0.1-alpha.4](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@3.0.1-alpha.3...@bloom-housing/ui-components@3.0.1-alpha.4) (2021-11-09)
7
337
 
8
338
  **Note:** Version bump only for package @bloom-housing/ui-components
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bloom-housing/ui-components",
3
- "version": "3.0.1-alpha.4",
3
+ "version": "3.0.1-alpha.40",
4
4
  "author": "Sean Albert <sean.albert@exygy.com>",
5
5
  "description": "Shared user interface components for Bloom affordable housing system",
6
6
  "homepage": "https://github.com/bloom-housing/bloom/tree/master/shared/ui-components",
@@ -69,7 +69,7 @@
69
69
  "webpack": "^4.44.2"
70
70
  },
71
71
  "dependencies": {
72
- "@bloom-housing/backend-core": "^3.0.1-alpha.4",
72
+ "@bloom-housing/backend-core": "^3.0.1-alpha.35",
73
73
  "@mapbox/mapbox-sdk": "^0.13.0",
74
74
  "@types/body-scroll-lock": "^2.6.1",
75
75
  "@types/jwt-decode": "^2.2.1",
@@ -80,7 +80,7 @@
80
80
  "@types/react-dom": "^16.9.5",
81
81
  "@types/react-text-mask": "^5.4.6",
82
82
  "@types/react-transition-group": "^4.4.0",
83
- "axios": "^0.21.1",
83
+ "axios": "0.21.1",
84
84
  "body-scroll-lock": "^3.1.5",
85
85
  "jwt-decode": "^2.2.0",
86
86
  "markdown-to-jsx": "^6.11.4",
@@ -100,5 +100,5 @@
100
100
  "tailwindcss": "2.2.10",
101
101
  "typesafe-actions": "^5.1.0"
102
102
  },
103
- "gitHead": "64413a61c50053dc2c8ca74bf17be87e3c4ebee8"
103
+ "gitHead": "66128b887f8eef065184137a00d2d3ed31d31ed9"
104
104
  }
@@ -19,6 +19,7 @@ export interface ButtonProps extends AppearanceProps {
19
19
  className?: string
20
20
  disabled?: boolean
21
21
  loading?: boolean
22
+ ariaLabel?: string
22
23
  }
23
24
 
24
25
  export const buttonClassesForProps = (props: Omit<ButtonProps, "onClick">) => {
@@ -67,11 +68,13 @@ const Button = (props: ButtonProps) => {
67
68
 
68
69
  return (
69
70
  <button
71
+ {...props}
70
72
  id={props.id}
71
73
  type={props.type}
72
74
  className={buttonClasses.join(" ")}
73
75
  onClick={props.onClick}
74
76
  disabled={props.disabled || props.loading}
77
+ aria-label={props.ariaLabel}
75
78
  >
76
79
  {buttonInner(props)}
77
80
  </button>
@@ -6,6 +6,7 @@ import { isExternalLink } from "../helpers/links"
6
6
 
7
7
  export interface LinkButtonProps extends Omit<ButtonProps, "onClick"> {
8
8
  href: string
9
+ dataTestId?: string
9
10
  }
10
11
 
11
12
  const LinkButton = (props: LinkButtonProps) => {
@@ -14,13 +15,17 @@ const LinkButton = (props: LinkButtonProps) => {
14
15
 
15
16
  if (isExternalLink(props.href)) {
16
17
  return (
17
- <a href={props.href} className={buttonClasses.join(" ")}>
18
+ <a href={props.href} className={buttonClasses.join(" ")} data-test-id={props.dataTestId}>
18
19
  {buttonInner(props)}
19
20
  </a>
20
21
  )
21
22
  } else {
22
23
  return (
23
- <LinkComponent href={props.href} className={buttonClasses.join(" ")}>
24
+ <LinkComponent
25
+ href={props.href}
26
+ className={buttonClasses.join(" ")}
27
+ data-test-id={props.dataTestId}
28
+ >
24
29
  {buttonInner(props)}
25
30
  </LinkComponent>
26
31
  )
@@ -7,6 +7,7 @@ interface DashBlockProps {
7
7
  subtitle?: string
8
8
  icon: React.ReactNode
9
9
  children?: React.ReactNode
10
+ dataTestId?: string
10
11
  }
11
12
  const DashBlock = (props: DashBlockProps) => {
12
13
  const { href, title, subtitle, icon, children } = props
@@ -37,6 +38,10 @@ const DashBlock = (props: DashBlockProps) => {
37
38
  </>
38
39
  )
39
40
  }
40
- return <div className="dash-block">{wrapper}</div>
41
+ return (
42
+ <div className="dash-block" data-test-id={props.dataTestId}>
43
+ {wrapper}
44
+ </div>
45
+ )
41
46
  }
42
47
  export { DashBlock as default, DashBlock }
@@ -71,6 +71,7 @@ const DOBField = (props: DOBFieldProps) => {
71
71
  }}
72
72
  inputProps={{ maxLength: 2 }}
73
73
  register={register}
74
+ dataTestId={"dob-field-month"}
74
75
  />
75
76
  <Field
76
77
  name={getFieldName("birthDay")}
@@ -92,6 +93,7 @@ const DOBField = (props: DOBFieldProps) => {
92
93
  }}
93
94
  inputProps={{ maxLength: 2 }}
94
95
  register={register}
96
+ dataTestId={"dob-field-day"}
95
97
  />
96
98
  <Field
97
99
  name={getFieldName("birthYear")}
@@ -115,6 +117,7 @@ const DOBField = (props: DOBFieldProps) => {
115
117
  }}
116
118
  inputProps={{ maxLength: 4 }}
117
119
  register={register}
120
+ dataTestId={"dob-field-year"}
118
121
  />
119
122
  </div>
120
123
 
@@ -29,6 +29,7 @@ export interface FieldProps {
29
29
  describedBy?: string
30
30
  getValues?: UseFormMethods["getValues"]
31
31
  setValue?: UseFormMethods["setValue"]
32
+ dataTestId?: string
32
33
  }
33
34
 
34
35
  const Field = (props: FieldProps) => {
@@ -94,6 +95,7 @@ const Field = (props: FieldProps) => {
94
95
  <div className={controlClasses.join(" ")}>
95
96
  {props.prepend && <span className="prepend">{props.prepend}</span>}
96
97
  <input
98
+ {...props}
97
99
  aria-describedby={props.describedBy ? props.describedBy : `${idOrName}`}
98
100
  aria-invalid={!!props.error || false}
99
101
  className="input"
@@ -107,6 +109,7 @@ const Field = (props: FieldProps) => {
107
109
  onPaste={props.onPaste}
108
110
  onDrop={props.onDrop}
109
111
  onChange={props.onChange}
112
+ data-test-id={props.dataTestId}
110
113
  {...inputProps}
111
114
  />
112
115
  {isRadioOrCheckbox && label}
@@ -1,14 +1,22 @@
1
- import React from "react"
1
+ import React, { useState, useEffect } from "react"
2
+ import { ExpandableContent } from "../actions/ExpandableContent"
2
3
  import { ErrorMessage } from "../notifications/ErrorMessage"
3
4
  import { UseFormMethods } from "react-hook-form"
5
+ import { Field } from "./Field"
6
+ import { t } from "../helpers/translator"
4
7
 
5
8
  interface FieldSingle {
6
9
  id: string
7
10
  label: string
8
11
  value?: string
9
12
  defaultChecked?: boolean
13
+ description?: React.ReactNode
14
+ defaultText?: string
10
15
  note?: string
11
16
  inputProps?: Record<string, unknown>
17
+ subFields?: FieldSingle[]
18
+ type?: string
19
+ additionalText?: boolean
12
20
  }
13
21
 
14
22
  interface FieldGroupProps {
@@ -25,6 +33,7 @@ interface FieldGroupProps {
25
33
  fieldGroupClassName?: string
26
34
  fieldClassName?: string
27
35
  fieldLabelClassName?: string
36
+ dataTestId?: string
28
37
  }
29
38
 
30
39
  const FieldGroup = ({
@@ -41,12 +50,94 @@ const FieldGroup = ({
41
50
  fieldClassName,
42
51
  fieldLabelClassName,
43
52
  groupSubNote,
53
+ dataTestId,
44
54
  }: FieldGroupProps) => {
45
55
  // Always align two-option radio groups side by side
46
56
  if (fields?.length === 2) {
47
57
  fieldGroupClassName = `${fieldGroupClassName} flex`
48
58
  fieldClassName = `${fieldClassName} flex-initial mr-4`
49
59
  }
60
+
61
+ const [checkedInputs, setCheckedInputs] = useState<string[]>([])
62
+
63
+ const subfieldsExist = () => {
64
+ return fields?.filter((field) => field.subFields).length
65
+ }
66
+
67
+ const getIndividualInput = (item: FieldSingle): React.ReactNode => {
68
+ return (
69
+ <div key={item.value}>
70
+ <input
71
+ aria-describedby={`${name}-error`}
72
+ aria-invalid={!!error || false}
73
+ type={type}
74
+ id={item.id}
75
+ defaultValue={item.value || item.id}
76
+ name={subfieldsExist() ? `${name}-${item.value}` : name}
77
+ onClick={(e) => {
78
+ // We cannot reliably target an individual checkbox in a field group since they have the same name, so we keep track on our own
79
+ if (e.currentTarget.checked) {
80
+ setCheckedInputs([...checkedInputs, item.label])
81
+ } else {
82
+ setCheckedInputs(checkedInputs.filter((subset) => item.label !== subset))
83
+ }
84
+ }}
85
+ defaultChecked={item.defaultChecked || false}
86
+ ref={register(validation)}
87
+ {...item.inputProps}
88
+ data-test-id={dataTestId}
89
+ />
90
+ <label htmlFor={item.id} className={`font-semibold ${fieldLabelClassName}`}>
91
+ {item.label}
92
+ </label>
93
+ {item.note && <span className={"field-note font-normal"}>{item.note}</span>}
94
+
95
+ {item.description && (
96
+ <div className="ml-8 -mt-1 mb-5">
97
+ <ExpandableContent>
98
+ <p className="field-note mb-2 -mt-2">{item.description}</p>
99
+ </ExpandableContent>
100
+ </div>
101
+ )}
102
+ </div>
103
+ )
104
+ }
105
+
106
+ const checkSelected = (formFields: FieldSingle[] | undefined, checkedValues: string[]) => {
107
+ formFields?.forEach((field) => {
108
+ if (field.defaultChecked) {
109
+ checkedValues.push(field.label)
110
+ }
111
+ if (field.subFields) {
112
+ checkSelected(field.subFields, checkedValues)
113
+ }
114
+ })
115
+ }
116
+
117
+ useEffect(() => {
118
+ const initialValues: string[] = []
119
+ checkSelected(fields, initialValues)
120
+ setCheckedInputs([...initialValues])
121
+ }, [])
122
+
123
+ const getInputSet = (item: FieldSingle): React.ReactNode => {
124
+ return (
125
+ <div key={item.value}>
126
+ {getIndividualInput(item)}
127
+ {item.additionalText && checkedInputs.indexOf(item.label) >= 0 && (
128
+ <Field
129
+ id={item.id}
130
+ key={`${item.value}-additionalText`}
131
+ name={`${name}-${item.value}`}
132
+ register={register}
133
+ defaultValue={item.defaultText}
134
+ placeholder={t("t.description")}
135
+ className={"mb-4"}
136
+ />
137
+ )}
138
+ </div>
139
+ )
140
+ }
50
141
  return (
51
142
  <>
52
143
  {groupLabel && <label className="field-label--caps">{groupLabel}</label>}
@@ -55,21 +146,14 @@ const FieldGroup = ({
55
146
  <div className={`field ${error && "error"} ${fieldGroupClassName || ""} mb-0`}>
56
147
  {fields?.map((item) => (
57
148
  <div className={`field ${fieldClassName || ""} mb-1`} key={item.id}>
58
- <input
59
- aria-describedby={`${name}-error`}
60
- aria-invalid={!!error || false}
61
- type={type}
62
- id={item.id}
63
- defaultValue={item.value || item.id}
64
- name={name}
65
- defaultChecked={item.defaultChecked || false}
66
- ref={register(validation)}
67
- {...item.inputProps}
68
- />
69
- <label htmlFor={item.id} className={`font-semibold ${fieldLabelClassName}`}>
70
- {item.label}
71
- </label>
72
- {item.note && <span className={"field-note font-normal"}>{item.note}</span>}
149
+ {getInputSet(item)}
150
+ {item.subFields && checkedInputs.indexOf(item.label) >= 0 && (
151
+ <div className={"ml-8"} key={`${item.value}-subfields`}>
152
+ {item.subFields?.map((subItem) => {
153
+ return getInputSet(subItem)
154
+ })}
155
+ </div>
156
+ )}
73
157
  </div>
74
158
  ))}
75
159
  </div>
@@ -20,10 +20,11 @@ const HouseholdMemberForm = (props: HouseholdMemberFormProps) => {
20
20
  {props.memberFirstName} {props.memberLastName}
21
21
  {editMode ? (
22
22
  <button
23
- id="edit-member"
23
+ id={`edit-member-${props.memberFirstName}-${props.memberLastName}`}
24
24
  className="edit-link"
25
25
  onClick={() => props.editMember && props.editMember(props.memberId)}
26
26
  type={"button"}
27
+ data-test-id={"app-household-member-edit-button"}
27
28
  >
28
29
  {t("t.edit")}
29
30
  </button>
@@ -19,6 +19,7 @@ export const PhoneField = (props: {
19
19
  disabled?: boolean
20
20
  required?: boolean
21
21
  mask?: (args: any) => JSX.Element
22
+ dataTestId?: string
22
23
  }) => {
23
24
  const labelClasses = ["label"]
24
25
  if (props.caps) labelClasses.push("field-label--caps")
@@ -55,7 +56,7 @@ export const PhoneField = (props: {
55
56
  return (
56
57
  <div className={"field " + (props.error ? "error" : "")}>
57
58
  {props.label && <label className={labelClasses.join(" ")}>{props.label}</label>}
58
- <div className={props.controlClassName}>
59
+ <div className={props.controlClassName} data-test-id={props.dataTestId}>
59
60
  {props.mask ? (
60
61
  <Controller {...controllerProps} render={props.mask} />
61
62
  ) : (