charmbracelet / bubbles

TUI components for Bubble Tea 🫧
MIT License
5.56k stars 264 forks source link

List's `setSize` method should also call `updateKeybindings` #606

Open michaelriri opened 2 months ago

michaelriri commented 2 months ago

Describe the bug

Keybindings are not updated (enabled/disabled) after resizing the height of a list.

To Reproduce

You can see this behavior by calling SetHeight in the list-simple example.

func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
    switch msg := msg.(type) {
    case tea.WindowSizeMsg:
        m.list.SetWidth(msg.Width)
        m.list.SetHeight(msg.Height - 1)
...

Expected behavior

The keybindings should update according to the List's height. For example, if there is only one page, then disable next page and prev page bindings.

Screenshots

image

[!NOTE] The next page & prev page keybindings are still enabled, even though there is only one page.

Additional context

As a workaround, you can force the keybindings to update by calling SetFilteringEnabled which will, in turn, call updateKeybindings, but this is hacky. It seems like the straightforward fix is to also call updateKeybindings in setSize.