Delete multiple items

This commit is contained in:
Eike Kettner 2020-10-26 14:18:42 +01:00
parent 9193d7ca51
commit 998aad5627
5 changed files with 56 additions and 10 deletions

View File

@ -130,6 +130,8 @@ trait OItem[F[_]] {
def deleteItem(itemId: Ident, collective: Ident): F[Int]
def deleteItemMultiple(items: NonEmptyList[Ident], collective: Ident): F[Int]
def deleteAttachment(id: Ident, collective: Ident): F[Int]
def moveAttachmentBefore(itemId: Ident, source: Ident, target: Ident): F[AddResult]
@ -547,6 +549,13 @@ object OItem {
.delete(store)(itemId, collective)
.flatTap(_ => fts.removeItem(logger, itemId))
def deleteItemMultiple(items: NonEmptyList[Ident], collective: Ident): F[Int] =
for {
itemIds <- store.transact(RItem.filterItems(items, collective))
results <- itemIds.traverse(item => deleteItem(item, collective))
n = results.fold(0)(_ + _)
} yield n
def getProposals(item: Ident, collective: Ident): F[MetaProposalList] =
store.transact(QAttachment.getMetaProposals(item, collective))

View File

@ -151,18 +151,23 @@ object ItemMultiRoutes {
case req @ POST -> Root / "reprocess" =>
for {
json <- req.as[IdList]
json <- req.as[IdList]
items <- readIds[F](json.ids)
res <- backend.item.reprocessAll(items, user.account, true)
resp <- Ok(Conversions.basicResult(res, "Re-process task(s) submitted."))
res <- backend.item.reprocessAll(items, user.account, true)
resp <- Ok(Conversions.basicResult(res, "Re-process task(s) submitted."))
} yield resp
// case POST -> Root / "deleteAll" =>
// for {
// n <- backend.item.deleteItem(id, user.account.collective)
// res = BasicResult(n > 0, if (n > 0) "Item deleted" else "Item deletion failed.")
// resp <- Ok(res)
// } yield resp
case req @ POST -> Root / "deleteAll" =>
for {
json <- req.as[IdList]
items <- readIds[F](json.ids)
n <- backend.item.deleteItemMultiple(items, user.account.collective)
res = BasicResult(
n > 0,
if (n > 0) "Item(s) deleted" else "Item deletion failed."
)
resp <- Ok(res)
} yield resp
}
}

View File

@ -15,6 +15,7 @@ module Api exposing
, createNewFolder
, createNotifyDueItems
, createScanMailbox
, deleteAllItems
, deleteAttachment
, deleteEquip
, deleteFolder
@ -130,6 +131,7 @@ import Api.Model.EquipmentList exposing (EquipmentList)
import Api.Model.FolderDetail exposing (FolderDetail)
import Api.Model.FolderList exposing (FolderList)
import Api.Model.GenInvite exposing (GenInvite)
import Api.Model.IdList exposing (IdList)
import Api.Model.IdResult exposing (IdResult)
import Api.Model.ImapSettings exposing (ImapSettings)
import Api.Model.ImapSettingsList exposing (ImapSettingsList)
@ -182,6 +184,7 @@ import Data.Priority exposing (Priority)
import File exposing (File)
import Http
import Json.Encode as JsonEncode
import Set exposing (Set)
import Task
import Url
import Util.File
@ -1435,6 +1438,20 @@ setConcEquipmentMultiple flags data receive =
}
deleteAllItems :
Flags
-> Set String
-> (Result Http.Error BasicResult -> msg)
-> Cmd msg
deleteAllItems flags ids receive =
Http2.authPost
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/deleteAll"
, account = getAccount flags
, body = Http.jsonBody (Api.Model.IdList.encode (IdList (Set.toList ids)))
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
}
--- Item

View File

@ -169,6 +169,7 @@ type Msg
| EditMenuMsg Comp.ItemDetail.EditMenu.Msg
| MultiUpdateResp (Result Http.Error BasicResult)
| ReplaceChangedItemsResp (Result Http.Error ItemLightList)
| DeleteAllResp (Result Http.Error BasicResult)
type SearchType

View File

@ -346,7 +346,7 @@ update mId key flags settings msg model =
cmd =
if confirmed then
Cmd.none
Api.deleteAllItems flags svm.ids DeleteAllResp
else
Cmd.none
@ -373,6 +373,20 @@ update mId key flags settings msg model =
_ ->
noSub ( model, Cmd.none )
DeleteAllResp (Ok res) ->
if res.success then
let
nm =
{ model | viewMode = SearchView }
in
doSearch flags settings False nm
else
noSub ( model, Cmd.none )
DeleteAllResp (Err _) ->
noSub ( model, Cmd.none )
RequestDeleteSelected ->
case model.viewMode of
SelectView svm ->