Gizra/elm-editable-webdata/1.0.1

NOTE: this package is not compatible with Elm 0.19.1

Editable.WebData

An EditableWebData represents an Editable value, along with WebData.

EditableWebData is a wrapper type around Editable and WebData

It is used in order to keep track of the state of the Editable upon saving. That is, as we change the Editable value, and send it to the backend, we can keep track of their state (e.g. RemoteData.Success or RemoteData.Failure).

= EditableWebData (Editable a) (WebData ())

A wrapper for Editable, that allows provides the means to track saving back to the backend via WebData.

import Editable


view : EditableWebData String -> Html msg
view editableWebData =
    let
        value =
            Editable.WebData.toEditable |> Editable.value


        toWebData =
            Editable.WebData.toWebData
    in
    text <| "Editable value is: " ++ toString value ++ " with a WebDataValue of " ++ toString toWebData
create : a -> EditableWebData a

Creates a new EditableWebData.

This will create the EditableWebData with the default values ReadOnly for the Editable and NotAsked for the WebData, as those are the values you are likely to begin with. You can of course later updated it, for example:

import Editable
import RemoteData


-- Change the `Editable` value
Editable.WebData.create "old"
    |> Editable.WebData.map (Editable.edit)
    |> Editable.WebData.map (Editable.update "new")
    |> Editable.WebData.toEditable
    |> Editable.value --> "new"


-- Change the `WebData` state
Editable.WebData.create "original"
    |> Editable.WebData.state RemoteData.Loading
    |> Editable.WebData.toWebData --> RemoteData.Loading
map : (Editable a -> Editable a) -> EditableWebData a -> EditableWebData a

Maps function to the Editable.

import Editable


Editable.WebData.create "old"
    -- Convert to `Editable` and update the value in one go.
    |> Editable.WebData.map (Editable.edit >> Editable.map (always "new"))
    |> Editable.WebData.toEditable
    |> Editable.value --> "new"


Editable.WebData.create "old"
    -- Convert to `Editable` and update the value in one go.
    |> Editable.WebData.map (Editable.edit >> Editable.map (\val -> val ++ " is now new"))
    |> Editable.WebData.toEditable
    |> Editable.value --> "old is now new"
toEditable : EditableWebData a -> Editable a

Extracts the Editable value.

import Editable


Editable.WebData.create "new"
    |> Editable.WebData.toEditable --> Editable.ReadOnly "new"


Editable.WebData.create "old"
    |> Editable.WebData.map(Editable.edit)
    |> Editable.WebData.map(Editable.update "new")
    |> Editable.WebData.toEditable --> Editable.Editable "old" "new"
state : WebData () -> EditableWebData a -> EditableWebData a

Updates the WebData value.

For updating the value of the Editable itself, see the example of map.

import RemoteData


Editable.WebData.create "new"
    |> Editable.WebData.state RemoteData.Loading
    |> Editable.WebData.toWebData --> RemoteData.Loading


Editable.WebData.create "new"
    |> Editable.WebData.state (RemoteData.Success ())
    |> Editable.WebData.toWebData --> RemoteData.Success ()
toWebData : EditableWebData a -> WebData ()

Extracts the WebData value.

import RemoteData


Editable.WebData.create "new"
    |> Editable.WebData.toWebData --> RemoteData.NotAsked


Editable.WebData.create "new"
    |> Editable.WebData.state RemoteData.Loading
    |> Editable.WebData.toWebData --> RemoteData.Loading