mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-02 13:32:51 +00:00
Save notify-due-items user task
This commit is contained in:
parent
3a90d874a5
commit
93182c040e
@ -59,6 +59,7 @@ module Api exposing
|
||||
, setItemNotes
|
||||
, setTags
|
||||
, setUnconfirmed
|
||||
, submitNotifyDueItems
|
||||
, upload
|
||||
, uploadSingle
|
||||
, versionInfo
|
||||
@ -122,6 +123,20 @@ import Util.Http as Http2
|
||||
--- NotifyDueItems
|
||||
|
||||
|
||||
submitNotifyDueItems :
|
||||
Flags
|
||||
-> NotificationSettings
|
||||
-> (Result Http.Error BasicResult -> msg)
|
||||
-> Cmd msg
|
||||
submitNotifyDueItems flags settings receive =
|
||||
Http2.authPost
|
||||
{ url = flags.config.baseUrl ++ "/api/v1/sec/usertask/notifydueitems"
|
||||
, account = getAccount flags
|
||||
, body = Http.jsonBody (Api.Model.NotificationSettings.encode settings)
|
||||
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
||||
}
|
||||
|
||||
|
||||
getNotifyDueItems :
|
||||
Flags
|
||||
-> (Result Http.Error NotificationSettings -> msg)
|
||||
|
@ -97,7 +97,7 @@ update flags ev msg model =
|
||||
Valid event
|
||||
|
||||
else
|
||||
Invalid event
|
||||
Invalid [ res.message ] event
|
||||
)
|
||||
|
||||
CheckInputMsg event (Err err) ->
|
||||
|
@ -7,6 +7,7 @@ module Comp.NotificationForm exposing
|
||||
)
|
||||
|
||||
import Api
|
||||
import Api.Model.BasicResult exposing (BasicResult)
|
||||
import Api.Model.EmailSettingsList exposing (EmailSettingsList)
|
||||
import Api.Model.NotificationSettings exposing (NotificationSettings)
|
||||
import Api.Model.Tag exposing (Tag)
|
||||
@ -17,7 +18,7 @@ import Comp.EmailInput
|
||||
import Comp.IntField
|
||||
import Data.CalEvent exposing (CalEvent)
|
||||
import Data.Flags exposing (Flags)
|
||||
import Data.Validated exposing (Validated)
|
||||
import Data.Validated exposing (Validated(..))
|
||||
import Html exposing (..)
|
||||
import Html.Attributes exposing (..)
|
||||
import Html.Events exposing (onCheck, onClick)
|
||||
@ -40,6 +41,7 @@ type alias Model =
|
||||
, schedule : Validated CalEvent
|
||||
, scheduleModel : Comp.CalEventInput.Model
|
||||
, formError : Maybe String
|
||||
, submitResp : Maybe BasicResult
|
||||
}
|
||||
|
||||
|
||||
@ -55,6 +57,7 @@ type Msg
|
||||
| ToggleEnabled
|
||||
| CalEventMsg Comp.CalEventInput.Msg
|
||||
| SetNotificationSettings (Result Http.Error NotificationSettings)
|
||||
| SubmitResp (Result Http.Error BasicResult)
|
||||
|
||||
|
||||
initCmd : Flags -> Cmd Msg
|
||||
@ -91,6 +94,7 @@ init flags =
|
||||
, schedule = initialSchedule
|
||||
, scheduleModel = sm
|
||||
, formError = Nothing
|
||||
, submitResp = Nothing
|
||||
}
|
||||
, Cmd.batch
|
||||
[ initCmd flags
|
||||
@ -99,6 +103,47 @@ init flags =
|
||||
)
|
||||
|
||||
|
||||
makeSettings : Model -> Validated NotificationSettings
|
||||
makeSettings model =
|
||||
let
|
||||
prev =
|
||||
model.settings
|
||||
|
||||
conn =
|
||||
Comp.Dropdown.getSelected model.connectionModel
|
||||
|> List.head
|
||||
|> Maybe.map Valid
|
||||
|> Maybe.withDefault (Invalid [ "Connection missing" ] "")
|
||||
|
||||
recp =
|
||||
if List.isEmpty model.recipients then
|
||||
Invalid [ "No recipients" ] []
|
||||
|
||||
else
|
||||
Valid model.recipients
|
||||
|
||||
rmdays =
|
||||
Maybe.map Valid model.remindDays
|
||||
|> Maybe.withDefault (Invalid [ "Remind Days is required" ] 0)
|
||||
|
||||
make smtp rec days timer =
|
||||
{ prev
|
||||
| smtpConnection = smtp
|
||||
, tagsInclude = Comp.Dropdown.getSelected model.tagInclModel
|
||||
, tagsExclude = Comp.Dropdown.getSelected model.tagExclModel
|
||||
, recipients = rec
|
||||
, remindDays = days
|
||||
, enabled = model.enabled
|
||||
, schedule = Data.CalEvent.makeEvent timer
|
||||
}
|
||||
in
|
||||
Data.Validated.map4 make
|
||||
conn
|
||||
recp
|
||||
rmdays
|
||||
model.schedule
|
||||
|
||||
|
||||
update : Flags -> Msg -> Model -> ( Model, Cmd Msg )
|
||||
update flags msg model =
|
||||
case msg of
|
||||
@ -232,6 +277,7 @@ update flags msg model =
|
||||
, remindDays = Just s.remindDays
|
||||
, enabled = s.enabled
|
||||
, schedule = Data.Validated.Unknown newSchedule
|
||||
, scheduleModel = sm
|
||||
}
|
||||
, Cmd.batch
|
||||
[ nc
|
||||
@ -243,7 +289,34 @@ update flags msg model =
|
||||
( { model | formError = Just (Util.Http.errorToString err) }, Cmd.none )
|
||||
|
||||
Submit ->
|
||||
( model, Cmd.none )
|
||||
case makeSettings model of
|
||||
Valid set ->
|
||||
( { model | formError = Nothing }
|
||||
, Api.submitNotifyDueItems flags set SubmitResp
|
||||
)
|
||||
|
||||
Invalid errs _ ->
|
||||
let
|
||||
errMsg =
|
||||
String.join ", " errs
|
||||
in
|
||||
( { model | formError = Just errMsg }, Cmd.none )
|
||||
|
||||
Unknown _ ->
|
||||
( { model | formError = Just "An unknown error occured" }, Cmd.none )
|
||||
|
||||
SubmitResp (Ok res) ->
|
||||
( { model | submitResp = Just res, formError = Nothing }
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
SubmitResp (Err err) ->
|
||||
( { model
|
||||
| formError = Nothing
|
||||
, submitResp = Just (BasicResult False (Util.Http.errorToString err))
|
||||
}
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
|
||||
view : String -> Model -> Html Msg
|
||||
@ -252,7 +325,18 @@ view extraClasses model =
|
||||
[ classList
|
||||
[ ( "ui form", True )
|
||||
, ( extraClasses, True )
|
||||
, ( "error", model.formError /= Nothing )
|
||||
, ( "error"
|
||||
, model.formError
|
||||
/= Nothing
|
||||
|| (Maybe.map .success model.submitResp
|
||||
|> Maybe.map not
|
||||
|> Maybe.withDefault False
|
||||
)
|
||||
)
|
||||
, ( "success"
|
||||
, Maybe.map .success model.submitResp
|
||||
|> Maybe.withDefault False
|
||||
)
|
||||
]
|
||||
]
|
||||
[ div [ class "inline field" ]
|
||||
@ -331,8 +415,16 @@ view extraClasses model =
|
||||
]
|
||||
, div [ class "ui divider" ] []
|
||||
, div [ class "ui error message" ]
|
||||
[ Maybe.withDefault "" model.formError
|
||||
|> text
|
||||
[ case Maybe.map .message model.submitResp of
|
||||
Just txt ->
|
||||
text txt
|
||||
|
||||
Nothing ->
|
||||
Maybe.withDefault "" model.formError
|
||||
|> text
|
||||
]
|
||||
, div [ class "ui success message" ]
|
||||
[ text "Successfully saved."
|
||||
]
|
||||
, button
|
||||
[ class "ui primary button"
|
||||
|
@ -1,9 +1,16 @@
|
||||
module Data.Validated exposing (Validated(..), value)
|
||||
module Data.Validated exposing
|
||||
( Validated(..)
|
||||
, map
|
||||
, map2
|
||||
, map3
|
||||
, map4
|
||||
, value
|
||||
)
|
||||
|
||||
|
||||
type Validated a
|
||||
= Valid a
|
||||
| Invalid a
|
||||
| Invalid (List String) a
|
||||
| Unknown a
|
||||
|
||||
|
||||
@ -13,8 +20,81 @@ value va =
|
||||
Valid a ->
|
||||
a
|
||||
|
||||
Invalid a ->
|
||||
Invalid _ a ->
|
||||
a
|
||||
|
||||
Unknown a ->
|
||||
a
|
||||
|
||||
|
||||
map : (a -> b) -> Validated a -> Validated b
|
||||
map f va =
|
||||
case va of
|
||||
Valid a ->
|
||||
Valid (f a)
|
||||
|
||||
Invalid em a ->
|
||||
Invalid em (f a)
|
||||
|
||||
Unknown a ->
|
||||
Unknown (f a)
|
||||
|
||||
|
||||
map2 : (a -> b -> c) -> Validated a -> Validated b -> Validated c
|
||||
map2 f va vb =
|
||||
case ( va, vb ) of
|
||||
( Valid a, Valid b ) ->
|
||||
Valid (f a b)
|
||||
|
||||
( Valid a, Invalid em b ) ->
|
||||
Invalid em (f a b)
|
||||
|
||||
( Valid a, Unknown b ) ->
|
||||
Unknown (f a b)
|
||||
|
||||
( Invalid em a, Valid b ) ->
|
||||
Invalid em (f a b)
|
||||
|
||||
( Invalid em1 a, Invalid em2 b ) ->
|
||||
Invalid (em1 ++ em2) (f a b)
|
||||
|
||||
( Invalid em a, Unknown b ) ->
|
||||
Invalid em (f a b)
|
||||
|
||||
( Unknown a, Valid b ) ->
|
||||
Unknown (f a b)
|
||||
|
||||
( Unknown a, Invalid em b ) ->
|
||||
Invalid em (f a b)
|
||||
|
||||
( Unknown a, Unknown b ) ->
|
||||
Unknown (f a b)
|
||||
|
||||
|
||||
map3 :
|
||||
(a -> b -> c -> d)
|
||||
-> Validated a
|
||||
-> Validated b
|
||||
-> Validated c
|
||||
-> Validated d
|
||||
map3 f va vb vc =
|
||||
let
|
||||
vab =
|
||||
map2 (\e1 -> \e2 -> f e1 e2) va vb
|
||||
in
|
||||
map2 (\g -> \e3 -> g e3) vab vc
|
||||
|
||||
|
||||
map4 :
|
||||
(a -> b -> c -> d -> e)
|
||||
-> Validated a
|
||||
-> Validated b
|
||||
-> Validated c
|
||||
-> Validated d
|
||||
-> Validated e
|
||||
map4 f va vb vc vd =
|
||||
let
|
||||
vabc =
|
||||
map3 (\e1 -> \e2 -> \e3 -> f e1 e2 e3) va vb vc
|
||||
in
|
||||
map2 (\g -> \e4 -> g e4) vabc vd
|
||||
|
Loading…
x
Reference in New Issue
Block a user