Untitled diff
module Main exposing (view, Msg, update)
module Buttonslist exposing (view, Msg, update)
import Buttonslist as Imported
import Buttons as Imported
import Html exposing (beginnerProgram, div, button, text, pre)
import Html exposing (beginnerProgram, div, button, text, pre)
import Html.Events exposing (onClick)
import Html.Events exposing (onClick)
import Html.Attributes exposing (style)
import Html.Attributes exposing (style)
import Array
import Array
defaultIfNothing =
defaultIfNothing =
    []
    0
main =
main =
    beginnerProgram
    beginnerProgram
        { model = []
        { model = []
        , view = view
        , view = view
        , update = update
        , update = update
        }
        }
view model =
view model =
    div [ style [ ( "margin", "10px" ) ] ]
    div [ style [ ( "margin", "10px" ) ] ]
        [ button [ onClick (Add) ] [ text "Add" ]
        [ button [ onClick (Add) ] [ text "Add" ]
        , div []
        , div []
            (List.indexedMap
            (List.indexedMap
                (\index element ->
                (\index element ->
                    div
                    div
                        [ style
                        [ style
                            [ ( "border", "1px solid #aaa" )
                            [ ( "border", "1px solid #aaa" )
                            , ( "background-color", "#eee" )
                            , ( "background-color", "#eee" )
                            , ( "display", "inline-block" )
                            , ( "display", "inline-block" )
                            , ( "padding", "10px" )
                            , ( "padding", "10px" )
                            , ( "margin", "10px" )
                            , ( "margin", "10px" )
                            ]
                            ]
                        ]
                        ]
                        [ Html.map
                        [ Html.map
                            (MsgFromChild index)
                            (MsgFromChild index)
                            (div
                            (div
                                []
                                []
                                [ Imported.view element ]
                                [ Imported.view element ]
                            )
                            )
                        , button [ onClick (Remove index) ] [ text "Remove" ]
                        , button [ onClick (Remove index) ] [ text "Remove" ]
                        ]
                        ]
                )
                )
                model
                model
            )
            )
        , pre [] [ text ("model: " ++ (toString model)) ]
        , pre [] [ text ("model: " ++ (toString model)) ]
        ]
        ]
type Msg
type Msg
    = MsgFromChild Int Imported.Msg
    = MsgFromChild Int Imported.Msg
    | Remove Int
    | Remove Int
    | Add
    | Add
getElementFromList list index default =
getElementFromList list index default =
    list
    list
        |> Array.fromList
        |> Array.fromList
        |> Array.get index
        |> Array.get index
        |> replaceMaybeWithDefault default
        |> replaceMaybeWithDefault default
replaceMaybeWithDefault default element =
replaceMaybeWithDefault default element =
    case element of
    case element of
        Nothing ->
        Nothing ->
            default
            default
        Just val ->
        Just val ->
            val
            val
setElementIntoList list index element =
setElementIntoList list index element =
    list
    list
        |> Array.fromList
        |> Array.fromList
        |> Array.set index element
        |> Array.set index element
        |> Array.toList
        |> Array.toList
removeElementFromList index list =
removeElementFromList index list =
    (List.take index list) ++ (List.drop (index + 1) list)
    (List.take index list) ++ (List.drop (index + 1) list)
update msg model =
update msg model =
    case msg of
    case msg of
        MsgFromChild index buttons_Msg ->
        MsgFromChild index buttons_Msg ->
            let
            let
                oldButtons =
                oldButtons =
                    getElementFromList model index defaultIfNothing
                    getElementFromList model index defaultIfNothing
                newButtons =
                newButtons =
                    Imported.update buttons_Msg oldButtons
                    Imported.update buttons_Msg oldButtons
            in
            in
                setElementIntoList model index newButtons
                setElementIntoList model index newButtons
        Remove index ->
        Remove index ->
            removeElementFromList index model
            removeElementFromList index model
        Add ->
        Add ->
            List.append model [ defaultIfNothing ]
            List.append model [ defaultIfNothing ]