Search code examples
javascriptlaravelvue.jslaravel-scoutvue-instant-search

How to create a custom refinement list in vue instant search?


I am working with Laravel Scout and alogolia as the driver. Since I have vue on the front end, I tried the vue instant search package which works really well.

The issue that I am facing is that I need to customize it to the in app styles we are using.

Refinement Section

This is the particular component I am trying to customize. It tried over riding the classes like they show in Styling Section but that won't cut it for me since I need to add more tags and attributes in there.

<ais-refinement-list attribute-name="categories.title" inline-template>
      <div class="column w-1/5">
            Hello
      </div>
</ais-refinement-list>

Now I know I can start to write an inline template like so but what I don't understand yet, is how to get the values for refinements so I can make the checkboxes and furthermore how to send them back to the component once they are selected. Any help is appreciated.


Solution

  • I dug through the package it self here and then found the template inside here. For some reason I could not see this in vendor code.

    Got all the variables and method calls from in there

    This is the custom version:

    <ais-refinement-list attribute-name="categories.title" inline-template>
        <div class="column w-1/5">
            <h3>Categories</h3>
            <hr class="my-3">
            <div class='column w-full mb-4' v-for="facet in facetValues">
                <div class="checkbox-control mb-4">
                    <input type="checkbox" :id="facet.name" :value="facet.name" v-model="facet.isRefined" @change="toggleRefinement(facet)"/>
                    <label :for="facet.name">{{ facet.name }} ({{ facet.count }})</label>
                </div>
            </div>
        </div>
    </ais-refinement-list>