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 43e5cc658 minor: [TUI] Extract a helper method for the table/scrollbar
area splitter (#1730)
43e5cc658 is described below
commit 43e5cc65888c3b32debbce88f07c472406b737f0
Author: Martin Grigorov <[email protected]>
AuthorDate: Tue May 19 19:53:51 2026 +0300
minor: [TUI] Extract a helper method for the table/scrollbar area splitter
(#1730)
---
.../src/tui/ui/main/executors/executors_table.rs | 9 +++------
ballista-cli/src/tui/ui/main/jobs/job_stages_popup.rs | 11 ++++-------
ballista-cli/src/tui/ui/main/jobs/mod.rs | 8 ++------
.../src/tui/ui/main/jobs/stage_tasks_popup.rs | 9 +++------
ballista-cli/src/tui/ui/main/metrics/mod.rs | 14 +++++---------
ballista-cli/src/tui/ui/vertical_scrollbar.rs | 19 ++++++++++++++-----
6 files changed, 31 insertions(+), 39 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 b2fc9d031..970f0a5d7 100644
--- a/ballista-cli/src/tui/ui/main/executors/executors_table.rs
+++ b/ballista-cli/src/tui/ui/main/executors/executors_table.rs
@@ -17,8 +17,9 @@
use crate::tui::app::App;
use crate::tui::domain::executors::{Executor, SortColumn};
+use crate::tui::ui::vertical_scrollbar;
use crate::tui::ui::vertical_scrollbar::render_scrollbar;
-use ratatui::layout::{Constraint, Layout};
+use ratatui::layout::Constraint;
use ratatui::prelude::{Color, Text};
use ratatui::style::Style;
use ratatui::widgets::{Cell, HighlightSpacing, Row, Table};
@@ -34,11 +35,7 @@ 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;
- let rects = Layout::horizontal([
- Constraint::Min(1), // Table
- Constraint::Length(3), // Scrollbar
- ])
- .split(area);
+ let rects = vertical_scrollbar::split_area(area);
render_executors_table(f, rects[0], app);
render_scrollbar(f, rects[1], &mut scroll_state);
}
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 f98c38145..79f78f147 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
@@ -17,8 +17,9 @@
use crate::tui::app::App;
use crate::tui::domain::jobs::stages::JobStageResponse;
+use crate::tui::ui::vertical_scrollbar;
use ratatui::Frame;
-use ratatui::layout::{Constraint, Layout};
+use ratatui::layout::Constraint;
use ratatui::prelude::{Color, Style};
use ratatui::text::Text;
use ratatui::widgets::{
@@ -81,13 +82,9 @@ 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;
- let rects = Layout::horizontal([
- Constraint::Min(1), // Table
- Constraint::Length(3), // Scrollbar
- ])
- .split(area);
+ let rects = vertical_scrollbar::split_area(area);
f.render_stateful_widget(table, rects[0], &mut table_state);
- crate::tui::ui::vertical_scrollbar::render_scrollbar(f, rects[1], &mut
scroll_state);
+ 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 eb724c902..440faf4b1 100644
--- a/ballista-cli/src/tui/ui/main/jobs/mod.rs
+++ b/ballista-cli/src/tui/ui/main/jobs/mod.rs
@@ -34,6 +34,7 @@ use crate::tui::{
ui::vertical_scrollbar::render_scrollbar,
};
+use crate::tui::ui::vertical_scrollbar;
use ratatui::style::Color;
use ratatui::{
Frame,
@@ -127,7 +128,6 @@ pub fn render_jobs(f: &mut Frame, area: Rect, app: &App) {
let rects = Layout::vertical([
Constraint::Length(3), // Search box
Constraint::Min(5), // Table
- Constraint::Length(4), // Scrollbar padding
])
.split(area);
@@ -139,11 +139,7 @@ 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]);
+ let table_area = vertical_scrollbar::split_area(rects[1]);
render_jobs_table(
f,
table_area[0],
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 68747ae54..f92db6c0c 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
@@ -17,8 +17,9 @@
use crate::tui::app::App;
use crate::tui::domain::jobs::stages::StageTaskResponse;
+use crate::tui::ui::vertical_scrollbar;
use ratatui::Frame;
-use ratatui::layout::{Constraint, Layout};
+use ratatui::layout::Constraint;
use ratatui::prelude::{Color, Style};
use ratatui::text::Text;
use ratatui::widgets::{
@@ -95,11 +96,7 @@ 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;
- let rects = Layout::horizontal([
- Constraint::Min(1), // Table
- Constraint::Length(3), // Scrollbar
- ])
- .split(area);
+ let rects = vertical_scrollbar::split_area(area);
f.render_stateful_widget(table, rects[0], &mut table_state);
crate::tui::ui::vertical_scrollbar::render_scrollbar(f, rects[1], &mut
scroll_state);
}
diff --git a/ballista-cli/src/tui/ui/main/metrics/mod.rs
b/ballista-cli/src/tui/ui/main/metrics/mod.rs
index 9e9fb943e..afb9fb2ee 100644
--- a/ballista-cli/src/tui/ui/main/metrics/mod.rs
+++ b/ballista-cli/src/tui/ui/main/metrics/mod.rs
@@ -28,6 +28,7 @@ use crate::tui::{
};
use prometheus_parse::HistogramCount;
+use crate::tui::ui::vertical_scrollbar;
use ratatui::style::Color;
use ratatui::{
Frame,
@@ -68,23 +69,18 @@ pub fn render_metrics(f: &mut Frame, area: Rect, app: &App)
{
.collect()
};
- let vertical = Layout::vertical([
+ let rects = Layout::vertical([
Constraint::Length(3), // Search box
Constraint::Min(5), // Table
- Constraint::Length(3), // Scrollbar
- ]);
- let rects = vertical.split(area);
+ ])
+ .split(area);
render_search_box(f, rects[0], app);
if !filtered_metrics.is_empty() {
let mut scroll_state = app.metrics_data.scrollbar_state;
let mut table_state = app.metrics_data.table_state;
- let table_area = Layout::horizontal([
- Constraint::Min(1), // Table
- Constraint::Length(3), // Scrollbar
- ])
- .split(rects[1]);
+ let table_area = vertical_scrollbar::split_area(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) {
diff --git a/ballista-cli/src/tui/ui/vertical_scrollbar.rs
b/ballista-cli/src/tui/ui/vertical_scrollbar.rs
index f2bead8f0..bfecc5006 100644
--- a/ballista-cli/src/tui/ui/vertical_scrollbar.rs
+++ b/ballista-cli/src/tui/ui/vertical_scrollbar.rs
@@ -16,8 +16,9 @@
// under the License.
use ratatui::Frame;
-use ratatui::layout::{Margin, Rect};
+use ratatui::layout::{Constraint, Layout, Rect};
use ratatui::widgets::{Scrollbar, ScrollbarOrientation, ScrollbarState};
+use std::rc::Rc;
pub(crate) fn render_scrollbar(
frame: &mut Frame,
@@ -29,10 +30,18 @@ pub(crate) fn render_scrollbar(
.orientation(ScrollbarOrientation::VerticalRight)
.begin_symbol(Some("▲"))
.end_symbol(Some("▼")),
- area.inner(Margin {
- vertical: 1,
- horizontal: 1,
- }),
+ area,
scroll_state,
);
}
+
+/// Splits the given area into two parts:
+/// * the first part is the table area
+/// * the second part is the scrollbar area.
+pub(crate) fn split_area(area: Rect) -> Rc<[Rect]> {
+ Layout::horizontal([
+ Constraint::Min(1), // Table
+ Constraint::Length(1), // Scrollbar
+ ])
+ .split(area)
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]