{-# LANGUAGE TemplateHaskell #-} {-| Module : AppTypes Description : Contains the types related to our Brick application -} module AppTypes where import JSONTypes import Lens.Micro.TH import Brick.Widgets.Edit (Editor(..)) import qualified Data.Text as T -- | Contains the different elements which we -- might want brick to be able to identify data Ident = Listing | Input | ListItem Int deriving (Eq, Ord, Show) -- | Used to distiguish what set of -- widgets should currently be rendered. data Mode = Search | Browse | Message deriving (Eq, Ord, Show) -- | Used for scrolling data ScrollDirection = Up | Down deriving (Eq, Show) -- | The state of our app data AppS = AppS { _appMode :: Mode -- ^ The current mode of the app , _appCursor :: Int -- ^ The selected into the listing , _appExpanded :: Bool -- ^ If the currently selected listing is expanded , _appPage :: Int -- ^ The page currently being viewed , _appListing :: JSONListMovies -- ^ The movies being browsed , _appDetails :: Maybe JSONMovie -- ^ The movie being focused , _appMessage :: Maybe String -- ^ The message to be shown in message mode , _appContinue :: Bool -- ^ If to continue after showing message , _appEditor :: Editor T.Text Ident -- ^ The state for the editor widget } deriving (Show) makeLenses ''AppS