Skip to content

Commit 46b59e0

Browse files
olemartinorgOle Martin Handeland
andcommitted
Fix for incremental validation updates when saving attachment tags (#3827)
* Setting data in FormDataWrite so that waitForValidation() doesn't fail later after incremental validation updates arrive from tags saving * Moving the code snippet so it always happens --------- Co-authored-by: Ole Martin Handeland <[email protected]>
1 parent 10a365a commit 46b59e0

File tree

6 files changed

+18
-3
lines changed

6 files changed

+18
-3
lines changed

src/features/formData/FormDataWrite.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,6 +1160,8 @@ export const FD = {
11601160
*/
11611161
useLastSaveValidationIssues: () => useSelector((s) => s.validationIssues),
11621162

1163+
useSetLastValidationIssues: () => useStaticSelector((s) => s.setLastValidationIssues),
1164+
11631165
useRemoveIndexFromList: () => useStaticSelector((s) => s.removeIndexFromList),
11641166

11651167
useGetDataTypeForElementId: () => {

src/features/formData/FormDataWriteProxies.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ const { Provider, useCtx } = createContext<FormDataWriteProxies>({
4545
lock: defaultProxy as Proxy<'lock'>,
4646
nextLock: defaultProxy as Proxy<'nextLock'>,
4747
requestManualSave: defaultProxy as Proxy<'requestManualSave'>,
48+
setLastValidationIssues: defaultProxy as Proxy<'setLastValidationIssues'>,
4849
},
4950
});
5051

src/features/formData/FormDataWriteStateMachine.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ export interface FormDataMethods {
208208
lock: (request: LockRequest) => void;
209209
nextLock: () => void;
210210
unlock: (key: string, uuid: string, saveResult?: FDActionResult) => void;
211+
setLastValidationIssues: (issues: BackendValidationIssueGroups | undefined) => void;
211212
}
212213

213214
export type FormDataContext = FormDataState & FormDataMethods;
@@ -605,6 +606,10 @@ function makeActions(
605606
*/
606607
state.lockedBy = undefined;
607608
}),
609+
setLastValidationIssues: (issues) =>
610+
set((state) => {
611+
state.validationIssues = issues;
612+
}),
608613
};
609614
}
610615

src/features/validation/backendValidation/BackendValidation.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export function BackendValidation() {
1818
const lastSaveValidations = FD.useLastSaveValidationIssues();
1919
const enabled = useShouldValidateInitial();
2020
const { data: initialValidations, isFetching: isFetchingInitial } = useBackendValidationQuery({ enabled });
21-
const updateIncrementalValidations = useUpdateIncrementalValidations();
21+
const updateIncrementalValidations = useUpdateIncrementalValidations(false);
2222

2323
// Initial validation
2424
useEffect(() => {

src/features/validation/backendValidation/useUpdateIncrementalValidations.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { useCallback } from 'react';
33
import deepEqual from 'fast-deep-equal';
44

55
import { DataModels } from 'src/features/datamodel/DataModelsProvider';
6+
import { FD } from 'src/features/formData/FormDataWrite';
67
import { useGetCachedInitialValidations } from 'src/features/validation/backendValidation/backendValidationQuery';
78
import {
89
mapBackendIssuesToFieldValidations,
@@ -15,10 +16,11 @@ import type { BackendValidationIssueGroups } from 'src/features/validation';
1516
/**
1617
* Hook for updating incremental validations from various sources (usually the validations updated from last saved data)
1718
*/
18-
export function useUpdateIncrementalValidations() {
19+
export function useUpdateIncrementalValidations(setInFormData = true) {
1920
const updateBackendValidations = Validation.useUpdateBackendValidations();
2021
const defaultDataElementId = DataModels.useDefaultDataElementId();
2122
const getCachedInitialValidations = useGetCachedInitialValidations();
23+
const updateInFormData = FD.useSetLastValidationIssues();
2224

2325
return useCallback(
2426
(lastSaveValidations: BackendValidationIssueGroups) => {
@@ -33,6 +35,10 @@ export function useUpdateIncrementalValidations() {
3335
newValidatorGroups[group] = mapBackendIssuesToFieldValidations(validationIssues, defaultDataElementId);
3436
}
3537

38+
if (setInFormData) {
39+
updateInFormData(lastSaveValidations);
40+
}
41+
3642
if (deepEqual(initialValidatorGroups, newValidatorGroups)) {
3743
// Don't update any validations, only set last saved validations
3844
updateBackendValidations(undefined, { incremental: lastSaveValidations });
@@ -42,6 +48,6 @@ export function useUpdateIncrementalValidations() {
4248
const backendValidations = mapValidatorGroupsToDataModelValidations(newValidatorGroups);
4349
updateBackendValidations(backendValidations, { incremental: lastSaveValidations });
4450
},
45-
[defaultDataElementId, getCachedInitialValidations, updateBackendValidations],
51+
[defaultDataElementId, getCachedInitialValidations, updateBackendValidations, setInFormData, updateInFormData],
4652
);
4753
}

src/test/renderWithProviders.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ export const makeFormDataMethodProxies = (
197197
lock: makeProxy('lock', ref),
198198
nextLock: makeProxy('nextLock', ref),
199199
requestManualSave: makeProxy('requestManualSave', ref),
200+
setLastValidationIssues: makeProxy('setLastValidationIssues', ref),
200201
};
201202

202203
const proxies: FormDataWriteProxies = Object.fromEntries(

0 commit comments

Comments
 (0)