field level hooks working on create operation
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user