mirror of
				https://github.com/TheAnachronism/docspell.git
				synced 2025-10-31 17:50:11 +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 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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user