1
1
<template >
2
2
<div class =" flex items-center justify-start my-3 text-sm" >
3
- <div class =" " >
3
+ <div class =" flex items-center " >
4
4
<svg
5
5
xmlns =" http://www.w3.org/2000/svg"
6
6
class =" h-5 w-5 text-gray-300"
13
13
clip-rule =" evenodd"
14
14
/>
15
15
</svg >
16
+ <span class =" text-gray-400 ml-1" >{{ numFilters }} active <span v-text =" numFilters === 1 ? 'filter' : 'filters'" ></span >:</span >
16
17
</div >
17
18
18
19
<button
19
- v-for =" (filter) in filters.filter((filter) => filter.value) "
20
+ v-for =" (filter) in activeFilters "
20
21
:key =" filter.label"
21
22
class =" block group ml-3 flex items-center justify-between px-2 py-1 rounded bg-gray-100"
23
+ :class =" `hover:${activeClasses.text}`"
22
24
@click =" onFilterChange(filter.key, null)"
23
25
>
24
- <span class =" capitalize text-gray-500" >{{ filter.label.replace('_', ' ') }}</span >:
25
- <span class =" ml-1 group-hover:line-through" >{{ filter.options[filter.value] }}</span >
26
+ <span
27
+ class =" capitalize text-gray-500"
28
+ :class =" `group-hover:${activeClasses.text}`"
29
+ >
30
+ {{ filter.label.replace('_', ' ') }}
31
+ </span >:<span class =" ml-1" >{{ filter.options[filter.value] }}</span >
26
32
27
33
<svg
28
34
:class =" `group-hover:${activeClasses.text}`"
42
48
</template >
43
49
44
50
<script setup>
45
- import { inject } from " vue" ;
51
+ import { computed , inject } from " vue" ;
46
52
47
- defineProps ({
53
+ const props = defineProps ({
48
54
filters: {
49
55
type: Object ,
50
56
required: true ,
@@ -58,4 +64,8 @@ defineProps({
58
64
59
65
const activeClasses = inject (" activeClasses" );
60
66
67
+ const activeFilters = computed (() => props .filters .filter ((filter ) => filter .value !== null ));
68
+
69
+ const numFilters = computed (() => activeFilters .value .length );
70
+
61
71
</script >
0 commit comments