mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-23 19:08:26 +00:00
Prepare for selecting languages
UI language is stored in user settings for authenticated users; otherwise is only stored in the current model (not persisted).
This commit is contained in:
@ -2,6 +2,7 @@ module App.Data exposing
|
||||
( Model
|
||||
, Msg(..)
|
||||
, defaultPage
|
||||
, getUiLanguage
|
||||
, init
|
||||
)
|
||||
|
||||
@ -24,6 +25,7 @@ import Page.Queue.Data
|
||||
import Page.Register.Data
|
||||
import Page.Upload.Data
|
||||
import Page.UserSettings.Data
|
||||
import UiLanguage exposing (UiLanguage)
|
||||
import Url exposing (Url)
|
||||
|
||||
|
||||
@ -48,6 +50,8 @@ type alias Model =
|
||||
, uiSettings : UiSettings
|
||||
, sidebarVisible : Bool
|
||||
, anonymousTheme : UiTheme
|
||||
, anonymousUiLang : UiLanguage
|
||||
, langMenuOpen : Bool
|
||||
}
|
||||
|
||||
|
||||
@ -97,6 +101,8 @@ init key url flags_ settings =
|
||||
, uiSettings = settings
|
||||
, sidebarVisible = settings.sideMenuVisible
|
||||
, anonymousTheme = Data.UiTheme.Light
|
||||
, anonymousUiLang = UiLanguage.English
|
||||
, langMenuOpen = False
|
||||
}
|
||||
, Cmd.batch
|
||||
[ Cmd.map UserSettingsMsg uc
|
||||
@ -152,8 +158,20 @@ type Msg
|
||||
| GetUiSettings UiSettings
|
||||
| ToggleSidebar
|
||||
| ToggleDarkMode
|
||||
| ToggleLangMenu
|
||||
| SetLanguage UiLanguage
|
||||
|
||||
|
||||
defaultPage : Flags -> Page
|
||||
defaultPage flags =
|
||||
HomePage
|
||||
|
||||
|
||||
getUiLanguage : Model -> UiLanguage
|
||||
getUiLanguage model =
|
||||
case model.flags.account of
|
||||
Just _ ->
|
||||
model.uiSettings.uiLang
|
||||
|
||||
Nothing ->
|
||||
model.anonymousUiLang
|
||||
|
@ -84,6 +84,15 @@ updateWithSub msg model =
|
||||
, Sub.none
|
||||
)
|
||||
|
||||
ToggleLangMenu ->
|
||||
( { model | langMenuOpen = not model.langMenuOpen }
|
||||
, Cmd.none
|
||||
, Sub.none
|
||||
)
|
||||
|
||||
SetLanguage lang ->
|
||||
( { model | anonymousUiLang = lang, langMenuOpen = False }, Cmd.none, Sub.none )
|
||||
|
||||
HomeMsg lm ->
|
||||
updateHome lm model
|
||||
|
||||
|
@ -7,6 +7,7 @@ import Data.Flags
|
||||
import Html exposing (..)
|
||||
import Html.Attributes exposing (..)
|
||||
import Html.Events exposing (onClick)
|
||||
import Messages
|
||||
import Page exposing (Page(..))
|
||||
import Page.CollectiveSettings.View2 as CollectiveSettings
|
||||
import Page.Home.Data
|
||||
@ -20,6 +21,7 @@ import Page.Register.View2 as Register
|
||||
import Page.Upload.View2 as Upload
|
||||
import Page.UserSettings.View2 as UserSettings
|
||||
import Styles as S
|
||||
import UiLanguage
|
||||
|
||||
|
||||
view : Model -> List (Html Msg)
|
||||
@ -64,13 +66,18 @@ topNavUser auth model =
|
||||
|
||||
topNavAnon : Model -> Html Msg
|
||||
topNavAnon model =
|
||||
let
|
||||
texts =
|
||||
Messages.get <| App.Data.getUiLanguage model
|
||||
in
|
||||
nav
|
||||
[ id "top-nav"
|
||||
, class styleTopNav
|
||||
]
|
||||
[ headerNavItem model
|
||||
, div [ class "flex flex-grow justify-end" ]
|
||||
[ a
|
||||
[ langMenu model
|
||||
, a
|
||||
[ href "#"
|
||||
, onClick ToggleDarkMode
|
||||
, class dropdownLink
|
||||
@ -100,6 +107,10 @@ headerNavItem model =
|
||||
|
||||
mainContent : Model -> Html Msg
|
||||
mainContent model =
|
||||
let
|
||||
texts =
|
||||
Messages.get <| App.Data.getUiLanguage model
|
||||
in
|
||||
div
|
||||
[ id "main"
|
||||
, class styleMain
|
||||
@ -151,6 +162,45 @@ styleMain =
|
||||
"mt-12 flex md:flex-row flex-col w-full h-screen-12 overflow-y-hidden bg-white dark:bg-bluegray-800 text-gray-800 dark:text-bluegray-300 antialiased"
|
||||
|
||||
|
||||
langMenu : Model -> Html Msg
|
||||
langMenu model =
|
||||
let
|
||||
texts =
|
||||
Messages.get <| App.Data.getUiLanguage model
|
||||
|
||||
langItem lang =
|
||||
let
|
||||
langMsg =
|
||||
Messages.get lang
|
||||
in
|
||||
a
|
||||
[ classList
|
||||
[ ( dropdownItem, True )
|
||||
, ( "bg-gray-200 dark:bg-bluegray-700", lang == texts.lang )
|
||||
]
|
||||
, onClick (SetLanguage lang)
|
||||
, href "#"
|
||||
]
|
||||
[ i [ langMsg |> .flagIcon |> class ] []
|
||||
, span [ class "ml-2" ] [ text langMsg.label ]
|
||||
]
|
||||
in
|
||||
div [ class "relative" ]
|
||||
[ a
|
||||
[ class dropdownLink
|
||||
, onClick ToggleLangMenu
|
||||
, href "#"
|
||||
]
|
||||
[ i [ class texts.flagIcon ] []
|
||||
]
|
||||
, div
|
||||
[ class dropdownMenu
|
||||
, classList [ ( "hidden", not model.langMenuOpen ) ]
|
||||
]
|
||||
(List.map langItem UiLanguage.all)
|
||||
]
|
||||
|
||||
|
||||
dataMenu : AuthResult -> Model -> Html Msg
|
||||
dataMenu _ model =
|
||||
div [ class "relative" ]
|
||||
|
Reference in New Issue
Block a user