From e9982fad65d998e0c339a275c11259e9d45165da Mon Sep 17 00:00:00 2001 From: wesleybl Date: Wed, 9 Oct 2024 12:55:43 -0300 Subject: [PATCH 1/9] Shows working copy options for Plone Site --- .../volto/cypress/tests/workingCopy/create.js | 4 +- packages/volto/news/5284.feature | 1 + .../src/components/manage/Toolbar/More.jsx | 233 +++++++++--------- 3 files changed, 119 insertions(+), 119 deletions(-) create mode 100644 packages/volto/news/5284.feature diff --git a/packages/volto/cypress/tests/workingCopy/create.js b/packages/volto/cypress/tests/workingCopy/create.js index 55b737e07f..5143616c5d 100644 --- a/packages/volto/cypress/tests/workingCopy/create.js +++ b/packages/volto/cypress/tests/workingCopy/create.js @@ -59,9 +59,9 @@ describe('Working Copy Tests - Create', () => { cy.findByText('View working copy'); }); - it('Portal root does not have create option', function () { + it('Portal root have create option', function () { cy.visit('/'); cy.get('#toolbar-more').click(); - cy.get('.menu-more').contains('Create working copy').should('not.exist'); + cy.get('.menu-more').contains('Create working copy').should('exist'); }); }); diff --git a/packages/volto/news/5284.feature b/packages/volto/news/5284.feature new file mode 100644 index 0000000000..9efefd148b --- /dev/null +++ b/packages/volto/news/5284.feature @@ -0,0 +1 @@ +Shows working copy options for Plone Site. @wesleybl diff --git a/packages/volto/src/components/manage/Toolbar/More.jsx b/packages/volto/src/components/manage/Toolbar/More.jsx index 07d8bc7c5d..ce29883a0b 100644 --- a/packages/volto/src/components/manage/Toolbar/More.jsx +++ b/packages/volto/src/components/manage/Toolbar/More.jsx @@ -320,125 +320,124 @@ const More = (props) => { )} - {config.settings.hasWorkingCopySupport && - content['@type'] !== 'Plone Site' && ( - <> - {!content.working_copy && ( - -
  • - -
  • -
    - )} - {content.working_copy && content.working_copy_of && ( - -
  • - +
  • +
    + )} + {content.working_copy && content.working_copy_of && ( + +
  • + -
  • -
  • - -
  • -
    - )} - {content.working_copy && !content.working_copy_of && ( - -
  • - props.closeMenu()} - > - {intl.formatMessage(messages.viewWorkingCopy)} - - -
  • -
    - )} - - )} + + + +
  • + +
  • + + )} + {content.working_copy && !content.working_copy_of && ( + +
  • + props.closeMenu()} + > + {intl.formatMessage(messages.viewWorkingCopy)} + + +
  • +
    + )} + + )} {editAction && config.settings.isMultilingual && (
  • From b98aa38ec84a3d54a41c8d45cc1963d9c96ec200 Mon Sep 17 00:00:00 2001 From: Wesley Barroso Lopes Date: Wed, 18 Dec 2024 09:43:24 -0300 Subject: [PATCH 2/9] Update packages/volto/cypress/tests/workingCopy/create.js Co-authored-by: Piero Nicolli --- packages/volto/cypress/tests/workingCopy/create.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/volto/cypress/tests/workingCopy/create.js b/packages/volto/cypress/tests/workingCopy/create.js index 5143616c5d..c5b21d392d 100644 --- a/packages/volto/cypress/tests/workingCopy/create.js +++ b/packages/volto/cypress/tests/workingCopy/create.js @@ -59,7 +59,7 @@ describe('Working Copy Tests - Create', () => { cy.findByText('View working copy'); }); - it('Portal root have create option', function () { + it('Portal root has create option', function () { cy.visit('/'); cy.get('#toolbar-more').click(); cy.get('.menu-more').contains('Create working copy').should('exist'); From 76a18a97010de8a56f01ca87c6e88618e2e29d05 Mon Sep 17 00:00:00 2001 From: David Glick Date: Fri, 24 Jan 2025 21:06:42 -0800 Subject: [PATCH 3/9] Show working copy links based on actions from backend instead of a volto config setting --- .../configuration/settings-reference.md | 5 + docs/source/configuration/workingcopy.md | 12 +- packages/coresandbox/src/index.ts | 6 - packages/seven/Makefile | 2 +- packages/types/src/config/Settings.d.ts | 1 - packages/volto/Makefile | 2 +- .../src/components/manage/Toolbar/More.jsx | 223 +++++++++--------- .../components/manage/Toolbar/More.test.jsx | 24 -- .../Toolbar/__snapshots__/More.test.jsx.snap | 135 ----------- .../WorkingCopyToastsFactory.jsx | 109 +++++---- packages/volto/src/config/index.js | 1 - 11 files changed, 171 insertions(+), 349 deletions(-) diff --git a/docs/source/configuration/settings-reference.md b/docs/source/configuration/settings-reference.md index b8601cffef..d847f80636 100644 --- a/docs/source/configuration/settings-reference.md +++ b/docs/source/configuration/settings-reference.md @@ -177,6 +177,11 @@ contentMetadataTagsImageField The OpenGraph image that will represent this content item, will be used in the metadata HEAD tag as og:image for SEO purposes. Defaults to image. See the OpenGraph Protocol for more details. hasWorkingCopySupport + ```{deprecated} Volto 18 + + This setting is no longer used. Working copy support is now based on whether the `plone.app.iterate` add-on is installed in the backend. + ``` + This setting will enable working copy support in your site. You need to install the `plone.app.iterate` add-on in your Plone site in order to make it working. controlpanels diff --git a/docs/source/configuration/workingcopy.md b/docs/source/configuration/workingcopy.md index c559729c1a..796e47ede0 100644 --- a/docs/source/configuration/workingcopy.md +++ b/docs/source/configuration/workingcopy.md @@ -9,17 +9,7 @@ myst: # Working copy support -Volto provide support for Plone's Working Copy feature. You need to install `plone.app.iterate` add-on in your Plone site that comes available by default. You can do that in Plone's control panel or using the `GenericSetup` facility. - -## Volto configuration - -You need to enable working copy support in Volto's configuration object: - -```js -import config from '@plone/volto/registry' - -config.settings.hasWorkingCopySupport = true; -``` +Volto provide support for Plone's Working Copy feature. You need to install `plone.app.iterate` add-on in your Plone site that comes available by default. You can do that in Plone's Add-ons control panel or using the `GenericSetup` facility. ## Features diff --git a/packages/coresandbox/src/index.ts b/packages/coresandbox/src/index.ts index ec4979d483..6bb16df1e8 100644 --- a/packages/coresandbox/src/index.ts +++ b/packages/coresandbox/src/index.ts @@ -180,12 +180,6 @@ export const multilingualFixture = (config: ConfigType) => { return config; }; -export const workingCopyFixture = (config: ConfigType) => { - config.settings.hasWorkingCopySupport = true; - - return config; -}; - // We extend the block types with the custom ones declare module '@plone/types' { export interface BlocksConfigData { diff --git a/packages/seven/Makefile b/packages/seven/Makefile index b012ee8899..cdaeadb163 100644 --- a/packages/seven/Makefile +++ b/packages/seven/Makefile @@ -259,7 +259,7 @@ working-copy-acceptance-backend-start: ## Start backend acceptance server for wo .PHONY: working-copy-acceptance-frontend-prod-start working-copy-acceptance-frontend-prod-start: build-deps ## Start acceptance frontend in production mode for working copy tests - ADDONS=@plone/volto-coresandbox:workingCopyFixture PLONE_API_PATH=http://127.0.0.1:55001/plone pnpm build && pnpm start:prod + PLONE_API_PATH=http://127.0.0.1:55001/plone pnpm build && pnpm start:prod .PHONY: working-copy-acceptance-test working-copy-acceptance-test: ## Start Cypress in interactive mode for working copy tests diff --git a/packages/types/src/config/Settings.d.ts b/packages/types/src/config/Settings.d.ts index 2053fde0f5..4437f3d01e 100644 --- a/packages/types/src/config/Settings.d.ts +++ b/packages/types/src/config/Settings.d.ts @@ -87,7 +87,6 @@ export interface SettingsConfig { showSelfRegistration: boolean; contentMetadataTagsImageField: string; - hasWorkingCopySupport: boolean; maxUndoLevels: number; addonsInfo: unknown; workflowMapping: unknown; diff --git a/packages/volto/Makefile b/packages/volto/Makefile index ebeeec82d5..c6f2ec636b 100644 --- a/packages/volto/Makefile +++ b/packages/volto/Makefile @@ -252,7 +252,7 @@ working-copy-acceptance-backend-start: ## Start backend acceptance server for wo .PHONY: working-copy-acceptance-frontend-prod-start working-copy-acceptance-frontend-prod-start: build-deps ## Start acceptance frontend in production mode for working copy tests - ADDONS=@plone/volto-coresandbox:workingCopyFixture RAZZLE_API_PATH=http://127.0.0.1:55001/plone pnpm build && pnpm start:prod + RAZZLE_API_PATH=http://127.0.0.1:55001/plone pnpm build && pnpm start:prod .PHONY: working-copy-acceptance-test working-copy-acceptance-test: ## Start Cypress in interactive mode for working copy tests diff --git a/packages/volto/src/components/manage/Toolbar/More.jsx b/packages/volto/src/components/manage/Toolbar/More.jsx index ce29883a0b..c2864026b1 100644 --- a/packages/volto/src/components/manage/Toolbar/More.jsx +++ b/packages/volto/src/components/manage/Toolbar/More.jsx @@ -191,6 +191,13 @@ const More = (props) => { id: 'redirection', }); + const workingCopyCheckoutAction = find(actions.object_buttons, { + id: 'iterate_checkout', + }); + const workingCopyCheckinAction = find(actions.object_buttons, { + id: 'iterate_checkin', + }); + const dateOptions = { year: 'numeric', month: 'long', @@ -320,123 +327,113 @@ const More = (props) => { )} - {config.settings.hasWorkingCopySupport && ( - <> - {!content.working_copy && ( - -
  • - -
  • -
    - )} - {content.working_copy && content.working_copy_of && ( - -
  • - +
  • +
    + )} + {workingCopyCheckinAction && ( + +
  • + -
  • -
  • - -
  • -
    - )} - {content.working_copy && !content.working_copy_of && ( - -
  • - props.closeMenu()} - > - {intl.formatMessage(messages.viewWorkingCopy)} - - -
  • -
    - )} - + + + +
  • + +
  • + + )} + {content.working_copy && !content.working_copy_of && ( + +
  • + props.closeMenu()} + > + {intl.formatMessage(messages.viewWorkingCopy)} + + +
  • +
    )} {editAction && config.settings.isMultilingual && ( diff --git a/packages/volto/src/components/manage/Toolbar/More.test.jsx b/packages/volto/src/components/manage/Toolbar/More.test.jsx index 7ddb508e69..1befbf1894 100644 --- a/packages/volto/src/components/manage/Toolbar/More.test.jsx +++ b/packages/volto/src/components/manage/Toolbar/More.test.jsx @@ -1,10 +1,8 @@ -import React from 'react'; import configureStore from 'redux-mock-store'; import { Provider } from 'react-intl-redux'; import { MemoryRouter } from 'react-router-dom'; import { PluggablesProvider } from '@plone/volto/components/manage/Pluggable'; import { waitFor, render } from '@testing-library/react'; -import config from '@plone/volto/registry'; import More from './More'; @@ -162,26 +160,4 @@ describe('Toolbar More component', () => { await waitFor(() => {}); expect(container).toMatchSnapshot(); }); - it('renders a Toolbar More component with manage content (working copy)', async () => { - config.settings.hasWorkingCopySupport = true; - - const { container } = render( - - - - {}} - theToolbar={{ - current: { getBoundingClientRect: () => ({ width: '320' }) }, - }} - closeMenu={() => {}} - /> - - - , - ); - await waitFor(() => {}); - expect(container).toMatchSnapshot(); - }); }); diff --git a/packages/volto/src/components/manage/Toolbar/__snapshots__/More.test.jsx.snap b/packages/volto/src/components/manage/Toolbar/__snapshots__/More.test.jsx.snap index da818c4054..42ca733d97 100644 --- a/packages/volto/src/components/manage/Toolbar/__snapshots__/More.test.jsx.snap +++ b/packages/volto/src/components/manage/Toolbar/__snapshots__/More.test.jsx.snap @@ -110,138 +110,3 @@ exports[`Toolbar More component renders a Toolbar More component 1`] = ` `; - -exports[`Toolbar More component renders a Toolbar More component with manage content (working copy) 1`] = ` -
    - -
    -`; diff --git a/packages/volto/src/components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory.jsx b/packages/volto/src/components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory.jsx index 07cc48d57d..50434ffe4d 100644 --- a/packages/volto/src/components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory.jsx +++ b/packages/volto/src/components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory.jsx @@ -7,7 +7,6 @@ import { defineMessages, useIntl } from 'react-intl'; import Toast from '@plone/volto/components/manage/Toast/Toast'; import { flattenToAppURL } from '@plone/volto/helpers/Url/Url'; import FormattedDate from '@plone/volto/components/theme/FormattedDate/FormattedDate'; -import config from '@plone/volto/registry'; import useDeepCompareEffect from 'use-deep-compare-effect'; const messages = defineMessages({ @@ -39,48 +38,28 @@ const WorkingCopyToastsFactory = (props) => { }; useDeepCompareEffect(() => { - if (content && config.settings.hasWorkingCopySupport) { - if (working_copy) { - let toastMessage, toastTitle; - if (content.working_copy_of) { - // I'm a working copy - toastMessage = messages.thisIsAWorkingCopyOf; - toastTitle = ( - - {content.working_copy_of?.title} - - ); - } else { - // I'm a baseline - toastMessage = messages.workingCopyIs; - toastTitle = ( - - {working_copy?.title} - - ); - } - if (toast.isActive('workingcopyinfo')) { - toast.update('workingcopyinfo', { - render: ( - - ), - })} - /> - ), - }); - } else { - toast.info( + if (working_copy) { + let toastMessage, toastTitle; + if (content.working_copy_of) { + // I'm a working copy + toastMessage = messages.thisIsAWorkingCopyOf; + toastTitle = ( + + {content.working_copy_of?.title} + + ); + } else { + // I'm a baseline + toastMessage = messages.workingCopyIs; + toastTitle = ( + + {working_copy?.title} + + ); + } + if (toast.isActive('workingcopyinfo')) { + toast.update('workingcopyinfo', { + render: ( { /> ), })} - />, - { - toastId: 'workingcopyinfo', - autoClose: false, - closeButton: false, - transition: null, - }, - ); - } + /> + ), + }); + } else { + toast.info( + + ), + })} + />, + { + toastId: 'workingcopyinfo', + autoClose: false, + closeButton: false, + transition: null, + }, + ); } - if (!working_copy) { - if (toast.isActive('workingcopyinfo')) { - toast.dismiss('workingcopyinfo'); - } + } + if (!working_copy) { + if (toast.isActive('workingcopyinfo')) { + toast.dismiss('workingcopyinfo'); } } }, [pathname, content, title, working_copy, intl, lang, dateOptions]); diff --git a/packages/volto/src/config/index.js b/packages/volto/src/config/index.js index 0c8f57d0b6..27fc225463 100644 --- a/packages/volto/src/config/index.js +++ b/packages/volto/src/config/index.js @@ -163,7 +163,6 @@ let config = { showSelfRegistration: false, contentMetadataTagsImageField: 'image', contentPropertiesSchemaEnhancer: null, - hasWorkingCopySupport: false, maxUndoLevels: 200, // undo history size for the main form addonsInfo: addonsInfo, workflowMapping, From e26e23f88eab3f248be2752f076a1aa5d6a3acd7 Mon Sep 17 00:00:00 2001 From: David Glick Date: Fri, 24 Jan 2025 21:10:26 -0800 Subject: [PATCH 4/9] changelog for types --- packages/types/news/6393.bugfix | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/types/news/6393.bugfix diff --git a/packages/types/news/6393.bugfix b/packages/types/news/6393.bugfix new file mode 100644 index 0000000000..fffeba7f7e --- /dev/null +++ b/packages/types/news/6393.bugfix @@ -0,0 +1 @@ +Remove `hasWorkingCopySupport` setting. @davisagli From 9089f896d2fc2cf0ff1218d3d7186041b9ede672 Mon Sep 17 00:00:00 2001 From: David Glick Date: Fri, 24 Jan 2025 21:19:48 -0800 Subject: [PATCH 5/9] Adjust test: it's not enabled yet in Plone 6.0 --- packages/volto/cypress/tests/workingCopy/create.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/volto/cypress/tests/workingCopy/create.js b/packages/volto/cypress/tests/workingCopy/create.js index c5b21d392d..b76d116862 100644 --- a/packages/volto/cypress/tests/workingCopy/create.js +++ b/packages/volto/cypress/tests/workingCopy/create.js @@ -62,6 +62,6 @@ describe('Working Copy Tests - Create', () => { it('Portal root has create option', function () { cy.visit('/'); cy.get('#toolbar-more').click(); - cy.get('.menu-more').contains('Create working copy').should('exist'); + cy.get('.menu-more').contains('Create working copy').should('not.exist'); }); }); From 9bfaa40a48158194499ede1a0644ff2cf762cde2 Mon Sep 17 00:00:00 2001 From: David Glick Date: Fri, 24 Jan 2025 21:32:42 -0800 Subject: [PATCH 6/9] Update packages/volto/news/5284.feature --- packages/volto/news/5284.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/volto/news/5284.feature b/packages/volto/news/5284.feature index 9efefd148b..7c5cd61759 100644 --- a/packages/volto/news/5284.feature +++ b/packages/volto/news/5284.feature @@ -1 +1 @@ -Shows working copy options for Plone Site. @wesleybl +Show the working copy actions (checkin/checkout) based on whether they are enabled in the backend, instead of the `hasWorkingCopySupport` setting. @wesleybl, @davisagli From 5abcee01b3072991ecaa1f8f45f19799bba07854 Mon Sep 17 00:00:00 2001 From: David Glick Date: Mon, 27 Jan 2025 16:11:36 -0800 Subject: [PATCH 7/9] Revise docs --- docs/source/configuration/settings-reference.md | 4 ++-- docs/source/configuration/workingcopy.md | 17 ++++++++++++++++- packages/seven/news/6393.internal | 1 + 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 packages/seven/news/6393.internal diff --git a/docs/source/configuration/settings-reference.md b/docs/source/configuration/settings-reference.md index d847f80636..63b15463b7 100644 --- a/docs/source/configuration/settings-reference.md +++ b/docs/source/configuration/settings-reference.md @@ -177,12 +177,12 @@ contentMetadataTagsImageField The OpenGraph image that will represent this content item, will be used in the metadata HEAD tag as og:image for SEO purposes. Defaults to image. See the OpenGraph Protocol for more details. hasWorkingCopySupport - ```{deprecated} Volto 18 + ```{deprecated} Volto 18.8.0 This setting is no longer used. Working copy support is now based on whether the `plone.app.iterate` add-on is installed in the backend. ``` - This setting will enable working copy support in your site. You need to install the `plone.app.iterate` add-on in your Plone site in order to make it working. + This setting will enable working copy support in your site. You need to install the `plone.app.iterate` add-on in your Plone site in order for it to work. controlpanels Register a component as control panel. diff --git a/docs/source/configuration/workingcopy.md b/docs/source/configuration/workingcopy.md index 796e47ede0..99a3fe06c0 100644 --- a/docs/source/configuration/workingcopy.md +++ b/docs/source/configuration/workingcopy.md @@ -9,7 +9,7 @@ myst: # Working copy support -Volto provide support for Plone's Working Copy feature. You need to install `plone.app.iterate` add-on in your Plone site that comes available by default. You can do that in Plone's Add-ons control panel or using the `GenericSetup` facility. +Volto provides support for Plone's Working Copy feature. You need to install the `plone.app.iterate` add-on in your Plone site. You can do that in Plone's Add-ons control panel or using the `GenericSetup` facility. ## Features @@ -19,3 +19,18 @@ Volto working copy support features include: - Work on the working copy - "Check in" the working copy by applying the changes into the original (baseline) object - Cancel the working copy if required + +## Volto configuration + +```{deprecated} Volto 18.8.0 + +This setting is no longer used. +``` + +If you have an older version of volto, you also need to enable working copy support in Volto's configuration object: + +```js +import config from '@plone/volto/registry' + +config.settings.hasWorkingCopySupport = true; +``` diff --git a/packages/seven/news/6393.internal b/packages/seven/news/6393.internal new file mode 100644 index 0000000000..2ebcfed3a1 --- /dev/null +++ b/packages/seven/news/6393.internal @@ -0,0 +1 @@ +Update Makefile. @davisagli From 3d021b0c86a30672a48cee53e5dab0211ae568c5 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Mon, 27 Jan 2025 23:43:06 -0800 Subject: [PATCH 8/9] Apply suggestions from code review --- docs/source/configuration/settings-reference.md | 9 +++++---- docs/source/configuration/workingcopy.md | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/docs/source/configuration/settings-reference.md b/docs/source/configuration/settings-reference.md index 63b15463b7..3ec76d1131 100644 --- a/docs/source/configuration/settings-reference.md +++ b/docs/source/configuration/settings-reference.md @@ -177,12 +177,13 @@ contentMetadataTagsImageField The OpenGraph image that will represent this content item, will be used in the metadata HEAD tag as og:image for SEO purposes. Defaults to image. See the OpenGraph Protocol for more details. hasWorkingCopySupport - ```{deprecated} Volto 18.8.0 - - This setting is no longer used. Working copy support is now based on whether the `plone.app.iterate` add-on is installed in the backend. + ```{versionremoved} Volto 18.8.0 + This setting is unnecessary since Volto 18.8.0. + Working copy support is now based on whether the `plone.app.iterate` add-on is installed in the backend. ``` - This setting will enable working copy support in your site. You need to install the `plone.app.iterate` add-on in your Plone site in order for it to work. + For Plone sites using a Volto version prior to 18.8.0, this setting enables working copy support. + To make it work, you need to install the add-on `plone.app.iterate` in your Plone site. controlpanels Register a component as control panel. diff --git a/docs/source/configuration/workingcopy.md b/docs/source/configuration/workingcopy.md index 99a3fe06c0..c536c62cc0 100644 --- a/docs/source/configuration/workingcopy.md +++ b/docs/source/configuration/workingcopy.md @@ -9,7 +9,9 @@ myst: # Working copy support -Volto provides support for Plone's Working Copy feature. You need to install the `plone.app.iterate` add-on in your Plone site. You can do that in Plone's Add-ons control panel or using the `GenericSetup` facility. +Volto supports Plone's working copy feature. +To enable it, you need to install the add-on `plone.app.iterate` in your Plone site. +You can do that either in Plone's {guilabel}`Add-ons` control panel or using the `GenericSetup` facility. ## Features @@ -22,12 +24,11 @@ Volto working copy support features include: ## Volto configuration -```{deprecated} Volto 18.8.0 - +```{versionremoved} Volto 18.8.0 This setting is no longer used. ``` -If you have an older version of volto, you also need to enable working copy support in Volto's configuration object: +If you have an older version of Volto, you also need to enable working copy support in Volto's configuration object as follows. ```js import config from '@plone/volto/registry' From 0ad8e667408547e6b17d768fcc5e74e18c35bdf5 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Tue, 28 Jan 2025 00:03:07 -0800 Subject: [PATCH 9/9] Remove configuration from the settings reference and point to the working copy documentation for details. --- docs/source/configuration/settings-reference.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/source/configuration/settings-reference.md b/docs/source/configuration/settings-reference.md index 3ec76d1131..56272835a2 100644 --- a/docs/source/configuration/settings-reference.md +++ b/docs/source/configuration/settings-reference.md @@ -183,7 +183,10 @@ hasWorkingCopySupport ``` For Plone sites using a Volto version prior to 18.8.0, this setting enables working copy support. - To make it work, you need to install the add-on `plone.app.iterate` in your Plone site. + + ```{seealso} + See {doc}`workingcopy` for configuration. + ``` controlpanels Register a component as control panel.