matterhorn-50200.18.0: src/Matterhorn/Events/EditNotifyPrefs.hs
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 tId =
handleEventWith [ mhHandleKeyboardEvent (editNotifyPrefsKeybindings tId)
, handleEditNotifyPrefsEvent tId . VtyEvent
]
handleEditNotifyPrefsEvent :: TeamId -> BrickEvent Name MHEvent -> MH Bool
handleEditNotifyPrefsEvent tId e = do
mhZoom (csTeam(tId).tsNotifyPrefs.singular _Just) handleFormEvent e
return True
editNotifyPrefsKeybindings :: TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH
editNotifyPrefsKeybindings tId kc = unsafeKeyDispatcher kc (editNotifyPrefsKeyHandlers tId)
editNotifyPrefsKeyHandlers :: TeamId -> [MHKeyEventHandler]
editNotifyPrefsKeyHandlers tId =
[ onEvent CancelEvent "Close channel notification preferences" $
exitEditNotifyPrefsMode tId
, onEvent FormSubmitEvent "Save channel notification preferences" $ do
st <- use id
withCurrentChannel tId $ \cId _ -> do
let form = fromJust $ st^.csTeam(tId).tsNotifyPrefs
doAsyncChannelMM Preempt cId
(\s _ -> MM.mmUpdateChannelNotifications cId (myUserId st) (formState form) s)
(\_ _ -> Nothing)
exitEditNotifyPrefsMode tId
]