about summary refs log tree commit diff
path: root/client/src/Admin.elm
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-07-31T17·32+0100
committerWilliam Carroll <wpcarro@gmail.com>2020-07-31T17·57+0100
commit421c71c8922731563771ed75be7f28c9a559c068 (patch)
treef7723ade399bb02a638fa3df9371cdb072262eb5 /client/src/Admin.elm
parent29a00dc571b53b08064915c34e0d951467b6f1e4 (diff)
Support a basic client-side login flow
I will need to remove some of the baggage like:

- Scrub any copy about restaurants
- delete Restaurant.elm
- Change Owner.elm -> Manager.elm
Diffstat (limited to 'client/src/Admin.elm')
-rw-r--r--client/src/Admin.elm99
1 files changed, 99 insertions, 0 deletions
diff --git a/client/src/Admin.elm b/client/src/Admin.elm
new file mode 100644
index 000000000000..3c0f221d93ed
--- /dev/null
+++ b/client/src/Admin.elm
@@ -0,0 +1,99 @@
+module Admin exposing (render)
+
+import Html exposing (..)
+import Html.Attributes exposing (..)
+import Html.Events exposing (..)
+import RemoteData
+import State
+import Tailwind
+import UI
+import Utils
+
+
+allUsers : State.Model -> Html State.Msg
+allUsers model =
+    case model.users of
+        RemoteData.NotAsked ->
+            UI.absentData { handleFetch = State.AttemptGetUsers }
+
+        RemoteData.Loading ->
+            UI.paragraph "Loading..."
+
+        RemoteData.Failure e ->
+            UI.paragraph ("Error: " ++ Utils.explainHttpError e)
+
+        RemoteData.Success xs ->
+            div []
+                [ UI.header 3 "Admins"
+                , users xs.admin
+                , UI.header 3 "Managers"
+                , users xs.manager
+                , UI.header 3 "Users"
+                , users xs.user
+                ]
+
+
+users : List String -> Html State.Msg
+users xs =
+    ul []
+        (xs
+            |> List.map
+                (\x ->
+                    li [ [ "py-4", "flex" ] |> Tailwind.use |> class ]
+                        [ p [ [ "flex-1" ] |> Tailwind.use |> class ] [ text x ]
+                        , div [ [ "flex-1" ] |> Tailwind.use |> class ]
+                            [ UI.simpleButton
+                                { label = "Delete"
+                                , handleClick = State.AttemptDeleteUser x
+                                }
+                            ]
+                        ]
+                )
+        )
+
+
+render : State.Model -> Html State.Msg
+render model =
+    div
+        [ [ "container"
+          , "mx-auto"
+          , "text-center"
+          ]
+            |> Tailwind.use
+            |> class
+        ]
+        [ UI.header 2 "Welcome back!"
+        , UI.simpleButton
+            { label = "Logout"
+            , handleClick = State.AttemptLogout
+            }
+        , div []
+            [ UI.baseButton
+                { label = "Switch to users"
+                , handleClick = State.UpdateAdminTab State.Users
+                , enabled = not (model.adminTab == State.Users)
+                , extraClasses = []
+                }
+            ]
+        , case model.adminTab of
+            State.Users ->
+                allUsers model
+        , case model.logoutError of
+            Nothing ->
+                text ""
+
+            Just e ->
+                UI.errorBanner
+                    { title = "Error logging out"
+                    , body = Utils.explainHttpError e
+                    }
+        , case model.deleteUserError of
+            Nothing ->
+                text ""
+
+            Just e ->
+                UI.errorBanner
+                    { title = "Error attempting to delete user"
+                    , body = Utils.explainHttpError e
+                    }
+        ]