Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nesting ui components and accessing global data in Elm

Tags:

elm

I have an elm app designed with the Elm Architecture in mind. I've used it for all the samples in the tutorial and they work fine. I have the following components

  • ContainerListView
  • ContainerView
  • AddressView
  • RegistrationView
  • ...

The ContainerView component is a very formatted div structure that is used to contain other views (but for now, only 1 at a time)

ContainerListView can contain multiple containerViews. It handles their presentation and positioning. You can think of it as an MDI surface

A menu from the main ui is used to add new container views to the container view list.

I'm presented with with three main questions. Two of them are

  • How do I create the components such that Container view can contain any other element is I pass in for example the init, update, and view functions and expect all things to be wired correctly? At the moment, the samle views I have are kinda hard-coded. They know exactly who the children is.

  • Some of the components require access to things like url, access token, etc. Does this always have to be passed in from main to the individual components or it can come from another source which will essentially be readonly and maybe updatable only from main?

I'm not sure if these two should be individual questions on their own. Any information on how to architect larger apps beyound hello world will also be appreciated.

like image 297
ritcoder Avatar asked Nov 09 '22 21:11

ritcoder


1 Answers

I'm working on something similar! Nested controls. I too have a container object which knows about all the types that it can handle, and has basically case statements to handle each type. So I can't drop in a new control type and expect it to handle it, that requires altering the container.

As far as I know elm doesn't have type classes, which would be how I might try to handle that kind of abstraction in haskell or purescript. There's more about that here:

https://github.com/elm-lang/elm-compiler/issues/38

and here:

https://github.com/elm-lang/elm-compiler/issues/1039

The upshot appears to be that they don't know how they want to solve that problem yet, so they haven't.

like image 140
Bzzt Avatar answered Dec 17 '22 17:12

Bzzt