diff --git a/packages/server/src/integrations/googlesheets.ts b/packages/server/src/integrations/googlesheets.ts index 4fc47500eb..d6d19e2fd9 100644 --- a/packages/server/src/integrations/googlesheets.ts +++ b/packages/server/src/integrations/googlesheets.ts @@ -571,24 +571,20 @@ export class GoogleSheetsIntegration implements DatasourcePlus { query.filters.equal[`_${GOOGLE_SHEETS_PRIMARY_KEY}`] = id } } - let filtered = dataFilters.runQuery( - rows, - query.filters || {}, - (row: GoogleSpreadsheetRow, headerKey: string) => { - return row.get(headerKey) - } - ) + if (hasFilters && query.paginate) { - filtered = filtered.slice(offset, offset + limit) + rows = rows.slice(offset, offset + limit) } const headerValues = sheet.headerValues let response = [] - for (let row of filtered) { + for (let row of rows) { response.push( - this.buildRowObject(headerValues, row.toObject(), row["_rowNumber"]) + this.buildRowObject(headerValues, row.toObject(), row.rowNumber) ) } + response = dataFilters.runQuery(response, query.filters || {}) + if (query.sort) { if (Object.keys(query.sort).length !== 1) { console.warn("Googlesheets does not support multiple sorting", { diff --git a/packages/shared-core/src/filters.ts b/packages/shared-core/src/filters.ts index bfe8dc1aa1..4c263c48bd 100644 --- a/packages/shared-core/src/filters.ts +++ b/packages/shared-core/src/filters.ts @@ -471,14 +471,10 @@ export function search( * Performs a client-side search on an array of data * @param docs the data * @param query the JSON query - * @param findInDoc optional fn when trying to extract a value - * from custom doc type e.g. Google Sheets - * */ export function runQuery>( docs: T[], - query: SearchFilters, - findInDoc: (obj: T, key: string) => any = deepGet + query: SearchFilters ): T[] { if (!docs || !Array.isArray(docs)) { return [] @@ -506,7 +502,7 @@ export function runQuery>( for (const [key, testValue] of Object.entries(query[type] || {})) { const valueToCheck = isLogicalSearchOperator(type) ? doc - : findInDoc(doc, removeKeyNumbering(key)) + : deepGet(doc, removeKeyNumbering(key)) const result = test(valueToCheck, testValue) if (query.allOr && result) { return true