Use separate actions to select/deselect proposals

This is consistent to what we usually do. Also, we're applying the same
criteria mentioned in commit 72704d776:

> We're also making these actions idempotent, so sending many requests
> to the same action will get the same result, which wasn't the case
> with the `toggle` action. Although it's a low probability case, the
> `toggle` action could result in [selecting a proposal] when trying to
> [deselect] it if someone else has [deselected it] it between the time
> the page loaded and the time the admin clicked on the "[Selected]"
> button.
This commit is contained in:
Javi Martín
2024-10-06 12:29:20 +02:00
parent fec44c146c
commit 4a2fc50c76
4 changed files with 34 additions and 9 deletions

View File

@@ -8,7 +8,11 @@ class Admin::Proposals::ToggleSelectionComponent < ApplicationComponent
private private
def action def action
:toggle_selection if selected?
:deselect
else
:select
end
end end
def selected? def selected?

View File

@@ -8,8 +8,15 @@ class Admin::Legislation::ProposalsController < Admin::Legislation::BaseControll
@proposals = @proposals.send("sort_by_#{@current_order}").page(params[:page]) @proposals = @proposals.send("sort_by_#{@current_order}").page(params[:page])
end end
def toggle_selection def select
@proposal.toggle :selected @proposal.update!(selected: true)
@proposal.save!
render :toggle_selection
end
def deselect
@proposal.update!(selected: false)
render :toggle_selection
end end
end end

View File

@@ -19,9 +19,16 @@ class Admin::ProposalsController < Admin::BaseController
end end
end end
def toggle_selection def select
@proposal.toggle :selected @proposal.update!(selected: true)
@proposal.save!
render :toggle_selection
end
def deselect
@proposal.update!(selected: false)
render :toggle_selection
end end
private private

View File

@@ -32,7 +32,11 @@ namespace :admin do
resources :debates, only: [:index, :show] resources :debates, only: [:index, :show]
resources :proposals, only: [:index, :show, :update] do resources :proposals, only: [:index, :show, :update] do
member { patch :toggle_selection } member do
patch :select
patch :deselect
end
resources :milestones, controller: "proposal_milestones" resources :milestones, controller: "proposal_milestones"
resources :progress_bars, except: :show, controller: "proposal_progress_bars" resources :progress_bars, except: :show, controller: "proposal_progress_bars"
end end
@@ -232,7 +236,10 @@ namespace :admin do
resources :processes do resources :processes do
resources :questions resources :questions
resources :proposals do resources :proposals do
member { patch :toggle_selection } member do
patch :select
patch :deselect
end
end end
resources :draft_versions resources :draft_versions
resources :milestones resources :milestones