{% comment %} Renders facets (filtering and sorting) Accepts: - results: {Object} Collection or Search object - enable_filtering: {Boolean} Show filtering when true - enable_sorting: {Boolean} Show sorting when true - filter_type: {String} Type of filter - paginate: {Object} Usage: {% render 'facets', results: collection, enable_filtering: true, enable_sorting: true, filter_type: 'vertical', paginate: paginate %} {% endcomment %} {{ 'component-show-more.css' | asset_url | stylesheet_tag }} {{ 'component-swatch-input.css' | asset_url | stylesheet_tag }} {{ 'component-swatch.css' | asset_url | stylesheet_tag }} {%- liquid assign sort_by = results.sort_by | default: results.default_sort_by assign total_active_values = 0 assign default_presentation = 'text' if results.url assign results_url = results.url else assign terms = results.terms | escape assign results_url = '?q=' | append: terms | append: '&options%5Bprefix%5D=last&sort_by=' | append: sort_by endif -%}
{%- if filter_type == 'vertical' or filter_type == 'horizontal' -%}
{%- if results.terms -%} {%- endif -%} {% if enable_filtering %} {% comment %} Heading is the first tabbable element on filter type horizontal {% endcomment %}
{%- if filter_type == 'horizontal' and results.filters != empty -%}

{{ 'products.facets.filter_by_label' | t }}

{%- endif -%} {% comment %} Pills are right below the title for filter type vertical {% endcomment %} {%- if filter_type == 'vertical' -%}
{%- unless results.filters == empty -%}

{{ 'products.facets.filter_by_label' | t }}

