Files
payload/src/fields/hookPromise.ts
2020-12-02 21:36:40 -05:00

38 lines
900 B
TypeScript

import { OperationArguments } from '../types';
const hookPromise = async ({
data,
field,
hook,
req,
operation,
fullOriginalDoc,
fullData,
}: OperationArguments): Promise<void> => {
const resultingData = data;
if ((field.type === 'relationship' || field.type === 'upload') && (data[field.name] === 'null' || data[field.name] === null)) {
resultingData[field.name] = null;
}
if (field.hooks && field.hooks[hook]) {
await field.hooks[hook].reduce(async (priorHook, currentHook) => {
await priorHook;
const hookedValue = await currentHook({
value: data[field.name],
originalDoc: fullOriginalDoc,
data: fullData,
operation,
req,
}) || data[field.name];
if (hookedValue !== undefined) {
resultingData[field.name] = hookedValue;
}
}, Promise.resolve());
}
};
export default hookPromise;