trying to do the count

This commit is contained in:
filipriec
2025-02-18 16:32:18 +01:00
parent 9ff6dada40
commit 02855c4c46
3 changed files with 49 additions and 2 deletions

View File

@@ -16,6 +16,8 @@ pub fn render_form(
inputs: &[&String],
theme: &Theme,
is_edit_mode: bool,
total_count: u64, // Add total count
current_id: u64, // Add current ID
) {
// Create Adresar card
let adresar_card = Block::default()
@@ -60,10 +62,29 @@ pub fn render_form(
// Input area inside borders
let input_area = input_container.inner(input_container_area);
// Add a new layout for the count and ID display
let count_id_layout = Layout::default()
.direction(Direction::Vertical)
.constraints([
Constraint::Length(1), // For count and ID
Constraint::Min(1), // For the rest of the form
])
.split(input_area);
// Render the count and ID
let count_id_text = format!("Total: {} | Current ID: {}", total_count, current_id);
let count_id_paragraph = Paragraph::new(count_id_text)
.style(Style::default().fg(theme.fg))
.alignment(Alignment::Left);
f.render_widget(count_id_paragraph, count_id_layout[0]);
// Split the remaining area for the form inputs
let input_rows = Layout::default()
.direction(Direction::Vertical)
.constraints(vec![Constraint::Length(1); fields.len()])
.split(input_area);
.split(count_id_layout[1]);
// Render labels close to the border
for (i, field) in fields.iter().enumerate() {

View File

@@ -9,6 +9,7 @@ use std::io::{self, stdout};
use tonic::transport::Channel;
use crate::proto::multieko2::adresar_client::AdresarClient;
use crate::client::config::Config;
use crate::proto::multieko2::{Empty, CountResponse, PositionRequest, AdresarResponse};
use crate::proto::multieko2::PostAdresarRequest;
pub struct AppTerminal {
@@ -83,4 +84,18 @@ impl AppTerminal {
_ => Ok((false, format!("Action not recognized: {}", action))),
}
}
// Add a method to get the total count of Adresar entries
pub async fn get_adresar_count(&self) -> Result<u64, Box<dyn std::error::Error>> {
let request = tonic::Request::new(Empty {});
let response: CountResponse = self.grpc_client.get_adresar_count(request).await?.into_inner();
Ok(response.count as u64)
}
// Add a method to get an Adresar entry by its position
pub async fn get_adresar_by_position(&self, position: u64) -> Result<AdresarResponse, Box<dyn std::error::Error>> {
let request = tonic::Request::new(PositionRequest { position: position as i64 });
let response: AdresarResponse = self.grpc_client.get_adresar_by_position(request).await?.into_inner();
Ok(response)
}
}

View File

@@ -8,6 +8,7 @@ use ratatui::layout::{Constraint, Direction, Layout};
use std::env;
use crate::proto::multieko2::PostAdresarRequest;
pub async fn run_ui() -> Result<(), Box<dyn std::error::Error>> {
let config = Config::load()?;
let mut app_terminal = AppTerminal::new().await?;
@@ -51,6 +52,14 @@ pub async fn run_ui() -> Result<(), Box<dyn std::error::Error>> {
let mut is_edit_mode = false;
let mut edit_mode_cooldown = false;
// Fetch the total count of Adresar entries
let total_count = app_terminal.get_adresar_count().await?;
// Fetch the current Adresar entry by position (e.g., position 1)
let current_position = 1; // You can change this dynamically based on user input
let current_adresar = app_terminal.get_adresar_by_position(current_position).await?;
let current_id = current_adresar.id as u64;
loop {
app_terminal.draw(|f| {
let root = Layout::default()
@@ -80,6 +89,8 @@ pub async fn run_ui() -> Result<(), Box<dyn std::error::Error>> {
],
&theme,
is_edit_mode,
total_count, // Pass total count
current_id, // Pass current ID
);
// Right panel - Preview Card
@@ -99,7 +110,7 @@ pub async fn run_ui() -> Result<(), Box<dyn std::error::Error>> {
render_command_line(f, root[2], &command_input, command_mode, &theme, &command_message);
})?;
// Event handling
// Event handling (unchanged)
if let Event::Key(key) = app_terminal.read_event()? {
// Handle enter/edit mode keys
if !is_edit_mode && config.is_enter_edit_mode(key.code, key.modifiers) {