dynamo-browse/internal/dynamo-browse/controllers/events.go
Leon Mika 5d95d44a97
Added the rel-picker which can quickly goto related tables
* New rel-picker that can be opened using Shift+O and allows for quickly going to related tables.
2024-03-03 09:20:28 +11:00

100 lines
2.1 KiB
Go

package controllers
import (
"fmt"
"strings"
"time"
tea "github.com/charmbracelet/bubbletea"
"github.com/lmika/dynamo-browse/internal/dynamo-browse/models"
"github.com/lmika/dynamo-browse/internal/dynamo-browse/models/relitems"
)
type SetTableItemView struct {
ViewIndex int
}
type SettingsUpdated struct {
}
type ColumnsUpdated struct {
}
type SetSelectedColumnInColSelector int
type MoveLeftmostDisplayedColumnInTableViewBy int
type NewResultSet struct {
ResultSet *models.ResultSet
currentFilter string
filteredCount int
statusMessage string
}
func (rs NewResultSet) ModeMessage() string {
var modeLine string
if rs.ResultSet.Query != nil {
modeLine = rs.ResultSet.Query.String()
} else {
modeLine = "All results"
}
if rs.currentFilter != "" {
modeLine = fmt.Sprintf("%v - Filter: '%v'", modeLine, rs.currentFilter)
}
return modeLine
}
func (rs NewResultSet) RightModeMessage() string {
var sb strings.Builder
itemCountStr := applyToN("", len(rs.ResultSet.Items()), "item", "items", "")
if rs.currentFilter != "" {
sb.WriteString(fmt.Sprintf("%d of %v", rs.filteredCount, itemCountStr))
} else {
sb.WriteString(itemCountStr)
}
if !rs.ResultSet.Created.IsZero() {
sb.WriteString(" • ")
sb.WriteString(rs.ResultSet.Created.Format(time.Kitchen))
}
return sb.String()
}
func (rs NewResultSet) StatusMessage() string {
if rs.statusMessage != "" {
return rs.statusMessage
}
if rs.currentFilter != "" {
return fmt.Sprintf("%d of %d items returned", rs.filteredCount, len(rs.ResultSet.Items()))
} else {
return fmt.Sprintf("%d items returned", len(rs.ResultSet.Items()))
}
}
type PromptForTableMsg struct {
Tables []string
OnSelected func(tableName string) tea.Msg
}
type ResultSetUpdated struct {
statusMessage string
}
func (rs ResultSetUpdated) StatusMessage() string {
return rs.statusMessage
}
type ShowColumnOverlay struct{}
type HideColumnOverlay struct{}
type ShowRelatedItemsOverlay struct {
Items []relitems.RelatedItem
OnSelected func(item relitems.RelatedItem) tea.Msg
}
type HideRelatedItemsOverlay struct{}