From 41478c3031b87d0b0497cbcabe3eb4c391589dd5 Mon Sep 17 00:00:00 2001 From: "Jager,Petar" Date: Fri, 4 Nov 2022 14:50:51 +0100 Subject: [PATCH] Table: Make UpdateViewport() have constant runtime, not depending on number of rows in a table --- table/table.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/table/table.go b/table/table.go index cb058f7..889a6eb 100644 --- a/table/table.go +++ b/table/table.go @@ -242,7 +242,13 @@ func (m Model) View() string { // columns and rows. func (m *Model) UpdateViewport() { renderedRows := make([]string, 0, len(m.rows)) - for i := range m.rows { + + // Render only rows from: m.cursor-m.viewport.Height to: m.cursor+m.viewport.Height + // Constant runtime, independent of number of rows in a table. + // Limits the numer of renderedRows to a maximum of 2*m.viewport.Height + start := clamp(m.cursor-m.viewport.Height, 0, len(m.rows)) + end := clamp(m.cursor+m.viewport.Height, m.cursor, len(m.rows)) + for i := start; i < end; i++ { renderedRows = append(renderedRows, m.renderRow(i)) }