Initial upload: GitPulse - Developer Productivity Analyzer CLI tool
This commit is contained in:
69
src/ui/app.rs
Normal file
69
src/ui/app.rs
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
use crate::config::Config;
|
||||||
|
use crate::models::AnalysisResult;
|
||||||
|
use anyhow::Result;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
pub enum AppState {
|
||||||
|
Overview,
|
||||||
|
Contributors,
|
||||||
|
Churn,
|
||||||
|
Refactoring,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct GitPulseApp {
|
||||||
|
pub current_view: AppState,
|
||||||
|
pub analysis_result: Option<AnalysisResult>,
|
||||||
|
pub config: Config,
|
||||||
|
pub should_quit: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl GitPulseApp {
|
||||||
|
pub fn new(config: Config) -> Self {
|
||||||
|
Self {
|
||||||
|
current_view: AppState::Overview,
|
||||||
|
analysis_result: None,
|
||||||
|
config,
|
||||||
|
should_quit: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_result(&mut self, result: AnalysisResult) {
|
||||||
|
self.analysis_result = Some(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn next_view(&mut self) {
|
||||||
|
self.current_view = match self.current_view {
|
||||||
|
AppState::Overview => AppState::Contributors,
|
||||||
|
AppState::Contributors => AppState::Churn,
|
||||||
|
AppState::Churn => AppState::Refactoring,
|
||||||
|
AppState::Refactoring => AppState::Overview,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn previous_view(&mut self) {
|
||||||
|
self.current_view = match self.current_view {
|
||||||
|
AppState::Overview => AppState::Refactoring,
|
||||||
|
AppState::Contributors => AppState::Overview,
|
||||||
|
AppState::Churn => AppState::Contributors,
|
||||||
|
AppState::Refactoring => AppState::Churn,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn handle_key(&mut self, key: char) {
|
||||||
|
match key {
|
||||||
|
'q' | 'Q' | '\x1b' => self.should_quit = true,
|
||||||
|
'n' | '\t' => self.next_view(),
|
||||||
|
'p' | '\x1b' => self.previous_view(),
|
||||||
|
'r' | 'R' => {
|
||||||
|
self.should_quit = true;
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn run(_repo_path: Option<PathBuf>, _config: &Config, _verbose: bool) -> Result<()> {
|
||||||
|
println!("Dashboard feature coming soon!");
|
||||||
|
println!("Use 'gitpulse analyze' for text-based output.");
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user