CharacterFilterChips.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <!--suppress JSUnresolvedReference, VueUnrecognizedSlot -->
  2. <template>
  3. <div class="flex flex-row flex-wrap gap-1">
  4. <template v-if="filters.global.value.length > 0">
  5. <Chip
  6. :label="`Anywhere: &ldquo;${filters.global.value}&rdquo;`"
  7. removable
  8. >
  9. <template #removeicon>
  10. <Icon
  11. name="ph:x-bold"
  12. class="rounded-full p-0.5 hover:bg-primary-200 dark:hover:bg-primary-600"
  13. size="1.25em"
  14. @click="resetGlobalFilter"
  15. />
  16. </template>
  17. </Chip>
  18. </template>
  19. <template
  20. v-if="hasAnyNameFilters"
  21. v-for="field in _keys(nameFields)"
  22. :key="field"
  23. >
  24. <Chip
  25. v-if="hasFilterFor(field)"
  26. :label="`${_startCase(field)}: &ldquo;${filters[field].value}&rdquo;`"
  27. removable
  28. >
  29. <template #removeicon>
  30. <Icon
  31. name="ph:x-bold"
  32. class="rounded-full p-0.5 hover:bg-primary-200 dark:hover:bg-primary-600"
  33. size="1.25em"
  34. @click="resetFilterFor(field)"
  35. />
  36. </template>
  37. </Chip>
  38. </template>
  39. <template
  40. v-if="hasAnyCategoryFilters"
  41. v-for="field in _keys(optionsFields)"
  42. :key="field"
  43. >
  44. <Chip
  45. v-if="hasFilterFor(field)"
  46. v-for="value in filters[field].value"
  47. :label="value"
  48. removable
  49. >
  50. <template #removeicon>
  51. <Icon
  52. name="ph:x-bold"
  53. class="rounded-full p-0.5 hover:bg-primary-200 dark:hover:bg-primary-600"
  54. size="1.25em"
  55. @click="removeFilterValueFrom(field, value)"
  56. />
  57. </template>
  58. </Chip>
  59. </template>
  60. </div>
  61. </template>
  62. <script setup>
  63. const filtersStore = useFiltersStore()
  64. const {
  65. hasAnyCategoryFilters,
  66. hasAnyNameFilters,
  67. hasFilterFor,
  68. hasGlobalFilter,
  69. removeFilterValueFrom,
  70. resetFilterFor,
  71. resetGlobalFilter
  72. } = filtersStore
  73. const { filters } = storeToRefs(filtersStore)
  74. </script>
  75. <style scoped></style>