# 画面設計書 37-NotificationsCenterDetail画面

## 概要

本ドキュメントは、Wikipedia iOSアプリにおけるNotificationsCenterDetail画面の設計仕様を定義するものです。

### 本画面の処理概要

NotificationsCenterDetail画面は、個々の通知の詳細情報とアクションを表示する画面です。通知の内容（ヘッダー、本文）と、その通知に関連するアクション（記事を見る、編集者のページに移動、トークページに返信など）を一覧表示します。

**業務上の目的・背景**：
通知センターの一覧では表示しきれない詳細情報と、通知に関連する複数のアクションをユーザーに提供することが目的です。ユーザーはこの画面から関連ページへ直接遷移できます。

**画面へのアクセス方法**：
NotificationsCenter画面で通知セルをタップすることで遷移します。

**主要な操作・処理内容**：
1. 通知ヘッダー情報の表示（種類、日時、送信者等）
2. 通知本文の表示
3. プライマリアクションの表示・実行
4. セカンダリアクション一覧の表示・実行
5. 関連ページへの遷移

**画面遷移**：
- 遷移元：NotificationsCenter画面
- 遷移先：Article画面、UserPage画面、TalkPage画面、DiffContainer画面等

**権限による表示制御**：
特に権限による表示制御はありません。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 29 | 通知センター | 補助機能 | 通知詳細表示 |

## 画面種別

詳細（通知詳細）

## URL/ルーティング

本画面は独立したURLを持たず、NotificationsCenter画面からのpush遷移でアクセスされます。

## 入出力項目

| 項目名 | 入力/出力 | データ型 | 説明 |
|--------|----------|---------|------|
| theme | 入力 | Theme | テーマ設定 |
| viewModel | 入力 | NotificationsCenterDetailViewModel | 通知詳細データ |

## 表示項目

| 項目名 | データ型 | 説明 |
|--------|---------|------|
| tableView | UITableView | アクション一覧 |
| NotificationsCenterDetailHeaderCell | UITableViewCell | ヘッダーセル（種類、日時） |
| NotificationsCenterDetailContentCell | UITableViewCell | 本文セル |
| NotificationsCenterDetailActionCell | UITableViewCell | アクションセル |

## イベント仕様

### 1-アクションセルタップ

アクションセルをタップすると、そのアクションに紐づくURLに遷移します。LinkCoordinatorまたはレガシーナビゲーションを使用します。

### 2-通知インタラクションログ

アクションをタップすると、RemoteNotificationsFunnelを通じてアナリティクスに記録されます。

## データベース更新仕様

本画面はデータベースを更新しません（読み取り専用）。

### 操作別データベース影響一覧

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| なし | - | - | 本画面は表示・遷移のみ |

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|-------------|------|--------------|---------|
| notifications-center-detail-title | タイトル | "Notification Detail" | ナビゲーションバー（非表示設定） |

## 例外処理

| 例外条件 | 処理内容 |
|---------|---------|
| アクションURLが無効な場合 | 何も起こらない |
| primaryActionがnilの場合 | セクション0の行数が2になる |

## 備考

- UITableViewを使用した静的リスト表示
- セクション0：ヘッダー、コンテンツ、（プライマリアクション）
- セクション1：セカンダリアクション一覧
- ナビゲーションバータイトルはhidden設定
- VoiceOver対応

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | NotificationsCenterDetailViewModel | `Wikipedia/Code/` | 通知詳細データ |
| 1-2 | NotificationsCenterCommonViewModel | `Wikipedia/Code/` | 共通ViewModel（通知オブジェクト含む） |
| 1-3 | NotificationsCenterAction | `Wikipedia/Code/` | アクション定義 |

**読解のコツ**: NotificationsCenterDetailViewModelはcommonViewModelを保持し、そこからprimaryActionとuniqueSecondaryActionsを取得します。

#### Step 2: エントリーポイントを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | NotificationsCenterDetailViewController.swift | `Wikipedia/Code/NotificationsCenterDetailViewController.swift` | init(theme:viewModel:)で初期化 |

