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.
70 lines
1.4 KiB
Go
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
|
|
}
|