Edit folder of multiple items

This commit is contained in:
Eike Kettner 2020-10-26 12:39:44 +01:00
parent 17472fa4ca
commit 42c989a6cd
4 changed files with 59 additions and 8 deletions

View File

@ -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))

View File

@ -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]

View File

@ -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

View File

@ -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