Enha: add ts columns for chat table
This commit is contained in:
65
tables.go
65
tables.go
@@ -23,43 +23,92 @@ func makeChatTable(chatMap map[string]models.Chat) *tview.Table {
|
|||||||
chatList[i] = name
|
chatList[i] = name
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
rows, cols := len(chatMap), len(actions)+2
|
|
||||||
|
// Add 1 extra row for header
|
||||||
|
rows, cols := len(chatMap)+1, len(actions)+4 // +2 for name, +2 for timestamps
|
||||||
chatActTable := tview.NewTable().
|
chatActTable := tview.NewTable().
|
||||||
SetBorders(true)
|
SetBorders(true)
|
||||||
for r := 0; r < rows; r++ {
|
|
||||||
|
// Add header row (row 0)
|
||||||
|
for c := 0; c < cols; c++ {
|
||||||
|
color := tcell.ColorWhite
|
||||||
|
headerText := ""
|
||||||
|
switch c {
|
||||||
|
case 0:
|
||||||
|
headerText = "Chat Name"
|
||||||
|
case 1:
|
||||||
|
headerText = "Preview"
|
||||||
|
case 2:
|
||||||
|
headerText = "Created At"
|
||||||
|
case 3:
|
||||||
|
headerText = "Updated At"
|
||||||
|
default:
|
||||||
|
headerText = actions[c-4]
|
||||||
|
}
|
||||||
|
chatActTable.SetCell(0, c,
|
||||||
|
tview.NewTableCell(headerText).
|
||||||
|
SetSelectable(false).
|
||||||
|
SetTextColor(color).
|
||||||
|
SetAlign(tview.AlignCenter).
|
||||||
|
SetAttributes(tcell.AttrBold))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add data rows (starting from row 1)
|
||||||
|
for r := 0; r < rows-1; r++ { // rows-1 because we added a header row
|
||||||
for c := 0; c < cols; c++ {
|
for c := 0; c < cols; c++ {
|
||||||
color := tcell.ColorWhite
|
color := tcell.ColorWhite
|
||||||
switch c {
|
switch c {
|
||||||
case 0:
|
case 0:
|
||||||
chatActTable.SetCell(r, c,
|
chatActTable.SetCell(r+1, c, // +1 to account for header row
|
||||||
tview.NewTableCell(chatList[r]).
|
tview.NewTableCell(chatList[r]).
|
||||||
SetSelectable(false).
|
SetSelectable(false).
|
||||||
SetTextColor(color).
|
SetTextColor(color).
|
||||||
SetAlign(tview.AlignCenter))
|
SetAlign(tview.AlignCenter))
|
||||||
case 1:
|
case 1:
|
||||||
chatActTable.SetCell(r, c,
|
chatActTable.SetCell(r+1, c, // +1 to account for header row
|
||||||
tview.NewTableCell(chatMap[chatList[r]].Msgs[len(chatMap[chatList[r]].Msgs)-30:]).
|
tview.NewTableCell(chatMap[chatList[r]].Msgs[len(chatMap[chatList[r]].Msgs)-30:]).
|
||||||
SetSelectable(false).
|
SetSelectable(false).
|
||||||
SetTextColor(color).
|
SetTextColor(color).
|
||||||
SetAlign(tview.AlignCenter))
|
SetAlign(tview.AlignCenter))
|
||||||
|
case 2:
|
||||||
|
// Created At column
|
||||||
|
chatActTable.SetCell(r+1, c, // +1 to account for header row
|
||||||
|
tview.NewTableCell(chatMap[chatList[r]].CreatedAt.Format("2006-01-02 15:04")).
|
||||||
|
SetSelectable(false).
|
||||||
|
SetTextColor(color).
|
||||||
|
SetAlign(tview.AlignCenter))
|
||||||
|
case 3:
|
||||||
|
// Updated At column
|
||||||
|
chatActTable.SetCell(r+1, c, // +1 to account for header row
|
||||||
|
tview.NewTableCell(chatMap[chatList[r]].UpdatedAt.Format("2006-01-02 15:04")).
|
||||||
|
SetSelectable(false).
|
||||||
|
SetTextColor(color).
|
||||||
|
SetAlign(tview.AlignCenter))
|
||||||
default:
|
default:
|
||||||
chatActTable.SetCell(r, c,
|
chatActTable.SetCell(r+1, c, // +1 to account for header row
|
||||||
tview.NewTableCell(actions[c-2]).
|
tview.NewTableCell(actions[c-4]). // Adjusted offset to account for 2 new timestamp columns
|
||||||
SetTextColor(color).
|
SetTextColor(color).
|
||||||
SetAlign(tview.AlignCenter))
|
SetAlign(tview.AlignCenter))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
chatActTable.Select(0, 0).SetSelectable(true, true).SetFixed(1, 1).SetDoneFunc(func(key tcell.Key) {
|
chatActTable.Select(1, 0).SetSelectable(true, true).SetFixed(1, 1).SetDoneFunc(func(key tcell.Key) {
|
||||||
if key == tcell.KeyEsc || key == tcell.KeyF1 || key == tcell.Key('x') {
|
if key == tcell.KeyEsc || key == tcell.KeyF1 || key == tcell.Key('x') {
|
||||||
pages.RemovePage(historyPage)
|
pages.RemovePage(historyPage)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}).SetSelectedFunc(func(row int, column int) {
|
}).SetSelectedFunc(func(row int, column int) {
|
||||||
|
// Skip header row (row 0) for selection
|
||||||
|
if row == 0 {
|
||||||
|
// If user clicks on header, just return without action
|
||||||
|
chatActTable.Select(1, column) // Move selection to first data row
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
tc := chatActTable.GetCell(row, column)
|
tc := chatActTable.GetCell(row, column)
|
||||||
tc.SetTextColor(tcell.ColorRed)
|
tc.SetTextColor(tcell.ColorRed)
|
||||||
chatActTable.SetSelectable(false, false)
|
chatActTable.SetSelectable(false, false)
|
||||||
selectedChat := chatList[row]
|
selectedChat := chatList[row-1] // -1 to account for header row
|
||||||
defer pages.RemovePage(historyPage)
|
defer pages.RemovePage(historyPage)
|
||||||
switch tc.Text {
|
switch tc.Text {
|
||||||
case "load":
|
case "load":
|
||||||
|
|||||||
Reference in New Issue
Block a user