113 lines
2.2 KiB
Go
113 lines
2.2 KiB
Go
package table
|
|
|
|
// PageSize returns the current page size for the table, or 0 if there is no
|
|
// pagination enabled.
|
|
func (m *Model) PageSize() int {
|
|
return m.pageSize
|
|
}
|
|
|
|
// CurrentPage returns the current page that the table is on, starting from an
|
|
// index of 1.
|
|
func (m *Model) CurrentPage() int {
|
|
return m.currentPage + 1
|
|
}
|
|
|
|
// MaxPages returns the maximum number of pages that are visible.
|
|
func (m *Model) MaxPages() int {
|
|
totalRows := len(m.GetVisibleRows())
|
|
|
|
if m.pageSize == 0 || totalRows == 0 {
|
|
return 1
|
|
}
|
|
|
|
return (totalRows-1)/m.pageSize + 1
|
|
}
|
|
|
|
// TotalRows returns the current total row count of the table. If the table is
|
|
// paginated, this is the total number of rows across all pages.
|
|
func (m *Model) TotalRows() int {
|
|
return len(m.GetVisibleRows())
|
|
}
|
|
|
|
// VisibleIndices returns the current visible rows by their 0 based index.
|
|
// Useful for custom pagination footers.
|
|
func (m *Model) VisibleIndices() (start, end int) {
|
|
totalRows := len(m.GetVisibleRows())
|
|
|
|
if m.pageSize == 0 {
|
|
start = 0
|
|
end = totalRows - 1
|
|
|
|
return start, end
|
|
}
|
|
|
|
start = m.pageSize * m.currentPage
|
|
end = start + m.pageSize - 1
|
|
|
|
if end >= totalRows {
|
|
end = totalRows - 1
|
|
}
|
|
|
|
return start, end
|
|
}
|
|
|
|
func (m *Model) pageDown() {
|
|
if m.pageSize == 0 || len(m.GetVisibleRows()) <= m.pageSize {
|
|
return
|
|
}
|
|
|
|
m.currentPage++
|
|
|
|
maxPageIndex := m.MaxPages() - 1
|
|
|
|
if m.currentPage > maxPageIndex {
|
|
if m.paginationWrapping {
|
|
m.currentPage = 0
|
|
} else {
|
|
m.currentPage = maxPageIndex
|
|
}
|
|
}
|
|
|
|
m.rowCursorIndex = m.currentPage * m.pageSize
|
|
}
|
|
|
|
func (m *Model) pageUp() {
|
|
if m.pageSize == 0 || len(m.GetVisibleRows()) <= m.pageSize {
|
|
return
|
|
}
|
|
|
|
m.currentPage--
|
|
|
|
maxPageIndex := m.MaxPages() - 1
|
|
|
|
if m.currentPage < 0 {
|
|
if m.paginationWrapping {
|
|
m.currentPage = maxPageIndex
|
|
} else {
|
|
m.currentPage = 0
|
|
}
|
|
}
|
|
|
|
m.rowCursorIndex = m.currentPage * m.pageSize
|
|
}
|
|
|
|
func (m *Model) pageFirst() {
|
|
m.currentPage = 0
|
|
m.rowCursorIndex = 0
|
|
}
|
|
|
|
func (m *Model) pageLast() {
|
|
m.currentPage = m.MaxPages() - 1
|
|
m.rowCursorIndex = m.currentPage * m.pageSize
|
|
}
|
|
|
|
func (m *Model) expectedPageForRowIndex(rowIndex int) int {
|
|
if m.pageSize == 0 {
|
|
return 0
|
|
}
|
|
|
|
expectedPage := rowIndex / m.pageSize
|
|
|
|
return expectedPage
|
|
}
|