field level hooks working on create operation

This commit is contained in:
Dan Ribbens
2020-04-30 15:16:23 -04:00
parent 4cab47eaf6
commit 439020bba2
4 changed files with 12 additions and 14 deletions

View File

@@ -22,7 +22,7 @@ const create = async (args) => {
// 3. Execute before create field-level hooks
// /////////////////////////////////////
options.data = await executeFieldHooks(args.config.fields, args.data, 'beforeCreate', args.data);
options.data = await executeFieldHooks(null, args.config.fields, args.data, 'beforeCreate', args.data);
// /////////////////////////////////////
// 4. Execute before collection hook

View File

@@ -88,7 +88,7 @@ const find = async (args) => {
const { afterRead } = args.config.hooks;
if (typeof afterRead === 'function') {
result = {
return {
...result,
docs: await Promise.all(result.docs.map(async (doc) => {
const json = doc.toJSON({ virtuals: true });
@@ -101,11 +101,10 @@ const find = async (args) => {
};
}
// /////////////////////////////////////
// 6. Return results
// /////////////////////////////////////
return result;
return {
...result,
docs: result.docs.map(doc => doc.toJSON({ virtuals: true })),
};
} catch (err) {
throw err;
}

View File

@@ -1,18 +1,17 @@
const executeFieldHooks = async (operation, fields, value, hookName, data = null) => {
const fullData = data || value;
const fullData = value || data;
if (Array.isArray(data)) {
return Promise.all(data.map(async (row) => {
return executeFieldHooks(operation, fields, fullData, row, hookName);
}));
}
const postHookData = Object.create(fullData);
const hookPromises = [];
fields.forEach((field) => {
if (typeof field.hooks[hookName] === 'function' && data[field.name]) {
const hookPromise = async () => {
postHookData[field.name] = await field.hooks[hookName]({
fullData[field.name] = await field.hooks[hookName]({
...operation,
data: fullData,
value: data[field.name],
@@ -24,7 +23,7 @@ const executeFieldHooks = async (operation, fields, value, hookName, data = null
if (field.fields && data[field.name]) {
const hookPromise = async () => {
postHookData[field.name] = await executeFieldHooks(operation, field.fields, fullData, hookName, data[field.name]);
fullData[field.name] = await executeFieldHooks(operation, field.fields, fullData[field.name], hookName, data[field.name]);
};
hookPromises.push(hookPromise());
@@ -33,7 +32,7 @@ const executeFieldHooks = async (operation, fields, value, hookName, data = null
await Promise.all(hookPromises);
return postHookData;
return fullData;
};
module.exports = executeFieldHooks;