git.iko.soy/typeable/octopod
on master help sign in
Restore button (#57)
commitfb4c2bc6025f17e06848f26bd7655a2e0f20b1e0 authorNikita <anisimoff.nikita@gmail.com> dateFri 3 Jul 2020, 18:48 (6 years ago) parent97b91c9
4 files changed+42−24
dm-frontend/src/Page/ClassicPopup.hs+1 dm-frontend/src/Page/Deployment.hs+10−6 dm-frontend/src/Page/Deployments.hs+19−13 dm-frontend/src/Page/Utils.hs+12−5
dm-frontend/src/Page/ClassicPopup.hs+1
@@ -52,3 +52,4 @@ confirmDeletePopup showEv txt = do
5252 buttonClass "dialog__action button--secondary button" "Cancel"
5353 pure (okEv, cancelEv)
5454 classicPopup showEv body
55+
dm-frontend/src/Page/Deployment.hs+10−6
@@ -42,8 +42,7 @@ deploymentWidget updEv dfi = do
4242 let
4343 (okEv, _errEv) =
4444 processResp (dfi ^. dfiName) respEv
45− dfiDyn' <- holdDyn dfi okEv
46− dfiDyn <- holdUniqDyn dfiDyn'
45+ dfiDyn <- holdDyn dfi okEv
4746 editEv <- deploymentHead dfiDyn
4847 stagingNotification never
4948 deploymentBody updEv dfiDyn
@@ -55,11 +54,16 @@ deploymentHead
5554 -> m (Event t DeploymentFullInfo)
5655deploymentHead dfiDyn =
5756 divClass "page__head" $ do
58− elClass "h1" "page__heading title" $ dynText $ dfiDyn <^.> dfiName . coerced
57+ let dname = dfiDyn <^.> dfiName . coerced
58+ elClass "h1" "page__heading title" $ dynText dname
5959 editEvEv <- dyn $ dfiDyn <^.> field @"archived" <&> \case
60− True -> do
61− elClass "a" "page__action button button--secondary button--restore classic-popup-handler" $
62− text "Recover from archive"
60+ True -> mdo
61+ btnEnabledDyn <- holdDyn True $ False <$ btnEv
62+ btnEv <- buttonClassEnabled
63+ "page__action button button--secondary button--restore classic-popup-handler"
64+ "Recover from archive"
65+ btnEnabledDyn
66+ void $ restoreEndpoint (Right . coerce <$> dname) btnEv
6367 pure never
6468 False -> do
6569 (editEl, _) <- elClass' "a" "page__action button button--edit popup-handler" $
dm-frontend/src/Page/Deployments.hs+19−13
@@ -206,13 +206,14 @@ activeDeploymentWidget clickedEv dname dDyn' = do
206206 el "br" blank
207207 text $ coerce dname <> " staging?"
208208 void $ deleteEndpoint (constDyn $ Right $ dname) delEv
209− blank
210209 let route = DashboardRoute :/ Just dname
211210 setRoute $ route <$ domEvent Click linkEl
212− blank
213211
214212archivedDeploymentsWidget
215− :: MonadWidget t m
213+ ::
214+ ( MonadWidget t m
215+ , RouteToUrl (R Routes) m
216+ , SetRoute t (R Routes) m )
216217 => Event t ClickedElement
217218 -> Dynamic t
218219 (Map DeploymentName
@@ -229,7 +230,7 @@ archivedDeploymentsWidget clickedEv dsDyn = do
229230 let emptyDyn' = L.null <$> dsDyn
230231 emptyDyn <- holdUniqDyn emptyDyn'
231232 dyn_ $ emptyDyn <&> \case
232− False -> void $ list dsDyn (archivedDeploymentWidget clickedEv)
233+ False -> void $ listWithKey dsDyn (archivedDeploymentWidget clickedEv)
233234 True -> emptyTableBody $ noDeploymentsWidget
234235
235236tableHeader :: MonadWidget t m => m ()
@@ -250,14 +251,18 @@ tableHeader = do
250251 elClass "span" "visuallyhidden" $ text "Menu"
251252
252253archivedDeploymentWidget
253− :: MonadWidget t m
254+ ::
255+ ( MonadWidget t m
256+ , RouteToUrl (R Routes) m
257+ , SetRoute t (R Routes) m )
254258 => Event t ClickedElement
259+ -> DeploymentName
255260 -> Dynamic t (DeploymentFullInfo, Dynamic t (Maybe DeploymentStatus))
256261 -> m ()
257−archivedDeploymentWidget clickedEv dDyn' = do
262+archivedDeploymentWidget clickedEv dname dDyn' = do
258263 dDyn <- holdUniqDyn $ fst <$> dDyn'
259264 dyn_ $ ffor dDyn $ \DeploymentFullInfo{..} -> do
260− el "tr" $ do
265+ (linkEl, _) <- el' "tr" $ do
261266 el "td" $ do
262267 text $ coerce $ deployment ^. field @"name"
263268 divClass "status status--archived" $ text "Archived"
@@ -277,12 +282,13 @@ archivedDeploymentWidget clickedEv dDyn' = do
277282 ( "class" =: "drop__handler"
278283 <> "type" =: "button"
279284 <> "id" =: elId) $ text "Actions"
280− body = elAttr "button"
281− ( "class" =: "action action--delete"
282− <> "type" =: "button") $ do
283− text "Restore from archive"
284− pure never
285− dropdownWidget' clickedEv btn body
285+ body = do
286+ btnArcEv <- buttonClass "action action--delete" "Restore from archive"
287+ pure btnArcEv
288+ btnEv <- dropdownWidget' clickedEv btn body
289+ void $ restoreEndpoint (constDyn $ Right $ dname) btnEv
290+ let route = DashboardRoute :/ Just dname
291+ setRoute $ route <$ domEvent Click linkEl
286292
287293overridesWidget :: MonadWidget t m => EnvPairs -> m ()
288294overridesWidget envs = divClass "listing" $ do
dm-frontend/src/Page/Utils.hs+12−5
@@ -42,17 +42,24 @@ dropdownWidget'
4242dropdownWidget' clickedEl btn body = mdo
4343 clickInsideEv <- performEvent $ ffor clickedEl $ \(ClickedElement clicked) ->
4444 DOM.contains (_element_raw btnEl) clicked
45− openedDyn <- foldDyn switchState False
46− $ leftmost [ clickInsideEv, True <$ domEvent Click btnEl ]
45+ openedDyn <- foldDyn switchState False $ leftmost
46+ [ traceEvent "1" (clickInsideEv)
47+ , traceEvent "2" (False <$ domEvent Click bodyEl)
48+ , traceEvent "3" (True <$ domEvent Click btnEl) ]
4749 let
48− switchState ev cur = ev && not cur
50+ -- switchState ev cur = ev && not cur
51+ switchState True True = False
52+ switchState True False = True
53+ switchState False True = False
54+ switchState False False = False
4955 wrapperClassDyn = ffor openedDyn $ \case
5056 True -> "class" =: "drop drop--actions drop--expanded"
5157 False -> "class" =: "drop drop--actions"
52− (btnEl, wEv) <- elDynAttrWithStopPropagationEvent' Click
58+ (btnEl, (bodyEl, wEv)) <- elDynAttrWithStopPropagationEvent' Click
5359 "div" wrapperClassDyn $ do
5460 btn
55− divClass "drop__dropdown" body
61+ elDynAttrWithStopPropagationEvent' Click "div"
62+ (constDyn $ "class" =: "drop__dropdown") body
5663 pure wEv
5764
5865showT :: Show a => a -> Text