From 7cc290135a904584b34c95e3aa12ee63cecc8181 Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Thu, 26 Nov 2020 23:53:31 +0100 Subject: [PATCH] Show currently logged in user Closes: #329 --- modules/webapp/src/main/elm/App/Data.elm | 3 + modules/webapp/src/main/elm/App/Update.elm | 24 ++++++- modules/webapp/src/main/elm/App/View.elm | 67 ++++++++++++------- modules/webapp/src/main/elm/Data/Flags.elm | 10 +++ .../main/elm/Page/CollectiveSettings/View.elm | 29 +++++++- 5 files changed, 106 insertions(+), 27 deletions(-) diff --git a/modules/webapp/src/main/elm/App/Data.elm b/modules/webapp/src/main/elm/App/Data.elm index 8be4d15f..e977743a 100644 --- a/modules/webapp/src/main/elm/App/Data.elm +++ b/modules/webapp/src/main/elm/App/Data.elm @@ -43,6 +43,7 @@ type alias Model = , newInviteModel : Page.NewInvite.Data.Model , itemDetailModel : Page.ItemDetail.Data.Model , navMenuOpen : Bool + , userMenuOpen : Bool , subs : Sub Msg , uiSettings : UiSettings } @@ -89,6 +90,7 @@ init key url flags_ settings = , newInviteModel = Page.NewInvite.Data.emptyModel , itemDetailModel = Page.ItemDetail.Data.emptyModel , navMenuOpen = False + , userMenuOpen = False , subs = Sub.none , uiSettings = settings } @@ -142,6 +144,7 @@ type Msg | LogoutResp (Result Http.Error ()) | SessionCheckResp (Result Http.Error AuthResult) | ToggleNavMenu + | ToggleUserMenu | GetUiSettings UiSettings diff --git a/modules/webapp/src/main/elm/App/Update.elm b/modules/webapp/src/main/elm/App/Update.elm index 47f0ecdb..ceb24014 100644 --- a/modules/webapp/src/main/elm/App/Update.elm +++ b/modules/webapp/src/main/elm/App/Update.elm @@ -174,7 +174,29 @@ updateWithSub msg model = ( model, Page.goto check, Sub.none ) ToggleNavMenu -> - ( { model | navMenuOpen = not model.navMenuOpen } + ( { model + | navMenuOpen = not model.navMenuOpen + , userMenuOpen = + if not model.navMenuOpen then + False + + else + model.userMenuOpen + } + , Cmd.none + , Sub.none + ) + + ToggleUserMenu -> + ( { model + | userMenuOpen = not model.userMenuOpen + , navMenuOpen = + if not model.userMenuOpen then + False + + else + model.navMenuOpen + } , Cmd.none , Sub.none ) diff --git a/modules/webapp/src/main/elm/App/View.elm b/modules/webapp/src/main/elm/App/View.elm index 979a0f73..1c2f1ec0 100644 --- a/modules/webapp/src/main/elm/App/View.elm +++ b/modules/webapp/src/main/elm/App/View.elm @@ -1,6 +1,7 @@ module App.View exposing (view) import App.Data exposing (..) +import Data.Flags import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (onClick) @@ -16,7 +17,6 @@ import Page.Queue.View import Page.Register.View import Page.Upload.View import Page.UserSettings.View -import Util.Maybe view : Model -> Html Msg @@ -197,10 +197,51 @@ loginInfo : Model -> Html Msg loginInfo model = div [ class "right menu" ] (case model.flags.account of - Just _ -> - [ div + Just acc -> + [ a + [ class "ui dropdown icon link item" + , href "#" + , onClick ToggleUserMenu + , title ("Logged in as " ++ Data.Flags.accountString acc) + ] + [ i [ class "user alternate icon" ] [] + , div + [ classList + [ ( "left menu", True ) + , ( "transition visible", model.userMenuOpen ) + , ( "transition hidden", not model.userMenuOpen ) + ] + ] + [ div [ class "header" ] + [ i [ class "user outline icon" ] [] + , Data.Flags.accountString acc |> text + ] + , div [ class "ui divider" ] [] + , menuEntry model + CollectiveSettingPage + [ i [ class "users circle icon" ] [] + , text "Collective Profile" + ] + , menuEntry model + UserSettingPage + [ i [ class "user circle icon" ] [] + , text "User Profile" + ] + , div [ class "divider" ] [] + , a + [ class "icon item" + , href "" + , onClick Logout + ] + [ i [ class "sign out icon" ] [] + , text "Logout" + ] + ] + ] + , a [ class "ui dropdown icon link item" , onClick ToggleNavMenu + , href "#" ] [ i [ class "ui bars icon" ] [] , div @@ -220,17 +261,6 @@ loginInfo model = , text "Items" ] , div [ class "divider" ] [] - , menuEntry model - CollectiveSettingPage - [ i [ class "users circle icon" ] [] - , text "Collective Profile" - ] - , menuEntry model - UserSettingPage - [ i [ class "user circle icon" ] [] - , text "User Profile" - ] - , div [ class "divider" ] [] , menuEntry model ManageDataPage [ i [ class "cubes icon" ] [] @@ -277,15 +307,6 @@ loginInfo model = [ i [ class "external link icon" ] [] ] ] - , div [ class "divider" ] [] - , a - [ class "icon item" - , href "" - , onClick Logout - ] - [ i [ class "sign-out icon" ] [] - , text "Logout" - ] ] ] ] diff --git a/modules/webapp/src/main/elm/Data/Flags.elm b/modules/webapp/src/main/elm/Data/Flags.elm index 279de096..74ec0c92 100644 --- a/modules/webapp/src/main/elm/Data/Flags.elm +++ b/modules/webapp/src/main/elm/Data/Flags.elm @@ -1,6 +1,7 @@ module Data.Flags exposing ( Config , Flags + , accountString , getToken , withAccount , withoutAccount @@ -42,3 +43,12 @@ withAccount flags acc = withoutAccount : Flags -> Flags withoutAccount flags = { flags | account = Nothing } + + +accountString : AuthResult -> String +accountString auth = + if auth.collective == auth.user then + auth.collective + + else + auth.collective ++ "/" ++ auth.user diff --git a/modules/webapp/src/main/elm/Page/CollectiveSettings/View.elm b/modules/webapp/src/main/elm/Page/CollectiveSettings/View.elm index c46aacfb..e0aefd5a 100644 --- a/modules/webapp/src/main/elm/Page/CollectiveSettings/View.elm +++ b/modules/webapp/src/main/elm/Page/CollectiveSettings/View.elm @@ -65,7 +65,7 @@ view flags settings model = viewUsers settings model Just InsightsTab -> - viewInsights model + viewInsights flags model Just SettingsTab -> viewSettings flags settings model @@ -77,14 +77,37 @@ view flags settings model = ] -viewInsights : Model -> List (Html Msg) -viewInsights model = +viewInsights : Flags -> Model -> List (Html Msg) +viewInsights flags model = + let + ( coll, user ) = + Maybe.map (\a -> ( a.collective, a.user )) flags.account + |> Maybe.withDefault ( "", "" ) + in [ h1 [ class "ui header" ] [ i [ class "chart bar outline icon" ] [] , div [ class "content" ] [ text "Insights" ] ] + , h2 [ class "ui sub header" ] + [ div [ class "ui horizontal list" ] + [ div + [ class "item" + , title "Collective" + ] + [ i [ class "users circle icon" ] [] + , text coll + ] + , div + [ class "item" + , title "User" + ] + [ i [ class "user outline icon" ] [] + , text user + ] + ] + ] , div [ class "ui basic blue segment" ] [ h4 [ class "ui header" ] [ text "Items"