Skip to content

cleanup: updateDerivedScreens recreates Settings and Help screens on every call #35

Description

@gitcoder89431

Problem

updateDerivedScreens in internal/app/update.go unconditionally calls screens.NewSettings(...) every time it's invoked (on every theme change, sidebar toggle, resize, and route change):

func (m *Model) updateDerivedScreens() {
    ...
    m.screens["settings"] = screens.NewSettings(screens.SettingsState{...}, m.theme) // always new
    if s, ok := m.screens["help"].(screens.Help); ok {
        m.screens["help"] = s.WithTheme(m.theme) // correct pattern
    } else {
        m.screens["help"] = screens.NewHelp(m.keys.FullHelp(), m.theme) // only on first call
    }
}

Settings is always reconstructed (losing any in-progress state), while Help and Activity correctly use a WithTheme pattern. Settings should follow the same WithTheme pattern, or at minimum use the type-assert-then-update approach.

Fix

Give Settings a WithTheme and WithState method (or a Update(SettingsState) method) so it can be updated in-place rather than reconstructed from scratch on every derived screen update.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions