Use buttons to execute/unexecute dashboard actions

As mentioned in commit 5311daadf, using buttons for non-GET requests has
several advantages over using links.
This commit is contained in:
Javi Martín
2025-02-26 10:48:22 +01:00
parent 4e08f3f147
commit 6c3e7391d4
3 changed files with 16 additions and 14 deletions

View File

@@ -139,6 +139,11 @@
} }
} }
form {
display: inline;
vertical-align: top;
}
.icon-check { .icon-check {
display: inline-block; display: inline-block;
font-size: rem-calc(24); font-size: rem-calc(24);
@@ -147,7 +152,6 @@
.unchecked-link { .unchecked-link {
display: inline-block; display: inline-block;
vertical-align: top;
} }
.unchecked { .unchecked {

View File

@@ -1,8 +1,7 @@
<div id="<%= dom_id(proposed_action) %>"> <div id="<%= dom_id(proposed_action) %>">
<div class="action"> <div class="action">
<% if proposed_action.proposals.where(id: proposal.id).any? %> <% if proposed_action.proposals.where(id: proposal.id).any? %>
<%= link_to unexecute_proposal_dashboard_action_path(proposal, proposed_action), <%= button_to unexecute_proposal_dashboard_action_path(proposal, proposed_action),
method: :post,
class: "checked-link" do %> class: "checked-link" do %>
<span class="show-for-sr"> <span class="show-for-sr">
<%= t("dashboard.recommended_actions.unexecute", name: proposed_action.title) %> <%= t("dashboard.recommended_actions.unexecute", name: proposed_action.title) %>
@@ -10,8 +9,7 @@
<span class="icon-check"></span> <span class="icon-check"></span>
<% end %> <% end %>
<% else %> <% else %>
<%= link_to execute_proposal_dashboard_action_path(proposal, proposed_action), <%= button_to execute_proposal_dashboard_action_path(proposal, proposed_action),
method: :post,
class: "unchecked-link" do %> class: "unchecked-link" do %>
<span class="show-for-sr"> <span class="show-for-sr">
<%= t("dashboard.recommended_actions.execute", name: proposed_action.title) %> <%= t("dashboard.recommended_actions.execute", name: proposed_action.title) %>

View File

@@ -100,14 +100,14 @@ describe "Proposal's dashboard" do
expect(page).to have_content "Expand!" expect(page).to have_content "Expand!"
end end
click_link "Mark Expand! as done" click_button "Mark Expand! as done"
within "#proposed_actions_done" do within "#proposed_actions_done" do
expect(page).to have_content "Expand!" expect(page).to have_content "Expand!"
end end
expect(page).not_to have_link "Mark Expand! as done" expect(page).not_to have_button "Mark Expand! as done"
expect(page).to have_link "Unmark Expand! as done" expect(page).to have_button "Unmark Expand! as done"
end end
scenario "Dashboard progress can unexecute proposed action" do scenario "Dashboard progress can unexecute proposed action" do
@@ -120,14 +120,14 @@ describe "Proposal's dashboard" do
expect(page).to have_content "Reinforce!" expect(page).to have_content "Reinforce!"
end end
click_link "Unmark Reinforce! as done" click_button "Unmark Reinforce! as done"
within "#proposed_actions_pending" do within "#proposed_actions_pending" do
expect(page).to have_content "Reinforce!" expect(page).to have_content "Reinforce!"
end end
expect(page).not_to have_link "Unmark Reinforce! as done" expect(page).not_to have_button "Unmark Reinforce! as done"
expect(page).to have_link "Mark Reinforce! as done" expect(page).to have_button "Mark Reinforce! as done"
end end
scenario "Dashboard progress dont show proposed actions with published_proposal: true" do scenario "Dashboard progress dont show proposed actions with published_proposal: true" do
@@ -464,7 +464,7 @@ describe "Proposal's dashboard" do
action = create(:dashboard_action, :proposed_action, :active, title: "Make progress") action = create(:dashboard_action, :proposed_action, :active, title: "Make progress")
visit recommended_actions_proposal_dashboard_path(proposal.to_param) visit recommended_actions_proposal_dashboard_path(proposal.to_param)
click_link "Mark Make progress as done" click_button "Mark Make progress as done"
within "#proposed_actions_done" do within "#proposed_actions_done" do
expect(page).to have_content(action.title) expect(page).to have_content(action.title)