Files
docspell/modules/webapp/src/main/elm/Comp/NotificationGotifyForm.elm
eikek 23cb34a6ff Manage notification channels separately and migrate
It's more convenient to manage notification channels separately, as it
is done with email settings. Notification hook and other forms are
adopted to only select channels. Hooks can now use more than one
channel.
2022-01-19 21:57:30 +01:00

175 lines
4.3 KiB
Elm

{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Comp.NotificationGotifyForm exposing (Model, Msg, init, initWith, update, view)
import Api.Model.NotificationGotify exposing (NotificationGotify)
import Comp.Basic as B
import Comp.FixedDropdown
import Data.DropdownStyle
import Data.NotificationChannel
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onInput)
import Messages.Comp.NotificationGotifyForm exposing (Texts)
import Styles as S
import Util.Maybe
type alias Model =
{ channel : NotificationGotify
, prioModel : Comp.FixedDropdown.Model Int
}
init : Model
init =
{ channel = Data.NotificationChannel.setTypeGotify Api.Model.NotificationGotify.empty
, prioModel = Comp.FixedDropdown.init (List.range 0 10)
}
initWith : NotificationGotify -> Model
initWith channel =
{ channel = Data.NotificationChannel.setTypeGotify channel
, prioModel = Comp.FixedDropdown.init (List.range 0 10)
}
type Msg
= SetUrl String
| SetAppKey String
| SetName String
| PrioMsg (Comp.FixedDropdown.Msg Int)
--- Update
update : Msg -> Model -> ( Model, Maybe NotificationGotify )
update msg model =
let
channel =
model.channel
newModel =
case msg of
SetUrl s ->
{ model | channel = { channel | url = s } }
SetAppKey s ->
{ model | channel = { channel | appKey = s } }
SetName s ->
{ model | channel = { channel | name = Util.Maybe.fromString s } }
PrioMsg lm ->
let
( m, sel ) =
Comp.FixedDropdown.update lm model.prioModel
in
{ model | channel = { channel | priority = sel }, prioModel = m }
in
( newModel, check newModel.channel )
check : NotificationGotify -> Maybe NotificationGotify
check channel =
Just channel
--- View
view : Texts -> Model -> Html Msg
view texts model =
let
cfg =
{ display = String.fromInt
, icon = \n -> Nothing
, selectPlaceholder = texts.priority
, style = Data.DropdownStyle.mainStyle
}
in
div []
[ div
[ class "mb-2"
]
[ label
[ for "name"
, class S.inputLabel
]
[ text texts.basics.name
]
, input
[ type_ "text"
, onInput SetName
, placeholder texts.basics.name
, value (Maybe.withDefault "" model.channel.name)
, name "name"
, class S.textInput
]
[]
]
, div
[ class "mb-2"
]
[ label
[ for "gotifyurl"
, class S.inputLabel
]
[ text texts.gotifyUrl
, B.inputRequired
]
, input
[ type_ "text"
, onInput SetUrl
, placeholder texts.gotifyUrl
, value model.channel.url
, name "gotifyurl"
, class S.textInput
]
[]
]
, div
[ class "mb-2"
]
[ label
[ for "appkey"
, class S.inputLabel
]
[ text texts.appKey
, B.inputRequired
]
, input
[ type_ "text"
, onInput SetAppKey
, placeholder texts.appKey
, value model.channel.appKey
, name "appkey"
, class S.textInput
]
[]
]
, div
[ class "mb-2"
]
[ label
[ for "prio"
, class S.inputLabel
]
[ text texts.priority
]
, Html.map PrioMsg (Comp.FixedDropdown.viewStyled2 cfg False model.channel.priority model.prioModel)
, span [ class "text-sm opacity-75" ]
[ text texts.priorityInfo
]
]
]