fix: ensures old data from arrays is not persisted

This commit is contained in:
James
2022-07-06 10:52:52 -07:00
parent 91e33d1c1c
commit d9ef803d20
5 changed files with 58 additions and 15 deletions

View File

@@ -0,0 +1,14 @@
/**
* If there is an incoming row id,
* and it matches the existing sibling doc id,
* this is an existing row, so it should be merged.
* Otherwise, return an empty object.
*/
export const getExistingRowDoc = (incomingRow: Record<string, unknown>, existingRow?: Record<string, unknown>): Record<string, unknown> => {
if (incomingRow.id && incomingRow.id === existingRow?.id) {
return existingRow;
}
return {};
};

View File

@@ -5,6 +5,7 @@ import { Operation } from '../../../types';
import { PayloadRequest } from '../../../express/types';
import getValueWithDefault from '../../getDefaultValue';
import { traverseFields } from './traverseFields';
import { getExistingRowDoc } from './getExistingRowDoc';
type Args = {
data: Record<string, unknown>
@@ -217,8 +218,8 @@ export const promise = async ({
promises,
req,
siblingData: row,
siblingDoc: siblingDoc[field.name]?.[i] || {},
siblingDocWithLocales: siblingDocWithLocales[field.name]?.[i] || {},
siblingDoc: getExistingRowDoc(row, siblingDoc[field.name]?.[i]),
siblingDocWithLocales: getExistingRowDoc(row, siblingDocWithLocales[field.name]?.[i]),
skipValidation: skipValidationFromHere,
});
});
@@ -247,8 +248,8 @@ export const promise = async ({
promises,
req,
siblingData: row,
siblingDoc: siblingDoc[field.name]?.[i] || {},
siblingDocWithLocales: siblingDocWithLocales[field.name]?.[i] || {},
siblingDoc: getExistingRowDoc(row, siblingDoc[field.name]?.[i]),
siblingDocWithLocales: getExistingRowDoc(row, siblingDocWithLocales[field.name]?.[i]),
skipValidation: skipValidationFromHere,
});
}