@@ -376,13 +376,11 @@ regularToDropdownViewEventType en r = case en of
376376-- The first argument gives the initial value of the dropdown; if it is not present in the map of options provided, it will be added with an empty string as its text
377377dropdown :: forall k t m. (DomBuilder t m, MonadFix m, MonadHold t m, PerformEvent t m, MonadIO (Performable m), MonadIO m, TriggerEvent t m, PostBuild t m, DomBuilderSpace m ~ GhcjsDomSpace, Ord k) => k -> Dynamic t (Map k Text) -> DropdownConfig t k -> m (Dropdown t k)
378378dropdown k0 options (DropdownConfig setK attrs) = do
379− optionsWithAddedKeys <- combineDyn Map.union options <=< foldDyn Map.union (k0 =: "") $ fmap (=: "") setK
379+ optionsWithAddedKeys <- fmap (zipDynWith Map.union options) $ foldDyn Map.union (k0 =: "") $ fmap (=: "") setK
380380 defaultKey <- holdDyn k0 setK
381− (indexedOptions, ixKeys) <- splitDyn <=< forDyn optionsWithAddedKeys $ \os ->
382− let xs = map (\(ix, (k, v)) -> ((ix, k), ((ix, k), v))) $ zip [0::Int ..] $ Map.toList os
383− ixVals = Map.fromList $ map snd xs
384− ixKeys = Bimap.fromList $ map fst xs
385− in (ixVals, ixKeys)
381+ let (indexedOptions, ixKeys) = splitDynPure $ ffor optionsWithAddedKeys $ \os ->
382+ let xs = fmap (\(ix, (k, v)) -> ((ix, k), ((ix, k), v))) $ zip [0::Int ..] $ Map.toList os
383+ in (Map.fromList $ map snd xs, Bimap.fromList $ map fst xs)
386384 modifyAttrs <- dynamicAttributesToModifyAttributes attrs
387385 let cfg = (def :: ElementConfig EventResult t m)
388386 { _elementConfig_modifyAttributes = modifyAttrs
@@ -402,18 +400,18 @@ dropdown k0 options (DropdownConfig setK attrs) = do
402400 let optionAttrs = fmap (\dk -> "value" =: T.pack (show ix) <> if dk == k then "selected" =: "selected" else mempty) defaultKey
403401 elDynAttr "option" optionAttrs $ dynText v
404402 let e = castToHTMLSelectElement $ _element_raw eRaw
405− performEvent_ $ HTMLSelectElement.setValue e . Just . show <$> attachDynWithMaybe (flip Bimap.lookupR) ixKeys setK
403+ performEvent_ $ HTMLSelectElement.setValue e . Just . show <$> attachPromptlyDynWithMaybe (flip Bimap.lookupR) ixKeys setK
406404 let lookupSelected ks value = do
407405 v <- value
408406 key <- T.readMaybe v
409407 Bimap.lookup key ks
410− eChange <- attachDynWith lookupSelected ixKeys <$> wrapDomEvent e (`on` Element.change) (HTMLSelectElement.getValue e)
408+ eChange <- attachPromptlyDynWith lookupSelected ixKeys <$> wrapDomEvent e (`on` Element.change) (HTMLSelectElement.getValue e)
411409 let readKey keys mk = fromMaybe k0 $ do
412410 k <- mk
413411 guard $ Bimap.memberR k keys
414412 return k
415− dValue <- combineDyn readKey ixKeys <=< holdDyn (Just k0) $ leftmost [eChange, fmap Just setK]
416− return $ Dropdown dValue (attachDynWith readKey ixKeys eChange)
413+ dValue <- fmap (zipDynWith readKey ixKeys) $ holdDyn (Just k0) $ leftmost [eChange, fmap Just setK]
414+ return $ Dropdown dValue (attachPromptlyDynWith readKey ixKeys eChange)
417415
418416concat <$> mapM makeLenses
419417 [ ''TextAreaConfig