**主要処理フロー**:
1. **18-23行目**: init時にviewModelとthemeを受け取り
2. **29-35行目**: loadView()でNotificationsCenterDetailViewを生成、dataSource/delegate設定
3. **37-48行目**: viewWillAppearでナビゲーションバー設定

#### Step 3: テーブルビューを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | NotificationsCenterDetailViewController.swift | `Wikipedia/Code/NotificationsCenterDetailViewController.swift` | UITableViewDataSource/Delegateの実装 |

**主要処理フロー**:
- **64-86行目**: cellForRowAt - セクション/行によって異なるセル種別を返す
- **88-103行目**: numberOfRowsInSection - primaryActionの有無で行数変動
- **105-141行目**: didSelectRowAt - アクションセルタップ処理

#### Step 4: アクション処理を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | NotificationsCenterDetailViewController.swift | `Wikipedia/Code/NotificationsCenterDetailViewController.swift` | didSelectRowAtの実装 |

**主要処理フロー**:
- **106-108行目**: アクションセル以外は何もしない
- **110-111行目**: actionDataとURLを取得
- **114-137行目**: LinkCoordinatorまたはレガシーナビゲーションで遷移
- **143-155行目**: logNotificationInteraction()でアナリティクス記録

### プログラム呼び出し階層図

```
NotificationsCenterViewController
    │
    └─ didSelectItemAt() (NotificationsCenterViewController.swift:672-694)
           │
           └─ NotificationsCenterDetailViewController
                  │
                  ├─ init(theme:viewModel:)
                  │
                  ├─ loadView()
                  │      └─ NotificationsCenterDetailView
                  │             └─ tableView.dataSource/delegate = self
                  │
                  └─ UITableViewDelegate
                         └─ didSelectRowAt()
                                ├─ logNotificationInteraction()
                                └─ LinkCoordinator.start() / navigate()
```

### データフロー図

```
[入力]                          [処理]                              [出力]

NotificationsCenterDetailViewModel ──▶ cellForRowAt()       ──────▶ セル表示
    │                                      │
    ├─ headerText                          ├─ NotificationsCenterDetailHeaderCell
    ├─ subheaderText                       ├─ NotificationsCenterDetailContentCell
    ├─ contentBody                         └─ NotificationsCenterDetailActionCell
    ├─ primaryAction
    └─ uniqueSecondaryActions
                               │
                               ▼
Action cell tap        ──────▶ didSelectRowAt()           ──────▶ LinkCoordinator
                               │                                   / navigate()
                               └─ logNotificationInteraction()
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| NotificationsCenterDetailViewController.swift | `Wikipedia/Code/NotificationsCenterDetailViewController.swift` | ソース | ViewController |
| NotificationsCenterDetailView.swift | `Wikipedia/Code/NotificationsCenterDetailView.swift` | ソース | View |
| NotificationsCenterDetailViewModel.swift | `Wikipedia/Code/NotificationsCenterDetailViewModel.swift` | ソース | ViewModel |
| NotificationsCenterDetailHeaderCell.swift | `Wikipedia/Code/NotificationsCenterDetailHeaderCell.swift` | ソース | ヘッダーセル |
| NotificationsCenterDetailContentCell.swift | `Wikipedia/Code/NotificationsCenterDetailContentCell.swift` | ソース | コンテンツセル |
| NotificationsCenterDetailActionCell.swift | `Wikipedia/Code/NotificationsCenterDetailActionCell.swift` | ソース | アクションセル |
| NotificationsCenterAction.swift | `Wikipedia/Code/NotificationsCenterAction.swift` | ソース | アクション定義 |
| NotificationsCenterViewController.swift | `Wikipedia/Code/NotificationsCenterViewController.swift` | ソース | 遷移元VC |
| RemoteNotificationsFunnel.swift | `Wikipedia/Code/RemoteNotificationsFunnel.swift` | ソース | アナリティクス |
