module Matterhorn.Events.UserListOverlay where

import           Prelude ()
import           Matterhorn.Prelude

import qualified Graphics.Vty as Vty

import           Matterhorn.Events.Keybindings
import           Matterhorn.State.UserListOverlay
import           Matterhorn.State.ListOverlay
import           Matterhorn.Types


onEventUserListOverlay :: Vty.Event -> MH ()
onEventUserListOverlay :: Event -> MH ()
onEventUserListOverlay =
    MH Bool -> MH ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (MH Bool -> MH ()) -> (Event -> MH Bool) -> Event -> MH ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Lens' ChatState (ListOverlayState UserInfo UserSearchScope)
-> (KeyConfig -> KeyHandlerMap) -> Event -> MH Bool
forall a b.
Lens' ChatState (ListOverlayState a b)
-> (KeyConfig -> KeyHandlerMap) -> Event -> MH Bool
onEventListOverlay ((TeamState -> f TeamState) -> ChatState -> f ChatState
Lens' ChatState TeamState
csCurrentTeam((TeamState -> f TeamState) -> ChatState -> f ChatState)
-> ((ListOverlayState UserInfo UserSearchScope
     -> f (ListOverlayState UserInfo UserSearchScope))
    -> TeamState -> f TeamState)
-> (ListOverlayState UserInfo UserSearchScope
    -> f (ListOverlayState UserInfo UserSearchScope))
-> ChatState
-> f ChatState
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(ListOverlayState UserInfo UserSearchScope
 -> f (ListOverlayState UserInfo UserSearchScope))
-> TeamState -> f TeamState
Lens' TeamState (ListOverlayState UserInfo UserSearchScope)
tsUserListOverlay) KeyConfig -> KeyHandlerMap
userListOverlayKeybindings

-- | The keybindings we want to use while viewing a user list overlay
userListOverlayKeybindings :: KeyConfig -> KeyHandlerMap
userListOverlayKeybindings :: KeyConfig -> KeyHandlerMap
userListOverlayKeybindings = [KeyEventHandler] -> KeyConfig -> KeyHandlerMap
mkKeybindings [KeyEventHandler]
userListOverlayKeyHandlers

userListOverlayKeyHandlers :: [KeyEventHandler]
userListOverlayKeyHandlers :: [KeyEventHandler]
userListOverlayKeyHandlers =
    [ KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
CancelEvent Text
"Close the user search list" (Lens' ChatState (ListOverlayState UserInfo UserSearchScope)
-> MH ()
forall a b. Lens' ChatState (ListOverlayState a b) -> MH ()
exitListOverlay ((TeamState -> f TeamState) -> ChatState -> f ChatState
Lens' ChatState TeamState
csCurrentTeam((TeamState -> f TeamState) -> ChatState -> f ChatState)
-> ((ListOverlayState UserInfo UserSearchScope
     -> f (ListOverlayState UserInfo UserSearchScope))
    -> TeamState -> f TeamState)
-> (ListOverlayState UserInfo UserSearchScope
    -> f (ListOverlayState UserInfo UserSearchScope))
-> ChatState
-> f ChatState
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(ListOverlayState UserInfo UserSearchScope
 -> f (ListOverlayState UserInfo UserSearchScope))
-> TeamState -> f TeamState
Lens' TeamState (ListOverlayState UserInfo UserSearchScope)
tsUserListOverlay))
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
SearchSelectUpEvent Text
"Select the previous user" MH ()
userListSelectUp
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
SearchSelectDownEvent Text
"Select the next user" MH ()
userListSelectDown
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
PageDownEvent Text
"Page down in the user list" MH ()
userListPageDown
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
PageUpEvent Text
"Page up in the user list" MH ()
userListPageUp
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
ActivateListItemEvent Text
"Interact with the selected user" (Lens' ChatState (ListOverlayState UserInfo UserSearchScope)
-> MH ()
forall a b. Lens' ChatState (ListOverlayState a b) -> MH ()
listOverlayActivateCurrent ((TeamState -> f TeamState) -> ChatState -> f ChatState
Lens' ChatState TeamState
csCurrentTeam((TeamState -> f TeamState) -> ChatState -> f ChatState)
-> ((ListOverlayState UserInfo UserSearchScope
     -> f (ListOverlayState UserInfo UserSearchScope))
    -> TeamState -> f TeamState)
-> (ListOverlayState UserInfo UserSearchScope
    -> f (ListOverlayState UserInfo UserSearchScope))
-> ChatState
-> f ChatState
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(ListOverlayState UserInfo UserSearchScope
 -> f (ListOverlayState UserInfo UserSearchScope))
-> TeamState -> f TeamState
Lens' TeamState (ListOverlayState UserInfo UserSearchScope)
tsUserListOverlay))
    ]