Skip to content

Commit ddfbf54

Browse files
committed
Fix coverage note flash
1 parent 325dedc commit ddfbf54

2 files changed

Lines changed: 12 additions & 1 deletion

File tree

components/CoverageNote.test.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { act, render, screen } from "@testing-library/react";
22
import userEvent from "@testing-library/user-event";
3+
import { renderToString } from "react-dom/server";
34
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
45
import { CoverageNote } from "./CoverageNote";
56

@@ -14,6 +15,12 @@ afterEach(() => {
1415
});
1516

1617
describe("CoverageNote", () => {
18+
it("stays hidden in the initial render until storage has been checked", () => {
19+
localStorage.setItem(STORAGE_KEY, String(Date.now() + 60_000));
20+
21+
expect(renderToString(<CoverageNote retentionDays={14} />)).toBe("");
22+
});
23+
1724
it("renders nothing when retention is unlimited", () => {
1825
const { container } = render(<CoverageNote retentionDays={null} />);
1926
expect(container).toBeEmptyDOMElement();

components/CoverageNote.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ export function CoverageNote({
3232
}: {
3333
retentionDays: number | null;
3434
}) {
35-
const [visible, setVisible] = useState(true);
35+
// Storage is unavailable during SSR, so stay hidden until the client has
36+
// checked whether a remembered dismissal is still active. This prevents a
37+
// dismissed notice from flashing during hydration.
38+
const [visible, setVisible] = useState(false);
3639

3740
useEffect(() => {
3841
if (retentionDays == null) return;
@@ -47,6 +50,7 @@ export function CoverageNote({
4750
} catch {
4851
// localStorage unavailable (private mode, etc.) — fall through to auto-hide.
4952
}
53+
setVisible(true);
5054
const timer = setTimeout(() => setVisible(false), AUTO_HIDE_MS);
5155
return () => clearTimeout(timer);
5256
}, [retentionDays]);

0 commit comments

Comments
 (0)