Allow to reprocess single and multiple items in the ui

This commit is contained in:
Eike Kettner
2021-03-11 23:13:34 +01:00
parent 058c31e1f6
commit 76f5ab6c68
11 changed files with 382 additions and 83 deletions

View File

@ -22,6 +22,7 @@ import Api.Model.BasicResult exposing (BasicResult)
import Api.Model.ItemLightList exposing (ItemLightList)
import Api.Model.SearchStats exposing (SearchStats)
import Browser.Dom as Dom
import Comp.ConfirmModal
import Comp.FixedDropdown
import Comp.ItemCardList
import Comp.ItemDetail.FormChange exposing (FormChange)
@ -64,7 +65,7 @@ type alias Model =
type alias SelectViewModel =
{ ids : Set String
, action : SelectActionMode
, deleteAllConfirm : Comp.YesNoDimmer.Model
, confirmModal : Maybe (Comp.ConfirmModal.Settings Msg)
, editModel : Comp.ItemDetail.MultiEditMenu.Model
, saveNameState : SaveNameState
, saveCustomFieldState : Set String
@ -75,7 +76,7 @@ initSelectViewModel : SelectViewModel
initSelectViewModel =
{ ids = Set.empty
, action = NoneAction
, deleteAllConfirm = Comp.YesNoDimmer.initActive
, confirmModal = Nothing
, editModel = Comp.ItemDetail.MultiEditMenu.init
, saveNameState = SaveSuccess
, saveCustomFieldState = Set.empty
@ -187,7 +188,8 @@ type Msg
| SelectAllItems
| SelectNoItems
| RequestDeleteSelected
| DeleteSelectedConfirmMsg Comp.YesNoDimmer.Msg
| DeleteSelectedConfirmed
| CloseConfirmModal
| EditSelectedItems
| EditMenuMsg Comp.ItemDetail.MultiEditMenu.Msg
| MultiUpdateResp FormChange (Result Http.Error BasicResult)
@ -199,6 +201,8 @@ type Msg
| TogglePreviewFullWidth
| PowerSearchMsg Comp.PowerSearchInput.Msg
| KeyUpPowerSearchbarMsg (Maybe KeyCode)
| RequestReprocessSelected
| ReprocessSelectedConfirmed
type SearchType
@ -210,6 +214,7 @@ type SelectActionMode
= NoneAction
| DeleteSelected
| EditSelected
| ReprocessSelected
type alias SearchParam =

View File

@ -3,6 +3,7 @@ module Page.Home.Update exposing (update)
import Api
import Api.Model.ItemLightList exposing (ItemLightList)
import Browser.Navigation as Nav
import Comp.ConfirmModal
import Comp.FixedDropdown
import Comp.ItemCardList
import Comp.ItemDetail.FormChange exposing (FormChange(..))
@ -10,7 +11,6 @@ import Comp.ItemDetail.MultiEditMenu exposing (SaveNameState(..))
import Comp.LinkTarget exposing (LinkTarget)
import Comp.PowerSearchInput
import Comp.SearchMenu
import Comp.YesNoDimmer
import Data.Flags exposing (Flags)
import Data.ItemQuery as Q
import Data.ItemSelection
@ -358,34 +358,20 @@ update mId key flags settings msg model =
_ ->
noSub ( model, Cmd.none )
DeleteSelectedConfirmMsg lmsg ->
DeleteSelectedConfirmed ->
case model.viewMode of
SelectView svm ->
let
( confirmModel, confirmed ) =
Comp.YesNoDimmer.update lmsg svm.deleteAllConfirm
cmd =
if confirmed then
Api.deleteAllItems flags svm.ids DeleteAllResp
else
Cmd.none
act =
if confirmModel.active || confirmed then
DeleteSelected
else
NoneAction
Api.deleteAllItems flags svm.ids DeleteAllResp
in
noSub
( { model
| viewMode =
SelectView
{ svm
| deleteAllConfirm = confirmModel
, action = act
| confirmModal = Nothing
, action = DeleteSelected
}
}
, cmd
@ -416,6 +402,74 @@ update mId key flags settings msg model =
DeleteAllResp (Err _) ->
noSub ( model, Cmd.none )
RequestReprocessSelected ->
case model.viewMode of
SelectView svm ->
if svm.ids == Set.empty then
noSub ( model, Cmd.none )
else
let
lmsg =
Comp.ConfirmModal.defaultSettings
ReprocessSelectedConfirmed
CloseConfirmModal
"Really reprocess all selected items? Metadata of unconfirmed items may change."
model_ =
{ model
| viewMode =
SelectView
{ svm
| action = ReprocessSelected
, confirmModal = Just lmsg
}
}
in
noSub ( model_, Cmd.none )
_ ->
noSub ( model, Cmd.none )
CloseConfirmModal ->
case model.viewMode of
SelectView svm ->
noSub
( { model
| viewMode = SelectView { svm | confirmModal = Nothing, action = NoneAction }
}
, Cmd.none
)
_ ->
noSub ( model, Cmd.none )
ReprocessSelectedConfirmed ->
case model.viewMode of
SelectView svm ->
if svm.ids == Set.empty then
noSub ( model, Cmd.none )
else
let
cmd =
Api.reprocessMultiple flags svm.ids DeleteAllResp
in
noSub
( { model
| viewMode =
SelectView
{ svm
| confirmModal = Nothing
, action = ReprocessSelected
}
}
, cmd
)
_ ->
noSub ( model, Cmd.none )
RequestDeleteSelected ->
case model.viewMode of
SelectView svm ->
@ -425,12 +479,22 @@ update mId key flags settings msg model =
else
let
lmsg =
DeleteSelectedConfirmMsg Comp.YesNoDimmer.activate
Comp.ConfirmModal.defaultSettings
DeleteSelectedConfirmed
CloseConfirmModal
"Really delete all selected items?"
model_ =
{ model | viewMode = SelectView { svm | action = DeleteSelected } }
{ model
| viewMode =
SelectView
{ svm
| action = DeleteSelected
, confirmModal = Just lmsg
}
}
in
update mId key flags settings lmsg model_
noSub ( model_, Cmd.none )
_ ->
noSub ( model, Cmd.none )

View File

@ -1,6 +1,7 @@
module Page.Home.View2 exposing (viewContent, viewSidebar)
import Comp.Basic as B
import Comp.ConfirmModal
import Comp.ItemCardList
import Comp.MenuBar as MB
import Comp.PowerSearchInput
@ -67,13 +68,13 @@ deleteSelectedDimmer model =
in
case model.viewMode of
SelectView svm ->
[ Html.map DeleteSelectedConfirmMsg
(Comp.YesNoDimmer.viewN
(selectAction == DeleteSelected)
deleteAllDimmer
svm.deleteAllConfirm
)
]
case svm.confirmModal of
Just confirm ->
[ Comp.ConfirmModal.view confirm
]
Nothing ->
[]
_ ->
[]
@ -219,6 +220,16 @@ editMenuBar model svm =
, ( "bg-gray-200 dark:bg-bluegray-600", svm.action == EditSelected )
]
}
, MB.CustomButton
{ tagger = RequestReprocessSelected
, label = ""
, icon = Just "fa fa-redo"
, title = "Reprocess " ++ selectCount ++ " selected items"
, inputClass =
[ ( btnStyle, True )
, ( "bg-gray-200 dark:bg-bluegray-600", svm.action == ReprocessSelected )
]
}
, MB.CustomButton
{ tagger = RequestDeleteSelected
, label = ""