@plone/volto 17.0.0-alpha.9 → 17.0.0
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/.eslintrc +26 -3
- package/CHANGELOG.md +457 -5
- package/CONTRIBUTING.md +5 -1
- package/README.md +12 -9
- package/addon-registry.js +10 -1
- package/create-addons-loader.js +1 -1
- package/cypress/support/commands.js +70 -14
- package/cypress/support/e2e.js +1 -2
- package/cypress/support/volto-slate.js +4 -5
- package/cypress.config.js +1 -0
- package/docker-compose.yml +1 -1
- package/locales/ca/LC_MESSAGES/volto.po +276 -53
- package/locales/ca.json +1 -1
- package/locales/de/LC_MESSAGES/volto.po +284 -61
- package/locales/de.json +1 -1
- package/locales/en/LC_MESSAGES/volto.po +274 -51
- package/locales/en.json +1 -1
- package/locales/es/LC_MESSAGES/volto.po +313 -90
- package/locales/es.json +1 -1
- package/locales/eu/LC_MESSAGES/volto.po +275 -52
- package/locales/eu.json +1 -1
- package/locales/fi/LC_MESSAGES/volto.po +275 -52
- package/locales/fi.json +1 -1
- package/locales/fr/LC_MESSAGES/volto.po +276 -53
- package/locales/fr.json +1 -1
- package/locales/it/LC_MESSAGES/volto.po +469 -246
- package/locales/it.json +1 -1
- package/locales/ja/LC_MESSAGES/volto.po +275 -52
- package/locales/ja.json +1 -1
- package/locales/nl/LC_MESSAGES/volto.po +276 -53
- package/locales/nl.json +1 -1
- package/locales/pt/LC_MESSAGES/volto.po +276 -53
- package/locales/pt.json +1 -1
- package/locales/pt_BR/LC_MESSAGES/volto.po +309 -86
- package/locales/pt_BR.json +1 -1
- package/locales/ro/LC_MESSAGES/volto.po +276 -53
- package/locales/ro.json +1 -1
- package/locales/volto.pot +279 -52
- package/locales/zh_CN/LC_MESSAGES/volto.po +276 -53
- package/locales/zh_CN.json +1 -1
- package/package.json +44 -34
- package/packages/volto-slate/package.json +1 -1
- package/packages/volto-slate/src/actions/index.js +1 -1
- package/packages/volto-slate/src/blocks/Table/TableBlockEdit.jsx +21 -212
- package/packages/volto-slate/src/blocks/Table/schema.js +122 -0
- package/packages/volto-slate/src/blocks/Text/DefaultTextBlockEditor.jsx +8 -3
- package/packages/volto-slate/src/blocks/Text/TextBlockView.jsx +21 -16
- package/packages/volto-slate/src/blocks/Text/extensions/withDeserializers.js +3 -1
- package/packages/volto-slate/src/blocks/Text/index.js +10 -7
- package/packages/volto-slate/src/editor/config.jsx +5 -4
- package/packages/volto-slate/src/editor/index.js +4 -4
- package/packages/volto-slate/src/editor/less/slate.less +28 -0
- package/packages/volto-slate/src/editor/plugins/Link/render.jsx +5 -6
- package/packages/volto-slate/src/editor/plugins/StyleMenu/StyleMenu.jsx +14 -4
- package/packages/volto-slate/src/editor/plugins/StyleMenu/utils.js +14 -5
- package/packages/volto-slate/src/editor/render.jsx +77 -8
- package/packages/volto-slate/src/editor/ui/SlateContextToolbar.jsx +2 -2
- package/packages/volto-slate/src/editor/ui/index.js +15 -15
- package/packages/volto-slate/src/index.js +2 -2
- package/packages/volto-slate/src/utils/blocks.js +7 -0
- package/packages/volto-slate/src/widgets/RichTextWidget.jsx +15 -8
- package/razzle.config.js +4 -6
- package/src/actions/index.js +4 -0
- package/src/actions/navroot/navroot.js +16 -0
- package/src/actions/navroot/navroot.test.js +15 -0
- package/src/actions/relations/rebuild.js +7 -7
- package/src/actions/relations/relations.js +17 -0
- package/src/actions/site/site.js +16 -0
- package/src/actions/site/site.test.js +15 -0
- package/src/actions/userSession/userSession.js +17 -1
- package/src/components/index.js +194 -192
- package/src/components/manage/Actions/Actions.jsx +133 -243
- package/src/components/manage/Add/Add.jsx +7 -8
- package/src/components/manage/AnchorPlugin/index.jsx +2 -2
- package/src/components/manage/AnchorPlugin/utils/EditorUtils.js +3 -1
- package/src/components/manage/Blocks/Block/BlocksForm.jsx +19 -2
- package/src/components/manage/Blocks/Block/Edit.jsx +1 -1
- package/src/components/manage/Blocks/Block/Settings.jsx +2 -0
- package/src/components/manage/Blocks/Block/Settings.test.jsx +92 -0
- package/src/components/manage/Blocks/Block/Style.jsx +2 -2
- package/src/components/manage/Blocks/Container/Data.jsx +32 -0
- package/src/components/manage/Blocks/Container/Edit.jsx +177 -0
- package/src/components/manage/Blocks/Container/EditBlockWrapper.jsx +121 -0
- package/src/components/manage/Blocks/Container/NewBlockAddButton.jsx +84 -0
- package/src/components/manage/Blocks/Container/SimpleContainerToolbar.jsx +54 -0
- package/src/components/manage/Blocks/Grid/Edit.jsx +47 -0
- package/src/components/manage/Blocks/Grid/View.jsx +43 -0
- package/src/components/manage/Blocks/Grid/adapter.js +14 -0
- package/src/components/manage/Blocks/Grid/grid-1.svg +6 -0
- package/src/components/manage/Blocks/Grid/grid-2.svg +9 -0
- package/src/components/manage/Blocks/Grid/grid-3.svg +10 -0
- package/src/components/manage/Blocks/Grid/grid-4.svg +11 -0
- package/src/components/manage/Blocks/Grid/schema.js +35 -0
- package/src/components/manage/Blocks/Grid/templates.js +47 -0
- package/src/components/manage/Blocks/HTML/Edit.jsx +8 -8
- package/src/components/manage/Blocks/HeroImageLeft/Edit.jsx +36 -26
- package/src/components/manage/Blocks/Image/Edit.jsx +51 -12
- package/src/components/manage/Blocks/Image/Edit.test.jsx +2 -0
- package/src/components/manage/Blocks/Image/ImageSidebar.jsx +66 -16
- package/src/components/manage/Blocks/Image/View.jsx +26 -5
- package/src/components/manage/Blocks/Image/View.test.jsx +20 -0
- package/src/components/manage/Blocks/Image/schema.js +17 -10
- package/src/components/manage/Blocks/Image/utils.js +14 -0
- package/src/components/manage/Blocks/LeadImage/Edit.jsx +32 -10
- package/src/components/manage/Blocks/LeadImage/Edit.test.jsx +11 -1
- package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.jsx +28 -9
- package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.test.jsx +8 -2
- package/src/components/manage/Blocks/LeadImage/View.jsx +50 -38
- package/src/components/manage/Blocks/LeadImage/View.test.jsx +11 -1
- package/src/components/manage/Blocks/Listing/DefaultTemplate.jsx +18 -3
- package/src/components/manage/Blocks/Listing/ListingBody.jsx +32 -8
- package/src/components/manage/Blocks/Listing/ListingBody.test.jsx +20 -0
- package/src/components/manage/Blocks/Listing/SummaryTemplate.jsx +1 -1
- package/src/components/manage/Blocks/Listing/getAsyncData.js +3 -5
- package/src/components/manage/Blocks/Listing/withQuerystringResults.jsx +27 -17
- package/src/components/manage/Blocks/Maps/Edit.jsx +135 -209
- package/src/components/manage/Blocks/Maps/Edit.test.jsx +1 -2
- package/src/components/manage/Blocks/Maps/View.test.jsx +1 -2
- package/src/components/manage/Blocks/Search/SearchBlockView.jsx +3 -2
- package/src/components/manage/Blocks/Search/components/Facets.jsx +66 -7
- package/src/components/manage/Blocks/Search/components/FilterList.jsx +4 -6
- package/src/components/manage/Blocks/Search/components/SearchInput.jsx +9 -2
- package/src/components/manage/Blocks/Search/components/SelectFacet.jsx +2 -9
- package/src/components/manage/Blocks/Search/components/index.js +13 -13
- package/src/components/manage/Blocks/Search/hocs/index.js +2 -2
- package/src/components/manage/Blocks/Search/hocs/withQueryString.jsx +5 -2
- package/src/components/manage/Blocks/Search/hocs/withSearch.jsx +70 -36
- package/src/components/manage/Blocks/Search/layout/LeftColumnFacets.jsx +17 -5
- package/src/components/manage/Blocks/Search/layout/RightColumnFacets.jsx +17 -5
- package/src/components/manage/Blocks/Search/layout/TopSideFacets.jsx +21 -5
- package/src/components/manage/Blocks/Search/schema.js +29 -14
- package/src/components/manage/Blocks/Table/Cell.jsx +2 -3
- package/src/components/manage/Blocks/Teaser/Body.jsx +0 -1
- package/src/components/manage/Blocks/Teaser/DefaultBody.jsx +5 -10
- package/src/components/manage/Blocks/Teaser/schema.js +5 -0
- package/src/components/manage/Blocks/Text/Edit.jsx +2 -3
- package/src/components/manage/Blocks/Title/View.jsx +0 -23
- package/src/components/manage/Blocks/Title/View.test.jsx +16 -1
- package/src/components/manage/Blocks/ToC/Schema.jsx +40 -7
- package/src/components/manage/Blocks/ToC/View.jsx +84 -14
- package/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx +8 -3
- package/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.test.jsx +44 -0
- package/src/components/manage/Blocks/ToC/variations/HorizontalMenu.jsx +149 -10
- package/src/components/manage/Blocks/ToC/variations/index.js +3 -1
- package/src/components/manage/Contents/Contents.jsx +285 -114
- package/src/components/manage/Contents/ContentsPropertiesModal.jsx +90 -166
- package/src/components/manage/Contents/ContentsRenameModal.jsx +88 -139
- package/src/components/manage/Contents/ContentsRenameModal.stories.jsx +61 -0
- package/src/components/manage/Contents/ContentsTagsModal.jsx +83 -130
- package/src/components/manage/Contents/ContentsTagsModal.stories.jsx +68 -0
- package/src/components/manage/Contents/ContentsUploadModal.jsx +11 -7
- package/src/components/manage/Contents/ContentsWorkflowModal.jsx +87 -154
- package/src/components/manage/Controlpanels/Aliases.jsx +4 -12
- package/src/components/manage/Controlpanels/Groups/GroupsControlpanel.jsx +65 -38
- package/src/components/manage/Controlpanels/Groups/RenderGroups.jsx +2 -2
- package/src/components/manage/Controlpanels/Relations/BrokenRelations.jsx +38 -13
- package/src/components/manage/Controlpanels/Relations/Relations.jsx +5 -5
- package/src/components/manage/Controlpanels/Relations/RelationsListing.jsx +8 -7
- package/src/components/manage/Controlpanels/Relations/RelationsMatrix.jsx +68 -68
- package/src/components/manage/Controlpanels/Rules/AddRule.jsx +3 -10
- package/src/components/manage/Controlpanels/Rules/EditRule.jsx +1 -1
- package/src/components/manage/Controlpanels/UndoControlpanel.jsx +6 -9
- package/src/components/manage/Controlpanels/Users/RenderUsers.jsx +97 -7
- package/src/components/manage/Controlpanels/Users/UsersControlpanel.jsx +127 -99
- package/src/components/manage/Delete/Delete.jsx +96 -171
- package/src/components/manage/Diff/DiffField.jsx +25 -1
- package/src/components/manage/DragDropList/DragDropList.jsx +18 -13
- package/src/components/manage/Form/BlockDataForm.jsx +3 -2
- package/src/components/manage/Form/BlockDataForm.test.jsx +51 -17
- package/src/components/manage/Form/Form.jsx +7 -6
- package/src/components/manage/Form/InlineForm.test.jsx +16 -14
- package/src/components/manage/History/History.jsx +11 -1
- package/src/components/manage/LinksToItem/LinksToItem.jsx +209 -0
- package/src/components/manage/LinksToItem/LinksToItem.test.jsx +100 -0
- package/src/components/manage/LockingToastsFactory/LockingToastsFactory.jsx +1 -2
- package/src/components/manage/Messages/Messages.jsx +32 -99
- package/src/components/manage/Messages/Messages.test.jsx +0 -1
- package/src/components/manage/Preferences/ChangePassword.jsx +2 -2
- package/src/components/manage/Sharing/Sharing.jsx +62 -22
- package/src/components/manage/Sidebar/AlignBlock.jsx +1 -1
- package/src/components/manage/Sidebar/Sidebar.jsx +139 -220
- package/src/components/manage/TemplateChooser/TemplateChooser.jsx +38 -0
- package/src/components/manage/TemplateChooser/TemplateChooser.test.jsx +34 -0
- package/src/components/manage/TemplateChooser/template.svg +10 -0
- package/src/components/manage/Toast/Toast.jsx +1 -1
- package/src/components/manage/Toolbar/More.jsx +17 -2
- package/src/components/manage/Toolbar/PersonalTools.jsx +97 -155
- package/src/components/manage/Toolbar/Toolbar.jsx +2 -2
- package/src/components/manage/UniversalLink/UniversalLink.jsx +6 -12
- package/src/components/manage/UniversalLink/UniversalLink.test.jsx +37 -0
- package/src/components/manage/Widgets/AlignWidget.jsx +2 -4
- package/src/components/manage/Widgets/ArrayWidget.jsx +3 -1
- package/src/components/manage/Widgets/ArrayWidget.test.jsx +45 -1
- package/src/components/manage/Widgets/ColorPickerWidget.jsx +6 -1
- package/src/components/manage/Widgets/ColorPickerWidget.test.jsx +9 -7
- package/src/components/manage/Widgets/DatetimeWidget.jsx +2 -8
- package/src/components/manage/Widgets/FileWidget.jsx +2 -1
- package/src/components/manage/Widgets/FormFieldWrapper.jsx +1 -1
- package/src/components/manage/Widgets/IdWidget.jsx +1 -2
- package/src/components/manage/Widgets/ObjectBrowserWidget.jsx +2 -9
- package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.jsx +3 -10
- package/src/components/manage/Widgets/RecurrenceWidget/WeekdayOfTheMonthIndexField.jsx +4 -4
- package/src/components/manage/Widgets/RegistryImageWidget.jsx +210 -0
- package/src/components/manage/Widgets/RegistryImageWidget.test.jsx +91 -0
- package/src/components/manage/Widgets/SchemaWidget.jsx +6 -9
- package/src/components/manage/Widgets/SelectUtils.js +1 -1
- package/src/components/manage/Widgets/SelectWidget.jsx +15 -1
- package/src/components/manage/Widgets/SelectWidget.test.jsx +45 -1
- package/src/components/manage/Widgets/WysiwygWidget.jsx +2 -9
- package/src/components/manage/Workflow/Workflow.jsx +75 -184
- package/src/components/theme/Anontools/Anontools.jsx +44 -72
- package/src/components/theme/Anontools/Anontools.stories.jsx +16 -6
- package/src/components/theme/Anontools/Anontools.test.jsx +16 -2
- package/src/components/theme/Breadcrumbs/Breadcrumbs.jsx +52 -99
- package/src/components/theme/Breadcrumbs/Breadcrumbs.stories.jsx +14 -13
- package/src/components/theme/Comments/Comment.stories.jsx +84 -0
- package/src/components/theme/Comments/CommentEditModal.jsx +63 -115
- package/src/components/theme/Comments/Comments.jsx +268 -380
- package/src/components/theme/Component/Component.jsx +1 -1
- package/src/components/theme/ContactForm/ContactForm.jsx +108 -192
- package/src/components/theme/ContactForm/ContactForm.stories.jsx +1 -1
- package/src/components/theme/ContactForm/ContactForm.test.jsx +2 -3
- package/src/components/theme/ContentMetadataTags/ContentMetadataTags.jsx +41 -3
- package/src/components/theme/Error/ServerError.jsx +29 -0
- package/src/components/theme/Header/Header.jsx +37 -63
- package/src/components/theme/Header/Header.test.jsx +18 -0
- package/src/components/theme/Image/Image.jsx +96 -0
- package/src/components/theme/Image/Image.test.jsx +125 -0
- package/src/components/theme/Login/Login.jsx +160 -243
- package/src/components/theme/Logo/Logo.Multilingual.test.jsx +131 -1
- package/src/components/theme/Logo/Logo.jsx +35 -27
- package/src/components/theme/Logo/Logo.test.jsx +135 -1
- package/src/components/theme/Logout/Logout.jsx +36 -83
- package/src/components/theme/Navigation/Navigation.jsx +86 -171
- package/src/components/theme/PasswordReset/PasswordReset.jsx +7 -5
- package/src/components/theme/PasswordReset/RequestPasswordReset.jsx +95 -170
- package/src/components/theme/PreviewImage/PreviewImage.jsx +31 -15
- package/src/components/theme/PreviewImage/PreviewImage.test.js +53 -13
- package/src/components/theme/Register/Register.jsx +2 -4
- package/src/components/theme/Search/SearchTags.jsx +30 -60
- package/src/components/theme/SearchWidget/SearchWidget.jsx +49 -97
- package/src/components/theme/SearchWidget/SearchWidget.test.jsx +8 -0
- package/src/components/theme/Sitemap/Sitemap.jsx +24 -13
- package/src/components/theme/Sitemap/Sitemap.test.jsx +23 -2
- package/src/components/theme/TsTest/TsTest.test.tsx +11 -0
- package/src/components/theme/TsTest/TsTest.tsx +15 -0
- package/src/components/theme/View/AlbumView.jsx +21 -16
- package/src/components/theme/View/EventView.jsx +36 -25
- package/src/components/theme/View/FileView.jsx +23 -18
- package/src/components/theme/View/ImageView.jsx +40 -32
- package/src/components/theme/View/ImageView.test.jsx +4 -0
- package/src/components/theme/View/LinkView.jsx +53 -78
- package/src/components/theme/View/ListingView.jsx +36 -28
- package/src/components/theme/View/NewsItemView.jsx +16 -17
- package/src/components/theme/View/RenderBlocks.jsx +56 -27
- package/src/components/theme/View/RenderEmptyBlock.jsx +5 -0
- package/src/components/theme/View/SummaryView.jsx +49 -39
- package/src/components/theme/View/TabularView.jsx +59 -53
- package/src/components/theme/View/View.jsx +2 -0
- package/src/components/theme/Widgets/ImageWidget.stories.jsx +1 -2
- package/src/config/Blocks.jsx +46 -0
- package/src/config/Components.jsx +3 -1
- package/src/config/ControlPanels.js +0 -1
- package/src/config/Loadables.jsx +1 -1
- package/src/config/NonContentRoutes.jsx +1 -0
- package/src/config/RichTextEditor/Blocks.jsx +4 -5
- package/src/config/RichTextEditor/FromHTML.jsx +2 -2
- package/src/config/RichTextEditor/Plugins.jsx +2 -3
- package/src/config/RichTextEditor/Styles.jsx +1 -1
- package/src/config/RichTextEditor/ToHTML.jsx +12 -10
- package/src/config/RichTextEditor/index.js +2 -3
- package/src/config/Views.jsx +6 -4
- package/src/config/Widgets.jsx +3 -0
- package/src/config/index.js +36 -2
- package/src/config/server.js +2 -0
- package/src/constants/ActionTypes.js +4 -0
- package/src/constants/Indexes.js +3 -1
- package/src/express-middleware/devproxy.js +1 -1
- package/src/express-middleware/files.js +11 -9
- package/src/express-middleware/images.js +12 -5
- package/src/express-middleware/ok.js +16 -0
- package/src/express-middleware/robotstxt.js +1 -1
- package/src/express-middleware/sitemap.js +1 -1
- package/src/express-middleware/static.js +3 -3
- package/src/helpers/Blocks/Blocks.js +52 -6
- package/src/helpers/Blocks/Blocks.test.js +92 -13
- package/src/helpers/Extensions/index.js +2 -1
- package/src/helpers/Extensions/withBlockSchemaEnhancer.js +63 -61
- package/src/helpers/Extensions/withBlockSchemaEnhancer.test.js +145 -0
- package/src/helpers/FormValidation/FormValidation.js +37 -7
- package/src/helpers/FormValidation/FormValidation.test.js +32 -0
- package/src/helpers/Html/Html.jsx +2 -8
- package/src/helpers/Loadable/__mocks__/Loadable.js +18 -18
- package/src/helpers/MessageLabels/MessageLabels.js +39 -4
- package/src/helpers/ScrollToTop/ScrollToTop.jsx +5 -3
- package/src/helpers/Site/index.js +21 -0
- package/src/helpers/Url/Url.js +22 -1
- package/src/helpers/Url/Url.test.js +41 -0
- package/src/helpers/Utils/UseDetectClickOutside.stories.jsx +190 -0
- package/src/helpers/Utils/Utils.js +35 -0
- package/src/helpers/Utils/Utils.test.js +13 -0
- package/src/helpers/Utils/usePagination.js +67 -14
- package/src/helpers/Utils/usePagination.test.js +115 -0
- package/src/helpers/index.js +15 -8
- package/src/hooks/client/useClient.js +11 -0
- package/src/hooks/clipboard/useClipboard.js +26 -0
- package/src/hooks/index.js +2 -0
- package/src/icons/grid-block.svg +11 -0
- package/src/middleware/api.js +203 -173
- package/src/middleware/blacklistRoutes.js +25 -22
- package/src/middleware/index.js +2 -2
- package/src/middleware/storeProtectLoadUtils.js +61 -62
- package/src/middleware/storeProtectLoadUtils.test.js +47 -43
- package/src/reducers/actions/actions.js +7 -5
- package/src/reducers/actions/actions.test.js +70 -0
- package/src/reducers/content/content.test.js +4 -4
- package/src/reducers/index.js +4 -0
- package/src/reducers/navigation/navigation.js +5 -5
- package/src/reducers/navigation/navigation.test.js +30 -0
- package/src/reducers/navroot/navroot.js +79 -0
- package/src/reducers/navroot/navroot.test.js +110 -0
- package/src/reducers/relations/relations.js +74 -46
- package/src/reducers/site/site.js +51 -0
- package/src/reducers/site/site.test.js +67 -0
- package/src/reducers/userSession/userSession.js +15 -1
- package/src/registry.js +2 -2
- package/src/routes.js +9 -0
- package/src/server.jsx +9 -0
- package/src/start-server.js +2 -2
- package/src/storybook.jsx +24 -38
- package/test-setup-config.js +11 -1
- package/theme/themes/pastanaga/collections/form.overrides +46 -0
- package/theme/themes/pastanaga/collections/menu.overrides +3 -2
- package/theme/themes/pastanaga/elements/container.overrides +5 -2
- package/theme/themes/pastanaga/elements/input.overrides +11 -1
- package/theme/themes/pastanaga/elements/label.overrides +10 -0
- package/theme/themes/pastanaga/elements/step.overrides +2 -1
- package/theme/themes/pastanaga/extras/blocks.less +25 -15
- package/theme/themes/pastanaga/extras/color-picker-widget.less +1 -1
- package/theme/themes/pastanaga/extras/contents.less +6 -1
- package/theme/themes/pastanaga/extras/draftjs.less +4 -4
- package/theme/themes/pastanaga/extras/grid.less +427 -0
- package/theme/themes/pastanaga/extras/login.less +3 -0
- package/theme/themes/pastanaga/extras/main.less +14 -7
- package/theme/themes/pastanaga/extras/react-dates-overrides.less +4 -2
- package/theme/themes/pastanaga/extras/search.less +7 -1
- package/theme/themes/pastanaga/extras/sidebar.less +5 -4
- package/theme/themes/pastanaga/extras/time-picker-overrides.less +5 -3
- package/theme/themes/pastanaga/extras/toc.less +29 -0
- package/theme/themes/pastanaga/extras/toolbar.less +6 -2
- package/theme/themes/pastanaga/extras/userscontrolpanel.less +17 -9
- package/theme/themes/pastanaga/extras/widgets.less +1 -1
- package/theme/themes/pastanaga/modules/rating.overrides +2 -1
- package/theme/themes/pastanaga-cms-ui/elements/container.overrides +2 -1
- package/theme/themes/pastanaga-cms-ui/extras/cms-ui.elements.container.less +6 -2
- package/theme/themes/pastanaga-cms-ui/extras/cms-ui.site.less +2 -2
- package/tsconfig.json +33 -0
- package/webpack-plugins/webpack-less-plugin.js +19 -0
- package/.yarn/install-state.gz +0 -0
- package/.yarn/releases/yarn-3.2.3.cjs +0 -783
- package/src/components/manage/Blocks/Teaser/utils.js +0 -44
- package/src/components/manage/Blocks/Teaser/utils.test.jsx +0 -229
- package/src/components/theme/Header/Header.md +0 -27
|
@@ -50,8 +50,8 @@ const messages = defineMessages({
|
|
|
50
50
|
defaultMessage: 'New password',
|
|
51
51
|
},
|
|
52
52
|
passwordDescription: {
|
|
53
|
-
id: 'Enter your new password. Minimum
|
|
54
|
-
defaultMessage: 'Enter your new password. Minimum
|
|
53
|
+
id: 'Enter your new password. Minimum 8 characters.',
|
|
54
|
+
defaultMessage: 'Enter your new password. Minimum 8 characters.',
|
|
55
55
|
},
|
|
56
56
|
passwordRepeatTitle: {
|
|
57
57
|
id: 'Confirm password',
|
|
@@ -79,8 +79,7 @@ const messages = defineMessages({
|
|
|
79
79
|
defaultMessage: 'Account activation completed',
|
|
80
80
|
},
|
|
81
81
|
successRedirectToLoginBody: {
|
|
82
|
-
id:
|
|
83
|
-
'Your password has been set successfully. You may now {link} with your new password.',
|
|
82
|
+
id: 'Your password has been set successfully. You may now {link} with your new password.',
|
|
84
83
|
defaultMessage:
|
|
85
84
|
'Your password has been set successfully. You may now {link} with your new password.',
|
|
86
85
|
},
|
|
@@ -227,6 +226,9 @@ class PasswordReset extends Component {
|
|
|
227
226
|
);
|
|
228
227
|
}
|
|
229
228
|
if (this.props.token) {
|
|
229
|
+
const errmsg = this.props.error
|
|
230
|
+
? this.props.error.response.body.error
|
|
231
|
+
: null;
|
|
230
232
|
return (
|
|
231
233
|
<div id="page-password-reset">
|
|
232
234
|
<Helmet
|
|
@@ -238,7 +240,7 @@ class PasswordReset extends Component {
|
|
|
238
240
|
description={this.props.intl.formatMessage(messages.description)}
|
|
239
241
|
onSubmit={this.onSubmit}
|
|
240
242
|
onCancel={this.onCancel}
|
|
241
|
-
error={this.state.error ||
|
|
243
|
+
error={this.state.error || errmsg}
|
|
242
244
|
schema={{
|
|
243
245
|
fieldsets: [
|
|
244
246
|
{
|
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import React, { Component } from 'react';
|
|
7
|
-
import PropTypes from 'prop-types';
|
|
8
|
-
import { connect } from 'react-redux';
|
|
9
|
-
import { compose } from 'redux';
|
|
10
|
-
import { withRouter } from 'react-router-dom';
|
|
11
|
-
import { Helmet } from '@plone/volto/helpers';
|
|
1
|
+
import { useState, useEffect, useRef } from 'react';
|
|
2
|
+
import { useDispatch, useSelector } from 'react-redux';
|
|
3
|
+
import { useHistory } from 'react-router-dom';
|
|
12
4
|
import { Container } from 'semantic-ui-react';
|
|
13
|
-
import { FormattedMessage, defineMessages,
|
|
5
|
+
import { FormattedMessage, defineMessages, useIntl } from 'react-intl';
|
|
14
6
|
|
|
7
|
+
import { Helmet, usePrevious } from '@plone/volto/helpers';
|
|
15
8
|
import { Form } from '@plone/volto/components';
|
|
16
9
|
import { resetPassword } from '@plone/volto/actions';
|
|
17
10
|
import config from '@plone/volto/registry';
|
|
@@ -56,178 +49,110 @@ const messages = defineMessages({
|
|
|
56
49
|
},
|
|
57
50
|
});
|
|
58
51
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
*/
|
|
64
|
-
class RequestPasswordReset extends Component {
|
|
65
|
-
/**
|
|
66
|
-
* Property types.
|
|
67
|
-
* @property {Object} propTypes Property types.
|
|
68
|
-
* @static
|
|
69
|
-
*/
|
|
70
|
-
static propTypes = {
|
|
71
|
-
loading: PropTypes.bool.isRequired,
|
|
72
|
-
loaded: PropTypes.bool.isRequired,
|
|
73
|
-
error: PropTypes.string,
|
|
74
|
-
resetPassword: PropTypes.func.isRequired,
|
|
75
|
-
};
|
|
52
|
+
const useUsers = () => {
|
|
53
|
+
const loading = useSelector((state) => state.users.reset.loading);
|
|
54
|
+
const loaded = useSelector((state) => state.users.reset.loaded);
|
|
55
|
+
const error = useSelector((state) => state.users.reset.error);
|
|
76
56
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
* @property {Object} defaultProps Default properties.
|
|
80
|
-
* @static
|
|
81
|
-
*/
|
|
82
|
-
static defaultProps = {
|
|
83
|
-
error: null,
|
|
84
|
-
};
|
|
57
|
+
return { loading, loaded, error };
|
|
58
|
+
};
|
|
85
59
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
this.identifierField = config.settings.useEmailAsLogin
|
|
97
|
-
? 'email'
|
|
98
|
-
: 'username';
|
|
60
|
+
const RequestPasswordReset = () => {
|
|
61
|
+
const intl = useIntl();
|
|
62
|
+
const dispatch = useDispatch();
|
|
63
|
+
const [error, setError] = useState(null);
|
|
64
|
+
const [isSuccessful, setisSuccessful] = useState(false);
|
|
65
|
+
const history = useHistory();
|
|
66
|
+
const identifierTitle = useRef();
|
|
67
|
+
const identifierRequiredMessage = useRef();
|
|
68
|
+
const { loaded, loading, error: props_error } = useUsers();
|
|
69
|
+
const prevloading = usePrevious(loading);
|
|
99
70
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
messages.emailRequired,
|
|
104
|
-
);
|
|
105
|
-
} else {
|
|
106
|
-
this.identifierTitle = this.props.intl.formatMessage(
|
|
107
|
-
messages.usernameTitle,
|
|
108
|
-
);
|
|
109
|
-
this.identifierRequiredMessage = this.props.intl.formatMessage(
|
|
110
|
-
messages.usernameRequired,
|
|
111
|
-
);
|
|
112
|
-
}
|
|
71
|
+
const identifierField = config.settings.useEmailAsLogin
|
|
72
|
+
? 'email'
|
|
73
|
+
: 'username';
|
|
113
74
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
75
|
+
if (identifierField === 'email') {
|
|
76
|
+
identifierTitle.current = intl.formatMessage(messages.emailTitle);
|
|
77
|
+
identifierRequiredMessage.current = intl.formatMessage(
|
|
78
|
+
messages.emailRequired,
|
|
79
|
+
);
|
|
80
|
+
} else {
|
|
81
|
+
identifierTitle.current = intl.formatMessage(messages.usernameTitle);
|
|
82
|
+
identifierRequiredMessage.current = intl.formatMessage(
|
|
83
|
+
messages.usernameRequired,
|
|
84
|
+
);
|
|
118
85
|
}
|
|
119
86
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
* @param {Object} nextProps Next properties
|
|
124
|
-
* @returns {undefined}
|
|
125
|
-
*/
|
|
126
|
-
UNSAFE_componentWillReceiveProps(nextProps) {
|
|
127
|
-
if (this.props.loading && nextProps.loaded) {
|
|
128
|
-
this.setState({ isSuccessful: true });
|
|
129
|
-
}
|
|
130
|
-
}
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
if (prevloading && loaded) setisSuccessful(true);
|
|
89
|
+
}, [prevloading, loaded]);
|
|
131
90
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
* @param {object} event Form data.
|
|
137
|
-
* @returns {undefined}
|
|
138
|
-
*/
|
|
139
|
-
onSubmit(data) {
|
|
140
|
-
if (data[this.identifierField]) {
|
|
141
|
-
this.props.resetPassword(data[this.identifierField]);
|
|
142
|
-
this.setState({
|
|
143
|
-
error: null,
|
|
144
|
-
});
|
|
91
|
+
const onSubmit = (data) => {
|
|
92
|
+
if (data[identifierField]) {
|
|
93
|
+
dispatch(resetPassword(data[identifierField]));
|
|
94
|
+
setError(null);
|
|
145
95
|
} else {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
message: this.identifierRequiredMessage,
|
|
149
|
-
},
|
|
96
|
+
setError({
|
|
97
|
+
message: identifierRequiredMessage.current,
|
|
150
98
|
});
|
|
151
99
|
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Cancel handler
|
|
156
|
-
* @method onCancel
|
|
157
|
-
* @returns {undefined}
|
|
158
|
-
*/
|
|
159
|
-
onCancel() {
|
|
160
|
-
this.props.history.goBack();
|
|
161
|
-
}
|
|
100
|
+
};
|
|
162
101
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
* @returns {string} Markup for the component.
|
|
167
|
-
*/
|
|
168
|
-
render() {
|
|
169
|
-
if (this.state.isSuccessful) {
|
|
170
|
-
return (
|
|
171
|
-
<Container>
|
|
172
|
-
<h1 className="documentFirstHeading">
|
|
173
|
-
<FormattedMessage
|
|
174
|
-
id="heading_sent_password"
|
|
175
|
-
defaultMessage="Password reset confirmation sent"
|
|
176
|
-
/>
|
|
177
|
-
</h1>
|
|
178
|
-
<p className="description">
|
|
179
|
-
<FormattedMessage
|
|
180
|
-
id="description_sent_password"
|
|
181
|
-
defaultMessage="Your password reset request has been mailed. It should arrive in your mailbox shortly. When you receive the message, visit the address it contains to reset your password."
|
|
182
|
-
/>
|
|
183
|
-
</p>
|
|
184
|
-
</Container>
|
|
185
|
-
);
|
|
186
|
-
}
|
|
102
|
+
const onCancel = () => {
|
|
103
|
+
history.goBack();
|
|
104
|
+
};
|
|
187
105
|
|
|
106
|
+
if (isSuccessful) {
|
|
188
107
|
return (
|
|
189
|
-
<
|
|
190
|
-
<
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
{
|
|
201
|
-
id: 'default',
|
|
202
|
-
title: this.props.intl.formatMessage(messages.default),
|
|
203
|
-
fields: [this.identifierField],
|
|
204
|
-
},
|
|
205
|
-
],
|
|
206
|
-
properties: {
|
|
207
|
-
[this.identifierField]: {
|
|
208
|
-
type: 'string',
|
|
209
|
-
title: this.identifierTitle,
|
|
210
|
-
},
|
|
211
|
-
},
|
|
212
|
-
submitLabel: this.props.intl.formatMessage(messages.sendEmail),
|
|
213
|
-
required: [this.identifierField],
|
|
214
|
-
}}
|
|
108
|
+
<Container>
|
|
109
|
+
<h1 className="documentFirstHeading">
|
|
110
|
+
<FormattedMessage
|
|
111
|
+
id="heading_sent_password"
|
|
112
|
+
defaultMessage="Password reset confirmation sent"
|
|
113
|
+
/>
|
|
114
|
+
</h1>
|
|
115
|
+
<p className="description">
|
|
116
|
+
<FormattedMessage
|
|
117
|
+
id="description_sent_password"
|
|
118
|
+
defaultMessage="Your password reset request has been mailed. It should arrive in your mailbox shortly. When you receive the message, visit the address it contains to reset your password."
|
|
215
119
|
/>
|
|
216
|
-
</
|
|
217
|
-
</
|
|
120
|
+
</p>
|
|
121
|
+
</Container>
|
|
218
122
|
);
|
|
219
123
|
}
|
|
220
|
-
}
|
|
221
124
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
125
|
+
return (
|
|
126
|
+
<div id="page-password-reset">
|
|
127
|
+
<Helmet title={intl.formatMessage(messages.passwordReset)} />
|
|
128
|
+
<Container>
|
|
129
|
+
<Form
|
|
130
|
+
title={intl.formatMessage(messages.title)}
|
|
131
|
+
description={intl.formatMessage(messages.description)}
|
|
132
|
+
onSubmit={onSubmit}
|
|
133
|
+
onCancel={onCancel}
|
|
134
|
+
error={error || props_error}
|
|
135
|
+
schema={{
|
|
136
|
+
fieldsets: [
|
|
137
|
+
{
|
|
138
|
+
id: 'default',
|
|
139
|
+
title: intl.formatMessage(messages.default),
|
|
140
|
+
fields: [identifierField],
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
properties: {
|
|
144
|
+
[identifierField]: {
|
|
145
|
+
type: 'string',
|
|
146
|
+
title: identifierTitle.current,
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
submitLabel: intl.formatMessage(messages.sendEmail),
|
|
150
|
+
required: [identifierField],
|
|
151
|
+
}}
|
|
152
|
+
/>
|
|
153
|
+
</Container>
|
|
154
|
+
</div>
|
|
155
|
+
);
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
export default RequestPasswordReset;
|
|
@@ -1,34 +1,50 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
import PropTypes from 'prop-types';
|
|
3
2
|
|
|
4
|
-
import { flattenToAppURL } from '@plone/volto/helpers';
|
|
5
3
|
import config from '@plone/volto/registry';
|
|
6
4
|
|
|
7
5
|
import DefaultImageSVG from '@plone/volto/components/manage/Blocks/Listing/default-image.svg';
|
|
8
6
|
|
|
9
7
|
/**
|
|
10
8
|
* Renders a preview image for a catalog brain result item.
|
|
11
|
-
*
|
|
12
9
|
*/
|
|
13
|
-
function PreviewImage(
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
10
|
+
function PreviewImage({ item, alt, image_field, showDefault = true, ...rest }) {
|
|
11
|
+
const Image = config.getComponent({ name: 'Image' }).component;
|
|
12
|
+
|
|
13
|
+
const image = (
|
|
14
|
+
<Image item={item} image_field={image_field} alt={alt} {...rest} />
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
if (!image && !showDefault) return null;
|
|
18
|
+
|
|
19
|
+
if (image) {
|
|
20
|
+
return image;
|
|
21
|
+
} else {
|
|
22
|
+
return (
|
|
23
|
+
<img
|
|
24
|
+
src={
|
|
25
|
+
config.getComponent({
|
|
26
|
+
name: 'DefaultImage',
|
|
27
|
+
dependencies: ['listing', 'summary'],
|
|
28
|
+
}).component || DefaultImageSVG
|
|
29
|
+
}
|
|
30
|
+
alt={alt}
|
|
31
|
+
{...rest}
|
|
32
|
+
width="400"
|
|
33
|
+
height="300"
|
|
34
|
+
/>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
23
37
|
}
|
|
24
38
|
|
|
25
39
|
PreviewImage.propTypes = {
|
|
26
|
-
size: PropTypes.string,
|
|
27
40
|
item: PropTypes.shape({
|
|
28
41
|
'@id': PropTypes.string.isRequired,
|
|
29
|
-
image_field: PropTypes.string,
|
|
30
42
|
title: PropTypes.string.isRequired,
|
|
43
|
+
image_field: PropTypes.string,
|
|
44
|
+
image_scales: PropTypes.object,
|
|
45
|
+
showDefault: PropTypes.bool,
|
|
31
46
|
}),
|
|
47
|
+
alt: PropTypes.string.isRequired,
|
|
32
48
|
};
|
|
33
49
|
|
|
34
50
|
export default PreviewImage;
|
|
@@ -7,10 +7,28 @@ describe('PreviewImage', () => {
|
|
|
7
7
|
it('renders a preview image', () => {
|
|
8
8
|
const item = {
|
|
9
9
|
image_field: 'image',
|
|
10
|
+
image_scales: {
|
|
11
|
+
image: [
|
|
12
|
+
{
|
|
13
|
+
download: '@@images/image',
|
|
14
|
+
width: 400,
|
|
15
|
+
height: 400,
|
|
16
|
+
scales: {
|
|
17
|
+
preview: {
|
|
18
|
+
download: '@@images/image-400.png',
|
|
19
|
+
width: 400,
|
|
20
|
+
height: 400,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
},
|
|
10
26
|
title: 'Item title',
|
|
11
27
|
'@id': 'http://localhost:3000/something',
|
|
12
28
|
};
|
|
13
|
-
const component = renderer.create(
|
|
29
|
+
const component = renderer.create(
|
|
30
|
+
<PreviewImage item={item} alt={item.title} />,
|
|
31
|
+
);
|
|
14
32
|
const json = component.toJSON();
|
|
15
33
|
expect(json).toMatchSnapshot();
|
|
16
34
|
});
|
|
@@ -18,70 +36,92 @@ describe('PreviewImage', () => {
|
|
|
18
36
|
it('renders a preview image with extra props', () => {
|
|
19
37
|
const item = {
|
|
20
38
|
image_field: 'image',
|
|
39
|
+
image_scales: {
|
|
40
|
+
image: [
|
|
41
|
+
{
|
|
42
|
+
download: '@@images/image',
|
|
43
|
+
width: 400,
|
|
44
|
+
height: 400,
|
|
45
|
+
scales: {
|
|
46
|
+
preview: {
|
|
47
|
+
download: '@@images/image-400.png',
|
|
48
|
+
width: 400,
|
|
49
|
+
height: 400,
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
},
|
|
21
55
|
title: 'Item title',
|
|
22
56
|
'@id': 'http://localhost:3000/something',
|
|
23
57
|
};
|
|
24
58
|
const component = renderer.create(
|
|
25
|
-
<PreviewImage item={item} className="extra" />,
|
|
59
|
+
<PreviewImage item={item} alt={item.title} className="extra" />,
|
|
26
60
|
);
|
|
27
61
|
const json = component.toJSON();
|
|
28
62
|
expect(json).toMatchSnapshot();
|
|
29
63
|
});
|
|
30
64
|
|
|
31
|
-
it('renders a
|
|
65
|
+
it('renders a fallback image', () => {
|
|
32
66
|
const item = {
|
|
33
|
-
image_field: 'image',
|
|
34
67
|
title: 'Item title',
|
|
35
68
|
'@id': 'http://localhost:3000/something',
|
|
36
69
|
};
|
|
37
70
|
const component = renderer.create(
|
|
38
|
-
<PreviewImage item={item}
|
|
71
|
+
<PreviewImage item={item} alt={item.title} />,
|
|
39
72
|
);
|
|
40
73
|
const json = component.toJSON();
|
|
41
74
|
expect(json).toMatchSnapshot();
|
|
42
75
|
});
|
|
43
76
|
|
|
44
|
-
it('renders a fallback image', () => {
|
|
77
|
+
it('renders a fallback image with extra props', () => {
|
|
45
78
|
const item = {
|
|
46
79
|
title: 'Item title',
|
|
47
80
|
'@id': 'http://localhost:3000/something',
|
|
48
81
|
};
|
|
49
|
-
const component = renderer.create(
|
|
82
|
+
const component = renderer.create(
|
|
83
|
+
<PreviewImage item={item} alt={item.title} className="extra" />,
|
|
84
|
+
);
|
|
50
85
|
const json = component.toJSON();
|
|
51
86
|
expect(json).toMatchSnapshot();
|
|
52
87
|
});
|
|
53
88
|
|
|
54
|
-
it('renders a fallback image with
|
|
89
|
+
it('renders a fallback image with alt prop empty', () => {
|
|
55
90
|
const item = {
|
|
56
91
|
title: 'Item title',
|
|
57
92
|
'@id': 'http://localhost:3000/something',
|
|
58
93
|
};
|
|
59
94
|
const component = renderer.create(
|
|
60
|
-
<PreviewImage item={item} className="extra" />,
|
|
95
|
+
<PreviewImage item={item} className="extra" alt="" />,
|
|
61
96
|
);
|
|
62
97
|
const json = component.toJSON();
|
|
63
98
|
expect(json).toMatchSnapshot();
|
|
64
99
|
});
|
|
65
100
|
|
|
66
|
-
it('renders a fallback image with alt prop
|
|
101
|
+
it('renders a fallback image with alt prop', () => {
|
|
67
102
|
const item = {
|
|
68
103
|
title: 'Item title',
|
|
69
104
|
'@id': 'http://localhost:3000/something',
|
|
70
105
|
};
|
|
71
106
|
const component = renderer.create(
|
|
72
|
-
<PreviewImage item={item} className="extra" alt="" />,
|
|
107
|
+
<PreviewImage item={item} className="extra" alt="Alt prop" />,
|
|
73
108
|
);
|
|
74
109
|
const json = component.toJSON();
|
|
75
110
|
expect(json).toMatchSnapshot();
|
|
76
111
|
});
|
|
77
112
|
|
|
78
|
-
it('renders a fallback image
|
|
113
|
+
it('not renders a fallback image if showDefault prop is false', () => {
|
|
79
114
|
const item = {
|
|
80
115
|
title: 'Item title',
|
|
81
116
|
'@id': 'http://localhost:3000/something',
|
|
82
117
|
};
|
|
83
118
|
const component = renderer.create(
|
|
84
|
-
<PreviewImage
|
|
119
|
+
<PreviewImage
|
|
120
|
+
item={item}
|
|
121
|
+
className="extra"
|
|
122
|
+
showDefault={false}
|
|
123
|
+
alt={item.title}
|
|
124
|
+
/>,
|
|
85
125
|
);
|
|
86
126
|
const json = component.toJSON();
|
|
87
127
|
expect(json).toMatchSnapshot();
|
|
@@ -37,8 +37,7 @@ const messages = defineMessages({
|
|
|
37
37
|
defaultMessage: 'E-mail',
|
|
38
38
|
},
|
|
39
39
|
emailDescription: {
|
|
40
|
-
id:
|
|
41
|
-
'Enter an email address. This will be your login name. We respect your privacy, and will not give the address away to any third parties or expose it anywhere.',
|
|
40
|
+
id: 'Enter an email address. This will be your login name. We respect your privacy, and will not give the address away to any third parties or expose it anywhere.',
|
|
42
41
|
defaultMessage:
|
|
43
42
|
'Enter an email address. This will be your login name. We respect your privacy, and will not give the address away to any third parties or expose it anywhere.',
|
|
44
43
|
},
|
|
@@ -47,8 +46,7 @@ const messages = defineMessages({
|
|
|
47
46
|
defaultMessage: 'Account Registration Completed',
|
|
48
47
|
},
|
|
49
48
|
successRegisterCompletedBody: {
|
|
50
|
-
id:
|
|
51
|
-
'The registration process has been successful. Please check your e-mail inbox for information on how activate your account.',
|
|
49
|
+
id: 'The registration process has been successful. Please check your e-mail inbox for information on how activate your account.',
|
|
52
50
|
defaultMessage:
|
|
53
51
|
'The registration process has been successful. Please check your e-mail inbox for information on how activate your account.',
|
|
54
52
|
},
|
|
@@ -1,71 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* @module components/theme/Search/SearchTags
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import React, { Component } from 'react';
|
|
7
|
-
import PropTypes from 'prop-types';
|
|
8
|
-
import { connect } from 'react-redux';
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { useDispatch, useSelector, shallowEqual } from 'react-redux';
|
|
9
3
|
import { Link } from 'react-router-dom';
|
|
10
4
|
|
|
11
5
|
import { getVocabulary } from '@plone/volto/actions';
|
|
12
6
|
|
|
13
7
|
const vocabulary = 'plone.app.vocabularies.Keywords';
|
|
14
8
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
* @class SearchTags
|
|
18
|
-
* @extends Component
|
|
19
|
-
*/
|
|
20
|
-
class SearchTags extends Component {
|
|
21
|
-
/**
|
|
22
|
-
* Property types.
|
|
23
|
-
* @property {Object} propTypes Property types.
|
|
24
|
-
* @static
|
|
25
|
-
*/
|
|
26
|
-
static propTypes = {
|
|
27
|
-
getVocabulary: PropTypes.func.isRequired,
|
|
28
|
-
items: PropTypes.arrayOf(
|
|
29
|
-
PropTypes.shape({
|
|
30
|
-
label: PropTypes.string,
|
|
31
|
-
}),
|
|
32
|
-
).isRequired,
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
componentDidMount() {
|
|
36
|
-
this.props.getVocabulary({ vocabNameOrURL: vocabulary });
|
|
37
|
-
}
|
|
9
|
+
const SearchTags = () => {
|
|
10
|
+
const dispatch = useDispatch();
|
|
38
11
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
* @returns {string} Markup for the component.
|
|
43
|
-
*/
|
|
44
|
-
render() {
|
|
45
|
-
return this.props.items && this.props.items.length > 0 ? (
|
|
46
|
-
<div>
|
|
47
|
-
{this.props.items.map((item) => (
|
|
48
|
-
<Link
|
|
49
|
-
className="ui label"
|
|
50
|
-
to={`/search?Subject=${item.label}`}
|
|
51
|
-
key={item.label}
|
|
52
|
-
>
|
|
53
|
-
{item.label}
|
|
54
|
-
</Link>
|
|
55
|
-
))}
|
|
56
|
-
</div>
|
|
57
|
-
) : (
|
|
58
|
-
<span />
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
dispatch(getVocabulary({ vocabNameOrURL: vocabulary }));
|
|
14
|
+
}, [dispatch]);
|
|
62
15
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
items:
|
|
16
|
+
const items = useSelector(
|
|
17
|
+
(state) =>
|
|
66
18
|
state.vocabularies[vocabulary] && state.vocabularies[vocabulary].items
|
|
67
19
|
? state.vocabularies[vocabulary].items
|
|
68
20
|
: [],
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
21
|
+
shallowEqual,
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
return items && items.length > 0 ? (
|
|
25
|
+
<div>
|
|
26
|
+
{items.map((item) => (
|
|
27
|
+
<Link
|
|
28
|
+
className="ui label"
|
|
29
|
+
to={`/search?Subject=${item.label}`}
|
|
30
|
+
key={item.label}
|
|
31
|
+
>
|
|
32
|
+
{item.label}
|
|
33
|
+
</Link>
|
|
34
|
+
))}
|
|
35
|
+
</div>
|
|
36
|
+
) : (
|
|
37
|
+
<span />
|
|
38
|
+
);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export default SearchTags;
|