module Matterhorn.Events.ChannelSelect where import Prelude () import Matterhorn.Prelude import Brick.Widgets.Edit ( handleEditorEvent ) import qualified Graphics.Vty as Vty import Network.Mattermost.Types ( TeamId ) import Matterhorn.Events.Keybindings 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 = 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 . [Event -> MH Bool] -> Event -> MH Bool handleEventWith [ (KeyConfig -> KeyHandlerMap) -> Event -> MH Bool handleKeyboardEvent (TeamId -> KeyConfig -> KeyHandlerMap channelSelectKeybindings TeamId tId) , \Event e -> do MH Bool -> MH () forall (f :: * -> *) a. Functor f => f a -> f () void (MH Bool -> MH ()) -> MH Bool -> MH () forall a b. (a -> b) -> a -> b $ [Event -> MH Bool] -> Event -> MH Bool handleEventWith [ (KeyConfig -> KeyHandlerMap) -> Event -> MH Bool handleKeyboardEvent (Lens' ChatState (Editor Text Name) -> KeyConfig -> KeyHandlerMap editingKeybindings (TeamId -> Lens' ChatState TeamState csTeam(TeamId tId)((TeamState -> f TeamState) -> ChatState -> f ChatState) -> ((Editor Text Name -> f (Editor Text Name)) -> TeamState -> f TeamState) -> (Editor Text Name -> f (Editor Text Name)) -> ChatState -> f ChatState forall b c a. (b -> c) -> (a -> b) -> a -> c .(ChannelSelectState -> f ChannelSelectState) -> TeamState -> f TeamState Lens' TeamState ChannelSelectState tsChannelSelectState((ChannelSelectState -> f ChannelSelectState) -> TeamState -> f TeamState) -> ((Editor Text Name -> f (Editor Text Name)) -> ChannelSelectState -> f ChannelSelectState) -> (Editor Text Name -> f (Editor Text Name)) -> TeamState -> f TeamState forall b c a. (b -> c) -> (a -> b) -> a -> c .(Editor Text Name -> f (Editor Text Name)) -> ChannelSelectState -> f ChannelSelectState Lens' ChannelSelectState (Editor Text Name) channelSelectInput)) , \Event ev -> do Lens' ChatState (Editor Text Name) -> (Event -> Editor Text Name -> EventM Name (Editor Text Name)) -> Event -> MH () forall b e. Lens' ChatState b -> (e -> b -> EventM Name b) -> e -> MH () mhHandleEventLensed (TeamId -> Lens' ChatState TeamState csTeam(TeamId tId)((TeamState -> f TeamState) -> ChatState -> f ChatState) -> ((Editor Text Name -> f (Editor Text Name)) -> TeamState -> f TeamState) -> (Editor Text Name -> f (Editor Text Name)) -> ChatState -> f ChatState forall b c a. (b -> c) -> (a -> b) -> a -> c .(ChannelSelectState -> f ChannelSelectState) -> TeamState -> f TeamState Lens' TeamState ChannelSelectState tsChannelSelectState((ChannelSelectState -> f ChannelSelectState) -> TeamState -> f TeamState) -> ((Editor Text Name -> f (Editor Text Name)) -> ChannelSelectState -> f ChannelSelectState) -> (Editor Text Name -> f (Editor Text Name)) -> TeamState -> f TeamState forall b c a. (b -> c) -> (a -> b) -> a -> c .(Editor Text Name -> f (Editor Text Name)) -> ChannelSelectState -> f ChannelSelectState Lens' ChannelSelectState (Editor Text Name) channelSelectInput) Event -> Editor Text Name -> EventM Name (Editor Text Name) forall t n. (DecodeUtf8 t, Eq t, GenericTextZipper t) => Event -> Editor t n -> EventM n (Editor t n) handleEditorEvent Event ev Bool -> MH Bool forall (m :: * -> *) a. Monad m => a -> m a return Bool True ] Event e TeamId -> MH () updateChannelSelectMatches TeamId tId Bool -> MH Bool forall (m :: * -> *) a. Monad m => a -> m a return Bool True ] channelSelectKeybindings :: TeamId -> KeyConfig -> KeyHandlerMap channelSelectKeybindings :: TeamId -> KeyConfig -> KeyHandlerMap channelSelectKeybindings TeamId tId = [KeyEventHandler] -> KeyConfig -> KeyHandlerMap mkKeybindings (TeamId -> [KeyEventHandler] channelSelectKeyHandlers TeamId tId) channelSelectKeyHandlers :: TeamId -> [KeyEventHandler] channelSelectKeyHandlers :: TeamId -> [KeyEventHandler] channelSelectKeyHandlers TeamId tId = [ Text -> Event -> MH () -> KeyEventHandler staticKb Text "Switch to selected channel" (Key -> [Modifier] -> Event Vty.EvKey Key Vty.KEnter []) (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler forall a b. (a -> b) -> a -> b $ do Zipper ChannelListGroup ChannelSelectMatch matches <- Getting (Zipper ChannelListGroup ChannelSelectMatch) ChatState (Zipper ChannelListGroup ChannelSelectMatch) -> MH (Zipper ChannelListGroup ChannelSelectMatch) forall s (m :: * -> *) a. MonadState s m => Getting a s a -> m a use (TeamId -> Lens' ChatState TeamState csTeam(TeamId tId)((TeamState -> Const (Zipper ChannelListGroup ChannelSelectMatch) TeamState) -> ChatState -> Const (Zipper ChannelListGroup ChannelSelectMatch) ChatState) -> ((Zipper ChannelListGroup ChannelSelectMatch -> Const (Zipper ChannelListGroup ChannelSelectMatch) (Zipper ChannelListGroup ChannelSelectMatch)) -> TeamState -> Const (Zipper ChannelListGroup ChannelSelectMatch) TeamState) -> Getting (Zipper ChannelListGroup ChannelSelectMatch) ChatState (Zipper ChannelListGroup ChannelSelectMatch) forall b c a. (b -> c) -> (a -> b) -> a -> c .(ChannelSelectState -> Const (Zipper ChannelListGroup ChannelSelectMatch) ChannelSelectState) -> TeamState -> Const (Zipper ChannelListGroup ChannelSelectMatch) TeamState Lens' TeamState ChannelSelectState tsChannelSelectState((ChannelSelectState -> Const (Zipper ChannelListGroup ChannelSelectMatch) ChannelSelectState) -> TeamState -> Const (Zipper ChannelListGroup ChannelSelectMatch) TeamState) -> ((Zipper ChannelListGroup ChannelSelectMatch -> Const (Zipper ChannelListGroup ChannelSelectMatch) (Zipper ChannelListGroup ChannelSelectMatch)) -> ChannelSelectState -> Const (Zipper ChannelListGroup ChannelSelectMatch) ChannelSelectState) -> (Zipper ChannelListGroup ChannelSelectMatch -> Const (Zipper ChannelListGroup ChannelSelectMatch) (Zipper ChannelListGroup ChannelSelectMatch)) -> TeamState -> Const (Zipper ChannelListGroup ChannelSelectMatch) TeamState forall b c a. (b -> c) -> (a -> b) -> a -> c .(Zipper ChannelListGroup ChannelSelectMatch -> Const (Zipper ChannelListGroup ChannelSelectMatch) (Zipper ChannelListGroup ChannelSelectMatch)) -> ChannelSelectState -> Const (Zipper ChannelListGroup ChannelSelectMatch) ChannelSelectState Lens' ChannelSelectState (Zipper ChannelListGroup ChannelSelectMatch) channelSelectMatches) case Zipper ChannelListGroup ChannelSelectMatch -> Maybe ChannelSelectMatch forall a b. Zipper a b -> Maybe b Z.focus Zipper ChannelListGroup ChannelSelectMatch matches of Maybe ChannelSelectMatch Nothing -> () -> MH () forall (m :: * -> *) a. Monad m => a -> m a return () Just ChannelSelectMatch match -> do TeamId -> MH () popMode TeamId tId TeamId -> ChannelId -> MH () setFocus TeamId tId (ChannelId -> MH ()) -> ChannelId -> MH () forall a b. (a -> b) -> a -> b $ ChannelListEntry -> ChannelId channelListEntryChannelId (ChannelListEntry -> ChannelId) -> ChannelListEntry -> ChannelId forall a b. (a -> b) -> a -> b $ ChannelSelectMatch -> ChannelListEntry matchEntry ChannelSelectMatch match , KeyEvent -> Text -> MH () -> KeyEventHandler mkKb KeyEvent CancelEvent Text "Cancel channel selection" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler forall a b. (a -> b) -> a -> b $ TeamId -> MH () popMode TeamId tId , KeyEvent -> Text -> MH () -> KeyEventHandler mkKb KeyEvent NextChannelEvent Text "Select next match" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler forall a b. (a -> b) -> a -> b $ TeamId -> MH () channelSelectNext TeamId tId , KeyEvent -> Text -> MH () -> KeyEventHandler mkKb KeyEvent PrevChannelEvent Text "Select previous match" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler forall a b. (a -> b) -> a -> b $ TeamId -> MH () channelSelectPrevious TeamId tId , KeyEvent -> Text -> MH () -> KeyEventHandler mkKb KeyEvent NextChannelEventAlternate Text "Select next match (alternate binding)" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler forall a b. (a -> b) -> a -> b $ TeamId -> MH () channelSelectNext TeamId tId , KeyEvent -> Text -> MH () -> KeyEventHandler mkKb KeyEvent PrevChannelEventAlternate Text "Select previous match (alternate binding)" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler forall a b. (a -> b) -> a -> b $ TeamId -> MH () channelSelectPrevious TeamId tId ]