/// <summary> /// Renders an action step /// </summary> /// <param name="template">Export template</param> /// <param name="data">Dialog Step Data</param> /// <param name="nextStep">Next step in the dialog</param> /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param> /// <param name="actionContent">Content of the action</param> /// <returns>Dialog Step Render Result</returns> public Task <ExportDialogStepRenderResult> RenderDialogStep(ExportTemplate template, ExportDialogData data, ExportDialogDataChild nextStep, FlexFieldObject flexFieldObject, string actionContent) { ExportDialogStepRenderResult renderResult = new ExportDialogStepRenderResult(); renderResult.StepCode = ExportUtil.BuildPlaceholderRegex(Placeholder_ActionContent).Replace(template.Code, actionContent); renderResult.StepCode = ReplaceBaseStepPlaceholders(renderResult.StepCode, data, nextStep != null ? nextStep.Child : null); return(Task.FromResult(renderResult)); }
/// <summary> /// Builds a condition /// </summary> /// <param name="conditionTemplate">Condition Template</param> /// <param name="data">Export dialog data</param> /// <param name="conditionObj">Condition object</param> /// <param name="conditionNode">Condition node</param> /// <param name="condition">Export dialog data for the condition</param> /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param> /// <param name="conditionIndex">Index of the condition</param> /// <returns>Conditions as string</returns> private async Task <string> BuildSingleCondition(string conditionTemplate, ExportDialogData data, Condition conditionObj, ConditionNode conditionNode, ExportDialogDataChild condition, FlexFieldObject flexFieldObject, int conditionIndex) { string conditionContent = ReplaceBaseStepPlaceholders(conditionTemplate, data, condition != null ? condition.Child : null); conditionContent = ExportUtil.BuildPlaceholderRegex(Placeholder_Condition_Id).Replace(conditionContent, conditionObj.Id.ToString()); conditionContent = ExportUtil.BuildPlaceholderRegex(Placeholder_Condition_Index).Replace(conditionContent, conditionIndex.ToString()); conditionContent = ExportUtil.RenderPlaceholderIfTrue(conditionContent, Placeholder_Condition_IsFirst_Start, Placeholder_Condition_IsFirst_End, conditionIndex == 0); conditionContent = ExportUtil.RenderPlaceholderIfTrue(conditionContent, Placeholder_Condition_IsNotFirst_Start, Placeholder_Condition_IsNotFirst_End, conditionIndex != 0); conditionContent = await ExportUtil.BuildPlaceholderRegex(Placeholder_Condition).ReplaceAsync(conditionContent, async m => { return(await BuildCondition(conditionObj, flexFieldObject)); }); return(conditionContent); }
/// <summary> /// Renders an action step /// </summary> /// <param name="template">Export template</param> /// <param name="data">Dialog Step Data</param> /// <param name="nextStep">Next step in the dialog</param> /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param> /// <param name="actionContent">Content of the action</param> /// <returns>Dialog Step Render Result</returns> public async Task <ExportDialogStepRenderResult> RenderDialogStep(ExportTemplate template, ExportDialogData data, ExportDialogDataChild nextStep, FlexFieldObject flexFieldObject, string actionContent) { ExportDialogStepRenderResult renderResult = new ExportDialogStepRenderResult(); Template parsedTemplate = ScribanParsingUtil.ParseTemplate(template.Code, _errorCollection); if (parsedTemplate == null) { return(renderResult); } ScribanAction actionData = BuildDialogRenderObject <ScribanAction>(data, nextStep != null ? nextStep.Child : null, flexFieldObject); actionData.Content = actionContent; if (_nextStepNodeData != null) { actionData.NodeStepFunctionWasUsed = _nextStepNodeData.NodeStepFunctionWasUsed; if (actionData.ChildNode != null && _nextStepNodeData.ChildNode != null) { actionData.ChildNode.NodeStepFunctionWasUsed = _nextStepNodeData.ChildNode.NodeStepFunctionWasUsed; } } TemplateContext context = BuildTemplateContext(actionData); renderResult.StepCode = await parsedTemplate.RenderAsync(context); return(renderResult); }