Skip to content

Commit e360ecf

Browse files
unhappychoiceclaude
andcommitted
feat: migrate StageSummaryScreen to ratatui
StageSummaryScreenをratatuiに移行しました。 Changes: - Migrate StageCompletionView to ratatui - Add render() method with proper layout calculation - Use GradationText for score ASCII display (completed challenges) - Use solid colors for failed/skipped challenges - Render title, score label, ASCII score, metrics, progress, and options - Update StageSummaryScreen to use ratatui backend - Add snapshot test with MockStageSummaryDataProvider - Adjust spacing: - 3 lines after title - 2 lines before metrics (CPM/WPM/Time) - Fix vertical centering calculation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 5c3afaa commit e360ecf

File tree

7 files changed

+348
-294
lines changed

7 files changed

+348
-294
lines changed

src/presentation/game/screens/stage_summary_screen.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ use crate::presentation::game::events::NavigateTo;
44
use crate::presentation::game::screens::ResultAction;
55
use crate::presentation::game::views::StageCompletionView;
66
use crate::presentation::game::{
7-
Screen, ScreenDataProvider, ScreenType, SessionManager, UpdateStrategy,
7+
RenderBackend, Screen, ScreenDataProvider, ScreenType, SessionManager, UpdateStrategy,
88
};
99
use crate::{GitTypeError, Result};
1010
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
11+
use ratatui::Frame;
12+
use std::io::Stdout;
1113
use std::sync::{Arc, Mutex};
1214

1315
pub struct StageSummaryData {
@@ -99,6 +101,10 @@ impl Screen for StageSummaryScreen {
99101
ScreenType::StageSummary
100102
}
101103

104+
fn get_render_backend(&self) -> RenderBackend {
105+
RenderBackend::Ratatui
106+
}
107+
102108
fn default_provider() -> Box<dyn ScreenDataProvider>
103109
where
104110
Self: Sized,
@@ -157,7 +163,11 @@ impl Screen for StageSummaryScreen {
157163
}
158164
}
159165

160-
fn render_crossterm_with_data(&mut self, _stdout: &mut std::io::Stdout) -> Result<()> {
166+
fn render_crossterm_with_data(&mut self, _stdout: &mut Stdout) -> Result<()> {
167+
Ok(())
168+
}
169+
170+
fn render_ratatui(&mut self, frame: &mut Frame) -> Result<()> {
161171
if let Some(ref stage_result) = self.stage_result {
162172
// Calculate the stage number that was just completed
163173
let completed_stage = if self.is_completed {
@@ -171,18 +181,17 @@ impl Screen for StageSummaryScreen {
171181

172182
let has_next = !self.is_completed;
173183

174-
StageCompletionView::render_complete(
184+
StageCompletionView::render(
185+
frame,
175186
stage_result,
176187
completed_stage,
177188
self.total_stages,
178189
has_next,
179190
stage_result.keystrokes,
180-
)?;
181-
182-
Ok(())
183-
} else {
184-
Ok(())
191+
);
185192
}
193+
194+
Ok(())
186195
}
187196

188197
fn get_update_strategy(&self) -> UpdateStrategy {

0 commit comments

Comments
 (0)