fix: Required option not handled correctly for special fields (File, GeoPoint, Polygon) on GraphQL API mutations (#8915)

This commit is contained in:
Antoine Cormouls
2024-03-20 23:32:56 +01:00
committed by GitHub
parent 6fb19bd83a
commit 907ad4267c
3 changed files with 75 additions and 10 deletions

View File

@@ -1,7 +1,6 @@
import Parse from 'parse/node';
import { fromGlobalId } from 'graphql-relay';
import { handleUpload } from '../loaders/filesMutations';
import * as defaultGraphQLTypes from '../loaders/defaultGraphQLTypes';
import * as objectsMutations from '../helpers/objectsMutations';
const transformTypes = async (
@@ -28,27 +27,28 @@ const transformTypes = async (
inputTypeField = classGraphQLUpdateTypeFields[field];
}
if (inputTypeField) {
switch (true) {
case inputTypeField.type === defaultGraphQLTypes.GEO_POINT_INPUT:
const parseFieldType = parseClass.fields[field].type;
switch (parseFieldType) {
case 'GeoPoint':
if (fields[field] === null) {
fields[field] = { __op: 'Delete' };
break;
}
fields[field] = transformers.geoPoint(fields[field]);
break;
case inputTypeField.type === defaultGraphQLTypes.POLYGON_INPUT:
case 'Polygon':
if (fields[field] === null) {
fields[field] = { __op: 'Delete' };
break;
}
fields[field] = transformers.polygon(fields[field]);
break;
case inputTypeField.type === defaultGraphQLTypes.FILE_INPUT:
// Use `originalFields` to handle file upload since fields are a deepcopy and do not
// keep the file object
case 'File':
// We need to use the originalFields to handle the 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':
case 'Relation':
fields[field] = await transformers.relation(
parseClass.fields[field].targetClass,
field,
@@ -58,7 +58,7 @@ const transformTypes = async (
req
);
break;
case parseClass.fields[field].type === 'Pointer':
case 'Pointer':
if (fields[field] === null) {
fields[field] = { __op: 'Delete' };
break;