Răsfoiți Sursa

perf: scroll to bottom in thread

Dax Raad 7 luni în urmă
părinte
comite
9af92b6914

+ 4 - 3
packages/tui/internal/components/chat/messages.go

@@ -102,9 +102,6 @@ func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 		m.loading = false
 		m.tail = m.viewport.AtBottom()
 		m.viewport = msg.viewport
-		if m.tail {
-			m.viewport.GotoBottom()
-		}
 		if m.dirty {
 			cmds = append(cmds, m.renderView())
 		}
@@ -138,6 +135,7 @@ func (m *messagesComponent) renderView() tea.Cmd {
 	m.rendering = true
 
 	viewport := m.viewport
+	tail := m.tail
 
 	return func() tea.Msg {
 		measure := util.Measure("messages.renderView")
@@ -402,6 +400,9 @@ func (m *messagesComponent) renderView() tea.Cmd {
 		content := "\n" + strings.Join(blocks, "\n\n")
 		viewport.SetHeight(m.height - lipgloss.Height(m.header))
 		viewport.SetContent(content)
+		if tail {
+			viewport.GotoBottom()
+		}
 
 		return renderCompleteMsg{
 			viewport:  viewport,

+ 2 - 2
packages/tui/internal/tui/tui.go

@@ -528,17 +528,17 @@ func (a appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 }
 
 func (a appModel) View() string {
+	measure := util.Measure("app.View")
+	defer measure()
 	t := theme.CurrentTheme()
 
 	var mainLayout string
 
-	measure := util.Measure("app.View")
 	if a.app.Session.ID == "" {
 		mainLayout = a.home()
 	} else {
 		mainLayout = a.chat()
 	}
-	measure()
 	mainLayout = styles.NewStyle().
 		Background(t.Background()).
 		Padding(0, 2).