aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordan <[email protected]>2021-04-21 07:09:55 +0200
committerdan <[email protected]>2021-04-21 07:09:55 +0200
commit03799564eb0206130f771263ef4efa4c210cc81c (patch)
tree82fd69a3c32d48ef3c6359ad7cda6fa5304c942e
parent2784674ac1efc97348b4e7e2082628e08ef6b7c1 (diff)
downloadbizexp-03799564eb0206130f771263ef4efa4c210cc81c.tar.gz
bizexp-03799564eb0206130f771263ef4efa4c210cc81c.tar.bz2
bizexp-03799564eb0206130f771263ef4efa4c210cc81c.zip
add elm-client
-rw-r--r--elm-client/.gitignore4
-rw-r--r--elm-client/elm.json27
-rw-r--r--elm-client/src/Main.elm91
3 files changed, 122 insertions, 0 deletions
diff --git a/elm-client/.gitignore b/elm-client/.gitignore
new file mode 100644
index 0000000..8b631e7
--- /dev/null
+++ b/elm-client/.gitignore
@@ -0,0 +1,4 @@
+# elm-package generated files
+elm-stuff
+# elm-repl generated files
+repl-temp-*
diff --git a/elm-client/elm.json b/elm-client/elm.json
new file mode 100644
index 0000000..1eb43b4
--- /dev/null
+++ b/elm-client/elm.json
@@ -0,0 +1,27 @@
+{
+ "type": "application",
+ "source-directories": [
+ "src"
+ ],
+ "elm-version": "0.19.1",
+ "dependencies": {
+ "direct": {
+ "elm/browser": "1.0.2",
+ "elm/core": "1.0.5",
+ "elm/html": "1.0.0",
+ "elm/http": "2.0.0",
+ "elm/json": "1.1.3"
+ },
+ "indirect": {
+ "elm/bytes": "1.0.8",
+ "elm/file": "1.0.5",
+ "elm/time": "1.0.0",
+ "elm/url": "1.0.0",
+ "elm/virtual-dom": "1.0.2"
+ }
+ },
+ "test-dependencies": {
+ "direct": {},
+ "indirect": {}
+ }
+}
diff --git a/elm-client/src/Main.elm b/elm-client/src/Main.elm
new file mode 100644
index 0000000..53a7902
--- /dev/null
+++ b/elm-client/src/Main.elm
@@ -0,0 +1,91 @@
+module Main exposing (main)
+
+import Browser
+import Http
+import Html exposing (Html, Attribute, div, text, table, tr, td, th, node, h2)
+import Html.Attributes exposing (href, rel, class)
+import Html.Events exposing (onClick, onInput)
+import Maybe exposing (withDefault)
+import Json.Decode as De
+import Json.Encode as En
+import Dict exposing (Dict)
+--https://elmprogramming.com/creating-a-new-post.html
+
+serverUrl : String
+serverUrl = "http://localhost:3000"
+
+main = Browser.element { init = init, update = update, view = view, subscriptions = subscriptions}
+
+type alias Name = String
+type alias TableHeading = String
+type alias TableRow = Dict TableHeading String
+type Table = Table Name (List TableHeading) (List TableRow)
+type Model = Model Table
+
+type Msg = GotResp (Result Http.Error Table)
+
+init : () -> (Model, Cmd Msg)
+init _ =
+ let
+ m = Model (Table "" [] [])
+ c = getTable
+ in (m, c)
+
+update : Msg -> Model -> (Model, Cmd Msg)
+update msg (Model table) =
+ case msg of
+ GotResp (Ok (t1)) ->
+ (Model t1, Cmd.none)
+ GotResp (Err error) ->
+ let dummy = Debug.log "FAILED" error
+ in (Model table, Cmd.none)
+
+view : Model -> Html Msg
+view (Model (Table name headings rows)) =
+ div [] [
+ stylesheet,
+ template [
+ h2 [] [text name],
+ table [] ((renderTh headings)::(renderRows headings rows))
+ ]
+ ]
+
+template : List (Html Msg) -> Html Msg
+template xs = div [class "row"] [div [class "col s8 offset-s2"] xs]
+
+renderTh : List TableHeading -> Html Msg
+renderTh = tr [] << (List.map (\x -> th [] <| [text x]))
+
+renderRows : List TableHeading -> List TableRow -> List(Html Msg)
+renderRows hs = List.map (\xs -> tr [] (
+ List.map (\k ->
+ td [] [text <| withDefault "-" (Dict.get k xs)]
+ ) hs ))
+
+stylesheet : Html Msg
+stylesheet = node "link" [rel "stylesheet", href "https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"] []
+
+subscriptions : Model -> Sub Msg
+subscriptions model =
+ Sub.none
+
+getTable : Cmd Msg
+getTable =
+ Http.get
+ { url = serverUrl ++ "/t/dummy"
+ , expect = Http.expectJson GotResp decTable
+ }
+
+decTableHeading : De.Decoder TableHeading
+decTableHeading = De.string
+
+decTableRow : De.Decoder TableRow
+decTableRow = De.dict <| De.string
+
+
+decTable : De.Decoder Table
+decTable =
+ De.map3 Table
+ (De.field "table_name" De.string)
+ (De.field "table_headings" (De.list <| decTableHeading))
+ (De.field "table_rows" (De.list <| decTableRow))