public async Task <(bool isValid, IDictionary <string, string> errors)> ValidateQuestionPage(FormType formType, string formKey, InFlightPage inFlightPage) { var form = await _formRepository.GetForm(formKey); var node = form.Nodes.FindByKey(new Key(inFlightPage.NodeId)); var questions = node.Value switch { TaskQuestionPageFormNode questionPageFormNode => ((TaskQuestionPage)_staticFormProvider.GetPage( formType, StaticKey.ForTaskQuestionPage(questionPageFormNode.TaskId, questionPageFormNode.PageId))).Questions, PostTaskFormNode postTaskFormNode => ((ConsentPage)_staticFormProvider.GetPage( formType, StaticKey.ForPostTaskPage(postTaskFormNode.TaskId))).Questions, _ => throw new UnexpectedNodeTypeException <TaskQuestionPageFormNode, PostTaskFormNode>(node.Value) }; var errors = new Dictionary <string, string>(); foreach (var question in questions) { var answer = inFlightPage.Questions[questions.IndexOf(question)]; var result = question.Validator?.Validate(answer); if (result is null || result.IsValid) { continue; } errors.Add(question.Id, result.Errors.First().ErrorMessage); } return(isValid : !errors.Any(), errors : errors); }
public static bool IsTaskQuestionPageNode(this GraphNode <Key, FormNode> node, out TaskQuestionPageFormNode value) { value = null; if (!GraphNodePredicates.IsTaskQuestionPageNode(node)) { return(false); } value = (TaskQuestionPageFormNode)node.Value; return(true); }