Skip to content

Commit 4ca8a89

Browse files
committed
fix: add live region for select/deselect feedback
1 parent cce854b commit 4ca8a89

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

app/components/Compare/FacetSelector.vue

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<script setup lang="ts">
2+
import { debounce } from 'perfect-debounce'
23
const {
34
isFacetSelected,
45
toggleFacet,
@@ -22,9 +23,29 @@ function isCategoryNoneSelected(category: string): boolean {
2223
const selectableFacets = facets.filter(f => !f.comingSoon)
2324
return selectableFacets.length > 0 && selectableFacets.every(f => !isFacetSelected(f.id))
2425
}
26+
27+
const liveRegionText = ref('')
28+
const updateLiveRegion = debounce((message: string) => {
29+
liveRegionText.value = message
30+
}, 250)
31+
32+
function selectAllFacet(category: string) {
33+
if (!isCategoryAllSelected(category)) {
34+
updateLiveRegion($t('selected_all_category_facets', { category }))
35+
selectCategory(category)
36+
}
37+
}
38+
39+
function deselectAllFacet(category: string) {
40+
if (!isCategoryNoneSelected(category)) {
41+
updateLiveRegion($t('deselected_all_category_facets', { category }))
42+
deselectCategory(category)
43+
}
44+
}
2545
</script>
2646

2747
<template>
48+
<div role="status" aria-live="polite" class="sr-only">{{ liveRegionText }}</div>
2849
<div class="space-y-3">
2950
<div v-for="category in categoryOrder" :key="category">
3051
<div class="flex items-center gap-2 mb-2">
@@ -46,7 +67,7 @@ function isCategoryNoneSelected(category: string): boolean {
4667
"
4768
:aria-disabled="isCategoryAllSelected(category)"
4869
class="aria-disabled:(opacity-40 border-transparent)"
49-
@click="!isCategoryAllSelected(category) && selectCategory(category)"
70+
@click="selectAllFacet(category)"
5071
>
5172
{{ $t('compare.facets.all') }}
5273
</ButtonBase>
@@ -64,7 +85,7 @@ function isCategoryNoneSelected(category: string): boolean {
6485
"
6586
:aria-disabled="isCategoryNoneSelected(category)"
6687
class="aria-disabled:(opacity-40 border-transparent)"
67-
@click="!isCategoryNoneSelected(category) && deselectCategory(category)"
88+
@click="deselectAllFacet(category)"
6889
>
6990
{{ $t('compare.facets.none') }}
7091
</ButtonBase>

i18n/locales/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1131,6 +1131,8 @@
11311131
"none": "none",
11321132
"select_all_category_facets": "Select all {category} facets",
11331133
"deselect_all_category_facets": "Deselect all {category} facets",
1134+
"selected_all_category_facets": "Selected all {category} facets",
1135+
"deselected_all_category_facets": "Deselected all {category} facets",
11341136
"coming_soon": "Coming soon",
11351137
"select_all": "Select all facets",
11361138
"deselect_all": "Deselect all facets",

0 commit comments

Comments
 (0)