Skip to content

Commit 9bedb3c

Browse files
PROD-2614 Lint fixes #time 30m
1 parent 4589349 commit 9bedb3c

File tree

5 files changed

+91
-62
lines changed

5 files changed

+91
-62
lines changed

src-ts/lib/form/Form.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ const Form: <ValueType extends FormValue, RequestType extends FormValue>(props:
9595
}, [])
9696

9797
function checkIfFormIsValid(formInputFields: Array<FormInputModel>): void {
98-
setFormInvalid(formInputFields.filter(item => !!item.error).length > 0)
98+
setFormInvalid(formInputFields.some(item => !!item.error))
9999
}
100100

101101
function onBlur(event: FocusEvent<HTMLInputElement | HTMLTextAreaElement>): void {

src-ts/tools/work/work-lib/work-provider/work-functions/work-factory/work.factory.ts

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable @typescript-eslint/no-explicit-any */
12
import moment from 'moment'
23

34
import { WorkConfigConstants, WorkStrings } from '../../../work-constants'
@@ -130,12 +131,17 @@ export function buildCustomerPaymentRequest(
130131
}
131132
}
132133

133-
export function buildUpdateRequest(workTypeConfig: WorkTypeConfig, challenge: Challenge, formData: any): UpdateWorkRequest {
134+
export function buildUpdateRequest(
135+
workTypeConfig: WorkTypeConfig,
136+
challenge: Challenge,
137+
formData: any,
138+
): UpdateWorkRequest {
134139

135140
const type: WorkType = workTypeConfig.type
136141
const priceConfig: WorkPrice = workTypeConfig.priceConfig
137142

138-
const intakeForm: ChallengeMetadata | undefined = findMetadata(challenge, ChallengeMetadataName.intakeForm) || undefined
143+
const intakeForm: ChallengeMetadata | undefined
144+
= findMetadata(challenge, ChallengeMetadataName.intakeForm) || undefined
139145
const form: IntakeForm = !!intakeForm?.value ? JSON.parse(intakeForm.value)?.form : {}
140146
form.basicInfo = formData
141147

@@ -182,7 +188,8 @@ export function buildUpdateRequest(workTypeConfig: WorkTypeConfig, challenge: Ch
182188
// then update the duration for that phase to the correct value
183189
const timeline: Array<WorkTimelinePhase> = workTypeConfig.timeline.map(phase => {
184190
if (workTypeConfig.submissionPhaseDuration && phase.phaseId === WorkConfigConstants.PHASE_ID_SUBMISSION) {
185-
phase.duration = workTypeConfig.submissionPhaseDuration[formData[ChallengeMetadataName.packageType] as PricePackageName] || 0
191+
const packageName: PricePackageName = formData[ChallengeMetadataName.packageType] as PricePackageName
192+
phase.duration = workTypeConfig.submissionPhaseDuration[packageName] || 0
186193
}
187194

188195
return phase
@@ -238,9 +245,11 @@ export function getStatus(challenge: Challenge): WorkStatus {
238245
case ChallengeStatus.draft:
239246
return WorkStatus.active
240247

241-
case ChallengeStatus.completed:
242-
const customerFeedback: ChallengeMetadata | undefined = findMetadata(challenge, ChallengeMetadataName.feedback)
248+
case ChallengeStatus.completed: {
249+
const customerFeedback: ChallengeMetadata | undefined
250+
= findMetadata(challenge, ChallengeMetadataName.feedback)
243251
return !customerFeedback ? WorkStatus.ready : WorkStatus.done
252+
}
244253

245254
case ChallengeStatus.cancelled:
246255
case ChallengeStatus.cancelledPaymentFailed:
@@ -450,8 +459,9 @@ function findOpenPhase(challenge: Challenge): ChallengePhase | undefined {
450459
// sort the phases descending by start date
451460
const sortedPhases: Array<ChallengePhase> = challenge.phases
452461
.sort((a, b) => new Date(b.actualStartDate)
453-
.getTime() - new Date(a.actualStartDate)
454-
.getTime())
462+
.getTime()
463+
- new Date(a.actualStartDate)
464+
.getTime())
455465

456466
const now: Date = new Date()
457467
// if we have an open phase, just use that
@@ -519,7 +529,8 @@ function getCost(challenge: Challenge, priceConfig: WorkPrice, type: WorkType):
519529

520530
case WorkType.bugHunt: {
521531
// get the selected package from the intake form
522-
const intakeFormBH: ChallengeMetadata | undefined = findMetadata(challenge, ChallengeMetadataName.intakeForm)
532+
const intakeFormBH: ChallengeMetadata | undefined
533+
= findMetadata(challenge, ChallengeMetadataName.intakeForm)
523534
const formBH: IntakeForm = !!intakeFormBH?.value ? JSON.parse(intakeFormBH.value)?.form : undefined
524535
return priceConfig.getPrice(priceConfig, formBH?.basicInfo?.packageType)
525536
}
@@ -539,6 +550,9 @@ function getDescription(challenge: Challenge, type: WorkType): string | undefine
539550
case WorkType.design:
540551
case WorkType.designLegacy:
541552
return findMetadata(challenge, ChallengeMetadataName.description)?.value
553+
554+
default:
555+
return undefined
542556
}
543557
}
544558

@@ -597,7 +611,7 @@ function getProgressStepActive(challenge: Challenge, workStatus: WorkStatus): nu
597611
switch (challenge.status) {
598612

599613
case ChallengeStatus.active:
600-
case ChallengeStatus.approved:
614+
case ChallengeStatus.approved: {
601615

602616
const openPhase: ChallengePhase | undefined = findOpenPhase(challenge)
603617
// if we don't have an open phase, just return submitted
@@ -613,6 +627,7 @@ function getProgressStepActive(challenge: Challenge, workStatus: WorkStatus): nu
613627
default:
614628
return 2
615629
}
630+
}
616631

617632
case ChallengeStatus.completed:
618633
return workStatus === WorkStatus.ready ? 3 : 4
@@ -699,7 +714,7 @@ function getType(challenge: Challenge): WorkType {
699714
// parse the form
700715
const form: { form: IntakeForm } = JSON.parse(intakeForm.value)
701716
const workTypeKey: (keyof typeof WorkType) | undefined = Object.entries(WorkType)
702-
.find(([key, value]) => value === form.form?.workType?.selectedWorkType)
717+
.find(([, value]) => value === form.form?.workType?.selectedWorkType)
703718
?.[0] as keyof typeof WorkType
704719

705720
const output: WorkType = !!workTypeKey ? WorkType[workTypeKey] : WorkType.unknown

src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable max-len */
12
import { bugHuntTileImg } from '../../../work-images'
23

34
import { ChallengeTag } from './challenge-tag.enum'

src-ts/tools/work/work-lib/work-provider/work-functions/work.functions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { PaymentMethodResult, Stripe, StripeCardNumberElement } from '@stripe/stripe-js'
22

33
import { FormCard, GenericDataObject, Page, textFormatMoneyLocaleString, UserProfile } from '../../../../../lib'
4-
import { BugHuntPricingConfig } from '../../../work-self-service'
4+
import BugHuntPricingConfig from '../../../work-self-service/intake-forms/bug-hunt/bug-hunt.form.pricing-config'
55

66
import { WorkByStatus } from './work-by-status.model'
77
import {

src-ts/tools/work/work-self-service/intake-forms/bug-hunt/BugHuntIntakeForm.tsx

Lines changed: 63 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
/* eslint-disable @typescript-eslint/no-explicit-any */
12
import { NavigateFunction, useNavigate, useParams } from 'react-router-dom'
2-
import React, { Dispatch, SetStateAction, useContext, useEffect, useState } from 'react'
3+
import React, { Dispatch, SetStateAction, useCallback, useContext, useEffect, useState } from 'react'
34

45
import {
56
Form,
@@ -68,7 +69,8 @@ const BugHuntIntakeForm: React.FC = () => {
6869
BugHuntFormConfig.buttons.primaryGroup[1].label = 'Complete and pay'
6970
}
7071

71-
const [challenge, setChallenge]: [Challenge | undefined, Dispatch<SetStateAction<Challenge | undefined>>] = useState()
72+
const [challenge, setChallenge]: [Challenge | undefined, Dispatch<SetStateAction<Challenge | undefined>>]
73+
= useState()
7274
const [formDef]: [FormDefinition, Dispatch<SetStateAction<FormDefinition>>]
7375
= useState<FormDefinition>({ ...BugHuntFormConfig })
7476

@@ -80,7 +82,8 @@ const BugHuntIntakeForm: React.FC = () => {
8082
const [selectedPackage, setSelectedPackage]: [PricePackageName, Dispatch<SetStateAction<PricePackageName>>]
8183
= useState<PricePackageName>(formValues?.packageType)
8284

83-
const [disableSaveForLater, setDisableSaveForLater]: [boolean, Dispatch<SetStateAction<boolean>>] = useState<boolean>(true)
85+
const [disableSaveForLater, setDisableSaveForLater]: [boolean, Dispatch<SetStateAction<boolean>>]
86+
= useState<boolean>(true)
8487

8588
useEffect(() => {
8689

@@ -124,38 +127,53 @@ const BugHuntIntakeForm: React.FC = () => {
124127
setLoading(true)
125128
getAndSetWork()
126129
.finally(() => setLoading(false))
130+
// eslint-disable-next-line react-hooks/exhaustive-deps
127131
}, [
128132
isLoggedIn,
129133
workId,
130134
])
131135

136+
const handleSaveSuccess: () => void = () => {
137+
if (action === 'save') {
138+
navigate(`${dashboardRoute}/draft`)
139+
} else if (action === 'submit') {
140+
const nextUrl: string = `${WorkIntakeFormRoutes[WorkType.bugHunt].review}/${workId || challenge?.id}`
141+
navigate(nextUrl)
142+
}
143+
}
144+
132145
useEffect(() => {
133146
if (!loading && saveSuccess) {
134147
handleSaveSuccess()
135148
}
149+
// eslint-disable-next-line react-hooks/exhaustive-deps
136150
}, [loading, saveSuccess])
137151

138-
const requestGenerator: (inputs: ReadonlyArray<FormInputModel>) => void = inputs => {
139-
const projectTitle: string = formGetInputModel(inputs, ChallengeMetadataName.projectTitle).value as string
140-
const featuresToTest: string = formGetInputModel(inputs, ChallengeMetadataName.featuresToTest).value as string
141-
const deliveryType: string = formGetInputModel(inputs, ChallengeMetadataName.deliveryType).value as string
142-
const repositoryLink: string = formGetInputModel(inputs, ChallengeMetadataName.repositoryLink).value as string
143-
const websiteURL: string = formGetInputModel(inputs, ChallengeMetadataName.websiteURL).value as string
144-
const goals: string = formGetInputModel(inputs, ChallengeMetadataName.goals).value as string
145-
const packageType: string = formGetInputModel(inputs, ChallengeMetadataName.packageType).value as string
146-
return {
147-
deliveryType,
148-
featuresToTest,
149-
goals,
150-
packageType,
151-
projectTitle,
152-
repositoryLink,
153-
websiteURL,
154-
}
155-
}
152+
const requestGenerator: (inputs: ReadonlyArray<FormInputModel>) => any
153+
= useCallback((inputs: ReadonlyArray<FormInputModel>) => {
154+
const projectTitle: string = formGetInputModel(inputs, ChallengeMetadataName.projectTitle).value as string
155+
const featuresToTest: string
156+
= formGetInputModel(inputs, ChallengeMetadataName.featuresToTest).value as string
157+
const deliveryType: string = formGetInputModel(inputs, ChallengeMetadataName.deliveryType).value as string
158+
const repositoryLink: string
159+
= formGetInputModel(inputs, ChallengeMetadataName.repositoryLink).value as string
160+
const websiteURL: string = formGetInputModel(inputs, ChallengeMetadataName.websiteURL).value as string
161+
const goals: string = formGetInputModel(inputs, ChallengeMetadataName.goals).value as string
162+
const packageType: string = formGetInputModel(inputs, ChallengeMetadataName.packageType).value as string
163+
return {
164+
deliveryType,
165+
featuresToTest,
166+
goals,
167+
packageType,
168+
projectTitle,
169+
repositoryLink,
170+
websiteURL,
171+
}
172+
}, [])
156173

157174
const onChange: (inputs: ReadonlyArray<FormInputModel>) => void = inputs => {
158-
const packageType: PricePackageName = formGetInputModel(inputs, ChallengeMetadataName.packageType).value as PricePackageName
175+
const packageType: PricePackageName
176+
= formGetInputModel(inputs, ChallengeMetadataName.packageType).value as PricePackageName
159177

160178
if (packageType !== selectedPackage) {
161179
setSelectedPackage(packageType)
@@ -166,6 +184,18 @@ const BugHuntIntakeForm: React.FC = () => {
166184
setDisableSaveForLater(!title?.trim())
167185
}
168186

187+
const goToLoginStep: (formData: any) => void = (formData: any) => {
188+
if (localStorage) {
189+
localStorage.setItem('challengeInProgress', JSON.stringify(formData))
190+
localStorage.setItem('challengeInProgressType', WorkType.bugHunt)
191+
}
192+
193+
const returnUrl: string
194+
= encodeURIComponent(`${window.location.origin}${WorkIntakeFormRoutes[WorkType.bugHunt].saveAfterLogin}`)
195+
const loginPromptUrl: string = `${WorkIntakeFormRoutes[WorkType.bugHunt].loginPrompt}/${returnUrl}`
196+
navigate(loginPromptUrl)
197+
}
198+
169199
const onSave: (val: any) => Promise<void> = val => {
170200
if (!isLoggedIn) {
171201
goToLoginStep(val)
@@ -185,45 +215,28 @@ const BugHuntIntakeForm: React.FC = () => {
185215
.finally(() => setLoading(false))
186216
}
187217

188-
const handleSaveSuccess: () => void = () => {
189-
if (action === 'save') {
190-
navigate(`${dashboardRoute}/draft`)
191-
} else if (action === 'submit') {
192-
const nextUrl: string = `${WorkIntakeFormRoutes[WorkType.bugHunt].review}/${workId || challenge?.id}`
193-
navigate(nextUrl)
194-
}
195-
}
196-
197218
const onSaveSuccess: () => void = () => {
198219
setSaveSuccess(true)
199220
}
200221

201-
const goToLoginStep: (formData: any) => void = (formData: any) => {
202-
if (localStorage) {
203-
localStorage.setItem('challengeInProgress', JSON.stringify(formData))
204-
localStorage.setItem('challengeInProgressType', WorkType.bugHunt)
205-
}
206-
207-
const returnUrl: string = encodeURIComponent(`${window.location.origin}${WorkIntakeFormRoutes[WorkType.bugHunt].saveAfterLogin}`)
208-
const loginPromptUrl: string = `${WorkIntakeFormRoutes[WorkType.bugHunt].loginPrompt}/${returnUrl}`
209-
navigate(loginPromptUrl)
210-
}
211-
212222
/**
213223
* This function is used to decide whether SAVE FOR LATER button should be enabled or not
214224
* @param isPrimaryGroup whether its a primary group or not
215225
* @param index the index of the button
216226
* @returns true or false depending on whether its SAVE FOR LATER
217227
*/
218-
function shouldDisableButton(isPrimaryGroup: boolean, index: number): boolean {
219-
// SAVE FOR LATER belongs to primary group and its index is 0, we are interested only for that particular case
220-
// else return false which means not disabled from this function
221-
if (isPrimaryGroup && index === 0) {
222-
return disableSaveForLater
223-
}
228+
const shouldDisableButton: (isPrimaryGroup: boolean, index: number) => boolean
229+
= useCallback((isPrimaryGroup: boolean, index: number) => {
230+
231+
// SAVE FOR LATER belongs to primary group and its index is 0,
232+
// we are interested only for that particular case
233+
// else return false which means not disabled from this function
234+
if (isPrimaryGroup && index === 0) {
235+
return disableSaveForLater
236+
}
224237

225-
return false
226-
}
238+
return false
239+
}, [disableSaveForLater])
227240

228241
return (
229242
<>

0 commit comments

Comments
 (0)