2020-02-18 10:41:52 +00:00
|
|
|
import { createSelector } from "reselect";
|
2020-03-19 03:25:52 +00:00
|
|
|
import { getActionsForCurrentPage } from "./entitiesSelector";
|
2020-02-18 10:41:52 +00:00
|
|
|
import { ActionDataState } from "reducers/entityReducers/actionsReducer";
|
|
|
|
|
import { getEvaluatedDataTree } from "utils/DynamicBindingUtils";
|
|
|
|
|
import { extraLibraries } from "jsExecution/JSExecutionManagerSingleton";
|
|
|
|
|
import { DataTree, DataTreeFactory } from "entities/DataTree/dataTreeFactory";
|
2020-02-26 12:44:56 +00:00
|
|
|
import _ from "lodash";
|
2020-03-19 03:25:52 +00:00
|
|
|
import { getWidgets, getWidgetsMeta } from "sagas/selectors";
|
2020-03-23 12:40:17 +00:00
|
|
|
import * as log from "loglevel";
|
2020-02-18 10:41:52 +00:00
|
|
|
|
2020-03-19 03:25:52 +00:00
|
|
|
export const getUnevaluatedDataTree = createSelector(
|
|
|
|
|
getActionsForCurrentPage,
|
|
|
|
|
getWidgets,
|
|
|
|
|
getWidgetsMeta,
|
|
|
|
|
(actions, widgets, widgetsMeta) => {
|
|
|
|
|
return DataTreeFactory.create({ actions, widgets, widgetsMeta });
|
|
|
|
|
},
|
|
|
|
|
);
|
2020-02-18 10:41:52 +00:00
|
|
|
|
2020-02-26 12:44:56 +00:00
|
|
|
export const evaluateDataTree = createSelector(
|
2020-02-18 10:41:52 +00:00
|
|
|
getUnevaluatedDataTree,
|
2020-02-26 12:44:56 +00:00
|
|
|
(dataTree: DataTree): DataTree => {
|
|
|
|
|
return getEvaluatedDataTree(dataTree);
|
2020-02-18 10:41:52 +00:00
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// For autocomplete. Use actions cached responses if
|
|
|
|
|
// there isn't a response already
|
2020-02-26 12:44:56 +00:00
|
|
|
export const getDataTreeForAutocomplete = createSelector(
|
|
|
|
|
evaluateDataTree,
|
2020-03-19 03:25:52 +00:00
|
|
|
getActionsForCurrentPage,
|
2020-02-26 12:44:56 +00:00
|
|
|
(tree: DataTree, actions: ActionDataState) => {
|
2020-03-23 12:40:17 +00:00
|
|
|
log.debug("Evaluating data tree to get autocomplete values");
|
2020-02-18 10:41:52 +00:00
|
|
|
const cachedResponses: Record<string, any> = {};
|
|
|
|
|
if (actions && actions.length) {
|
|
|
|
|
actions.forEach(action => {
|
2020-02-26 12:44:56 +00:00
|
|
|
if (!(action.config.name in tree) && action.config.cacheResponse) {
|
2020-02-18 10:41:52 +00:00
|
|
|
try {
|
|
|
|
|
cachedResponses[action.config.name] = JSON.parse(
|
|
|
|
|
action.config.cacheResponse,
|
|
|
|
|
);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
cachedResponses[action.config.name] = action.config.cacheResponse;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
2020-02-26 12:44:56 +00:00
|
|
|
_.omit(tree, ["MainContainer", "actionPaths"]);
|
2020-02-18 10:41:52 +00:00
|
|
|
const libs: Record<string, any> = {};
|
2020-02-25 08:50:40 +00:00
|
|
|
extraLibraries.forEach(config => (libs[config.accessor] = config.lib));
|
2020-02-26 12:44:56 +00:00
|
|
|
return { ...tree, ...cachedResponses, ...libs };
|
2020-02-18 10:41:52 +00:00
|
|
|
},
|
2020-02-26 12:44:56 +00:00
|
|
|
);
|