mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-21 09:58:26 +00:00
Edit folder of multiple items
This commit is contained in:
@ -53,6 +53,12 @@ trait OItem[F[_]] {
|
|||||||
|
|
||||||
def setFolder(item: Ident, folder: Option[Ident], collective: Ident): F[UpdateResult]
|
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 setCorrOrg(item: Ident, org: Option[Ident], collective: Ident): F[AddResult]
|
||||||
|
|
||||||
def addCorrOrg(item: Ident, org: OOrganization.OrgAndContacts): F[AddResult]
|
def addCorrOrg(item: Ident, org: OOrganization.OrgAndContacts): F[AddResult]
|
||||||
@ -269,6 +275,27 @@ object OItem {
|
|||||||
onSuccessIgnoreError(fts.updateFolder(logger, item, collective, folder))
|
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] =
|
def setCorrOrg(item: Ident, org: Option[Ident], collective: Ident): F[AddResult] =
|
||||||
store
|
store
|
||||||
.transact(RItem.updateCorrOrg(item, collective, org))
|
.transact(RItem.updateCorrOrg(item, collective, org))
|
||||||
|
@ -76,7 +76,7 @@ object ItemMultiRoutes {
|
|||||||
|
|
||||||
case req @ PUT -> Root / "name" =>
|
case req @ PUT -> Root / "name" =>
|
||||||
for {
|
for {
|
||||||
json <- req.as[ItemsAndName]
|
json <- req.as[ItemsAndName]
|
||||||
items <- readIds[F](json.items)
|
items <- readIds[F](json.items)
|
||||||
res <- backend.item.setNameMultiple(
|
res <- backend.item.setNameMultiple(
|
||||||
items,
|
items,
|
||||||
@ -86,6 +86,13 @@ object ItemMultiRoutes {
|
|||||||
resp <- Ok(Conversions.basicResult(res, "Name updated"))
|
resp <- Ok(Conversions.basicResult(res, "Name updated"))
|
||||||
} yield resp
|
} 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" =>
|
// case req @ PUT -> Root / "direction" =>
|
||||||
// for {
|
// for {
|
||||||
@ -94,13 +101,6 @@ object ItemMultiRoutes {
|
|||||||
// resp <- Ok(Conversions.basicResult(res, "Direction updated"))
|
// resp <- Ok(Conversions.basicResult(res, "Direction updated"))
|
||||||
// } yield resp
|
// } 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" =>
|
// case req @ PUT -> Root / "corrOrg" =>
|
||||||
// for {
|
// for {
|
||||||
// idref <- req.as[OptionalId]
|
// idref <- req.as[OptionalId]
|
||||||
|
@ -83,6 +83,7 @@ module Api exposing
|
|||||||
, setCorrPerson
|
, setCorrPerson
|
||||||
, setDirection
|
, setDirection
|
||||||
, setFolder
|
, setFolder
|
||||||
|
, setFolderMultiple
|
||||||
, setItemDate
|
, setItemDate
|
||||||
, setItemDueDate
|
, setItemDueDate
|
||||||
, setItemName
|
, setItemName
|
||||||
@ -134,6 +135,7 @@ import Api.Model.ItemProposals exposing (ItemProposals)
|
|||||||
import Api.Model.ItemSearch exposing (ItemSearch)
|
import Api.Model.ItemSearch exposing (ItemSearch)
|
||||||
import Api.Model.ItemUploadMeta exposing (ItemUploadMeta)
|
import Api.Model.ItemUploadMeta exposing (ItemUploadMeta)
|
||||||
import Api.Model.ItemsAndName exposing (ItemsAndName)
|
import Api.Model.ItemsAndName exposing (ItemsAndName)
|
||||||
|
import Api.Model.ItemsAndRef exposing (ItemsAndRef)
|
||||||
import Api.Model.ItemsAndRefs exposing (ItemsAndRefs)
|
import Api.Model.ItemsAndRefs exposing (ItemsAndRefs)
|
||||||
import Api.Model.JobPriority exposing (JobPriority)
|
import Api.Model.JobPriority exposing (JobPriority)
|
||||||
import Api.Model.JobQueueState exposing (JobQueueState)
|
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
|
--- Item
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ import Api
|
|||||||
import Api.Model.BasicResult exposing (BasicResult)
|
import Api.Model.BasicResult exposing (BasicResult)
|
||||||
import Api.Model.IdName exposing (IdName)
|
import Api.Model.IdName exposing (IdName)
|
||||||
import Api.Model.ItemsAndName exposing (ItemsAndName)
|
import Api.Model.ItemsAndName exposing (ItemsAndName)
|
||||||
|
import Api.Model.ItemsAndRef exposing (ItemsAndRef)
|
||||||
import Api.Model.ItemsAndRefs exposing (ItemsAndRefs)
|
import Api.Model.ItemsAndRefs exposing (ItemsAndRefs)
|
||||||
import Api.Model.ReferenceList exposing (ReferenceList)
|
import Api.Model.ReferenceList exposing (ReferenceList)
|
||||||
import Data.Direction exposing (Direction)
|
import Data.Direction exposing (Direction)
|
||||||
@ -55,5 +56,12 @@ multiUpdate flags ids change receive =
|
|||||||
in
|
in
|
||||||
Api.setNameMultiple flags data receive
|
Api.setNameMultiple flags data receive
|
||||||
|
|
||||||
|
FolderChange id ->
|
||||||
|
let
|
||||||
|
data =
|
||||||
|
ItemsAndRef items (Maybe.map .id id)
|
||||||
|
in
|
||||||
|
Api.setFolderMultiple flags data receive
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
Cmd.none
|
Cmd.none
|
||||||
|
Reference in New Issue
Block a user