fix(tui): make permissions dialog height responsive to resize (#877)

James Trew created

Change summary

internal/tui/components/dialogs/permissions/permissions.go                                | 13 
internal/tui/exp/diffview/diffview.go                                                     | 29 
internal/tui/exp/diffview/diffview_test.go                                                |  6 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf016.golden            |  0 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf017.golden            |  0 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf018.golden            |  0 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf019.golden            |  0 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf020.golden            |  0 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf017.golden          |  3 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf018.golden          |  4 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf019.golden          |  5 
internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf020.golden          |  6 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf11.golden   |  0 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf12.golden   |  0 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf13.golden   |  5 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf14.golden   |  6 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf15.golden   |  5 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf16.golden   |  5 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf12.golden |  3 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf13.golden |  4 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf14.golden |  5 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf15.golden |  6 
internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf16.golden |  5 
23 files changed, 16 insertions(+), 94 deletions(-)

Detailed changes

internal/tui/components/dialogs/permissions/permissions.go 🔗

@@ -698,15 +698,14 @@ func (p *permissionDialogCmp) render() string {
 
 	p.contentViewPort.SetWidth(p.width - 4)
 
-	// Get cached or generate content
-	contentFinal := p.getOrGenerateContent()
-
 	// Always set viewport content (the caching is handled in getOrGenerateContent)
 	const minContentHeight = 9
-	contentHeight := min(
-		max(minContentHeight, p.height-minContentHeight),
-		lipgloss.Height(contentFinal),
-	)
+
+	availableDialogHeight := max(minContentHeight, p.height-minContentHeight)
+	p.contentViewPort.SetHeight(availableDialogHeight)
+	contentFinal := p.getOrGenerateContent()
+	contentHeight := min(availableDialogHeight, lipgloss.Height(contentFinal))
+
 	p.contentViewPort.SetHeight(contentHeight)
 	p.contentViewPort.SetContent(contentFinal)
 

internal/tui/exp/diffview/diffview.go 🔗

@@ -500,19 +500,6 @@ outer:
 		}
 	}
 
-	for printedLines < dv.height {
-		if shouldWrite() {
-			ls := dv.style.MissingLine
-			if dv.lineNumbers {
-				b.WriteString(ls.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
-				b.WriteString(ls.LineNumber.Render(pad(" ", dv.afterNumDigits)))
-			}
-			b.WriteString(ls.Code.Width(dv.fullCodeWidth).Render("  "))
-			b.WriteRune('\n')
-		}
-		printedLines++
-	}
-
 	return b.String()
 }
 
@@ -670,22 +657,6 @@ outer:
 		}
 	}
 
-	for printedLines < dv.height {
-		if shouldWrite() {
-			ls := dv.style.MissingLine
-			if dv.lineNumbers {
-				b.WriteString(ls.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
-			}
-			b.WriteString(ls.Code.Width(dv.fullCodeWidth).Render(" "))
-			if dv.lineNumbers {
-				b.WriteString(ls.LineNumber.Render(pad(" ", dv.afterNumDigits)))
-			}
-			b.WriteString(ls.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "))
-			b.WriteRune('\n')
-		}
-		printedLines++
-	}
-
 	return b.String()
 }
 

internal/tui/exp/diffview/diffview_test.go 🔗

@@ -249,8 +249,6 @@ func TestDiffViewHeight(t *testing.T) {
 
 					output := dv.String()
 					golden.RequireEqual(t, []byte(output))
-
-					assertHeight(t, height, output)
 				})
 			}
 		})
@@ -301,8 +299,6 @@ func TestDiffViewYOffset(t *testing.T) {
 
 					output := dv.String()
 					golden.RequireEqual(t, []byte(output))
-
-					assertHeight(t, 5, output)
 				})
 			}
 		})
@@ -328,8 +324,6 @@ func TestDiffViewYOffsetInfinite(t *testing.T) {
 
 					output := dv.String()
 					golden.RequireEqual(t, []byte(output))
-
-					assertHeight(t, 5, output)
 				})
 			}
 		})

internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf016.golden 🔗

