module Matterhorn.Events.EditNotifyPrefs ( onEventEditNotifyPrefs , editNotifyPrefsKeybindings , editNotifyPrefsKeyHandlers , handleEditNotifyPrefsEvent ) where import Prelude () import Matterhorn.Prelude import Brick 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.Types.KeyEvents import Matterhorn.Events.Keybindings 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 -> KeyHandlerMap) -> Event -> MH Bool handleKeyboardEvent (TeamId -> KeyConfig -> KeyHandlerMap 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 Form ChannelNotifyProps MHEvent Name form <- Getting (Form ChannelNotifyProps MHEvent Name) ChatState (Form ChannelNotifyProps MHEvent Name) -> MH (Form ChannelNotifyProps MHEvent Name) forall s (m :: * -> *) a. MonadState s m => Getting a s a -> m a use (TeamId -> Lens' ChatState TeamState csTeam(TeamId tId)((TeamState -> Const (Form ChannelNotifyProps MHEvent Name) TeamState) -> ChatState -> Const (Form ChannelNotifyProps MHEvent Name) ChatState) -> ((Form ChannelNotifyProps MHEvent Name -> Const (Form ChannelNotifyProps MHEvent Name) (Form ChannelNotifyProps MHEvent Name)) -> TeamState -> Const (Form ChannelNotifyProps MHEvent Name) TeamState) -> Getting (Form ChannelNotifyProps MHEvent Name) ChatState (Form ChannelNotifyProps MHEvent Name) forall b c a. (b -> c) -> (a -> b) -> a -> c .(Maybe (Form ChannelNotifyProps MHEvent Name) -> Const (Form ChannelNotifyProps MHEvent Name) (Maybe (Form ChannelNotifyProps MHEvent Name))) -> TeamState -> Const (Form ChannelNotifyProps MHEvent Name) TeamState Lens' TeamState (Maybe (Form ChannelNotifyProps MHEvent Name)) tsNotifyPrefs((Maybe (Form ChannelNotifyProps MHEvent Name) -> Const (Form ChannelNotifyProps MHEvent Name) (Maybe (Form ChannelNotifyProps MHEvent Name))) -> TeamState -> Const (Form ChannelNotifyProps MHEvent Name) TeamState) -> ((Form ChannelNotifyProps MHEvent Name -> Const (Form ChannelNotifyProps MHEvent Name) (Form ChannelNotifyProps MHEvent Name)) -> Maybe (Form ChannelNotifyProps MHEvent Name) -> Const (Form ChannelNotifyProps MHEvent Name) (Maybe (Form ChannelNotifyProps MHEvent Name))) -> (Form ChannelNotifyProps MHEvent Name -> Const (Form ChannelNotifyProps MHEvent Name) (Form ChannelNotifyProps MHEvent Name)) -> TeamState -> Const (Form ChannelNotifyProps MHEvent Name) 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 forall a a'. Traversal (Maybe a) (Maybe a') a a' Traversal (Maybe (Form ChannelNotifyProps MHEvent Name)) (Maybe (Form ChannelNotifyProps MHEvent Name)) (Form ChannelNotifyProps MHEvent Name) (Form ChannelNotifyProps MHEvent Name) _Just) Form ChannelNotifyProps MHEvent Name updatedForm <- EventM Name (Form ChannelNotifyProps MHEvent Name) -> MH (Form ChannelNotifyProps MHEvent Name) forall a. EventM Name a -> MH a mh (EventM Name (Form ChannelNotifyProps MHEvent Name) -> MH (Form ChannelNotifyProps MHEvent Name)) -> EventM Name (Form ChannelNotifyProps MHEvent Name) -> MH (Form ChannelNotifyProps MHEvent Name) forall a b. (a -> b) -> a -> b $ BrickEvent Name MHEvent -> Form ChannelNotifyProps MHEvent Name -> EventM Name (Form ChannelNotifyProps MHEvent Name) forall n e s. Eq n => BrickEvent n e -> Form s e n -> EventM n (Form s e n) handleFormEvent BrickEvent Name MHEvent e Form ChannelNotifyProps MHEvent Name form TeamId -> Lens' ChatState TeamState csTeam(TeamId tId)((TeamState -> Identity TeamState) -> ChatState -> Identity ChatState) -> ((Maybe (Form ChannelNotifyProps MHEvent Name) -> Identity (Maybe (Form ChannelNotifyProps MHEvent Name))) -> TeamState -> Identity TeamState) -> (Maybe (Form ChannelNotifyProps MHEvent Name) -> Identity (Maybe (Form ChannelNotifyProps MHEvent Name))) -> ChatState -> Identity ChatState forall b c a. (b -> c) -> (a -> b) -> a -> c .(Maybe (Form ChannelNotifyProps MHEvent Name) -> Identity (Maybe (Form ChannelNotifyProps MHEvent Name))) -> TeamState -> Identity TeamState Lens' TeamState (Maybe (Form ChannelNotifyProps MHEvent Name)) tsNotifyPrefs ((Maybe (Form ChannelNotifyProps MHEvent Name) -> Identity (Maybe (Form ChannelNotifyProps MHEvent Name))) -> ChatState -> Identity ChatState) -> Maybe (Form ChannelNotifyProps MHEvent Name) -> MH () forall s (m :: * -> *) a b. MonadState s m => ASetter s s a b -> b -> m () .= Form ChannelNotifyProps MHEvent Name -> Maybe (Form ChannelNotifyProps MHEvent Name) forall a. a -> Maybe a Just Form ChannelNotifyProps MHEvent Name updatedForm Bool -> MH Bool forall (m :: * -> *) a. Monad m => a -> m a return Bool True editNotifyPrefsKeybindings :: TeamId -> KeyConfig -> KeyHandlerMap editNotifyPrefsKeybindings :: TeamId -> KeyConfig -> KeyHandlerMap editNotifyPrefsKeybindings TeamId tId = [KeyEventHandler] -> KeyConfig -> KeyHandlerMap mkKeybindings (TeamId -> [KeyEventHandler] editNotifyPrefsKeyHandlers TeamId tId) editNotifyPrefsKeyHandlers :: TeamId -> [KeyEventHandler] editNotifyPrefsKeyHandlers :: TeamId -> [KeyEventHandler] editNotifyPrefsKeyHandlers TeamId tId = [ KeyEvent -> Text -> MH () -> KeyEventHandler mkKb KeyEvent CancelEvent Text "Close channel notification preferences" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler forall a b. (a -> b) -> a -> b $ TeamId -> MH () exitEditNotifyPrefsMode TeamId tId , KeyEvent -> Text -> MH () -> KeyEventHandler mkKb KeyEvent FormSubmitEvent Text "Save channel notification preferences" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler 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 ]