mirror of
https://github.com/taigrr/teaqlite.git
synced 2026-04-02 04:59:03 -07:00
cell editing works better
This commit is contained in:
@@ -29,7 +29,12 @@ type (
|
||||
RowIndex, ColIndex int
|
||||
Value string
|
||||
}
|
||||
ExecuteQueryMsg struct{ Query 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 {
|
||||
|
||||
@@ -82,14 +82,14 @@ func (m *EditCellModel) View() string {
|
||||
}
|
||||
|
||||
content := TitleStyle.Render(fmt.Sprintf("Edit Cell: %s", columnName)) + "\n\n"
|
||||
|
||||
|
||||
// Display value with visible cursor
|
||||
displayValue := m.value
|
||||
if m.cursor <= len(displayValue) {
|
||||
// Insert cursor character at cursor position
|
||||
displayValue = displayValue[:m.cursor] + "_" + displayValue[m.cursor:]
|
||||
}
|
||||
|
||||
|
||||
content += fmt.Sprintf("Value: %s\n\n", displayValue)
|
||||
content += HelpStyle.Render("enter: save • esc: cancel")
|
||||
|
||||
|
||||
@@ -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,22 +252,36 @@ func (m *QueryModel) executeQuery() tea.Cmd {
|
||||
row[i] = fmt.Sprintf("%v", val)
|
||||
}
|
||||
}
|
||||
m.results = append(m.results, row)
|
||||
results = append(results, row)
|
||||
}
|
||||
|
||||
// Update shared data for row detail view
|
||||
m.Shared.FilteredData = m.results
|
||||
m.Shared.Columns = m.columns
|
||||
m.Shared.IsQueryResult = true
|
||||
|
||||
m.FocusOnInput = false
|
||||
m.selectedRow = 0
|
||||
m.err = nil
|
||||
|
||||
return nil
|
||||
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
|
||||
m.Shared.IsQueryResult = true
|
||||
|
||||
m.FocusOnInput = false
|
||||
m.selectedRow = 0
|
||||
m.err = nil
|
||||
}
|
||||
|
||||
func (m *QueryModel) View() string {
|
||||
var content strings.Builder
|
||||
|
||||
|
||||
@@ -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":
|
||||
|
||||
Reference in New Issue
Block a user