extraction d'un composant pour les erreurs de formulaires
This commit is contained in:
parent
f5a5b50831
commit
415e240406
|
@ -1,4 +1,4 @@
|
||||||
<div class="rounded-md bg-green-50 p-4">
|
<div class="rounded-md bg-green-50 p-4 mb-4">
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<div class="flex-shrink-0">
|
<div class="flex-shrink-0">
|
||||||
<!-- Heroicon name: solid/information-circle -->
|
<!-- Heroicon name: solid/information-circle -->
|
||||||
|
|
24
app/components/form_errors_component.html.erb
Normal file
24
app/components/form_errors_component.html.erb
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<!-- This example requires Tailwind CSS v2.0+ -->
|
||||||
|
<div class="rounded-md bg-red-50 p-4 my-4">
|
||||||
|
<div class="flex">
|
||||||
|
<div class="flex-shrink-0">
|
||||||
|
<!-- Heroicon name: solid/x-circle -->
|
||||||
|
<svg class="h-5 w-5 text-red-400" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
||||||
|
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" clip-rule="evenodd" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div class="ml-3">
|
||||||
|
<h2 class="text-sm font-medium text-red-800">
|
||||||
|
<%= content %>
|
||||||
|
</h2>
|
||||||
|
<div class="mt-2 text-sm text-red-700">
|
||||||
|
<ul class="list-disc pl-5 space-y-1">
|
||||||
|
<% @errors.each do |error| %>
|
||||||
|
<li><%= error.full_message %></li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
8
app/components/form_errors_component.rb
Normal file
8
app/components/form_errors_component.rb
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class FormErrorsComponent < ViewComponent::Base
|
||||||
|
def initialize(errors:)
|
||||||
|
@errors = errors
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -1,16 +1,8 @@
|
||||||
<%= form_with(model: [ condition.filter, condition ],
|
<%= form_with(model: [ condition.filter, condition ],
|
||||||
data: { controller: "reset_form", action: "turbo:submit-end->reset_form#reset" }) do |form| %>
|
data: { controller: "reset_form", action: "turbo:submit-end->reset_form#reset" }) do |form| %>
|
||||||
<% if condition.errors.any? %>
|
<%= render(FormErrorsComponent.new(errors: condition.errors)) do %>
|
||||||
<div id="error_explanation">
|
<%= pluralize(condition.errors.count, "error") %> prohibited this condition from being saved:
|
||||||
<h2><%= pluralize(condition.errors.count, "error") %> prohibited this condition from being saved:</h2>
|
<% end if condition.errors.any? %>
|
||||||
|
|
||||||
<ul>
|
|
||||||
<% condition.errors.each do |error| %>
|
|
||||||
<li><%= error.full_message %></li>
|
|
||||||
<% end %>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<div class="field flex items-center">
|
<div class="field flex items-center">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
|
|
|
@ -1,16 +1,8 @@
|
||||||
<%= turbo_frame_tag "filter" do %>
|
<%= turbo_frame_tag "filter" do %>
|
||||||
<%= form_with(model: filter) do |form| %>
|
<%= form_with(model: filter) do |form| %>
|
||||||
<% if filter.errors.any? %>
|
<%= render(FormErrorsComponent.new(errors: filter.errors)) do %>
|
||||||
<div id="error_explanation">
|
<%= pluralize(filter.errors.count, "error") %> prohibited this filter from being saved:
|
||||||
<h2><%= pluralize(filter.errors.count, "error") %> prohibited this filter from being saved:</h2>
|
<% end if filter.errors.any? %>
|
||||||
|
|
||||||
<ul>
|
|
||||||
<% filter.errors.each do |error| %>
|
|
||||||
<li><%= error.full_message %></li>
|
|
||||||
<% end %>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<%= form.label :description, class: "block text-sm font-medium text-gray-700" %>
|
<%= form.label :description, class: "block text-sm font-medium text-gray-700" %>
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
|
|
||||||
<%= render(FlashNoticeComponent.new) { notice } if notice.present? %>
|
<%= render(FlashNoticeComponent.new) { notice } if notice.present? %>
|
||||||
|
|
||||||
<%= link_to '← Back to filters list', filters_path %>
|
|
||||||
|
|
||||||
<%= turbo_frame_tag "filter" do %>
|
<%= turbo_frame_tag "filter" do %>
|
||||||
<%= render @filter %>
|
<%= render @filter %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
@ -30,3 +28,7 @@
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="my-4">
|
||||||
|
<%= link_to '← Back to filters list', filters_path, class: "hover:text-blue-700" %>
|
||||||
|
</div>
|
|
@ -1,16 +1,8 @@
|
||||||
<%= form_with(model: [ operation.filter, operation ],
|
<%= form_with(model: [ operation.filter, operation ],
|
||||||
data: { controller: "reset_form", operation: "turbo:submit-end->reset_form#reset" }) do |form| %>
|
data: { controller: "reset_form", operation: "turbo:submit-end->reset_form#reset" }) do |form| %>
|
||||||
<% if operation.errors.any? %>
|
<%= render(FormErrorsComponent.new(errors: operation.errors)) do %>
|
||||||
<div id="error_explanation">
|
<%= pluralize(operation.errors.count, "error") %> prohibited this operation from being saved:
|
||||||
<h2><%= pluralize(operation.errors.count, "error") %> prohibited this operation from being saved:</h2>
|
<% end if operation.errors.any? %>
|
||||||
|
|
||||||
<ul>
|
|
||||||
<% operation.errors.each do |error| %>
|
|
||||||
<li><%= error.full_message %></li>
|
|
||||||
<% end %>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<div class="field flex items-center">
|
<div class="field flex items-center">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
|
|
10
test/components/form_errors_component_test.rb
Normal file
10
test/components/form_errors_component_test.rb
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
require "test_helper"
|
||||||
|
|
||||||
|
class FormErrorsComponentTest < ViewComponent::TestCase
|
||||||
|
def test_component_renders_something_useful
|
||||||
|
# assert_equal(
|
||||||
|
# %(<span>Hello, components!</span>),
|
||||||
|
# render_inline(FormErrorsComponent.new(message: "Hello, components!")).css("span").to_html
|
||||||
|
# )
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue