packages feed

matterhorn-50200.18.0: src/Matterhorn/Events/ReactionEmojiListWindow.hs

module Matterhorn.Events.ReactionEmojiListWindow
  ( onEventReactionEmojiListWindow
  , reactionEmojiListWindowKeybindings
  , reactionEmojiListWindowKeyHandlers
  )
where

import           Prelude ()
import           Matterhorn.Prelude

import           Brick.Keybindings
import qualified Graphics.Vty as Vty

import           Network.Mattermost.Types ( TeamId )

import           Matterhorn.State.ReactionEmojiListWindow
import           Matterhorn.State.ListWindow
import           Matterhorn.Types


onEventReactionEmojiListWindow :: TeamId -> Vty.Event -> MH ()
onEventReactionEmojiListWindow tId =
    void . onEventListWindow (csTeam(tId).tsReactionEmojiListWindow)
           (reactionEmojiListWindowKeybindings tId)

-- | The keybindings we want to use while viewing an emoji list window
reactionEmojiListWindowKeybindings :: TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH
reactionEmojiListWindowKeybindings tId kc = unsafeKeyDispatcher kc (reactionEmojiListWindowKeyHandlers tId)

reactionEmojiListWindowKeyHandlers :: TeamId -> [MHKeyEventHandler]
reactionEmojiListWindowKeyHandlers tId =
    [ onEvent CancelEvent "Close the emoji search window"
      (exitListWindow tId (csTeam(tId).tsReactionEmojiListWindow))
    , onEvent SearchSelectUpEvent "Select the previous emoji" $
      reactionEmojiListSelectUp tId
    , onEvent SearchSelectDownEvent "Select the next emoji" $
      reactionEmojiListSelectDown tId
    , onEvent PageDownEvent "Page down in the emoji list" $
      reactionEmojiListPageDown tId
    , onEvent PageUpEvent "Page up in the emoji list" $
      reactionEmojiListPageUp tId
    , onEvent ActivateListItemEvent "Post the selected emoji reaction"
      (listWindowActivateCurrent tId (csTeam(tId).tsReactionEmojiListWindow))
    ]