module Matterhorn.State.ChannelListOverlay
( enterChannelListOverlayMode
, channelListSelectDown
, channelListSelectUp
, channelListPageDown
, channelListPageUp
)
where
import Prelude ()
import Matterhorn.Prelude
import qualified Brick.Widgets.List as L
import qualified Data.Vector as Vec
import qualified Data.Sequence as Seq
import Data.Function ( on )
import Lens.Micro.Platform ( to )
import Network.Mattermost.Types
import qualified Network.Mattermost.Endpoints as MM
import Matterhorn.State.ListOverlay
import Matterhorn.State.Channels
import Matterhorn.Types
enterChannelListOverlayMode :: MH ()
enterChannelListOverlayMode = do
myTId <- gets myTeamId
myChannels <- use (csChannels.to (filteredChannelIds (const True)))
enterListOverlayMode csChannelListOverlay ChannelListOverlay
AllChannels enterHandler (fetchResults myTId myChannels)
enterHandler :: Channel -> MH Bool
enterHandler chan = do
joinChannel (getId chan)
return True
fetchResults :: TeamId
-> [ChannelId]
-> ChannelSearchScope
-> Session
-> Text
-> IO (Vec.Vector Channel)
fetchResults myTId exclude AllChannels session searchString = do
resultChans <- MM.mmSearchChannels myTId searchString session
let filteredChans = Seq.filter (\ c -> not (channelId c `elem` exclude)) resultChans
sortedChans = Vec.fromList $ toList $ Seq.sortBy (compare `on` channelName) filteredChans
return sortedChans
channelListSelectUp :: MH ()
channelListSelectUp = channelListMove L.listMoveUp
channelListSelectDown :: MH ()
channelListSelectDown = channelListMove L.listMoveDown
channelListPageUp :: MH ()
channelListPageUp = channelListMove (L.listMoveBy (-1 * channelListPageSize))
channelListPageDown :: MH ()
channelListPageDown = channelListMove (L.listMoveBy channelListPageSize)
channelListMove :: (L.List Name Channel -> L.List Name Channel) -> MH ()
channelListMove = listOverlayMove csChannelListOverlay
channelListPageSize :: Int
channelListPageSize = 10