Skip to content

Commit ce293c1

Browse files
committed
TCA-1179 - lint "lib" folder
1 parent 5b7fcb8 commit ce293c1

File tree

38 files changed

+507
-272
lines changed

38 files changed

+507
-272
lines changed

src-ts/.eslintrc.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ module.exports = {
9292
'jsx-a11y/click-events-have-key-events': 'off',
9393
'jsx-a11y/no-noninteractive-element-interactions': 'off',
9494
'jsx-a11y/no-static-element-interactions': 'off',
95+
'jsx-a11y/label-has-associated-control': 'off',
9596
'jsx-a11y/tabindex-no-positive': [
9697
'warn'
9798
],

src-ts/lib/breadcrumb/Breadcrumb.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ const Breadcrumb: FC<BreadcrumbProps> = (props: BreadcrumbProps) => {
2828
<BreadcrumbItem
2929
index={index + 1}
3030
item={item}
31+
// eslint-disable-next-line react/no-array-index-key
3132
key={index}
3233
/>
3334
))
@@ -63,6 +64,7 @@ const Breadcrumb: FC<BreadcrumbProps> = (props: BreadcrumbProps) => {
6364
<BreadcrumbItem
6465
index={index + 1}
6566
item={item}
67+
// eslint-disable-next-line react/no-array-index-key
6668
key={index}
6769
/>
6870
))}

src-ts/lib/breadcrumb/breadcrumb-item/BreadcrumbItem.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { FC } from 'react'
22
import { Link } from 'react-router-dom'
3+
import classNames from 'classnames'
34

45
import styles from '../Breadcrumb.module.scss'
56

@@ -19,10 +20,10 @@ const BreadcrumbItem: FC<BreadcrumbItemProps> = (props: BreadcrumbItemProps) =>
1920
return (
2021
<li
2122
key={props.index}
22-
onClick={() => onClick()}
23+
onClick={onClick}
2324
>
2425
<Link
25-
className={props.item.isElipsis && styles.elipsis}
26+
className={classNames(props.item.isElipsis && styles.elipsis)}
2627
to={props.item.url}
2728
>
2829
{props.item.name}

src-ts/lib/contact-support-form/ContactSupportForm.tsx

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Dispatch, FC, SetStateAction, useCallback, useContext, useEffect, useState } from 'react'
22

33
import { Form, FormDefinition, formGetInputModel, FormInputModel } from '../form'
4+
import { FormValue } from '../form/form-functions'
45
import { LoadingSpinner } from '../loading-spinner'
56
import { profileContext, ProfileContextData } from '../profile-provider'
67

