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]
|
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{}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
|
|
||||||
type Columns struct {
|
type Columns struct {
|
||||||
TableInfo *models.TableInfo
|
TableInfo *models.TableInfo
|
||||||
|
WasRearranged bool
|
||||||
Columns []Column
|
Columns []Column
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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{}
|
||||||
|
|
Loading…
Reference in a new issue