@@ -8,7 +8,6 @@ module Page.Popup.NewDeployment (newDeploymentPopup) where
88import Control.Lens
99import Control.Monad
1010import Data.Functor
11−import Data.Generics.Sum
1211import Data.Monoid
1312import qualified Data.Text as T
1413import Reflex.Dom as R
@@ -30,31 +29,35 @@ newDeploymentPopup ::
3029 Event t () ->
3130 -- | \"Close\" event.
3231 Event t () ->
33− m ()
34−newDeploymentPopup showEv hideEv = void $
35− sidebar showEv hideEv $
36− const $ mdo
37− divClass "popup__body" $ mdo
38− (closeEv', saveEv) <- newDeploymentPopupHeader enabledDyn sentDyn
39− deploymentMDyn <- newDeploymentPopupBody respEv
40− respEv <-
41− holdDyn (pure never) >=> networkView >=> switchHold never $
42− tagMaybe (current deploymentMDyn) saveEv <&> \dep -> do
43− pb <- getPostBuild
44− createEndpoint
45− (pure $ Right dep)
46− pb
47− sentDyn <-
48− holdDyn False $
49− leftmost
50− [ True <$ saveEv
51− , False <$ respEv
52− ]
53− let successEv =
54− fmapMaybe (preview (_Ctor @"Success") <=< commandResponse) respEv
55− closeEv = leftmost [closeEv', successEv]
56− enabledDyn = zipDynWith (&&) (not <$> sentDyn) (isJust <$> deploymentMDyn)
57− pure (never, closeEv)
32+ m (Event t Deployment)
33+newDeploymentPopup showEv hideEv =
34+ catchReturns $ \enterEv ->
35+ sidebar showEv hideEv $
36+ const $ mdo
37+ divClass "popup__body" $ mdo
38+ (closeEv', (enterEv <>) -> saveEv) <- newDeploymentPopupHeader enabledDyn sentDyn
39+ deploymentMDyn <- newDeploymentPopupBody (snd <$> respEv)
40+ respEv <-
41+ holdDyn (pure never) >=> networkView >=> switchHold never $
42+ tagMaybe (current deploymentMDyn) saveEv <&> \dep -> do
43+ pb <- getPostBuild
44+ fmap (dep,)
45+ <$> createEndpoint
46+ (pure $ Right dep)
47+ pb
48+ sentDyn <-
49+ holdDyn False $
50+ leftmost
51+ [ True <$ saveEv
52+ , False <$ respEv
53+ ]
54+ let successEv =
55+ respEv `fforMaybe` \case
56+ (dep, commandResponse -> Just Success {}) -> Just dep
57+ _ -> Nothing
58+ closeEv = leftmost [closeEv', successEv $> ()]
59+ enabledDyn = zipDynWith (&&) (not <$> sentDyn) (isJust <$> deploymentMDyn)
60+ pure (successEv, closeEv)
5861
5962-- | The header of sidebar contains control buttons: \"Save\" and \"Close\".
6063newDeploymentPopupHeader ::