refactor(navigation): include AppMode in view navigation stack
Introduce `ViewFrame` to store both the view name and the `AppMode` when pushing to the navigation stack. Update `view_back_stack` and `view_forward_stack` to use `ViewFrame` instead of `String` . Update `CmdContext` and `Effect` implementations (SwitchView, ViewBack, ViewForward) to handle the new `ViewFrame` structure. Add `is_editing()` helper to `AppMode` . Co-Authored-By: fiddlerwoaroof/git-smart-commit (gemma-4-26B-A4B-it-UD-Q5_K_XL.gguf)
This commit is contained in:
+14
-2
@@ -20,6 +20,13 @@ use crate::ui::grid::{
|
||||
};
|
||||
use crate::view::GridLayout;
|
||||
|
||||
/// A saved view+mode pair for the navigation stack.
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct ViewFrame {
|
||||
pub view_name: String,
|
||||
pub mode: AppMode,
|
||||
}
|
||||
|
||||
/// Drill-down state: frozen record snapshot + pending edits that have not
|
||||
/// yet been applied to the model.
|
||||
#[derive(Debug, Clone, Default)]
|
||||
@@ -88,6 +95,11 @@ impl AppMode {
|
||||
}
|
||||
}
|
||||
|
||||
/// True for any cell-editing mode (normal or records).
|
||||
pub fn is_editing(&self) -> bool {
|
||||
matches!(self, Self::Editing { .. } | Self::RecordsEditing { .. })
|
||||
}
|
||||
|
||||
pub fn editing() -> Self {
|
||||
Self::Editing {
|
||||
minibuf: MinibufferConfig {
|
||||
@@ -173,9 +185,9 @@ pub struct App {
|
||||
pub tile_cat_idx: usize,
|
||||
/// View navigation history: views visited before the current one.
|
||||
/// Pushed on SwitchView, popped by `<` (back).
|
||||
pub view_back_stack: Vec<String>,
|
||||
pub view_back_stack: Vec<ViewFrame>,
|
||||
/// Views that were "back-ed" from, available for forward navigation (`>`).
|
||||
pub view_forward_stack: Vec<String>,
|
||||
pub view_forward_stack: Vec<ViewFrame>,
|
||||
/// Frozen records list for the drill view. When present, this is the
|
||||
/// snapshot that records-mode layouts iterate — records don't disappear
|
||||
/// when filters would change. Pending edits are stored alongside and
|
||||
|
||||
Reference in New Issue
Block a user