module Matterhorn.Events.ThemeListWindow where

import           Prelude ()
import           Matterhorn.Prelude

import           Brick.Keybindings
import qualified Graphics.Vty as Vty

import           Network.Mattermost.Types ( TeamId )

import           Matterhorn.State.ThemeListWindow
import           Matterhorn.State.ListWindow
import           Matterhorn.Types


onEventThemeListWindow :: TeamId -> Vty.Event -> MH ()
onEventThemeListWindow :: TeamId -> Event -> MH ()
onEventThemeListWindow TeamId
tId =
    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 (ListWindowState InternalTheme ())
-> (KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH)
-> Event
-> MH Bool
forall a b.
Lens' ChatState (ListWindowState a b)
-> (KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH)
-> Event
-> MH Bool
onEventListWindow (TeamId -> Lens' ChatState TeamState
csTeam(TeamId
tId)((TeamState -> f TeamState) -> ChatState -> f ChatState)
-> ((ListWindowState InternalTheme ()
     -> f (ListWindowState InternalTheme ()))
    -> TeamState -> f TeamState)
-> (ListWindowState InternalTheme ()
    -> f (ListWindowState InternalTheme ()))
-> ChatState
-> f ChatState
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(ListWindowState InternalTheme ()
 -> f (ListWindowState InternalTheme ()))
-> TeamState -> f TeamState
Lens' TeamState (ListWindowState InternalTheme ())
tsThemeListWindow)
        (TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH
themeListWindowKeybindings TeamId
tId)

-- | The keybindings we want to use while viewing a user list window
themeListWindowKeybindings :: TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH
themeListWindowKeybindings :: TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH
themeListWindowKeybindings TeamId
tId KeyConfig KeyEvent
kc = KeyConfig KeyEvent
-> [KeyEventHandler KeyEvent MH] -> KeyDispatcher KeyEvent MH
forall k (m :: * -> *).
Ord k =>
KeyConfig k -> [KeyEventHandler k m] -> KeyDispatcher k m
unsafeKeyDispatcher KeyConfig KeyEvent
kc (TeamId -> [KeyEventHandler KeyEvent MH]
themeListWindowKeyHandlers TeamId
tId)

themeListWindowKeyHandlers :: TeamId -> [MHKeyEventHandler]
themeListWindowKeyHandlers :: TeamId -> [KeyEventHandler KeyEvent MH]
themeListWindowKeyHandlers TeamId
tId =
    [ KeyEvent -> Text -> MH () -> KeyEventHandler KeyEvent MH
forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
CancelEvent Text
"Close the theme list"
      (TeamId
-> Lens' ChatState (ListWindowState InternalTheme ()) -> MH ()
forall a b.
TeamId -> Lens' ChatState (ListWindowState a b) -> MH ()
exitListWindow TeamId
tId (TeamId -> Lens' ChatState TeamState
csTeam(TeamId
tId)((TeamState -> f TeamState) -> ChatState -> f ChatState)
-> ((ListWindowState InternalTheme ()
     -> f (ListWindowState InternalTheme ()))
    -> TeamState -> f TeamState)
-> (ListWindowState InternalTheme ()
    -> f (ListWindowState InternalTheme ()))
-> ChatState
-> f ChatState
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(ListWindowState InternalTheme ()
 -> f (ListWindowState InternalTheme ()))
-> TeamState -> f TeamState
Lens' TeamState (ListWindowState InternalTheme ())
tsThemeListWindow))
    , KeyEvent -> Text -> MH () -> KeyEventHandler KeyEvent MH
forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
SearchSelectUpEvent Text
"Select the previous theme" (MH () -> KeyEventHandler KeyEvent MH)
-> MH () -> KeyEventHandler KeyEvent MH
forall a b. (a -> b) -> a -> b
$
      TeamId -> MH ()
themeListSelectUp TeamId
tId
    , KeyEvent -> Text -> MH () -> KeyEventHandler KeyEvent MH
forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
SearchSelectDownEvent Text
"Select the next theme" (MH () -> KeyEventHandler KeyEvent MH)
-> MH () -> KeyEventHandler KeyEvent MH
forall a b. (a -> b) -> a -> b
$
      TeamId -> MH ()
themeListSelectDown TeamId
tId
    , KeyEvent -> Text -> MH () -> KeyEventHandler KeyEvent MH
forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
PageDownEvent Text
"Page down in the theme list" (MH () -> KeyEventHandler KeyEvent MH)
-> MH () -> KeyEventHandler KeyEvent MH
forall a b. (a -> b) -> a -> b
$
      TeamId -> MH ()
themeListPageDown TeamId
tId
    , KeyEvent -> Text -> MH () -> KeyEventHandler KeyEvent MH
forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
PageUpEvent Text
"Page up in the theme list" (MH () -> KeyEventHandler KeyEvent MH)
-> MH () -> KeyEventHandler KeyEvent MH
forall a b. (a -> b) -> a -> b
$
      TeamId -> MH ()
themeListPageUp TeamId
tId
    , KeyEvent -> Text -> MH () -> KeyEventHandler KeyEvent MH
forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
ActivateListItemEvent Text
"Switch to the selected color theme"
      (TeamId
-> Lens' ChatState (ListWindowState InternalTheme ()) -> MH ()
forall a b.
TeamId -> Lens' ChatState (ListWindowState a b) -> MH ()
listWindowActivateCurrent TeamId
tId (TeamId -> Lens' ChatState TeamState
csTeam(TeamId
tId)((TeamState -> f TeamState) -> ChatState -> f ChatState)
-> ((ListWindowState InternalTheme ()
     -> f (ListWindowState InternalTheme ()))
    -> TeamState -> f TeamState)
-> (ListWindowState InternalTheme ()
    -> f (ListWindowState InternalTheme ()))
-> ChatState
-> f ChatState
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(ListWindowState InternalTheme ()
 -> f (ListWindowState InternalTheme ()))
-> TeamState -> f TeamState
Lens' TeamState (ListWindowState InternalTheme ())
tsThemeListWindow))
    ]