1module Management exposing (..)
2
3import Monocle.Lens exposing (Lens)
4
5
6
7-- 📣
8
9
10type alias Manager msg model =
11 model -> ( model, Cmd msg )
12
13
14
15-- 🔱
16
17
18{-| For working with nested models.
19
20 organize : Manager Msg NestedModel -> Manager Msg Model
21 organize =
22 { get = .nested
23 , set = \nested ui -> { ui | nested = nested }
24 }
25 |> Monocle.Lens.Lens
26 |> Management.organize
27
28 update : Nested.Msg -> Manager Msg Model
29 update msg =
30 case msg of
31 NestedMsg ->
32 organize handleNestedMsg
33
34-}
35organize :
36 Lens parent nested
37 -> Manager msg nested
38 -> Manager msg parent
39organize lens manager parent =
40 parent
41 |> lens.get
42 |> manager
43 |> Tuple.mapFirst (\nested -> lens.set nested parent)