diff --git a/src/features/formData/FormDataWrite.tsx b/src/features/formData/FormDataWrite.tsx index 024ae1e637..7d91a33425 100644 --- a/src/features/formData/FormDataWrite.tsx +++ b/src/features/formData/FormDataWrite.tsx @@ -1160,6 +1160,8 @@ export const FD = { */ useLastSaveValidationIssues: () => useSelector((s) => s.validationIssues), + useSetLastValidationIssues: () => useStaticSelector((s) => s.setLastValidationIssues), + useRemoveIndexFromList: () => useStaticSelector((s) => s.removeIndexFromList), useGetDataTypeForElementId: () => { diff --git a/src/features/formData/FormDataWriteProxies.tsx b/src/features/formData/FormDataWriteProxies.tsx index 4ccff7d099..468e24de97 100644 --- a/src/features/formData/FormDataWriteProxies.tsx +++ b/src/features/formData/FormDataWriteProxies.tsx @@ -45,6 +45,7 @@ const { Provider, useCtx } = createContext({ lock: defaultProxy as Proxy<'lock'>, nextLock: defaultProxy as Proxy<'nextLock'>, requestManualSave: defaultProxy as Proxy<'requestManualSave'>, + setLastValidationIssues: defaultProxy as Proxy<'setLastValidationIssues'>, }, }); diff --git a/src/features/formData/FormDataWriteStateMachine.tsx b/src/features/formData/FormDataWriteStateMachine.tsx index 2b84f891a4..22a5bf11c9 100644 --- a/src/features/formData/FormDataWriteStateMachine.tsx +++ b/src/features/formData/FormDataWriteStateMachine.tsx @@ -208,6 +208,7 @@ export interface FormDataMethods { lock: (request: LockRequest) => void; nextLock: () => void; unlock: (key: string, uuid: string, saveResult?: FDActionResult) => void; + setLastValidationIssues: (issues: BackendValidationIssueGroups | undefined) => void; } export type FormDataContext = FormDataState & FormDataMethods; @@ -605,6 +606,10 @@ function makeActions( */ state.lockedBy = undefined; }), + setLastValidationIssues: (issues) => + set((state) => { + state.validationIssues = issues; + }), }; } diff --git a/src/features/validation/backendValidation/BackendValidation.tsx b/src/features/validation/backendValidation/BackendValidation.tsx index 3e40849c6c..2e2656d336 100644 --- a/src/features/validation/backendValidation/BackendValidation.tsx +++ b/src/features/validation/backendValidation/BackendValidation.tsx @@ -18,7 +18,7 @@ export function BackendValidation() { const lastSaveValidations = FD.useLastSaveValidationIssues(); const enabled = useShouldValidateInitial(); const { data: initialValidations, isFetching: isFetchingInitial } = useBackendValidationQuery({ enabled }); - const updateIncrementalValidations = useUpdateIncrementalValidations(); + const updateIncrementalValidations = useUpdateIncrementalValidations(false); // Initial validation useEffect(() => { diff --git a/src/features/validation/backendValidation/useUpdateIncrementalValidations.ts b/src/features/validation/backendValidation/useUpdateIncrementalValidations.ts index d12766efa2..a9b768686b 100644 --- a/src/features/validation/backendValidation/useUpdateIncrementalValidations.ts +++ b/src/features/validation/backendValidation/useUpdateIncrementalValidations.ts @@ -3,6 +3,7 @@ import { useCallback } from 'react'; import deepEqual from 'fast-deep-equal'; import { DataModels } from 'src/features/datamodel/DataModelsProvider'; +import { FD } from 'src/features/formData/FormDataWrite'; import { useGetCachedInitialValidations } from 'src/features/validation/backendValidation/backendValidationQuery'; import { mapBackendIssuesToFieldValidations, @@ -15,10 +16,11 @@ import type { BackendValidationIssueGroups } from 'src/features/validation'; /** * Hook for updating incremental validations from various sources (usually the validations updated from last saved data) */ -export function useUpdateIncrementalValidations() { +export function useUpdateIncrementalValidations(setInFormData = true) { const updateBackendValidations = Validation.useUpdateBackendValidations(); const defaultDataElementId = DataModels.useDefaultDataElementId(); const getCachedInitialValidations = useGetCachedInitialValidations(); + const updateInFormData = FD.useSetLastValidationIssues(); return useCallback( (lastSaveValidations: BackendValidationIssueGroups) => { @@ -33,6 +35,10 @@ export function useUpdateIncrementalValidations() { newValidatorGroups[group] = mapBackendIssuesToFieldValidations(validationIssues, defaultDataElementId); } + if (setInFormData) { + updateInFormData(lastSaveValidations); + } + if (deepEqual(initialValidatorGroups, newValidatorGroups)) { // Don't update any validations, only set last saved validations updateBackendValidations(undefined, { incremental: lastSaveValidations }); @@ -42,6 +48,6 @@ export function useUpdateIncrementalValidations() { const backendValidations = mapValidatorGroupsToDataModelValidations(newValidatorGroups); updateBackendValidations(backendValidations, { incremental: lastSaveValidations }); }, - [defaultDataElementId, getCachedInitialValidations, updateBackendValidations], + [defaultDataElementId, getCachedInitialValidations, updateBackendValidations, setInFormData, updateInFormData], ); } diff --git a/src/test/renderWithProviders.tsx b/src/test/renderWithProviders.tsx index fd3db7d6ba..9ca88f1e28 100644 --- a/src/test/renderWithProviders.tsx +++ b/src/test/renderWithProviders.tsx @@ -197,6 +197,7 @@ export const makeFormDataMethodProxies = ( lock: makeProxy('lock', ref), nextLock: makeProxy('nextLock', ref), requestManualSave: makeProxy('requestManualSave', ref), + setLastValidationIssues: makeProxy('setLastValidationIssues', ref), }; const proxies: FormDataWriteProxies = Object.fromEntries(