bluedogtraining / bdt-elm / Toasters

Module to add Toasters to your app

Initialise and update


type Model

Add a Toasters.Model to your model.

type alias MyModel =
    { toasters : Toasters.Model
    }

init : Model

Add a Toasters.Model to your model.

myInitialModel : MyModel
myInitialModel =
    { toasters = Toasters.init
    }


type Msg

Add a Toasters.Msg to your Msg.

type MyMsg
    = ToastersMsg Toasters.Msg

update : Msg -> Model -> Model

Use in your update function.

myUpdate : Msg -> Model -> ( Model, Cmd Msg )
myUpdate msg model =
    case msg of
        ToastersMsg toastersMsg ->
            { model | toasters = Toasters.update toastersMsg model.toasters } ! []

merge : Model -> Model -> Model

Merge multiple toaster models into one. Useful when Return types that carry their own Toasters.Model want to merge back into the application Toasters.Model

{ appModel | toasters = Toasters.merge return.toasters appModel.toasters }

Subscription

subscription : Model -> Platform.Sub.Sub Msg

Add to your subscription function.

subscriptions : Model -> Sub Msg
subscriptions model =
    Sub.batch
        [ Toasters.subscription model.toasters |> Sub.map Msg.ToastersMsg
        ]

Add toasters

addGreen : String -> Model -> Model

Add to your subscription function.

myUpdate : Msg -> Model -> ( Model, Cmd Msg )
myUpdate msg model =
    case msg of
        SavedSuccessfully ->
            { model
                | isSaving = False
                , toasters = Toasters.addGreen "Data saved Successfully :)" model.toasters
            }
                ! []

addRed : String -> Model -> Model

Add to your subscription function.

myUpdate : Msg -> Model -> ( Model, Cmd Msg )
myUpdate msg model =
    case msg of
        SavingFailed ->
            { model
                | isSaving = False
                , toasters = Toasters.addRed "Data could not be saved :(" model.toasters
            }
                ! []

Add to your view

view : Model -> Html.Styled.Html Msg

Add to your view function.

div
    []
    [ Toasters.view model.toasters
        |> Html.map ToastersMsg
    , div
        []
        [ text "My Cool App" ]
    ]