From bac127e82c3e86691b2ddb36f57850eb5fe22fc8 Mon Sep 17 00:00:00 2001 From: Joscha Date: Tue, 23 Oct 2018 16:23:19 +0000 Subject: [PATCH] Add missing dates to tasks --- src/TaskMachine/UI/Behaviors.hs | 21 ++++++++++++++++++++- src/TaskMachine/UI/TaskList.hs | 13 +++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/TaskMachine/UI/Behaviors.hs b/src/TaskMachine/UI/Behaviors.hs index 2f685c2..ea7b0c6 100644 --- a/src/TaskMachine/UI/Behaviors.hs +++ b/src/TaskMachine/UI/Behaviors.hs @@ -14,6 +14,7 @@ module TaskMachine.UI.Behaviors , actionDelete , actionEditNew , actionEditSelected + , actionToggleCompletion , actionSortTasks , actionFinishEdit ) where @@ -136,11 +137,29 @@ actionToggleCompletion s = actionSortTasks :: Action actionSortTasks s = pure s{tasks=sortTaskList (tasks s)} +-- cleaning up tasks + +cleanUpTask :: Day -> Task -> Task +cleanUpTask today (Task (Complete Nothing) p d Nothing desc) = + Task (Complete (Just today)) p d (Just today) desc +cleanUpTask today (Task (Complete Nothing) p d c desc) = + Task (Complete (Just today)) p d c desc +cleanUpTask today (Task c p d Nothing desc) = + Task c p d (Just today) desc +cleanUpTask _ t = t + +actionCleanUp :: Action +actionCleanUp s = do + today <- liftIO getCurrentDay + let tasks' = modifyAllTasks (cleanUpTask today) (tasks s) + pure s{tasks=tasks'} + -- combining all of the above... taskListBehavior :: Behavior -- Clean up: Add todays date where creation/completion date is missing ---taskListBehavior s (VTY.EvKey (VTY.KChar 'c') []) = undefined s +taskListBehavior s (VTY.EvKey (VTY.KChar 'c') []) = + actionCleanUp >=> actionSave >=> B.continue $ s -- Delete currently selected task (implicit save) taskListBehavior s (VTY.EvKey (VTY.KChar 'd') []) = actionDelete >=> actionSave >=> B.continue $ s diff --git a/src/TaskMachine/UI/TaskList.hs b/src/TaskMachine/UI/TaskList.hs index 7966082..4e7e6f8 100644 --- a/src/TaskMachine/UI/TaskList.hs +++ b/src/TaskMachine/UI/TaskList.hs @@ -9,6 +9,7 @@ module TaskMachine.UI.TaskList , appendTask , replaceTask , deleteTask + , modifyAllTasks ) where import Data.Function @@ -58,10 +59,11 @@ updateTaskList event (TaskList list) = sortTaskList :: TaskList n -> TaskList n sortTaskList (TaskList list) = - let tasks = V.toList $ B.listElements list + let index = B.listSelected list + tasks = V.toList $ B.listElements list sortedTasks = sortBy (compareTasks `on` toTask) tasks newVector = V.fromList sortedTasks - in TaskList $ B.listReplace newVector Nothing list + in TaskList $ B.listReplace newVector index list selectedTask :: TaskList n -> Maybe Task selectedTask (TaskList list) = toTask . snd <$> B.listSelectedElement list @@ -89,6 +91,13 @@ deleteTask tl@(TaskList list) = | index == 0 -> TaskList $ B.listRemove index list | otherwise -> TaskList $ B.listMoveBy 1 $ B.listRemove index list +modifyAllTasks :: (Task -> Task) -> TaskList n -> TaskList n +modifyAllTasks f (TaskList list) = + let index = B.listSelected list + vector = B.listElements list + vector' = V.map (modifyLTask f) vector + in TaskList $ B.listReplace vector' index list + {- helper functions -} listSize :: B.List n e -> Int