Sha256: b63cca584d27acbdf0a0809a18f867e83e418a5f82533aa40fab38c6715c9315

Contents?: true

Size: 1.8 KB

Versions: 37

Compression:

Stored size: 1.8 KB

Contents

# frozen_string_literal: true

module Decidim
  module Initiatives
    # This custom Form builder add the fields needed to deal with
    # Initiative types.
    class InitiativesFilterFormBuilder < Decidim::FilterFormBuilder
      # Public: Generates a select field with the initiative types.
      #
      # name       - The name of the field (usually type_id)
      # collection - A collection of initiative types.
      # options    - An optional Hash with options:
      # - prompt   - An optional String with the text to display as prompt.
      #
      # Returns a String.
      def initiative_types_select(name, collection, options = {})
        selected = object.send(name)

        types = types_for_options_for_select(selected, collection)

        prompt = options.delete(:prompt)
        remote_path = options.delete(:remote_path) || false
        multiple = options.delete(:multiple) || false
        html_options = {
          multiple: multiple,
          class: "select2",
          "data-remote-path" => remote_path,
          "data-placeholder" => prompt
        }

        select(name, @template.options_for_select(types, selected: selected), options, html_options)
      end

      private

      def types_for_options_for_select(selected, collection)
        if selected.present?
          if selected == "all"
            types = collection.all.map do |type|
              [type.title[I18n.locale.to_s], type.id]
            end
          else
            selected = selected.values if selected.is_a?(Hash)
            selected = [selected] unless selected.is_a?(Array)
            types = collection.where(id: selected.map(&:to_i)).map do |type|
              [type.title[I18n.locale.to_s], type.id]
            end
          end
        else
          types = []
        end
        types
      end
    end
  end
end

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
decidim-initiatives-0.27.9 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.27.8 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.27.7 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.27.6 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.26.10 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.26.9 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.27.5 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.26.8 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.27.4 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.27.3 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.26.7 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.26.5 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.27.2 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.27.1 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.26.4 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.27.0 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.26.3 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.27.0.rc2 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.27.0.rc1 lib/decidim/initiatives/initiatives_filter_form_builder.rb
decidim-initiatives-0.26.2 lib/decidim/initiatives/initiatives_filter_form_builder.rb