52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
package table
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func (m Model) hasFooter() bool {
|
|
return m.footerVisible && (m.staticFooter != "" || m.pageSize != 0 || m.filtered)
|
|
}
|
|
|
|
func (m Model) renderFooter(width int, includeTop bool) string {
|
|
if !m.hasFooter() {
|
|
return ""
|
|
}
|
|
|
|
const borderAdjustment = 2
|
|
|
|
styleFooter := m.baseStyle.Copy().Inherit(m.border.styleFooter).Width(width - borderAdjustment)
|
|
|
|
if includeTop {
|
|
styleFooter = styleFooter.BorderTop(true)
|
|
}
|
|
|
|
if m.staticFooter != "" {
|
|
return styleFooter.Render(m.staticFooter)
|
|
}
|
|
|
|
sections := []string{}
|
|
|
|
if m.filtered && (m.filterTextInput.Focused() || m.filterTextInput.Value() != "") {
|
|
sections = append(sections, m.filterTextInput.View())
|
|
}
|
|
|
|
// paged feature enabled
|
|
if m.pageSize != 0 {
|
|
str := fmt.Sprintf("%d/%d", m.CurrentPage(), m.MaxPages())
|
|
if m.filtered && m.filterTextInput.Focused() {
|
|
// Need to apply inline style here in case of filter input cursor, because
|
|
// the input cursor resets the style after rendering. Note that Inline(true)
|
|
// creates a copy, so it's safe to use here without mutating the underlying
|
|
// base style.
|
|
str = m.baseStyle.Inline(true).Render(str)
|
|
}
|
|
sections = append(sections, str)
|
|
}
|
|
|
|
footerText := strings.Join(sections, " ")
|
|
|
|
return styleFooter.Render(footerText)
|
|
}
|