summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Main.elm73
-rw-r--r--src/Types.elm31
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
+ }