セッション開始:2026/06/02 08:38
現状、ユーザー画面(PC表示 /h)でお知らせを確認するには、
ヘッダーの「お知らせ」リンクから一覧へ移動する必要がある。未読のお知らせがあっても、ユーザーが能動的に一覧を開かない限り気づきにくい。
そこで、どの画面にいても未読に気づけるよう、ヘッダー直下に未読お知らせを常時提示するバーを設ける。
やること
/h のヘッダー直下に未読お知らせバーを追加/h ページで一律表示やらないこと
/v への対応| 対象 | user アプリ PC表示 /h レイアウト(/v は対象外) |
| 配置 | ヘッダー(h-12)直下、メインコンテンツの上に横幅いっぱいの帯 |
| 表示範囲 | 全 /h ページで一律表示(レイアウトに組み込み) |
| 表示対象 | listSystemNotification({ isRead: false }) の未読を全件、縦に積んで表示 |
| 0件時 | バー自体を非表示 |
| 見出し | バー先頭に「未読のお知らせ(N件)」を青系・太字で表示(N=未読件数) |
| 各行の内容 | 公開日+タイトル(+赤い「未読」バッジ) |
| 見た目 | 青系アクセント背景(bg-blue-50)+情報アイコン |
| 高さ | 制限なし(全件そのまま積む) |
| クリック挙動 | 詳細 /h/system-notifications/{id} へ遷移 → 既存 MarkAsRead で自動既読 |
| 即時反映 | MarkAsRead に router.refresh() を追加し、既読化後すぐバーから消す |
ヘッダー(上)とメインコンテンツ(下)の間に、未読お知らせバー(青系)が挿入されるイメージ。
※ 未読が 0 件のときは青いバーは表示されず、ヘッダーの直下にメインコンテンツが続く(従来通り)。
apps/user/app/(horizontal)/h/_components/unread-notification-bar/index.tsx
サーバーコンポーネント。listSystemNotificationCached({ isRead: false })
で未読を取得し、Suspense でラップ。0件時は null を返す。
内部の各行は /h/system-notifications/{id} への Link。
apps/user/app/(horizontal)/h/layout.tsx
ヘッダー div とメインコンテンツ div の間に
<UnreadNotificationBar /> を差し込む。
.../system-notifications/[systemNotificationId]/_components/published/_components/mark-as-read/index.tsx
既読化アクション実行後に router.refresh() を呼び、レイアウト(バー)を再取得して即時反映する。
router.refresh()(またはサーバーアクション側の revalidatePath)が必要。本セッションでは router.refresh() 方式を採用。createSystemNotificationRead は /h/system-notifications 配下でのみ呼ばれる前提(バー単体では既読化しない)。