matterhorn-50200.16.0: src/Matterhorn/Events/MessageSelect.hs
module Matterhorn.Events.MessageSelect
( messageSelectKeybindings
, messageSelectKeyHandlers
, onEventMessageSelect
, onEventMessageSelectDeleteConfirm
)
where
import Prelude ()
import Matterhorn.Prelude
import qualified Data.Text as T
import qualified Graphics.Vty as Vty
import Network.Mattermost.Types ( TeamId )
import Matterhorn.Events.Keybindings
import Matterhorn.State.MessageSelect
import Matterhorn.State.ReactionEmojiListOverlay
import Matterhorn.Types
messagesPerPageOperation :: Int
messagesPerPageOperation = 10
onEventMessageSelect :: TeamId -> Vty.Event -> MH ()
onEventMessageSelect tId =
void . handleKeyboardEvent (messageSelectKeybindings tId) (const $ return ())
onEventMessageSelectDeleteConfirm :: TeamId -> Vty.Event -> MH ()
onEventMessageSelectDeleteConfirm tId (Vty.EvKey (Vty.KChar 'y') []) = do
deleteSelectedMessage tId
setMode tId Main
onEventMessageSelectDeleteConfirm tId _ = do
setMode tId Main
messageSelectKeybindings :: TeamId -> KeyConfig -> KeyHandlerMap
messageSelectKeybindings tId = mkKeybindings (messageSelectKeyHandlers tId)
messageSelectKeyHandlers :: TeamId -> [KeyEventHandler]
messageSelectKeyHandlers tId =
[ mkKb CancelEvent "Cancel message selection" $ do
setMode tId Main
, mkKb SelectUpEvent "Select the previous message" $ messageSelectUp tId
, mkKb SelectDownEvent "Select the next message" $ messageSelectDown tId
, mkKb ScrollTopEvent "Scroll to top and select the oldest message" $
messageSelectFirst tId
, mkKb ScrollBottomEvent "Scroll to bottom and select the latest message" $
messageSelectLast tId
, mkKb
PageUpEvent
(T.pack $ "Move the cursor up by " <> show messagesPerPageOperation <> " messages")
(messageSelectUpBy tId messagesPerPageOperation)
, mkKb
PageDownEvent
(T.pack $ "Move the cursor down by " <> show messagesPerPageOperation <> " messages")
(messageSelectDownBy tId messagesPerPageOperation)
, mkKb OpenMessageURLEvent "Open all URLs in the selected message" $
openSelectedMessageURLs tId
, mkKb ReplyMessageEvent "Begin composing a reply to the selected message" $
beginReplyCompose tId
, mkKb EditMessageEvent "Begin editing the selected message" $
beginEditMessage tId
, mkKb DeleteMessageEvent "Delete the selected message (with confirmation)" $
beginConfirmDeleteSelectedMessage tId
, mkKb YankMessageEvent "Copy a verbatim section or message to the clipboard" $
yankSelectedMessageVerbatim tId
, mkKb YankWholeMessageEvent "Copy an entire message to the clipboard" $
yankSelectedMessage tId
, mkKb PinMessageEvent "Toggle whether the selected message is pinned" $
pinSelectedMessage tId
, mkKb FlagMessageEvent "Flag the selected message" $
flagSelectedMessage tId
, mkKb ViewMessageEvent "View the selected message" $
viewSelectedMessage tId
, mkKb FillGapEvent "Fetch messages for the selected gap" $
fillSelectedGap tId
, mkKb ReactToMessageEvent "Post a reaction to the selected message" $
enterReactionEmojiListOverlayMode tId
, mkKb CopyPostLinkEvent "Copy a post's link to the clipboard" $
copyPostLink tId
]