From 6871ce13d0d3e3fc28da29c17b06fdac4e10e1b0 Mon Sep 17 00:00:00 2001 From: Ldoppea Date: Wed, 11 Sep 2024 16:22:28 +0200 Subject: [PATCH] fix(cozy-pouch-link): Merge partialFilter into selector on `find` query For some reason the Pouch engine would ignore any partialFilter if it is not included in the selector This may be the same reason we had to do this fix: https://github.com/cozy/cozy-client/commit/7c69838d2962be8f59ada6806d65761dbfe47082#diff-41848dd46551544674c134f359a5d7cddea46dd1e47c21da6814e1d1d585173dR482-R489 --- packages/cozy-pouch-link/src/CozyPouchLink.js | 3 ++- packages/cozy-pouch-link/src/helpers.js | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/cozy-pouch-link/src/CozyPouchLink.js b/packages/cozy-pouch-link/src/CozyPouchLink.js index fc7e1ccb62..c369144198 100644 --- a/packages/cozy-pouch-link/src/CozyPouchLink.js +++ b/packages/cozy-pouch-link/src/CozyPouchLink.js @@ -585,7 +585,8 @@ class PouchLink extends CozyLink { const findSelector = helpers.normalizeFindSelector({ selector, sort, - indexedFields + indexedFields, + partialFilter }) const findOpts = { diff --git a/packages/cozy-pouch-link/src/helpers.js b/packages/cozy-pouch-link/src/helpers.js index afb5d79534..f630efbe05 100644 --- a/packages/cozy-pouch-link/src/helpers.js +++ b/packages/cozy-pouch-link/src/helpers.js @@ -1,3 +1,4 @@ +import merge from 'lodash/merge' import startsWith from 'lodash/startsWith' import logger from './logger' @@ -63,7 +64,12 @@ helpers.insertBulkDocs = async (db, docs) => { return db.bulkDocs(docs, { new_edits: false }) } -helpers.normalizeFindSelector = ({ selector, sort, indexedFields }) => { +helpers.normalizeFindSelector = ({ + selector, + sort, + indexedFields, + partialFilter +}) => { let findSelector = selector || {} if (indexedFields) { for (const indexedField of indexedFields) { @@ -94,8 +100,12 @@ helpers.normalizeFindSelector = ({ selector, sort, indexedFields }) => { } } - return Object.keys(findSelector).length > 0 - ? findSelector + const mergedSelector = partialFilter + ? merge({ ...findSelector }, partialFilter) + : findSelector + + return Object.keys(mergedSelector).length > 0 + ? mergedSelector : { _id: { $gt: null } } // PouchDB does not accept empty selector }