import { Action } from "entities/Action/index"; import _ from "lodash"; import { EvaluationSubstitutionType } from "entities/DataTree/dataTreeFactory"; import { isHidden } from "components/formControls/utils"; const dynamicFields = ["QUERY_DYNAMIC_TEXT", "QUERY_DYNAMIC_INPUT_TEXT"]; const getCorrectEvaluationSubstitutionType = (substitutionType?: string) => { if (substitutionType) { if (substitutionType === EvaluationSubstitutionType.SMART_SUBSTITUTE) { return EvaluationSubstitutionType.SMART_SUBSTITUTE; } else if (substitutionType === EvaluationSubstitutionType.PARAMETER) { return EvaluationSubstitutionType.PARAMETER; } } return EvaluationSubstitutionType.TEMPLATE; }; export const getBindingPathsOfAction = ( action: Action, formConfig?: any[], ): Record => { const bindingPaths: Record = { data: EvaluationSubstitutionType.TEMPLATE, isLoading: EvaluationSubstitutionType.TEMPLATE, }; if (!formConfig) { return { ...bindingPaths, config: EvaluationSubstitutionType.TEMPLATE, }; } const recursiveFindBindingPaths = (formConfig: any) => { if (formConfig.children) { formConfig.children.forEach(recursiveFindBindingPaths); } else { const configPath = getDataTreeActionConfigPath(formConfig.configProperty); if (dynamicFields.includes(formConfig.controlType)) { if (!isHidden(action, formConfig.hidden)) { bindingPaths[configPath] = getCorrectEvaluationSubstitutionType( formConfig.evaluationSubstitutionType, ); } } if (formConfig.controlType === "ARRAY_FIELD") { let actionValue = _.get(action, formConfig.configProperty); if (Array.isArray(actionValue)) { actionValue = actionValue.filter((val) => val); for (let i = 0; i < actionValue.length; i++) { formConfig.schema.forEach((schemaField: any) => { if ( schemaField.key in actionValue[i] && dynamicFields.includes(schemaField.controlType) ) { const arrayConfigPath = `${configPath}[${i}].${schemaField.key}`; bindingPaths[ arrayConfigPath ] = getCorrectEvaluationSubstitutionType( formConfig.evaluationSubstitutionType, ); } }); } } } } }; formConfig.forEach(recursiveFindBindingPaths); return bindingPaths; }; export const getDataTreeActionConfigPath = (propertyPath: string) => propertyPath.replace("actionConfiguration.", "config.");