63 lines
1.5 KiB
Go
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
|
|
}
|