cell editing works better

This commit is contained in:
2025-07-13 17:50:56 -07:00
parent 3fdac7d9d8
commit 76bcc8520c
4 changed files with 57 additions and 23 deletions

View File

@@ -30,6 +30,11 @@ type (
Value string
}
ExecuteQueryMsg struct{ Query string }
QueryCompletedMsg struct {
Results [][]string
Columns []string
Error error
}
)
// Model is the main application model
@@ -506,6 +511,9 @@ func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
if msg.String() == "ctrl+c" {
return m, tea.Quit
}
if msg.String() == "ctrl+z" {
return m, tea.Suspend
}
case SwitchToTableListMsg:
m.currentView = NewTableListModel(m.getSharedData())
@@ -563,6 +571,13 @@ func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.err = err
}
return m, func() tea.Msg { return SwitchToRowDetailMsg{msg.RowIndex} }
case QueryCompletedMsg:
// Forward the query completion to the query model
if queryModel, ok := m.currentView.(*QueryModel); ok {
queryModel.handleQueryCompletion(msg)
}
return m, nil
}
if m.err != nil {

View File

@@ -221,21 +221,18 @@ func (m *QueryModel) executeQuery() tea.Cmd {
rows, err := m.Shared.DB.Query(modifiedQuery)
if err != nil {
m.err = err
return nil
return QueryCompletedMsg{Error: err}
}
defer rows.Close()
// Get column names
columns, err := rows.Columns()
if err != nil {
m.err = err
return nil
return QueryCompletedMsg{Error: err}
}
m.columns = columns
// Get results
m.results = [][]string{}
var results [][]string
for rows.Next() {
values := make([]any, len(columns))
valuePtrs := make([]any, len(columns))
@@ -244,8 +241,7 @@ func (m *QueryModel) executeQuery() tea.Cmd {
}
if err := rows.Scan(valuePtrs...); err != nil {
m.err = err
return nil
return QueryCompletedMsg{Error: err}
}
row := make([]string, len(columns))
@@ -256,9 +252,26 @@ func (m *QueryModel) executeQuery() tea.Cmd {
row[i] = fmt.Sprintf("%v", val)
}
}
m.results = append(m.results, row)
results = append(results, row)
}
return QueryCompletedMsg{
Results: results,
Columns: columns,
Error: nil,
}
}
}
func (m *QueryModel) handleQueryCompletion(msg QueryCompletedMsg) {
if msg.Error != nil {
m.err = msg.Error
return
}
m.results = msg.Results
m.columns = msg.Columns
// Update shared data for row detail view
m.Shared.FilteredData = m.results
m.Shared.Columns = m.columns
@@ -267,9 +280,6 @@ func (m *QueryModel) executeQuery() tea.Cmd {
m.FocusOnInput = false
m.selectedRow = 0
m.err = nil
return nil
}
}
func (m *QueryModel) View() string {

View File

@@ -57,7 +57,16 @@ func (m *TableDataModel) handleSearchInput(msg tea.KeyMsg) (tea.Model, tea.Cmd)
func (m *TableDataModel) handleNavigation(msg tea.KeyMsg) (tea.Model, tea.Cmd) {
switch msg.String() {
case "q", "esc":
case "q":
return m, func() tea.Msg { return SwitchToTableListMsg{} }
case "esc":
if m.searchInput != "" {
// Clear search filter
m.searchInput = ""
m.filterData()
return m, nil
}
return m, func() tea.Msg { return SwitchToTableListMsg{} }
case "enter":