mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-03-25 16:45:05 +00:00
Delete multiple items
This commit is contained in:
parent
9193d7ca51
commit
998aad5627
@ -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))
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 ->
|
||||
|
Loading…
x
Reference in New Issue
Block a user