Use checkboxes to toggle accesses in bulk

This commit is contained in:
Jeffrey Hardy
2024-09-17 16:05:30 -04:00
parent 995f937eef
commit 2c32c3c536
6 changed files with 36 additions and 32 deletions
@@ -0,0 +1,19 @@
class Projects::AccessesController < ApplicationController
include ProjectScoped
def edit
@users = @project.users
end
def update
update_access
redirect_to project_access_url(@project)
end
private
def update_access
users = Current.account.users.active.find([ Current.user.id, *params[:user_ids] ])
users.each { |user| @project.accesses.create_or_find_by!(user: user) }
@project.accesses.where.not(user: users).destroy_all
end
end
@@ -1,24 +0,0 @@
class Projects::UsersController < ApplicationController
include ProjectScoped
before_action :set_user, except: %i[ index ]
def index
@users = @project.users
end
def create
@project.accesses.create_or_find_by!(user: @user)
redirect_to project_users_url(@project)
end
def destroy
@project.accesses.destroy_by(user: @user)
redirect_to project_users_url(@project)
end
private
def set_user
@user = Current.account.users.find(params[:id])
end
end
+2
View File
@@ -13,6 +13,8 @@ class User < ApplicationRecord
normalizes :email_address, with: ->(value) { value.strip.downcase }
scope :active, -> { where(active: true) }
def initials
name.scan(/\b\w/).join
end
+14
View File
@@ -0,0 +1,14 @@
<h1>Users on <%= @project.name %></h1>
<%= form_with url: project_access_path, method: :put do |form| %>
<ul>
<% Current.account.users.active.each do |user| %>
<li>
<%= check_box_tag "user_ids[]", user.id, @project.users.include?(user), id: nil, disabled: user == Current.user %>
<%= user.name %>
</li>
<% end %>
</ul>
<%= form.submit %>
<% end %>
-7
View File
@@ -1,7 +0,0 @@
<h1>Users on <%= @project.name %></h1>
<ul>
<% @users.each do |user| %>
<li><%= user.name %> <%= link_to "X", project_user_path(@project, user), data: { turbo_method: :delete } %></li>
<% end %>
</ul>
+1 -1
View File
@@ -4,7 +4,7 @@ Rails.application.routes.draw do
resource :session
resources :projects do
resources :users, controller: "projects/users"
resource :access, controller: "projects/accesses"
end
resources :bubbles do