Refreshing will update the columns if they haven't been rearranged

This commit is contained in:
Leon Mika 2023-02-23 21:31:01 +11:00
parent 3f1aec2c87
commit ab309084c5
2 changed files with 45 additions and 2 deletions

View file

@ -38,6 +38,7 @@ func (cc *ColumnsController) ShiftColumnLeft(idx int) tea.Msg {
col := cc.colModel.Columns[idx-1] col := cc.colModel.Columns[idx-1]
cc.colModel.Columns[idx-1], cc.colModel.Columns[idx] = cc.colModel.Columns[idx], col cc.colModel.Columns[idx-1], cc.colModel.Columns[idx] = cc.colModel.Columns[idx], col
cc.colModel.WasRearranged = true
return ColumnsUpdated{} return ColumnsUpdated{}
} }
@ -49,6 +50,7 @@ func (cc *ColumnsController) ShiftColumnRight(idx int) tea.Msg {
col := cc.colModel.Columns[idx+1] col := cc.colModel.Columns[idx+1]
cc.colModel.Columns[idx+1], cc.colModel.Columns[idx] = cc.colModel.Columns[idx], col cc.colModel.Columns[idx+1], cc.colModel.Columns[idx] = cc.colModel.Columns[idx], col
cc.colModel.WasRearranged = true
return ColumnsUpdated{} return ColumnsUpdated{}
} }
@ -63,6 +65,8 @@ func (cc *ColumnsController) onNewResultSet(rs *models.ResultSet, op resultSetUp
if cc.colModel == nil || (op == resultSetUpdateInit || op == resultSetUpdateQuery) { if cc.colModel == nil || (op == resultSetUpdateInit || op == resultSetUpdateQuery) {
cc.colModel = columns.NewColumnsFromResultSet(rs) cc.colModel = columns.NewColumnsFromResultSet(rs)
} else {
cc.colModel.AddMissingColumns(rs)
} }
} }
@ -89,6 +93,7 @@ func (cc *ColumnsController) AddColumn(afterIndex int) tea.Msg {
cc.colModel.Columns = newCols cc.colModel.Columns = newCols
} }
cc.colModel.WasRearranged = true
return tea.Batch( return tea.Batch(
events.SetTeaMessage(ColumnsUpdated{}), events.SetTeaMessage(ColumnsUpdated{}),
@ -106,6 +111,7 @@ func (cc *ColumnsController) DeleteColumn(afterIndex int) tea.Msg {
newCols = append(newCols, cc.colModel.Columns[:afterIndex]...) newCols = append(newCols, cc.colModel.Columns[:afterIndex]...)
newCols = append(newCols, cc.colModel.Columns[afterIndex+1:]...) newCols = append(newCols, cc.colModel.Columns[afterIndex+1:]...)
cc.colModel.Columns = newCols cc.colModel.Columns = newCols
cc.colModel.WasRearranged = true
return ColumnsUpdated{} return ColumnsUpdated{}
} }

View file

@ -7,8 +7,9 @@ import (
) )
type Columns struct { type Columns struct {
TableInfo *models.TableInfo TableInfo *models.TableInfo
Columns []Column WasRearranged bool
Columns []Column
} }
func NewColumnsFromResultSet(rs *models.ResultSet) *Columns { func NewColumnsFromResultSet(rs *models.ResultSet) *Columns {
@ -28,6 +29,42 @@ func NewColumnsFromResultSet(rs *models.ResultSet) *Columns {
} }
} }
func (cols *Columns) AddMissingColumns(rs *models.ResultSet) {
existingColumns := make(map[string]Column)
for _, col := range cols.Columns {
existingColumns[col.Name] = col
}
rsCols := rs.Columns()
var newCols []Column
if cols.WasRearranged {
newCols = append([]Column{}, cols.Columns...)
for _, c := range rsCols {
if _, hasCol := existingColumns[c]; !hasCol {
newCols = append(newCols, Column{
Name: c,
Evaluator: SimpleFieldValueEvaluator(c),
})
}
}
} else {
newCols = make([]Column, len(rsCols))
for i, c := range rsCols {
if existingCol, hasCol := existingColumns[c]; hasCol {
newCols[i] = existingCol
} else {
newCols[i] = Column{
Name: c,
Evaluator: SimpleFieldValueEvaluator(c),
}
}
}
}
cols.Columns = newCols
}
func (cols *Columns) VisibleColumns() []Column { func (cols *Columns) VisibleColumns() []Column {
if cols == nil { if cols == nil {
return []Column{} return []Column{}