taskell-1.9.3.0: src/Taskell/UI/Draw/Modal/Due.hs
module Taskell.UI.Draw.Modal.Due
( due
) where
import ClassyPrelude
import Brick
import Taskell.Data.Seq ((<#>))
import qualified Taskell.Data.Task as T (Task)
import Taskell.Types (Pointer)
import Taskell.UI.Draw.Task (TaskWidget (..), parts)
import Taskell.UI.Draw.Types (DSWidget, ModalWidget)
import Taskell.UI.Theme (taskAttr, taskCurrentAttr)
import Taskell.UI.Types (ResourceName (RNDue))
renderTask :: Int -> Int -> T.Task -> DSWidget
renderTask current position task = do
(TaskWidget text date _ _) <- parts task
let selected = current == position
let attr =
if selected
then taskCurrentAttr
else taskAttr
let shw =
if selected
then visible
else id
pure . shw . cached (RNDue position) . padBottom (Pad 1) . withAttr attr $ vBox [date, text]
due :: Seq (Pointer, T.Task) -> Int -> ModalWidget
due tasks selected = do
let items = snd <$> tasks
widgets <- sequence $ renderTask selected <#> items
pure
( "Due Tasks"
, if null items
then txt "No due tasks"
else vBox $ toList widgets)