Skip to content

Commit ec53694

Browse files
authored
fix(select): recompute viewport width on WithWidth (#747)
1 parent 66bacd4 commit ec53694

3 files changed

Lines changed: 43 additions & 0 deletions

File tree

field_multiselect.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,7 @@ func (m *MultiSelect[T]) WithKeyMap(k *KeyMap) Field {
794794
// WithWidth sets the width of the multi-select field.
795795
func (m *MultiSelect[T]) WithWidth(width int) Field {
796796
m.width = width
797+
m.updateViewportSize()
797798
return m
798799
}
799800

field_select.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -778,6 +778,7 @@ func (s *Select[T]) WithKeyMap(k *KeyMap) Field {
778778
// WithWidth sets the width of the select field.
779779
func (s *Select[T]) WithWidth(width int) Field {
780780
s.width = width
781+
s.updateViewportSize()
781782
return s
782783
}
783784

zz_resize_width_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package huh
2+
3+
import "testing"
4+
5+
func TestSelectWithWidthUpdatesViewportWidth(t *testing.T) {
6+
f := NewSelect[string]().
7+
Title("Pick one").
8+
Options(
9+
NewOption("Option 1", "1"),
10+
NewOption("Option 2", "2"),
11+
)
12+
13+
f.WithWidth(18)
14+
if got, want := f.viewport.Width(), 18; got != want {
15+
t.Fatalf("viewport width after first WithWidth = %d, want %d", got, want)
16+
}
17+
18+
f.WithWidth(42)
19+
if got, want := f.viewport.Width(), 42; got != want {
20+
t.Fatalf("viewport width after resize WithWidth = %d, want %d", got, want)
21+
}
22+
}
23+
24+
func TestMultiSelectWithWidthUpdatesViewportWidth(t *testing.T) {
25+
f := NewMultiSelect[string]().
26+
Title("Pick many").
27+
Options(
28+
NewOption("Option 1", "1"),
29+
NewOption("Option 2", "2"),
30+
)
31+
32+
f.WithWidth(20)
33+
if got, want := f.viewport.Width(), 20; got != want {
34+
t.Fatalf("viewport width after first WithWidth = %d, want %d", got, want)
35+
}
36+
37+
f.WithWidth(44)
38+
if got, want := f.viewport.Width(), 44; got != want {
39+
t.Fatalf("viewport width after resize WithWidth = %d, want %d", got, want)
40+
}
41+
}

0 commit comments

Comments
 (0)