{-# LANGUAGE TemplateHaskell #-}

module Mensam.Client.UI.Spaces where

import Mensam.API.Data.Space
import Mensam.API.Route.Api.Space qualified as Route.Space
import Mensam.Client.Application
import Mensam.Client.Application.Event.Class
import Mensam.Client.UI.Brick.Draw
import Mensam.Client.UI.Brick.Events
import Mensam.Client.UI.Brick.Names

import Brick
import Brick.Forms
import Brick.Widgets.Border
import Brick.Widgets.Center
import Brick.Widgets.List
import Control.Monad.Trans.Class
import Data.Kind
import Data.Sequence qualified as Seq
import Data.Text qualified as T
import Data.Time.Zones.All qualified as T
import Graphics.Vty.Input.Events
import Lens.Micro.Platform

spacesListInitial :: GenericList ClientName Seq.Seq Space
spacesListInitial :: GenericList ClientName Seq Space
spacesListInitial =
  ClientName -> Seq Space -> Int -> GenericList ClientName Seq Space
forall (t :: * -> *) n e.
Foldable t =>
n -> t e -> Int -> GenericList n t e
list
    ClientName
ClientNameSpacesList
    Seq Space
forall a. Monoid a => a
mempty
    Int
1

type NewSpaceInfo :: Type
data NewSpaceInfo = MkLoginInfo
  { NewSpaceInfo -> Text
_newSpaceInfoName :: T.Text
  , NewSpaceInfo -> TZLabel
_newSpaceInfoTimezone :: T.TZLabel
  , NewSpaceInfo -> VisibilitySpace
_newSpaceInfoVisibility :: VisibilitySpace
  }
makeLenses ''NewSpaceInfo

newSpaceFormInitial :: Form NewSpaceInfo e ClientName
newSpaceFormInitial :: forall e. Form NewSpaceInfo e ClientName
newSpaceFormInitial =
  [NewSpaceInfo -> FormFieldState NewSpaceInfo e ClientName]
-> NewSpaceInfo -> Form NewSpaceInfo e ClientName
forall s e n. [s -> FormFieldState s e n] -> s -> Form s e n
newForm
    [ (String -> Widget ClientName
forall n. String -> Widget n
str String
"Name: " <+>) (Widget ClientName -> Widget ClientName)
-> (NewSpaceInfo -> FormFieldState NewSpaceInfo e ClientName)
-> NewSpaceInfo
-> FormFieldState NewSpaceInfo e ClientName
forall n s e.
(Widget n -> Widget n)
-> (s -> FormFieldState s e n) -> s -> FormFieldState s e n
@@= Lens' NewSpaceInfo Text
-> ClientName
-> Maybe Int
-> NewSpaceInfo
-> FormFieldState NewSpaceInfo e ClientName
forall n s e.
(Ord n, Show n) =>
Lens' s Text -> n -> Maybe Int -> s -> FormFieldState s e n
editTextField (Text -> f Text) -> NewSpaceInfo -> f NewSpaceInfo
Lens' NewSpaceInfo Text
newSpaceInfoName ClientName
ClientNameSpacesNewSpaceName (Int -> Maybe Int
forall a. a -> Maybe a
Just Int
1)
    , (String -> Widget ClientName
forall n. String -> Widget n
str String
"Timezone: " <+>) (Widget ClientName -> Widget ClientName)
-> (NewSpaceInfo -> FormFieldState NewSpaceInfo e ClientName)
-> NewSpaceInfo
-> FormFieldState NewSpaceInfo e ClientName
forall n s e.
(Widget n -> Widget n)
-> (s -> FormFieldState s e n) -> s -> FormFieldState s e n
@@= Lens' NewSpaceInfo TZLabel
-> [(TZLabel, ClientName, Text)]
-> NewSpaceInfo
-> FormFieldState NewSpaceInfo e ClientName
forall n a s e.
(Ord n, Show n, Eq a) =>
Lens' s a -> [(a, n, Text)] -> s -> FormFieldState s e n
radioField (TZLabel -> f TZLabel) -> NewSpaceInfo -> f NewSpaceInfo
Lens' NewSpaceInfo TZLabel
newSpaceInfoTimezone ((TZLabel -> (TZLabel, ClientName, Text))
-> [TZLabel] -> [(TZLabel, ClientName, Text)]
forall a b. (a -> b) -> [a] -> [b]
map (\TZLabel
x -> (TZLabel
x, TZLabel -> ClientName
ClientNameSpacesNewSpaceTimezone TZLabel
x, String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ TZLabel -> String
forall a. Show a => a -> String
show TZLabel
x)) [TZLabel
T.Etc__UTC, TZLabel
T.Europe__Berlin])
    , (String -> Widget ClientName
forall n. String -> Widget n
str String
"Visibility: " <+>) (Widget ClientName -> Widget ClientName)
-> (NewSpaceInfo -> FormFieldState NewSpaceInfo e ClientName)
-> NewSpaceInfo
-> FormFieldState NewSpaceInfo e ClientName
forall n s e.
(Widget n -> Widget n)
-> (s -> FormFieldState s e n) -> s -> FormFieldState s e n
@@= Lens' NewSpaceInfo VisibilitySpace
-> [(VisibilitySpace, ClientName, Text)]
-> NewSpaceInfo
-> FormFieldState NewSpaceInfo e ClientName
forall n a s e.
(Ord n, Show n, Eq a) =>
Lens' s a -> [(a, n, Text)] -> s -> FormFieldState s e n
radioField (VisibilitySpace -> f VisibilitySpace)
-> NewSpaceInfo -> f NewSpaceInfo
Lens' NewSpaceInfo VisibilitySpace
newSpaceInfoVisibility ((VisibilitySpace -> (VisibilitySpace, ClientName, Text))
-> [VisibilitySpace] -> [(VisibilitySpace, ClientName, Text)]
forall a b. (a -> b) -> [a] -> [b]
map (\VisibilitySpace
x -> (VisibilitySpace
x, VisibilitySpace -> ClientName
ClientNameSpacesNewSpaceVisibility VisibilitySpace
x, String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ VisibilitySpace -> String
forall a. Show a => a -> String
show VisibilitySpace
x)) [forall a. Bounded a => a
minBound @VisibilitySpace .. VisibilitySpace
forall a. Bounded a => a
maxBound])
    ]
    MkLoginInfo
      { _newSpaceInfoName :: Text
_newSpaceInfoName = Text
""
      , _newSpaceInfoTimezone :: TZLabel
_newSpaceInfoTimezone = TZLabel
T.Etc__UTC
      , _newSpaceInfoVisibility :: VisibilitySpace
_newSpaceInfoVisibility = VisibilitySpace
MkVisibilitySpaceVisible
      }

type ScreenSpacesState :: Type
data ScreenSpacesState = MkScreenSpacesState
  { ScreenSpacesState -> GenericList ClientName Seq Space
_screenStateSpacesList :: GenericList ClientName Seq.Seq Space
  , ScreenSpacesState -> Bool
_screenStateSpacesShowHelp :: Bool
  , ScreenSpacesState
-> Maybe (Form NewSpaceInfo ClientEvent ClientName)
_screenStateSpacesNewSpaceForm :: Maybe (Form NewSpaceInfo ClientEvent ClientName)
  }
makeLenses ''ScreenSpacesState

spacesDraw :: ScreenSpacesState -> [Widget ClientName]
spacesDraw :: ScreenSpacesState -> [Widget ClientName]
spacesDraw = \case
  s :: ScreenSpacesState
s@MkScreenSpacesState {_screenStateSpacesShowHelp :: ScreenSpacesState -> Bool
_screenStateSpacesShowHelp = Bool
True} ->
    [ Widget ClientName -> Widget ClientName
forall n. Widget n -> Widget n
centerLayer (Widget ClientName -> Widget ClientName)
-> Widget ClientName -> Widget ClientName
forall a b. (a -> b) -> a -> b
$
        Widget ClientName -> Widget ClientName -> Widget ClientName
forall n. Widget n -> Widget n -> Widget n
borderWithLabel (Text -> Widget ClientName
forall n. Text -> Widget n
txt Text
"Help") (Widget ClientName -> Widget ClientName)
-> Widget ClientName -> Widget ClientName
forall a b. (a -> b) -> a -> b
$
          Int -> Widget ClientName -> Widget ClientName
forall n. Int -> Widget n -> Widget n
cropRightTo Int
80 (Widget ClientName -> Widget ClientName)
-> Widget ClientName -> Widget ClientName
forall a b. (a -> b) -> a -> b
$
            Text -> Widget ClientName
forall n. Text -> Widget n
txt
              Text
"? - Toggle Help\n\
              \r - Refresh Spaces\n\
              \c - Create new Space\n\
              \Enter - View Desk\n\
              \"
    ]
      [Widget ClientName] -> [Widget ClientName] -> [Widget ClientName]
forall a. Semigroup a => a -> a -> a
<> ScreenSpacesState -> [Widget ClientName]
spacesDraw ScreenSpacesState
s {_screenStateSpacesShowHelp = False}
  s :: ScreenSpacesState
s@MkScreenSpacesState {_screenStateSpacesNewSpaceForm :: ScreenSpacesState
-> Maybe (Form NewSpaceInfo ClientEvent ClientName)
_screenStateSpacesNewSpaceForm = Just Form NewSpaceInfo ClientEvent ClientName
form} ->
    [ Widget ClientName -> Widget ClientName
forall n. Widget n -> Widget n
centerLayer (Widget ClientName -> Widget ClientName)
-> Widget ClientName -> Widget ClientName
forall a b. (a -> b) -> a -> b
$ Widget ClientName -> Widget ClientName -> Widget ClientName
forall n. Widget n -> Widget n -> Widget n
borderWithLabel (Text -> Widget ClientName
forall n. Text -> Widget n
txt Text
"New Space") (Widget ClientName -> Widget ClientName)
-> Widget ClientName -> Widget ClientName
forall a b. (a -> b) -> a -> b
$ Int -> Widget ClientName -> Widget ClientName
forall n. Int -> Widget n -> Widget n
cropRightTo Int
80 (Widget ClientName -> Widget ClientName)
-> Widget ClientName -> Widget ClientName
forall a b. (a -> b) -> a -> b
$ Form NewSpaceInfo ClientEvent ClientName -> Widget ClientName
forall n s e. Eq n => Form s e n -> Widget n
renderForm Form NewSpaceInfo ClientEvent ClientName
form
    ]
      [Widget ClientName] -> [Widget ClientName] -> [Widget ClientName]
forall a. Semigroup a => a -> a -> a
<> ScreenSpacesState -> [Widget ClientName]
spacesDraw (ScreenSpacesState
s {_screenStateSpacesNewSpaceForm = Nothing})
  MkScreenSpacesState {_screenStateSpacesList :: ScreenSpacesState -> GenericList ClientName Seq Space
_screenStateSpacesList = GenericList ClientName Seq Space
spaces} ->
    [ [Widget ClientName] -> Widget ClientName
forall n. [Widget n] -> Widget n
vBox
        [ Widget ClientName -> Widget ClientName -> Widget ClientName
forall n. Widget n -> Widget n -> Widget n
borderWithLabel (Text -> Widget ClientName
forall n. Text -> Widget n
txt Text
"Spaces") (Widget ClientName -> Widget ClientName)
-> Widget ClientName -> Widget ClientName
forall a b. (a -> b) -> a -> b
$
            Padding -> Widget ClientName -> Widget ClientName
forall n. Padding -> Widget n -> Widget n
padBottom Padding
Max (Widget ClientName -> Widget ClientName)
-> Widget ClientName -> Widget ClientName
forall a b. (a -> b) -> a -> b
$
              Padding -> Widget ClientName -> Widget ClientName
forall n. Padding -> Widget n -> Widget n
padRight Padding
Max (Widget ClientName -> Widget ClientName)
-> Widget ClientName -> Widget ClientName
forall a b. (a -> b) -> a -> b
$
                (Bool -> Space -> Widget ClientName)
-> Bool -> GenericList ClientName Seq Space -> Widget ClientName
forall (t :: * -> *) n e.
(Traversable t, Splittable t, Ord n, Show n) =>
(Bool -> e -> Widget n) -> Bool -> GenericList n t e -> Widget n
renderList (\Bool
_focus Space
space -> Padding -> Widget ClientName -> Widget ClientName
forall n. Padding -> Widget n -> Widget n
padRight Padding
Max (Widget ClientName -> Widget ClientName)
-> Widget ClientName -> Widget ClientName
forall a b. (a -> b) -> a -> b
$ Text -> Widget ClientName
forall n. Text -> Widget n
txt (Text -> Widget ClientName) -> Text -> Widget ClientName
forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack (String
"#" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int64 -> String
forall a. Show a => a -> String
show (IdentifierSpace -> Int64
unIdentifierSpace (IdentifierSpace -> Int64) -> IdentifierSpace -> Int64
forall a b. (a -> b) -> a -> b
$ Space -> IdentifierSpace
spaceId Space
space) String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
" ") Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> NameSpace -> Text
unNameSpace (Space -> NameSpace
spaceName Space
space)) Bool
True GenericList ClientName Seq Space
spaces
        , Padding -> Widget ClientName -> Widget ClientName
forall n. Padding -> Widget n -> Widget n
padLeft Padding
Max (Widget ClientName -> Widget ClientName)
-> Widget ClientName -> Widget ClientName
forall a b. (a -> b) -> a -> b
$ Text -> Widget ClientName
forall n. Text -> Widget n
txt Text
footerMenuHelp
        ]
    ]

spacesHandleEvent :: BrickEvent ClientName ClientEvent -> ApplicationT (EventM ClientName ScreenSpacesState) ()
spacesHandleEvent :: BrickEvent ClientName ClientEvent
-> ApplicationT (EventM ClientName ScreenSpacesState) ()
spacesHandleEvent BrickEvent ClientName ClientEvent
event = do
  ScreenSpacesState
s <- EventM ClientName ScreenSpacesState ScreenSpacesState
-> ApplicationT
     (EventM ClientName ScreenSpacesState) ScreenSpacesState
forall (m :: * -> *) a. Monad m => m a -> ApplicationT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift EventM ClientName ScreenSpacesState ScreenSpacesState
forall s (m :: * -> *). MonadState s m => m s
get
  case Form NewSpaceInfo ClientEvent ClientName -> NewSpaceInfo
forall s e n. Form s e n -> s
formState (Form NewSpaceInfo ClientEvent ClientName -> NewSpaceInfo)
-> Maybe (Form NewSpaceInfo ClientEvent ClientName)
-> Maybe NewSpaceInfo
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ScreenSpacesState
-> Maybe (Form NewSpaceInfo ClientEvent ClientName)
_screenStateSpacesNewSpaceForm ScreenSpacesState
s of
    Maybe NewSpaceInfo
Nothing ->
      case BrickEvent ClientName ClientEvent
event of
        VtyEvent (EvKey (KChar Char
'?') []) -> EventM ClientName ScreenSpacesState ()
-> ApplicationT (EventM ClientName ScreenSpacesState) ()
forall (m :: * -> *) a. Monad m => m a -> ApplicationT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (EventM ClientName ScreenSpacesState ()
 -> ApplicationT (EventM ClientName ScreenSpacesState) ())
-> EventM ClientName ScreenSpacesState ()
-> ApplicationT (EventM ClientName ScreenSpacesState) ()
forall a b. (a -> b) -> a -> b
$ ScreenSpacesState -> EventM ClientName ScreenSpacesState ()
forall s (m :: * -> *). MonadState s m => s -> m ()
put ScreenSpacesState
s {_screenStateSpacesShowHelp = not $ _screenStateSpacesShowHelp s}
        VtyEvent (EvKey (KChar Char
'r') []) -> ClientEvent
-> ApplicationT (EventM ClientName ScreenSpacesState) ()
forall (m :: * -> *). MonadEvent m => ClientEvent -> m ()
sendEvent ClientEvent
ClientEventSwitchToScreenSpaces
        VtyEvent (EvKey (KChar Char
'c') []) -> EventM ClientName ScreenSpacesState ()
-> ApplicationT (EventM ClientName ScreenSpacesState) ()
forall (m :: * -> *) a. Monad m => m a -> ApplicationT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (EventM ClientName ScreenSpacesState ()
 -> ApplicationT (EventM ClientName ScreenSpacesState) ())
-> EventM ClientName ScreenSpacesState ()
-> ApplicationT (EventM ClientName ScreenSpacesState) ()
forall a b. (a -> b) -> a -> b
$ (Maybe (Form NewSpaceInfo ClientEvent ClientName)
 -> Identity (Maybe (Form NewSpaceInfo ClientEvent ClientName)))
-> ScreenSpacesState -> Identity ScreenSpacesState
Lens'
  ScreenSpacesState
  (Maybe (Form NewSpaceInfo ClientEvent ClientName))
screenStateSpacesNewSpaceForm ((Maybe (Form NewSpaceInfo ClientEvent ClientName)
  -> Identity (Maybe (Form NewSpaceInfo ClientEvent ClientName)))
 -> ScreenSpacesState -> Identity ScreenSpacesState)
-> (Maybe (Form NewSpaceInfo ClientEvent ClientName)
    -> Maybe (Form NewSpaceInfo ClientEvent ClientName))
-> EventM ClientName ScreenSpacesState ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> (a -> b) -> m ()
%= Maybe (Form NewSpaceInfo ClientEvent ClientName)
-> Maybe (Form NewSpaceInfo ClientEvent ClientName)
-> Maybe (Form NewSpaceInfo ClientEvent ClientName)
forall a b. a -> b -> a
const (Form NewSpaceInfo ClientEvent ClientName
-> Maybe (Form NewSpaceInfo ClientEvent ClientName)
forall a. a -> Maybe a
Just Form NewSpaceInfo ClientEvent ClientName
forall e. Form NewSpaceInfo e ClientName
newSpaceFormInitial)
        VtyEvent (EvKey Key
KEnter []) -> do
          case GenericList ClientName Seq Space -> Maybe (Int, Space)
forall (t :: * -> *) e n.
(Splittable t, Traversable t, Semigroup (t e)) =>
GenericList n t e -> Maybe (Int, e)
listSelectedElement (GenericList ClientName Seq Space -> Maybe (Int, Space))
-> GenericList ClientName Seq Space -> Maybe (Int, Space)
forall a b. (a -> b) -> a -> b
$ ScreenSpacesState -> GenericList ClientName Seq Space
_screenStateSpacesList ScreenSpacesState
s of
            Maybe (Int, Space)
Nothing -> () -> ApplicationT (EventM ClientName ScreenSpacesState) ()
forall a. a -> ApplicationT (EventM ClientName ScreenSpacesState) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
            Just (Int
_index, Space
space) -> ClientEvent
-> ApplicationT (EventM ClientName ScreenSpacesState) ()
forall (m :: * -> *). MonadEvent m => ClientEvent -> m ()
sendEvent (ClientEvent
 -> ApplicationT (EventM ClientName ScreenSpacesState) ())
-> ClientEvent
-> ApplicationT (EventM ClientName ScreenSpacesState) ()
forall a b. (a -> b) -> a -> b
$ Space -> ClientEvent
ClientEventSwitchToScreenDesks Space
space
        VtyEvent Event
e -> EventM ClientName ScreenSpacesState ()
-> ApplicationT (EventM ClientName ScreenSpacesState) ()
forall (m :: * -> *) a. Monad m => m a -> ApplicationT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (EventM ClientName ScreenSpacesState ()
 -> ApplicationT (EventM ClientName ScreenSpacesState) ())
-> EventM ClientName ScreenSpacesState ()
-> ApplicationT (EventM ClientName ScreenSpacesState) ()
forall a b. (a -> b) -> a -> b
$ LensLike'
  (Zoomed (EventM ClientName (GenericList ClientName Seq Space)) ())
  ScreenSpacesState
  (GenericList ClientName Seq Space)
-> EventM ClientName (GenericList ClientName Seq Space) ()
-> EventM ClientName ScreenSpacesState ()
forall c.
LensLike'
  (Zoomed (EventM ClientName (GenericList ClientName Seq Space)) c)
  ScreenSpacesState
  (GenericList ClientName Seq Space)
-> EventM ClientName (GenericList ClientName Seq Space) c
-> EventM ClientName ScreenSpacesState c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom (GenericList ClientName Seq Space
 -> Focusing
      (StateT (EventState ClientName) IO)
      ()
      (GenericList ClientName Seq Space))
-> ScreenSpacesState
-> Focusing
     (StateT (EventState ClientName) IO) () ScreenSpacesState
LensLike'
  (Zoomed (EventM ClientName (GenericList ClientName Seq Space)) ())
  ScreenSpacesState
  (GenericList ClientName Seq Space)
Lens' ScreenSpacesState (GenericList ClientName Seq Space)
screenStateSpacesList (EventM ClientName (GenericList ClientName Seq Space) ()
 -> EventM ClientName ScreenSpacesState ())
-> EventM ClientName (GenericList ClientName Seq Space) ()
-> EventM ClientName ScreenSpacesState ()
forall a b. (a -> b) -> a -> b
$ Event -> EventM ClientName (GenericList ClientName Seq Space) ()
forall (t :: * -> *) n e.
(Foldable t, Splittable t, Ord n) =>
Event -> EventM n (GenericList n t e) ()
handleListEvent Event
e
        BrickEvent ClientName ClientEvent
_ -> () -> ApplicationT (EventM ClientName ScreenSpacesState) ()
forall a. a -> ApplicationT (EventM ClientName ScreenSpacesState) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
    Just NewSpaceInfo
newSpaceInfo ->
      case BrickEvent ClientName ClientEvent
event of
        VtyEvent (EvKey Key
KEnter []) ->
          ClientEvent
-> ApplicationT (EventM ClientName ScreenSpacesState) ()
forall (m :: * -> *). MonadEvent m => ClientEvent -> m ()
sendEvent (ClientEvent
 -> ApplicationT (EventM ClientName ScreenSpacesState) ())
-> ClientEvent
-> ApplicationT (EventM ClientName ScreenSpacesState) ()
forall a b. (a -> b) -> a -> b
$
            RequestSpaceCreate -> ClientEvent
ClientEventSendRequestCreateSpace
              Route.Space.MkRequestSpaceCreate
                { requestSpaceCreateName :: NameSpace
Route.Space.requestSpaceCreateName = Text -> NameSpace
MkNameSpace (Text -> NameSpace) -> Text -> NameSpace
forall a b. (a -> b) -> a -> b
$ NewSpaceInfo
newSpaceInfo NewSpaceInfo -> Getting Text NewSpaceInfo Text -> Text
forall s a. s -> Getting a s a -> a
^. Getting Text NewSpaceInfo Text
Lens' NewSpaceInfo Text
newSpaceInfoName
                , requestSpaceCreateTimezone :: TZLabel
Route.Space.requestSpaceCreateTimezone = NewSpaceInfo
newSpaceInfo NewSpaceInfo -> Getting TZLabel NewSpaceInfo TZLabel -> TZLabel
forall s a. s -> Getting a s a -> a
^. Getting TZLabel NewSpaceInfo TZLabel
Lens' NewSpaceInfo TZLabel
newSpaceInfoTimezone
                , requestSpaceCreateVisibility :: VisibilitySpace
Route.Space.requestSpaceCreateVisibility = NewSpaceInfo
newSpaceInfo NewSpaceInfo
-> Getting VisibilitySpace NewSpaceInfo VisibilitySpace
-> VisibilitySpace
forall s a. s -> Getting a s a -> a
^. Getting VisibilitySpace NewSpaceInfo VisibilitySpace
Lens' NewSpaceInfo VisibilitySpace
newSpaceInfoVisibility
                }
        BrickEvent ClientName ClientEvent
_ -> EventM ClientName ScreenSpacesState ()
-> ApplicationT (EventM ClientName ScreenSpacesState) ()
forall (m :: * -> *) a. Monad m => m a -> ApplicationT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (EventM ClientName ScreenSpacesState ()
 -> ApplicationT (EventM ClientName ScreenSpacesState) ())
-> EventM ClientName ScreenSpacesState ()
-> ApplicationT (EventM ClientName ScreenSpacesState) ()
forall a b. (a -> b) -> a -> b
$ LensLike'
  (Zoomed
     (EventM ClientName (Form NewSpaceInfo ClientEvent ClientName)) ())
  ScreenSpacesState
  (Form NewSpaceInfo ClientEvent ClientName)
-> EventM ClientName (Form NewSpaceInfo ClientEvent ClientName) ()
-> EventM ClientName ScreenSpacesState ()
forall c.
LensLike'
  (Zoomed
     (EventM ClientName (Form NewSpaceInfo ClientEvent ClientName)) c)
  ScreenSpacesState
  (Form NewSpaceInfo ClientEvent ClientName)
-> EventM ClientName (Form NewSpaceInfo ClientEvent ClientName) c
-> EventM ClientName ScreenSpacesState c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom ((Maybe (Form NewSpaceInfo ClientEvent ClientName)
 -> Focusing
      (StateT (EventState ClientName) IO)
      ()
      (Maybe (Form NewSpaceInfo ClientEvent ClientName)))
-> ScreenSpacesState
-> Focusing
     (StateT (EventState ClientName) IO) () ScreenSpacesState
Lens'
  ScreenSpacesState
  (Maybe (Form NewSpaceInfo ClientEvent ClientName))
screenStateSpacesNewSpaceForm ((Maybe (Form NewSpaceInfo ClientEvent ClientName)
  -> Focusing
       (StateT (EventState ClientName) IO)
       ()
       (Maybe (Form NewSpaceInfo ClientEvent ClientName)))
 -> ScreenSpacesState
 -> Focusing
      (StateT (EventState ClientName) IO) () ScreenSpacesState)
-> ((Form NewSpaceInfo ClientEvent ClientName
     -> Focusing
          (StateT (EventState ClientName) IO)
          ()
          (Form NewSpaceInfo ClientEvent ClientName))
    -> Maybe (Form NewSpaceInfo ClientEvent ClientName)
    -> Focusing
         (StateT (EventState ClientName) IO)
         ()
         (Maybe (Form NewSpaceInfo ClientEvent ClientName)))
-> (Form NewSpaceInfo ClientEvent ClientName
    -> Focusing
         (StateT (EventState ClientName) IO)
         ()
         (Form NewSpaceInfo ClientEvent ClientName))
-> ScreenSpacesState
-> Focusing
     (StateT (EventState ClientName) IO) () ScreenSpacesState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Form NewSpaceInfo ClientEvent ClientName
 -> Focusing
      (StateT (EventState ClientName) IO)
      ()
      (Form NewSpaceInfo ClientEvent ClientName))
-> Maybe (Form NewSpaceInfo ClientEvent ClientName)
-> Focusing
     (StateT (EventState ClientName) IO)
     ()
     (Maybe (Form NewSpaceInfo ClientEvent ClientName))
forall a a' (f :: * -> *).
Applicative f =>
(a -> f a') -> Maybe a -> f (Maybe a')
_Just) (EventM ClientName (Form NewSpaceInfo ClientEvent ClientName) ()
 -> EventM ClientName ScreenSpacesState ())
-> EventM ClientName (Form NewSpaceInfo ClientEvent ClientName) ()
-> EventM ClientName ScreenSpacesState ()
forall a b. (a -> b) -> a -> b
$ BrickEvent ClientName ClientEvent
-> EventM ClientName (Form NewSpaceInfo ClientEvent ClientName) ()
forall n e s. Eq n => BrickEvent n e -> EventM n (Form s e n) ()
handleFormEvent BrickEvent ClientName ClientEvent
event