fix: GraphQL file upload fails in case of use of pointer or relation (#8721)
This commit is contained in:
@@ -82,6 +82,7 @@ const load = function (parseGraphQLSchema, parseClass, parseClassConfig: ?ParseG
|
||||
const parseFields = await transformTypes('create', fields, {
|
||||
className,
|
||||
parseGraphQLSchema,
|
||||
originalFields: args.fields,
|
||||
req: { config, auth, info },
|
||||
});
|
||||
|
||||
@@ -190,6 +191,7 @@ const load = function (parseGraphQLSchema, parseClass, parseClassConfig: ?ParseG
|
||||
const parseFields = await transformTypes('update', fields, {
|
||||
className,
|
||||
parseGraphQLSchema,
|
||||
originalFields: args.fields,
|
||||
req: { config, auth, info },
|
||||
});
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ const load = parseGraphQLSchema => {
|
||||
const parseFields = await transformTypes('create', fields, {
|
||||
className: '_User',
|
||||
parseGraphQLSchema,
|
||||
originalFields: args.fields,
|
||||
req: { config, auth, info },
|
||||
});
|
||||
|
||||
@@ -114,6 +115,7 @@ const load = parseGraphQLSchema => {
|
||||
const parseFields = await transformTypes('create', fields, {
|
||||
className: '_User',
|
||||
parseGraphQLSchema,
|
||||
originalFields: args.fields,
|
||||
req: { config, auth, info },
|
||||
});
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import * as objectsMutations from '../helpers/objectsMutations';
|
||||
const transformTypes = async (
|
||||
inputType: 'create' | 'update',
|
||||
fields,
|
||||
{ className, parseGraphQLSchema, req }
|
||||
{ className, parseGraphQLSchema, req, originalFields }
|
||||
) => {
|
||||
const {
|
||||
classGraphQLCreateType,
|
||||
@@ -44,13 +44,16 @@ const transformTypes = async (
|
||||
fields[field] = transformers.polygon(fields[field]);
|
||||
break;
|
||||
case inputTypeField.type === defaultGraphQLTypes.FILE_INPUT:
|
||||
fields[field] = await transformers.file(fields[field], req);
|
||||
// Use `originalFields` to handle file upload since fields are a deepcopy and do not
|
||||
// keep the file object
|
||||
fields[field] = await transformers.file(originalFields[field], req);
|
||||
break;
|
||||
case parseClass.fields[field].type === 'Relation':
|
||||
fields[field] = await transformers.relation(
|
||||
parseClass.fields[field].targetClass,
|
||||
field,
|
||||
fields[field],
|
||||
originalFields[field],
|
||||
parseGraphQLSchema,
|
||||
req
|
||||
);
|
||||
@@ -64,6 +67,7 @@ const transformTypes = async (
|
||||
parseClass.fields[field].targetClass,
|
||||
field,
|
||||
fields[field],
|
||||
originalFields[field],
|
||||
parseGraphQLSchema,
|
||||
req
|
||||
);
|
||||
@@ -135,7 +139,14 @@ const transformers = {
|
||||
}
|
||||
return parseACL;
|
||||
},
|
||||
relation: async (targetClass, field, value, parseGraphQLSchema, { config, auth, info }) => {
|
||||
relation: async (
|
||||
targetClass,
|
||||
field,
|
||||
value,
|
||||
originalValue,
|
||||
parseGraphQLSchema,
|
||||
{ config, auth, info }
|
||||
) => {
|
||||
if (Object.keys(value).length === 0)
|
||||
throw new Parse.Error(
|
||||
Parse.Error.INVALID_POINTER,
|
||||
@@ -151,9 +162,10 @@ const transformers = {
|
||||
if (value.createAndAdd) {
|
||||
nestedObjectsToAdd = (
|
||||
await Promise.all(
|
||||
value.createAndAdd.map(async input => {
|
||||
value.createAndAdd.map(async (input, i) => {
|
||||
const parseFields = await transformTypes('create', input, {
|
||||
className: targetClass,
|
||||
originalFields: originalValue.createAndAdd[i],
|
||||
parseGraphQLSchema,
|
||||
req: { config, auth, info },
|
||||
});
|
||||
@@ -204,7 +216,14 @@ const transformers = {
|
||||
}
|
||||
return op;
|
||||
},
|
||||
pointer: async (targetClass, field, value, parseGraphQLSchema, { config, auth, info }) => {
|
||||
pointer: async (
|
||||
targetClass,
|
||||
field,
|
||||
value,
|
||||
originalValue,
|
||||
parseGraphQLSchema,
|
||||
{ config, auth, info }
|
||||
) => {
|
||||
if (Object.keys(value).length > 1 || Object.keys(value).length === 0)
|
||||
throw new Parse.Error(
|
||||
Parse.Error.INVALID_POINTER,
|
||||
@@ -216,6 +235,7 @@ const transformers = {
|
||||
const parseFields = await transformTypes('create', value.createAndLink, {
|
||||
className: targetClass,
|
||||
parseGraphQLSchema,
|
||||
originalFields: originalValue.createAndLink,
|
||||
req: { config, auth, info },
|
||||
});
|
||||
nestedObjectToAdd = await objectsMutations.createObject(
|
||||
|
||||
Reference in New Issue
Block a user