mirror of
https://github.com/correl/elm-mdl.git
synced 2024-12-26 19:16:49 +00:00
tm
This commit is contained in:
parent
cfa48e874c
commit
0dfaaf2001
1 changed files with 56 additions and 17 deletions
|
@ -8,17 +8,6 @@ import Material.Button as Button
|
||||||
import Material.Style exposing (Style)
|
import Material.Style exposing (Style)
|
||||||
import Material.Textfield as Textfield
|
import Material.Textfield as Textfield
|
||||||
|
|
||||||
type Action model =
|
|
||||||
A (model -> (model, Effects (Action model)))
|
|
||||||
|
|
||||||
type alias Updater model action =
|
|
||||||
action -> model -> (model, Effects action)
|
|
||||||
|
|
||||||
|
|
||||||
update : Updater State (Action State)
|
|
||||||
update (A f) model =
|
|
||||||
f model
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
map1st : (a -> c) -> (a,b) -> (c,b)
|
map1st : (a -> c) -> (a,b) -> (c,b)
|
||||||
|
@ -29,6 +18,20 @@ map2nd : (b -> c) -> (a,b) -> (a,c)
|
||||||
map2nd f (x,y) = (x, f y)
|
map2nd f (x,y) = (x, f y)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
type alias Updater model action =
|
||||||
|
action -> model -> (model, Effects action)
|
||||||
|
|
||||||
|
|
||||||
|
type Action model =
|
||||||
|
A (model -> (model, Effects (Action model)))
|
||||||
|
|
||||||
|
|
||||||
|
update : Updater State (Action State)
|
||||||
|
update (A f) model =
|
||||||
|
f model
|
||||||
|
|
||||||
|
|
||||||
pack : Updater model action -> action -> Action model
|
pack : Updater model action -> action -> Action model
|
||||||
pack update action =
|
pack update action =
|
||||||
A ( \m -> map2nd (Effects.map (pack update)) (update action m) )
|
A ( \m -> map2nd (Effects.map (pack update)) (update action m) )
|
||||||
|
@ -78,11 +81,11 @@ embed :
|
||||||
Component submodel action a -> -- Given a "Component submodel ..."
|
Component submodel action a -> -- Given a "Component submodel ..."
|
||||||
(model -> States submodel) -> -- a getter
|
(model -> States submodel) -> -- a getter
|
||||||
(States submodel -> model -> model) -> -- a setter
|
(States submodel -> model -> model) -> -- a setter
|
||||||
Int -> -- an id for this instance
|
|
||||||
submodel -> -- an initial model for this instance
|
submodel -> -- an initial model for this instance
|
||||||
|
Int -> -- an id for this instance
|
||||||
Component model action a -- ... produce a "Component model ..."
|
Component model action a -- ... produce a "Component model ..."
|
||||||
|
|
||||||
embed component get set id model0 =
|
embed component get set model0 id =
|
||||||
let
|
let
|
||||||
get' model =
|
get' model =
|
||||||
Dict.get id (get model) |> Maybe.withDefault model0
|
Dict.get id (get model) |> Maybe.withDefault model0
|
||||||
|
@ -102,6 +105,19 @@ embed component get set id model0 =
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type alias Updater' model action action' =
|
||||||
|
action -> model -> (model, Effects action, action')
|
||||||
|
|
||||||
|
{-
|
||||||
|
observe : (action -> action') -> Updater model action -> Updater' model action action'
|
||||||
|
observe f update action model =
|
||||||
|
let
|
||||||
|
(model', effects) = update action model
|
||||||
|
in
|
||||||
|
(model', effects, f action)
|
||||||
|
-}
|
||||||
|
|
||||||
|
|
||||||
instance : ((Action State) -> action) -> Component State a b -> View State action b
|
instance : ((Action State) -> action) -> Component State a b -> View State action b
|
||||||
instance f component addr state =
|
instance f component addr state =
|
||||||
component.view
|
component.view
|
||||||
|
@ -114,13 +130,36 @@ f id =
|
||||||
embed buttonComponent .button (\x y -> { y | button = x}) id (Button.model True)
|
embed buttonComponent .button (\x y -> { y | button = x}) id (Button.model True)
|
||||||
-}
|
-}
|
||||||
|
|
||||||
|
type alias Ctor model model' action a =
|
||||||
|
model -> Int -> Component model' action a
|
||||||
|
|
||||||
|
|
||||||
|
type alias ButtonStates a =
|
||||||
|
{ a | button : States Button.Model }
|
||||||
|
|
||||||
|
|
||||||
|
mkButton : Ctor (Button.Model) (ButtonStates model') Button.Action (List Style -> List Html -> Html)
|
||||||
|
{-
|
||||||
|
: Button.Model
|
||||||
|
-> Int
|
||||||
|
-> Component
|
||||||
|
{ b | button : States Button.Model }
|
||||||
|
Button.Action
|
||||||
|
(List Style -> List Html -> Html)
|
||||||
|
-}
|
||||||
|
|
||||||
|
mkButton model0 =
|
||||||
|
embed buttonComponent .button (\x y -> {y | button = x}) model0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
buttonInstance : ((Action State) -> action) -> Int -> View State action (List Style -> List Html -> Html)
|
buttonInstance : ((Action State) -> action) -> Int -> View State action (List Style -> List Html -> Html)
|
||||||
buttonInstance f id =
|
buttonInstance f id =
|
||||||
embed buttonComponent .button (\x y -> { y | button = x}) id (Button.model True)
|
instance f (mkButton (Button.model True) id)
|
||||||
|> instance f
|
|
||||||
|
|
||||||
|
mkTextfield model0 =
|
||||||
|
embed textfieldComponent .textfield (\x y -> { y | textfield = x}) model0
|
||||||
|
|
||||||
textfieldInstance f id =
|
textfieldInstance f id =
|
||||||
embed textfieldComponent .textfield (\x y -> { y | textfield = x}) id (Textfield.model)
|
instance f (mkTextfield Textfield.model id)
|
||||||
|> instance f
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue