<SearchBar
  class="consul-intention-search-bar"
  ...attributes
  @filter={{@filter}}
>
    <:status as |search|>

{{#let

  (t (concat "components.consul.intention.search-bar." search.status.key)
      default=(array
        (concat "common.search." search.status.key)
        (concat "common.consul." search.status.key)
      )
  )

  (t (concat "components.consul.intention.search-bar." search.status.value)
      default=(array
        (concat "common.search." search.status.value)
        (concat "common.consul." search.status.value)
      )
  )

as |key value|}}
      <search.RemoveFilter
        aria-label={{t "common.ui.remove" item=(concat key " " value)}}
      >
        <dl>
          <dt>{{key}}</dt>
          <dd>{{value}}</dd>
        </dl>
      </search.RemoveFilter>
{{/let}}

    </:status>
    <:search as |search|>
      <search.Search
        @onsearch={{action @onsearch}}
        @value={{@search}}
        @placeholder={{t "common.search.search"}}
      >
{{#if @filter.searchproperty}}
        <search.Select
          class="type-search-properties"
          @position="right"
          @onchange={{action @filter.searchproperty.change}}
          @multiple={{true}}
          @required={{true}}
        as |components|>
          <BlockSlot @name="selected">
            <span>
              {{t "common.search.searchproperty"}}
            </span>
          </BlockSlot>
          <BlockSlot @name="options">
    {{#let components.Optgroup components.Option as |Optgroup Option|}}
            {{#each @filter.searchproperty.default as |prop|}}
              <Option @value={{prop}} @selected={{contains prop @filter.searchproperty.value}}>
                {{t (concat "common.consul." (lowercase prop))}}
              </Option>
            {{/each}}
    {{/let}}
          </BlockSlot>
        </search.Select>
  {{/if}}
      </search.Search>
    </:search>
    <:filter as |search|>
      <search.Select
        class="type-access"
        @position="left"
        @onchange={{action @filter.access.change}}
        @multiple={{true}}
      as |components|>
        <BlockSlot @name="selected">
          <span>
            {{t "components.consul.intention.search-bar.access.name"}}
          </span>
        </BlockSlot>
        <BlockSlot @name="options">
  {{#let components.Optgroup components.Option as |Optgroup Option|}}
    {{#each (array "allow" "deny" "") as |item|}}
          <Option class={{concat 'value-' item}} @value={{or item 'app-aware'}} @selected={{contains (or item 'app-aware') @filter.access.value}}>
            <span>{{t (concat "components.consul.intention.search-bar.access.options." (or item 'app-aware'))}}</span>
          </Option>
    {{/each}}
  {{/let}}
        </BlockSlot>
      </search.Select>
    </:filter>
    <:sort as |search|>
      <search.Select
        class="type-sort"
        data-test-sort-control
        @position="right"
        @onchange={{action @sort.change}}
        @multiple={{false}}
        @required={{true}}
      as |components|>
        <BlockSlot @name="selected">
          <span>
            {{#let (from-entries (array
                  (array "Action:asc" (t "components.consul.intention.search-bar.sort.access.asc"))
                  (array "Action:desc" (t "components.consul.intention.search-bar.sort.access.desc"))
                  (array "SourceName:asc" (t "components.consul.intention.search-bar.sort.source-name.asc"))
                  (array "SourceName:desc" (t "components.consul.intention.search-bar.sort.source-name.desc"))
                  (array "DestinationName:asc" (t "components.consul.intention.search-bar.sort.destination-name.asc"))
                  (array "DestinationName:desc" (t "components.consul.intention.search-bar.sort.destination-name.desc"))
                  (array "Precedence:asc" (t "common.sort.numeric.asc"))
                  (array "Precedence:desc" (t "common.sort.numeric.desc"))
                ))
              as |selectable|
            }}
              {{get selectable @sort.value}}
            {{/let}}
          </span>
        </BlockSlot>
        <BlockSlot @name="options">
  {{#let components.Optgroup components.Option as |Optgroup Option|}}
        <Optgroup @label={{t "components.consul.intention.search-bar.sort.access.name"}}>
          <Option @value="Action:asc" @selected={{eq "Action:asc" @sort.value}}>{{t "components.consul.intention.search-bar.sort.access.asc"}}</Option>
          <Option @value="Action:desc" @selected={{eq "Action:desc" @sort.value}}>{{t "components.consul.intention.search-bar.sort.access.desc"}}</Option>
        </Optgroup>
        <Optgroup @label={{t "components.consul.intention.search-bar.sort.source-name.name"}}>
          <Option @value="SourceName:asc" @selected={{eq "SourceName:asc" @sort.value}}>{{t "common.sort.alpha.asc"}}</Option>
          <Option @value="SourceName:desc" @selected={{eq "SourceName:desc" @sort.value}}>{{t "common.sort.alpha.desc"}}</Option>
        </Optgroup>
        <Optgroup @label={{t "components.consul.intention.search-bar.sort.destination-name.name"}}>
          <Option @value="DestinationName:asc" @selected={{eq "DestinationName:asc" @sort.value}}>{{t "common.sort.alpha.asc"}}</Option>
          <Option @value="DestinationName:desc" @selected={{eq "DestinationName:desc" @sort.value}}>{{t "common.sort.alpha.desc"}}</Option>
        </Optgroup>
        <Optgroup @label={{t "components.consul.intention.search-bar.sort.precedence.name"}}>
          <Option @value="Precedence:asc" @selected={{eq "Precedence:asc" @sort.value}}>{{t "common.sort.numeric.asc"}}</Option>
          <Option @value="Precedence:desc" @selected={{eq "Precedence:desc" @sort.value}}>{{t "common.sort.numeric.desc"}}</Option>
        </Optgroup>
  {{/let}}
        </BlockSlot>
      </search.Select>
    </:sort>
</SearchBar>