コード例 #1
0
        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);
        }
コード例 #2
0
 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);
 }