- >>= \n.upd (\is.[n:is]) ideas
-
-viewList = (enterChoiceWithShared "Idea collection" [] ideas)
- >&^ viewSharedInformation "Selected idea" []
+ >>= \n.upd (\is.is ++ [{n & number=length is}]) ideas
+
+likeIdea :: Idea [Idea] -> [Idea]
+likeIdea i x = let (ind, y) = removeIndex i x in
+ insertAt ind {i & likes=i.likes+1} y
+
+deleteIdea :: Idea [Idea] -> [Idea]
+deleteIdea i x = let (ind, y) = removeIndex i x in
+ let (b, g) = splitAt ind y in b ++ (map (\z.{z & number=z.number-1}) g)
+
+viewList :: Name -> Task [Idea]
+viewList name = (enterChoiceWithShared "Idea collection" [] ideas)
+ >&^ viewSharedInformation "Selected idea" []
+ >>* [OnAction ActionOk (hasValue (\_.get ideas)),
+ OnAction (Action "Delete All" [ActionIcon "delete"])
+ (always (upd (\_.[]) ideas)),
+ OnAction ActionDelete (hasValue (\v.upd (deleteIdea v) ideas)),
+ OnAction (Action "Like" [])
+ (ifValue (\x=:{user}.user <> name) (\v.upd (likeIdea v) ideas))]