mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 02:18:26 +00:00
525 lines
16 KiB
Elm
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
|
|
)
|
|
]
|