Search code examples
haskellfrpreflexobelisk

How to set input value to current day in reflex?


I am using reflex-platform with obelisk. This is my frontend code to get the current date

pb <- getPostBuild
postBuildTime <- performEvent $ pb $> liftIO getCurrentTime
let today = Text.pack . formatTime defaultTimeLocale "%F" <$> postBuildTime

I can confirm that this works by putting

dynText =<< holdDyn "loading" today

which does not even display "loading" for a split second but instead shows "2021-03-26" as expected in the browser (Google Chrome).

However, trying to put the today event into an <input> doesn't work. This is the code:

foo <- inputElement $ def & inputElementConfig_setValue .~ today

The <input> stays blank.

Even weirder: In my actual code the <input> has an initial value via inputElementConfig_initialValue .~ "BAAAR", which doesn't show either. Yet a dynamic text created like

dynText =<< holdDyn "" foo

DOES show "BAAAR" for a split second.


And to calm any paranoia, I tested the inputElementConfig_setValue with a simple button, which worked fine. I.e. I can set the value of <input> by clicking on a button.

So the postBuildTime event works and the inputElementConfig_setValue works, but the combination of the two leaves the <input> blank.

EDIT

Minimal example including instructions on how to run and screenshot of the result:

https://github.com/rubenmoor/reflex-bug-pbtime


Solution

  • https://github.com/reflex-frp/reflex-dom/commit/93f0f4bd00e1dc871d193d7d53d5d7f2dbb518af

    Looks like this was a bug, that has been fixed in reflex-dom.