{-# LANGUAGE TemplateHaskell #-}
module Matterhorn.Types.MessageInterface
( MessageInterface(..)
, miMessages
, miEditor
, miMode
, miMessageSelect
, miRootPostId
, miChannelId
, miTarget
, miUrlListSource
, miUrlList
, miSaveAttachmentDialog
, messageInterfaceCursor
, MessageInterfaceMode(..)
, MessageInterfaceTarget(..)
, URLListSource(..)
, URLList(..)
, ulList
, ulSource
, SaveAttachmentDialogState(..)
, attachmentPathEditor
, attachmentPathDialogFocus
)
where
import Prelude ()
import Matterhorn.Prelude
import Brick ( getName )
import Brick.Focus ( FocusRing )
import Brick.Widgets.List ( List )
import Brick.Widgets.Edit ( Editor )
import Brick.Widgets.FileBrowser ( fileBrowserNameG )
import qualified Data.Text as T
import Lens.Micro.Platform ( makeLenses, _Just )
import Network.Mattermost.Types ( ChannelId, TeamId )
import Matterhorn.Types.Core ( MessageSelectState )
import Matterhorn.Types.EditState
import Matterhorn.Types.Messages
data MessageInterface n i =
MessageInterface { MessageInterface n i -> Messages
_miMessages :: Messages
, MessageInterface n i -> EditState n
_miEditor :: EditState n
, MessageInterface n i -> MessageSelectState
_miMessageSelect :: MessageSelectState
, MessageInterface n i -> i
_miRootPostId :: i
, MessageInterface n i -> ChannelId
_miChannelId :: ChannelId
, MessageInterface n i -> MessageInterfaceMode
_miMode :: MessageInterfaceMode
, MessageInterface n i -> MessageInterfaceTarget
_miTarget :: MessageInterfaceTarget
, MessageInterface n i -> URLListSource
_miUrlListSource :: URLListSource
, MessageInterface n i -> URLList n
_miUrlList :: URLList n
, MessageInterface n i -> SaveAttachmentDialogState n
_miSaveAttachmentDialog :: SaveAttachmentDialogState n
}
messageInterfaceCursor :: MessageInterface n i -> Maybe n
messageInterfaceCursor :: MessageInterface n i -> Maybe n
messageInterfaceCursor MessageInterface n i
mi =
case MessageInterface n i -> MessageInterfaceMode
forall n i. MessageInterface n i -> MessageInterfaceMode
_miMode MessageInterface n i
mi of
MessageInterfaceMode
Compose -> n -> Maybe n
forall a. a -> Maybe a
Just (n -> Maybe n) -> n -> Maybe n
forall a b. (a -> b) -> a -> b
$ Editor Text n -> n
forall a n. Named a n => a -> n
getName (Editor Text n -> n) -> Editor Text n -> n
forall a b. (a -> b) -> a -> b
$ EditState n -> Editor Text n
forall n. EditState n -> Editor Text n
_esEditor (EditState n -> Editor Text n) -> EditState n -> Editor Text n
forall a b. (a -> b) -> a -> b
$ MessageInterface n i -> EditState n
forall n i. MessageInterface n i -> EditState n
_miEditor MessageInterface n i
mi
SaveAttachment {} -> n -> Maybe n
forall a. a -> Maybe a
Just (n -> Maybe n) -> n -> Maybe n
forall a b. (a -> b) -> a -> b
$ Editor Text n -> n
forall a n. Named a n => a -> n
getName (Editor Text n -> n) -> Editor Text n -> n
forall a b. (a -> b) -> a -> b
$ SaveAttachmentDialogState n -> Editor Text n
forall n. SaveAttachmentDialogState n -> Editor Text n
_attachmentPathEditor (SaveAttachmentDialogState n -> Editor Text n)
-> SaveAttachmentDialogState n -> Editor Text n
forall a b. (a -> b) -> a -> b
$ MessageInterface n i -> SaveAttachmentDialogState n
forall n i. MessageInterface n i -> SaveAttachmentDialogState n
_miSaveAttachmentDialog MessageInterface n i
mi
MessageInterfaceMode
BrowseFiles -> (EditState n -> Maybe (FileBrowser n)
forall n. EditState n -> Maybe (FileBrowser n)
_esFileBrowser (EditState n -> Maybe (FileBrowser n))
-> EditState n -> Maybe (FileBrowser n)
forall a b. (a -> b) -> a -> b
$ MessageInterface n i -> EditState n
forall n i. MessageInterface n i -> EditState n
_miEditor MessageInterface n i
mi)Maybe (FileBrowser n)
-> Getting (First n) (Maybe (FileBrowser n)) n -> Maybe n
forall s a. s -> Getting (First a) s a -> Maybe a
^?(FileBrowser n -> Const (First n) (FileBrowser n))
-> Maybe (FileBrowser n) -> Const (First n) (Maybe (FileBrowser n))
forall a a'. Traversal (Maybe a) (Maybe a') a a'
_Just((FileBrowser n -> Const (First n) (FileBrowser n))
-> Maybe (FileBrowser n)
-> Const (First n) (Maybe (FileBrowser n)))
-> ((n -> Const (First n) n)
-> FileBrowser n -> Const (First n) (FileBrowser n))
-> Getting (First n) (Maybe (FileBrowser n)) n
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(n -> Const (First n) n)
-> FileBrowser n -> Const (First n) (FileBrowser n)
forall n. SimpleGetter (FileBrowser n) n
fileBrowserNameG
MessageInterfaceMode
ManageAttachments -> Maybe n
forall a. Maybe a
Nothing
MessageInterfaceMode
MessageSelect -> Maybe n
forall a. Maybe a
Nothing
MessageInterfaceMode
ShowUrlList -> Maybe n
forall a. Maybe a
Nothing
data MessageInterfaceMode =
Compose
| MessageSelect
| ShowUrlList
| SaveAttachment LinkChoice
| ManageAttachments
| BrowseFiles
deriving (MessageInterfaceMode -> MessageInterfaceMode -> Bool
(MessageInterfaceMode -> MessageInterfaceMode -> Bool)
-> (MessageInterfaceMode -> MessageInterfaceMode -> Bool)
-> Eq MessageInterfaceMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MessageInterfaceMode -> MessageInterfaceMode -> Bool
$c/= :: MessageInterfaceMode -> MessageInterfaceMode -> Bool
== :: MessageInterfaceMode -> MessageInterfaceMode -> Bool
$c== :: MessageInterfaceMode -> MessageInterfaceMode -> Bool
Eq, Int -> MessageInterfaceMode -> ShowS
[MessageInterfaceMode] -> ShowS
MessageInterfaceMode -> String
(Int -> MessageInterfaceMode -> ShowS)
-> (MessageInterfaceMode -> String)
-> ([MessageInterfaceMode] -> ShowS)
-> Show MessageInterfaceMode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MessageInterfaceMode] -> ShowS
$cshowList :: [MessageInterfaceMode] -> ShowS
show :: MessageInterfaceMode -> String
$cshow :: MessageInterfaceMode -> String
showsPrec :: Int -> MessageInterfaceMode -> ShowS
$cshowsPrec :: Int -> MessageInterfaceMode -> ShowS
Show)
data URLListSource =
FromChannel ChannelId
| FromThreadIn ChannelId
deriving (Int -> URLListSource -> ShowS
[URLListSource] -> ShowS
URLListSource -> String
(Int -> URLListSource -> ShowS)
-> (URLListSource -> String)
-> ([URLListSource] -> ShowS)
-> Show URLListSource
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [URLListSource] -> ShowS
$cshowList :: [URLListSource] -> ShowS
show :: URLListSource -> String
$cshow :: URLListSource -> String
showsPrec :: Int -> URLListSource -> ShowS
$cshowsPrec :: Int -> URLListSource -> ShowS
Show, URLListSource -> URLListSource -> Bool
(URLListSource -> URLListSource -> Bool)
-> (URLListSource -> URLListSource -> Bool) -> Eq URLListSource
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: URLListSource -> URLListSource -> Bool
$c/= :: URLListSource -> URLListSource -> Bool
== :: URLListSource -> URLListSource -> Bool
$c== :: URLListSource -> URLListSource -> Bool
Eq)
data MessageInterfaceTarget =
MITeamThread TeamId
| MIChannel ChannelId
deriving (MessageInterfaceTarget -> MessageInterfaceTarget -> Bool
(MessageInterfaceTarget -> MessageInterfaceTarget -> Bool)
-> (MessageInterfaceTarget -> MessageInterfaceTarget -> Bool)
-> Eq MessageInterfaceTarget
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MessageInterfaceTarget -> MessageInterfaceTarget -> Bool
$c/= :: MessageInterfaceTarget -> MessageInterfaceTarget -> Bool
== :: MessageInterfaceTarget -> MessageInterfaceTarget -> Bool
$c== :: MessageInterfaceTarget -> MessageInterfaceTarget -> Bool
Eq, Int -> MessageInterfaceTarget -> ShowS
[MessageInterfaceTarget] -> ShowS
MessageInterfaceTarget -> String
(Int -> MessageInterfaceTarget -> ShowS)
-> (MessageInterfaceTarget -> String)
-> ([MessageInterfaceTarget] -> ShowS)
-> Show MessageInterfaceTarget
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MessageInterfaceTarget] -> ShowS
$cshowList :: [MessageInterfaceTarget] -> ShowS
show :: MessageInterfaceTarget -> String
$cshow :: MessageInterfaceTarget -> String
showsPrec :: Int -> MessageInterfaceTarget -> ShowS
$cshowsPrec :: Int -> MessageInterfaceTarget -> ShowS
Show)
data URLList n =
URLList { URLList n -> List n (Int, LinkChoice)
_ulList :: List n (Int, LinkChoice)
, URLList n -> Maybe URLListSource
_ulSource :: Maybe URLListSource
}
data SaveAttachmentDialogState n =
SaveAttachmentDialogState { SaveAttachmentDialogState n -> Editor Text n
_attachmentPathEditor :: Editor T.Text n
, SaveAttachmentDialogState n -> FocusRing n
_attachmentPathDialogFocus :: FocusRing n
}
makeLenses ''MessageInterface
makeLenses ''URLList
makeLenses ''SaveAttachmentDialogState