diff --git a/src/lib/Filters.js b/src/lib/Filters.js index 60533a9c68..1ff04a2568 100644 --- a/src/lib/Filters.js +++ b/src/lib/Filters.js @@ -166,7 +166,7 @@ export const Constraints = { }; export const FieldConstraints = { - Pointer: ['exists', 'dne', 'eq', 'neq', 'unique'], + Pointer: ['exists', 'dne', 'eq', 'neq', 'starts', 'unique'], Boolean: ['exists', 'dne', 'eq', 'unique'], Number: ['exists', 'dne', 'eq', 'neq', 'lt', 'lte', 'gt', 'gte', 'unique'], String: ['exists', 'dne', 'eq', 'neq', 'starts', 'ends', 'stringContainsString', 'unique'], diff --git a/src/lib/queryFromFilters.js b/src/lib/queryFromFilters.js index a42c15b1f5..974a55c07b 100644 --- a/src/lib/queryFromFilters.js +++ b/src/lib/queryFromFilters.js @@ -28,6 +28,12 @@ function addQueryConstraintFromObject(query, filter, constraintType) { } } +function isPointer(value) { + return ( + typeof value === 'object' && value.hasOwnProperty('__type') && value['__type'] === 'Pointer' + ); +} + function addConstraint(query, filter) { switch (filter.get('constraint')) { case 'exists': @@ -55,7 +61,15 @@ function addConstraint(query, filter) { query.greaterThanOrEqualTo(filter.get('field'), filter.get('compareTo')); break; case 'starts': - query.startsWith(filter.get('field'), filter.get('compareTo')); + const field = filter.get('field'); + const compareTo = filter.get('compareTo'); + if (isPointer(compareTo)) { + const porinterQuery = new Parse.Query(compareTo.className); + porinterQuery.startsWith('objectId', compareTo.objectId); + query.matchesQuery(field, porinterQuery); + } else { + query.startsWith(field, compareTo); + } break; case 'ends': query.endsWith(filter.get('field'), filter.get('compareTo'));