diff --git a/packages/strapi-plugin-content-manager/config/routes.json b/packages/strapi-plugin-content-manager/config/routes.json index 36d2bb96db..62a9cc8345 100644 --- a/packages/strapi-plugin-content-manager/config/routes.json +++ b/packages/strapi-plugin-content-manager/config/routes.json @@ -3,7 +3,7 @@ { "method": "GET", "path": "/general-settings", - "handler": "ContentTypes.getGeneralSettings", + "handler": "GeneralSettings.getGeneralSettings", "config": { "policies": [] } @@ -11,7 +11,7 @@ { "method": "PUT", "path": "/general-settings", - "handler": "ContentTypes.updateGeneralSettings", + "handler": "GeneralSettings.updateGeneralSettings", "config": { "policies": [] } diff --git a/packages/strapi-plugin-content-manager/controllers/GeneralSettings.js b/packages/strapi-plugin-content-manager/controllers/GeneralSettings.js new file mode 100644 index 0000000000..dc920cb584 --- /dev/null +++ b/packages/strapi-plugin-content-manager/controllers/GeneralSettings.js @@ -0,0 +1,45 @@ +'use strict'; + +const { generalSettingsSchema } = require('./validation'); + +module.exports = { + /** + * Returns the general content manager settings + */ + async getGeneralSettings(ctx) { + const contentTypeService = + strapi.plugins['content-manager'].services.contenttypes; + + const generalSettings = await contentTypeService.getGeneralSettings(); + + ctx.body = { data: generalSettings }; + }, + + /** + * Update the general content manager settings + * and the content types settings imapcted by it + */ + async updateGeneralSettings(ctx) { + const { body = {} } = ctx.request; + const contentTypeService = + strapi.plugins['content-manager'].services.contenttypes; + + let data; + try { + data = await generalSettingsSchema.validate(body, { + abortEarly: false, + stripUnknown: true, + strict: true, + }); + } catch (error) { + return ctx.badRequest(null, { + name: 'validationError', + errors: error.errors, + }); + } + + await contentTypeService.setGeneralSettings(data); + + ctx.body = { data }; + }, +}; diff --git a/packages/strapi-plugin-content-manager/services/GeneralSettings.js b/packages/strapi-plugin-content-manager/services/GeneralSettings.js new file mode 100644 index 0000000000..006b0e553f --- /dev/null +++ b/packages/strapi-plugin-content-manager/services/GeneralSettings.js @@ -0,0 +1,21 @@ +'use strict'; +const storeUtils = require('./utils/store'); + +const defaultGeneralSettings = { + searchable: true, + filterable: true, + bulkable: true, + pageSize: 10, +}; + +module.exports = { + async getGeneralSettings() { + const generalSettings = await storeUtils.getGeneralSettings(); + + return generalSettings || defaultGeneralSettings; + }, + + setGeneralSettings(data) { + return storeUtils.setGeneralSettings(data); + }, +};