> 2. Figure out a state diagram describing the behavior of your UI. I find this 
> is tending to align very well with one state for each element of the UI that 
> can change. For example, something shown or hidden, or something shown in one 
> state or another. Turn the state diagram into a Type - the sum.

Thank you very much. Let me see if I understand you right in my context. The 
attached is the interface to a list of animals. 

The first animal is in the Compact state, the second in Expanded, and the last 
in Editable. Would you be suggesting a `Mode` like the following?

type Mode
  = Compact Animal
  | Expanded Animal
  | Editable Animal FormData

I had problems with that. I too often had view code that had to know both that 
it was given `FormData` and also had to take the whole `Mode` as an argument - 
or had to assemble a Mode from the pieces they were given. (Unfortunately the 
details are fuzzy in my memory.)

(Though now that I write, maybe it’s that I made a fundamental mistake. I 
leaned toward messages containing, as their “payload”, an entire structure 
rather than just some id (of an animal) and the data that changed. For example, 
if you delete a tag (click on the X in “aggressive”, for example), the Msg that 
gets sent is:

    onDelete name = WithForm form (DeleteTag name)

https://github.com/marick/eecrit/blob/master/web/elm/Animals/View/Form.elm#L79

Maybe that decision is making it too hard to separate out the small relevant 
pieces - because, for example, it pushes me to cases where code might need all 
of the `Mode`, the `Animal`, and the `FormData`. 

Eek. Big change, if so.)

Hmm. Given that one part of the product will be editing procedure documents as 
Markdown, I should advance that feature, make it a separate app, and steal your 
outline.

-- 
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.

Reply via email to