diff --git a/src/__mocks__/getUiConfigStateMock.ts b/src/__mocks__/getUiConfigStateMock.ts index 0365895a09..8b914c92ca 100644 --- a/src/__mocks__/getUiConfigStateMock.ts +++ b/src/__mocks__/getUiConfigStateMock.ts @@ -3,8 +3,6 @@ import type { IUiConfig } from 'src/types'; export const getUiConfigStateMock = (customStates?: Partial): IUiConfig => ({ focus: null, pageOrderConfig: { - hidden: [], - hiddenExpr: {}, order: ['FormLayout'], }, hiddenFields: [], diff --git a/src/features/form/layout/LayoutsContext.tsx b/src/features/form/layout/LayoutsContext.tsx index 9e274ddd2e..3668b1e451 100644 --- a/src/features/form/layout/LayoutsContext.tsx +++ b/src/features/form/layout/LayoutsContext.tsx @@ -101,7 +101,6 @@ function processLayouts({ input, dispatch, layoutSetId }: LegacyProcessProps) { dispatch( FormLayoutActions.fetchFulfilled({ layouts, - hiddenLayoutsExpressions, layoutSetId: layoutSetId || null, }), ); diff --git a/src/features/form/layout/formLayoutSlice.ts b/src/features/form/layout/formLayoutSlice.ts index fcbce4a458..bf0c779691 100644 --- a/src/features/form/layout/formLayoutSlice.ts +++ b/src/features/form/layout/formLayoutSlice.ts @@ -31,8 +31,6 @@ export const initialState: ILayoutState = { receiptLayoutName: undefined, currentView: 'FormLayout', pageOrderConfig: { - hidden: [], - hiddenExpr: {}, order: null, }, pageTriggers: [], @@ -60,10 +58,8 @@ export const formLayoutSlice = () => { actions: { fetchFulfilled: mkAction({ reducer: (state, action) => { - const { layouts, hiddenLayoutsExpressions, layoutSetId } = action.payload; + const { layouts, layoutSetId } = action.payload; state.layouts = layouts; - state.uiConfig.pageOrderConfig.order = Object.keys(layouts); - state.uiConfig.pageOrderConfig.hiddenExpr = hiddenLayoutsExpressions; state.uiConfig.repeatingGroups = null; state.layoutSetId = layoutSetId; }, @@ -88,10 +84,6 @@ export const formLayoutSlice = () => { state.uiConfig.receiptLayoutName = settings?.receiptLayoutName; if (settings && settings.pages) { updateCommonPageSettings(state, settings.pages); - const order = settings.pages.order; - if (order) { - state.uiConfig.pageOrderConfig.order = order; - } } state.uiConfig.pdfLayoutName = settings?.pages.pdfLayoutName; @@ -159,11 +151,6 @@ export const formLayoutSlice = () => { } }, }), - updateHiddenLayouts: mkAction({ - reducer: (state, action) => { - state.uiConfig.pageOrderConfig.hidden = action.payload.hiddenLayouts; - }, - }), initRepeatingGroups: mkAction({ takeEvery: initRepeatingGroupsSaga, saga: () => diff --git a/src/features/form/layout/formLayoutTypes.ts b/src/features/form/layout/formLayoutTypes.ts index ce26a8a490..349ea6b2ca 100644 --- a/src/features/form/layout/formLayoutTypes.ts +++ b/src/features/form/layout/formLayoutTypes.ts @@ -1,7 +1,7 @@ import type { IFormData } from 'src/features/formData'; import type { Triggers } from 'src/layout/common.generated'; import type { ILayouts } from 'src/layout/layout'; -import type { IHiddenLayoutsExternal, ILayoutSets, ILayoutSettings, TriggersPageValidation } from 'src/types'; +import type { ILayoutSets, ILayoutSettings } from 'src/types'; export interface IFormLayoutActionRejected { error: Error | null; @@ -10,7 +10,6 @@ export interface IFormLayoutActionRejected { export interface IFetchLayoutFulfilled { layouts: ILayouts; - hiddenLayoutsExpressions: IHiddenLayoutsExternal; layoutSetId: string | null; } @@ -22,26 +21,6 @@ export interface IFetchLayoutSettingsFulfilled { settings: ILayoutSettings | null; } -export interface IUpdateCurrentView { - newView: string; - returnToView?: string; - runValidations?: TriggersPageValidation; - skipPageCaching?: boolean; - focusComponentId?: string; - keepScrollPos?: IComponentScrollPos; - allowNavigationToHidden?: boolean; -} - -export interface IUpdateCurrentViewFulfilled { - newView: string; - returnToView?: string; - focusComponentId?: string; -} - -export interface IUpdateCurrentViewRejected extends IFormLayoutActionRejected { - keepScrollPos?: IComponentScrollPos; -} - export interface IUpdateHiddenComponents { componentsToHide: string[]; newlyHidden: string[]; @@ -72,10 +51,6 @@ export interface IComponentScrollPos { offsetTop: number | undefined; } -export interface IHiddenLayoutsUpdate { - hiddenLayouts: string[]; -} - export interface IInitRepeatingGroups { changedFields?: IFormData; } diff --git a/src/features/form/layout/update/updateFormLayoutSagas.ts b/src/features/form/layout/update/updateFormLayoutSagas.ts index f9d06aff6b..32bcb967f2 100644 --- a/src/features/form/layout/update/updateFormLayoutSagas.ts +++ b/src/features/form/layout/update/updateFormLayoutSagas.ts @@ -3,5 +3,3 @@ import type { IRuntimeState } from 'src/types'; export const selectFormLayoutState = (state: IRuntimeState) => state.formLayout; export const selectFormData = (state: IRuntimeState) => state.formData.formData; export const selectFormLayouts = (state: IRuntimeState) => state.formLayout.layouts; -export const selectAllLayouts = (state: IRuntimeState) => state.formLayout.uiConfig.pageOrderConfig.order; -export const selectCurrentLayout = (state: IRuntimeState) => state.formLayout.uiConfig.currentView; diff --git a/src/hooks/usePdfPage.ts b/src/hooks/usePdfPage.ts index 91523fcace..e1dff4b666 100644 --- a/src/hooks/usePdfPage.ts +++ b/src/hooks/usePdfPage.ts @@ -1,7 +1,9 @@ import { useMemo } from 'react'; +import { usePageNavigationContext } from 'src/features/form/layout/PageNavigationContext'; import { usePdfFormatQuery } from 'src/features/pdf/usePdfFormatQuery'; import { useAppSelector } from 'src/hooks/useAppSelector'; +import { useNavigatePage } from 'src/hooks/useNavigatePage'; import { getLayoutComponentObject } from 'src/layout'; import { useExprContext } from 'src/utils/layout/ExprContext'; import { dataSourcesFromState } from 'src/utils/layout/hierarchy'; @@ -10,19 +12,20 @@ import type { IPdfFormat } from 'src/features/pdf/types'; import type { CompInstanceInformationExternal } from 'src/layout/InstanceInformation/config.generated'; import type { HierarchyDataSources, ILayout } from 'src/layout/layout'; import type { CompSummaryExternal } from 'src/layout/Summary/config.generated'; -import type { IPageOrderConfig, IRepeatingGroups } from 'src/types'; +import type { IRepeatingGroups } from 'src/types'; import type { LayoutPage } from 'src/utils/layout/LayoutPage'; import type { LayoutPages } from 'src/utils/layout/LayoutPages'; const PDF_LAYOUT_NAME = '__pdf__'; export const usePdfPage = (): LayoutPage | null => { + const { hidden } = usePageNavigationContext(); + const { order } = useNavigatePage(); + const layoutPages = useExprContext(); const dataSources = useAppSelector(dataSourcesFromState); - const pageOrderConfig = useAppSelector((state) => state.formLayout.uiConfig.pageOrderConfig); const repeatingGroups = useAppSelector((state) => state.formLayout.uiConfig.repeatingGroups); const pdfLayoutName = useAppSelector((state) => state.formLayout.uiConfig.pdfLayoutName); - const customPdfPage = pdfLayoutName ? layoutPages?.[pdfLayoutName] : undefined; const method = customPdfPage ? 'custom' : 'auto'; @@ -32,10 +35,10 @@ export const usePdfPage = (): LayoutPage | null => { const automaticPdfPage = useMemo(() => { if (readyForPrint && method === 'auto') { - return generateAutomaticPage(pdfFormat!, pageOrderConfig!, layoutPages!, dataSources, repeatingGroups!); + return generateAutomaticPage(pdfFormat!, layoutPages!, dataSources, repeatingGroups!, order, hidden); } return null; - }, [readyForPrint, method, pdfFormat, pageOrderConfig, layoutPages, dataSources, repeatingGroups]); + }, [order, hidden, readyForPrint, method, pdfFormat, layoutPages, dataSources, repeatingGroups]); if (!readyForPrint) { return null; @@ -50,10 +53,11 @@ export const usePdfPage = (): LayoutPage | null => { function generateAutomaticPage( pdfFormat: IPdfFormat, - pageOrderConfig: IPageOrderConfig, layoutPages: LayoutPages, dataSources: HierarchyDataSources, repeatingGroups: IRepeatingGroups, + order: string[], + hidden: string[], ): LayoutPage { const automaticPdfLayout: ILayout = []; @@ -75,8 +79,8 @@ function generateAutomaticPage( const excludedPages = new Set(pdfFormat?.excludedPages); const excludedComponents = new Set(pdfFormat?.excludedComponents); - const hiddenPages = new Set(pageOrderConfig.hidden); - const pageOrder = pageOrderConfig.order; + const hiddenPages = new Set(hidden); + const pageOrder = order; // Iterate over all pages, and add all components that should be included in the automatic PDF as summary components Object.entries(layoutPages.all()) diff --git a/src/layout/Group/RepeatingGroupsTable.test.tsx b/src/layout/Group/RepeatingGroupsTable.test.tsx index 0d1b8ddc8a..531a0efae6 100644 --- a/src/layout/Group/RepeatingGroupsTable.test.tsx +++ b/src/layout/Group/RepeatingGroupsTable.test.tsx @@ -40,8 +40,6 @@ const getLayout = (group: CompGroupRepeatingExternal, components: CompOrGroupExt focus: undefined, pageOrderConfig: { order: ['FormLayout'], - hidden: [], - hiddenExpr: {}, }, excludePageFromPdf: [], excludeComponentFromPdf: [], diff --git a/src/layout/Likert/RepeatingGroupsLikertContainerTestUtils.tsx b/src/layout/Likert/RepeatingGroupsLikertContainerTestUtils.tsx index 822e81913d..3e2ebba567 100644 --- a/src/layout/Likert/RepeatingGroupsLikertContainerTestUtils.tsx +++ b/src/layout/Likert/RepeatingGroupsLikertContainerTestUtils.tsx @@ -133,8 +133,6 @@ const createLayout = ( focus: null, pageOrderConfig: { order: null, - hidden: [], - hiddenExpr: {}, }, pageTriggers: [], excludePageFromPdf: [], diff --git a/src/layout/NavigationBar/NavigationBarComponent.test.tsx b/src/layout/NavigationBar/NavigationBarComponent.test.tsx index 45011e180d..1589515ed3 100644 --- a/src/layout/NavigationBar/NavigationBarComponent.test.tsx +++ b/src/layout/NavigationBar/NavigationBarComponent.test.tsx @@ -49,8 +49,6 @@ const render = async () => { uiConfig: { pageOrderConfig: { order: ['page1', 'page2', 'page3'], - hiddenExpr: {}, - hidden: [], }, currentView: 'page1', focus: 'focus', diff --git a/src/layout/NavigationButtons/NavigationButtonsComponent.test.tsx b/src/layout/NavigationButtons/NavigationButtonsComponent.test.tsx index f934a24b31..36490ff997 100644 --- a/src/layout/NavigationButtons/NavigationButtonsComponent.test.tsx +++ b/src/layout/NavigationButtons/NavigationButtonsComponent.test.tsx @@ -59,8 +59,6 @@ describe('NavigationButtons', () => { repeatingGroups: {}, pageOrderConfig: { order: ['layout1', 'layout2'], - hidden: [], - hiddenExpr: {}, }, excludePageFromPdf: [], excludeComponentFromPdf: [], diff --git a/src/selectors/getLayoutOrder.test.ts b/src/selectors/getLayoutOrder.test.ts deleted file mode 100644 index e1a36e865e..0000000000 --- a/src/selectors/getLayoutOrder.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { getLayoutOrderFromPageOrderConfig } from 'src/selectors/getLayoutOrder'; - -describe('getLayoutOrderFromPageOrderConfig', () => { - it('should hide a layout after expressions have been evaluated', () => { - expect( - getLayoutOrderFromPageOrderConfig({ - order: ['first', 'second', 'third'], - hidden: ['second'], - hiddenExpr: {}, - }), - ).toEqual(['first', 'third']); - }); - - it('should not affect the order sent from the server', () => { - expect( - getLayoutOrderFromPageOrderConfig({ - order: ['4', '3', '2', '1'], - hidden: ['2', '3'], - hiddenExpr: {}, - }), - ).toEqual(['4', '1']); - }); -}); diff --git a/src/selectors/getLayoutOrder.ts b/src/selectors/getLayoutOrder.ts deleted file mode 100644 index 5e5e91bedd..0000000000 --- a/src/selectors/getLayoutOrder.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { createSelector } from 'reselect'; - -import type { RootState } from 'src/redux/store'; -import type { IPageOrderConfig } from 'src/types'; - -/** - * Given the IPageOrderConfig state, this returns the final order for layouts - */ -export function getLayoutOrderFromPageOrderConfig(pageOrderConfig: IPageOrderConfig): string[] | null { - if (pageOrderConfig.order === null) { - return null; - } - - const hiddenSet = new Set(pageOrderConfig.hidden); - return [...pageOrderConfig.order].filter((layout) => !hiddenSet.has(layout)); -} - -export const selectPageOrderConfig = (state: RootState) => state.formLayout.uiConfig.pageOrderConfig; - -export const selectLayoutOrder = createSelector(selectPageOrderConfig, getLayoutOrderFromPageOrderConfig); diff --git a/src/types/index.ts b/src/types/index.ts index c2bcef8206..05be26a188 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -81,7 +81,6 @@ export interface IUiConfig { autoSaveBehavior?: 'onChangePage' | 'onChangeFormData'; receiptLayoutName?: string; currentView: string; - returnToView?: string; focus: string | null | undefined; hiddenFields: string[]; repeatingGroups: IRepeatingGroups | null; @@ -102,21 +101,8 @@ export interface IPageOrderConfig { * is not in this list, it should be considered hidden. It will be null until layouts have been fetched. * * Do NOT use this directly, as it will not respect layouts hidden using expressions! - * @see getLayoutOrderFromPageOrderConfig - * @see selectLayoutOrder */ order: string[] | null; - - /** - * This state contains the results from calculating `hiddenExpr` (expressions to decide if a certain layout should - * be hidden or not). If a layout is in this list, is should also not be displayed. - */ - hidden: string[]; - - /** - * List of expressions containing logic used to show/hide certain layouts. - */ - hiddenExpr: IHiddenLayoutsExternal; } export enum ProcessTaskType {