64 lines
1.1 KiB
Elm
64 lines
1.1 KiB
Elm
module Avatar exposing (Avatar, decoder, encode, src, toMaybeString)
|
|
|
|
import Asset
|
|
import Html exposing (Attribute)
|
|
import Html.Attributes
|
|
import Json.Decode as Decode exposing (Decoder)
|
|
import Json.Encode as Encode exposing (Value)
|
|
|
|
|
|
|
|
-- TYPES
|
|
|
|
|
|
type Avatar
|
|
= Avatar (Maybe String)
|
|
|
|
|
|
|
|
-- CREATE
|
|
|
|
|
|
decoder : Decoder Avatar
|
|
decoder =
|
|
Decode.map Avatar (Decode.nullable Decode.string)
|
|
|
|
|
|
|
|
-- TRANSFORM
|
|
|
|
|
|
src : Avatar -> Attribute msg
|
|
src (Avatar maybeUrl) =
|
|
Html.Attributes.src <|
|
|
if maybeUrl == Just "" then
|
|
resolveAvatarUrl Nothing
|
|
|
|
else
|
|
resolveAvatarUrl maybeUrl
|
|
|
|
|
|
resolveAvatarUrl : Maybe String -> String
|
|
resolveAvatarUrl maybeUrl =
|
|
case maybeUrl of
|
|
Just url ->
|
|
url
|
|
|
|
Nothing ->
|
|
"https://static.productionready.io/images/smiley-cyrus.jpg"
|
|
|
|
|
|
encode : Avatar -> Value
|
|
encode (Avatar maybeUrl) =
|
|
case maybeUrl of
|
|
Just url ->
|
|
Encode.string url
|
|
|
|
Nothing ->
|
|
Encode.null
|
|
|
|
|
|
toMaybeString : Avatar -> Maybe String
|
|
toMaybeString (Avatar maybeUrl) =
|
|
maybeUrl
|