Skip to content

Switches processingContext for useMutation #3074

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 8 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import { Entrypoint } from 'src/features/entrypoint/Entrypoint';
import { InstanceProvider } from 'src/features/instance/InstanceContext';
import { PartySelection } from 'src/features/instantiate/containers/PartySelection';
import { InstanceSelectionWrapper } from 'src/features/instantiate/selection/InstanceSelection';
import { TaskKeys } from 'src/features/navigation/useNavigatePage';
import { CustomReceipt, DefaultReceipt } from 'src/features/receipt/ReceiptContainer';
import { TaskKeys } from 'src/hooks/useNavigatePage';
import { PresentationType } from 'src/types';

export const App = () => (
Expand Down
30 changes: 20 additions & 10 deletions src/components/form/Form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ import { useNavigateToNode, useRegisterNodeNavigationHandler } from 'src/feature
import { useUiConfigContext } from 'src/features/form/layout/UiConfigContext';
import { usePageSettings } from 'src/features/form/layoutSettings/LayoutSettingsContext';
import { useLanguage } from 'src/features/language/useLanguage';
import {
useCurrentView,
useIdValidPageId,
useNavigateToPage,
useStartUrl,
} from 'src/features/navigation/useNavigatePage';
import {
SearchParams,
useNavigate,
Expand All @@ -25,7 +31,6 @@ import {
} from 'src/features/routing/AppRoutingContext';
import { useOnFormSubmitValidation } from 'src/features/validation/callbacks/onFormSubmitValidation';
import { useTaskErrors } from 'src/features/validation/selectors/taskErrors';
import { useCurrentView, useNavigatePage, useStartUrl } from 'src/hooks/useNavigatePage';
import { getComponentCapabilities } from 'src/layout';
import { GenericComponentById } from 'src/layout/GenericComponent';
import { getPageTitle } from 'src/utils/getPageTitle';
Expand All @@ -49,7 +54,8 @@ export function Form() {
}

export function FormPage({ currentPageId }: { currentPageId: string | undefined }) {
const { isValidPageId, navigateToPage } = useNavigatePage();
const isValidPageId = useIdValidPageId();
const { mutateAsync: navigateToPage } = useNavigateToPage();
const appName = useAppName();
const appOwner = useAppOwner();
const { langAsString } = useLanguage();
Expand All @@ -62,12 +68,15 @@ export function FormPage({ currentPageId }: { currentPageId: string | undefined
useRegisterNodeNavigationHandler(async (targetNode, options) => {
const targetView = targetNode?.pageKey;
if (targetView && targetView !== currentPageId) {
await navigateToPage(targetView, {
...options?.pageNavOptions,
shouldFocusComponent: options?.shouldFocus ?? options?.pageNavOptions?.shouldFocusComponent ?? true,
replace:
window.location.href.includes(SearchParams.FocusComponentId) ||
window.location.href.includes(SearchParams.ExitSubform),
await navigateToPage({
page: targetView,
options: {
...options?.pageNavOptions,
shouldFocusComponent: options?.shouldFocus ?? options?.pageNavOptions?.shouldFocusComponent ?? true,
replace:
window.location.href.includes(SearchParams.FocusComponentId) ||
window.location.href.includes(SearchParams.ExitSubform),
},
});
return true;
}
Expand Down Expand Up @@ -157,7 +166,8 @@ function useRedirectToStoredPage() {
const pageKey = useCurrentView();
const instanceOwnerPartyId = useNavigationParam('instanceOwnerPartyId');
const instanceGuid = useNavigationParam('instanceGuid');
const { isValidPageId, navigateToPage } = useNavigatePage();
const isValidPageId = useIdValidPageId();
const { mutate: navigateToPage } = useNavigateToPage();
const applicationMetadataId = useApplicationMetadata()?.id;

const instanceId = `${instanceOwnerPartyId}/${instanceGuid}`;
Expand All @@ -168,7 +178,7 @@ function useRedirectToStoredPage() {
const lastVisitedPage = localStorage.getItem(currentViewCacheKey);
if (lastVisitedPage !== null && isValidPageId(lastVisitedPage)) {
localStorage.removeItem(currentViewCacheKey);
navigateToPage(lastVisitedPage, { replace: true });
navigateToPage({ page: lastVisitedPage, options: { replace: true } });
}
}
}, [pageKey, currentViewCacheKey, isValidPageId, navigateToPage]);
Expand Down
4 changes: 2 additions & 2 deletions src/components/form/LinkToPotentialPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react';
import { Link } from 'react-router-dom';
import type { LinkProps } from 'react-router-dom';

import { useNavigatePage } from 'src/hooks/useNavigatePage';
import { useIdValidPageId } from 'src/features/navigation/useNavigatePage';
import { Hidden } from 'src/utils/layout/NodesContext';

type Props = LinkProps & { children?: React.ReactNode };
Expand All @@ -16,7 +16,7 @@ export const LinkToPotentialPage = (props: Props) => {
const page = parts[parts.length - 1];

const isHiddenPage = Hidden.useIsHiddenPage(page);
const { isValidPageId } = useNavigatePage();
const isValidPageId = useIdValidPageId();

const shouldShowLink = isValidPageId(page) && !isHiddenPage;
if (shouldShowLink) {
Expand Down
13 changes: 7 additions & 6 deletions src/components/presentation/BackNavigationButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ import cn from 'classnames';
import { Button } from 'src/app-components/Button/Button';
import classes from 'src/components/presentation/BackNavigationButton.module.css';
import { useAppQueries } from 'src/core/contexts/AppQueriesProvider';
import { useIsProcessing } from 'src/core/contexts/processingContext';
import { Lang } from 'src/features/language/Lang';
import { useLanguage } from 'src/features/language/useLanguage';
import { useExitSubform } from 'src/features/navigation/useNavigatePage';
import { useCurrentParty } from 'src/features/party/PartiesProvider';
import { useIsSubformPage, useNavigationParam } from 'src/features/routing/AppRoutingContext';
import { useIsMobile } from 'src/hooks/useDeviceWidths';
import { useNavigatePage } from 'src/hooks/useNavigatePage';
import { useHasLongLivedMutations } from 'src/hooks/useHasLongLivedMutations';
import { returnUrlToMessagebox } from 'src/utils/urls/urlHelper';

export function BackNavigationButton(props: Parameters<typeof Button>[0]) {
Expand All @@ -24,8 +24,9 @@ export function BackNavigationButton(props: Parameters<typeof Button>[0]) {
const mainPageKey = useNavigationParam('mainPageKey');
const isSubform = useIsSubformPage();
const { returnUrl, isFetchingReturnUrl } = useReturnUrl();
const { exitSubform } = useNavigatePage();
const { performProcess, isAnyProcessing, isThisProcessing: isExitingSubform } = useIsProcessing();
const { mutateAsync: exitSubform, isPending: isExitingSubform } = useExitSubform();

const hasLongLivedMutations = useHasLongLivedMutations();

const messageBoxUrl = returnUrlToMessagebox(window.location.host, party?.partyId);

Expand All @@ -42,8 +43,8 @@ export function BackNavigationButton(props: Parameters<typeof Button>[0]) {
if (isSubform) {
return (
<Button
onClick={() => performProcess(exitSubform)}
disabled={isAnyProcessing}
onClick={() => exitSubform()}
disabled={hasLongLivedMutations}
isLoading={isExitingSubform}
variant='tertiary'
size='sm'
Expand Down
4 changes: 2 additions & 2 deletions src/components/presentation/Progress.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ import React from 'react';
import { getLabelId } from 'src/components/label/Label';
import classes from 'src/components/presentation/Progress.module.css';
import { useLanguage } from 'src/features/language/useLanguage';
import { usePageOrder } from 'src/features/navigation/useNavigatePage';
import { useNavigationParam } from 'src/features/routing/AppRoutingContext';
import { useNavigatePage } from 'src/hooks/useNavigatePage';

export const Progress = () => {
const currentPageId = useNavigationParam('pageKey');
const { order } = useNavigatePage();
const order = usePageOrder();
const { langAsString } = useLanguage();

const currentPageIndex = order?.findIndex((page) => page === currentPageId) || 0;
Expand Down
7 changes: 6 additions & 1 deletion src/components/wrappers/ProcessWrapper.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ import { FormProvider } from 'src/features/form/FormContext';
import { useGetTaskTypeById, useLaxProcessData } from 'src/features/instance/ProcessContext';
import { Lang } from 'src/features/language/Lang';
import { useLanguage } from 'src/features/language/useLanguage';
import {
useIsCurrentTask,
useIsValidTaskId,
useNavigateToTask,
useStartUrl,
} from 'src/features/navigation/useNavigatePage';
import { PDFWrapper } from 'src/features/pdf/PDFWrapper';
import { Confirm } from 'src/features/processEnd/confirm/containers/Confirm';
import { Feedback } from 'src/features/processEnd/feedback/Feedback';
Expand All @@ -22,7 +28,6 @@ import {
useNavigationPath,
useQueryKeysAsString,
} from 'src/features/routing/AppRoutingContext';
import { useIsCurrentTask, useIsValidTaskId, useNavigateToTask, useStartUrl } from 'src/hooks/useNavigatePage';
import { RedirectBackToMainForm } from 'src/layout/Subform/SubformWrapper';
import { ProcessTaskType } from 'src/types';
import { getPageTitle } from 'src/utils/getPageTitle';
Expand Down
73 changes: 0 additions & 73 deletions src/core/contexts/processingContext.tsx

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import classes from 'src/features/devtools/components/DevNavigationButtons/DevNa
import { useIsInFormContext } from 'src/features/form/FormContext';
import { useLayouts } from 'src/features/form/layout/LayoutsContext';
import { useRawPageOrder } from 'src/features/form/layoutSettings/LayoutSettingsContext';
import { useNavigateToPage } from 'src/features/navigation/useNavigatePage';
import { useNavigationParam } from 'src/features/routing/AppRoutingContext';
import { useNavigatePage } from 'src/hooks/useNavigatePage';
import comboboxClasses from 'src/styles/combobox.module.css';
import { Hidden } from 'src/utils/layout/NodesContext';

Expand All @@ -23,15 +23,15 @@ export function DevNavigationButtons() {

const InnerDevNavigationButtons = () => {
const pageKey = useNavigationParam('pageKey');
const { navigateToPage } = useNavigatePage();
const { mutate: navigateToPage } = useNavigateToPage();
const isHiddenPage = Hidden.useIsHiddenPageSelector();
const rawOrder = useRawPageOrder();
const allPages = Object.keys(useLayouts() ?? {});

function handleChange(values: string[]) {
const newView = values.at(0);
if (newView) {
navigateToPage(newView);
navigateToPage({ page: newView });
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { SplitView } from 'src/features/devtools/components/SplitView/SplitView'
import { useDevToolsStore } from 'src/features/devtools/data/DevToolsStore';
import { useLayoutValidationForPage } from 'src/features/devtools/layoutValidation/useLayoutValidation';
import { useLayouts, useLayoutSetId } from 'src/features/form/layout/LayoutsContext';
import { useCurrentView } from 'src/hooks/useNavigatePage';
import { useCurrentView } from 'src/features/navigation/useNavigatePage';
import { parseAndCleanText } from 'src/language/sharedLanguage';
import { useNode } from 'src/utils/layout/NodesContext';
import type { LayoutContextValue } from 'src/features/form/layout/LayoutsContext';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { NodeInspectorContextProvider } from 'src/features/devtools/components/N
import { ValidationInspector } from 'src/features/devtools/components/NodeInspector/ValidationInspector';
import { SplitView } from 'src/features/devtools/components/SplitView/SplitView';
import { useDevToolsStore } from 'src/features/devtools/data/DevToolsStore';
import { useCurrentView } from 'src/hooks/useNavigatePage';
import { useCurrentView } from 'src/features/navigation/useNavigatePage';
import { implementsAnyValidation } from 'src/layout';
import { NodesInternal, useNode } from 'src/utils/layout/NodesContext';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { createStore } from 'zustand';
import { ContextNotProvided } from 'src/core/contexts/context';
import { createZustandContext } from 'src/core/contexts/zustandContext';
import { useCurrentLayoutSetId } from 'src/features/form/layoutSets/useCurrentLayoutSet';
import { useCurrentView } from 'src/hooks/useNavigatePage';
import { useCurrentView } from 'src/features/navigation/useNavigatePage';

interface Context {
errors: unknown;
Expand Down
2 changes: 1 addition & 1 deletion src/features/form/layout/NavigateToNode.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import type { PropsWithChildren } from 'react';

import { createContext } from 'src/core/contexts/context';
import { Hidden } from 'src/utils/layout/NodesContext';
import type { NavigateToPageOptions } from 'src/features/navigation/useNavigatePage';
import type { NodeRefValidation } from 'src/features/validation';
import type { NavigateToPageOptions } from 'src/hooks/useNavigatePage';
import type { LayoutNode } from 'src/utils/layout/LayoutNode';

type NavigationHandler = (node: LayoutNode, options: NavigateToNodeOptions | undefined) => Promise<boolean>;
Expand Down
2 changes: 1 addition & 1 deletion src/features/instance/ProcessContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import { DisplayError } from 'src/core/errorHandling/DisplayError';
import { Loader } from 'src/core/loading/Loader';
import { useApplicationMetadata } from 'src/features/applicationMetadata/ApplicationMetadataProvider';
import { useLayoutSets } from 'src/features/form/layoutSets/LayoutSetsProvider';
import { TaskKeys, useNavigateToTask } from 'src/features/navigation/useNavigatePage';
import { useNavigationParam } from 'src/features/routing/AppRoutingContext';
import { TaskKeys, useNavigateToTask } from 'src/hooks/useNavigatePage';
import { fetchProcessState } from 'src/queries/queries';
import { isProcessTaskType, ProcessTaskType } from 'src/types';
import { behavesLikeDataTask } from 'src/utils/formLayout';
Expand Down
24 changes: 15 additions & 9 deletions src/features/instance/useProcessNext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,13 @@ import { useLaxInstanceId, useStrictInstanceRefetch } from 'src/features/instanc
import { useReFetchProcessData } from 'src/features/instance/ProcessContext';
import { Lang } from 'src/features/language/Lang';
import { useCurrentLanguage } from 'src/features/language/LanguageProvider';
import { navigatePageMutationKeys, navigationScope } from 'src/features/navigation/navigationQueryKeys';
import { useNavigateToTask } from 'src/features/navigation/useNavigatePage';
import { useUpdateInitialValidations } from 'src/features/validation/backendValidation/backendValidationQuery';
import { appSupportsIncrementalValidationFeatures } from 'src/features/validation/backendValidation/backendValidationUtils';
import { useOnFormSubmitValidation } from 'src/features/validation/callbacks/onFormSubmitValidation';
import { Validation } from 'src/features/validation/validationContext';
import { useEffectEvent } from 'src/hooks/useEffectEvent';
import { useNavigateToTask } from 'src/hooks/useNavigatePage';
import { isAtLeastVersion } from 'src/utils/versionCompare';
import type { ApplicationMetadata } from 'src/features/applicationMetadata/types';
import type { BackendValidationIssue } from 'src/features/validation';
Expand All @@ -39,7 +40,9 @@ export function useProcessNext() {
const onSubmitFormValidation = useOnFormSubmitValidation();
const applicationMetadata = useApplicationMetadata();

const { mutateAsync } = useMutation({
const { mutateAsync, isPending } = useMutation({
scope: { id: navigationScope },
mutationKey: navigatePageMutationKeys.processNext(),
mutationFn: async ({ action }: ProcessNextProps = {}) => {
if (!instanceId) {
throw new Error('Missing instance ID, cannot perform process/next');
Expand Down Expand Up @@ -81,13 +84,16 @@ export function useProcessNext() {
},
});

return useEffectEvent(async (props?: ProcessNextProps) => {
const hasErrors = await onFormSubmitValidation();
if (hasErrors) {
return;
}
await mutateAsync(props ?? {});
});
return {
processNext: useEffectEvent(async (props?: ProcessNextProps) => {
const hasErrors = await onFormSubmitValidation();
if (hasErrors) {
return;
}
await mutateAsync(props ?? {});
}),
isPending,
};
}

function appUnlocksOnPDFFailure({ altinnNugetVersion }: ApplicationMetadata) {
Expand Down
Loading
Loading