Extract component to add/remove admin/mod/manager
We remove some duplication by doing so.
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
<% if already_has_role? %>
|
||||
<%= render Admin::TableActionsComponent.new(record, actions: actions) %>
|
||||
<% else %>
|
||||
<%= render Admin::TableActionsComponent.new(actions: []) do %>
|
||||
<%= link_to add_user_text, add_user_path, method: :post, class: "button success expanded" %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
30
app/components/admin/roles/table_actions_component.rb
Normal file
30
app/components/admin/roles/table_actions_component.rb
Normal file
@@ -0,0 +1,30 @@
|
||||
class Admin::Roles::TableActionsComponent < ApplicationComponent
|
||||
attr_reader :record, :actions
|
||||
|
||||
def initialize(record, actions: [:destroy])
|
||||
@record = record
|
||||
@actions = actions
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def role
|
||||
record.class.name.tableize
|
||||
end
|
||||
|
||||
def already_has_role?
|
||||
record.persisted?
|
||||
end
|
||||
|
||||
def add_user_text
|
||||
t("admin.#{role}.#{role.singularize}.add")
|
||||
end
|
||||
|
||||
def add_user_path
|
||||
{
|
||||
controller: "admin/#{role}",
|
||||
action: :create,
|
||||
user_id: record.user
|
||||
}
|
||||
end
|
||||
end
|
||||
@@ -29,7 +29,10 @@
|
||||
<%= administrator.description %>
|
||||
</td>
|
||||
<td>
|
||||
<%= render Admin::TableActionsComponent.new(administrator) %>
|
||||
<%= render Admin::Roles::TableActionsComponent.new(
|
||||
administrator,
|
||||
actions: [:edit, :destroy]
|
||||
) %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
@@ -18,16 +18,7 @@
|
||||
<td><%= user.name %></td>
|
||||
<td><%= user.email %></td>
|
||||
<td>
|
||||
<% if user.administrator? && user.administrator.persisted? %>
|
||||
<%= render Admin::TableActionsComponent.new(user.administrator, actions: [:destroy]) %>
|
||||
<% else %>
|
||||
<%= link_to t("admin.administrators.administrator.add"),
|
||||
{ controller: "admin/administrators",
|
||||
action: :create,
|
||||
user_id: user },
|
||||
method: :post,
|
||||
class: "button success expanded" %>
|
||||
<% end %>
|
||||
<%= render Admin::Roles::TableActionsComponent.new(user.administrator || user.build_administrator) %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
<%= manager.email %>
|
||||
</td>
|
||||
<td>
|
||||
<%= render Admin::TableActionsComponent.new(manager, actions: [:destroy]) %>
|
||||
<%= render Admin::Roles::TableActionsComponent.new(manager) %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
@@ -18,16 +18,7 @@
|
||||
<td><%= user.name %></td>
|
||||
<td><%= user.email %></td>
|
||||
<td>
|
||||
<% if user.manager? && user.manager.persisted? %>
|
||||
<%= render Admin::TableActionsComponent.new(user.manager, actions: [:destroy]) %>
|
||||
<% else %>
|
||||
<%= link_to t("admin.managers.manager.add"),
|
||||
{ controller: "admin/managers",
|
||||
action: :create,
|
||||
user_id: user },
|
||||
method: :post,
|
||||
class: "button success expanded" %>
|
||||
<% end %>
|
||||
<%= render Admin::Roles::TableActionsComponent.new(user.manager || user.build_manager) %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<%= moderator.email %>
|
||||
</td>
|
||||
<td>
|
||||
<%= render Admin::TableActionsComponent.new(moderator, actions: [:destroy]) %>
|
||||
<%= render Admin::Roles::TableActionsComponent.new(moderator) %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
@@ -18,16 +18,7 @@
|
||||
<td><%= user.name %></td>
|
||||
<td><%= user.email %></td>
|
||||
<td>
|
||||
<% if user.moderator? && user.moderator.persisted? %>
|
||||
<%= render Admin::TableActionsComponent.new(user.moderator, actions: [:destroy]) %>
|
||||
<% else %>
|
||||
<%= link_to t("admin.moderators.moderator.add"),
|
||||
{ controller: "admin/moderators",
|
||||
action: :create,
|
||||
user_id: user },
|
||||
method: :post,
|
||||
class: "button success expanded" %>
|
||||
<% end %>
|
||||
<%= render Admin::Roles::TableActionsComponent.new(user.moderator || user.build_moderator) %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
17
spec/components/admin/roles/table_actions_component_spec.rb
Normal file
17
spec/components/admin/roles/table_actions_component_spec.rb
Normal file
@@ -0,0 +1,17 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe Admin::Roles::TableActionsComponent, type: :component do
|
||||
let(:user) { create(:user) }
|
||||
|
||||
it "renders link to add the role for new records" do
|
||||
render_inline Admin::Roles::TableActionsComponent.new(user.build_manager)
|
||||
|
||||
expect(page).to have_css "a[data-method='post']", text: "Add"
|
||||
end
|
||||
|
||||
it "renders link to remove the role for existing records" do
|
||||
render_inline Admin::Roles::TableActionsComponent.new(create(:manager, user: user))
|
||||
|
||||
expect(page).to have_css "a[data-method='delete']", text: "Delete"
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user