The signup header's status message stays on the page after it's read out
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 初心者へのやさしさ
- 1/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- playwright, react, typescript
- 領域
- accessibility, frontend, testing
調査の方向性
This work has already merged as #648, so there is no remaining change to pick up. For context, read src/components/signup/HeaderAnnouncer.tsx and HeaderAnnouncer.test.tsx, then check the e2e references in organizer.spec.ts and help/create-and-publish-a-signup.spec.ts; the stated completion checks are that each message clears after five seconds and the listed checks pass.
索引モデルが issue の本文から書いたものです。
説明
Needs your OK: this changes what screen-reader users meet when they read a signup's page after a status change. Swap pipeline:proposed for pipeline:ready to have it built.
What happens
- The header has one hidden live region. It's in
HeaderAnnouncer(src/components/signup/HeaderAnnouncer.tsx), a<p role="status" className="sr-only">. It says:- "Closed. People can’t sign up now." after Close signup on the page;
- "Reopened. People can sign up again." after Reopen signup;
- "Published. Anyone with the link can sign up now." from the share panel (
ShareScope); - "Publish and share when you’re ready." from
PublishButton, after a check's fix.
- Nothing clears it. The last message stays in the region until the next one replaces it.
- So it's read twice. A screen reader reads the message once as it arrives. Someone then reading the page line by line meets it again. In the UX walkthrough on #606, a keyboard tester reading line by line just after closing heard: "Signup closed. People can't sign up now. Everyone already signed up keeps their spot. … Closed. People can't sign up now." The region sits after the grey box on purpose, so the layout's spacing doesn't change.
Fix, in outline
- Clear the region a few seconds after each message. After
say(), start a timer that empties the region's text. A new message restarts the timer. - Keep the counter in the span's
key, so the same words said twice are still a new node and are read again. - Clear the timer when the component unmounts.
Watch for
- Tests that read the region:
- In e2e,
organizer.spec.tschecks "Closed. …" and "Reopened. …" withgetByRole('status').filter({ hasText }).help/create-and-publish-a-signup.spec.tschecks "Publish and share when you’re ready.". They retry until the text shows, so they pass while it's there. HeaderAnnouncer.test.tsxreads the region straight after the change. The new test needs fake timers.
- In e2e,
- Don't clear it too soon. A screen reader can still be reading the region after the change, so clearing within a second or so can cut a message short.
- Next's route announcer (
role="alert") fired at the same moment as "Reopened. …" once, on the Settings tab, in the walkthrough. Some screen readers may cut the polite message short. That's not part of this fix; note it if you see it again. - CHANGELOG: add a line under Unreleased › Changed.
Choices this makes
- Clear it after 5 seconds. That's long enough for a screen reader to finish a one-line message, and short enough that someone reading on after a pause doesn't meet it again.
- Clear every message, not only Close's and Reopen's. All four share the one region, and each can be met again in the same way.
Done when
- After each of the four messages, the region holds it and is empty 5 seconds later. A unit test with fake timers pins this, including that a second message restarts the timer and that the same words said twice are still read twice.
- The e2e checks above still pass.
pnpm lint && pnpm typecheck && pnpm knip && pnpm testpass.
From the UX walkthrough comment on #606 (https://github.com/richshaw/OpenSignup/pull/606#issuecomment-6402400080), the change merged as #648. Checked against HeaderAnnouncer.tsx, ShareScope.tsx and PublishButton.tsx on main at 1d4ff3a. https://claude.ai/code/session_01LrYa57fvbqWjZj89iH975K
- 主要言語
- TypeScript
- スター
- 19
- フォーク
- 4
- 平均マージ
- 20時間 9分
- マージ済み PR(30日)
- 156
環境構築
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
richshaw/OpenSignup のほかの issue
-
enhancement pipeline:proposed pipeline:ux
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
richshaw/OpenSignup#654 ·
メンテナーはふだん 1 日以内に返信
-
enhancement pipeline:proposed pipeline:ux
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
richshaw/OpenSignup#653 ·
メンテナーはふだん 1 日以内に返信
-
enhancement pipeline:proposed pipeline:ux
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
richshaw/OpenSignup#652 ·
メンテナーはふだん 1 日以内に返信
-
enhancement good first issue pipeline:ready
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
richshaw/OpenSignup#645 ·
メンテナーはふだん 1 日以内に返信
-
bug good first issue pipeline:ready pipeline:ux
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
richshaw/OpenSignup#644 ·
メンテナーはふだん 1 日以内に返信
richshaw/OpenSignup の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
openremote/openremote#3487 · コメント 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
coollabsio/jean#867 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
ehmpathy/rhachet-roles-bhuild#616 ·
メンテナーはふだん 1 日以内に返信
-
📘 Docs supabase/cli
難易度 2/5 1〜3時間 初心者へのやさしさ 83/100
メンテナーはふだん 1 日以内に返信
-
bug(cli): theme file home-directory check uses startsWith (sibling dirs pass, Windows casing fails)オープンarea/core kind/bug priority/p2 status/bot-triaged
難易度 2/5 1〜3時間 初心者へのやさしさ 79/100
google-gemini/gemini-cli#29955 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信