module Matterhorn.Events.EditNotifyPrefs ( onEventEditNotifyPrefs , editNotifyPrefsKeybindings , editNotifyPrefsKeyHandlers , handleEditNotifyPrefsEvent ) where import Prelude () import Matterhorn.Prelude import Brick import Brick.Keybindings import Brick.Forms (handleFormEvent, formState) import Data.Maybe (fromJust) import qualified Graphics.Vty as V import qualified Network.Mattermost.Endpoints as MM import Network.Mattermost.Types ( TeamId ) import Lens.Micro.Platform (_Just, singular) import Matterhorn.Types import Matterhorn.State.NotifyPrefs import Matterhorn.State.Async onEventEditNotifyPrefs :: TeamId -> V.Event -> MH Bool onEventEditNotifyPrefs :: TeamId -> Event -> MH Bool onEventEditNotifyPrefs TeamId tId = [Event -> MH Bool] -> Event -> MH Bool handleEventWith [ (KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH) -> Event -> MH Bool mhHandleKeyboardEvent (TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH editNotifyPrefsKeybindings TeamId tId) , TeamId -> BrickEvent Name MHEvent -> MH Bool handleEditNotifyPrefsEvent TeamId tId (BrickEvent Name MHEvent -> MH Bool) -> (Event -> BrickEvent Name MHEvent) -> Event -> MH Bool forall b c a. (b -> c) -> (a -> b) -> a -> c . Event -> BrickEvent Name MHEvent forall n e. Event -> BrickEvent n e VtyEvent ] handleEditNotifyPrefsEvent :: TeamId -> BrickEvent Name MHEvent -> MH Bool handleEditNotifyPrefsEvent :: TeamId -> BrickEvent Name MHEvent -> MH Bool handleEditNotifyPrefsEvent TeamId tId BrickEvent Name MHEvent e = do Lens' ChatState (Form ChannelNotifyProps MHEvent Name) -> (BrickEvent Name MHEvent -> EventM Name (Form ChannelNotifyProps MHEvent Name) ()) -> BrickEvent Name MHEvent -> MH () forall b e. Lens' ChatState b -> (e -> EventM Name b ()) -> e -> MH () mhZoom (TeamId -> Lens' ChatState TeamState csTeam(TeamId tId)((TeamState -> f TeamState) -> ChatState -> f ChatState) -> ((Form ChannelNotifyProps MHEvent Name -> f (Form ChannelNotifyProps MHEvent Name)) -> TeamState -> f TeamState) -> (Form ChannelNotifyProps MHEvent Name -> f (Form ChannelNotifyProps MHEvent Name)) -> ChatState -> f ChatState forall b c a. (b -> c) -> (a -> b) -> a -> c .(Maybe (Form ChannelNotifyProps MHEvent Name) -> f (Maybe (Form ChannelNotifyProps MHEvent Name))) -> TeamState -> f TeamState Lens' TeamState (Maybe (Form ChannelNotifyProps MHEvent Name)) tsNotifyPrefs((Maybe (Form ChannelNotifyProps MHEvent Name) -> f (Maybe (Form ChannelNotifyProps MHEvent Name))) -> TeamState -> f TeamState) -> ((Form ChannelNotifyProps MHEvent Name -> f (Form ChannelNotifyProps MHEvent Name)) -> Maybe (Form ChannelNotifyProps MHEvent Name) -> f (Maybe (Form ChannelNotifyProps MHEvent Name))) -> (Form ChannelNotifyProps MHEvent Name -> f (Form ChannelNotifyProps MHEvent Name)) -> TeamState -> f TeamState forall b c a. (b -> c) -> (a -> b) -> a -> c .Traversal (Maybe (Form ChannelNotifyProps MHEvent Name)) (Maybe (Form ChannelNotifyProps MHEvent Name)) (Form ChannelNotifyProps MHEvent Name) (Form ChannelNotifyProps MHEvent Name) -> Lens (Maybe (Form ChannelNotifyProps MHEvent Name)) (Maybe (Form ChannelNotifyProps MHEvent Name)) (Form ChannelNotifyProps MHEvent Name) (Form ChannelNotifyProps MHEvent Name) forall s t a. HasCallStack => Traversal s t a a -> Lens s t a a singular (Form ChannelNotifyProps MHEvent Name -> f (Form ChannelNotifyProps MHEvent Name)) -> Maybe (Form ChannelNotifyProps MHEvent Name) -> f (Maybe (Form ChannelNotifyProps MHEvent Name)) forall a a' (f :: * -> *). Applicative f => (a -> f a') -> Maybe a -> f (Maybe a') Traversal (Maybe (Form ChannelNotifyProps MHEvent Name)) (Maybe (Form ChannelNotifyProps MHEvent Name)) (Form ChannelNotifyProps MHEvent Name) (Form ChannelNotifyProps MHEvent Name) _Just) BrickEvent Name MHEvent -> EventM Name (Form ChannelNotifyProps MHEvent Name) () forall n e s. Eq n => BrickEvent n e -> EventM n (Form s e n) () handleFormEvent BrickEvent Name MHEvent e Bool -> MH Bool forall a. a -> MH a forall (m :: * -> *) a. Monad m => a -> m a return Bool True editNotifyPrefsKeybindings :: TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH editNotifyPrefsKeybindings :: TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH editNotifyPrefsKeybindings 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] editNotifyPrefsKeyHandlers TeamId tId) editNotifyPrefsKeyHandlers :: TeamId -> [MHKeyEventHandler] editNotifyPrefsKeyHandlers :: TeamId -> [KeyEventHandler KeyEvent MH] editNotifyPrefsKeyHandlers TeamId tId = [ KeyEvent -> Text -> MH () -> KeyEventHandler KeyEvent MH forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent CancelEvent Text "Close channel notification preferences" (MH () -> KeyEventHandler KeyEvent MH) -> MH () -> KeyEventHandler KeyEvent MH forall a b. (a -> b) -> a -> b $ TeamId -> MH () exitEditNotifyPrefsMode TeamId tId , KeyEvent -> Text -> MH () -> KeyEventHandler KeyEvent MH forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent FormSubmitEvent Text "Save channel notification preferences" (MH () -> KeyEventHandler KeyEvent MH) -> MH () -> KeyEventHandler KeyEvent MH forall a b. (a -> b) -> a -> b $ do ChatState st <- Getting ChatState ChatState ChatState -> MH ChatState forall s (m :: * -> *) a. MonadState s m => Getting a s a -> m a use Getting ChatState ChatState ChatState forall a. a -> a id TeamId -> (ChannelId -> ClientChannel -> MH ()) -> MH () withCurrentChannel TeamId tId ((ChannelId -> ClientChannel -> MH ()) -> MH ()) -> (ChannelId -> ClientChannel -> MH ()) -> MH () forall a b. (a -> b) -> a -> b $ \ChannelId cId ClientChannel _ -> do let form :: Form ChannelNotifyProps MHEvent Name form = Maybe (Form ChannelNotifyProps MHEvent Name) -> Form ChannelNotifyProps MHEvent Name forall a. HasCallStack => Maybe a -> a fromJust (Maybe (Form ChannelNotifyProps MHEvent Name) -> Form ChannelNotifyProps MHEvent Name) -> Maybe (Form ChannelNotifyProps MHEvent Name) -> Form ChannelNotifyProps MHEvent Name forall a b. (a -> b) -> a -> b $ ChatState stChatState -> Getting (Maybe (Form ChannelNotifyProps MHEvent Name)) ChatState (Maybe (Form ChannelNotifyProps MHEvent Name)) -> Maybe (Form ChannelNotifyProps MHEvent Name) forall s a. s -> Getting a s a -> a ^.TeamId -> Lens' ChatState TeamState csTeam(TeamId tId)((TeamState -> Const (Maybe (Form ChannelNotifyProps MHEvent Name)) TeamState) -> ChatState -> Const (Maybe (Form ChannelNotifyProps MHEvent Name)) ChatState) -> ((Maybe (Form ChannelNotifyProps MHEvent Name) -> Const (Maybe (Form ChannelNotifyProps MHEvent Name)) (Maybe (Form ChannelNotifyProps MHEvent Name))) -> TeamState -> Const (Maybe (Form ChannelNotifyProps MHEvent Name)) TeamState) -> Getting (Maybe (Form ChannelNotifyProps MHEvent Name)) ChatState (Maybe (Form ChannelNotifyProps MHEvent Name)) forall b c a. (b -> c) -> (a -> b) -> a -> c .(Maybe (Form ChannelNotifyProps MHEvent Name) -> Const (Maybe (Form ChannelNotifyProps MHEvent Name)) (Maybe (Form ChannelNotifyProps MHEvent Name))) -> TeamState -> Const (Maybe (Form ChannelNotifyProps MHEvent Name)) TeamState Lens' TeamState (Maybe (Form ChannelNotifyProps MHEvent Name)) tsNotifyPrefs DoAsyncChannelMM () forall a. DoAsyncChannelMM a doAsyncChannelMM AsyncPriority Preempt ChannelId cId (\Session s ChannelId _ -> ChannelId -> UserId -> ChannelNotifyProps -> Session -> IO () MM.mmUpdateChannelNotifications ChannelId cId (ChatState -> UserId myUserId ChatState st) (Form ChannelNotifyProps MHEvent Name -> ChannelNotifyProps forall s e n. Form s e n -> s formState Form ChannelNotifyProps MHEvent Name form) Session s) (\ChannelId _ () _ -> Maybe (MH ()) forall a. Maybe a Nothing) TeamId -> MH () exitEditNotifyPrefsMode TeamId tId ]