This is an automated email from the ASF dual-hosted git repository.
milenkovicm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-ballista.git
The following commit(s) were added to refs/heads/main by this push:
new 682841206 Use separate areas for the table and its associated
scrollbar (#1729)
682841206 is described below
commit 68284120678fb0f626ff906bb5848ac6d112a2e2
Author: Martin Grigorov <[email protected]>
AuthorDate: Tue May 19 16:02:47 2026 +0300
Use separate areas for the table and its associated scrollbar (#1729)
This way the scrollbar is not rendered over the last column
---
ballista-cli/src/tui/ui/main/executors/executors_table.rs | 11 ++++++++---
ballista-cli/src/tui/ui/main/jobs/job_stages_popup.rs | 11 ++++++++---
ballista-cli/src/tui/ui/main/jobs/mod.rs | 9 +++++++--
ballista-cli/src/tui/ui/main/jobs/stage_tasks_popup.rs | 11 ++++++++---
ballista-cli/src/tui/ui/main/metrics/mod.rs | 11 ++++++++---
5 files changed, 39 insertions(+), 14 deletions(-)
diff --git a/ballista-cli/src/tui/ui/main/executors/executors_table.rs
b/ballista-cli/src/tui/ui/main/executors/executors_table.rs
index 356571bfd..b2fc9d031 100644
--- a/ballista-cli/src/tui/ui/main/executors/executors_table.rs
+++ b/ballista-cli/src/tui/ui/main/executors/executors_table.rs
@@ -18,7 +18,7 @@
use crate::tui::app::App;
use crate::tui::domain::executors::{Executor, SortColumn};
use crate::tui::ui::vertical_scrollbar::render_scrollbar;
-use ratatui::layout::Constraint;
+use ratatui::layout::{Constraint, Layout};
use ratatui::prelude::{Color, Text};
use ratatui::style::Style;
use ratatui::widgets::{Cell, HighlightSpacing, Row, Table};
@@ -34,8 +34,13 @@ pub fn render_executors(f: &mut Frame, area: Rect, app:
&App) {
match &app.executors_data.executors {
executors if !executors.is_empty() => {
let mut scroll_state = app.executors_data.scrollbar_state;
- render_executors_table(f, area, app);
- render_scrollbar(f, area, &mut scroll_state);
+ let rects = Layout::horizontal([
+ Constraint::Min(1), // Table
+ Constraint::Length(3), // Scrollbar
+ ])
+ .split(area);
+ render_executors_table(f, rects[0], app);
+ render_scrollbar(f, rects[1], &mut scroll_state);
}
_no_executors => {
f.render_widget(no_live_executors(block), area);
diff --git a/ballista-cli/src/tui/ui/main/jobs/job_stages_popup.rs
b/ballista-cli/src/tui/ui/main/jobs/job_stages_popup.rs
index 3e9631a7f..f98c38145 100644
--- a/ballista-cli/src/tui/ui/main/jobs/job_stages_popup.rs
+++ b/ballista-cli/src/tui/ui/main/jobs/job_stages_popup.rs
@@ -18,7 +18,7 @@
use crate::tui::app::App;
use crate::tui::domain::jobs::stages::JobStageResponse;
use ratatui::Frame;
-use ratatui::layout::Constraint;
+use ratatui::layout::{Constraint, Layout};
use ratatui::prelude::{Color, Style};
use ratatui::text::Text;
use ratatui::widgets::{
@@ -81,8 +81,13 @@ pub(crate) fn render_job_stages_popup(f: &mut Frame, app:
&App) {
let mut table_state = popup.table_state;
let mut scroll_state = popup.scrollbar_state;
- f.render_stateful_widget(table, area, &mut table_state);
- crate::tui::ui::vertical_scrollbar::render_scrollbar(f, area, &mut
scroll_state);
+ let rects = Layout::horizontal([
+ Constraint::Min(1), // Table
+ Constraint::Length(3), // Scrollbar
+ ])
+ .split(area);
+ f.render_stateful_widget(table, rects[0], &mut table_state);
+ crate::tui::ui::vertical_scrollbar::render_scrollbar(f, rects[1], &mut
scroll_state);
}
fn build_stage_row(i: usize, stage: &JobStageResponse, app: &App) ->
Row<'static> {
diff --git a/ballista-cli/src/tui/ui/main/jobs/mod.rs
b/ballista-cli/src/tui/ui/main/jobs/mod.rs
index 12b951dd3..eb724c902 100644
--- a/ballista-cli/src/tui/ui/main/jobs/mod.rs
+++ b/ballista-cli/src/tui/ui/main/jobs/mod.rs
@@ -139,16 +139,21 @@ pub fn render_jobs(f: &mut Frame, area: Rect, app: &App) {
if !sorted_jobs.is_empty() {
let mut scroll_state = app.jobs_data.scrollbar_state;
let mut table_state = app.jobs_data.table_state;
+ let table_area = Layout::horizontal([
+ Constraint::Min(1), // Table
+ Constraint::Length(3), // Scrollbar
+ ])
+ .split(rects[1]);
render_jobs_table(
f,
- rects[1],
+ table_area[0],
&sorted_jobs,
&mut table_state,
&app.jobs_data.sort_column,
&app.jobs_data.sort_order,
app,
);
- render_scrollbar(f, rects[1], &mut scroll_state);
+ render_scrollbar(f, table_area[1], &mut scroll_state);
} else {
render_no_jobs(f, rects[1]);
}
diff --git a/ballista-cli/src/tui/ui/main/jobs/stage_tasks_popup.rs
b/ballista-cli/src/tui/ui/main/jobs/stage_tasks_popup.rs
index d012fb0e7..68747ae54 100644
--- a/ballista-cli/src/tui/ui/main/jobs/stage_tasks_popup.rs
+++ b/ballista-cli/src/tui/ui/main/jobs/stage_tasks_popup.rs
@@ -18,7 +18,7 @@
use crate::tui::app::App;
use crate::tui::domain::jobs::stages::StageTaskResponse;
use ratatui::Frame;
-use ratatui::layout::Constraint;
+use ratatui::layout::{Constraint, Layout};
use ratatui::prelude::{Color, Style};
use ratatui::text::Text;
use ratatui::widgets::{
@@ -95,8 +95,13 @@ pub(crate) fn render_stage_tasks_popup(f: &mut Frame, app:
&App) {
let mut table_state = popup.tasks_table_state;
let mut scroll_state = popup.tasks_scrollbar_state;
- f.render_stateful_widget(table, area, &mut table_state);
- crate::tui::ui::vertical_scrollbar::render_scrollbar(f, area, &mut
scroll_state);
+ let rects = Layout::horizontal([
+ Constraint::Min(1), // Table
+ Constraint::Length(3), // Scrollbar
+ ])
+ .split(area);
+ f.render_stateful_widget(table, rects[0], &mut table_state);
+ crate::tui::ui::vertical_scrollbar::render_scrollbar(f, rects[1], &mut
scroll_state);
}
fn build_stage_task_row(i: usize, task: &StageTaskResponse, app: &App) ->
Row<'static> {
diff --git a/ballista-cli/src/tui/ui/main/metrics/mod.rs
b/ballista-cli/src/tui/ui/main/metrics/mod.rs
index bf6bad9ce..9e9fb943e 100644
--- a/ballista-cli/src/tui/ui/main/metrics/mod.rs
+++ b/ballista-cli/src/tui/ui/main/metrics/mod.rs
@@ -71,7 +71,7 @@ pub fn render_metrics(f: &mut Frame, area: Rect, app: &App) {
let vertical = Layout::vertical([
Constraint::Length(3), // Search box
Constraint::Min(5), // Table
- Constraint::Length(4), // Scrollbar
+ Constraint::Length(3), // Scrollbar
]);
let rects = vertical.split(area);
@@ -80,8 +80,13 @@ pub fn render_metrics(f: &mut Frame, area: Rect, app: &App) {
if !filtered_metrics.is_empty() {
let mut scroll_state = app.metrics_data.scrollbar_state;
let mut table_state = app.metrics_data.table_state;
- render_metrics_table(f, rects[1], app, &filtered_metrics, &mut
table_state);
- render_scrollbar(f, rects[1], &mut scroll_state);
+ let table_area = Layout::horizontal([
+ Constraint::Min(1), // Table
+ Constraint::Length(3), // Scrollbar
+ ])
+ .split(rects[1]);
+ render_metrics_table(f, table_area[0], app, &filtered_metrics, &mut
table_state);
+ render_scrollbar(f, table_area[1], &mut scroll_state);
} else if are_metrics_enabled(app) {
render_no_metrics(f, rects[1], "No metrics.");
} else {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]