Skip to content

Commit 48bb128

Browse files
authored
fix(Popper): Prevent duplicate ids in aria-describedby (#883)
1 parent ec76a79 commit 48bb128

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

src/usePopper.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ const ariaDescribedByModifier: Modifier<'ariaDescribedBy', undefined> = {
8383

8484
if (popper.id && role === 'tooltip' && 'setAttribute' in reference) {
8585
const ids = reference.getAttribute('aria-describedby');
86+
if (ids && ids.split(',').indexOf(popper.id) !== -1) {
87+
return;
88+
}
89+
8690
reference.setAttribute(
8791
'aria-describedby',
8892
ids ? `${ids},${popper.id}` : popper.id,

test/usePopperSpec.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,30 @@ describe('usePopper', () => {
108108
done();
109109
});
110110
});
111+
112+
it('should not add add duplicates to aria-describedby', (done) => {
113+
elements.popper.setAttribute('role', 'tooltip');
114+
elements.popper.setAttribute('id', 'example123');
115+
elements.reference.setAttribute('aria-describedby', 'foo');
116+
117+
const result = renderHook(() =>
118+
usePopper(elements.reference, elements.popper),
119+
);
120+
121+
window.dispatchEvent(new Event('resize'));
122+
123+
setTimeout(() => {
124+
expect(
125+
document.querySelector('[aria-describedby="foo,example123"]'),
126+
).to.equal(elements.reference);
127+
128+
result.mount.unmount();
129+
130+
expect(document.querySelector('[aria-describedby="foo"]')).to.equal(
131+
elements.reference,
132+
);
133+
134+
done();
135+
});
136+
});
111137
});

0 commit comments

Comments
 (0)