@plone/volto 19.0.0-alpha.2 → 19.0.0-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +1 -0
- package/.eslintrc +37 -3
- package/CHANGELOG.md +338 -1
- package/README.md +20 -16
- package/babel.js +1 -3
- package/cypress/docker/prefixed-rules.yml +26 -0
- package/cypress/docker/prefixed.yml +24 -0
- package/cypress/support/commands.js +12 -6
- package/cypress/support/guillotina.js +1 -0
- package/cypress.config.js +1 -0
- package/global-test-setup.js +1 -2
- package/locales/af.json +1 -0
- package/locales/ar.json +1 -0
- package/locales/bg.json +1 -0
- package/locales/bn.json +1 -0
- package/locales/ca/LC_MESSAGES/volto.po +124 -17
- package/locales/ca.json +1 -1
- package/locales/cs.json +1 -0
- package/locales/cy.json +1 -0
- package/locales/da.json +1 -0
- package/locales/de/LC_MESSAGES/volto.po +135 -28
- package/locales/de.json +1 -1
- package/locales/el.json +1 -0
- package/locales/en/LC_MESSAGES/volto.po +125 -18
- package/locales/en.json +1 -1
- package/locales/en_AU.json +1 -0
- package/locales/en_GB.json +1 -0
- package/locales/eo.json +1 -0
- package/locales/es/LC_MESSAGES/volto.po +125 -18
- package/locales/es.json +1 -1
- package/locales/et.json +1 -0
- package/locales/eu/LC_MESSAGES/volto.po +124 -17
- package/locales/eu.json +1 -1
- package/locales/fa.json +1 -0
- package/locales/fi/LC_MESSAGES/volto.po +124 -17
- package/locales/fi.json +1 -1
- package/locales/fr/LC_MESSAGES/volto.po +125 -18
- package/locales/fr.json +1 -1
- package/locales/fu.json +1 -0
- package/locales/gl.json +1 -0
- package/locales/he.json +1 -0
- package/locales/hi/LC_MESSAGES/volto.po +128 -21
- package/locales/hi.json +1 -1
- package/locales/hr.json +1 -0
- package/locales/hu.json +1 -0
- package/locales/hy.json +1 -0
- package/locales/id.json +1 -0
- package/locales/it/LC_MESSAGES/volto.po +129 -22
- package/locales/it.json +1 -1
- package/locales/ja/LC_MESSAGES/volto.po +124 -17
- package/locales/ja.json +1 -1
- package/locales/ka.json +1 -0
- package/locales/kn.json +1 -0
- package/locales/ko.json +1 -0
- package/locales/lt.json +1 -0
- package/locales/lv.json +1 -0
- package/locales/mi.json +1 -0
- package/locales/mk.json +1 -0
- package/locales/my.json +1 -0
- package/locales/nb_NO.json +1 -0
- package/locales/nl/LC_MESSAGES/volto.po +128 -21
- package/locales/nl.json +1 -1
- package/locales/nn.json +1 -0
- package/locales/pl.json +1 -0
- package/locales/pt/LC_MESSAGES/volto.po +124 -17
- package/locales/pt.json +1 -1
- package/locales/pt_BR/LC_MESSAGES/volto.po +147 -40
- package/locales/pt_BR.json +1 -1
- package/locales/rm.json +1 -0
- package/locales/ro/LC_MESSAGES/volto.po +128 -21
- package/locales/ro.json +1 -1
- package/locales/ru/LC_MESSAGES/volto.po +128 -21
- package/locales/ru.json +1 -1
- package/locales/sk.json +1 -0
- package/locales/sl.json +1 -0
- package/locales/sm.json +1 -0
- package/locales/sq.json +1 -0
- package/locales/sr.json +1 -0
- package/locales/sr@cyrl.json +1 -0
- package/locales/sr@latn.json +1 -0
- package/locales/sv.json +1 -1
- package/locales/ta.json +1 -0
- package/locales/te.json +1 -0
- package/locales/th.json +1 -0
- package/locales/to.json +1 -0
- package/locales/tr.json +1 -0
- package/locales/uk.json +1 -0
- package/locales/vi.json +1 -0
- package/locales/volto.pot +125 -18
- package/locales/zh_CN/LC_MESSAGES/volto.po +124 -17
- package/locales/zh_CN.json +1 -1
- package/locales/zh_Hant.json +1 -0
- package/locales/zh_Hant_HK.json +1 -0
- package/package.json +43 -100
- package/razzle.config.js +21 -21
- package/src/actions/content/content.js +0 -1
- package/src/actions/controlpanels/controlpanels.js +13 -7
- package/src/actions/controlpanels/controlpanels.test.js +11 -5
- package/src/actions/users/users.js +2 -2
- package/src/components/manage/Actions/Actions.test.jsx +1 -5
- package/src/components/manage/Add/Add.jsx +5 -6
- package/src/components/manage/BlockChooser/BlockChooser.jsx +1 -0
- package/src/components/manage/Blocks/Block/BlocksForm.test.jsx +1 -5
- package/src/components/manage/Blocks/Block/Edit.jsx +1 -0
- package/src/components/manage/Blocks/Block/EditBlockWrapper.jsx +9 -4
- package/src/components/manage/Blocks/Block/Settings.test.jsx +1 -5
- package/src/components/manage/Blocks/HTML/Edit.test.jsx +1 -5
- package/src/components/manage/Blocks/Image/Edit.jsx +5 -1
- package/src/components/manage/Blocks/Image/ImageSidebar.test.jsx +1 -5
- package/src/components/manage/Blocks/LeadImage/Edit.jsx +2 -2
- package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.jsx +1 -1
- package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.test.jsx +1 -5
- package/src/components/manage/Blocks/Listing/ImageGallery.jsx +6 -4
- package/src/components/manage/Blocks/Maps/Edit.jsx +2 -1
- package/src/components/manage/Blocks/Maps/MapsSidebar.test.jsx +1 -5
- package/src/components/manage/Blocks/Search/SearchBlockView.jsx +21 -4
- package/src/components/manage/Blocks/Search/components/DateRangeFacet.test.jsx +1 -6
- package/src/components/manage/Blocks/Search/components/SelectFacet.test.jsx +1 -6
- package/src/components/manage/Blocks/Teaser/Data.jsx +21 -7
- package/src/components/manage/Blocks/Teaser/DefaultBody.jsx +1 -1
- package/src/components/manage/Blocks/Teaser/schema.js +8 -3
- package/src/components/manage/Blocks/Video/Edit.jsx +2 -1
- package/src/components/manage/Blocks/Video/VideoSidebar.test.jsx +1 -5
- package/src/components/manage/Contents/Contents.jsx +689 -654
- package/src/components/manage/Contents/Contents.test.jsx +8 -5
- package/src/components/manage/Contents/ContentsBreadcrumbs.Multilingual.test.jsx +18 -5
- package/src/components/manage/Contents/ContentsBreadcrumbs.jsx +20 -26
- package/src/components/manage/Contents/ContentsBreadcrumbs.test.jsx +14 -0
- package/src/components/manage/Contents/ContentsDeleteModal.jsx +258 -206
- package/src/components/manage/Contents/ContentsDeleteModal.stories.jsx +26 -8
- package/src/components/manage/Contents/ContentsItem.jsx +10 -2
- package/src/components/manage/Contents/ContentsPropertiesModal.test.jsx +1 -5
- package/src/components/manage/Contents/ContentsRenameModal.test.jsx +1 -5
- package/src/components/manage/Contents/ContentsTagsModal.test.jsx +1 -5
- package/src/components/manage/Contents/ContentsUploadModal.test.jsx +13 -22
- package/src/components/manage/Contents/ContentsWorkflowModal.test.jsx +1 -5
- package/src/components/manage/Contents/DropZoneContent.jsx +323 -0
- package/src/components/manage/Contents/__mocks__/index.tsx +2 -18
- package/src/components/manage/Controlpanels/Aliases.test.jsx +1 -5
- package/src/components/manage/Controlpanels/ContentType.jsx +1 -1
- package/src/components/manage/Controlpanels/ContentType.test.jsx +1 -5
- package/src/components/manage/Controlpanels/Groups/GroupsControlpanel.jsx +3 -2
- package/src/components/manage/Controlpanels/Relations/Relations.jsx +1 -1
- package/src/components/manage/Controlpanels/Rules/AddRule.test.jsx +1 -5
- package/src/components/manage/Controlpanels/Rules/EditRule.test.jsx +1 -5
- package/src/components/manage/Controlpanels/UndoControlpanel.test.jsx +1 -5
- package/src/components/manage/Controlpanels/Users/RenderUsers.jsx +156 -175
- package/src/components/manage/Controlpanels/Users/UsersControlpanel.jsx +575 -630
- package/src/components/manage/Controlpanels/Users/UsersControlpanel.test.jsx +4 -3
- package/src/components/manage/Diff/Diff.test.jsx +1 -6
- package/src/components/manage/Diff/DiffField.test.jsx +1 -6
- package/src/components/manage/Display/Display.test.jsx +2 -11
- package/src/components/manage/Edit/Edit.jsx +2 -3
- package/src/components/manage/Edit/Edit.test.jsx +1 -5
- package/src/components/manage/Form/BlockDataForm.test.jsx +1 -5
- package/src/components/manage/Form/Form.test.jsx +1 -5
- package/src/components/manage/Form/InlineForm.jsx +2 -2
- package/src/components/manage/Form/InlineForm.test.jsx +1 -5
- package/src/components/manage/Form/ModalForm.jsx +12 -10
- package/src/components/manage/Form/ModalForm.test.jsx +27 -5
- package/src/components/manage/Form/__mocks__/index.tsx +9 -27
- package/src/components/manage/Multilingual/CompareLanguages.jsx +2 -5
- package/src/components/manage/Multilingual/CreateTranslation.jsx +8 -8
- package/src/components/manage/Multilingual/ManageTranslations.jsx +4 -2
- package/src/components/manage/Multilingual/ManageTranslations.test.jsx +5 -1
- package/src/components/manage/Multilingual/TranslationObject.jsx +1 -1
- package/src/components/manage/Preferences/ChangePassword.test.jsx +1 -5
- package/src/components/manage/Preferences/PersonalPreferences.test.jsx +1 -17
- package/src/components/manage/Sidebar/ObjectBrowser.jsx +3 -0
- package/src/components/manage/Sidebar/ObjectBrowserBody.jsx +13 -1
- package/src/components/manage/Sidebar/ObjectBrowserNav.jsx +2 -1
- package/src/components/manage/Sidebar/SidebarPortal.test.tsx +42 -0
- package/src/components/manage/Sidebar/SidebarPortal.tsx +48 -0
- package/src/components/manage/TemplateChooser/TemplateChooser.jsx +2 -1
- package/src/components/manage/Toolbar/More.jsx +4 -1
- package/src/components/manage/Toolbar/More.test.jsx +3 -0
- package/src/components/manage/Toolbar/PersonalTools.jsx +2 -1
- package/src/components/manage/Toolbar/Toolbar.jsx +3 -4
- package/src/components/manage/Toolbar/Types.jsx +7 -7
- package/src/components/manage/UniversalLink/UniversalLink.tsx +1 -0
- package/src/components/manage/Widgets/AlignWidget.stories.jsx +9 -0
- package/src/components/manage/Widgets/AlignWidget.test.tsx +95 -0
- package/src/components/manage/Widgets/{AlignWidget.jsx → AlignWidget.tsx} +23 -7
- package/src/components/manage/Widgets/ArrayWidget.test.jsx +1 -6
- package/src/components/manage/Widgets/BlockAlignment.stories.tsx +104 -0
- package/src/components/manage/Widgets/BlockAlignment.test.tsx +104 -0
- package/src/components/manage/Widgets/BlockAlignment.tsx +88 -0
- package/src/components/manage/Widgets/BlockWidth.stories.tsx +69 -0
- package/src/components/manage/Widgets/BlockWidth.test.tsx +62 -0
- package/src/components/manage/Widgets/BlockWidth.tsx +101 -0
- package/src/components/manage/Widgets/ButtonsWidget.stories.jsx +61 -0
- package/src/components/manage/Widgets/ButtonsWidget.test.tsx +138 -0
- package/src/components/manage/Widgets/ButtonsWidget.tsx +176 -0
- package/src/components/manage/Widgets/CheckboxGroupWidget.test.jsx +1 -6
- package/src/components/manage/Widgets/DatetimeWidget.jsx +16 -1
- package/src/components/manage/Widgets/DatetimeWidget.test.jsx +1 -6
- package/src/components/manage/Widgets/FileWidget.jsx +14 -8
- package/src/components/manage/Widgets/FormFieldWrapper.jsx +146 -168
- package/src/components/manage/Widgets/ImageWidget.jsx +171 -38
- package/src/components/manage/Widgets/InternalUrlWidget.jsx +2 -0
- package/src/components/manage/Widgets/ObjectBrowserWidget.jsx +8 -0
- package/src/components/manage/Widgets/ObjectListWidget.test.jsx +2 -11
- package/src/components/manage/Widgets/ObjectWidget.test.jsx +1 -5
- package/src/components/manage/Widgets/QueryWidget.jsx +137 -9
- package/src/components/manage/Widgets/RadioGroupWidget.test.jsx +1 -6
- package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.test.jsx +1 -6
- package/src/components/manage/Widgets/RegistryImageWidget.test.jsx +3 -2
- package/src/components/manage/Widgets/SchemaWidget.test.jsx +1 -6
- package/src/components/manage/Widgets/SchemaWidgetFieldset.test.jsx +1 -6
- package/src/components/manage/Widgets/SelectAutoComplete.jsx +29 -12
- package/src/components/manage/Widgets/SelectAutoComplete.test.jsx +1 -6
- package/src/components/manage/Widgets/SelectWidget.test.jsx +1 -6
- package/src/components/manage/Widgets/Size.stories.tsx +69 -0
- package/src/components/manage/Widgets/Size.test.tsx +59 -0
- package/src/components/manage/Widgets/Size.tsx +78 -0
- package/src/components/manage/Widgets/TimeWidget.test.jsx +1 -6
- package/src/components/manage/Widgets/TokenWidget.test.jsx +1 -6
- package/src/components/manage/Widgets/UrlWidget.jsx +2 -0
- package/src/components/manage/Widgets/VocabularyTermsWidget.test.jsx +2 -11
- package/src/components/manage/Widgets/__mocks__/index.tsx +33 -51
- package/src/components/manage/Widgets/index.tsx +21 -0
- package/src/components/manage/Workflow/Workflow.test.jsx +2 -11
- package/src/components/theme/AlternateHrefLangs/AlternateHrefLangs.jsx +1 -3
- package/src/components/theme/AlternateHrefLangs/AlternateHrefLangs.test.jsx +0 -4
- package/src/components/theme/App/App.jsx +5 -1
- package/src/components/theme/App/App.test.jsx +1 -0
- package/src/components/theme/Avatar/Avatar.jsx +2 -1
- package/src/components/theme/Comments/CommentEditModal.test.jsx +1 -5
- package/src/components/theme/Comments/Comments.test.jsx +2 -11
- package/src/components/theme/ContactForm/ContactForm.test.jsx +1 -5
- package/src/components/theme/FormattedDate/FormattedDate.stories.jsx +20 -2
- package/src/components/theme/Image/Image.jsx +11 -8
- package/src/components/theme/InjectPloneComponentsCSS/InjectPloneComponentsCSS.tsx +7 -0
- package/src/components/theme/LanguageSelector/{LanguageSelector.test.jsx → LanguageSelector.test.tsx} +6 -6
- package/src/components/theme/LanguageSelector/LanguageSelector.tsx +89 -0
- package/src/components/theme/Logo/Logo.Multilingual.test.jsx +0 -5
- package/src/components/theme/MultilingualRedirector/MultilingualRedirector.jsx +10 -14
- package/src/components/theme/MultilingualRedirector/MultilingualRedirector.test.jsx +3 -5
- package/src/components/theme/Navigation/NavItem.jsx +1 -5
- package/src/components/theme/Navigation/Navigation.Multilingual.test.jsx +0 -5
- package/src/components/theme/NotFound/NotFound.jsx +5 -2
- package/src/components/theme/NotFound/NotFound.test.jsx +3 -0
- package/src/components/theme/PasswordReset/RequestPasswordReset.test.jsx +1 -5
- package/src/components/theme/PreviewImage/PreviewImage.jsx +1 -1
- package/src/components/theme/Register/Register.test.jsx +1 -5
- package/src/components/theme/RequestTimeout/RequestTimeout.jsx +1 -1
- package/src/components/theme/Sitemap/Sitemap.jsx +6 -5
- package/src/components/theme/Sitemap/Sitemap.test.jsx +0 -1
- package/src/components/theme/Unauthorized/Unauthorized.jsx +5 -2
- package/src/components/theme/View/EventDatesInfo.test.jsx +1 -6
- package/src/components/theme/View/EventView.test.jsx +1 -6
- package/src/components/theme/View/FileView.jsx +9 -1
- package/src/components/theme/View/View.jsx +8 -1
- package/src/components/theme/Widgets/ImageWidget.jsx +2 -1
- package/src/config/ControlPanels.js +1 -0
- package/src/config/Widgets.jsx +7 -0
- package/src/config/index.js +18 -25
- package/src/config/server.js +0 -2
- package/src/config/slots.js +19 -0
- package/src/express-middleware/devproxy.js +20 -5
- package/src/helpers/Api/APIResourceWithAuth.js +8 -3
- package/src/helpers/Api/Api.js +7 -4
- package/src/helpers/AsyncConnect/ssr.js +4 -1
- package/src/helpers/Content/Content.js +23 -0
- package/src/helpers/Content/Content.test.js +39 -0
- package/src/helpers/Content/withClientSideContent.jsx +35 -0
- package/src/helpers/Extensions/withBlockSchemaEnhancer.jsx +4 -1
- package/src/helpers/Html/Html.jsx +13 -7
- package/src/helpers/LanguageMap/LanguageMap.js +115 -8
- package/src/helpers/Loadable/__mocks__/Loadable.jsx +7 -22
- package/src/helpers/MessageLabels/MessageLabels.js +5 -0
- package/src/helpers/Sitemap/Sitemap.js +4 -4
- package/src/helpers/Url/Url.js +33 -2
- package/src/helpers/Url/Url.test.js +62 -0
- package/src/hooks/user/useUser.js +1 -1
- package/src/internalChecks.test.ts +11 -0
- package/src/middleware/Api.test.js +4 -0
- package/src/middleware/api.js +82 -28
- package/src/middleware/storeProtectLoadUtils.test.js +3 -3
- package/src/reducers/content/content.js +3 -18
- package/src/reducers/diff/diff.js +5 -1
- package/src/reducers/diff/diff.test.js +60 -4
- package/src/reducers/querystring/querystring.js +8 -1
- package/src/routes.js +4 -2
- package/src/server.jsx +45 -14
- package/src/start-client.jsx +9 -6
- package/src/start-server.js +9 -3
- package/test-addons-loader.js +3 -0
- package/test-setup-config.jsx +0 -2
- package/test-setup-globals.js +30 -2
- package/theme/themes/pastanaga/extras/blocks.less +26 -0
- package/theme/themes/pastanaga/extras/contents.less +80 -5
- package/theme/themes/pastanaga/extras/main.less +17 -2
- package/theme/themes/pastanaga/extras/widgets.less +79 -0
- package/tsconfig.declarations.json +1 -1
- package/tsconfig.json +4 -5
- package/types/components/manage/Blocks/Teaser/schema.d.ts +1 -0
- package/types/components/manage/Contents/DropZoneContent.d.ts +2 -0
- package/types/components/manage/Contents/__mocks__/index.d.ts +2 -2
- package/types/components/manage/Controlpanels/Relations/RelationsMatrix.d.ts +1 -1
- package/types/components/manage/Controlpanels/Users/RenderUsers.d.ts +18 -2
- package/types/components/manage/Controlpanels/Users/UsersControlpanel.d.ts +6 -2
- package/types/components/manage/Controlpanels/index.d.ts +2 -2
- package/types/components/manage/Form/__mocks__/index.d.ts +8 -8
- package/types/components/manage/Multilingual/ManageTranslations.d.ts +1 -1
- package/types/components/manage/Sidebar/ObjectBrowser.d.ts +1 -1
- package/types/components/manage/Sidebar/SidebarPortal.d.ts +7 -15
- package/types/components/manage/Widgets/AlignWidget.d.ts +8 -10
- package/types/components/manage/Widgets/AlignWidget.stories.d.ts +1 -0
- package/types/components/manage/Widgets/BlockAlignment.d.ts +7 -0
- package/types/components/manage/Widgets/BlockAlignment.stories.d.ts +8 -0
- package/types/components/manage/Widgets/BlockWidth.d.ts +7 -0
- package/types/components/manage/Widgets/BlockWidth.stories.d.ts +6 -0
- package/types/components/manage/Widgets/ButtonsWidget.d.ts +48 -1
- package/types/components/manage/Widgets/ButtonsWidget.stories.d.ts +3 -0
- package/types/components/manage/Widgets/FormFieldWrapper.d.ts +28 -5
- package/types/components/manage/Widgets/ImageWidget.d.ts +41 -1
- package/types/components/manage/Widgets/InternalUrlWidget.d.ts +1 -1
- package/types/components/manage/Widgets/ObjectBrowserWidget.d.ts +2 -0
- package/types/components/manage/Widgets/QueryWidget.d.ts +5 -2
- package/types/components/manage/Widgets/RecurrenceWidget/Utils.d.ts +12 -18
- package/types/components/manage/Widgets/Size.d.ts +7 -0
- package/types/components/manage/Widgets/Size.stories.d.ts +6 -0
- package/types/components/manage/Widgets/UrlWidget.d.ts +1 -1
- package/types/components/manage/Widgets/__mocks__/index.d.ts +33 -33
- package/types/components/manage/Widgets/index.d.ts +11 -6
- package/types/components/theme/FormattedDate/FormattedDate.stories.d.ts +1 -1
- package/types/components/theme/InjectPloneComponentsCSS/InjectPloneComponentsCSS.d.ts +3 -0
- package/types/components/theme/LanguageSelector/LanguageSelector.d.ts +3 -10
- package/types/components/theme/Unauthorized/Unauthorized.d.ts +2 -2
- package/types/config/Widgets.d.ts +6 -0
- package/types/config/slots.d.ts +7 -0
- package/types/helpers/Content/Content.d.ts +7 -0
- package/types/helpers/Content/withClientSideContent.d.ts +1 -0
- package/types/helpers/Extensions/withBlockSchemaEnhancer.d.ts +4 -5
- package/types/helpers/Helmet/Helmet.d.ts +1 -1
- package/types/helpers/LanguageMap/LanguageMap.d.ts +428 -4
- package/types/helpers/Loadable/__mocks__/Loadable.d.ts +2 -2
- package/types/helpers/MessageLabels/MessageLabels.d.ts +68 -62
- package/types/helpers/Url/Url.d.ts +14 -0
- package/types/helpers/Url/bulkFlattenToAppURL.d.ts +5 -0
- package/types/middleware/api.d.ts +6 -9
- package/types/reducers/index.d.ts +1 -0
- package/types/start-client.d.ts +0 -1
- package/vitest.config.mjs +4 -4
- package/webpack-plugins/webpack-scss-plugin.js +172 -0
- package/jest-addons-loader.js +0 -3
- package/jest-extender-plugin.js +0 -39
- package/jest-setup-afterenv.js +0 -2
- package/jest-svgsystem-transform.js +0 -10
- package/package-why.json +0 -34
- package/patches/patchit.sh +0 -2
- package/patches/razzle-jest.patch +0 -10
- package/src/actions/content/content.multilingual.test.js +0 -17
- package/src/components/manage/Contents/__mocks__/index.vitest.tsx +0 -5
- package/src/components/manage/Form/__mocks__/index.vitest.tsx +0 -73
- package/src/components/manage/Sidebar/SidebarPortal.jsx +0 -47
- package/src/components/manage/Sidebar/SidebarPortal.test.jsx +0 -26
- package/src/components/manage/Widgets/AlignWidget.test.jsx +0 -59
- package/src/components/manage/Widgets/ButtonsWidget.jsx +0 -41
- package/src/components/manage/Widgets/ButtonsWidget.test.jsx +0 -70
- package/src/components/manage/Widgets/__mocks__/index.vitest.tsx +0 -41
- package/src/components/theme/LanguageSelector/LanguageSelector.jsx +0 -77
- package/src/helpers/Loadable/__mocks__/Loadable.vitest.jsx +0 -39
- package/test-setup-globals-vitest.js +0 -46
- package/theme/themes/pastanaga/extras/utils.less +0 -63
|
@@ -5,12 +5,7 @@ import { Provider } from 'react-intl-redux';
|
|
|
5
5
|
import { waitFor } from '@testing-library/react';
|
|
6
6
|
import RecurrenceWidget from './RecurrenceWidget';
|
|
7
7
|
|
|
8
|
-
vi.mock('@plone/volto/helpers/Loadable/Loadable'
|
|
9
|
-
return await import(
|
|
10
|
-
'@plone/volto/helpers/Loadable/__mocks__/Loadable.vitest.jsx'
|
|
11
|
-
);
|
|
12
|
-
});
|
|
13
|
-
|
|
8
|
+
vi.mock('@plone/volto/helpers/Loadable/Loadable');
|
|
14
9
|
beforeAll(async () => {
|
|
15
10
|
const { __setLoadables } = await import(
|
|
16
11
|
'@plone/volto/helpers/Loadable/Loadable'
|
|
@@ -82,10 +82,11 @@ describe('RegistryImageWidget', () => {
|
|
|
82
82
|
const dropzone = container.querySelector('.file-widget-dropzone');
|
|
83
83
|
const preview = container.querySelector('.image-preview');
|
|
84
84
|
const filename = container.querySelector('.field-file-name');
|
|
85
|
+
const img = container.querySelector('img[src*="logo"]');
|
|
85
86
|
|
|
86
|
-
return dropzone && preview && filename;
|
|
87
|
+
return dropzone && preview && filename && img && img.complete;
|
|
87
88
|
},
|
|
88
|
-
{ timeout:
|
|
89
|
+
{ timeout: 2000 },
|
|
89
90
|
);
|
|
90
91
|
|
|
91
92
|
expect(container).toMatchSnapshot();
|
|
@@ -5,12 +5,7 @@ import { Provider } from 'react-intl-redux';
|
|
|
5
5
|
|
|
6
6
|
import SchemaWidget from './SchemaWidget';
|
|
7
7
|
|
|
8
|
-
vi.mock('@plone/volto/helpers/Loadable/Loadable'
|
|
9
|
-
return await import(
|
|
10
|
-
'@plone/volto/helpers/Loadable/__mocks__/Loadable.vitest.jsx'
|
|
11
|
-
);
|
|
12
|
-
});
|
|
13
|
-
|
|
8
|
+
vi.mock('@plone/volto/helpers/Loadable/Loadable');
|
|
14
9
|
beforeAll(async () => {
|
|
15
10
|
const { __setLoadables } = await import(
|
|
16
11
|
'@plone/volto/helpers/Loadable/Loadable'
|
|
@@ -3,12 +3,7 @@ import { DragDropContext, Droppable } from 'react-beautiful-dnd';
|
|
|
3
3
|
import { render } from '@testing-library/react';
|
|
4
4
|
import SchemaWidgetFieldsetComponent from './SchemaWidgetFieldset';
|
|
5
5
|
|
|
6
|
-
vi.mock('@plone/volto/helpers/Loadable/Loadable'
|
|
7
|
-
return await import(
|
|
8
|
-
'@plone/volto/helpers/Loadable/__mocks__/Loadable.vitest.jsx'
|
|
9
|
-
);
|
|
10
|
-
});
|
|
11
|
-
|
|
6
|
+
vi.mock('@plone/volto/helpers/Loadable/Loadable');
|
|
12
7
|
beforeAll(async () => {
|
|
13
8
|
const { __setLoadables } = await import(
|
|
14
9
|
'@plone/volto/helpers/Loadable/Loadable'
|
|
@@ -105,6 +105,7 @@ class SelectAutoComplete extends Component {
|
|
|
105
105
|
error: [],
|
|
106
106
|
choices: [],
|
|
107
107
|
value: null,
|
|
108
|
+
isMulti: true,
|
|
108
109
|
};
|
|
109
110
|
|
|
110
111
|
/**
|
|
@@ -127,10 +128,16 @@ class SelectAutoComplete extends Component {
|
|
|
127
128
|
componentDidMount() {
|
|
128
129
|
const { id, lang, value, choices } = this.props;
|
|
129
130
|
if (value && value?.length > 0) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
131
|
+
let tokensQuery;
|
|
132
|
+
if (typeof value === 'string') {
|
|
133
|
+
tokensQuery = convertValueToVocabQuery(
|
|
134
|
+
normalizeValue(choices, [value], this.props.intl),
|
|
135
|
+
);
|
|
136
|
+
} else {
|
|
137
|
+
tokensQuery = convertValueToVocabQuery(
|
|
138
|
+
normalizeValue(choices, value, this.props.intl),
|
|
139
|
+
);
|
|
140
|
+
}
|
|
134
141
|
this.props.getVocabularyTokenTitle({
|
|
135
142
|
vocabNameOrURL: this.props.vocabBaseUrl,
|
|
136
143
|
subrequest: `widget-${id}-${lang}`,
|
|
@@ -160,13 +167,22 @@ class SelectAutoComplete extends Component {
|
|
|
160
167
|
* @returns {undefined}
|
|
161
168
|
*/
|
|
162
169
|
handleChange(selectedOption) {
|
|
163
|
-
|
|
164
|
-
this.props.id,
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
+
if (!Array.isArray(selectedOption)) {
|
|
171
|
+
this.props.onChange(this.props.id, selectedOption?.value || null);
|
|
172
|
+
if (selectedOption) {
|
|
173
|
+
this.setState((state) => ({
|
|
174
|
+
termsPairsCache: [...state.termsPairsCache, selectedOption],
|
|
175
|
+
}));
|
|
176
|
+
}
|
|
177
|
+
} else {
|
|
178
|
+
this.props.onChange(
|
|
179
|
+
this.props.id,
|
|
180
|
+
selectedOption ? selectedOption.map((item) => item.value) : null,
|
|
181
|
+
);
|
|
182
|
+
this.setState((state) => ({
|
|
183
|
+
termsPairsCache: [...state.termsPairsCache, ...selectedOption],
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
170
186
|
}
|
|
171
187
|
|
|
172
188
|
timeoutRef = React.createRef();
|
|
@@ -251,7 +267,8 @@ class SelectAutoComplete extends Component {
|
|
|
251
267
|
this.props.intl.formatMessage(messages.select)
|
|
252
268
|
}
|
|
253
269
|
onChange={this.handleChange}
|
|
254
|
-
isMulti
|
|
270
|
+
isMulti={this.props.isMulti}
|
|
271
|
+
isClearable={!this.props.isMulti}
|
|
255
272
|
/>
|
|
256
273
|
</FormFieldWrapper>
|
|
257
274
|
);
|
|
@@ -6,12 +6,7 @@ import SelectAutoComplete from './SelectAutoComplete';
|
|
|
6
6
|
|
|
7
7
|
const mockStore = configureStore();
|
|
8
8
|
|
|
9
|
-
vi.mock('@plone/volto/helpers/Loadable/Loadable'
|
|
10
|
-
return await import(
|
|
11
|
-
'@plone/volto/helpers/Loadable/__mocks__/Loadable.vitest.jsx'
|
|
12
|
-
);
|
|
13
|
-
});
|
|
14
|
-
|
|
9
|
+
vi.mock('@plone/volto/helpers/Loadable/Loadable');
|
|
15
10
|
beforeAll(async () => {
|
|
16
11
|
const { __setLoadables } = await import(
|
|
17
12
|
'@plone/volto/helpers/Loadable/Loadable'
|
|
@@ -6,12 +6,7 @@ import SelectWidget from './SelectWidget';
|
|
|
6
6
|
|
|
7
7
|
const mockStore = configureStore();
|
|
8
8
|
|
|
9
|
-
vi.mock('@plone/volto/helpers/Loadable/Loadable'
|
|
10
|
-
return await import(
|
|
11
|
-
'@plone/volto/helpers/Loadable/__mocks__/Loadable.vitest.jsx'
|
|
12
|
-
);
|
|
13
|
-
});
|
|
14
|
-
|
|
9
|
+
vi.mock('@plone/volto/helpers/Loadable/Loadable');
|
|
15
10
|
beforeAll(async () => {
|
|
16
11
|
const { __setLoadables } = await import(
|
|
17
12
|
'@plone/volto/helpers/Loadable/Loadable'
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Meta, StoryFn, StoryObj } from '@storybook/react';
|
|
3
|
+
|
|
4
|
+
import Size from './Size';
|
|
5
|
+
import type { ButtonsWidgetProps } from './ButtonsWidget';
|
|
6
|
+
import {
|
|
7
|
+
RealStoreWrapper as Wrapper,
|
|
8
|
+
FormUndoWrapper,
|
|
9
|
+
} from '@plone/volto/storybook';
|
|
10
|
+
|
|
11
|
+
const meta: Meta<typeof Size> = {
|
|
12
|
+
title: 'Edit Widgets/Size',
|
|
13
|
+
component: Size,
|
|
14
|
+
decorators: [
|
|
15
|
+
(Story) => (
|
|
16
|
+
<div className="ui segment form attached" style={{ width: '400px' }}>
|
|
17
|
+
<h4>Size widget</h4>
|
|
18
|
+
<Story />
|
|
19
|
+
</div>
|
|
20
|
+
),
|
|
21
|
+
],
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export default meta;
|
|
25
|
+
|
|
26
|
+
type Story = StoryObj<typeof Size>;
|
|
27
|
+
|
|
28
|
+
type TemplateParameters = {
|
|
29
|
+
initialValue?: ButtonsWidgetProps['value'];
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const Template: StoryFn<typeof Size> = (args, context) => {
|
|
33
|
+
const { initialValue } =
|
|
34
|
+
(context.parameters as TemplateParameters | undefined) ?? {};
|
|
35
|
+
const { value: _ignoredValue, onChange: argsOnChange, ...restArgs } = args;
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<Wrapper location={{ pathname: '/folder2/folder21/doc212' }}>
|
|
39
|
+
<FormUndoWrapper
|
|
40
|
+
initialState={{ value: initialValue ?? _ignoredValue }}
|
|
41
|
+
showControls
|
|
42
|
+
>
|
|
43
|
+
{({ state, onChange }) => (
|
|
44
|
+
<div className="ui segment form attached" style={{ width: '400px' }}>
|
|
45
|
+
<Size
|
|
46
|
+
{...(restArgs as ButtonsWidgetProps)}
|
|
47
|
+
value={state.value}
|
|
48
|
+
onChange={(id, nextValue) => {
|
|
49
|
+
argsOnChange?.(id, nextValue);
|
|
50
|
+
onChange({ value: nextValue });
|
|
51
|
+
}}
|
|
52
|
+
/>
|
|
53
|
+
<pre>Value: {JSON.stringify(state.value, null, 2)}</pre>
|
|
54
|
+
</div>
|
|
55
|
+
)}
|
|
56
|
+
</FormUndoWrapper>
|
|
57
|
+
</Wrapper>
|
|
58
|
+
);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const DefaultSize: Story = {
|
|
62
|
+
render: Template,
|
|
63
|
+
args: {
|
|
64
|
+
id: 'size',
|
|
65
|
+
title: 'Size',
|
|
66
|
+
block: 'block',
|
|
67
|
+
fieldSet: 'default',
|
|
68
|
+
},
|
|
69
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
3
|
+
import { render, screen, fireEvent } from '@testing-library/react';
|
|
4
|
+
import configureStore from 'redux-mock-store';
|
|
5
|
+
import { Provider } from 'react-intl-redux';
|
|
6
|
+
|
|
7
|
+
import Size from './Size';
|
|
8
|
+
import type { ButtonsWidgetProps } from './ButtonsWidget';
|
|
9
|
+
|
|
10
|
+
const mockStore = configureStore();
|
|
11
|
+
|
|
12
|
+
const renderWidget = (props: Partial<ButtonsWidgetProps> = {}) => {
|
|
13
|
+
const onChange = props.onChange ?? vi.fn();
|
|
14
|
+
const widgetProps: ButtonsWidgetProps = {
|
|
15
|
+
id: 'size',
|
|
16
|
+
title: 'Size',
|
|
17
|
+
fieldSet: 'default',
|
|
18
|
+
onChange,
|
|
19
|
+
value: undefined,
|
|
20
|
+
default: undefined,
|
|
21
|
+
disabled: false,
|
|
22
|
+
isDisabled: false,
|
|
23
|
+
...props,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
return {
|
|
27
|
+
onChange,
|
|
28
|
+
...render(
|
|
29
|
+
<Provider
|
|
30
|
+
store={mockStore({
|
|
31
|
+
intl: {
|
|
32
|
+
locale: 'en',
|
|
33
|
+
messages: {},
|
|
34
|
+
},
|
|
35
|
+
})}
|
|
36
|
+
>
|
|
37
|
+
<Size {...widgetProps} />
|
|
38
|
+
</Provider>,
|
|
39
|
+
),
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
describe('Size widget', () => {
|
|
44
|
+
it('renders the default size options', () => {
|
|
45
|
+
renderWidget();
|
|
46
|
+
|
|
47
|
+
expect(screen.getByRole('radio', { name: 'Small' })).toBeInTheDocument();
|
|
48
|
+
expect(screen.getByRole('radio', { name: 'Medium' })).toBeInTheDocument();
|
|
49
|
+
expect(screen.getByRole('radio', { name: 'Large' })).toBeInTheDocument();
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('returns the selected size name', () => {
|
|
53
|
+
const { onChange } = renderWidget();
|
|
54
|
+
|
|
55
|
+
fireEvent.click(screen.getByRole('radio', { name: 'Medium' }));
|
|
56
|
+
|
|
57
|
+
expect(onChange).toHaveBeenCalledWith('size', 'm');
|
|
58
|
+
});
|
|
59
|
+
});
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
2
|
+
import ButtonsWidget, {
|
|
3
|
+
type ActionInfo,
|
|
4
|
+
type ButtonsWidgetProps,
|
|
5
|
+
} from './ButtonsWidget';
|
|
6
|
+
import type { IntlShape } from 'react-intl';
|
|
7
|
+
import type { StyleDefinition } from '@plone/types';
|
|
8
|
+
|
|
9
|
+
const messages = defineMessages({
|
|
10
|
+
s: {
|
|
11
|
+
id: 'Small',
|
|
12
|
+
defaultMessage: 'Small',
|
|
13
|
+
},
|
|
14
|
+
m: {
|
|
15
|
+
id: 'Medium',
|
|
16
|
+
defaultMessage: 'Medium',
|
|
17
|
+
},
|
|
18
|
+
l: {
|
|
19
|
+
id: 'Large',
|
|
20
|
+
defaultMessage: 'Large',
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export const defaultActionsInfo = ({
|
|
25
|
+
intl,
|
|
26
|
+
}: {
|
|
27
|
+
intl: IntlShape;
|
|
28
|
+
}): Record<string, ActionInfo> => ({
|
|
29
|
+
s: ['S', intl.formatMessage(messages.s)],
|
|
30
|
+
m: ['M', intl.formatMessage(messages.m)],
|
|
31
|
+
l: ['L', intl.formatMessage(messages.l)],
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const DEFAULT_ACTIONS: StyleDefinition[] = [
|
|
35
|
+
{
|
|
36
|
+
name: 's',
|
|
37
|
+
label: 'Small',
|
|
38
|
+
style: undefined,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'm',
|
|
42
|
+
label: 'Medium',
|
|
43
|
+
style: undefined,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'l',
|
|
47
|
+
label: 'Large',
|
|
48
|
+
style: undefined,
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const SizeWidget = (props: ButtonsWidgetProps) => {
|
|
53
|
+
const intl = useIntl();
|
|
54
|
+
|
|
55
|
+
const { actions = DEFAULT_ACTIONS, actionsInfoMap, filterActions } = props;
|
|
56
|
+
const filteredActions =
|
|
57
|
+
filterActions && filterActions.length > 0
|
|
58
|
+
? actions.filter((action) => {
|
|
59
|
+
const actionName = typeof action === 'string' ? action : action.name;
|
|
60
|
+
return filterActions.includes(actionName);
|
|
61
|
+
})
|
|
62
|
+
: actions;
|
|
63
|
+
|
|
64
|
+
const actionsInfo = {
|
|
65
|
+
...defaultActionsInfo({ intl }),
|
|
66
|
+
...actionsInfoMap,
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<ButtonsWidget
|
|
71
|
+
{...props}
|
|
72
|
+
actions={filteredActions}
|
|
73
|
+
actionsInfoMap={actionsInfo}
|
|
74
|
+
/>
|
|
75
|
+
);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export default SizeWidget;
|
|
@@ -6,12 +6,7 @@ import { waitFor, render, screen } from '@testing-library/react';
|
|
|
6
6
|
|
|
7
7
|
const mockStore = configureStore();
|
|
8
8
|
|
|
9
|
-
vi.mock('@plone/volto/helpers/Loadable/Loadable'
|
|
10
|
-
return await import(
|
|
11
|
-
'@plone/volto/helpers/Loadable/__mocks__/Loadable.vitest.jsx'
|
|
12
|
-
);
|
|
13
|
-
});
|
|
14
|
-
|
|
9
|
+
vi.mock('@plone/volto/helpers/Loadable/Loadable');
|
|
15
10
|
beforeAll(async () => {
|
|
16
11
|
const { __setLoadables } = await import(
|
|
17
12
|
'@plone/volto/helpers/Loadable/Loadable'
|
|
@@ -7,12 +7,7 @@ import TokenWidget from './TokenWidget';
|
|
|
7
7
|
|
|
8
8
|
const mockStore = configureStore();
|
|
9
9
|
|
|
10
|
-
vi.mock('@plone/volto/helpers/Loadable/Loadable'
|
|
11
|
-
return await import(
|
|
12
|
-
'@plone/volto/helpers/Loadable/__mocks__/Loadable.vitest.jsx'
|
|
13
|
-
);
|
|
14
|
-
});
|
|
15
|
-
|
|
10
|
+
vi.mock('@plone/volto/helpers/Loadable/Loadable');
|
|
16
11
|
beforeAll(async () => {
|
|
17
12
|
const { __setLoadables } = await import(
|
|
18
13
|
'@plone/volto/helpers/Loadable/Loadable'
|
|
@@ -105,6 +105,7 @@ export const UrlWidget = (props) => {
|
|
|
105
105
|
{value?.length > 0 ? (
|
|
106
106
|
<Button.Group>
|
|
107
107
|
<Button
|
|
108
|
+
type="button"
|
|
108
109
|
basic
|
|
109
110
|
className="cancel"
|
|
110
111
|
aria-label="clearUrlBrowser"
|
|
@@ -120,6 +121,7 @@ export const UrlWidget = (props) => {
|
|
|
120
121
|
) : (
|
|
121
122
|
<Button.Group>
|
|
122
123
|
<Button
|
|
124
|
+
type="button"
|
|
123
125
|
basic
|
|
124
126
|
icon
|
|
125
127
|
aria-label="openUrlBrowser"
|
|
@@ -4,17 +4,8 @@ import configureStore from 'redux-mock-store';
|
|
|
4
4
|
import { Provider } from 'react-intl-redux';
|
|
5
5
|
import VocabularyTermsWidget from './VocabularyTermsWidget';
|
|
6
6
|
|
|
7
|
-
vi.mock('@plone/volto/helpers/Loadable/Loadable'
|
|
8
|
-
|
|
9
|
-
'@plone/volto/helpers/Loadable/__mocks__/Loadable.vitest.jsx'
|
|
10
|
-
);
|
|
11
|
-
});
|
|
12
|
-
vi.mock('@plone/volto/components/manage/Form', async () => {
|
|
13
|
-
return await import(
|
|
14
|
-
'@plone/volto/components/manage/Form/__mocks__/index.vitest.tsx'
|
|
15
|
-
);
|
|
16
|
-
});
|
|
17
|
-
|
|
7
|
+
vi.mock('@plone/volto/helpers/Loadable/Loadable');
|
|
8
|
+
vi.mock('@plone/volto/components/manage/Form');
|
|
18
9
|
beforeAll(async () => {
|
|
19
10
|
const { __setLoadables } = await import(
|
|
20
11
|
'@plone/volto/helpers/Loadable/Loadable'
|
|
@@ -1,59 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
vi.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
vi.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
export const
|
|
18
|
-
export const
|
|
19
|
-
export const
|
|
20
|
-
export const
|
|
21
|
-
export const
|
|
22
|
-
export const
|
|
23
|
-
export const PasswordWidget = jest.fn(() => <div id="PasswordWidget" />);
|
|
24
|
-
export const QueryWidget = jest.fn(() => <div id="QueryWidget" />);
|
|
25
|
-
export const QuerySortOnWidget = jest.fn(() => <div id="QuerySortOnWidget" />);
|
|
26
|
-
export const QuerystringWidget = jest.fn(() => <div id="QuerystringWidget" />);
|
|
27
|
-
export const SchemaWidget = jest.fn(() => <div id="SchemaWidget" />);
|
|
28
|
-
export const SelectWidget = jest.fn(() => <div id="SelectWidget" />);
|
|
29
|
-
export const TextareaWidget = jest.fn(() => <div id="TextareaWidget" />);
|
|
30
|
-
export const TextWidget = jest.fn(() => <div id="TextWidget" />);
|
|
31
|
-
export const TokenWidget = jest.fn(() => <div id="TokenWidget" />);
|
|
32
|
-
export const WysiwygWidget = jest.fn(() => <div id="WysiwygWidget" />);
|
|
33
|
-
export const UrlWidget = jest.fn(() => <div id="UrlWidget" />);
|
|
34
|
-
export const InternalUrlWidget = jest.fn(() => <div id="InternalUrlWidget" />);
|
|
35
|
-
export const EmailWidget = jest.fn(() => <div id="EmailWidget" />);
|
|
36
|
-
export const NumberWidget = jest.fn(() => <div id="NumberWidget" />);
|
|
37
|
-
export const ImageSizeWidget = jest.fn(() => <div id="ImageSizeWidget" />);
|
|
38
|
-
export const RegistryImageWidget = jest.fn(() => (
|
|
1
|
+
export const AlignWidget = vi.fn(() => <div id="AlignWidget" />);
|
|
2
|
+
export const ButtonsWidget = vi.fn(() => <div id="ButtonsWidget" />);
|
|
3
|
+
export const ArrayWidget = vi.fn(() => <div id="ArrayWidget" />);
|
|
4
|
+
export const CheckboxWidget = vi.fn(() => <div id="CheckboxWidget" />);
|
|
5
|
+
export const FileWidget = vi.fn(() => <div id="FileWidget" />);
|
|
6
|
+
export const IdWidget = vi.fn(() => <div id="IdWidget" />);
|
|
7
|
+
export const PasswordWidget = vi.fn(() => <div id="PasswordWidget" />);
|
|
8
|
+
export const QueryWidget = vi.fn(() => <div id="QueryWidget" />);
|
|
9
|
+
export const QuerySortOnWidget = vi.fn(() => <div id="QuerySortOnWidget" />);
|
|
10
|
+
export const QuerystringWidget = vi.fn(() => <div id="QuerystringWidget" />);
|
|
11
|
+
export const SchemaWidget = vi.fn(() => <div id="SchemaWidget" />);
|
|
12
|
+
export const SelectWidget = vi.fn(() => <div id="SelectWidget" />);
|
|
13
|
+
export const TextareaWidget = vi.fn(() => <div id="TextareaWidget" />);
|
|
14
|
+
export const TextWidget = vi.fn(() => <div id="TextWidget" />);
|
|
15
|
+
export const TokenWidget = vi.fn(() => <div id="TokenWidget" />);
|
|
16
|
+
export const WysiwygWidget = vi.fn(() => <div id="WysiwygWidget" />);
|
|
17
|
+
export const UrlWidget = vi.fn(() => <div id="UrlWidget" />);
|
|
18
|
+
export const InternalUrlWidget = vi.fn(() => <div id="InternalUrlWidget" />);
|
|
19
|
+
export const EmailWidget = vi.fn(() => <div id="EmailWidget" />);
|
|
20
|
+
export const NumberWidget = vi.fn(() => <div id="NumberWidget" />);
|
|
21
|
+
export const ImageSizeWidget = vi.fn(() => <div id="ImageSizeWidget" />);
|
|
22
|
+
export const RegistryImageWidget = vi.fn(() => (
|
|
39
23
|
<div id="RegistryImageWidget" />
|
|
40
24
|
));
|
|
41
|
-
export const ReferenceWidget =
|
|
42
|
-
export const ObjectBrowserWidget =
|
|
25
|
+
export const ReferenceWidget = vi.fn(() => <div id="ReferenceWidget" />);
|
|
26
|
+
export const ObjectBrowserWidget = vi.fn(() => (
|
|
43
27
|
<div id="ObjectBrowserWidget" />
|
|
44
28
|
));
|
|
45
|
-
export const ObjectWidget =
|
|
46
|
-
export const ObjectListWidget =
|
|
47
|
-
export const VocabularyTermsWidget =
|
|
29
|
+
export const ObjectWidget = vi.fn(() => <div id="ObjectWidget" />);
|
|
30
|
+
export const ObjectListWidget = vi.fn(() => <div id="ObjectListWidget" />);
|
|
31
|
+
export const VocabularyTermsWidget = vi.fn(() => (
|
|
48
32
|
<div id="VocabularyTermsWidget" />
|
|
49
33
|
));
|
|
50
|
-
export const SelectMetadataWidget =
|
|
34
|
+
export const SelectMetadataWidget = vi.fn(() => (
|
|
51
35
|
<div id="SelectMetadataWidget" />
|
|
52
36
|
));
|
|
53
|
-
export const SelectAutoComplete =
|
|
54
|
-
|
|
55
|
-
));
|
|
56
|
-
export const
|
|
57
|
-
export const
|
|
58
|
-
export const RecurrenceWidget = jest.fn(() => <div id="RecurrenceWidget" />);
|
|
59
|
-
export const FormFieldWrapper = jest.fn(() => <div id="FormFieldWrapper" />);
|
|
37
|
+
export const SelectAutoComplete = vi.fn(() => <div id="SelectAutoComplete" />);
|
|
38
|
+
export const ColorPickerWidget = vi.fn(() => <div id="ColorPickerWidget" />);
|
|
39
|
+
export const DatetimeWidget = vi.fn(() => <div id="DatetimeWidget" />);
|
|
40
|
+
export const RecurrenceWidget = vi.fn(() => <div id="RecurrenceWidget" />);
|
|
41
|
+
export const FormFieldWrapper = vi.fn(() => <div id="FormFieldWrapper" />);
|
|
@@ -265,3 +265,24 @@ export const FormFieldWrapper = loadable(
|
|
|
265
265
|
/* webpackChunkName: "Widgets" */ '@plone/volto/components/manage/Widgets/FormFieldWrapper'
|
|
266
266
|
),
|
|
267
267
|
);
|
|
268
|
+
|
|
269
|
+
export const Size = loadable(
|
|
270
|
+
() =>
|
|
271
|
+
import(
|
|
272
|
+
/* webpackChunkName: "Widgets" */ '@plone/volto/components/manage/Widgets/Size'
|
|
273
|
+
),
|
|
274
|
+
);
|
|
275
|
+
|
|
276
|
+
export const BlockAlignment = loadable(
|
|
277
|
+
() =>
|
|
278
|
+
import(
|
|
279
|
+
/* webpackChunkName: "Widgets" */ '@plone/volto/components/manage/Widgets/BlockAlignment'
|
|
280
|
+
),
|
|
281
|
+
);
|
|
282
|
+
|
|
283
|
+
export const BlockWidth = loadable(
|
|
284
|
+
() =>
|
|
285
|
+
import(
|
|
286
|
+
/* webpackChunkName: "Widgets" */ '@plone/volto/components/manage/Widgets/BlockWidth'
|
|
287
|
+
),
|
|
288
|
+
);
|
|
@@ -7,17 +7,8 @@ import Workflow from './Workflow';
|
|
|
7
7
|
|
|
8
8
|
const mockStore = configureStore();
|
|
9
9
|
|
|
10
|
-
vi.mock('@plone/volto/components/manage/Widgets'
|
|
11
|
-
|
|
12
|
-
'@plone/volto/components/manage/Widgets/__mocks__/index.vitest.tsx'
|
|
13
|
-
);
|
|
14
|
-
});
|
|
15
|
-
vi.mock('@plone/volto/helpers/Loadable/Loadable', async () => {
|
|
16
|
-
return await import(
|
|
17
|
-
'@plone/volto/helpers/Loadable/__mocks__/Loadable.vitest.jsx'
|
|
18
|
-
);
|
|
19
|
-
});
|
|
20
|
-
|
|
10
|
+
vi.mock('@plone/volto/components/manage/Widgets');
|
|
11
|
+
vi.mock('@plone/volto/helpers/Loadable/Loadable');
|
|
21
12
|
beforeAll(async () => {
|
|
22
13
|
const { __setLoadables } = await import(
|
|
23
14
|
'@plone/volto/helpers/Loadable/Loadable'
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import config from '@plone/volto/registry';
|
|
2
1
|
import Helmet from '@plone/volto/helpers/Helmet/Helmet';
|
|
3
2
|
import { flattenToAppURL, toPublicURL } from '@plone/volto/helpers/Url/Url';
|
|
4
3
|
|
|
@@ -6,8 +5,7 @@ const AlternateHrefLangs = (props) => {
|
|
|
6
5
|
const { content } = props;
|
|
7
6
|
return (
|
|
8
7
|
<Helmet>
|
|
9
|
-
{
|
|
10
|
-
content['@components']?.translations?.items &&
|
|
8
|
+
{content['@components']?.translations?.items &&
|
|
11
9
|
[
|
|
12
10
|
...content['@components']?.translations?.items,
|
|
13
11
|
{ '@id': content['@id'], language: content.language.token },
|
|
@@ -13,7 +13,6 @@ const mockStore = configureStore();
|
|
|
13
13
|
describe('AlternateHrefLangs', () => {
|
|
14
14
|
beforeEach(() => {});
|
|
15
15
|
it('non multilingual site, renders nothing', () => {
|
|
16
|
-
config.settings.isMultilingual = false;
|
|
17
16
|
const content = {
|
|
18
17
|
'@id': '/',
|
|
19
18
|
'@components': {},
|
|
@@ -38,7 +37,6 @@ describe('AlternateHrefLangs', () => {
|
|
|
38
37
|
|
|
39
38
|
it('multilingual site, with some translations', () => {
|
|
40
39
|
config.settings.publicURL = 'https://plone.org';
|
|
41
|
-
config.settings.isMultilingual = true;
|
|
42
40
|
config.settings.supportedLanguages = ['en', 'es', 'eu'];
|
|
43
41
|
|
|
44
42
|
const content = {
|
|
@@ -85,7 +83,6 @@ describe('AlternateHrefLangs', () => {
|
|
|
85
83
|
|
|
86
84
|
it('multilingual site, with all available translations', () => {
|
|
87
85
|
config.settings.publicURL = 'https://plone.org';
|
|
88
|
-
config.settings.isMultilingual = true;
|
|
89
86
|
config.settings.supportedLanguages = ['en', 'es', 'eu'];
|
|
90
87
|
const store = mockStore({
|
|
91
88
|
intl: {
|
|
@@ -139,7 +136,6 @@ describe('AlternateHrefLangs', () => {
|
|
|
139
136
|
|
|
140
137
|
it('multilingual site, with all available translations - with server URL', () => {
|
|
141
138
|
config.settings.publicURL = 'https://plone.org';
|
|
142
|
-
config.settings.isMultilingual = true;
|
|
143
139
|
config.settings.supportedLanguages = ['en', 'es', 'eu'];
|
|
144
140
|
const store = mockStore({
|
|
145
141
|
intl: {
|
|
@@ -45,6 +45,7 @@ import MultilingualRedirector from '@plone/volto/components/theme/MultilingualRe
|
|
|
45
45
|
import WorkingCopyToastsFactory from '@plone/volto/components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory';
|
|
46
46
|
import LockingToastsFactory from '@plone/volto/components/manage/LockingToastsFactory/LockingToastsFactory';
|
|
47
47
|
import RouteAnnouncer from '@plone/volto/components/theme/RouteAnnouncer/RouteAnnouncer';
|
|
48
|
+
import SlotRenderer from '@plone/volto/components/theme/SlotRenderer/SlotRenderer';
|
|
48
49
|
|
|
49
50
|
/**
|
|
50
51
|
* @export
|
|
@@ -159,6 +160,7 @@ export class App extends Component {
|
|
|
159
160
|
'public-ui': !isCmsUI,
|
|
160
161
|
})}
|
|
161
162
|
/>
|
|
163
|
+
<SlotRenderer name="aboveApp" content={this.props.content} />
|
|
162
164
|
<SkipLinks />
|
|
163
165
|
<Header pathname={path} />
|
|
164
166
|
<Breadcrumbs pathname={path} />
|
|
@@ -235,7 +237,9 @@ export const fetchContent = async ({ store, location }) => {
|
|
|
235
237
|
|
|
236
238
|
const visitor = ([id, data]) => {
|
|
237
239
|
const blockType = data['@type'];
|
|
238
|
-
const
|
|
240
|
+
const block = blocksConfig[blockType];
|
|
241
|
+
if (!block) return;
|
|
242
|
+
const { getAsyncData } = block;
|
|
239
243
|
if (getAsyncData) {
|
|
240
244
|
const p = getAsyncData({
|
|
241
245
|
store,
|