mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-10-16 12:51:52 +00:00
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.
175 lines
4.3 KiB
Elm
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
|
|
]
|
|
]
|
|
]
|