mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-03-25 16:45:05 +00:00
Edit folder of multiple items
This commit is contained in:
parent
17472fa4ca
commit
42c989a6cd
@ -53,6 +53,12 @@ trait OItem[F[_]] {
|
||||
|
||||
def setFolder(item: Ident, folder: Option[Ident], collective: Ident): F[UpdateResult]
|
||||
|
||||
def setFolderMultiple(
|
||||
items: NonEmptyList[Ident],
|
||||
folder: Option[Ident],
|
||||
collective: Ident
|
||||
): F[UpdateResult]
|
||||
|
||||
def setCorrOrg(item: Ident, org: Option[Ident], collective: Ident): F[AddResult]
|
||||
|
||||
def addCorrOrg(item: Ident, org: OOrganization.OrgAndContacts): F[AddResult]
|
||||
@ -269,6 +275,27 @@ object OItem {
|
||||
onSuccessIgnoreError(fts.updateFolder(logger, item, collective, folder))
|
||||
)
|
||||
|
||||
def setFolderMultiple(
|
||||
items: NonEmptyList[Ident],
|
||||
folder: Option[Ident],
|
||||
collective: Ident
|
||||
): F[UpdateResult] =
|
||||
for {
|
||||
results <- items.traverse(i => setFolder(i, folder, collective))
|
||||
err <- results.traverse {
|
||||
case UpdateResult.NotFound =>
|
||||
logger.info("An item was not found when updating the folder") *> 0.pure[F]
|
||||
case UpdateResult.Failure(err) =>
|
||||
logger.error(err)("An item failed to update its folder") *> 1.pure[F]
|
||||
case UpdateResult.Success =>
|
||||
0.pure[F]
|
||||
}
|
||||
res =
|
||||
if (results.size == err.fold)
|
||||
UpdateResult.failure(new Exception("All items failed to update"))
|
||||
else UpdateResult.success
|
||||
} yield res
|
||||
|
||||
def setCorrOrg(item: Ident, org: Option[Ident], collective: Ident): F[AddResult] =
|
||||
store
|
||||
.transact(RItem.updateCorrOrg(item, collective, org))
|
||||
|
@ -76,7 +76,7 @@ object ItemMultiRoutes {
|
||||
|
||||
case req @ PUT -> Root / "name" =>
|
||||
for {
|
||||
json <- req.as[ItemsAndName]
|
||||
json <- req.as[ItemsAndName]
|
||||
items <- readIds[F](json.items)
|
||||
res <- backend.item.setNameMultiple(
|
||||
items,
|
||||
@ -86,6 +86,13 @@ object ItemMultiRoutes {
|
||||
resp <- Ok(Conversions.basicResult(res, "Name updated"))
|
||||
} yield resp
|
||||
|
||||
case req @ PUT -> Root / "folder" =>
|
||||
for {
|
||||
json <- req.as[ItemsAndRef]
|
||||
items <- readIds[F](json.items)
|
||||
res <- backend.item.setFolderMultiple(items, json.ref, user.account.collective)
|
||||
resp <- Ok(Conversions.basicResult(res, "Folder updated"))
|
||||
} yield resp
|
||||
|
||||
// case req @ PUT -> Root / "direction" =>
|
||||
// for {
|
||||
@ -94,13 +101,6 @@ object ItemMultiRoutes {
|
||||
// resp <- Ok(Conversions.basicResult(res, "Direction updated"))
|
||||
// } yield resp
|
||||
|
||||
// case req @ PUT -> Root / "folder" =>
|
||||
// for {
|
||||
// idref <- req.as[OptionalId]
|
||||
// res <- backend.item.setFolder(id, idref.id, user.account.collective)
|
||||
// resp <- Ok(Conversions.basicResult(res, "Folder updated"))
|
||||
// } yield resp
|
||||
|
||||
// case req @ PUT -> Root / "corrOrg" =>
|
||||
// for {
|
||||
// idref <- req.as[OptionalId]
|
||||
|
@ -83,6 +83,7 @@ module Api exposing
|
||||
, setCorrPerson
|
||||
, setDirection
|
||||
, setFolder
|
||||
, setFolderMultiple
|
||||
, setItemDate
|
||||
, setItemDueDate
|
||||
, setItemName
|
||||
@ -134,6 +135,7 @@ import Api.Model.ItemProposals exposing (ItemProposals)
|
||||
import Api.Model.ItemSearch exposing (ItemSearch)
|
||||
import Api.Model.ItemUploadMeta exposing (ItemUploadMeta)
|
||||
import Api.Model.ItemsAndName exposing (ItemsAndName)
|
||||
import Api.Model.ItemsAndRef exposing (ItemsAndRef)
|
||||
import Api.Model.ItemsAndRefs exposing (ItemsAndRefs)
|
||||
import Api.Model.JobPriority exposing (JobPriority)
|
||||
import Api.Model.JobQueueState exposing (JobQueueState)
|
||||
@ -1312,6 +1314,20 @@ setNameMultiple flags data receive =
|
||||
}
|
||||
|
||||
|
||||
setFolderMultiple :
|
||||
Flags
|
||||
-> ItemsAndRef
|
||||
-> (Result Http.Error BasicResult -> msg)
|
||||
-> Cmd msg
|
||||
setFolderMultiple flags data receive =
|
||||
Http2.authPut
|
||||
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/folder"
|
||||
, account = getAccount flags
|
||||
, body = Http.jsonBody (Api.Model.ItemsAndRef.encode data)
|
||||
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
||||
}
|
||||
|
||||
|
||||
|
||||
--- Item
|
||||
|
||||
|
@ -7,6 +7,7 @@ import Api
|
||||
import Api.Model.BasicResult exposing (BasicResult)
|
||||
import Api.Model.IdName exposing (IdName)
|
||||
import Api.Model.ItemsAndName exposing (ItemsAndName)
|
||||
import Api.Model.ItemsAndRef exposing (ItemsAndRef)
|
||||
import Api.Model.ItemsAndRefs exposing (ItemsAndRefs)
|
||||
import Api.Model.ReferenceList exposing (ReferenceList)
|
||||
import Data.Direction exposing (Direction)
|
||||
@ -55,5 +56,12 @@ multiUpdate flags ids change receive =
|
||||
in
|
||||
Api.setNameMultiple flags data receive
|
||||
|
||||
FolderChange id ->
|
||||
let
|
||||
data =
|
||||
ItemsAndRef items (Maybe.map .id id)
|
||||
in
|
||||
Api.setFolderMultiple flags data receive
|
||||
|
||||
_ ->
|
||||
Cmd.none
|
||||
|
Loading…
x
Reference in New Issue
Block a user