48 lines
1.2 KiB
Haskell
48 lines
1.2 KiB
Haskell
{-# LANGUAGE OverloadedStrings #-}
|
|
|
|
module Forest.Client.NodeEditor
|
|
( NodeEditor
|
|
, asReply
|
|
, editNode
|
|
, replyToNode
|
|
, handleNodeEditorEvent
|
|
, renderNodeEditor
|
|
) where
|
|
|
|
import Brick
|
|
import Brick.Widgets.Edit
|
|
import qualified Data.Text as T
|
|
import qualified Graphics.Vty as Vty
|
|
|
|
import Forest.Client.ResourceName
|
|
|
|
data NodeEditor = NodeEditor
|
|
{ neEditor :: Editor T.Text ResourceName
|
|
, neReply :: Bool
|
|
} deriving (Show)
|
|
|
|
asReply :: NodeEditor -> Bool
|
|
asReply = neReply
|
|
|
|
editNode :: T.Text -> NodeEditor
|
|
editNode text = NodeEditor
|
|
{ neEditor = editorText RnEditor (Just 1) text
|
|
, neReply = False
|
|
}
|
|
|
|
replyToNode :: NodeEditor
|
|
replyToNode = NodeEditor
|
|
{ neEditor = editorText RnEditor (Just 1) ""
|
|
, neReply = True
|
|
}
|
|
|
|
handleNodeEditorEvent :: Vty.Event -> NodeEditor -> EventM ResourceName NodeEditor
|
|
handleNodeEditorEvent event es = do
|
|
newEditor <- handleEditorEvent event $ neEditor es
|
|
pure es{neEditor = newEditor}
|
|
|
|
renderNodeEditor :: NodeEditor -> Widget ResourceName
|
|
renderNodeEditor es = renderEditor renderFunc True $ neEditor es
|
|
where
|
|
renderFunc :: [T.Text] -> Widget ResourceName
|
|
renderFunc = vBox . map txt
|