2021-09-08 17:32:22 +00:00
|
|
|
import {
|
|
|
|
|
DataTreeJSAction,
|
|
|
|
|
ENTITY_TYPE,
|
|
|
|
|
MetaArgs,
|
|
|
|
|
} from "entities/DataTree/dataTreeFactory";
|
|
|
|
|
import { JSCollectionData } from "reducers/entityReducers/jsActionsReducer";
|
|
|
|
|
import { EvaluationSubstitutionType } from "entities/DataTree/dataTreeFactory";
|
2021-11-08 06:49:22 +00:00
|
|
|
import { DependencyMap } from "utils/DynamicBindingUtils";
|
2021-09-08 17:32:22 +00:00
|
|
|
|
2022-04-12 13:09:26 +00:00
|
|
|
const reg = /this\./g;
|
|
|
|
|
|
2021-09-08 17:32:22 +00:00
|
|
|
export const generateDataTreeJSAction = (
|
|
|
|
|
js: JSCollectionData,
|
|
|
|
|
): DataTreeJSAction => {
|
|
|
|
|
const meta: Record<string, MetaArgs> = {};
|
|
|
|
|
const dynamicBindingPathList = [];
|
|
|
|
|
const bindingPaths: Record<string, EvaluationSubstitutionType> = {};
|
2021-11-08 06:49:22 +00:00
|
|
|
const variableList: Record<string, any> = {};
|
2021-09-08 17:32:22 +00:00
|
|
|
const variables = js.config.variables;
|
|
|
|
|
const listVariables: Array<string> = [];
|
2021-11-08 06:49:22 +00:00
|
|
|
dynamicBindingPathList.push({ key: "body" });
|
2022-04-12 13:09:26 +00:00
|
|
|
|
2021-12-15 10:42:25 +00:00
|
|
|
const removeThisReference = js.config.body.replace(reg, `${js.config.name}.`);
|
2021-11-08 06:49:22 +00:00
|
|
|
bindingPaths["body"] = EvaluationSubstitutionType.SMART_SUBSTITUTE;
|
2021-12-15 10:42:25 +00:00
|
|
|
|
2021-09-08 17:32:22 +00:00
|
|
|
if (variables) {
|
|
|
|
|
for (let i = 0; i < variables.length; i++) {
|
|
|
|
|
const variable = variables[i];
|
2021-11-08 06:49:22 +00:00
|
|
|
variableList[variable.name] = variable.value;
|
2021-09-08 17:32:22 +00:00
|
|
|
listVariables.push(variable.name);
|
2022-06-24 04:06:52 +00:00
|
|
|
dynamicBindingPathList.push({ key: variable.name });
|
|
|
|
|
bindingPaths[variable.name] = EvaluationSubstitutionType.SMART_SUBSTITUTE;
|
2021-09-08 17:32:22 +00:00
|
|
|
}
|
|
|
|
|
}
|
2021-11-08 06:49:22 +00:00
|
|
|
const dependencyMap: DependencyMap = {};
|
|
|
|
|
dependencyMap["body"] = [];
|
2021-09-08 17:32:22 +00:00
|
|
|
const actions = js.config.actions;
|
2022-03-17 12:05:17 +00:00
|
|
|
const actionsData: Record<string, any> = {};
|
2021-09-08 17:32:22 +00:00
|
|
|
if (actions) {
|
|
|
|
|
for (let i = 0; i < actions.length; i++) {
|
|
|
|
|
const action = actions[i];
|
|
|
|
|
meta[action.name] = {
|
|
|
|
|
arguments: action.actionConfiguration.jsArguments,
|
2022-03-17 12:05:17 +00:00
|
|
|
isAsync: action.actionConfiguration.isAsync,
|
|
|
|
|
confirmBeforeExecute: !!action.confirmBeforeExecute,
|
2021-09-08 17:32:22 +00:00
|
|
|
};
|
|
|
|
|
bindingPaths[action.name] = EvaluationSubstitutionType.SMART_SUBSTITUTE;
|
|
|
|
|
dynamicBindingPathList.push({ key: action.name });
|
2021-11-08 06:49:22 +00:00
|
|
|
dependencyMap["body"].push(action.name);
|
2022-03-17 12:05:17 +00:00
|
|
|
actionsData[action.name] = {
|
|
|
|
|
data: (js.data && js.data[`${action.id}`]) || {},
|
|
|
|
|
};
|
2021-09-08 17:32:22 +00:00
|
|
|
}
|
|
|
|
|
}
|
2021-11-08 06:49:22 +00:00
|
|
|
return {
|
|
|
|
|
...variableList,
|
2021-09-08 17:32:22 +00:00
|
|
|
name: js.config.name,
|
|
|
|
|
actionId: js.config.id,
|
|
|
|
|
pluginType: js.config.pluginType,
|
|
|
|
|
ENTITY_TYPE: ENTITY_TYPE.JSACTION,
|
2021-11-16 08:42:31 +00:00
|
|
|
body: removeThisReference,
|
2021-09-08 17:32:22 +00:00
|
|
|
meta: meta,
|
2022-04-12 13:09:26 +00:00
|
|
|
bindingPaths: bindingPaths, // As all js object function referred to as action is user javascript code, we add them as binding paths.
|
|
|
|
|
reactivePaths: { ...bindingPaths },
|
2021-09-08 17:32:22 +00:00
|
|
|
dynamicBindingPathList: dynamicBindingPathList,
|
|
|
|
|
variables: listVariables,
|
2021-11-08 06:49:22 +00:00
|
|
|
dependencyMap: dependencyMap,
|
2022-03-17 12:05:17 +00:00
|
|
|
...actionsData,
|
2021-09-08 17:32:22 +00:00
|
|
|
};
|
|
|
|
|
};
|