Refreshing will update the columns if they haven't been rearranged
This commit is contained in:
parent
3f1aec2c87
commit
ab309084c5
|
@ -38,6 +38,7 @@ func (cc *ColumnsController) ShiftColumnLeft(idx int) tea.Msg {
|
|||
|
||||
col := cc.colModel.Columns[idx-1]
|
||||
cc.colModel.Columns[idx-1], cc.colModel.Columns[idx] = cc.colModel.Columns[idx], col
|
||||
cc.colModel.WasRearranged = true
|
||||
|
||||
return ColumnsUpdated{}
|
||||
}
|
||||
|
@ -49,6 +50,7 @@ func (cc *ColumnsController) ShiftColumnRight(idx int) tea.Msg {
|
|||
|
||||
col := cc.colModel.Columns[idx+1]
|
||||
cc.colModel.Columns[idx+1], cc.colModel.Columns[idx] = cc.colModel.Columns[idx], col
|
||||
cc.colModel.WasRearranged = true
|
||||
|
||||
return ColumnsUpdated{}
|
||||
}
|
||||
|
@ -63,6 +65,8 @@ func (cc *ColumnsController) onNewResultSet(rs *models.ResultSet, op resultSetUp
|
|||
|
||||
if cc.colModel == nil || (op == resultSetUpdateInit || op == resultSetUpdateQuery) {
|
||||
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.WasRearranged = true
|
||||
|
||||
return tea.Batch(
|
||||
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+1:]...)
|
||||
cc.colModel.Columns = newCols
|
||||
cc.colModel.WasRearranged = true
|
||||
|
||||
return ColumnsUpdated{}
|
||||
}
|
||||
|
|
|
@ -7,8 +7,9 @@ import (
|
|||
)
|
||||
|
||||
type Columns struct {
|
||||
TableInfo *models.TableInfo
|
||||
Columns []Column
|
||||
TableInfo *models.TableInfo
|
||||
WasRearranged bool
|
||||
Columns []Column
|
||||
}
|
||||
|
||||
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 {
|
||||
if cols == nil {
|
||||
return []Column{}
|
||||
|
|
Loading…
Reference in a new issue