GraphQL: Handle properly keys for pointer fields (#6499)

* Fix Unknow type bug on overloaded types

* check args too

* Additional fix to detect custom fields on pointer
This commit is contained in:
Antoine Cormouls
2020-03-23 09:40:04 +01:00
committed by GitHub
parent 312a4bc812
commit 255cb15c19
4 changed files with 68 additions and 19 deletions

View File

@@ -3,10 +3,32 @@ import { offsetToCursor, cursorToOffset } from 'graphql-relay';
import rest from '../../rest';
import { transformQueryInputToParse } from '../transformers/query';
const needToGetAllKeys = (fields, keys) =>
// Eslint/Prettier conflict
/* eslint-disable*/
const needToGetAllKeys = (fields, keys, parseClasses) =>
keys
? !!keys.split(',').find(keyName => !fields[keyName.split('.')[0]])
? keys.split(',').some(keyName => {
const key = keyName.split('.');
if (fields[key[0]]) {
if (fields[key[0]].type === 'Pointer') {
const subClass = parseClasses.find(
({ className: parseClassName }) =>
fields[key[0]].targetClass === parseClassName
);
if (subClass && subClass.fields[key[1]]) {
// Current sub key is not custom
return false;
}
} else if (!key[1]) {
// current key is not custom
return false;
}
}
// Key not found into Parse Schema so it's custom
return true;
})
: true;
/* eslint-enable*/
const transformOrder = order =>
order
@@ -32,11 +54,23 @@ const getObject = async (
config,
auth,
info,
parseClass
parseClasses
) => {
const options = {};
if (!needToGetAllKeys(parseClass.fields, keys)) {
options.keys = keys;
try {
if (
!needToGetAllKeys(
parseClasses.find(
({ className: parseClassName }) => className === parseClassName
).fields,
keys,
parseClasses
)
) {
options.keys = keys;
}
} catch (e) {
console.log(e);
}
if (include) {
options.include = include;
@@ -158,7 +192,8 @@ const findObjects = async (
parseClasses.find(
({ className: parseClassName }) => className === parseClassName
).fields,
keys
keys,
parseClasses
)
) {
options.keys = keys;