module Brick.Widgets.List.Utils where import Brick.Widgets.List import Data.Maybe import qualified Data.Vector as V import Lens.Micro -- | Replace the contents of a list with a new set of elements but preserve the -- currently selected index. -- -- This is a version of listReplace that doesn't try to be smart, but assumes -- that all the elements in one list are distinct. -- -- listReplace itself is broken as of brick-0.2 due to a bogus implementation of -- the `merge` function. listSimpleReplace :: Eq e => V.Vector e -> List n e -> List n e listSimpleReplace elems oldList = let selected = flip V.elemIndex elems . snd =<< listSelectedElement oldList newSelected = if V.null elems then Nothing else Just $ fromMaybe 0 selected in oldList & listElementsL .~ elems & listSelectedL .~ newSelected