Files
docspell/modules/webapp/src/main/elm/Comp/NotificationMatrixForm.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

165 lines
3.8 KiB
Elm

{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Comp.NotificationMatrixForm exposing (Model, Msg, init, initWith, update, view)
import Api.Model.NotificationMatrix exposing (NotificationMatrix)
import Comp.Basic as B
import Data.NotificationChannel
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onInput)
import Messages.Comp.NotificationMatrixForm exposing (Texts)
import Styles as S
import Util.Maybe
type alias Model =
{ channel : NotificationMatrix
}
init : Model
init =
{ channel = Data.NotificationChannel.setTypeMatrix Api.Model.NotificationMatrix.empty
}
initWith : NotificationMatrix -> Model
initWith channel =
{ channel = Data.NotificationChannel.setTypeMatrix channel
}
type Msg
= SetHomeServer String
| SetRoomId String
| SetAccessKey String
| SetName String
--- Update
update : Msg -> Model -> ( Model, Maybe NotificationMatrix )
update msg model =
let
newChannel =
updateChannel msg model.channel
in
( { model | channel = newChannel }, check newChannel )
check : NotificationMatrix -> Maybe NotificationMatrix
check channel =
Just channel
updateChannel : Msg -> NotificationMatrix -> NotificationMatrix
updateChannel msg channel =
case msg of
SetHomeServer s ->
{ channel | homeServer = s }
SetRoomId s ->
{ channel | roomId = s }
SetAccessKey s ->
{ channel | accessToken = s }
SetName s ->
{ channel | name = Util.Maybe.fromString s }
--- View
view : Texts -> Model -> Html Msg
view texts model =
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 "homeserver"
, class S.inputLabel
]
[ text texts.homeServer
, B.inputRequired
]
, input
[ type_ "text"
, onInput SetHomeServer
, placeholder texts.homeServer
, value model.channel.homeServer
, name "homeserver"
, class S.textInput
]
[]
]
, div
[ class "mb-2"
]
[ label
[ for "roomid"
, class S.inputLabel
]
[ text texts.roomId
, B.inputRequired
]
, input
[ type_ "text"
, onInput SetRoomId
, placeholder texts.roomId
, value model.channel.roomId
, name "roomid"
, class S.textInput
]
[]
]
, div
[ class "mb-2"
]
[ label
[ for "accesskey"
, class S.inputLabel
]
[ text texts.accessKey
, B.inputRequired
]
, textarea
[ onInput SetAccessKey
, placeholder texts.accessKey
, value model.channel.accessToken
, name "accesskey"
, class S.textAreaInput
]
[]
]
]