diff --git a/.changeset/silent-beds-suffer.md b/.changeset/silent-beds-suffer.md new file mode 100644 index 0000000..d5a3849 --- /dev/null +++ b/.changeset/silent-beds-suffer.md @@ -0,0 +1,5 @@ +--- +"@primer/live-region-element": patch +--- + +Fix race condition caused by calling `clear` immediately after `announce` diff --git a/packages/live-region-element/src/__tests__/live-region-element.test.ts b/packages/live-region-element/src/__tests__/live-region-element.test.ts index 3523d3c..654bb39 100644 --- a/packages/live-region-element/src/__tests__/live-region-element.test.ts +++ b/packages/live-region-element/src/__tests__/live-region-element.test.ts @@ -195,4 +195,13 @@ describe('live-region-element', () => { ).toBe(Ordering.Less) }) }) + + test('announce() after clear()', async () => { + liveRegion.announce('test1') + expect(liveRegion.getMessage('polite')).toBe('test1') + + liveRegion.clear() + liveRegion.announce('test2') + expect(liveRegion.getMessage('polite')).toBe('test2') + }) }) diff --git a/packages/live-region-element/src/live-region-element.ts b/packages/live-region-element/src/live-region-element.ts index 60cffb7..4d712e4 100644 --- a/packages/live-region-element/src/live-region-element.ts +++ b/packages/live-region-element/src/live-region-element.ts @@ -229,6 +229,7 @@ class LiveRegionElement extends HTMLElement { clearTimeout(this.#timeoutId) this.#timeoutId = null } + this.#pending = false this.#queue.clear() } }