packages feed

monomer-1.1.0.0: examples/todo/TodoTypes.hs

{-|
Module      : TodoTypes
Copyright   : (c) 2018 Francisco Vallarino
License     : BSD-3-Clause (see the LICENSE file)
Maintainer  : fjvallarino@gmail.com
Stability   : experimental
Portability : non-portable

Types for the 'Todo' example.
-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}

module TodoTypes where

import Control.Lens.TH
import Data.Default
import Data.Text (Text)

import Monomer

data TodoType
  = Home
  | Work
  | Sports
  deriving (Eq, Show, Enum)

data TodoStatus
  = Pending
  | Done
  deriving (Eq, Show, Enum)

data Todo = Todo {
  _todoId :: Int,
  _todoType :: TodoType,
  _status :: TodoStatus,
  _description :: Text
} deriving (Eq, Show)

instance Default Todo where
  def = Todo {
    _todoId = 0,
    _todoType = Home,
    _status = Pending,
    _description = ""
  }

data TodoAction
  = TodoNone
  | TodoAdding
  | TodoEditing Int
  deriving (Eq, Show)

data TodoModel = TodoModel {
  _todos :: [Todo],
  _activeTodo :: Todo,
  _action :: TodoAction
} deriving (Eq, Show)

data TodoEvt
  = TodoInit
  | TodoNew
  | TodoAdd
  | TodoEdit Int Todo
  | TodoSave Int
  | TodoDeleteBegin Int Todo
  | TodoDelete Int Todo
  | TodoShowEdit
  | TodoHideEdit
  | TodoHideEditDone
  | TodoCancel
  deriving (Eq, Show)

makeLenses 'TodoModel
makeLenses 'Todo

todoTypes :: [TodoType]
todoTypes = enumFrom (toEnum 0)

todoStatuses :: [TodoStatus]
todoStatuses = enumFrom (toEnum 0)