From 81a6aaaddb4ed0247d00d71e3597202e6285733b Mon Sep 17 00:00:00 2001 From: wesleybl Date: Thu, 25 May 2023 12:56:52 -0300 Subject: [PATCH] Replaces filterControlPanelsSchema setting by unwantedControlPanelsFields filterControlPanelsSchema has been migrated to Controlpanel.jsx and uses the unwantedControlPanelsFields setting. So, if any portal wants to add fields in the Control Panel, it will be necessary to customize only the unwantedControlPanelsFields configuration, instead of customizing the entire filterControlPanelsSchema function. --- .../configuration/settings-reference.md | 4 +- news/4819.feature | 1 + .../manage/Controlpanels/Controlpanel.jsx | 35 ++++++- src/config/ControlPanels.js | 97 +++++++------------ src/config/index.js | 4 +- test-setup-config.js | 4 +- 6 files changed, 74 insertions(+), 71 deletions(-) create mode 100644 news/4819.feature diff --git a/docs/source/configuration/settings-reference.md b/docs/source/configuration/settings-reference.md index 65d3d3cca1..650f74019f 100644 --- a/docs/source/configuration/settings-reference.md +++ b/docs/source/configuration/settings-reference.md @@ -200,8 +200,8 @@ controlpanels The group can be one of the default groups 'General', 'Content', 'Security', 'Add-on Configuration', 'Users and Groups' or a custom group. -filterControlPanelsSchema - A schema factory for a control panel. It is used internally, to tweak the schemas provided by the controlpanel endpoint, to make them fit for Volto. +unwantedControlPanelsFields + Control panels fields that are not used on the Volto. It is used internally, to tweak the schemas provided by the controlpanel endpoint, to make them fit for Volto. errorHandlers A list of error handlers that will be called when there is an unhandled exception. Each error handler is a function that diff --git a/news/4819.feature b/news/4819.feature new file mode 100644 index 0000000000..292c2386f2 --- /dev/null +++ b/news/4819.feature @@ -0,0 +1 @@ +Replaces ``filterControlPanelsSchema`` setting by ``unwantedControlPanelsFields`. @wesleybl diff --git a/src/components/manage/Controlpanels/Controlpanel.jsx b/src/components/manage/Controlpanels/Controlpanel.jsx index a6fc83740f..a4e39d777b 100644 --- a/src/components/manage/Controlpanels/Controlpanel.jsx +++ b/src/components/manage/Controlpanels/Controlpanel.jsx @@ -45,6 +45,39 @@ const messages = defineMessages({ }, }); +// Filters props.controlpanel.schema to only valid/relevant fields +const filterControlPanelsSchema = (controlpanel) => { + const panelType = controlpanel['@id'].split('/').pop(); + + const { unwantedControlPanelsFields } = config.settings; + + // Creates modified version of properties object + const newPropertiesObj = Object.fromEntries( + Object.entries(controlpanel.schema.properties).filter( + ([key, _val]) => + !(unwantedControlPanelsFields[panelType] || []).includes(key), + ), + ); + // Filters props.controlpanel.schema.fieldsets.fields to only valid/relevant fields + const filterFields = (fields) => { + return fields.filter( + (field) => + !(unwantedControlPanelsFields[panelType] || []).includes(field), + ); + }; + // Creates modified version of fieldsets array + const newFieldsets = controlpanel.schema.fieldsets.map((fieldset) => { + return { ...fieldset, fields: filterFields(fieldset.fields) }; + }); + + // Returns clone of props.controlpanel.schema, with updated properties/fieldsets + return { + ...controlpanel.schema, + properties: newPropertiesObj, + fieldsets: newFieldsets, + }; +}; + /** * Controlpanel class. * @class Controlpanel @@ -149,8 +182,6 @@ class Controlpanel extends Component { * @returns {string} Markup for the component. */ render() { - const { filterControlPanelsSchema } = config.settings; - if (this.props.controlpanel) { return (
diff --git a/src/config/ControlPanels.js b/src/config/ControlPanels.js index b0bdb7d935..ffd1559a87 100644 --- a/src/config/ControlPanels.js +++ b/src/config/ControlPanels.js @@ -53,67 +53,38 @@ export const filterControlPanels = (controlpanels) => { ); }; -// Filters props.controlpanel.schema to only valid/relevant fields -export const filterControlPanelsSchema = (controlpanel) => { - const panelType = controlpanel['@id'].split('/').pop(); - - const unwantedSettings = { - language: ['display_flags', 'always_show_selector'], - search: ['enable_livesearch'], - site: [ - 'display_publication_date_in_byline', - 'icon_visibility', - 'thumb_visibility', - 'no_thumbs_portlet', - 'no_thumbs_lists', - 'no_thumbs_summary', - 'no_thumbs_tables', - 'thumb_scale_portlet', - 'thumb_scale_listing', - 'thumb_scale_table', - 'thumb_scale_summary', - 'toolbar_position', - 'toolbar_logo', - 'default_page', - 'site_logo', - 'site_favicon', - 'site_favicon_mimetype', - 'exposeDCMetaTags', - 'enable_sitemap', - 'robots_txt', - 'webstats_js', - ], - editing: ['available_editors', 'default_editor', 'ext_editor'], - imaging: [ - 'highpixeldensity_scales', - 'quality_2x', - 'quality_3x', - 'picture_variants', - 'image_captioning', - ], - }; - - // Creates modified version of properties object - const newPropertiesObj = Object.fromEntries( - Object.entries(controlpanel.schema.properties).filter( - ([key, val]) => !(unwantedSettings[panelType] || []).includes(key), - ), - ); - // Filters props.controlpanel.schema.fieldsets.fields to only valid/relevant fields - const filterFields = (fields) => { - return fields.filter( - (field) => !(unwantedSettings[panelType] || []).includes(field), - ); - }; - // Creates modified version of fieldsets array - const newFieldsets = controlpanel.schema.fieldsets.map((fieldset) => { - return { ...fieldset, fields: filterFields(fieldset.fields) }; - }); - - // Returns clone of props.controlpanel.schema, with updated properties/fieldsets - return { - ...controlpanel.schema, - properties: newPropertiesObj, - fieldsets: newFieldsets, - }; +export const unwantedControlPanelsFields = { + language: ['display_flags', 'always_show_selector'], + search: ['enable_livesearch'], + site: [ + 'display_publication_date_in_byline', + 'icon_visibility', + 'thumb_visibility', + 'no_thumbs_portlet', + 'no_thumbs_lists', + 'no_thumbs_summary', + 'no_thumbs_tables', + 'thumb_scale_portlet', + 'thumb_scale_listing', + 'thumb_scale_table', + 'thumb_scale_summary', + 'toolbar_position', + 'toolbar_logo', + 'default_page', + 'site_logo', + 'site_favicon', + 'site_favicon_mimetype', + 'exposeDCMetaTags', + 'enable_sitemap', + 'robots_txt', + 'webstats_js', + ], + editing: ['available_editors', 'default_editor', 'ext_editor'], + imaging: [ + 'highpixeldensity_scales', + 'quality_2x', + 'quality_3x', + 'picture_variants', + 'image_captioning', + ], }; diff --git a/src/config/index.js b/src/config/index.js index 3496ae2083..c143f3b823 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -28,7 +28,7 @@ import { styleClassNameConverters, styleClassNameExtenders } from './Style'; import { controlPanelsIcons, filterControlPanels, - filterControlPanelsSchema, + unwantedControlPanelsFields, } from './ControlPanels'; import { richtextEditorSettings, richtextViewSettings } from './RichTextEditor'; @@ -156,7 +156,7 @@ let config = { controlpanels: [], controlPanelsIcons, filterControlPanels, - filterControlPanelsSchema, + unwantedControlPanelsFields, externalRoutes: [ // URL to be considered as external // { diff --git a/test-setup-config.js b/test-setup-config.js index 0e41216f7e..a00978490d 100644 --- a/test-setup-config.js +++ b/test-setup-config.js @@ -28,7 +28,7 @@ import { import { controlPanelsIcons, filterControlPanels, - filterControlPanelsSchema, + unwantedControlPanelsFields, } from '@plone/volto/config/ControlPanels'; import ListingBlockSchema from '@plone/volto/components/manage/Blocks/Listing/schema'; @@ -76,7 +76,7 @@ config.set('settings', { }, controlPanelsIcons, filterControlPanels, - filterControlPanelsSchema, + unwantedControlPanelsFields, apiExpanders: [], downloadableObjects: ['File'], viewableInBrowserObjects: [],