module Matterhorn.Events.ShowHelp where

import           Prelude ()
import           Matterhorn.Prelude

import           Brick
import           Brick.Keybindings
import qualified Graphics.Vty as Vty

import           Network.Mattermost.Types ( TeamId )

import           Matterhorn.Constants
import           Matterhorn.Types


onEventShowHelp :: TeamId -> Vty.Event -> MH Bool
onEventShowHelp :: TeamId -> Event -> MH Bool
onEventShowHelp TeamId
tId =
    [Event -> MH Bool] -> Event -> MH Bool
handleEventWith [ (KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH)
-> Event -> MH Bool
mhHandleKeyboardEvent (TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH
helpKeybindings TeamId
tId)
                    , TeamId -> Event -> MH Bool
closeHelp TeamId
tId
                    ]

closeHelp :: TeamId -> Vty.Event -> MH Bool
closeHelp :: TeamId -> Event -> MH Bool
closeHelp TeamId
tId (Vty.EvKey {}) = do
    TeamId -> MH ()
popMode TeamId
tId
    forall (m :: * -> *) a. Monad m => a -> m a
return Bool
True
closeHelp TeamId
_ Event
_ = forall (m :: * -> *) a. Monad m => a -> m a
return Bool
False

helpKeybindings :: TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH
helpKeybindings :: TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH
helpKeybindings TeamId
tId KeyConfig KeyEvent
kc = forall k (m :: * -> *).
Ord k =>
KeyConfig k -> [KeyEventHandler k m] -> KeyDispatcher k m
unsafeKeyDispatcher KeyConfig KeyEvent
kc (TeamId -> [MHKeyEventHandler]
helpKeyHandlers TeamId
tId)

helpKeyHandlers :: TeamId -> [MHKeyEventHandler]
helpKeyHandlers :: TeamId -> [MHKeyEventHandler]
helpKeyHandlers TeamId
tId =
    [ forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
ScrollUpEvent Text
"Scroll up" forall a b. (a -> b) -> a -> b
$
        forall a. EventM Name ChatState a -> MH a
mh forall a b. (a -> b) -> a -> b
$ forall n. ViewportScroll n -> forall s. Int -> EventM n s ()
vScrollBy (forall n. n -> ViewportScroll n
viewportScroll Name
HelpViewport) (-Int
1)
    , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
ScrollDownEvent Text
"Scroll down" forall a b. (a -> b) -> a -> b
$
        forall a. EventM Name ChatState a -> MH a
mh forall a b. (a -> b) -> a -> b
$ forall n. ViewportScroll n -> forall s. Int -> EventM n s ()
vScrollBy (forall n. n -> ViewportScroll n
viewportScroll Name
HelpViewport) Int
1
    , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
PageUpEvent Text
"Page up" forall a b. (a -> b) -> a -> b
$
        forall a. EventM Name ChatState a -> MH a
mh forall a b. (a -> b) -> a -> b
$ forall n. ViewportScroll n -> forall s. Int -> EventM n s ()
vScrollBy (forall n. n -> ViewportScroll n
viewportScroll Name
HelpViewport) (-Int
1 forall a. Num a => a -> a -> a
* Int
pageAmount)
    , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
PageDownEvent Text
"Page down" forall a b. (a -> b) -> a -> b
$
        forall a. EventM Name ChatState a -> MH a
mh forall a b. (a -> b) -> a -> b
$ forall n. ViewportScroll n -> forall s. Int -> EventM n s ()
vScrollBy (forall n. n -> ViewportScroll n
viewportScroll Name
HelpViewport) (Int
1 forall a. Num a => a -> a -> a
* Int
pageAmount)
    , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
CancelEvent Text
"Close the help window" forall a b. (a -> b) -> a -> b
$
        TeamId -> MH ()
popMode TeamId
tId
    , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
ScrollBottomEvent Text
"Scroll to the end of the help" forall a b. (a -> b) -> a -> b
$
        forall a. EventM Name ChatState a -> MH a
mh forall a b. (a -> b) -> a -> b
$ forall n. ViewportScroll n -> forall s. EventM n s ()
vScrollToEnd (forall n. n -> ViewportScroll n
viewportScroll Name
HelpViewport)
    , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
ScrollTopEvent Text
"Scroll to the beginning of the help" forall a b. (a -> b) -> a -> b
$
        forall a. EventM Name ChatState a -> MH a
mh forall a b. (a -> b) -> a -> b
$ forall n. ViewportScroll n -> forall s. EventM n s ()
vScrollToBeginning (forall n. n -> ViewportScroll n
viewportScroll Name
HelpViewport)
    ]