@@ -344,7 +344,7 @@ deploymentPopupBody ::
344344 m (Dynamic t (Maybe DeploymentUpdate))
345345deploymentPopupBody hReq defAppOv defDepOv errEv = mdo
346346 pb <- getPostBuild
347− (defDepEv, defApp, depCfgEv) <- deploymentConfigProgressiveComponents hReq deploymentOvsDyn
347+ (defDepEv, defApp, depCfgEv) <- deploymentConfigProgressiveComponents hReq deploymentOvsDynDebounced
348348 defAppM <- holdClearingWith defApp (unitEv deploymentOvsDyn)
349349 defDep <- holdDynMaybe defDepEv
350350 depKeys <- deploymentOverrideKeys pb >>= hReq
@@ -356,23 +356,26 @@ deploymentPopupBody hReq defAppOv defDepOv errEv = mdo
356356 Dynamic t [Text] ->
357357 Dynamic t (Maybe (DefaultConfig l)) ->
358358 Overrides l ->
359− m (Dynamic t (Overrides l), Dynamic t Bool)
359+ m (Dynamic t (Overrides l), Dynamic t (Overrides l), Dynamic t Bool)
360360 holdDCfg values dCfgDyn ovs = mdo
361361 ovsDyn <- holdDyn ovs ovsEv
362+ ovsDynDebounced <- holdDyn ovs ovsEvDebounced
362363 x <- attachDyn (current ovsDyn) dCfgDyn
363364 res <- dyn (x <&> \(ovs', dCfg) -> envVarsInput values dCfg ovs')
364− ovsEv <- switchHold never (fst <$> res) >>= debounce 0.5
365+ ovsEv <- switchHold never (fst <$> res)
366+ ovsEvDebounced <- debounce 2 ovsEv
365367 isValid <- join <$> holdDyn (pure True) (snd <$> res)
366− pure (ovsDyn, isValid)
368+ pure (ovsDyn, ovsDynDebounced, isValid)
367369
368370 depKeysDyn <- holdDyn [] depKeys
369− (deploymentOvsDyn, depValidDyn) <- deploymentSection "Deployment overrides" $ holdDCfg depKeysDyn defDep defDepOv
371+ (deploymentOvsDyn, deploymentOvsDynDebounced, depValidDyn) <-
372+ deploymentSection "Deployment overrides" $ holdDCfg depKeysDyn defDep defDepOv
370373
371374 appKeys <- waitForValuePromptly depCfgEv $ \deploymentCfg -> do
372375 pb' <- getPostBuild
373376 applicationOverrideKeys (pure $ Right deploymentCfg) pb' >>= hReq >>= immediateNothing
374377 appKeysDyn <- holdDyn [] $ catMaybes appKeys
375− (applicationOvsDyn, appValidDyn) <- deploymentSection "App overrides" $ holdDCfg appKeysDyn defAppM defAppOv
378+ (applicationOvsDyn, _, appValidDyn) <- deploymentSection "App overrides" $ holdDCfg appKeysDyn defAppM defAppOv
376379
377380 pure $ do
378381 depValid <- depValidDyn
@@ -388,6 +391,7 @@ deploymentPopupBody hReq defAppOv defDepOv errEv = mdo
388391 , deploymentOverrides = depCfg
389392 }
390393 else pure Nothing
394+
391395deploymentConfigProgressiveComponents ::
392396 MonadWidget t m =>
393397 RequestErrorHandler t m ->
@@ -520,7 +524,9 @@ validateWorkingOverrides ::
520524validateWorkingOverrides overrides =
521525 let (result, keyOccurrences :: MonoidalMap Text (Sum Int)) =
522526 flip runState mempty $ forM overrides \override@(WorkingOverrideKey _ key, value') -> do
523− modify (<> MM.singleton key (Sum 1))
527+ case value' of
528+ WorkingDeletedValue _ -> pure ()
529+ _ -> modify (<> MM.singleton key (Sum 1))
524530 pure . (override,) . mconcat $
525531 [ case MM.lookup key keyOccurrences of
526532 Just (Sum n)
@@ -623,19 +629,17 @@ performUserOverrideAction f i (UpdateValue v) = Endo $
623629 Just v' | v == v' -> WorkingDefaultValue v
624630 _ -> WorkingCustomValue v
625631 )
626−performUserOverrideAction f i (UpdateKey k) = Endo $ updateUniq i $ \(_, v) -> (WorkingOverrideKey t k, v)
627− where
628− t = case f >>= ($ k) of
629− Nothing -> CustomWorkingOverrideKey
630− Just _ -> DefaultWorkingOverrideKey
632+performUserOverrideAction _ i (UpdateKey k) = Endo $
633+ updateUniq i $
634+ \(_, v) -> (WorkingOverrideKey CustomWorkingOverrideKey k, v)
631635performUserOverrideAction f i DeleteOverride = Endo $ \m ->
632636 case f of
633637 Nothing -> updateUniq i (\(k, _) -> (k, WorkingDeletedValue Nothing)) m
634− Just f' -> case lookupUniq i m of
638+ Just _ -> case lookupUniq i m of
635639 Nothing -> m
636− Just (WorkingOverrideKey _ k, _) -> case f' k of
637− Nothing -> deleteUniq i m
638− Just v -> updateUniq i (const (WorkingOverrideKey DefaultWorkingOverrideKey k, WorkingDeletedValue (Just v))) m
640+ Just (WorkingOverrideKey DefaultWorkingOverrideKey k, _) ->
641+ updateUniq i (const (WorkingOverrideKey DefaultWorkingOverrideKey k, WorkingDeletedValue (f >>= ($ k)))) m
642+ Just (WorkingOverrideKey CustomWorkingOverrideKey _, _) -> deleteUniq i m
639643
640644holdDynMaybe :: (Reflex t, MonadHold t m) => Event t a -> m (Dynamic t (Maybe a))
641645holdDynMaybe ev = holdDyn Nothing $ fmapCheap Just ev