Change "empty trash" settings for a collective and submit the job

This commit is contained in:
eikek
2021-08-14 18:06:48 +02:00
parent 828e5cf703
commit 4901276c66
14 changed files with 505 additions and 19 deletions

View File

@ -20,7 +20,9 @@ import Api.Model.CollectiveSettings exposing (CollectiveSettings)
import Comp.Basic as B
import Comp.ClassifierSettingsForm
import Comp.Dropdown
import Comp.EmptyTrashForm
import Comp.MenuBar as MB
import Data.CalEvent
import Data.DropdownStyle as DS
import Data.Flags exposing (Flags)
import Data.Language exposing (Language)
@ -41,6 +43,8 @@ type alias Model =
, fullTextReIndexResult : FulltextReindexResult
, classifierModel : Comp.ClassifierSettingsForm.Model
, startClassifierResult : ClassifierResult
, emptyTrashModel : Comp.EmptyTrashForm.Model
, startEmptyTrashResult : EmptyTrashResult
}
@ -50,6 +54,11 @@ type ClassifierResult
| ClassifierResultSubmitError String
| ClassifierResultOk
type EmptyTrashResult
= EmptyTrashResultInitial
| EmptyTrashResultHttpError Http.Error
| EmptyTrashResultSubmitError String
| EmptyTrashResultOk
type FulltextReindexResult
= FulltextReindexInitial
@ -68,6 +77,9 @@ init flags settings =
( cm, cc ) =
Comp.ClassifierSettingsForm.init flags settings.classifier
( em, ec ) =
Comp.EmptyTrashForm.init flags settings.emptyTrashSchedule
in
( { langModel =
Comp.Dropdown.makeSingleList
@ -80,8 +92,10 @@ init flags settings =
, fullTextReIndexResult = FulltextReindexInitial
, classifierModel = cm
, startClassifierResult = ClassifierResultInitial
, emptyTrashModel = em
, startEmptyTrashResult = EmptyTrashResultInitial
}
, Cmd.map ClassifierSettingMsg cc
, Cmd.batch [ Cmd.map ClassifierSettingMsg cc, Cmd.map EmptyTrashMsg ec ]
)
@ -96,6 +110,10 @@ getSettings model =
|> Maybe.withDefault model.initSettings.language
, integrationEnabled = model.intEnabled
, classifier = cls
, emptyTrashSchedule =
Comp.EmptyTrashForm.getSettings model.emptyTrashModel
|> Maybe.withDefault Data.CalEvent.everyMonth
|> Data.CalEvent.makeEvent
}
)
(Comp.ClassifierSettingsForm.getSettings
@ -110,9 +128,12 @@ type Msg
| TriggerReIndex
| TriggerReIndexResult (Result Http.Error BasicResult)
| ClassifierSettingMsg Comp.ClassifierSettingsForm.Msg
| EmptyTrashMsg Comp.EmptyTrashForm.Msg
| SaveSettings
| StartClassifierTask
| StartEmptyTrashTask
| StartClassifierResp (Result Http.Error BasicResult)
| StartEmptyTrashResp (Result Http.Error BasicResult)
update : Flags -> Msg -> Model -> ( Model, Cmd Msg, Maybe CollectiveSettings )
@ -188,6 +209,18 @@ update flags msg model =
, Nothing
)
EmptyTrashMsg lmsg ->
let
( cm, cc ) =
Comp.EmptyTrashForm.update flags lmsg model.emptyTrashModel
in
( { model
| emptyTrashModel = cm
}
, Cmd.map EmptyTrashMsg cc
, Nothing
)
SaveSettings ->
case getSettings model of
Just s ->
@ -199,6 +232,10 @@ update flags msg model =
StartClassifierTask ->
( model, Api.startClassifier flags StartClassifierResp, Nothing )
StartEmptyTrashTask ->
( model, Api.startEmptyTrash flags StartEmptyTrashResp, Nothing )
StartClassifierResp (Ok br) ->
( { model
| startClassifierResult =
@ -218,6 +255,24 @@ update flags msg model =
, Nothing
)
StartEmptyTrashResp (Ok br) ->
( { model
| startEmptyTrashResult =
if br.success then
EmptyTrashResultOk
else
EmptyTrashResultSubmitError br.message
}
, Cmd.none
, Nothing
)
StartEmptyTrashResp (Err err) ->
( { model | startEmptyTrashResult = EmptyTrashResultHttpError err }
, Cmd.none
, Nothing
)
--- View2
@ -257,7 +312,7 @@ view2 flags texts settings model =
, end = []
, rootClasses = "mb-4"
}
, h3 [ class S.header3 ]
, h2 [ class S.header2 ]
[ text texts.documentLanguage
]
, div [ class "mb-4" ]
@ -279,8 +334,8 @@ view2 flags texts settings model =
[ ( "hidden", not flags.config.integrationEnabled )
]
]
[ h3
[ class S.header3
[ h2
[ class S.header2
]
[ text texts.integrationEndpoint
]
@ -311,8 +366,8 @@ view2 flags texts settings model =
[ ( "hidden", not flags.config.fullTextSearchEnabled )
]
]
[ h3
[ class S.header3 ]
[ h2
[ class S.header2 ]
[ text texts.fulltextSearch ]
, div
[ class "mb-4" ]
@ -348,8 +403,8 @@ view2 flags texts settings model =
[ ( " hidden", not flags.config.showClassificationSettings )
]
]
[ h3
[ class S.header3 ]
[ h2
[ class S.header2 ]
[ text texts.autoTagging
]
, div
@ -371,6 +426,28 @@ view2 flags texts settings model =
]
]
]
, div []
[ h2 [ class S.header2 ]
[ text texts.emptyTrash
]
, div [ class "mb-4" ]
[ Html.map EmptyTrashMsg
(Comp.EmptyTrashForm.view texts.emptyTrashForm
settings
model.emptyTrashModel
)
, div [ class "flex flex-row justify-end" ]
[ B.secondaryBasicButton
{ handler = onClick StartEmptyTrashTask
, icon = "fa fa-play"
, label = texts.startNow
, disabled = model.emptyTrashModel.schedule == Nothing
, attrs = [ href "#" ]
}
, renderEmptyTrashResultMessage texts model.startEmptyTrashResult
]
]
]
]
@ -427,3 +504,38 @@ renderFulltextReindexResultMessage texts result =
FulltextReindexSubmitError m ->
text m
renderEmptyTrashResultMessage : Texts -> EmptyTrashResult -> Html msg
renderEmptyTrashResultMessage texts result =
let
isSuccess =
case result of
EmptyTrashResultOk ->
True
_ ->
False
isError =
not isSuccess
in
div
[ classList
[ ( S.errorMessage, isError )
, ( S.successMessage, isSuccess )
, ( "hidden", result == EmptyTrashResultInitial )
]
]
[ case result of
EmptyTrashResultInitial ->
text ""
EmptyTrashResultOk ->
text texts.emptyTrashTaskStarted
EmptyTrashResultHttpError err ->
text (texts.httpError err)
EmptyTrashResultSubmitError m ->
text m
]

View File

@ -0,0 +1,106 @@
{-
Copyright 2020 Docspell Contributors
SPDX-License-Identifier: GPL-3.0-or-later
-}
module Comp.EmptyTrashForm exposing
( Model
, Msg
, getSettings
, init
, update
, view
)
import Api
import Comp.CalEventInput
import Comp.Dropdown
import Comp.FixedDropdown
import Comp.IntField
import Data.CalEvent exposing (CalEvent)
import Data.DropdownStyle as DS
import Data.Flags exposing (Flags)
import Data.ListType exposing (ListType)
import Data.UiSettings exposing (UiSettings)
import Html exposing (..)
import Html.Attributes exposing (..)
import Http
import Markdown
import Messages.Comp.EmptyTrashForm exposing (Texts)
import Styles as S
import Util.Tag
type alias Model =
{ scheduleModel : Comp.CalEventInput.Model
, schedule : Maybe CalEvent
}
type Msg
= ScheduleMsg Comp.CalEventInput.Msg
init : Flags -> String -> ( Model, Cmd Msg )
init flags schedule =
let
newSchedule =
Data.CalEvent.fromEvent schedule
|> Maybe.withDefault Data.CalEvent.everyMonth
( cem, cec ) =
Comp.CalEventInput.init flags newSchedule
in
( { scheduleModel = cem
, schedule = Just newSchedule
}
, Cmd.map ScheduleMsg cec
)
getSettings : Model -> Maybe CalEvent
getSettings model =
model.schedule
update : Flags -> Msg -> Model -> ( Model, Cmd Msg )
update flags msg model =
case msg of
ScheduleMsg lmsg ->
let
( cm, cc, ce ) =
Comp.CalEventInput.update
flags
model.schedule
lmsg
model.scheduleModel
in
( { model
| scheduleModel = cm
, schedule = ce
}
, Cmd.map ScheduleMsg cc
)
--- View2
view : Texts -> UiSettings -> Model -> Html Msg
view texts _ model =
div []
[ div [ class "mb-4" ]
[ label [ class S.inputLabel ]
[ text texts.schedule ]
, Html.map ScheduleMsg
(Comp.CalEventInput.view2
texts.calEventInput
""
model.schedule
model.scheduleModel
)
]
]