Sha256: 3ed9fa1b034fd6409b756d878efd30a9e75cff4e60752f51cf6881ab4a802e6b

Contents?: true

Size: 1.96 KB

Versions: 29

Compression:

Stored size: 1.96 KB

Contents

# frozen_string_literal: true

module Decidim
  module Assemblies
    # A presenter to render statistics in the homepage.
    class AssemblyStatsPresenter < Rectify::Presenter
      attribute :assembly, Decidim::Assembly
      include IconHelper

      # Public: Render a collection of primary stats.
      def highlighted
        highlighted_stats = component_stats(priority: StatsRegistry::HIGH_PRIORITY)
        highlighted_stats = highlighted_stats.concat(component_stats(priority: StatsRegistry::MEDIUM_PRIORITY))
        highlighted_stats = highlighted_stats.reject(&:empty?)
        highlighted_stats = highlighted_stats.reject { |_manifest, _name, data| data.zero? }
        grouped_highlighted_stats = highlighted_stats.group_by { |stats| stats.first.name }

        safe_join(
          grouped_highlighted_stats.map do |_manifest_name, stats|
            content_tag :div, class: "process_stats-item" do
              safe_join(
                stats.each_with_index.map do |stat, index|
                  render_stats_data(stat[0], stat[1], stat[2], index)
                end
              )
            end
          end
        )
      end

      private

      def component_stats(conditions)
        Decidim.component_manifests.map do |component_manifest|
          component_manifest.stats.filter(conditions).with_context(published_components).map { |name, data| [component_manifest, name, data] }.flatten
        end
      end

      def render_stats_data(component_manifest, name, data, index)
        safe_join([
                    index.zero? ? manifest_icon(component_manifest) : " /&nbsp".html_safe,
                    content_tag(:span, "#{number_with_delimiter(data)} " + I18n.t(name, scope: "decidim.assemblies.statistics"),
                                class: "#{name} process_stats-text")
                  ])
      end

      def published_components
        @published_components ||= Component.where(participatory_space: assembly).published
      end
    end
  end
end

Version data entries

29 entries across 29 versions & 1 rubygems

Version Path
decidim-assemblies-0.21.0 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.20.1 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.20.0 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.19.1 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.18.1 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.19.0 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.17.2 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.18.0 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.17.1 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.16.1 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.17.0 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.16.0 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.15.2 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.15.1 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.15.0 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.14.4 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.14.3 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.14.2 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.14.1 app/presenters/decidim/assemblies/assembly_stats_presenter.rb
decidim-assemblies-0.13.1 app/presenters/decidim/assemblies/assembly_stats_presenter.rb