11<script lang="ts" setup>
2- import { computed } from ' vue' ;
3- import { FacetCollection , FacetValues } from ' ../types' ;
2+ import { computed , ref } from ' vue' ;
3+ import { FacetCollection , FacetItem , FacetValues } from ' ../types' ;
44
55const props = defineProps <{
6- facets: FacetValues
6+ facets: FacetValues ,
7+ sort: SortPropName
78}>()
89
910const toggleAll = (f : FacetCollection ) => {
@@ -21,6 +22,12 @@ const facetsSorted = computed(() => {
2122 })
2223})
2324
25+ export type SortPropName = ' count' | ' label'
26+ const facetItemsSorted = (items : FacetItem [], sortBy : SortPropName ) => {
27+ let dir = sortBy === ' count' ? - 1 : 1
28+ return items .sort ((a , b ) => a [sortBy ] > b [sortBy ] ? 1 * dir : - 1 * dir )
29+ }
30+
2431const formatNumber = (num : number ): string => {
2532 return Intl .NumberFormat (' en-US' , {
2633 notation: " compact" ,
@@ -40,7 +47,7 @@ const formatNumber = (num: number): string => {
4047 <span class =" facet-toggle" @click =" toggleAll(f)" >All</span >
4148 </div >
4249 <div v-if =" f.toggled" class =" facet-items" >
43- <div v-for =" l in f.items" class =" facet-item" @click =" l.selected = !l.selected"
50+ <div v-for =" l in facetItemsSorted( f.items, props.sort) " class =" facet-item" @click =" l.selected = !l.selected"
4451 :class =" { 'facet-selected': l.selected }" >
4552 <div class =" facet-label" :title =" l.label" >{{ l.label }}</div >
4653 <div class =" facet-val" :title =" l.count.toString()" >{{ formatNumber(l.count) }}</div >
0 commit comments