packages feed

taskell-1.9.3.0: src/Taskell/UI/Draw/Main/Search.hs

module Taskell.UI.Draw.Main.Search
    ( renderSearch
    ) where

import Brick
import ClassyPrelude
import Control.Lens  ((^.))

import Taskell.Events.State.Types      (mode, searchTerm)
import Taskell.Events.State.Types.Mode (Mode (..))
import Taskell.IO.Config.Layout        (columnPadding)
import Taskell.UI.Draw.Field           (field)
import Taskell.UI.Draw.Types           (DSWidget, DrawState (..))
import Taskell.UI.Theme
import Taskell.UI.Types                (ResourceName (..))

renderSearch :: Widget ResourceName -> DSWidget
renderSearch mainWidget = do
    m <- (^. mode) <$> asks dsState
    term <- (^. searchTerm) <$> asks dsState
    case term of
        Just searchField -> do
            colPad <- columnPadding . dsLayout <$> ask
            let attr =
                    withAttr $
                    case m of
                        Search -> taskCurrentAttr
                        _      -> taskAttr
            let widget = attr . padLeftRight colPad $ txt "/" <+> field searchField
            pure $ mainWidget <=> widget
        _ -> pure mainWidget