stack/src/components/fields/checkbox-select-field/checkbox-select-field.twig line 1

Open in your IDE?
  1. {%- set class_name = [
  2.   "f-checkbox-select d-flex flex-column",
  3.   "u-posr",
  4.   props.variant in ["inline"] ? "--" ~ props.variant : "--default",
  5. ]|join(' ')|trim -%}
  6. {%- set attrs = [
  7.   'class="' ~ class_name ~ '"',
  8. ] -%}
  9. {%- if props.full_name is defined %}
  10.   {%- set attrs = attrs|merge(['data-name="' ~ props.full_name ~ '"']) -%}
  11. {%- endif -%}
  12. {%- set attrs = attrs|join(' ')|trim -%}
  13. {# Could be one liner, but filter 'filter' doesnt seem to work, sadly. Prefered solution ⬇️
  14. {% set selected_count = props.options|filter(option => option.checked == true) %}
  15. Twing seems to support filter 'filter' https://www.npmjs.com/package/gulp-twing
  16. https://nightlycommit.github.io/twing/language-reference/filters/filter.html #}
  17. {% set selected_count = 0 %}
  18. {% for choice in props.choices %}
  19.   {% if choice.checked == true %}
  20.     {% set selected_count = selected_count + 1 %}
  21.   {% endif %}
  22. {% endfor %}
  23. {% set clear_tag = {
  24.   title: selected_count,
  25.   name: "f-checkbox-select__clear u-cursor-pointer",
  26.   extra_class: selected_count > 0 ? "--active" : "",
  27.   size: "sm",
  28.   tag: "span",
  29.   icon: {
  30.     src: "@Images/svg/xmark.svg",
  31.     size: "sm"
  32.   },
  33. } %}
  34. <div {{ attrs|raw }}>
  35.   {% if props.label %}
  36.     {% include "@Components/fields/label-field/label-field.twig" with {props: {
  37.       title: props.label,
  38.       id: props.id,
  39.       required: props.required,
  40.     }} %}
  41.   {% endif %}
  42.   <header class="f-checkbox-select__header d-flex align-items-center u-posr px-1" title="{{ props.title }}">
  43.     <div class="f-checkbox-select__title flex-grow-1 u-color-primary-500 u-fz-sm u-posr u-top-0 u-left-0 overflow-hidden u-cursor-pointer">
  44.       <span class="u-posa u-left-0 u-top-50-p u-translate-middle-y text-nowrap">{{ props.title }}</span>
  45.     </div>
  46.     <div class="flex-shrink-0 d-flex gap-1 ms-auto align-items-center">
  47.       {% include "@Components/items/tag-item/tag-item.twig" with {props: clear_tag} %}
  48.       <div class="f-checkbox-select__toggler d-flex align-items-center justify-content-center u-cursor-pointer">
  49.         {% include "@Components/icon/icon.twig" with {props: {
  50.           src: "@Images/svg/arrow-down.svg",
  51.           size: "lg",
  52.         }} %}
  53.       </div>
  54.     </div>
  55.   </header>
  56.   <div class="f-checkbox-select__body u-scrollbar u-posa" data-scrollbar-y>
  57.     <div class="f-checkbox-select__body-inner">
  58.       <div class="d-flex gap-2 flex-column pt-2 ps-1">
  59.         {% for choice in props.choices %}
  60.           {% include "@Components/fields/checkbox-field/checkbox-field.twig" with {props: choice|merge({
  61.             id: props.id ~ "-" ~ loop.index0,
  62.             name: props.full_name,
  63.             data: {
  64.               "filter-title": choice.label
  65.             }
  66.           })} %}
  67.         {% endfor %}
  68.       </div>
  69.     </div>
  70.   </div>
  71. </div>