Extract component to show moderation actions

Note that in proposal notifications we're writing the call to
render the component in the same line as the <div class="reply">
definition in order to be able to use the `:empty` selector when the
component renders nothing. No browser matches whitespace with the
`:empty` selector, so we can't add newline characters inside the tag. A
more elegant solution would be extracting the proposal notification
actions to a component and only rendering it if the moderation actions
component is rendered.
This commit is contained in:
Javi Martín
2021-12-02 02:18:46 +01:00
parent 49edd6a9b1
commit cac24b0159
12 changed files with 126 additions and 76 deletions

View File

@@ -0,0 +1,12 @@
<span class="moderation-actions">
<% if can? :hide, record %>
<%= link_to t("admin.actions.hide").capitalize, hide_path,
method: :put, remote: true, data: { confirm: confirm_hide_text } %>
<% end %>
<% if can? :hide, record.author %>
<%= raw separator %>
<%= link_to t("admin.actions.hide_author").capitalize, hide_moderation_user_path(record.author_id),
method: :put, data: { confirm: confirm_hide_author_text } %>
<% end %>
</span>

View File

@@ -0,0 +1,34 @@
class Shared::ModerationActionsComponent < ApplicationComponent
attr_reader :record
delegate :can?, to: :helpers
def initialize(record)
@record = record
end
def render?
can?(:hide, record) || can?(:hide, record.author)
end
private
def hide_path
polymorphic_path([:moderation, record], action: :hide)
end
def confirm_hide_text
t("admin.actions.confirm_action", action: t("admin.actions.hide"), name: record.human_name)
end
def confirm_hide_author_text
t("admin.actions.confirm_action", action: t("admin.actions.hide_author"), name: record.author.name)
end
def separator
if record.is_a?(Comment)
"&nbsp;&bull;&nbsp;"
else
"&nbsp;|&nbsp;"
end
end
end