コード例 #1
0
        public static void MiruTurboForm(this ExceptionResultConfiguration _)
        {
            _.When(m =>
                   m.Request.IsPost() &&
                   m.Request.CanAccept(TurboStreamResult.MimeType) &&
                   m.Exception is ValidationException).Respond(m =>
            {
                var validationException = (MiruValidationException)m.Exception;
                var naming        = m.GetService <ElementNaming>();
                var formSummaryId = naming.FormSummaryId(validationException.Model);

                var html = new StringBuilder();

                html.Append(BuildValidationMessageTags(validationException));

                html.Append(BuildFormSummaryTag(formSummaryId, validationException));

                return(new TurboStreamResult(html.ToString(), HttpStatusCode.UnprocessableEntity));
            });

            _.When(m =>
                   m.Request.IsPost() &&
                   m.Request.CanAccept(TurboStreamResult.MimeType)).Respond(m =>
            {
                var formSummaryId = m.Request.Headers["turbo-form-summary-id"];

                var formSummary = new FormSummaryTag(formSummaryId);

                // TODO: get from htmlconventions
                var turboStream = new TurboStreamTag("replace", formSummaryId)
                                  .AppendIntoTemplate(formSummary);

                // TODO: Log exception
                var errorMessage = m.Exception is DomainException domainException
                    ? domainException.Message
                    : "An error occurred while processing your request";

                formSummary.Add("div", tag => tag.Text(errorMessage));

                return(new TurboStreamResult(turboStream, HttpStatusCode.UnprocessableEntity));
            });
        }
コード例 #2
0
        public static void MiruTurbo(this ExceptionResultConfiguration _)
        {
            _.When(m =>
                   m.Request.IsPost() &&
                   m.Request.CanAccept(TurboStreamResult.MimeType) &&
                   m.Exception is ValidationException).Respond(m =>
            {
                var validationException = (MiruValidationException)m.Exception;
                var naming = m.GetService <ElementNaming>();

                var template = new HtmlTag("template");

                var summaryId = naming.FormSummaryId(validationException.Model);

                var summary = new HtmlTag("div")
                              // TODO: parse css selector to HtmlTag (at least basic .class #id attribute
                              .Id(summaryId)
                              .AddClass("form-summary")
                              .AddClass("alert")
                              .AddClass("alert-danger");

                template.Append(summary);

                // TODO: get from htmlconventions
                var turboStream = new HtmlTag("turbo-stream")
                                  .Attr("action", "replace")
                                  .Attr("target", summaryId)
                                  .Append(template);

                validationException.Errors.Each(error => summary.Add("div", tag => tag.Text(error.ErrorMessage)));

                return(new TurboStreamResult(turboStream, HttpStatusCode.UnprocessableEntity));
            });

            _.When(m =>
                   m.Request.IsPost() &&
                   m.Request.CanAccept(TurboStreamResult.MimeType)).Respond(m =>
            {
                var template = new HtmlTag("template");

                var summaryId = m.Request.Form["__Summary"];

                var summary = new HtmlTag("div")
                              // TODO: parse css selector to HtmlTag (at least basic .class #id attribute
                              // TODO: should not be hardcoded. Should get from HtmlConventions
                              .Id(summaryId)
                              .AddClass("form-summary")
                              .AddClass("alert")
                              .AddClass("alert-danger");

                template.Append(summary);

                // TODO: get from htmlconventions
                // TODO: new TurboStreamTag()
                var turboStream = new HtmlTag("turbo-stream")
                                  .Attr("action", "replace")
                                  .Attr("target", summaryId)
                                  .Append(template);

                var errorMessage = m.Exception is DomainException domainException
                    ? domainException.Message
                    : "An error occurred while processing your request";

                summary.Add("div", tag => tag.Text(errorMessage));

                return(new TurboStreamResult(turboStream, HttpStatusCode.UnprocessableEntity));
            });
        }