From 72e32305046421c0c1259b3f2a1eb324cbc6ab50 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Thu, 14 Mar 2019 22:32:20 -0400 Subject: [PATCH] Better rule deletion UI --- lib/frenzy/rule.ex | 12 +----------- lib/frenzy_web/controllers/filter_controller.ex | 6 ++++++ lib/frenzy_web/router.ex | 1 + lib/frenzy_web/templates/filter/edit.html.eex | 10 ++++++++-- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/lib/frenzy/rule.ex b/lib/frenzy/rule.ex index d347f85..b303507 100644 --- a/lib/frenzy/rule.ex +++ b/lib/frenzy/rule.ex @@ -7,7 +7,6 @@ defmodule Frenzy.Rule do field :property, :string field :param, :string field :weight, :integer - field :delete, :boolean, virtual: true belongs_to :filter, Frenzy.Filter @@ -17,16 +16,7 @@ defmodule Frenzy.Rule do @doc false def changeset(rule, attrs) do rule - |> cast(attrs, [:mode, :property, :param, :weight, :delete]) - |> set_delete_action() + |> cast(attrs, [:mode, :property, :param, :weight]) |> validate_required([:mode, :property, :param, :weight]) end - - def set_delete_action(changeset) do - if get_change(changeset, :delete) do - %{changeset | action: :delete} - else - changeset - end - end end diff --git a/lib/frenzy_web/controllers/filter_controller.ex b/lib/frenzy_web/controllers/filter_controller.ex index 5ea28e1..690bda1 100644 --- a/lib/frenzy_web/controllers/filter_controller.ex +++ b/lib/frenzy_web/controllers/filter_controller.ex @@ -33,4 +33,10 @@ defmodule FrenzyWeb.FilterController do redirect(conn, to: Routes.filter_path(Endpoint, :edit, id)) end + + def remove_rule(conn, %{"id" => id, "rule_id" => rule_id}) do + rule = Repo.get(Rule, rule_id) + Repo.delete(rule) + redirect(conn, to: Routes.filter_path(Endpoint, :edit, id)) + end end diff --git a/lib/frenzy_web/router.ex b/lib/frenzy_web/router.ex index 9456985..5b3a71c 100644 --- a/lib/frenzy_web/router.ex +++ b/lib/frenzy_web/router.ex @@ -27,6 +27,7 @@ defmodule FrenzyWeb.Router do resources "/filters", FilterController, only: [:edit, :update] post "/filters/:id/add_rule", FilterController, :add_rule + post "/filters/:id/remove_rule", FilterController, :remove_rule resources "/items", ItemController, only: [:show] post "/items/:id/read", ItemController, :read diff --git a/lib/frenzy_web/templates/filter/edit.html.eex b/lib/frenzy_web/templates/filter/edit.html.eex index aa0f269..f8739c4 100644 --- a/lib/frenzy_web/templates/filter/edit.html.eex +++ b/lib/frenzy_web/templates/filter/edit.html.eex @@ -15,7 +15,6 @@ Mode Param Weight - Delete? <%= inputs_for form, :rules, fn p -> %> @@ -32,7 +31,14 @@ <%= number_input p, :weight %> - <%= checkbox p, :delete %> + <%# when nesting form tags, the first nested one seems to get removed %> + <%# not the first nested one in each row, but the first nested one overall %> + <%# so we include a dummy form with display: none that gets stripped from the first row %> + <%# but is present and invisible in subsequent rows %> +
+ <%= form_tag Routes.filter_path(@conn, :remove_rule, @changeset.data.id, [rule_id: p.data.id]), method: :post do %> + <%= submit "Delete" %> + <% end %> <% end %>