From 8ecb8da3abe04b4ed08e2415a97a203c2aaf41ad Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Mon, 26 Oct 2020 17:30:27 +0100 Subject: [PATCH] Default to _eq for filter --- api/src/utils/apply-query.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/api/src/utils/apply-query.ts b/api/src/utils/apply-query.ts index 77bd8adece..c5d1b0b5ab 100644 --- a/api/src/utils/apply-query.ts +++ b/api/src/utils/apply-query.ts @@ -1,7 +1,7 @@ import { QueryBuilder } from 'knex'; import { Query, Filter } from '../types'; import database, { schemaInspector } from '../database'; -import { clone } from 'lodash'; +import { clone, isPlainObject } from 'lodash'; export default async function applyQuery(collection: string, dbQuery: QueryBuilder, query: Query) { if (query.filter) { @@ -226,7 +226,11 @@ export async function applyFilter(rootQuery: QueryBuilder, rootFilter: Filter, c function getFilterPath(key: string, value: Record) { const path = [key]; - if (Object.keys(value)[0].startsWith('_') === false) { + if (Object.keys(value)[0].startsWith('_') === true) { + return path; + } + + if (isPlainObject(value)) { path.push(...getFilterPath(Object.keys(value)[0], Object.values(value)[0])); } @@ -234,7 +238,11 @@ function getFilterPath(key: string, value: Record) { } function getOperation(key: string, value: Record): { operator: string; value: any } { - if (key.startsWith('_') && key !== '_and' && key !== '_or') + if (key.startsWith('_') && key !== '_and' && key !== '_or') { return { operator: key as string, value }; + } else if (isPlainObject(value) === false) { + return { operator: '_eq', value }; + } + return getOperation(Object.keys(value)[0], Object.values(value)[0]); }