dynamo-browse/internal/common/ui/commandctrl/cmdpacks/pvars.go
Leon Mika 32ae488066
All checks were successful
ci / build (push) Successful in 3m17s
Moved package to lmika.dev/cmd/dynamo-browse
2025-05-26 22:04:23 +10:00

63 lines
1.5 KiB
Go

package cmdpacks
import (
"context"
"lmika.dev/cmd/dynamo-browse/internal/common/ui/commandctrl"
"lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/controllers"
"lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/models"
"github.com/pkg/errors"
)
type tablePVar struct {
state *controllers.State
}
func (rs tablePVar) Get(ctx context.Context) (any, error) {
return newTableProxy(rs.state.ResultSet().TableInfo), nil
}
type resultSetPVar struct {
state *controllers.State
readController *controllers.TableReadController
}
func (rs resultSetPVar) Get(ctx context.Context) (any, error) {
return newResultSetProxy(rs.state.ResultSet()), nil
}
func (rs resultSetPVar) Set(ctx context.Context, value any) error {
rsVal, ok := value.(SimpleProxy[*models.ResultSet])
if !ok {
return errors.New("new value to @resultset is nil or not a result set")
}
msg := rs.readController.SetResultSet(rsVal.value)
commandctrl.PostMsg(ctx, msg)
return nil
}
type itemPVar struct {
state *controllers.State
}
func (rs itemPVar) Get(ctx context.Context) (any, error) {
selItem, ok := commandctrl.SelectedItemIndex(ctx)
if !ok {
return nil, errors.New("no item selected")
}
return itemProxy{rs.state.ResultSet(), selItem, rs.state.ResultSet().Items()[selItem]}, nil
}
func (rs itemPVar) Set(ctx context.Context, value any) error {
rsVal, ok := value.(itemProxy)
if !ok {
return errors.New("new value to @item is not an item")
}
if msg := commandctrl.SetSelectedItemIndex(ctx, rsVal.idx); msg != nil {
commandctrl.PostMsg(ctx, msg)
}
return nil
}