dynamo-browse/internal/dynamo-browse/models/columns/columns.go
Leon Mika 982d3a9ca7
Issue 18: Added a popup to modify table columns (#31)
Added a new popup to modify the columns of the table. With this new popup, the user can:

- Show and hide columns
- Move columns around
- Add new columns which are derived from the value of an expression
- Delete columns

Also got the overlay mechanisms working.
2022-10-04 22:23:48 +11:00

70 lines
1.4 KiB
Go

package columns
import (
"github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
"github.com/lmika/audax/internal/dynamo-browse/models"
"github.com/lmika/audax/internal/dynamo-browse/models/queryexpr"
)
type Columns struct {
TableInfo *models.TableInfo
Columns []Column
}
func NewColumnsFromResultSet(rs *models.ResultSet) *Columns {
rsCols := rs.Columns()
cols := make([]Column, len(rsCols))
for i, c := range rsCols {
cols[i] = Column{
Name: c,
Evaluator: SimpleFieldValueEvaluator(c),
}
}
return &Columns{
TableInfo: rs.TableInfo,
Columns: cols,
}
}
func (cols *Columns) VisibleColumns() []Column {
if cols == nil {
return []Column{}
}
visibleCols := make([]Column, 0)
for _, col := range cols.Columns {
if col.Hidden {
continue
}
visibleCols = append(visibleCols, col)
}
return visibleCols
}
type Column struct {
Name string
Evaluator FieldValueEvaluator
Hidden bool
}
type FieldValueEvaluator interface {
EvaluateForItem(item models.Item) types.AttributeValue
}
type SimpleFieldValueEvaluator string
func (sfve SimpleFieldValueEvaluator) EvaluateForItem(item models.Item) types.AttributeValue {
return item[string(sfve)]
}
type ExprFieldValueEvaluator struct {
Expr *queryexpr.QueryExpr
}
func (sfve ExprFieldValueEvaluator) EvaluateForItem(item models.Item) types.AttributeValue {
val, _ := sfve.Expr.EvalItem(item)
return val
}