diff options
| author | Jan Tuomi <jan.tuomi@valuemotive.com> | 2021-10-29 11:15:12 +0300 |
|---|---|---|
| committer | Jan Tuomi <jan.tuomi@valuemotive.com> | 2021-10-29 11:15:12 +0300 |
| commit | d0b6988a1a49ae0966e887e892508f2afc12bc6a (patch) | |
| tree | 3dd4148672d623bb7ec287aed757866d5f97d4b6 /src | |
Initial commit
Diffstat (limited to 'src')
| -rw-r--r-- | src/Main.elm | 73 | ||||
| -rw-r--r-- | src/Types.elm | 31 |
2 files changed, 104 insertions, 0 deletions
diff --git a/src/Main.elm b/src/Main.elm new file mode 100644 index 0000000..54352d6 --- /dev/null +++ b/src/Main.elm @@ -0,0 +1,73 @@ +module Main exposing (..) + +import Browser exposing (Document) +import Browser.Navigation exposing (Key) +import Html.Styled exposing (..) +import Types exposing (DisplayableError(..), Model, Msg(..)) +import Url exposing (Url) + + +main : Program () Model Msg +main = + Browser.application + { init = init + , view = view + , update = update + , subscriptions = \_ -> Sub.none + , onUrlRequest = \_ -> NoOp + , onUrlChange = \_ -> NoOp + } + + + +-- INIT + + +init : () -> Url -> Key -> ( Model, Cmd Msg ) +init _ _ _ = + ( { posts = + [ { id = "123" + , content = "foobar" + , author = + { id = "456" + , name = "George Technoman" + } + } + ] + , displayError = NoError + } + , Cmd.none + ) + + + +-- UPDATE + + +update : Msg -> Model -> ( Model, Cmd Msg ) +update msg model = + case msg of + NoOp -> + ( model, Cmd.none ) + + FetchPostsSuccess posts -> + ( { model | posts = posts }, Cmd.none ) + + FetchPostsFailure error -> + ( { model | displayError = error }, Cmd.none ) + + + +-- VIEW + + +view : Model -> Document Msg +view model = + { title = "Shoob book" + , body = [ body model ] |> List.map toUnstyled + } + + +body : Model -> Html Msg +body model = + main_ [] (List.map (\post -> div [] [ text post.id ]) model.posts) diff --git a/src/Types.elm b/src/Types.elm new file mode 100644 index 0000000..de1cccf --- /dev/null +++ b/src/Types.elm @@ -0,0 +1,31 @@ +module Types exposing (..) + + +type alias Model = + { posts : List Post + , displayError : DisplayableError + } + + +type Msg + = NoOp + | FetchPostsSuccess (List Post) + | FetchPostsFailure DisplayableError + + +type DisplayableError + = Error String + | NoError + + +type alias Author = + { id : String + , name : String + } + + +type alias Post = + { id : String + , content : String + , author : Author + } |
