Skip to content

Commit 593d114

Browse files
committed
refactor useformdataquery further
1 parent c195de9 commit 593d114

File tree

7 files changed

+165
-168
lines changed

7 files changed

+165
-168
lines changed

src/features/datamodel/DataModelsProvider.tsx

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { useApplicationMetadata } from 'src/features/applicationMetadata/Applica
1414
import { getFirstDataElementId } from 'src/features/applicationMetadata/appMetadataUtils';
1515
import { useCustomValidationConfigQuery } from 'src/features/customValidation/useCustomValidationQuery';
1616
import { UpdateDataElementIdsForCypress } from 'src/features/datamodel/DataElementIdsForCypress';
17-
import { useCurrentDataModelName, useGetDataModelUrl } from 'src/features/datamodel/useBindingSchema';
17+
import { useCurrentDataModelName } from 'src/features/datamodel/useBindingSchema';
1818
import { useDataModelSchemaQuery } from 'src/features/datamodel/useDataModelSchemaQuery';
1919
import {
2020
getAllReferencedDataTypes,
@@ -31,6 +31,7 @@ import {
3131
instanceQueries,
3232
useInstanceDataElements,
3333
useInstanceDataQueryArgs,
34+
useLaxInstanceId,
3435
} from 'src/features/instance/InstanceContext';
3536
import { MissingRolesError } from 'src/features/instantiate/containers/MissingRolesError';
3637
import { useIsPdf } from 'src/hooks/useIsPdf';
@@ -309,23 +310,23 @@ function LoadInitialData({ dataType, overrideDataElement }: LoaderProps & { over
309310
const dataElements = useInstanceDataElements(dataType);
310311
const dataElementId = overrideDataElement ?? getFirstDataElementId(dataElements, dataType);
311312
const metaData = useApplicationMetadata();
313+
const instanceId = useLaxInstanceId();
312314

313-
const url = useGetDataModelUrl()({
315+
const { data, error } = useFormDataQuery({
314316
dataType,
315317
dataElementId,
316318
includeRowIds: true,
319+
instanceId,
317320
prefillFromQueryParams: getValidPrefillDataFromQueryParams(metaData, dataType),
318321
});
319322

320-
const { data, error } = useFormDataQuery(url);
321-
322323
useEffect(() => {
323-
if (!data || !url) {
324+
if (!data) {
324325
return;
325326
}
326327
sessionStorage.removeItem('queryParams');
327328
setInitialData(dataType, data);
328-
}, [data, dataType, metaData.id, setInitialData, url]);
329+
}, [data, dataType, metaData.id, setInitialData]);
329330

330331
useEffect(() => {
331332
setDataElementId(dataType, dataElementId ?? null);

src/features/datamodel/useBindingSchema.tsx

Lines changed: 1 addition & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,8 @@ import {
1010
} from 'src/features/applicationMetadata/appMetadataUtils';
1111
import { DataModels } from 'src/features/datamodel/DataModelsProvider';
1212
import { useLayoutSets } from 'src/features/form/layoutSets/LayoutSetsProvider';
13-
import { useInstanceDataQuery, useLaxInstanceId } from 'src/features/instance/InstanceContext';
13+
import { useInstanceDataQuery } from 'src/features/instance/InstanceContext';
1414
import { useProcessTaskId } from 'src/features/instance/useProcessTaskId';
15-
import { useCurrentLanguage } from 'src/features/language/LanguageProvider';
16-
import { useAllowAnonymous } from 'src/features/stateless/getAllowAnonymous';
17-
import { useAsRef } from 'src/hooks/useAsRef';
18-
import { getStatefulDataModelUrl, getStatelessDataModelUrl } from 'src/utils/urls/appUrlHelper';
19-
import { getUrlWithLanguage } from 'src/utils/urls/urlHelper';
2015
import type { IDataModelReference } from 'src/layout/common.generated';
2116
import type { IDataModelBindings } from 'src/layout/layout';
2217

@@ -44,60 +39,6 @@ export function useCurrentDataModelGuid() {
4439
}).data;
4540
}
4641

47-
type DataModelDeps = {
48-
language: string;
49-
isAnonymous: boolean;
50-
instanceId?: string;
51-
};
52-
53-
type DataModelProps = {
54-
dataType?: string;
55-
dataElementId?: string;
56-
includeRowIds?: boolean;
57-
language?: string;
58-
prefillFromQueryParams?: string;
59-
};
60-
61-
function getDataModelUrl({
62-
dataType,
63-
dataElementId,
64-
includeRowIds = false,
65-
language,
66-
isAnonymous,
67-
instanceId,
68-
prefillFromQueryParams,
69-
}: DataModelDeps & DataModelProps) {
70-
if (!instanceId && dataType) {
71-
return getUrlWithLanguage(
72-
getStatelessDataModelUrl({ dataType, includeRowIds, prefillFromQueryParams, isAnonymous }),
73-
language,
74-
);
75-
}
76-
77-
if (instanceId && dataElementId) {
78-
return getUrlWithLanguage(getStatefulDataModelUrl(instanceId, dataElementId, includeRowIds), language);
79-
}
80-
81-
return undefined;
82-
}
83-
84-
export function useGetDataModelUrl() {
85-
const isAnonymous = useAllowAnonymous();
86-
const instanceId = useLaxInstanceId();
87-
const currentLanguage = useAsRef(useCurrentLanguage());
88-
89-
return ({ dataType, dataElementId, includeRowIds, language, prefillFromQueryParams }: DataModelProps) =>
90-
getDataModelUrl({
91-
dataType,
92-
dataElementId,
93-
includeRowIds,
94-
language: language ?? currentLanguage.current,
95-
isAnonymous,
96-
instanceId,
97-
prefillFromQueryParams,
98-
});
99-
}
100-
10142
export function useCurrentDataModelName() {
10243
const overriddenDataModelType = useTaskStore((state) => state.overriddenDataModelType);
10344

src/features/formData/FormDataReaders.tsx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@ import dot from 'dot-object';
66
import { ContextNotProvided, createContext } from 'src/core/contexts/context';
77
import { getFirstDataElementId } from 'src/features/applicationMetadata/appMetadataUtils';
88
import { useAvailableDataModels } from 'src/features/datamodel/useAvailableDataModels';
9-
import { useGetDataModelUrl } from 'src/features/datamodel/useBindingSchema';
109
import { useFormDataQuery } from 'src/features/formData/useFormDataQuery';
11-
import { useInstanceDataElements } from 'src/features/instance/InstanceContext';
12-
import { useCurrentLanguage } from 'src/features/language/LanguageProvider';
10+
import { useInstanceDataElements, useLaxInstanceId } from 'src/features/instance/InstanceContext';
1311
import { useNavigationParam } from 'src/hooks/navigation';
1412
import { useAsRef } from 'src/hooks/useAsRef';
1513
import type { IDataModelReference } from 'src/layout/common.generated';
@@ -198,9 +196,15 @@ function SpecificDataModelFetcher({ reader, isAvailable }: { reader: DataModelRe
198196
const dataType = reader.getName();
199197
const dataElements = useInstanceDataElements(dataType);
200198
const dataElementId = getFirstDataElementId(dataElements, dataType);
201-
const url = useGetDataModelUrl()({ includeRowIds: false, dataType, dataElementId, language: useCurrentLanguage() });
199+
const instanceId = useLaxInstanceId();
202200
const enabled = isAvailable && reader.isLoading();
203-
const { data, error } = useFormDataQuery(enabled ? url : undefined);
201+
const { data, error } = useFormDataQuery({
202+
enabled,
203+
includeRowIds: false,
204+
dataType,
205+
dataElementId,
206+
instanceId,
207+
});
204208
const { updateModel } = useCtx();
205209

206210
useEffect(() => {

src/features/formData/FormDataWrite.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,13 @@ import { ContextNotProvided } from 'src/core/contexts/context';
1111
import { createZustandContext } from 'src/core/contexts/zustandContext';
1212
import { useApplicationMetadata } from 'src/features/applicationMetadata/ApplicationMetadataProvider';
1313
import { DataModels } from 'src/features/datamodel/DataModelsProvider';
14-
import { useGetDataModelUrl } from 'src/features/datamodel/useBindingSchema';
1514
import { useRuleConnections } from 'src/features/form/dynamics/DynamicsContext';
1615
import { usePageSettings } from 'src/features/form/layoutSettings/LayoutSettingsContext';
1716
import { useFormDataWriteProxies } from 'src/features/formData/FormDataWriteProxies';
1817
import { createFormDataWriteStore } from 'src/features/formData/FormDataWriteStateMachine';
1918
import { createPatch } from 'src/features/formData/jsonPatch/createPatch';
2019
import { ALTINN_ROW_ID } from 'src/features/formData/types';
21-
import { getFormDataQueryKey } from 'src/features/formData/useFormDataQuery';
20+
import { formDataQueries, useGetDataModelUrl } from 'src/features/formData/useFormDataQuery';
2221
import { useLaxInstanceId, useOptimisticallyUpdateCachedInstance } from 'src/features/instance/InstanceContext';
2322
import { useCurrentLanguage } from 'src/features/language/LanguageProvider';
2423
import { useSelectedParty } from 'src/features/party/PartiesProvider';
@@ -109,11 +108,13 @@ function useFormDataSaveMutation() {
109108
// the main form and a subform).
110109
function updateQueryCache(result: FDSaveFinished) {
111110
for (const { dataType, data, dataElementId } of result.newDataModels) {
112-
const url = getDataModelUrl({ dataType, dataElementId, includeRowIds: true });
113-
if (!url) {
114-
continue;
115-
}
116-
const queryKey = getFormDataQueryKey(url);
111+
const queryKey = formDataQueries.formDataKey({
112+
dataType,
113+
dataElementId,
114+
includeRowIds: true,
115+
isAnonymous: false,
116+
instanceId,
117+
});
117118
queryClient.setQueryData(queryKey, data);
118119
}
119120
}
@@ -174,6 +175,7 @@ function useFormDataSaveMutation() {
174175
}
175176

176177
const mutation = useMutation({
178+
scope: { id: 'saveFormData' },
177179
mutationKey: ['saveFormData'],
178180
mutationFn: async (): Promise<FDSaveFinished | undefined> => {
179181
// While we could get the next model from a ref, we want to make sure we get the latest model after debounce

0 commit comments

Comments
 (0)