Fixed a glaring error where the user cannot close the column selector
Some checks failed
ci / build (push) Has been cancelled

Cause of this was that the close event type was also being used by the related overlay, and the event was being caught by that even though the overlay was hidden.

Also started working on changing the sort order within the column selector by pressing S.
This commit is contained in:
Leon Mika 2024-04-02 23:00:19 +11:00
parent f5bf31a903
commit e37b8099a3
20 changed files with 213 additions and 67 deletions

View file

@ -6,6 +6,7 @@ import (
"github.com/charmbracelet/lipgloss"
"github.com/lmika/dynamo-browse/internal/common/ui/events"
"github.com/lmika/dynamo-browse/internal/dynamo-browse/controllers"
"github.com/lmika/dynamo-browse/internal/dynamo-browse/models"
"github.com/lmika/dynamo-browse/internal/dynamo-browse/models/columns"
"github.com/lmika/dynamo-browse/internal/dynamo-browse/ui/keybindings"
"github.com/lmika/dynamo-browse/internal/dynamo-browse/ui/teamodels/layout"
@ -25,8 +26,9 @@ type colListModel struct {
keyBinding *keybindings.KeyBindings
colController *controllers.ColumnsController
rows []table.Row
table table.Model
rows []table.Row
table table.Model
sortCriteria models.SortCriteria
}
func newColListModel(keyBinding *keybindings.KeyBindings, colController *controllers.ColumnsController) *colListModel {
@ -68,6 +70,8 @@ func (m *colListModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
return m, events.SetTeaMessage(m.colController.AddColumn(m.table.Cursor()))
case key.Matches(msg, m.keyBinding.ColumnPopup.DeleteColumn):
return m, events.SetTeaMessage(m.colController.DeleteColumn(m.table.Cursor()))
case key.Matches(msg, m.keyBinding.ColumnPopup.SortByColumn):
return m, events.SetTeaMessage(m.colController.SortByColumn(m.table.Cursor()))
// Main table nav
case key.Matches(msg, m.keyBinding.TableView.ColLeft):
@ -122,6 +126,7 @@ func (c *colListModel) Resize(w, h int) layout.ResizingModel {
func (c *colListModel) refreshTable() {
colsFromController := c.colController.Columns()
c.sortCriteria = c.colController.SortCriteria()
if len(c.rows) != len(colsFromController.Columns) {
c.setColumnsFromModel(colsFromController)
}

View file

@ -42,6 +42,7 @@ func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
var cc utils.CmdCollector
switch msg := msg.(type) {
case controllers.ShowColumnOverlay:
m.colListModel.sortCriteria = m.columnsController.SortCriteria()
m.colListModel.setColumnsFromModel(m.columnsController.Columns())
m.compositor.SetOverlay(m.colListModel, m.w/2-overlayWidth/2, m.h/2-overlayHeight/2, overlayWidth, overlayHeight)
case controllers.HideColumnOverlay:

View file

@ -3,6 +3,7 @@ package colselector
import (
"fmt"
"github.com/charmbracelet/lipgloss"
"github.com/lmika/dynamo-browse/internal/dynamo-browse/models/evaluators"
table "github.com/lmika/go-bubble-table"
"io"
)
@ -23,9 +24,17 @@ func (clr colListRowModel) Render(w io.Writer, model table.Model, index int) {
}
col := clr.m.colController.Columns().Columns[index]
if !col.Hidden {
fmt.Fprintln(w, style.Render(fmt.Sprintf("⋅\t%v", col.Name)))
} else {
ff := clr.m.sortCriteria.FirstField()
switch {
case col.Hidden:
fmt.Fprintln(w, style.Render(fmt.Sprintf("✕\t%v", col.Name)))
case evaluators.Equals(ff.Field, col.Evaluator):
if ff.Asc {
fmt.Fprintln(w, style.Render(fmt.Sprintf("v\t%v", col.Name)))
} else {
fmt.Fprintln(w, style.Render(fmt.Sprintf("^\t%v", col.Name)))
}
default:
fmt.Fprintln(w, style.Render(fmt.Sprintf("⋅\t%v", col.Name)))
}
}