diff --git a/ui/src/Data/Session.elm b/ui/src/Data/Session.elm index 5c38ed2..7ba5cff 100644 --- a/ui/src/Data/Session.elm +++ b/ui/src/Data/Session.elm @@ -14,6 +14,7 @@ import Json.Decode as D import Json.Decode.Pipeline exposing (..) import Json.Encode as E import Ports +import Time import Url exposing (Url) @@ -22,6 +23,7 @@ type alias Session = , host : String , flash : String , routing : Bool + , zone : Time.Zone , persistent : Persistent } @@ -42,7 +44,13 @@ type Msg init : Nav.Key -> Url -> Persistent -> Session init key location persistent = - Session key location.host "" True persistent + { key = key + , host = location.host + , flash = "" + , routing = True + , zone = Time.utc + , persistent = persistent + } update : Msg -> Session -> ( Session, Cmd a ) diff --git a/ui/src/Main.elm b/ui/src/Main.elm index 5eb882b..df6ccc8 100644 --- a/ui/src/Main.elm +++ b/ui/src/Main.elm @@ -11,6 +11,8 @@ import Page.Monitor as Monitor import Page.Status as Status import Ports import Route exposing (Route) +import Task +import Time import Url exposing (Url) import Views.Page as Page exposing (ActivePage(..), frame) @@ -42,7 +44,7 @@ init sessionValue location key = ( subModel, _, _ ) = Home.init - model = + initModel = { page = Home subModel , session = session , mailboxName = "" @@ -50,8 +52,11 @@ init sessionValue location key = route = Route.fromUrl location + + ( model, cmd ) = + changeRouteTo route initModel |> updateSession in - changeRouteTo route model |> updateSession + ( model, Cmd.batch [ cmd, Task.perform TimeZoneLoaded Time.here ] ) type Msg @@ -59,6 +64,7 @@ type Msg | UrlChanged Url | LinkClicked UrlRequest | UpdateSession (Result D.Error Session.Persistent) + | TimeZoneLoaded Time.Zone | OnMailboxNameInput String | ViewMailbox String | HomeMsg Home.Msg @@ -145,6 +151,16 @@ update msg model = , Session.SetFlash ("Error decoding session: " ++ D.errorToString error) ) + TimeZoneLoaded zone -> + let + session = + model.session + in + ( { model | session = { session | zone = zone } } + , Cmd.none + , Session.none + ) + OnMailboxNameInput name -> ( { model | mailboxName = name }, Cmd.none, Session.none ) diff --git a/ui/src/Page/Mailbox.elm b/ui/src/Page/Mailbox.elm index 0f71137..7660254 100644 --- a/ui/src/Page/Mailbox.elm +++ b/ui/src/Page/Mailbox.elm @@ -483,10 +483,10 @@ view session model = ) ShowingList _ (ShowingMessage { message }) -> - viewMessage message model.bodyMode + viewMessage session.zone message model.bodyMode ShowingList _ (Transitioning { message }) -> - viewMessage message model.bodyMode + viewMessage session.zone message model.bodyMode _ -> text "" @@ -538,8 +538,8 @@ messageChip model selected message = ] -viewMessage : Message -> Body -> Html Msg -viewMessage message bodyMode = +viewMessage : Time.Zone -> Message -> Body -> Html Msg +viewMessage zone message bodyMode = let sourceUrl = "/serve/m/" ++ message.mailbox ++ "/" ++ message.id ++ "/source" @@ -557,7 +557,7 @@ viewMessage message bodyMode = , dt [] [ text "To:" ] , dd [] (List.map text message.to) , dt [] [ text "Date:" ] - , dd [] [ verboseDate message.date ] + , dd [] [ verboseDate zone message.date ] , dt [] [ text "Subject:" ] , dd [] [ text message.subject ] ] @@ -636,8 +636,8 @@ relativeDate model date = Relative.relativeTime model.now date |> text -verboseDate : Posix -> Html Msg -verboseDate date = +verboseDate : Time.Zone -> Posix -> Html Msg +verboseDate zone date = text <| DF.format [ DF.monthNameFull @@ -653,8 +653,9 @@ verboseDate date = , DF.secondFixed , DF.text " " , DF.amPmUppercase + , DF.text " (Local)" ] - Time.utc + zone date diff --git a/ui/src/Page/Monitor.elm b/ui/src/Page/Monitor.elm index 33677ab..7fc27a2 100644 --- a/ui/src/Page/Monitor.elm +++ b/ui/src/Page/Monitor.elm @@ -107,24 +107,24 @@ view session model = , th [] [ text "Mailbox" ] , th [] [ text "Subject" ] ] - , tbody [] (List.map viewMessage model.messages) + , tbody [] (List.map (viewMessage session.zone) model.messages) ] ] } -viewMessage : MessageHeader -> Html Msg -viewMessage message = +viewMessage : Time.Zone -> MessageHeader -> Html Msg +viewMessage zone message = tr [ Events.onClick (OpenMessage message) ] - [ td [] [ shortDate message.date ] + [ td [] [ shortDate zone message.date ] , td [ class "desktop" ] [ text message.from ] , td [] [ text message.mailbox ] , td [] [ text message.subject ] ] -shortDate : Posix -> Html Msg -shortDate date = +shortDate : Time.Zone -> Posix -> Html Msg +shortDate zone date = DF.format [ DF.dayOfMonthFixed , DF.text "-" @@ -136,6 +136,6 @@ shortDate date = , DF.text " " , DF.amPmUppercase ] - Time.utc + zone date |> text