module Matterhorn.Events.ChannelSelect where import Prelude () import Matterhorn.Prelude import Brick ( BrickEvent(VtyEvent) ) import Brick.Keybindings import Brick.Widgets.Edit ( handleEditorEvent ) import qualified Graphics.Vty as Vty import Network.Mattermost.Types ( TeamId ) import Matterhorn.State.Channels import Matterhorn.State.ChannelSelect import Matterhorn.State.Editing ( editingKeybindings ) import Matterhorn.Types import qualified Matterhorn.Zipper as Z onEventChannelSelect :: TeamId -> Vty.Event -> MH () onEventChannelSelect :: TeamId -> Event -> MH () onEventChannelSelect TeamId tId = forall (f :: * -> *) a. Functor f => f a -> f () void forall b c a. (b -> c) -> (a -> b) -> a -> c . [Event -> MH Bool] -> Event -> MH Bool handleEventWith [ (KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH) -> Event -> MH Bool mhHandleKeyboardEvent (TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH channelSelectKeybindings TeamId tId) , \Event e -> do forall (f :: * -> *) a. Functor f => f a -> f () void forall a b. (a -> b) -> a -> b $ [Event -> MH Bool] -> Event -> MH Bool handleEventWith [ (KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH) -> Event -> MH Bool mhHandleKeyboardEvent (Lens' ChatState (Editor Text Name) -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH editingKeybindings (TeamId -> Lens' ChatState TeamState csTeam(TeamId tId)forall b c a. (b -> c) -> (a -> b) -> a -> c .Lens' TeamState ChannelSelectState tsChannelSelectStateforall b c a. (b -> c) -> (a -> b) -> a -> c .Lens' ChannelSelectState (Editor Text Name) channelSelectInput)) , \Event ev -> do forall b e. Lens' ChatState b -> (e -> EventM Name b ()) -> e -> MH () mhZoom (TeamId -> Lens' ChatState TeamState csTeam(TeamId tId)forall b c a. (b -> c) -> (a -> b) -> a -> c .Lens' TeamState ChannelSelectState tsChannelSelectStateforall b c a. (b -> c) -> (a -> b) -> a -> c .Lens' ChannelSelectState (Editor Text Name) channelSelectInput) forall n t e. (Eq n, DecodeUtf8 t, Eq t, GenericTextZipper t) => BrickEvent n e -> EventM n (Editor t n) () handleEditorEvent (forall n e. Event -> BrickEvent n e VtyEvent Event ev) forall (m :: * -> *) a. Monad m => a -> m a return Bool True ] Event e TeamId -> MH () updateChannelSelectMatches TeamId tId forall (m :: * -> *) a. Monad m => a -> m a return Bool True ] channelSelectKeybindings :: TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH channelSelectKeybindings :: TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH channelSelectKeybindings TeamId tId KeyConfig KeyEvent kc = forall k (m :: * -> *). Ord k => KeyConfig k -> [KeyEventHandler k m] -> KeyDispatcher k m unsafeKeyDispatcher KeyConfig KeyEvent kc (TeamId -> [MHKeyEventHandler] channelSelectKeyHandlers TeamId tId) channelSelectKeyHandlers :: TeamId -> [MHKeyEventHandler] channelSelectKeyHandlers :: TeamId -> [MHKeyEventHandler] channelSelectKeyHandlers TeamId tId = [ forall a (m :: * -> *) k. ToBinding a => a -> Text -> m () -> KeyEventHandler k m onKey (forall a. ToBinding a => a -> Binding bind Key Vty.KEnter) Text "Switch to selected channel" forall a b. (a -> b) -> a -> b $ do Zipper ChannelListGroup ChannelSelectMatch matches <- forall s (m :: * -> *) a. MonadState s m => Getting a s a -> m a use (TeamId -> Lens' ChatState TeamState csTeam(TeamId tId)forall b c a. (b -> c) -> (a -> b) -> a -> c .Lens' TeamState ChannelSelectState tsChannelSelectStateforall b c a. (b -> c) -> (a -> b) -> a -> c .Lens' ChannelSelectState (Zipper ChannelListGroup ChannelSelectMatch) channelSelectMatches) case forall a b. Zipper a b -> Maybe b Z.focus Zipper ChannelListGroup ChannelSelectMatch matches of Maybe ChannelSelectMatch Nothing -> forall (m :: * -> *) a. Monad m => a -> m a return () Just ChannelSelectMatch match -> do TeamId -> MH () popMode TeamId tId TeamId -> ChannelId -> MH () setFocus TeamId tId forall a b. (a -> b) -> a -> b $ ChannelListEntry -> ChannelId channelListEntryChannelId forall a b. (a -> b) -> a -> b $ ChannelSelectMatch -> ChannelListEntry matchEntry ChannelSelectMatch match , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent CancelEvent Text "Cancel channel selection" forall a b. (a -> b) -> a -> b $ TeamId -> MH () popMode TeamId tId , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent NextChannelEvent Text "Select next match" forall a b. (a -> b) -> a -> b $ TeamId -> MH () channelSelectNext TeamId tId , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent PrevChannelEvent Text "Select previous match" forall a b. (a -> b) -> a -> b $ TeamId -> MH () channelSelectPrevious TeamId tId , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent NextChannelEventAlternate Text "Select next match (alternate binding)" forall a b. (a -> b) -> a -> b $ TeamId -> MH () channelSelectNext TeamId tId , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent PrevChannelEventAlternate Text "Select previous match (alternate binding)" forall a b. (a -> b) -> a -> b $ TeamId -> MH () channelSelectPrevious TeamId tId ]