From 1f9df145286ea9e12a992ce4ca66098948c67d7b Mon Sep 17 00:00:00 2001 From: Nick <53413353+nickpalladino@users.noreply.github.com> Date: Mon, 14 Oct 2024 15:46:02 -0400 Subject: [PATCH] Update search to handle immediate return case --- src/brapi_methods/search.js | 47 +++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/brapi_methods/search.js b/src/brapi_methods/search.js index 27277a3..5cab8a7 100644 --- a/src/brapi_methods/search.js +++ b/src/brapi_methods/search.js @@ -5,6 +5,8 @@ * @param {String} [behavior="fork"] Behavior of the node * @return {BrAPI_Behavior_Node} */ + +/* export function search(entity,params,behavior){ var param_map = this.map(function(d){ return typeof params === "function" ? params(d) : params; @@ -26,6 +28,51 @@ export function search(entity,params,behavior){ return get_params; }) }; + */ + +export function search(entity, params, behavior) { + // Map over the parameters + var param_map = this.map(function (d) { + return typeof params === "function" ? params(d) : params; + }); + + // Perform the POST request + var search_responses = param_map.search_POST(entity, function (p) { + var pageless_params = Object.assign({}, p); + delete pageless_params.page; + delete pageless_params.pageRange; + // delete pageless_params.pageSize; + return pageless_params; + }); + + // Process the POST responses + return search_responses.flatMap(function (response, index) { + if (response.searchResultsDbId || response.searchResultDbId) { + // Asynchronous search: proceed with GET request + var get_params = {}; + get_params.searchResultsDbId = + response.searchResultsDbId || response.searchResultDbId; + var originalParams = param_map.value[index]; + if (originalParams.page !== undefined) get_params.page = originalParams.page; + if (originalParams.pageRange !== undefined) + get_params.pageRange = originalParams.pageRange; + if (originalParams.pageSize !== undefined) + get_params.pageSize = originalParams.pageSize; + + // Make the GET request + return this.search_GET(entity, function () { + return get_params; + }); + } else if (response.data) { + // Synchronous search: return the data directly + return this.constructor.of(response); + } else { + // Handle unexpected responses + throw new Error("Invalid search response: " + JSON.stringify(response)); + } + }.bind(this)); +} + /** `POST /search/{entity}` * @alias BrAPINode.prototype.search_POST