jb
<pre>
const replacePlaceholders = (obj: any, parent: any = null, keyInParent: any = null, actionData: any = null) => {
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const value = obj[key];
if (key === 'fillMethod' || key === 'multiIntentData') continue;
if (key === 'items') {
for(let i=0; i<value.length;i++)
{
//Extract intent from placeholder and get actionDataArray
const intent = extractIntent(value[i]);
const actionDataArray = getActionData(intent, intentName);
// Check the fillMethod of the parent object
const fillMethod = obj.fillMethod || 'latest';
if (fillMethod === 'all') {
parent[keyInParent] = actionDataArray.map((actionData) => {
let newItem = JSON.parse(JSON.stringify(value[i]));
replacePlaceholders(newItem, null, null, actionData);
return newItem;
});
} else {
const latestActionData = getLatestActionData(intent, intentName);
const newItem = JSON.parse(JSON.stringify(value[i]));
replacePlaceholders(newItem, null, null, latestActionData);
parent[keyInParent] = [newItem];
}
}
continue;
}
if (typeof value === 'string' && value.startsWith('$')) {
const [intent, field] = value.substr(1).split('.');
if(actionData && actionData['IntentName'] === intent)
{
const fieldValue = actionData[field];
obj[key] = (fieldValue!== undefined && fieldValue!==null) ? fieldValue : null;
} else {
const latestActionData = getLatestActionData(intent, intentName);
const fieldValue = latestActionData[field];
obj[key] = (fieldValue!== undefined && fieldValue!==null) ? fieldValue : null;
}
} else if (Array.isArray(value) || typeof value === 'object') {
replacePlaceholders(value, obj, key, actionData);
}
if(obj.enableStartEndDate === 'true'){
Object.assign(obj.data,this.getStartEndDate(intentConfig.numberOfDays))
delete obj.enableStartEndDate;
}
}
}
};</pre>