diff --git a/src/ui.rs b/src/ui.rs index 8bb8f97..64e9477 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -2301,8 +2301,28 @@ impl Component for CommitView<'_> { file_views, } = self; - let mut y = y; let commit_message_view_rect = viewport.draw_component(x, y, commit_message_view); + if file_views.is_empty() { + let message = "There are no changes to view."; + let message_rect = centered_rect( + Rect { + x, + y, + width: viewport.mask_rect().width, + height: viewport.mask_rect().height, + }, + RectSize { + width: message.len(), + height: 1, + }, + 50, + 50, + ); + viewport.draw_text(message_rect.x, message_rect.y, &Span::raw(message)); + return; + } + + let mut y = y; y += commit_message_view_rect.height.unwrap_isize(); for file_view in file_views { let file_view_rect = { diff --git a/tests/test_scm_record.rs b/tests/test_scm_record.rs index ea80a4f..2291666 100644 --- a/tests/test_scm_record.rs +++ b/tests/test_scm_record.rs @@ -2726,3 +2726,31 @@ fn test_deserialize() -> eyre::Result<()> { assert_eq!(example_contents(), deserialized); Ok(()) } + +#[test] +fn test_no_files() -> eyre::Result<()> { + let state = RecordState { + is_read_only: false, + commits: Default::default(), + files: vec![], + }; + let initial = TestingScreenshot::default(); + let mut input = TestingInput::new( + 80, + 6, + [Event::ExpandAll, initial.event(), Event::QuitAccept], + ); + let recorder = Recorder::new(state, &mut input); + recorder.run()?; + + insta::assert_display_snapshot!(initial, @r###" + "[File] [Edit] [Select] [View] " + " " + " There are no changes to view. " + " " + " " + " " + "###); + + Ok(()) +}