{%- endunless -%} {{ 'products.facets.clear_all' | t }}
{%- for filter in results.filters -%} {%- for value in filter.active_values -%} {{ filter.label | escape }}: {{ value.label | escape }} {{- 'icon-close-small.svg' | inline_asset_content -}} {{ 'products.facets.clear_filter' | t }} {%- endfor -%} {% if filter.type == 'price_range' %} {% assign min = filter.min_value.value %} {% assign max = filter.max_value.value %} {%- if min != null or max != null -%} {{ min | default: 0 | money }} - {{ max | default: filter.range_max | money }} {{- 'icon-close-small.svg' | inline_asset_content -}} {{ 'products.facets.clear_filter' | t }} {%- endif -%} {% endif %} {%- endfor -%}
{%- endif -%} {% comment %} Filters for both horizontal and vertical filter {% endcomment %} {%- for filter in results.filters -%} {% liquid assign total_active_values = total_active_values | plus: filter.active_values.size assign presentation = filter.presentation | default: default_presentation if presentation == 'image' assign show_more_number = 12 assign visual_layout_class = 'facets-layout facets-layout-grid facets-layout-grid--' | append: presentation else assign show_more_number = 10 assign visual_layout_class = 'facets-layout facets-layout-list facets-layout-list--' | append: presentation endif %} {% case filter.type %} {% when 'boolean', 'list' %}
{{- filter.label | escape }} {%- if filter_type == 'vertical' -%} ({{ filter.active_values.size }}) {%- endif -%} {%- if filter_type == 'vertical' and filter.operator == 'AND' -%} {{ 'products.facets.filter_and_operator_subtitle' | t }} {%- endif -%} {{- 'icon-caret.svg' | inline_asset_content -}}
{%- if filter_type != 'vertical' -%}
{{- 'products.facets.filters_selected' | t: count: filter.active_values.size -}} {%- if filter.operator == 'AND' -%} {{ 'products.facets.filter_and_operator_subtitle' | t }} {%- endif -%}
{{ 'products.facets.reset' | t }}
{%- endif -%}
{{ filter.label | escape }} {%- liquid assign sorted_values = filter.values # Keep the selected values grouped together when operator is AND if filter.operator == 'AND' assign active_filter_values = filter.values | where: 'active', true assign inactive_filter_values = filter.values | where: 'active', false assign sorted_values = active_filter_values | concat: inactive_filter_values endif -%}
    {%- for value in sorted_values -%} {% liquid assign input_id = 'Filter-' | append: filter.param_name | escape | append: '-' | append: forloop.index assign is_disabled = false if value.count == 0 and value.active == false assign is_disabled = true endif %} {%- capture label_class -%} facets__label facet-checkbox{% if is_disabled %} disabled{% endif %}{% if value.active %} active{% endif %} {%- endcapture -%} {%- capture text_value -%} {{- value.label | escape }} ( {%- if value.count == 1 -%} {{- 'products.facets.product_count_simple.one' | t: count: value.count -}} {%- else -%} {{- 'products.facets.product_count_simple.other' | t: count: value.count -}} {%- endif -%} ) {%- endcapture -%}
  • {%- if presentation == 'swatch' -%}
    {% render 'swatch-input', id: input_id, type: 'checkbox', name: value.param_name, value: value.value, product_form_id: 'FacetFiltersForm', swatch: value.swatch, checked: value.active, disabled: is_disabled %}
    {{ text_value }}
    {%- else -%} {%- endif -%}
  • {%- endfor -%}
{%- if filter.values.size > show_more_number and filter_type == 'vertical' -%} {%- endif %}
{% when 'price_range' %}
{{ filter.label | escape }} {{- 'icon-caret.svg' | inline_asset_content -}}
{%- assign max_price_amount = filter.range_max | money | strip_html | escape -%} {{- 'products.facets.max_price' | t: price: max_price_amount -}} {%- if filter_type != 'vertical' -%} {{ 'products.facets.reset' | t }} {%- endif -%}
{% render 'price-facet', filter: filter, id_prefix: 'Filter-', filter_type: filter_type %}
{% endcase %} {%- endfor -%}
{% comment %} Pills after filtes on filter type horizontal {% endcomment %} {%- if filter_type == 'horizontal' -%}
{%- for filter in results.filters -%} {%- for value in filter.active_values -%} {{ filter.label | escape }}: {{ value.label | escape }} {{- 'icon-close-small.svg' | inline_asset_content -}} {{ 'products.facets.clear_filter' | t }} {%- endfor -%} {% if filter.type == 'price_range' %} {% assign min = filter.min_value.value %} {% assign max = filter.max_value.value %} {%- if min != null or max != null -%} {{ min | default: 0 | money }} - {{ max | default: filter.range_max | money }} {{- 'icon-close-small.svg' | inline_asset_content -}} {{ 'products.facets.clear_filter' | t }} {%- endif -%} {% endif %} {%- endfor -%} {{ 'products.facets.clear_all' | t }}
{%- endif -%} {% endif %} {% if results.current_vendor or results.current_type %} {% endif %} {%- if filter_type == 'horizontal' -%} {% comment %} Sorting and product count are the last elements when filter type is horizontal {% endcomment %} {%- if enable_sorting -%}

{%- assign sort_by = results.sort_by | default: results.default_sort_by -%} {{- 'icon-caret.svg' | inline_asset_content -}}
{%- endif -%}

{%- if results.results_count -%} {{ 'templates.search.results_with_count' | t: terms: results.terms, count: results.results_count }} {%- elsif results.products_count == results.all_products_count -%} {{ 'products.facets.product_count_simple' | t: count: results.products_count }} {%- else -%} {{ 'products.facets.product_count' | t: product_count: results.products_count, count: results.all_products_count }} {%- endif -%}

{%- render 'loading-spinner' -%}
{%- endif -%}
{%- endif -%} {% comment %} Drawer and mobile filter {% endcomment %}
{{- 'icon-filter.svg' | inline_asset_content -}} {%- if enable_filtering and enable_sorting -%} {{ 'products.facets.filter_and_sort' | t }} {%- elsif enable_filtering -%} {{ 'products.facets.filter_button' | t }} {%- elsif enable_sorting -%} {{ 'products.facets.sort_button' | t }} {%- endif -%} {%- if enable_filtering -%} {{ 'products.facets.filter_button' | t }} {%- endif -%} {{- 'icon-close.svg' | inline_asset_content -}}

{%- if enable_filtering and enable_sorting -%} {{ 'products.facets.filter_and_sort' | t }} {%- elsif enable_filtering -%} {{ 'products.facets.filter_button' | t }} {%- elsif enable_sorting -%} {{ 'products.facets.sort_button' | t }} {%- endif -%}

{%- if enable_filtering -%} {{ 'products.facets.filter_button' | t }} {%- endif -%}

{%- if results.results_count -%} {{ 'templates.search.results_with_count' | t: terms: results.terms, count: results.results_count }} {%- elsif results.products_count == results.all_products_count -%} {{ 'products.facets.product_count_simple' | t: count: results.products_count }} {%- else -%} {{ 'products.facets.product_count' | t: product_count: results.products_count, count: results.all_products_count }} {%- endif -%}

{%- if enable_filtering -%} {%- for filter in results.filters -%} {% liquid assign presentation = filter.presentation | default: default_presentation if presentation == 'image' assign visual_layout_class = 'facets-layout facets-layout-grid facets-layout-grid--' | append: presentation else assign visual_layout_class = 'facets-layout facets-layout-list facets-layout-list--' | append: presentation endif %} {% case filter.type %} {% when 'boolean', 'list' %}
{{ filter.label | escape }} {{- 'icon-arrow.svg' | inline_asset_content -}}
    {%- liquid assign sorted_values = filter.values # Keep the selected values grouped together when operator is AND if filter.operator == 'AND' assign active_filter_values = filter.values | where: 'active', true assign inactive_filter_values = filter.values | where: 'active', false assign sorted_values = active_filter_values | concat: inactive_filter_values endif -%} {%- for value in sorted_values -%} {% liquid assign input_id = 'Filter-' | append: filter.param_name | escape | append: '-mobile-' | append: forloop.index assign is_disabled = false if value.count == 0 and value.active == false assign is_disabled = true endif %} {%- capture label_class -%} facets__label mobile-facets__label{% if is_disabled %} disabled{% endif %}{% if value.active %} active{% endif %} {%- endcapture -%} {%- capture text_value -%} {{- value.label | escape }} ( {%- if value.count == '1' -%} {{- 'products.facets.product_count_simple.one' | t: count: value.count -}} {%- else -%} {{- 'products.facets.product_count_simple.other' | t: count: value.count -}} {%- endif -%} ) {%- endcapture -%}
  • {% if presentation == 'swatch' %}
    {% render 'swatch-input', id: input_id, type: 'checkbox', name: value.param_name, value: value.value, product_form_id: 'FacetFiltersFormMobile', swatch: value.swatch, checked: value.active, disabled: is_disabled %}
    {{ text_value }}
    {% else %} {% endif %}
  • {%- endfor -%}
{% when 'price_range' %}
{{ filter.label | escape }} {{- 'icon-arrow.svg' | inline_asset_content -}}
{%- assign max_price_amount = filter.range_max | money | strip_html | escape -%}

{{ 'products.facets.max_price' | t: price: max_price_amount }}

{% render 'price-facet', filter: filter, id_prefix: 'Mobile-Filter-' %}
{% endcase %} {%- endfor -%} {%- endif -%} {%- if enable_sorting -%}
{{- 'icon-caret.svg' | inline_asset_content -}}
{%- endif -%}
{% if results.current_vendor or results.current_type %} {% endif %} {%- if results.terms -%} {%- endif -%}
{%- for filter in results.filters -%} {%- for value in filter.active_values -%} {{ filter.label | escape }}: {{ value.label | escape }} {{- 'icon-close-small.svg' | inline_asset_content -}} {{ 'products.facets.clear_filter' | t }} {%- endfor -%} {%- if filter.type == 'price_range' -%} {% assign min = filter.min_value.value %} {% assign max = filter.max_value.value %} {%- if min != null or max != null -%} {{ min | default: 0 | money }} - {{ max | default: filter.range_max | money }} {{- 'icon-close-small.svg' | inline_asset_content -}} {{ 'products.facets.clear_filter' | t }} {%- endif -%} {%- endif -%} {%- endfor -%} {{ 'products.facets.clear_all' | t }}
{% comment %} Sort, product count and filter pills at the end when filter is type of Drawer for the correct tabbing order {% endcomment %} {%- if enable_sorting and filter_type == 'drawer' -%}

{%- assign sort_by = results.sort_by | default: results.default_sort_by -%} {{- 'icon-caret.svg' | inline_asset_content -}}
{% if results.current_vendor or results.current_type %} {% endif %} {%- if results.terms -%} {%- endif -%}
{%- endif -%}

{%- if results.results_count -%} {{ 'templates.search.results_with_count' | t: terms: results.terms, count: results.results_count }} {%- elsif results.products_count == results.all_products_count -%} {{ 'products.facets.product_count_simple' | t: count: results.products_count }} {%- else -%} {{ 'products.facets.product_count' | t: product_count: results.products_count, count: results.all_products_count }} {%- endif -%}

{%- render 'loading-spinner' -%}
{%- if filter_type == 'drawer' -%}
{%- for filter in results.filters -%} {%- for value in filter.active_values -%} {{ filter.label | escape }}: {{ value.label | escape }} {{- 'icon-close-small.svg' | inline_asset_content -}} {{ 'products.facets.clear_filter' | t }} {%- endfor -%} {%- if filter.type == 'price_range' -%} {% assign min = filter.min_value.value %} {% assign max = filter.max_value.value %} {%- if min != null or max != null -%} {{ min | default: 0 | money }} - {{ max | default: filter.range_max | money }} {{- 'icon-close-small.svg' | inline_asset_content -}} {{ 'products.facets.clear_filter' | t }} {%- endif -%} {%- endif -%} {%- endfor -%} {{ 'products.facets.clear_all' | t }}
{%- endif -%}