Sha256: 3c02c48bf85e23d0bc9ad3eb4b4e48481d4a803fe6880ee8e17eae8f6830dc36

Contents?: true

Size: 1.52 KB

Versions: 33

Compression:

Stored size: 1.52 KB

Contents

module Spree
  module Api
    module Products
      class FiltersPresenter
        def initialize(current_store, current_currency, params)
          @products_for_filters = find_products_for_filters(current_store, current_currency, params)
        end

        def to_h
          option_values = Spree::OptionValues::FindAvailable.new(products_scope: products_for_filters).execute
          option_values_presenters = Spree::Filters::OptionsPresenter.new(option_values_scope: option_values).to_a
          product_properties = Spree::ProductProperties::FindAvailable.new(products_scope: products_for_filters).execute
          product_properties_presenters = Spree::Filters::PropertiesPresenter.new(product_properties_scope: product_properties).to_a
          {
            option_types: option_values_presenters.map(&:to_h),
            product_properties: product_properties_presenters.map(&:to_h)
          }
        end

        private

        attr_reader :products_for_filters

        def find_products_for_filters(current_store, current_currency, params)
          current_taxons = find_current_taxons(current_store, params)
          current_store.products.active(current_currency).in_taxons(current_taxons)
        end

        def find_current_taxons(current_store, params)
          taxons_param = params.dig(:filter, :taxons)
          return nil if taxons_param.nil? || taxons_param.to_s.blank?

          taxon_ids = taxons_param.to_s.split(',')
          current_store.taxons.where(id: taxon_ids)
        end
      end
    end
  end
end

Version data entries

33 entries across 33 versions & 3 rubygems

Version Path
spree_api-4.10.1 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.10.0 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.9.0 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.8.3 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.8.2 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.7.3 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.6.6 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.5.5 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.3.3 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.4.1 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.5.4 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.6.5 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.7.2 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.7.1 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.6.4 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.7.0 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.6.3 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.6.2 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.6.1 app/presenters/spree/api/products/filters_presenter.rb
spree_api-4.6.0 app/presenters/spree/api/products/filters_presenter.rb