Files
docspell/modules/webapp/src/main/elm/Page/UserSettings/View2.elm
2022-01-26 21:22:51 +01:00

525 lines
16 KiB
Elm

{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Page.UserSettings.View2 exposing (viewContent, viewSidebar)
import Comp.ChangePasswordForm
import Comp.DueItemsTaskManage
import Comp.EmailSettingsManage
import Comp.ImapSettingsManage
import Comp.NotificationChannelManage
import Comp.NotificationHookManage
import Comp.OtpSetup
import Comp.PeriodicQueryTaskManage
import Comp.ScanMailboxManage
import Comp.UiSettingsManage
import Data.Flags exposing (Flags)
import Data.Icons as Icons
import Data.UiSettings exposing (UiSettings)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick)
import Markdown
import Messages.Page.UserSettings exposing (Texts)
import Page.UserSettings.Data exposing (..)
import Styles as S
viewSidebar : Texts -> Bool -> Flags -> UiSettings -> Model -> Html Msg
viewSidebar texts visible _ _ model =
let
isNotificationTab =
case model.currentTab of
Just NotificationTab ->
True
Just NotificationQueriesTab ->
True
Just NotificationWebhookTab ->
True
Just NotificationDueItemsTab ->
True
_ ->
False
in
div
[ id "sidebar"
, class S.sidebar
, class S.sidebarBg
, classList [ ( "hidden", not visible ) ]
]
[ div [ class "" ]
[ h1 [ class S.header1 ]
[ text texts.userSettings
]
]
, div [ class "flex flex-col my-2" ]
[ a
[ href "#"
, onClick (SetTab UiSettingsTab)
, menuEntryActive model UiSettingsTab
, class S.sidebarLink
]
[ i [ class "fa fa-cog" ] []
, span
[ class "ml-3" ]
[ text texts.uiSettings ]
]
, div []
[ a
[ href "#"
, onClick (SetTab NotificationTab)
, menuEntryActive model NotificationTab
, class S.sidebarLink
]
[ Icons.notificationHooksIcon ""
, span
[ class "ml-3" ]
[ text texts.notifications ]
]
, div
[ class "ml-5 flex flex-col"
, classList [ ( "hidden", not isNotificationTab ) ]
]
[ a
[ href "#"
, onClick (SetTab NotificationWebhookTab)
, menuEntryActive model NotificationWebhookTab
, class S.sidebarLink
]
[ i [ class "fa fa-bell" ] []
, span
[ class "ml-3" ]
[ text texts.basics.notificationHooks ]
]
, a
[ href "#"
, onClick (SetTab NotificationDueItemsTab)
, menuEntryActive model NotificationDueItemsTab
, class S.sidebarLink
]
[ i [ class "fa fa-history" ] []
, span
[ class "ml-3" ]
[ text texts.dueItems ]
]
, a
[ href "#"
, onClick (SetTab NotificationQueriesTab)
, menuEntryActive model NotificationQueriesTab
, class S.sidebarLink
]
[ i [ class "fa fa-history" ] []
, span
[ class "ml-3" ]
[ text texts.basics.periodicQueries ]
]
]
]
, a
[ href "#"
, onClick (SetTab ChannelTab)
, menuEntryActive model ChannelTab
, class S.sidebarLink
]
[ i [ class "fa fa-bullhorn" ] []
, span
[ class "ml-3" ]
[ text texts.channelSettings ]
]
, a
[ href "#"
, onClick (SetTab ScanMailboxTab)
, menuEntryActive model ScanMailboxTab
, class S.sidebarLink
]
[ i [ class "fa fa-envelope-open font-thin" ] []
, span
[ class "ml-3" ]
[ text texts.scanMailbox ]
]
, a
[ href "#"
, onClick (SetTab EmailSettingsTab)
, class S.sidebarLink
, menuEntryActive model EmailSettingsTab
]
[ i [ class "fa fa-envelope" ] []
, span
[ class "ml-3" ]
[ text texts.emailSettingSmtp ]
]
, a
[ href "#"
, onClick (SetTab ImapSettingsTab)
, menuEntryActive model ImapSettingsTab
, class S.sidebarLink
]
[ i [ class "fa fa-envelope" ] []
, span
[ class "ml-3" ]
[ text texts.emailSettingImap ]
]
, a
[ href "#"
, onClick (SetTab ChangePassTab)
, menuEntryActive model ChangePassTab
, class S.sidebarLink
]
[ i [ class "fa fa-user-secret" ] []
, span
[ class "ml-3" ]
[ text texts.changePassword ]
]
, a
[ href "#"
, onClick (SetTab OtpTab)
, menuEntryActive model OtpTab
, class S.sidebarLink
]
[ i [ class "fa fa-key" ] []
, span
[ class "ml-3" ]
[ text texts.otpMenu ]
]
]
]
viewContent : Texts -> Flags -> UiSettings -> Model -> Html Msg
viewContent texts flags settings model =
div
[ id "content"
, class S.content
]
(case model.currentTab of
Just ChangePassTab ->
viewChangePassword texts model
Just EmailSettingsTab ->
viewEmailSettings texts settings model
Just NotificationTab ->
viewNotificationInfo texts settings model
Just NotificationWebhookTab ->
viewNotificationHooks texts settings model
Just NotificationQueriesTab ->
viewNotificationQueries texts settings model
Just NotificationDueItemsTab ->
viewNotificationDueItems texts settings model
Just ImapSettingsTab ->
viewImapSettings texts settings model
Just ScanMailboxTab ->
viewScanMailboxManage texts flags settings model
Just UiSettingsTab ->
viewUiSettings texts flags settings model
Just OtpTab ->
viewOtpSetup texts settings model
Just ChannelTab ->
viewChannels texts settings model
Nothing ->
[]
)
--- Helper
menuEntryActive : Model -> Tab -> Attribute msg
menuEntryActive model tab =
if model.currentTab == Just tab then
class S.sidebarMenuItemActive
else
class ""
viewChannels : Texts -> UiSettings -> Model -> List (Html Msg)
viewChannels texts settings model =
[ h2
[ class S.header1
, class "inline-flex items-center"
]
[ i [ class "fa fa-bell" ] []
, div [ class "ml-3" ]
[ text texts.channels
]
]
, Markdown.toHtml [ class "opacity-80 text-lg mb-3 markdown-preview" ] texts.channelInfoText
, Html.map ChannelMsg
(Comp.NotificationChannelManage.view texts.channelManage
settings
model.channelModel
)
]
viewOtpSetup : Texts -> UiSettings -> Model -> List (Html Msg)
viewOtpSetup texts _ model =
[ h2
[ class S.header1
, class "inline-flex items-center"
]
[ i [ class "fa fa-key" ] []
, div [ class "ml-3" ]
[ text texts.otpMenu
]
]
, Html.map OtpSetupMsg
(Comp.OtpSetup.view
texts.otpSetup
model.otpSetupModel
)
]
viewChangePassword : Texts -> Model -> List (Html Msg)
viewChangePassword texts model =
[ h2
[ class S.header1
, class "inline-flex items-center"
]
[ i [ class "fa fa-user-secret" ] []
, div [ class "ml-3" ]
[ text texts.changePassword
]
]
, Html.map ChangePassMsg
(Comp.ChangePasswordForm.view2 texts.changePasswordForm
model.changePassModel
)
]
viewUiSettings : Texts -> Flags -> UiSettings -> Model -> List (Html Msg)
viewUiSettings texts flags settings model =
[ h2
[ class S.header1
, class "inline-flex items-center"
]
[ i [ class "fa fa-cog" ] []
, span [ class "ml-3" ]
[ text texts.uiSettings
]
]
, p [ class "opacity-75 text-lg mb-4" ]
[ text texts.uiSettingsInfo
]
, Html.map UiSettingsMsg
(Comp.UiSettingsManage.view2
texts.uiSettingsManage
flags
settings
""
model.uiSettingsModel
)
]
viewEmailSettings : Texts -> UiSettings -> Model -> List (Html Msg)
viewEmailSettings texts settings model =
[ h2
[ class S.header1
, class "inline-flex items-center"
]
[ i [ class "fa fa-envelope" ] []
, div [ class "ml-3" ]
[ text texts.emailSettingSmtp
]
]
, Html.map EmailSettingsMsg
(Comp.EmailSettingsManage.view2
texts.emailSettingsManage
settings
model.emailSettingsModel
)
]
viewImapSettings : Texts -> UiSettings -> Model -> List (Html Msg)
viewImapSettings texts settings model =
[ h2
[ class S.header1
, class "inline-flex items-center"
]
[ i [ class "fa fa-envelope" ] []
, div [ class "ml-3" ]
[ text texts.emailSettingImap
]
]
, Html.map ImapSettingsMsg
(Comp.ImapSettingsManage.view2
texts.imapSettingsManage
settings
model.imapSettingsModel
)
]
viewNotificationInfo : Texts -> UiSettings -> Model -> List (Html Msg)
viewNotificationInfo texts settings model =
[ h2
[ class S.header1
, class "inline-flex items-center"
]
[ i [ class "fa fa-bullhorn" ] []
, div [ class "ml-3" ]
[ text texts.notifications
]
]
, Markdown.toHtml [ class "opacity-80 text-lg max-w-prose mb-3 markdown-preview" ] texts.notificationInfoText
, div [ class "mt-2" ]
[ ul [ class "list-none ml-8" ]
[ li [ class "py-2" ]
[ a
[ href "#"
, onClick (SetTab NotificationWebhookTab)
, class S.link
]
[ i [ class "fa fa-bell" ] []
, span
[ class "ml-3" ]
[ text texts.basics.notificationHooks ]
]
, div [ class "ml-3 text-sm opacity-50" ]
[ text texts.webhookInfoText
]
]
, li [ class "py-2" ]
[ a
[ href "#"
, onClick (SetTab NotificationDueItemsTab)
, class S.link
]
[ i [ class "fa fa-history" ] []
, span
[ class "ml-3" ]
[ text texts.dueItems ]
]
, div [ class "ml-3 text-sm opacity-50" ]
[ text texts.dueItemsInfoText
]
]
, li [ class "py-2" ]
[ a
[ href "#"
, onClick (SetTab NotificationQueriesTab)
, class S.link
]
[ Icons.periodicTasksIcon ""
, span
[ class "ml-3" ]
[ text texts.basics.periodicQueries ]
]
, div [ class "ml-3 text-sm opacity-50" ]
[ text texts.periodicQueryInfoText
]
]
]
]
]
viewNotificationDueItems : Texts -> UiSettings -> Model -> List (Html Msg)
viewNotificationDueItems texts settings model =
[ h2
[ class S.header1
, class "inline-flex items-center"
]
[ i [ class "fa fa-history" ] []
, div [ class "ml-3" ]
[ text texts.dueItems
]
]
, Markdown.toHtml [ class "opacity-80 text-lg mb-3 markdown-preview" ] texts.dueItemsInfoText
, Html.map NotificationMsg
(Comp.DueItemsTaskManage.view2 texts.notificationManage
settings
model.notificationModel
)
]
viewNotificationQueries : Texts -> UiSettings -> Model -> List (Html Msg)
viewNotificationQueries texts settings model =
[ h2
[ class S.header1
, class "inline-flex items-center"
]
[ i [ class "fa fa-history" ] []
, div [ class "ml-3" ]
[ text texts.basics.periodicQueries
]
]
, Markdown.toHtml [ class "opacity-80 text-lg mb-3 markdown-preview" ] texts.periodicQueryInfoText
, Html.map PeriodicQueryMsg
(Comp.PeriodicQueryTaskManage.view texts.periodicQueryTask
settings
model.periodicQueryModel
)
]
viewNotificationHooks : Texts -> UiSettings -> Model -> List (Html Msg)
viewNotificationHooks texts settings model =
[ h2
[ class S.header1
, class "inline-flex items-center"
]
[ i [ class "fa fa-bell" ] []
, div [ class "ml-3" ]
[ text texts.basics.notificationHooks
]
]
, Markdown.toHtml [ class "opacity-80 text-lg mb-3 markdown-preview" ] texts.webhookInfoText
, Html.map NotificationHookMsg
(Comp.NotificationHookManage.view texts.notificationHookManage
settings
model.notificationHookModel
)
]
viewScanMailboxManage : Texts -> Flags -> UiSettings -> Model -> List (Html Msg)
viewScanMailboxManage texts flags settings model =
[ h2
[ class S.header1
, class "inline-flex items-center"
]
[ i [ class "fa fa-envelope-open font-thin" ] []
, div [ class "ml-3" ]
[ text texts.scanMailbox
]
]
, p [ class "opacity-80 text-lg mb-3" ]
[ text texts.scanMailboxInfo1
]
, p [ class "opacity-80 text-lg mb-3 hidden" ]
[ text texts.scanMailboxInfo2
]
, Html.map ScanMailboxMsg
(Comp.ScanMailboxManage.view2
texts.scanMailboxManage
flags
settings
model.scanMailboxModel
)
]