@@ -27,13 +28,13 @@ const ContactSupportForm: FC<ContactSupportFormProps> = (props: ContactSupportFo
2728

2829
useEffect(() => {
2930
if (!loading && saveOnSuccess) {
30-
props.onSave()
31+
props.onSave.call(undefined)
3132
}
3233
}, [loading, saveOnSuccess, props.onSave])
3334

34-
const generateRequest: (inputs: ReadonlyArray<FormInputModel>) => void = useCallback((
35+
const generateRequest: (inputs: ReadonlyArray<FormInputModel>) => FormValue = useCallback((
3536
inputs: ReadonlyArray<FormInputModel>,
36-
): ContactSupportRequest => {
37+
): FormValue => {
3738
const firstName: string
3839
= formGetInputModel(inputs, ContactSupportFormField.first).value as string
3940
const lastName: string
@@ -50,12 +51,12 @@ const ContactSupportForm: FC<ContactSupportFormProps> = (props: ContactSupportFo
5051
lastName,
5152
question,
5253
}
53-
}, [props.workId])
54+
}, [props.isSelfService, props.workId])
5455

55-
const saveAsync: (request: ContactSupportRequest) => Promise<void>
56-
= useCallback(async (request: ContactSupportRequest): Promise<void> => {
56+
const saveAsync: (request: FormValue) => Promise<void>
57+
= useCallback(async (request: FormValue): Promise<void> => {
5758
setLoading(true)
58-
return contactSupportSubmitRequestAsync(request)
59+
return contactSupportSubmitRequestAsync(request as unknown as ContactSupportRequest)
5960
.then(() => {
6061
setSaveOnSuccess(true)
6162
})
@@ -92,7 +93,7 @@ const ContactSupportForm: FC<ContactSupportFormProps> = (props: ContactSupportFo
9293

9394
<Form
9495
formDef={props.formDef}
95-
formValues={profile}
96+
formValues={profile as unknown as FormValue}
9697
requestGenerator={generateRequest}
9798
save={saveAsync}
9899
/>

src-ts/lib/form/Form.tsx

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,10 @@ interface FormProps<ValueType, RequestType> {
4444
readonly shouldDisableButton?: (isPrimaryGroup: boolean, index: number) => boolean
4545
}
4646

47-
const Form: <ValueType extends FormValue, RequestType extends FormValue>(props: FormProps<ValueType, RequestType>) => JSX.Element
47+
const Form: <
48+
ValueType extends FormValue,
49+
RequestType extends FormValue
50+
>(props: FormProps<ValueType, RequestType>) => JSX.Element
4851
= <ValueType extends FormValue, RequestType extends FormValue>(props: FormProps<ValueType, RequestType>) => {
4952

5053
const [formDef, setFormDef]: [FormDefinition, Dispatch<SetStateAction<FormDefinition>>]
@@ -60,8 +63,10 @@ const Form: <ValueType extends FormValue, RequestType extends FormValue>(props:
6063
= useState<RefObject<HTMLFormElement>>(createRef<HTMLFormElement>())
6164

6265
// This will hold all the inputs
63-
const [inputs, setInputs]: [Array<FormInputModel>, Dispatch<SetStateAction<Array<FormInputModel>>>] = useState<Array<FormInputModel>>(formGetInputFields(formDef.groups || []))
64-
const [isFormInvalid, setFormInvalid]: [boolean, Dispatch<boolean>] = useState<boolean>(inputs.filter(item => !!item.error).length > 0)
66+
const [inputs, setInputs]: [Array<FormInputModel>, Dispatch<SetStateAction<Array<FormInputModel>>>]
67+
= useState<Array<FormInputModel>>(formGetInputFields(formDef.groups || []))
68+
const [isFormInvalid, setFormInvalid]: [boolean, Dispatch<boolean>]
69+
= useState<boolean>(inputs.filter(item => !!item.error).length > 0)
6570

6671
useEffect(() => {
6772
if (!formRef.current?.elements) {
@@ -129,7 +134,14 @@ const Form: <ValueType extends FormValue, RequestType extends FormValue>(props:
129134

130135
async function onSubmitAsync(event: FormEvent<HTMLFormElement>): Promise<void> {
131136
const values: RequestType = props.requestGenerator(inputs)
132-
formOnSubmitAsync<RequestType>(props.action || 'submit', event, formDef, values, props.save, props.onSuccess)
137+
formOnSubmitAsync<RequestType>(
138+
props.action || 'submit',
139+
event,
140+
formDef,
141+
values,
142+
props.save,
143+
props.onSuccess,
144+
)
133145
.then(() => {
134146
if (!props.resetFormAfterSave) {
135147
setFormKey(Date.now())
@@ -149,22 +161,17 @@ const Form: <ValueType extends FormValue, RequestType extends FormValue>(props:
149161

150162
formInitializeValues(inputs, props.formValues)
151163

152-
const setOnClickOnReset: (button: FormButton) => FormButton = button => {
164+
const setOnClickOnReset: (button: FormButton) => FormButton = button => (
153165
// if this is a reset button, set its onclick to reset
154-
if (!!button.isReset) {
155-
button = {
156-
...button,
157-
onClick: onReset,
158-
}
159-
}
160-
161-
return button
162-
}
166+
!button.isReset ? button : { ...button, onClick: onReset }
167+
)
163168

164-
const createButtonGroup: (groups: ReadonlyArray<FormButton>, isPrimaryGroup: boolean) => Array<JSX.Element> = (groups, isPrimaryGroup) => groups.map((button, index) => {
165-
button = setOnClickOnReset(button)
169+
const createButtonGroup: (groups: ReadonlyArray<FormButton>, isPrimaryGroup: boolean) => Array<JSX.Element>
170+
= (groups, isPrimaryGroup) => groups.map((button, index) => {
171+
Object.assign(button, setOnClickOnReset(button))
166172

167-
const disabled: boolean = (button.isSubmit && isFormInvalid) || !!props.shouldDisableButton?.(isPrimaryGroup, index)
173+
const disabled: boolean = (button.isSubmit && isFormInvalid)
174+
|| !!props.shouldDisableButton?.(isPrimaryGroup, index)
168175

169176
return (
170177
<Button

src-ts/lib/form/form-functions/form.functions.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import { FormValue } from './form-value.model'
99

1010
export type ValidationEvent = 'blur' | 'change' | 'submit' | 'initial'
1111

12-
export function getInputElement(formElements: HTMLFormControlsCollection, fieldName: string): HTMLInputElement | undefined {
12+
export function getInputElement(
13+
formElements: HTMLFormControlsCollection,
14+
fieldName: string,
15+
): HTMLInputElement | undefined {
1316
return formElements.namedItem(fieldName) as HTMLInputElement
1417
}
1518

@@ -79,14 +82,20 @@ export function onReset<T extends FormValue>(inputs: ReadonlyArray<FormInputMode
7982
})
8083
}
8184

85+
type CustomFormValidator = (
86+
formElements: HTMLFormControlsCollection,
87+
event: ValidationEvent,
88+
inputs: ReadonlyArray<FormInputModel>,
89+
) => boolean
90+
8291
export async function onSubmitAsync<T extends FormValue>(
8392
action: FormAction,
8493
event: FormEvent<HTMLFormElement>,
8594
formDef: FormDefinition,
8695
formValue: T,
8796
save: (value: T) => Promise<void>,
8897
onSuccess?: () => void,
89-
customValidateForm?: (formElements: HTMLFormControlsCollection, event: ValidationEvent, inputs: ReadonlyArray<FormInputModel>) => boolean,
98+
customValidateForm?: CustomFormValidator,
9099
): Promise<void> {
91100

92101
event.preventDefault()

src-ts/lib/form/form-groups/FormGroups.tsx

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@ interface FormGroupsProps {
2222

2323
const FormGroups: (props: FormGroupsProps) => JSX.Element = (props: FormGroupsProps) => {
2424

25-
const { formDef, onBlur, onChange }: FormGroupsProps = props
26-
2725
function getTabIndex(input: FormInputModel, index: number): number {
28-
const tabIndex: number = input.notTabbable ? -1 : index + 1 + (formDef.tabIndexStart || 0)
26+
const tabIndex: number = input.notTabbable ? -1 : index + 1 + (props.formDef.tabIndexStart || 0)
2927
return tabIndex
3028
}
3129

@@ -41,7 +39,7 @@ const FormGroups: (props: FormGroupsProps) => JSX.Element = (props: FormGroupsPr
4139
inputElement = (
4240
<InputRating
4341
{...input}
44-
onChange={onChange}
42+
onChange={props.onChange}
4543
tabIndex={tabIndex}
4644
value={input.value as number | undefined}
4745
/>
@@ -51,8 +49,8 @@ const FormGroups: (props: FormGroupsProps) => JSX.Element = (props: FormGroupsPr
5149
inputElement = (
5250
<InputTextarea
5351
{...input}
54-
onBlur={onBlur}
55-
onChange={onChange}
52+
onBlur={props.onBlur}
53+
onChange={props.onChange}
5654
tabIndex={tabIndex}
5755
value={input.value as string | undefined}
5856
/>
@@ -63,8 +61,8 @@ const FormGroups: (props: FormGroupsProps) => JSX.Element = (props: FormGroupsPr
6361
<InputText
6462
{...input}
6563
checked={!!input.value}
66-
onBlur={onBlur}
67-
onChange={onChange}
64+
onBlur={props.onBlur}
65+
onChange={props.onChange}
6866
tabIndex={tabIndex}
6967
type='checkbox'
7068
/>
@@ -74,7 +72,7 @@ const FormGroups: (props: FormGroupsProps) => JSX.Element = (props: FormGroupsPr
7472
inputElement = (
7573
<FormRadio
7674
{...input}
77-
onChange={onChange}
75+
onChange={props.onChange}
7876
value={input.value}
7977
/>
8078
)
@@ -83,7 +81,7 @@ const FormGroups: (props: FormGroupsProps) => JSX.Element = (props: FormGroupsPr
8381
inputElement = (
8482
<FormCardSet
8583
{...input}
86-
onChange={onChange}
84+
onChange={props.onChange}
8785
value={input.value}
8886
/>
8987
)
@@ -92,7 +90,7 @@ const FormGroups: (props: FormGroupsProps) => JSX.Element = (props: FormGroupsPr
9290
inputElement = (
9391
<InputImagePicker
9492
{...input}
95-
onChange={onChange}
93+
onChange={props.onChange}
9694
value={input.value}
9795
/>
9896
)
@@ -101,8 +99,8 @@ const FormGroups: (props: FormGroupsProps) => JSX.Element = (props: FormGroupsPr
10199
inputElement = (
102100
<InputText
103101
{...input}
104-
onBlur={onBlur}
105-
onChange={onChange}
102+
onBlur={props.onBlur}
103+
onChange={props.onChange}
106104
tabIndex={tabIndex}
107105
type={input.type as InputTextTypes || 'text'}
108106
value={input.value as string | undefined}
@@ -122,13 +120,14 @@ const FormGroups: (props: FormGroupsProps) => JSX.Element = (props: FormGroupsPr
122120
)
123121
}
124122

125-
const formGroups: Array<JSX.Element | undefined> = formDef?.groups
123+
const formGroups: Array<JSX.Element | undefined> = props.formDef?.groups
126124
?.map((element: FormGroup, index: number) => (
127125
<FormGroupItem
126+
// eslint-disable-next-line react/no-array-index-key
128127
key={`element-${index}`}
129128
group={element}
130129
renderFormInput={renderInputField}
131-
totalGroupCount={formDef.groups?.length || 0}
130+
totalGroupCount={props.formDef.groups?.length || 0}
132131
renderDividers={props.formDef.groupsOptions?.renderGroupDividers}
133132
/>
134133
))

src-ts/lib/form/form-groups/form-card-set/FormCardSet.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const FormCardSet: React.FC<FormCardSetProps> = (props: FormCardSetProps) => {
3737

3838
const getButton: (card: FormCard, selected: boolean) => JSX.Element = (card, selected) => (
3939
<Button
40-
onClick={evt => props.onChange(evt)}
40+
onClick={props.onChange}
4141
label={selected ? 'Selected' : 'Choose package'}
4242
buttonStyle={selected ? 'primary' : 'secondary'}
4343
type={selected ? 'button' : 'submit'}

0 commit comments

Comments
 (0)