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
 | |
| }
 |