taskell-1.7.0.0: src/UI/Draw/Modal.hs
{-# LANGUAGE NoImplicitPrelude #-}
module UI.Draw.Modal
( renderModal
) where
import ClassyPrelude
import Control.Lens ((^.))
import Brick
import Brick.Widgets.Border
import Brick.Widgets.Center
import Events.State.Types (height, mode)
import Events.State.Types.Mode (ModalType (..), Mode (..))
import UI.Draw.Field (textField)
import UI.Draw.Modal.Detail (detail)
import UI.Draw.Modal.Due (due)
import UI.Draw.Modal.Help (help)
import UI.Draw.Modal.MoveTo (moveTo)
import UI.Draw.Types (DSWidget, DrawState (dsState), TWidget)
import UI.Theme (titleAttr)
import UI.Types (ResourceName (..))
surround :: (Text, TWidget) -> DSWidget
surround (title, widget) = do
ht <- (^. height) <$> asks dsState
let t = padBottom (Pad 1) . withAttr titleAttr $ textField title
pure .
padTopBottom 1 .
centerLayer .
border .
padTopBottom 1 .
padLeftRight 4 . vLimit (ht - 9) . hLimit 50 . (t <=>) . viewport RNModal Vertical $
widget
renderModal :: DSWidget
renderModal = do
md <- (^. mode) <$> asks dsState
case md of
Modal Help -> surround =<< help
Modal Detail {} -> surround =<< detail
Modal MoveTo -> surround =<< moveTo
Modal (Due tasks selected) -> surround =<< due tasks selected
_ -> pure emptyWidget