Class: Decidim::ActivityCell
- Includes:
- Cell::ViewModel::Partial
- Defined in:
- app/cells/decidim/activity_cell.rb
Overview
This cell is used to render public activities performed by users.
Each model that we want to represent should inherit from this cell and tweak the necessary methods (usually ‘title` is enough).
Constant Summary
Constants included from AmendmentsHelper
Decidim::AmendmentsHelper::TOTAL_STEPS
Instance Method Summary collapse
- #cache_hash ⇒ Object
- #created_at ⇒ Object
-
#description ⇒ Object
The description to show at the card.
- #element_id ⇒ Object
- #id_prefix ⇒ Object
-
#renderable? ⇒ Boolean
Since activity logs could be linked to resource no longer available this method is added in order to skip rendering a cell if there is not enough data.
-
#resource ⇒ Object
The resource linked to the activity.
-
#resource_link_path ⇒ Object
The link to the resource linked to the activity.
-
#resource_link_text ⇒ Object
The text to show as the link to the resource.
- #show ⇒ Object
-
#title ⇒ Object
The title to show at the card.
- #title_icon ⇒ Object
- #user ⇒ Object
Methods inherited from ViewModel
#call, #current_user, #view_context
Methods included from IconHelper
#component_icon, #manifest_icon, #resource_icon, #resource_type_icon, #resource_type_icon_key, #text_with_resource_icon
Methods included from LayoutHelper
#_icon_classes, #apple_favicon, #application_path, #current_url, #current_user_unread_data, #external_icon, #favicon, #icon, #legacy_favicon, #role, #root_url
Methods included from TooltipHelper
Methods included from ModalHelper
#decidim_drawer, #decidim_modal
Methods included from OrganizationHelper
#current_organization_name, #organization_colors, #organization_description_label, #organization_name
Methods included from TranslatableAttributes
#attachment?, #default_locale?
Methods included from ApplicationHelper
#add_body_classes, #cell, #edit_link, #extra_admin_link, #html_truncate, #layout_item_classes, #present, #prevent_timeout_seconds, #resolve_presenter_class, #text_initials
Methods included from CacheHelper
Methods included from AmendmentsHelper
#accept_and_reject_buttons_for, #action_button_card_for, #allowed_to_accept_and_reject?, #allowed_to_promote?, #amendments_enabled?, #amendments_form_field_for, #amendments_form_fields_label, #amendments_form_fields_value, #can_participate_in_private_space?, #can_react_to_emendation?, #current_step, #emendation_actions_for, #emendation_announcement_for, #promote_button_for, #render_emendation_body, #total_steps, #wizard_aside_back_url, #wizard_header_title
Methods included from RichTextEditorHelper
Methods included from ContextualHelpHelper
Methods included from DecidimFormHelper
#areas_for_select, #base_error_messages, #decidim_form_for, #decidim_form_slug_url, #editor_field_tag, #form_field_has_error?, #form_required_explanation, #name_with_locale, #tab_element_class_for, #translated_field_tag
Methods included from OmniauthHelper
#normalize_provider_name, #oauth_icon, #provider_name
Methods included from SanitizeHelper
#decidim_escape_translated, #decidim_html_escape, #decidim_rich_text, #decidim_sanitize, #decidim_sanitize_admin, #decidim_sanitize_editor, #decidim_sanitize_editor_admin, #decidim_sanitize_newsletter, #decidim_sanitize_translated, #decidim_url_escape, included
Methods included from ReplaceButtonsHelper
Methods included from ActionAuthorizationHelper
#action_authorized_button_to, #action_authorized_link_to, #logged_button_to, #logged_link_to
Methods included from ResourceHelper
#linked_classes_filter_values_for, #linked_classes_for, #resource_locator
Instance Method Details
#cache_hash ⇒ Object
107 108 109 110 111 112 113 114 115 |
# File 'app/cells/decidim/activity_cell.rb', line 107 def cache_hash hash = [] hash << id_prefix hash << I18n.locale.to_s hash << model.class.name.underscore hash << model.cache_key_with_version if model.respond_to?(:cache_key_with_version) hash.join(Decidim.cache_key_separator) end |
#created_at ⇒ Object
85 86 87 |
# File 'app/cells/decidim/activity_cell.rb', line 85 def created_at t("decidim.activity.time_ago", time: time_ago_in_words(model.created_at)) end |
#description ⇒ Object
The description to show at the card.
The card will also be displayed OK if there is no description.
61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'app/cells/decidim/activity_cell.rb', line 61 def description resource_description = resource.try(:resource_description) || resource.try(:description) return if resource_description.blank? resource_description = case resource_description when String resource_description when Hash translated_attribute(resource_description) end truncate((resource_description), length: 300) end |
#element_id ⇒ Object
99 100 101 |
# File 'app/cells/decidim/activity_cell.rb', line 99 def element_id "#{id_prefix}-#{model.id}" end |
#id_prefix ⇒ Object
103 104 105 |
# File 'app/cells/decidim/activity_cell.rb', line 103 def id_prefix @id_prefix ||= context[:id_prefix].presence || "action" end |
#renderable? ⇒ Boolean
Since activity logs could be linked to resource no longer available this method is added in order to skip rendering a cell if there is not enough data.
26 27 28 |
# File 'app/cells/decidim/activity_cell.rb', line 26 def renderable? resource.present? && participatory_space.present? && published? end |
#resource ⇒ Object
The resource linked to the activity.
31 32 33 34 35 |
# File 'app/cells/decidim/activity_cell.rb', line 31 def resource return if model.blank? model.resource_lazy end |
#resource_link_path ⇒ Object
The link to the resource linked to the activity.
76 77 78 |
# File 'app/cells/decidim/activity_cell.rb', line 76 def resource_link_path resource_locator(resource).path end |
#resource_link_text ⇒ Object
The text to show as the link to the resource.
81 82 83 |
# File 'app/cells/decidim/activity_cell.rb', line 81 def resource_link_text decidim_escape_translated(resource.title) end |
#show ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 |
# File 'app/cells/decidim/activity_cell.rb', line 11 def show return unless renderable? render rescue NoMethodError => e # Soft-deleted components or participatory spaces could cause errors # when rendering activities. We log them for further inspection but # avoid breaking the entire activity feed. Rails.logger.error("Error rendering activity cell for #{model.id}: #{e.}") nil end |
#title ⇒ Object
The title to show at the card.
The card will also be displayed OK if there is no title.
40 41 42 43 44 45 46 47 48 49 50 |
# File 'app/cells/decidim/activity_cell.rb', line 40 def title resource_title = resource.try(:resource_title) || resource.try(:title) return if resource_title.blank? case resource_title when String decidim_html_escape(resource_title) when Hash decidim_escape_translated(resource_title) end end |
#title_icon ⇒ Object
52 53 54 55 56 |
# File 'app/cells/decidim/activity_cell.rb', line 52 def title_icon return if resource.blank? resource_type_icon(resource.class) end |
#user ⇒ Object
89 90 91 92 93 94 95 |
# File 'app/cells/decidim/activity_cell.rb', line 89 def user return resource. if resource.respond_to?(:author) # As Proposals have Coauthorable concern instead of Authorable return resource.identities.first if resource.respond_to?(:identities) model.user_lazy if resource.respond_to?(:user) end |