on main help sign in
feat(diffview): add support for mouse scrolling
commit291710919dd70c2eb82cb27ec26af9346eec465e authorAndrey Nering <andreynering@users.noreply.github.com> dateWed 6 Aug 2025, 18:25 (1 year ago) parent65cd249
2 files changed+42−8
internal/tui/components/dialogs/permissions/permissions.go+37−8 internal/tui/tui.go+5
internal/tui/components/dialogs/permissions/permissions.go+37−8
@@ -134,26 +134,22 @@ func (p *permissionDialogCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
134134 }
135135 case key.Matches(msg, p.keyMap.ScrollDown):
136136 if p.supportsDiffView() {
137− p.diffYOffset += 1
138− p.contentDirty = true // Mark content as dirty when scrolling
137+ p.scrollDown()
139138 return p, nil
140139 }
141140 case key.Matches(msg, p.keyMap.ScrollUp):
142141 if p.supportsDiffView() {
143− p.diffYOffset = max(0, p.diffYOffset-1)
144− p.contentDirty = true // Mark content as dirty when scrolling
142+ p.scrollUp()
145143 return p, nil
146144 }
147145 case key.Matches(msg, p.keyMap.ScrollLeft):
148146 if p.supportsDiffView() {
149− p.diffXOffset = max(0, p.diffXOffset-5)
150− p.contentDirty = true // Mark content as dirty when scrolling
147+ p.scrollLeft()
151148 return p, nil
152149 }
153150 case key.Matches(msg, p.keyMap.ScrollRight):
154151 if p.supportsDiffView() {
155− p.diffXOffset += 5
156− p.contentDirty = true // Mark content as dirty when scrolling
152+ p.scrollRight()
157153 return p, nil
158154 }
159155 default:
@@ -162,11 +158,44 @@ func (p *permissionDialogCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
162158 p.contentViewPort = viewPort
163159 cmds = append(cmds, cmd)
164160 }
161+ case tea.MouseWheelMsg:
162+ if p.supportsDiffView() {
163+ switch msg.Button {
164+ case tea.MouseWheelDown:
165+ p.scrollDown()
166+ case tea.MouseWheelUp:
167+ p.scrollUp()
168+ case tea.MouseWheelLeft:
169+ p.scrollLeft()
170+ case tea.MouseWheelRight:
171+ p.scrollRight()
172+ }
173+ }
165174 }
166175
167176 return p, tea.Batch(cmds...)
168177}
169178
179+func (p *permissionDialogCmp) scrollDown() {
180+ p.diffYOffset += 1
181+ p.contentDirty = true
182+}
183+
184+func (p *permissionDialogCmp) scrollUp() {
185+ p.diffYOffset = max(0, p.diffYOffset-1)
186+ p.contentDirty = true
187+}
188+
189+func (p *permissionDialogCmp) scrollLeft() {
190+ p.diffXOffset = max(0, p.diffXOffset-5)
191+ p.contentDirty = true
192+}
193+
194+func (p *permissionDialogCmp) scrollRight() {
195+ p.diffXOffset += 5
196+ p.contentDirty = true
197+}
198+
170199func (p *permissionDialogCmp) selectCurrentOption() tea.Cmd {
171200 var action PermissionAction
172201
internal/tui/tui.go+5
@@ -264,6 +264,11 @@ func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
264264 return a, a.handleKeyPressMsg(msg)
265265
266266 case tea.MouseWheelMsg:
267+ if a.dialog.HasDialogs() && a.dialog.ActiveDialogID() == permissions.PermissionsDialogID {
268+ u, dialogCmd := a.dialog.Update(msg)
269+ a.dialog = u.(dialogs.DialogCmp)
270+ cmds = append(cmds, dialogCmd)
271+ }
267272 if !a.dialog.HasDialogs() {
268273 updated, pageCmd := a.pages[a.currentPage].Update(msg)
269274 a.pages[a.currentPage] = updated.(util.Model)