use crate::app::App;
use crate::error::AppError;
use crate::models::{kanban::DocumentObject, AppState};
use anyhow::Result;
use metis_core::Document;
impl App {
pub fn start_content_editing(&mut self) {
self.ui_state.set_app_state(AppState::EditingContent);
if let Some(selected_item) = self.get_viewed_ticket() {
let content = match &selected_item.document {
DocumentObject::Strategy(strategy) => strategy.content().full_content(),
DocumentObject::Initiative(initiative) => initiative.content().full_content(),
DocumentObject::Task(task) => task.content().full_content(),
DocumentObject::Adr(adr) => adr.content().full_content(),
};
let mut textarea = tui_textarea::TextArea::default();
textarea.set_block(
ratatui::widgets::Block::default()
.borders(ratatui::widgets::Borders::ALL)
.title("Content Editor"),
);
for line in content.lines() {
textarea.insert_str(line);
textarea.insert_newline();
}
self.ui_state.strategy_editor = Some(textarea);
}
}
pub fn cancel_content_editing(&mut self) {
self.ui_state.set_app_state(AppState::Normal);
self.ui_state.strategy_editor = None;
self.ui_state.viewing_ticket = None;
self.ui_state.editing_vision_path = None;
}
pub async fn save_content_edit(&mut self) -> Result<()> {
if let Some(ref textarea) = self.ui_state.strategy_editor {
let new_content = textarea.lines().join("\n");
if let Some(ref vision_path) = self.ui_state.editing_vision_path {
match tokio::fs::write(vision_path, &new_content).await {
Ok(_) => {
}
Err(e) => {
self.error_handler.handle_error(AppError::IoError(format!(
"Failed to save vision: {}",
e
)));
}
}
} else if let Some(selected_item) = self.get_viewed_ticket() {
if let Some(document_service) = &self.document_service {
match document_service
.save_document_content(&selected_item.file_path, &new_content)
.await
{
Ok(_) => {
if let Some(sync_service) = &self.sync_service {
let _ = sync_service.sync_database().await;
}
self.load_documents().await?;
}
Err(e) => {
self.error_handler.handle_error(AppError::from(e));
}
}
}
}
}
Ok(())
}
}