2020-10-27 11:27:17 +01:00
|
|
|
'use strict';
|
|
|
|
|
2017-11-29 15:00:50 +01:00
|
|
|
const _ = require('lodash');
|
|
|
|
|
|
|
|
module.exports = async (ctx, next) => {
|
2019-08-21 11:05:33 +02:00
|
|
|
const { model } = ctx.params;
|
2017-11-29 15:00:50 +01:00
|
|
|
|
2019-11-15 11:49:32 +01:00
|
|
|
const ct = strapi.contentTypes[model];
|
|
|
|
|
2019-11-26 17:18:43 +01:00
|
|
|
if (!ct) {
|
|
|
|
return ctx.send({ error: 'contentType.notFound' }, 404);
|
|
|
|
}
|
|
|
|
|
2021-08-20 13:12:37 +02:00
|
|
|
const target = ct.plugin === 'admin' ? strapi.admin : strapi.plugin(ct.plugin);
|
2021-09-07 16:03:54 +02:00
|
|
|
|
|
|
|
const { route } = ctx.state;
|
|
|
|
|
|
|
|
if (typeof route.handler !== 'string') {
|
|
|
|
return next();
|
|
|
|
}
|
|
|
|
|
|
|
|
const [, action] = route.handler.split('.');
|
|
|
|
|
2021-08-20 13:12:37 +02:00
|
|
|
const configPath =
|
|
|
|
ct.plugin === 'admin'
|
2021-10-26 16:18:32 +02:00
|
|
|
? ['admin.layout', ct.modelName, 'actions', action]
|
2021-09-07 16:03:54 +02:00
|
|
|
: ['plugin', ct.plugin, 'layout', ct.modelName, 'actions', action];
|
2019-11-15 11:49:32 +01:00
|
|
|
|
2021-08-20 13:12:37 +02:00
|
|
|
const actionConfig = strapi.config.get(configPath);
|
2019-11-15 11:49:32 +01:00
|
|
|
|
2021-08-20 13:12:37 +02:00
|
|
|
if (!_.isNil(actionConfig)) {
|
|
|
|
const [controller, action] = actionConfig.split('.');
|
2017-11-29 15:00:50 +01:00
|
|
|
|
2017-11-29 16:10:13 +01:00
|
|
|
if (controller && action) {
|
2021-09-13 12:03:12 +02:00
|
|
|
return target.controllers[controller.toLowerCase()][action](ctx);
|
2017-11-29 16:10:13 +01:00
|
|
|
}
|
2017-11-29 15:00:50 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
await next();
|
|
|
|
};
|