compiled without error

This commit is contained in:
filipriec
2025-02-19 21:22:21 +01:00
parent 5954382206
commit 6c80325abe
5 changed files with 85 additions and 25 deletions

View File

@@ -62,7 +62,7 @@ message AdresarResponse {
} }
message PutAdresarRequest { message PutAdresarRequest {
int64 id = 1; // The ID of the Adresar entry to update int64 id = 1;
string firma = 2; string firma = 2;
string kz = 3; string kz = 3;
string drc = 4; string drc = 4;

View File

@@ -10,7 +10,7 @@ use tonic::transport::Channel;
use crate::proto::multieko2::{ use crate::proto::multieko2::{
adresar_client::AdresarClient, adresar_client::AdresarClient,
Empty, CountResponse, PositionRequest, Empty, CountResponse, PositionRequest,
AdresarResponse, PostAdresarRequest AdresarResponse, PostAdresarRequest, PutAdresarRequest,
}; };
use crate::client::config::Config; use crate::client::config::Config;
@@ -59,15 +59,6 @@ impl AppTerminal {
form_data: &PostAdresarRequest, form_data: &PostAdresarRequest,
) -> Result<(bool, String), Box<dyn std::error::Error>> { ) -> Result<(bool, String), Box<dyn std::error::Error>> {
match action { match action {
"save" => {
// Send data to the server
let request = tonic::Request::new(form_data.clone());
let response = self.grpc_client.post_adresar(request).await?;
// form_state.has_unsaved_changes = false;
*is_saved = true;
Ok((false, format!("State saved. Response: {:?}", response)))
}
"quit" => { "quit" => {
if *is_saved { if *is_saved {
self.cleanup()?; self.cleanup()?;
@@ -102,4 +93,21 @@ impl AppTerminal {
let response: AdresarResponse = self.grpc_client.get_adresar_by_position(request).await?.into_inner(); let response: AdresarResponse = self.grpc_client.get_adresar_by_position(request).await?.into_inner();
Ok(response) Ok(response)
} }
pub async fn post_adresar(
&mut self,
request: PostAdresarRequest,
) -> Result<tonic::Response<AdresarResponse>, Box<dyn std::error::Error>> {
let request = tonic::Request::new(request);
let response = self.grpc_client.post_adresar(request).await?;
Ok(response)
}
pub async fn put_adresar(
&mut self,
request: PutAdresarRequest,
) -> Result<tonic::Response<AdresarResponse>, Box<dyn std::error::Error>> {
let request = tonic::Request::new(request);
let response = self.grpc_client.put_adresar(request).await?;
Ok(response)
}
} }

View File

@@ -2,7 +2,7 @@
use crossterm::event::{Event, KeyCode, KeyModifiers}; use crossterm::event::{Event, KeyCode, KeyModifiers};
use crate::client::terminal::AppTerminal; use crate::client::terminal::AppTerminal;
use crate::client::config::Config; use crate::client::config::Config;
use crate::proto::multieko2::PostAdresarRequest; use crate::proto::multieko2::{PostAdresarRequest, PutAdresarRequest};
use super::form::FormState; use super::form::FormState;
pub struct EventHandler { pub struct EventHandler {
@@ -60,7 +60,8 @@ impl EventHandler {
*current_position = new_position; *current_position = new_position;
match app_terminal.get_adresar_by_position(*current_position).await { match app_terminal.get_adresar_by_position(*current_position).await {
Ok(response) => { Ok(response) => {
// Update all form fields from the response // Update all form fields
form_state.id = response.id;
form_state.firma = response.firma; form_state.firma = response.firma;
form_state.kz = response.kz; form_state.kz = response.kz;
form_state.drc = response.drc; form_state.drc = response.drc;
@@ -77,7 +78,6 @@ impl EventHandler {
form_state.skladu = response.skladu; form_state.skladu = response.skladu;
form_state.fax = response.fax; form_state.fax = response.fax;
// Reset form state
form_state.current_field = 0; form_state.current_field = 0;
form_state.has_unsaved_changes = false; form_state.has_unsaved_changes = false;
self.command_message = format!("Loaded entry {}", *current_position); self.command_message = format!("Loaded entry {}", *current_position);
@@ -94,6 +94,7 @@ impl EventHandler {
match app_terminal.get_adresar_by_position(*current_position).await { match app_terminal.get_adresar_by_position(*current_position).await {
Ok(response) => { Ok(response) => {
// Update all form fields // Update all form fields
form_state.id = response.id;
form_state.firma = response.firma; form_state.firma = response.firma;
form_state.kz = response.kz; form_state.kz = response.kz;
form_state.drc = response.drc; form_state.drc = response.drc;
@@ -183,21 +184,69 @@ impl EventHandler {
let action = config.get_action_for_command(command) let action = config.get_action_for_command(command)
.unwrap_or("unknown"); .unwrap_or("unknown");
if action == "save" {
let is_new = *current_position == total_count + 1;
let message = if is_new {
// POST new entry
let post_request = PostAdresarRequest {
firma: form_state.firma.clone(),
kz: form_state.kz.clone(),
drc: form_state.drc.clone(),
ulica: form_state.ulica.clone(),
psc: form_state.psc.clone(),
mesto: form_state.mesto.clone(),
stat: form_state.stat.clone(),
banka: form_state.banka.clone(),
ucet: form_state.ucet.clone(),
skladm: form_state.skladm.clone(),
ico: form_state.ico.clone(),
kontakt: form_state.kontakt.clone(),
telefon: form_state.telefon.clone(),
skladu: form_state.skladu.clone(),
fax: form_state.fax.clone(),
};
let response = app_terminal.post_adresar(post_request).await?;
// Update state
let new_total = app_terminal.get_adresar_count().await?;
*current_position = new_total;
form_state.id = response.into_inner().id;
"New entry created".to_string()
} else {
// PUT existing entry
let put_request = PutAdresarRequest {
id: form_state.id,
firma: form_state.firma.clone(),
kz: form_state.kz.clone(),
drc: form_state.drc.clone(),
ulica: form_state.ulica.clone(),
psc: form_state.psc.clone(),
mesto: form_state.mesto.clone(),
stat: form_state.stat.clone(),
banka: form_state.banka.clone(),
ucet: form_state.ucet.clone(),
skladm: form_state.skladm.clone(),
ico: form_state.ico.clone(),
kontakt: form_state.kontakt.clone(),
telefon: form_state.telefon.clone(),
skladu: form_state.skladu.clone(),
fax: form_state.fax.clone(),
};
let response = app_terminal.put_adresar(put_request).await?;
"Entry updated".to_string()
};
*is_saved = true;
form_state.has_unsaved_changes = false;
return Ok((false, message));
} else {
let (should_exit, message) = app_terminal let (should_exit, message) = app_terminal
.handle_command(action, is_saved, &form_data) .handle_command(action, is_saved, &form_data)
.await?; .await?;
self.command_message = message; self.command_message = message;
self.command_mode = false;
self.command_input.clear();
if action == "save" && *is_saved {
*current_position = total_count + 1;
form_state.has_unsaved_changes = false; // Reset unsaved changes flag
}
return Ok((should_exit, self.command_message.clone())); return Ok((should_exit, self.command_message.clone()));
} }
}
KeyCode::Char(c) => self.command_input.push(c), KeyCode::Char(c) => self.command_input.push(c),
KeyCode::Backspace => { KeyCode::Backspace => {
self.command_input.pop(); self.command_input.pop();

View File

@@ -6,6 +6,8 @@ use ratatui::layout::Rect;
use ratatui::Frame; use ratatui::Frame;
pub struct FormState { pub struct FormState {
pub id: i64,
pub firma: String, pub firma: String,
pub kz: String, pub kz: String,
pub drc: String, pub drc: String,
@@ -30,6 +32,7 @@ pub struct FormState {
impl FormState { impl FormState {
pub fn new() -> Self { pub fn new() -> Self {
FormState { FormState {
id: 0,
firma: String::new(), firma: String::new(),
kz: String::new(), kz: String::new(),
drc: String::new(), drc: String::new(),

Binary file not shown.