Hello everybody, I have a problem and I can't find a solution.
The code consist in 3 modules. *Main*, *ItemList* and *Form*
The *Main* is the glue and message broker of the app. The other two are a
list and a form to update the list.
The list has it's logic to fetch the results from an api, with all it's
internal events that gets routed through the update function of *Main* with
Cmd.map.
The form is exactly the same. With internal events to manage its state and
an add button to trigger an HTTP POST request to update the database.
Everything is great and separated. But the problem is the "ADD" button.
When I press it, I want to perform a post, and on the form event
UpdateSucceed I want to update the list!
Here is the relevant code of Main.elm
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
FormMsg formMsg ->
let
( updatedItem, formCmd ) =
Form.update formMsg model.newItem
in
( { model | newItem = updatedItem }
, Cmd.map FormMsg formCmd
)
ItemListMsg itemListMsg ->
let
( updatedList, itemListCmd ) =
ItemList.update itemListMsg model.items
in
( { model | items = updatedList }
, Cmd.map ItemListMsg itemListCmd
)
here is the update function of Form.elm
update : Msg -> Item -> ( Item, Cmd Msg )
update msg model =
case msg of
...
Add ->
( model, doAddItem model )
UpdateSucceed newItem ->
( initialModel, Cmd.none )
I searched through the posts and everybody is suggesting to change the
signature of the Form module update function, and return a third element,
the outgoing message. I could go for it, but I really struggling to
understand how to handle it in the Main update function, because one
command is handled by the elm runtime on every message that arrives to
update. I don't understand where I should manage this 2 different things to
do when UpdateSucceed is triggered on the form. Re initialize the model in
the form (clear the fields) and trigger an event that in some way gets
routed through the Main module to the ItemList module.
Any help is appreciated, this is a personal project, so I'm eager to learn
the most elegant way to handle this situation, and refactoring is not a
problem.
--
You received this message because you are subscribed to the Google Groups "Elm
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.