PromucFlow_constructor/app/client/src/selectors/dataTreeSelectors.ts
Sangeeth Sivan e9d719103c
chore: code split sagas and reducer's index file (#16261)
* chore: code split sagas and reducers index file

* fix: update imports

* chore: remove acl reducers file on ce

* fix: code split reducers properly

* chore: remove unnecessary import

* chore: split root sagas file
2022-08-24 17:46:32 +05:30

108 lines
3.0 KiB
TypeScript

import { createSelector } from "reselect";
import {
getActionsForCurrentPage,
getAppData,
getPluginDependencyConfig,
getPluginEditorConfigs,
getJSCollectionsForCurrentPage,
} from "./entitiesSelector";
import { ActionDataState } from "reducers/entityReducers/actionsReducer";
import {
DataTree,
DataTreeFactory,
DataTreeWidget,
} from "entities/DataTree/dataTreeFactory";
import { getWidgets, getWidgetsMeta } from "sagas/selectors";
import "url-search-params-polyfill";
import { getPageList } from "./appViewSelectors";
import { AppState } from "@appsmith/reducers";
import { getSelectedAppThemeProperties } from "./appThemingSelectors";
import { LoadingEntitiesState } from "reducers/evaluationReducers/loadingEntitiesReducer";
export const getUnevaluatedDataTree = createSelector(
getActionsForCurrentPage,
getJSCollectionsForCurrentPage,
getWidgets,
getWidgetsMeta,
getPageList,
getAppData,
getPluginEditorConfigs,
getPluginDependencyConfig,
getSelectedAppThemeProperties,
(
actions,
jsActions,
widgets,
widgetsMeta,
pageListPayload,
appData,
editorConfigs,
pluginDependencyConfig,
selectedAppThemeProperty,
) => {
const pageList = pageListPayload || [];
return DataTreeFactory.create({
actions,
jsActions,
widgets,
widgetsMeta,
pageList,
appData,
editorConfigs,
pluginDependencyConfig,
theme: selectedAppThemeProperty,
});
},
);
export const getEvaluationInverseDependencyMap = (state: AppState) =>
state.evaluations.dependencies.inverseDependencyMap;
export const getLoadingEntities = (state: AppState) =>
state.evaluations.loadingEntities;
export const getIsWidgetLoading = createSelector(
[getLoadingEntities, (_state: AppState, widgetName: string) => widgetName],
(loadingEntities: LoadingEntitiesState, widgetName: string) =>
loadingEntities.has(widgetName),
);
/**
* returns evaluation tree object
*
* @param state
*/
export const getDataTree = (state: AppState): DataTree =>
state.evaluations.tree;
export const getWidgetEvalValues = createSelector(
[getDataTree, (_state: AppState, widgetName: string) => widgetName],
(tree: DataTree, widgetName: string) => tree[widgetName] as DataTreeWidget,
);
// For autocomplete. Use actions cached responses if
// there isn't a response already
export const getDataTreeForAutocomplete = createSelector(
getDataTree,
getActionsForCurrentPage,
getJSCollectionsForCurrentPage,
(tree: DataTree, actions: ActionDataState) => {
//js actions needs to be added
const cachedResponses: Record<string, any> = {};
if (actions && actions.length) {
actions.forEach((action) => {
if (!(action.config.name in tree) && action.config.cacheResponse) {
try {
cachedResponses[action.config.name] = JSON.parse(
action.config.cacheResponse,
);
} catch (e) {
cachedResponses[action.config.name] = action.config.cacheResponse;
}
}
});
}
return tree;
},
);