import { createSelector } from "reselect"; import { AppState, DataTree } from "../reducers"; import { AppViewReduxState } from "../reducers/uiReducers/appViewReducer"; import { AppViewerProps } from "../pages/AppViewer"; import { injectDataTreeIntoDsl } from "../utils/DynamicBindingUtils"; const getAppViewState = (state: AppState) => state.ui.appView; const getDataTree = (state: AppState): DataTree => state.entities; export const getCurrentLayoutId = (state: AppState, props: AppViewerProps) => state.ui.appView.currentLayoutId || props.match.params.layoutId; export const getCurrentPageId = (state: AppState, props: AppViewerProps) => state.ui.appView.currentPageId || props.match.params.pageId; export const getCurrentRoutePageId = (state: AppState, props: AppViewerProps) => props.match.params.pageId; // For the viewer, this does not need to be wrapped in createCachedSelector, as it will not change in subsequent renders. export const getCurrentPageLayoutDSL = createSelector( getAppViewState, getDataTree, (view: AppViewReduxState, dataTree: DataTree) => injectDataTreeIntoDsl(dataTree, view.dsl), ); export const getPageList = createSelector( getAppViewState, (view: AppViewReduxState) => (view.pages.length > 0 ? view.pages : undefined), ); export const getIsFetchingPage = createSelector( getAppViewState, (view: AppViewReduxState) => view.isFetchingPage, ); export const getCurrentDSLPageId = createSelector( getAppViewState, (view: AppViewReduxState) => view.currentPageId, );