import { createSelector } from "reselect"; import { AppState, DataTree } from "reducers"; import { AppViewReduxState } from "reducers/uiReducers/appViewReducer"; import { PageListReduxState } from "reducers/entityReducers/pageListReducer"; import { getDataTree } from "./entitiesSelector"; import createCachedSelector from "re-reselect"; import CanvasWidgetsNormalizer from "normalizers/CanvasWidgetsNormalizer"; import { getValidatedDynamicProps } from "./editorSelectors"; import { CanvasWidgetsReduxState } from "reducers/entityReducers/canvasWidgetsReducer"; const getAppViewState = (state: AppState) => state.ui.appView; const getPageListState = (state: AppState): PageListReduxState => state.entities.pageList; export const getCurrentPageId = (state: AppState) => state.ui.appView.currentPageId; // 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( getPageListState, (pageList: PageListReduxState) => pageList.pages.length > 0 ? pageList.pages : undefined, ); export const getIsFetchingPage = createSelector( getAppViewState, (view: AppViewReduxState) => view.isFetchingPage, ); export const getIsInitialized = createSelector( getAppViewState, (view: AppViewReduxState) => view.initialized, ); export const getCurrentDSLPageId = createSelector( getAppViewState, (view: AppViewReduxState) => view.currentPageId, ); export const getPageWidgetId = createSelector( getAppViewState, (view: AppViewReduxState) => view.pageWidgetId, ); export const getCurrentPageLayoutDSL = createCachedSelector( getPageWidgetId, getDataTree, getValidatedDynamicProps, ( pageWidgetId: string, entities: DataTree, validatedDynamicWidgets: CanvasWidgetsReduxState, ) => { return CanvasWidgetsNormalizer.denormalize(pageWidgetId, { ...entities, canvasWidgets: validatedDynamicWidgets, }); }, )((pageWidgetId, entities) => entities || 0);