@@ -12,5 +12,4 @@
  11   func getContent() string {                       12   func getContent() string {                      

internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf017.golden 🔗

@@ -12,6 +12,4 @@
  11   func getContent() string {                       12   func getContent() string {                      

internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf018.golden 🔗

@@ -12,7 +12,4 @@
  11   func getContent() string {                       12   func getContent() string {                      

internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf019.golden 🔗

@@ -12,8 +12,4 @@
  11   func getContent() string {                       12   func getContent() string {                      

internal/tui/exp/diffview/testdata/TestDiffViewHeight/Split/HeightOf020.golden 🔗

@@ -12,9 +12,4 @@
  11   func getContent() string {                       12   func getContent() string {                      

internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf017.golden 🔗

@@ -13,5 +13,4 @@
  12     -     return "Hello, world!"                      
      13 +     content := strings.ToUpper("Hello, World!") 
      14 +     return content                              
- 13  15   }                                               
-                                                          
+ 13  15   }                                               

internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf018.golden 🔗

@@ -13,6 +13,4 @@
  12     -     return "Hello, world!"                      
      13 +     content := strings.ToUpper("Hello, World!") 
      14 +     return content                              
- 13  15   }                                               
-                                                          
-                                                          
+ 13  15   }                                               

internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf019.golden 🔗

@@ -13,7 +13,4 @@
  12     -     return "Hello, world!"                      
      13 +     content := strings.ToUpper("Hello, World!") 
      14 +     return content                              
- 13  15   }                                               
-                                                          
-                                                          
-                                                          
+ 13  15   }                                               

internal/tui/exp/diffview/testdata/TestDiffViewHeight/Unified/HeightOf020.golden 🔗

@@ -13,8 +13,4 @@
  12     -     return "Hello, world!"                      
      13 +     content := strings.ToUpper("Hello, World!") 
      14 +     return content                              
- 13  15   }                                               
-                                                          
-                                                          
-                                                          
-                                                          
+ 13  15   }                                               

internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf11.golden 🔗

@@ -1,5 +1,4 @@
  11   func getContent() string {                       12   func getContent() string {                      

internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf13.golden 🔗

@@ -1,5 +1,2 @@
                                                        14 +     return content                              
- 13   }                                                15   }                                               
-                                                                                                            
-                                                                                                            
-                                                                                                            
+ 13   }                                                15   }                                               

internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf14.golden 🔗

@@ -1,5 +1 @@
- 13   }                                                15   }                                               
-                                                                                                            
-                                                                                                            
-                                                                                                            
-                                                                                                            
+ 13   }                                                15   }                                               

internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf15.golden 🔗

@@ -1,5 +0,0 @@
-                                                                                                            
-                                                                                                            
-                                                                                                            
-                                                                                                            
-                                                                                                            

internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf16.golden 🔗

@@ -1,5 +0,0 @@
-                                                                                                            
-                                                                                                            
-                                                                                                            
-                                                                                                            
-                                                                                                            

internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf12.golden 🔗

@@ -1,5 +1,4 @@
  12     -     return "Hello, world!"                      
      13 +     content := strings.ToUpper("Hello, World!") 
      14 +     return content                              
- 13  15   }                                               
-                                                          
+ 13  15   }                                               

internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf13.golden 🔗

@@ -1,5 +1,3 @@
      13 +     content := strings.ToUpper("Hello, World!") 
      14 +     return content                              
- 13  15   }                                               
-                                                          
-                                                          
+ 13  15   }                                               

internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf14.golden 🔗

@@ -1,5 +1,2 @@
      14 +     return content                              
- 13  15   }                                               
-                                                          
-                                                          
-                                                          
+ 13  15   }                                               

internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf15.golden 🔗

@@ -1,5 +1 @@
- 13  15   }                                               
-                                                          
-                                                          
-                                                          
-                                                          
+ 13  15   }                                               

internal/tui/exp/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf16.golden 🔗

@@ -1,5 +0,0 @@
-                                                          
-                                                          
-                                                          
-                                                          
-