Show currently logged in user

Closes: #329
This commit is contained in:
Eike Kettner 2020-11-26 23:53:31 +01:00
parent c87163052b
commit 7cc290135a
5 changed files with 106 additions and 27 deletions

View File

@ -43,6 +43,7 @@ type alias Model =
, newInviteModel : Page.NewInvite.Data.Model , newInviteModel : Page.NewInvite.Data.Model
, itemDetailModel : Page.ItemDetail.Data.Model , itemDetailModel : Page.ItemDetail.Data.Model
, navMenuOpen : Bool , navMenuOpen : Bool
, userMenuOpen : Bool
, subs : Sub Msg , subs : Sub Msg
, uiSettings : UiSettings , uiSettings : UiSettings
} }
@ -89,6 +90,7 @@ init key url flags_ settings =
, newInviteModel = Page.NewInvite.Data.emptyModel , newInviteModel = Page.NewInvite.Data.emptyModel
, itemDetailModel = Page.ItemDetail.Data.emptyModel , itemDetailModel = Page.ItemDetail.Data.emptyModel
, navMenuOpen = False , navMenuOpen = False
, userMenuOpen = False
, subs = Sub.none , subs = Sub.none
, uiSettings = settings , uiSettings = settings
} }
@ -142,6 +144,7 @@ type Msg
| LogoutResp (Result Http.Error ()) | LogoutResp (Result Http.Error ())
| SessionCheckResp (Result Http.Error AuthResult) | SessionCheckResp (Result Http.Error AuthResult)
| ToggleNavMenu | ToggleNavMenu
| ToggleUserMenu
| GetUiSettings UiSettings | GetUiSettings UiSettings

View File

@ -174,7 +174,29 @@ updateWithSub msg model =
( model, Page.goto check, Sub.none ) ( model, Page.goto check, Sub.none )
ToggleNavMenu -> 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 , Cmd.none
, Sub.none , Sub.none
) )

View File

@ -1,6 +1,7 @@
module App.View exposing (view) module App.View exposing (view)
import App.Data exposing (..) import App.Data exposing (..)
import Data.Flags
import Html exposing (..) import Html exposing (..)
import Html.Attributes exposing (..) import Html.Attributes exposing (..)
import Html.Events exposing (onClick) import Html.Events exposing (onClick)
@ -16,7 +17,6 @@ import Page.Queue.View
import Page.Register.View import Page.Register.View
import Page.Upload.View import Page.Upload.View
import Page.UserSettings.View import Page.UserSettings.View
import Util.Maybe
view : Model -> Html Msg view : Model -> Html Msg
@ -197,10 +197,51 @@ loginInfo : Model -> Html Msg
loginInfo model = loginInfo model =
div [ class "right menu" ] div [ class "right menu" ]
(case model.flags.account of (case model.flags.account of
Just _ -> Just acc ->
[ div [ 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" [ class "ui dropdown icon link item"
, onClick ToggleNavMenu , onClick ToggleNavMenu
, href "#"
] ]
[ i [ class "ui bars icon" ] [] [ i [ class "ui bars icon" ] []
, div , div
@ -220,17 +261,6 @@ loginInfo model =
, text "Items" , text "Items"
] ]
, div [ class "divider" ] [] , 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 , menuEntry model
ManageDataPage ManageDataPage
[ i [ class "cubes icon" ] [] [ i [ class "cubes icon" ] []
@ -277,15 +307,6 @@ loginInfo model =
[ i [ class "external link icon" ] [] [ i [ class "external link icon" ] []
] ]
] ]
, div [ class "divider" ] []
, a
[ class "icon item"
, href ""
, onClick Logout
]
[ i [ class "sign-out icon" ] []
, text "Logout"
]
] ]
] ]
] ]

View File

@ -1,6 +1,7 @@
module Data.Flags exposing module Data.Flags exposing
( Config ( Config
, Flags , Flags
, accountString
, getToken , getToken
, withAccount , withAccount
, withoutAccount , withoutAccount
@ -42,3 +43,12 @@ withAccount flags acc =
withoutAccount : Flags -> Flags withoutAccount : Flags -> Flags
withoutAccount flags = withoutAccount flags =
{ flags | account = Nothing } { flags | account = Nothing }
accountString : AuthResult -> String
accountString auth =
if auth.collective == auth.user then
auth.collective
else
auth.collective ++ "/" ++ auth.user

View File

@ -65,7 +65,7 @@ view flags settings model =
viewUsers settings model viewUsers settings model
Just InsightsTab -> Just InsightsTab ->
viewInsights model viewInsights flags model
Just SettingsTab -> Just SettingsTab ->
viewSettings flags settings model viewSettings flags settings model
@ -77,14 +77,37 @@ view flags settings model =
] ]
viewInsights : Model -> List (Html Msg) viewInsights : Flags -> Model -> List (Html Msg)
viewInsights model = viewInsights flags model =
let
( coll, user ) =
Maybe.map (\a -> ( a.collective, a.user )) flags.account
|> Maybe.withDefault ( "", "" )
in
[ h1 [ class "ui header" ] [ h1 [ class "ui header" ]
[ i [ class "chart bar outline icon" ] [] [ i [ class "chart bar outline icon" ] []
, div [ class "content" ] , div [ class "content" ]
[ text "Insights" [ 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" ] , div [ class "ui basic blue segment" ]
[ h4 [ class "ui header" ] [ h4 [ class "ui header" ]
[ text "Items" [ text "Items"