Prompt user for primary and secondary key for new items

This commit is contained in:
Leon Mika 2022-06-09 20:33:19 +10:00
parent a4216b47f5
commit e5a7b82a63
19 changed files with 191 additions and 53 deletions

View file

@ -1,7 +1,6 @@
package dynamotableview
import (
table "github.com/calyptia/go-bubble-table"
"github.com/charmbracelet/bubbles/key"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
@ -10,6 +9,7 @@ import (
"github.com/lmika/awstools/internal/dynamo-browse/ui/teamodels/dynamoitemview"
"github.com/lmika/awstools/internal/dynamo-browse/ui/teamodels/frame"
"github.com/lmika/awstools/internal/dynamo-browse/ui/teamodels/layout"
table "github.com/lmika/go-bubble-table"
)
var (
@ -42,8 +42,20 @@ type Model struct {
resultSet *models.ResultSet
}
type columnModel struct {
m *Model
}
func (cm columnModel) Len() int {
return len(cm.m.resultSet.Columns[cm.m.colOffset:])
}
func (cm columnModel) Header(index int) string {
return cm.m.resultSet.Columns[cm.m.colOffset+index]
}
func New() *Model {
tbl := table.New([]string{"pk", "sk"}, 100, 100)
tbl := table.New(table.SimpleColumns([]string{"pk", "sk"}), 100, 100)
rows := make([]table.Row, 0)
tbl.SetRows(rows)
@ -116,7 +128,9 @@ func (m *Model) setLeftmostDisplayedColumn(newCol int) {
} else {
m.colOffset = newCol
}
m.rebuildTable()
// TEMP
m.table.GoDown()
m.table.GoUp()
}
func (m *Model) View() string {
@ -141,7 +155,7 @@ func (m *Model) updateTable() {
func (m *Model) rebuildTable() {
resultSet := m.resultSet
newTbl := table.New(resultSet.Columns[m.colOffset:], m.w, m.h-m.frameTitle.HeaderHeight())
newTbl := table.New(columnModel{m}, m.w, m.h-m.frameTitle.HeaderHeight())
newRows := make([]table.Row, 0)
for i, r := range resultSet.Items() {
if resultSet.Hidden(i) {
@ -149,22 +163,24 @@ func (m *Model) rebuildTable() {
}
newRows = append(newRows, itemTableRow{
model: m,
resultSet: resultSet,
itemIndex: i,
colOffset: m.colOffset,
item: r,
})
}
m.rows = newRows
newTbl.SetRows(newRows)
for newTbl.Cursor() != m.table.Cursor() {
if newTbl.Cursor() < m.table.Cursor() {
newTbl.GoDown()
} else if newTbl.Cursor() > m.table.Cursor() {
newTbl.GoUp()
/*
for newTbl.Cursor() != m.table.Cursor() {
if newTbl.Cursor() < m.table.Cursor() {
newTbl.GoDown()
} else if newTbl.Cursor() > m.table.Cursor() {
newTbl.GoUp()
}
}
}
*/
m.table = newTbl
}

View file

@ -6,13 +6,13 @@ import (
"io"
"strings"
table "github.com/calyptia/go-bubble-table"
"github.com/lmika/awstools/internal/dynamo-browse/models"
table "github.com/lmika/go-bubble-table"
)
var (
markedRowStyle = lipgloss.NewStyle().
Background(lipgloss.Color("#e1e1e1"))
Background(lipgloss.AdaptiveColor{Dark: "#e1e1e1", Light: "#414141"})
dirtyRowStyle = lipgloss.NewStyle().
Foreground(lipgloss.Color("#e13131"))
newRowStyle = lipgloss.NewStyle().
@ -23,9 +23,9 @@ var (
)
type itemTableRow struct {
model *Model
resultSet *models.ResultSet
itemIndex int
colOffset int
item models.Item
}
@ -50,7 +50,7 @@ func (mtr itemTableRow) Render(w io.Writer, model table.Model, index int) {
metaInfoStyle := style.Copy().Inherit(metaInfoStyle)
sb := strings.Builder{}
for i, colName := range mtr.resultSet.Columns[mtr.colOffset:] {
for i, colName := range mtr.resultSet.Columns[mtr.model.colOffset:] {
if i > 0 {
sb.WriteString(style.Render("\t"))
}