@@ -114,6 +114,8 @@ export const AssessmentWizard: React.FC<AssessmentWizardProps> = ({
114
114
return comments ;
115
115
} , [ assessment ] ) ;
116
116
117
+ const initialStakeholders = assessment ?. stakeholders ?? [ ] ;
118
+ const initialStakeholderGroups = assessment ?. stakeholderGroups ?? [ ] ;
117
119
const initialQuestions = useMemo ( ( ) => {
118
120
const questions : { [ key : string ] : string | undefined } = { } ;
119
121
if ( assessment ) {
@@ -146,8 +148,8 @@ export const AssessmentWizard: React.FC<AssessmentWizardProps> = ({
146
148
resolver : yupResolver ( validationSchema ) ,
147
149
mode : "all" ,
148
150
defaultValues : {
149
- stakeholders : assessment ?. stakeholders ?? [ ] ,
150
- stakeholderGroups : assessment ?. stakeholderGroups ?? [ ] ,
151
+ stakeholders : initialStakeholders ,
152
+ stakeholderGroups : initialStakeholderGroups ,
151
153
152
154
[ COMMENTS_KEY ] : initialComments ,
153
155
[ QUESTIONS_KEY ] : initialQuestions ,
@@ -160,7 +162,6 @@ export const AssessmentWizard: React.FC<AssessmentWizardProps> = ({
160
162
const isValid = methods . formState . isValid ;
161
163
const isSubmitting = methods . formState . isSubmitting ;
162
164
const isValidating = methods . formState . isValidating ;
163
- const watchAllFields = methods . watch ( ) ;
164
165
165
166
const disableNavigation = ! isValid || isSubmitting ;
166
167
@@ -439,11 +440,20 @@ export const AssessmentWizard: React.FC<AssessmentWizardProps> = ({
439
440
}
440
441
} ;
441
442
442
- const haveAnyQuestionBeenAnswered = ( ) => {
443
- const questions = values [ QUESTIONS_KEY ] ;
444
- return Object . values ( questions ) . some (
445
- ( answer ) => answer !== null && answer !== ""
443
+ const isAssessmentChanged = ( ) => {
444
+ const questionsChanged = Object . entries ( values [ QUESTIONS_KEY ] ) . some (
445
+ ( [ name , answer ] ) => initialQuestions [ name ] !== answer
446
446
) ;
447
+ const stakeholdersChanged =
448
+ initialStakeholders . length !== values . stakeholders . length ||
449
+ initialStakeholderGroups . length !== values . stakeholderGroups . length ||
450
+ ! values . stakeholders . every ( ( { id, name } ) =>
451
+ initialStakeholders . find ( ( it ) => it . id === id && it . name === name )
452
+ ) ||
453
+ ! values . stakeholderGroups . every ( ( { id, name } ) =>
454
+ initialStakeholderGroups . find ( ( it ) => it . id === id && it . name === name )
455
+ ) ;
456
+ return questionsChanged || stakeholdersChanged ;
447
457
} ;
448
458
449
459
const handleCancelAssessment = ( ) => {
@@ -486,6 +496,7 @@ export const AssessmentWizard: React.FC<AssessmentWizardProps> = ({
486
496
isLastStep = { step === sortedSections . length }
487
497
onNext = { ( ) => setCurrentStep ( step + 1 ) }
488
498
onBack = { ( ) => setCurrentStep ( step - 1 ) }
499
+ isAssessmentChanged = { isAssessmentChanged ( ) }
489
500
isDisabled = {
490
501
isSubmitting ||
491
502
isValidating ||
@@ -574,7 +585,7 @@ export const AssessmentWizard: React.FC<AssessmentWizardProps> = ({
574
585
onClose = { ( ) => setAssessmentToCancel ( null ) }
575
586
onConfirm = { ( ) => handleCancelAssessment ( ) }
576
587
message = {
577
- haveAnyQuestionBeenAnswered ( )
588
+ isAssessmentChanged ( )
578
589
? t ( "message.unsavedChanges" )
579
590
: t ( "message.noAnswers" )
580
591
}
0 commit comments