Skip to content

Commit 9849bcc

Browse files
authored
Merge pull request #630 from dnum-mi/fix/feedback-rgaa-audit
fix/feedback rgaa audit
2 parents d6ca0f9 + 838dc9b commit 9849bcc

File tree

3 files changed

+38
-3
lines changed

3 files changed

+38
-3
lines changed

src/components/DsfrModal/DsfrModal.vue

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,18 @@ import { FocusTrap } from 'focus-trap-vue'
55
66
import DsfrButtonGroup from '../DsfrButton/DsfrButtonGroup.vue'
77
import { onMounted, onBeforeUnmount, computed, ref, nextTick, watch, Ref } from 'vue'
8+
import { getRandomId } from '@/utils/random-utils'
89
910
const props = withDefaults(defineProps<{
11+
modalId?: string
1012
opened?: boolean
1113
actions?: Record<string, any>[]
1214
isAlert?: boolean
1315
origin?: {focus:() => void}
1416
title: string
1517
icon?: string
1618
}>(), {
19+
modalId: () => getRandomId('modal', 'dialog'),
1720
actions: () => [],
1821
origin: () => ({ focus () {} }), // eslint-disable-line @typescript-eslint/no-empty-function
1922
icon: undefined,
@@ -35,14 +38,18 @@ const closeBtn: Ref<HTMLButtonElement | null> = ref(null)
3538
watch(() => props.opened, (newValue) => {
3639
if (newValue) {
3740
document.body.classList.add('modal-open')
41+
modal.value?.showModal()
3842
setTimeout(() => {
3943
closeBtn.value?.focus()
4044
}, 100)
4145
} else {
4246
document.body.classList.remove('modal-open')
47+
modal.value?.close()
4348
}
4449
})
4550
51+
const modal = ref()
52+
4653
onMounted(() => {
4754
startListeningToEscape()
4855
})
@@ -72,10 +79,12 @@ async function close () {
7279
>
7380
<dialog
7481
id="fr-modal-1"
75-
aria-labelledby="fr-modal-title-modal-1"
82+
ref="modal"
83+
:aria-labelledby="modalId"
7684
:role="role"
7785
class="fr-modal"
7886
:class="{'fr-modal--opened': opened}"
87+
:open="opened"
7988
>
8089
<div class="fr-container fr-container--fluid fr-container-md">
8190
<div class="fr-grid-row fr-grid-row--center">
@@ -97,7 +106,7 @@ async function close () {
97106
</div>
98107
<div class="fr-modal__content">
99108
<h1
100-
id="fr-modal-title-modal-1"
109+
:id="modalId"
101110
class="fr-modal__title"
102111
>
103112
<span

src/components/DsfrTabs/DsfrTabs.stories.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { expect } from '@storybook/jest'
22
import { within, userEvent } from '@storybook/testing-library'
3+
import DsfrButton from '../DsfrButton/DsfrButton.vue'
34
import DsfrTabs from './DsfrTabs.vue'
45
import DsfrTabContent from './DsfrTabContent.vue'
56

@@ -130,7 +131,7 @@ const customTabTitles = [
130131
]
131132

132133
export const OngletsComplexes = (args) => ({
133-
components: { DsfrTabs, DsfrTabContent },
134+
components: { DsfrTabs, DsfrTabContent, DsfrButton },
134135
data () {
135136
return {
136137
...args,
@@ -140,6 +141,7 @@ export const OngletsComplexes = (args) => ({
140141

141142
template: `
142143
<DsfrTabs
144+
ref="tabs"
143145
:tab-list-name="tabListName"
144146
:tab-titles="tabTitles"
145147
:initial-selected-index="initialSelectedIndex"
@@ -181,6 +183,24 @@ export const OngletsComplexes = (args) => ({
181183
<div>Contenu 4 avec d'autres composants</div>
182184
</DsfrTabContent>
183185
</DsfrTabs>
186+
<div style="display: flex; gap: 1rem; margin-block: 1rem;">
187+
<DsfrButton
188+
label="Activer le 1er onglet"
189+
@click="() => { $refs.tabs.selectFirst() }"
190+
/>
191+
<DsfrButton
192+
label="Activer le 2è onglet"
193+
@click="() => { $refs.tabs.selectIndex(1) }"
194+
/>
195+
<DsfrButton
196+
label="Activer le 3è onglet"
197+
@click="() => { $refs.tabs.selectIndex(2) }"
198+
/>
199+
<DsfrButton
200+
label="Activer le dernier onglet"
201+
@click="() => { $refs.tabs.selectLast() }"
202+
/>
203+
</div>
184204
`,
185205

186206
methods: {

src/components/DsfrTabs/DsfrTabs.vue

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ const selectFirst = async () => {
105105
const selectLast = async () => {
106106
await selectIndex(props.tabTitles.length - 1)
107107
}
108+
109+
defineExpose({
110+
selectIndex,
111+
selectFirst,
112+
selectLast,
113+
})
108114
</script>
109115

110116
<template>

0 commit comments

Comments
 (0)