@plone/volto 17.0.0-alpha.3 → 17.0.0-alpha.30

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.
Files changed (438) hide show
  1. package/.eslintrc +26 -3
  2. package/.yarn/install-state.gz +0 -0
  3. package/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +541 -0
  4. package/.yarn/releases/yarn-3.6.3.cjs +874 -0
  5. package/CHANGELOG.md +716 -20
  6. package/CONTRIBUTING.md +5 -1
  7. package/README.md +20 -21
  8. package/addon-registry.js +44 -1
  9. package/create-addons-loader.js +1 -1
  10. package/create-theme-addons-loader.js +79 -0
  11. package/cypress/support/commands.js +70 -14
  12. package/cypress/support/e2e.js +1 -2
  13. package/cypress/support/volto-slate.js +4 -5
  14. package/cypress.config.js +1 -0
  15. package/docker-compose.yml +1 -1
  16. package/locales/ca/LC_MESSAGES/volto.po +422 -53
  17. package/locales/ca.json +1 -1
  18. package/locales/de/LC_MESSAGES/volto.po +442 -73
  19. package/locales/de.json +1 -1
  20. package/locales/en/LC_MESSAGES/volto.po +420 -51
  21. package/locales/en.json +1 -1
  22. package/locales/es/LC_MESSAGES/volto.po +431 -62
  23. package/locales/es.json +1 -1
  24. package/locales/eu/LC_MESSAGES/volto.po +421 -52
  25. package/locales/eu.json +1 -1
  26. package/locales/fi/LC_MESSAGES/volto.po +4985 -0
  27. package/locales/fi.json +1 -1
  28. package/locales/fr/LC_MESSAGES/volto.po +422 -53
  29. package/locales/fr.json +1 -1
  30. package/locales/it/LC_MESSAGES/volto.po +589 -220
  31. package/locales/it.json +1 -1
  32. package/locales/ja/LC_MESSAGES/volto.po +421 -52
  33. package/locales/ja.json +1 -1
  34. package/locales/nl/LC_MESSAGES/volto.po +1072 -691
  35. package/locales/nl.json +1 -1
  36. package/locales/pt/LC_MESSAGES/volto.po +422 -53
  37. package/locales/pt.json +1 -1
  38. package/locales/pt_BR/LC_MESSAGES/volto.po +429 -60
  39. package/locales/pt_BR.json +1 -1
  40. package/locales/ro/LC_MESSAGES/volto.po +422 -53
  41. package/locales/ro.json +1 -1
  42. package/locales/volto.pot +425 -52
  43. package/locales/zh_CN/LC_MESSAGES/volto.po +422 -53
  44. package/locales/zh_CN.json +1 -1
  45. package/package.json +46 -35
  46. package/packages/volto-slate/build/messages/src/blocks/Table/TableBlockEdit.json +1 -1
  47. package/packages/volto-slate/build/messages/src/blocks/Text/DefaultTextBlockEditor.json +1 -1
  48. package/packages/volto-slate/build/messages/src/blocks/Text/DetachedTextBlockEditor.json +1 -1
  49. package/packages/volto-slate/build/messages/src/blocks/Text/SlashMenu.json +1 -1
  50. package/packages/volto-slate/build/messages/src/editor/plugins/AdvancedLink/index.json +1 -1
  51. package/packages/volto-slate/build/messages/src/editor/plugins/Link/index.json +1 -1
  52. package/packages/volto-slate/build/messages/src/editor/plugins/Table/index.json +1 -1
  53. package/packages/volto-slate/build/messages/src/elementEditor/messages.json +1 -1
  54. package/packages/volto-slate/build/messages/src/widgets/HtmlSlateWidget.json +1 -1
  55. package/packages/volto-slate/build/messages/src/widgets/RichTextWidgetView.json +1 -1
  56. package/packages/volto-slate/package.json +1 -1
  57. package/packages/volto-slate/src/actions/index.js +1 -1
  58. package/packages/volto-slate/src/blocks/Table/TableBlockEdit.jsx +21 -212
  59. package/packages/volto-slate/src/blocks/Table/schema.js +122 -0
  60. package/packages/volto-slate/src/blocks/Text/DefaultTextBlockEditor.jsx +8 -3
  61. package/packages/volto-slate/src/blocks/Text/SlashMenu.jsx +4 -3
  62. package/packages/volto-slate/src/blocks/Text/TextBlockView.jsx +21 -16
  63. package/packages/volto-slate/src/blocks/Text/extensions/withDeserializers.js +3 -1
  64. package/packages/volto-slate/src/blocks/Text/index.js +10 -7
  65. package/packages/volto-slate/src/editor/config.jsx +5 -4
  66. package/packages/volto-slate/src/editor/deserialize.js +0 -1
  67. package/packages/volto-slate/src/editor/index.js +4 -4
  68. package/packages/volto-slate/src/editor/less/slate.less +28 -0
  69. package/packages/volto-slate/src/editor/plugins/Link/render.jsx +5 -6
  70. package/packages/volto-slate/src/editor/plugins/StyleMenu/StyleMenu.jsx +14 -4
  71. package/packages/volto-slate/src/editor/plugins/StyleMenu/utils.js +14 -5
  72. package/packages/volto-slate/src/editor/render.jsx +77 -8
  73. package/packages/volto-slate/src/editor/ui/SlateContextToolbar.jsx +2 -2
  74. package/packages/volto-slate/src/editor/ui/index.js +15 -15
  75. package/packages/volto-slate/src/index.js +2 -2
  76. package/packages/volto-slate/src/utils/blocks.js +7 -0
  77. package/packages/volto-slate/src/widgets/RichTextWidget.jsx +15 -8
  78. package/razzle.config.js +32 -6
  79. package/src/actions/index.js +10 -0
  80. package/src/actions/language/language.js +9 -8
  81. package/src/actions/navroot/navroot.js +16 -0
  82. package/src/actions/navroot/navroot.test.js +15 -0
  83. package/src/actions/querystringsearch/querystringsearch.js +20 -14
  84. package/src/actions/relations/rebuild.js +25 -0
  85. package/src/actions/relations/relations.js +103 -0
  86. package/src/actions/relations/relations.test.js +15 -0
  87. package/src/actions/site/site.js +16 -0
  88. package/src/actions/site/site.test.js +15 -0
  89. package/src/actions/userSession/userSession.js +17 -1
  90. package/src/components/index.js +194 -191
  91. package/src/components/manage/Actions/Actions.jsx +133 -243
  92. package/src/components/manage/Add/Add.jsx +9 -10
  93. package/src/components/manage/AnchorPlugin/index.jsx +2 -2
  94. package/src/components/manage/AnchorPlugin/utils/EditorUtils.js +3 -1
  95. package/src/components/manage/BlockChooser/BlockChooser.jsx +8 -3
  96. package/src/components/manage/BlockChooser/BlockChooser.test.jsx +5 -0
  97. package/src/components/manage/Blocks/Block/BlocksForm.jsx +19 -2
  98. package/src/components/manage/Blocks/Block/Edit.jsx +1 -1
  99. package/src/components/manage/Blocks/Block/Settings.jsx +2 -0
  100. package/src/components/manage/Blocks/Block/Settings.test.jsx +92 -0
  101. package/src/components/manage/Blocks/Block/Style.jsx +2 -2
  102. package/src/components/manage/Blocks/Container/Data.jsx +32 -0
  103. package/src/components/manage/Blocks/Container/Edit.jsx +177 -0
  104. package/src/components/manage/Blocks/Container/EditBlockWrapper.jsx +121 -0
  105. package/src/components/manage/Blocks/Container/NewBlockAddButton.jsx +84 -0
  106. package/src/components/manage/Blocks/Container/SimpleContainerToolbar.jsx +54 -0
  107. package/src/components/manage/Blocks/Grid/Edit.jsx +47 -0
  108. package/src/components/manage/Blocks/Grid/View.jsx +43 -0
  109. package/src/components/manage/Blocks/Grid/adapter.js +14 -0
  110. package/src/components/manage/Blocks/Grid/grid-1.svg +6 -0
  111. package/src/components/manage/Blocks/Grid/grid-2.svg +9 -0
  112. package/src/components/manage/Blocks/Grid/grid-3.svg +10 -0
  113. package/src/components/manage/Blocks/Grid/grid-4.svg +11 -0
  114. package/src/components/manage/Blocks/Grid/schema.js +35 -0
  115. package/src/components/manage/Blocks/Grid/templates.js +47 -0
  116. package/src/components/manage/Blocks/HTML/Edit.jsx +8 -8
  117. package/src/components/manage/Blocks/HeroImageLeft/Edit.jsx +36 -26
  118. package/src/components/manage/Blocks/Image/Edit.jsx +51 -12
  119. package/src/components/manage/Blocks/Image/Edit.test.jsx +2 -0
  120. package/src/components/manage/Blocks/Image/ImageSidebar.jsx +66 -16
  121. package/src/components/manage/Blocks/Image/View.jsx +26 -5
  122. package/src/components/manage/Blocks/Image/View.test.jsx +20 -0
  123. package/src/components/manage/Blocks/Image/schema.js +17 -10
  124. package/src/components/manage/Blocks/Image/utils.js +14 -0
  125. package/src/components/manage/Blocks/LeadImage/Edit.jsx +32 -10
  126. package/src/components/manage/Blocks/LeadImage/Edit.test.jsx +11 -1
  127. package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.jsx +28 -9
  128. package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.test.jsx +8 -2
  129. package/src/components/manage/Blocks/LeadImage/View.jsx +50 -38
  130. package/src/components/manage/Blocks/LeadImage/View.test.jsx +11 -1
  131. package/src/components/manage/Blocks/Listing/DefaultTemplate.jsx +18 -3
  132. package/src/components/manage/Blocks/Listing/Edit.jsx +0 -14
  133. package/src/components/manage/Blocks/Listing/ListingBody.jsx +32 -8
  134. package/src/components/manage/Blocks/Listing/ListingBody.test.jsx +20 -0
  135. package/src/components/manage/Blocks/Listing/SummaryTemplate.jsx +1 -1
  136. package/src/components/manage/Blocks/Listing/getAsyncData.js +9 -3
  137. package/src/components/manage/Blocks/Listing/withQuerystringResults.jsx +34 -19
  138. package/src/components/manage/Blocks/Maps/Edit.jsx +135 -209
  139. package/src/components/manage/Blocks/Maps/Edit.test.jsx +1 -2
  140. package/src/components/manage/Blocks/Maps/View.test.jsx +1 -2
  141. package/src/components/manage/Blocks/Search/SearchBlockEdit.jsx +5 -4
  142. package/src/components/manage/Blocks/Search/SearchBlockView.jsx +4 -2
  143. package/src/components/manage/Blocks/Search/components/DateRangeFacet.jsx +4 -1
  144. package/src/components/manage/Blocks/Search/components/Facets.jsx +66 -7
  145. package/src/components/manage/Blocks/Search/components/FilterList.jsx +4 -6
  146. package/src/components/manage/Blocks/Search/components/SearchInput.jsx +9 -2
  147. package/src/components/manage/Blocks/Search/components/SelectFacet.jsx +2 -9
  148. package/src/components/manage/Blocks/Search/components/index.js +13 -13
  149. package/src/components/manage/Blocks/Search/hocs/index.js +2 -2
  150. package/src/components/manage/Blocks/Search/hocs/withQueryString.jsx +5 -2
  151. package/src/components/manage/Blocks/Search/hocs/withSearch.jsx +93 -46
  152. package/src/components/manage/Blocks/Search/layout/LeftColumnFacets.jsx +17 -5
  153. package/src/components/manage/Blocks/Search/layout/RightColumnFacets.jsx +17 -5
  154. package/src/components/manage/Blocks/Search/layout/TopSideFacets.jsx +21 -5
  155. package/src/components/manage/Blocks/Search/schema.js +29 -14
  156. package/src/components/manage/Blocks/Table/Cell.jsx +2 -3
  157. package/src/components/manage/Blocks/Teaser/Body.jsx +0 -1
  158. package/src/components/manage/Blocks/Teaser/DefaultBody.jsx +5 -10
  159. package/src/components/manage/Blocks/Teaser/schema.js +5 -0
  160. package/src/components/manage/Blocks/Text/Edit.jsx +2 -3
  161. package/src/components/manage/Blocks/Title/View.jsx +0 -23
  162. package/src/components/manage/Blocks/Title/View.test.jsx +16 -1
  163. package/src/components/manage/Blocks/ToC/Schema.jsx +40 -7
  164. package/src/components/manage/Blocks/ToC/View.jsx +84 -14
  165. package/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx +8 -3
  166. package/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.test.jsx +44 -0
  167. package/src/components/manage/Blocks/ToC/variations/HorizontalMenu.jsx +149 -10
  168. package/src/components/manage/Blocks/ToC/variations/index.js +3 -1
  169. package/src/components/manage/Contents/Contents.jsx +319 -139
  170. package/src/components/manage/Contents/ContentsItem.jsx +6 -0
  171. package/src/components/manage/Contents/ContentsPropertiesModal.jsx +90 -166
  172. package/src/components/manage/Contents/ContentsRenameModal.jsx +88 -139
  173. package/src/components/manage/Contents/ContentsRenameModal.stories.jsx +61 -0
  174. package/src/components/manage/Contents/ContentsTagsModal.jsx +83 -130
  175. package/src/components/manage/Contents/ContentsTagsModal.stories.jsx +68 -0
  176. package/src/components/manage/Contents/ContentsUploadModal.jsx +11 -7
  177. package/src/components/manage/Contents/ContentsWorkflowModal.jsx +87 -154
  178. package/src/components/manage/Controlpanels/Aliases.jsx +4 -12
  179. package/src/components/manage/Controlpanels/Controlpanels.jsx +199 -224
  180. package/src/components/manage/Controlpanels/Controlpanels.test.jsx +46 -7
  181. package/src/components/manage/Controlpanels/Groups/GroupsControlpanel.jsx +65 -38
  182. package/src/components/manage/Controlpanels/Groups/RenderGroups.jsx +2 -2
  183. package/src/components/manage/Controlpanels/Relations/BrokenRelations.jsx +91 -0
  184. package/src/components/manage/Controlpanels/Relations/Relations.jsx +114 -0
  185. package/src/components/manage/Controlpanels/Relations/RelationsListing.jsx +480 -0
  186. package/src/components/manage/Controlpanels/Relations/RelationsMatrix.jsx +531 -0
  187. package/src/components/manage/Controlpanels/Rules/AddRule.jsx +3 -10
  188. package/src/components/manage/Controlpanels/Rules/EditRule.jsx +1 -1
  189. package/src/components/manage/Controlpanels/UndoControlpanel.jsx +6 -9
  190. package/src/components/manage/Controlpanels/Users/RenderUsers.jsx +97 -7
  191. package/src/components/manage/Controlpanels/Users/UserGroupMembershipControlPanel.jsx +3 -3
  192. package/src/components/manage/Controlpanels/Users/UserGroupMembershipListing.jsx +51 -82
  193. package/src/components/manage/Controlpanels/Users/UserGroupMembershipMatrix.jsx +79 -75
  194. package/src/components/manage/Controlpanels/Users/UsersControlpanel.jsx +127 -99
  195. package/src/components/manage/Delete/Delete.jsx +96 -171
  196. package/src/components/manage/Diff/DiffField.jsx +25 -1
  197. package/src/components/manage/DragDropList/DragDropList.jsx +18 -13
  198. package/src/components/manage/Form/BlockDataForm.jsx +3 -2
  199. package/src/components/manage/Form/BlockDataForm.test.jsx +51 -17
  200. package/src/components/manage/Form/Form.jsx +7 -6
  201. package/src/components/manage/Form/InlineForm.jsx +39 -9
  202. package/src/components/manage/Form/InlineForm.test.jsx +16 -14
  203. package/src/components/manage/Form/InlineFormState.js +8 -0
  204. package/src/components/manage/History/History.jsx +11 -1
  205. package/src/components/manage/LinksToItem/LinksToItem.jsx +209 -0
  206. package/src/components/manage/LinksToItem/LinksToItem.test.jsx +100 -0
  207. package/src/components/manage/LockingToastsFactory/LockingToastsFactory.jsx +1 -2
  208. package/src/components/manage/Messages/Messages.jsx +32 -99
  209. package/src/components/manage/Messages/Messages.test.jsx +0 -1
  210. package/src/components/manage/Multilingual/CreateTranslation.jsx +2 -2
  211. package/src/components/manage/Multilingual/TranslationObject.jsx +4 -3
  212. package/src/components/manage/Preferences/ChangePassword.jsx +2 -2
  213. package/src/components/manage/Preferences/PersonalPreferences.jsx +2 -2
  214. package/src/components/manage/Sharing/Sharing.jsx +62 -22
  215. package/src/components/manage/Sidebar/AlignBlock.jsx +1 -1
  216. package/src/components/manage/Sidebar/Sidebar.jsx +139 -220
  217. package/src/components/manage/TemplateChooser/TemplateChooser.jsx +38 -0
  218. package/src/components/manage/TemplateChooser/TemplateChooser.test.jsx +34 -0
  219. package/src/components/manage/TemplateChooser/template.svg +10 -0
  220. package/src/components/manage/Toast/Toast.jsx +2 -2
  221. package/src/components/manage/Toolbar/More.jsx +17 -2
  222. package/src/components/manage/Toolbar/PersonalTools.jsx +97 -155
  223. package/src/components/manage/Toolbar/Toolbar.jsx +2 -2
  224. package/src/components/manage/Toolbar/Types.jsx +2 -2
  225. package/src/components/manage/UniversalLink/UniversalLink.jsx +6 -12
  226. package/src/components/manage/UniversalLink/UniversalLink.test.jsx +37 -0
  227. package/src/components/manage/Widgets/AlignWidget.jsx +2 -4
  228. package/src/components/manage/Widgets/ArrayWidget.jsx +3 -1
  229. package/src/components/manage/Widgets/ArrayWidget.test.jsx +45 -1
  230. package/src/components/manage/Widgets/ColorPickerWidget.jsx +6 -1
  231. package/src/components/manage/Widgets/ColorPickerWidget.test.jsx +9 -7
  232. package/src/components/manage/Widgets/DatetimeWidget.jsx +11 -13
  233. package/src/components/manage/Widgets/FileWidget.jsx +2 -1
  234. package/src/components/manage/Widgets/FormFieldWrapper.jsx +1 -1
  235. package/src/components/manage/Widgets/IdWidget.jsx +1 -2
  236. package/src/components/manage/Widgets/ObjectBrowserWidget.jsx +2 -9
  237. package/src/components/manage/Widgets/ObjectListWidget.jsx +3 -8
  238. package/src/components/manage/Widgets/RecurrenceWidget/ByDayField.jsx +2 -1
  239. package/src/components/manage/Widgets/RecurrenceWidget/MonthOfTheYearField.jsx +2 -1
  240. package/src/components/manage/Widgets/RecurrenceWidget/Occurences.jsx +2 -1
  241. package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.jsx +10 -12
  242. package/src/components/manage/Widgets/RecurrenceWidget/WeekdayOfTheMonthField.jsx +2 -1
  243. package/src/components/manage/Widgets/RecurrenceWidget/WeekdayOfTheMonthIndexField.jsx +4 -4
  244. package/src/components/manage/Widgets/RegistryImageWidget.jsx +210 -0
  245. package/src/components/manage/Widgets/RegistryImageWidget.test.jsx +91 -0
  246. package/src/components/manage/Widgets/SchemaWidget.jsx +6 -9
  247. package/src/components/manage/Widgets/SelectUtils.js +2 -2
  248. package/src/components/manage/Widgets/SelectWidget.jsx +16 -2
  249. package/src/components/manage/Widgets/SelectWidget.test.jsx +45 -1
  250. package/src/components/manage/Widgets/WysiwygWidget.jsx +2 -9
  251. package/src/components/manage/Workflow/Workflow.jsx +75 -184
  252. package/src/components/theme/Anontools/Anontools.jsx +44 -72
  253. package/src/components/theme/Anontools/Anontools.stories.jsx +16 -6
  254. package/src/components/theme/Anontools/Anontools.test.jsx +16 -2
  255. package/src/components/theme/Breadcrumbs/Breadcrumbs.jsx +52 -99
  256. package/src/components/theme/Breadcrumbs/Breadcrumbs.stories.jsx +14 -13
  257. package/src/components/theme/Comments/Comment.stories.jsx +84 -0
  258. package/src/components/theme/Comments/CommentEditModal.jsx +63 -115
  259. package/src/components/theme/Comments/Comments.jsx +268 -380
  260. package/src/components/theme/Component/Component.jsx +1 -1
  261. package/src/components/theme/ContactForm/ContactForm.jsx +108 -192
  262. package/src/components/theme/ContactForm/ContactForm.stories.jsx +1 -1
  263. package/src/components/theme/ContactForm/ContactForm.test.jsx +2 -3
  264. package/src/components/theme/ContentMetadataTags/ContentMetadataTags.jsx +41 -3
  265. package/src/components/theme/Error/ServerError.jsx +29 -0
  266. package/src/components/theme/Footer/Footer.jsx +2 -13
  267. package/src/components/theme/Header/Header.jsx +37 -63
  268. package/src/components/theme/Header/Header.test.jsx +18 -0
  269. package/src/components/theme/Icon/Icon.jsx +2 -2
  270. package/src/components/theme/Image/Image.jsx +96 -0
  271. package/src/components/theme/Image/Image.test.jsx +125 -0
  272. package/src/components/theme/LanguageSelector/LanguageSelector.js +8 -3
  273. package/src/components/theme/Login/Login.jsx +160 -242
  274. package/src/components/theme/Logo/Logo.Multilingual.test.jsx +131 -1
  275. package/src/components/theme/Logo/Logo.jsx +35 -26
  276. package/src/components/theme/Logo/Logo.test.jsx +135 -1
  277. package/src/components/theme/Logout/Logout.jsx +36 -83
  278. package/src/components/theme/MultilingualRedirector/MultilingualRedirector.jsx +2 -2
  279. package/src/components/theme/Navigation/NavItem.jsx +4 -2
  280. package/src/components/theme/Navigation/Navigation.jsx +86 -171
  281. package/src/components/theme/NotFound/NotFound.jsx +55 -41
  282. package/src/components/theme/PasswordReset/PasswordReset.jsx +8 -6
  283. package/src/components/theme/PasswordReset/RequestPasswordReset.jsx +96 -171
  284. package/src/components/theme/PreviewImage/PreviewImage.jsx +31 -15
  285. package/src/components/theme/PreviewImage/PreviewImage.test.js +53 -13
  286. package/src/components/theme/Register/Register.jsx +2 -4
  287. package/src/components/theme/Search/SearchTags.jsx +30 -60
  288. package/src/components/theme/SearchWidget/SearchWidget.jsx +49 -97
  289. package/src/components/theme/SearchWidget/SearchWidget.test.jsx +8 -0
  290. package/src/components/theme/Sitemap/Sitemap.jsx +25 -12
  291. package/src/components/theme/Sitemap/Sitemap.test.jsx +23 -2
  292. package/src/components/theme/TsTest/TsTest.test.tsx +11 -0
  293. package/src/components/theme/TsTest/TsTest.tsx +15 -0
  294. package/src/components/theme/View/AlbumView.jsx +21 -16
  295. package/src/components/theme/View/DefaultView.jsx +1 -1
  296. package/src/components/theme/View/EventDatesInfo.jsx +2 -1
  297. package/src/components/theme/View/EventView.jsx +36 -25
  298. package/src/components/theme/View/FileView.jsx +23 -18
  299. package/src/components/theme/View/ImageView.jsx +40 -32
  300. package/src/components/theme/View/ImageView.test.jsx +4 -0
  301. package/src/components/theme/View/LinkView.jsx +53 -78
  302. package/src/components/theme/View/ListingView.jsx +36 -28
  303. package/src/components/theme/View/NewsItemView.jsx +16 -17
  304. package/src/components/theme/View/RenderBlocks.jsx +56 -21
  305. package/src/components/theme/View/RenderEmptyBlock.jsx +5 -0
  306. package/src/components/theme/View/SummaryView.jsx +49 -39
  307. package/src/components/theme/View/TabularView.jsx +59 -53
  308. package/src/components/theme/View/View.jsx +2 -0
  309. package/src/components/theme/Widgets/DateWidget.jsx +2 -1
  310. package/src/components/theme/Widgets/DatetimeWidget.jsx +2 -1
  311. package/src/components/theme/Widgets/ImageWidget.stories.jsx +1 -2
  312. package/src/components/theme/Widgets/RelationsWidget.jsx +13 -11
  313. package/src/config/Blocks.jsx +46 -0
  314. package/src/config/Components.jsx +3 -1
  315. package/src/config/ControlPanels.js +2 -1
  316. package/src/config/Loadables.jsx +1 -1
  317. package/src/config/NonContentRoutes.jsx +1 -0
  318. package/src/config/RichTextEditor/Blocks.jsx +4 -5
  319. package/src/config/RichTextEditor/FromHTML.jsx +2 -2
  320. package/src/config/RichTextEditor/Plugins.jsx +2 -3
  321. package/src/config/RichTextEditor/Styles.jsx +1 -1
  322. package/src/config/RichTextEditor/ToHTML.jsx +12 -10
  323. package/src/config/RichTextEditor/index.js +2 -3
  324. package/src/config/Views.jsx +6 -4
  325. package/src/config/Widgets.jsx +4 -0
  326. package/src/config/index.js +38 -2
  327. package/src/config/server.js +2 -0
  328. package/src/constants/ActionTypes.js +8 -0
  329. package/src/constants/Indexes.js +3 -1
  330. package/src/constants/Languages.js +8 -4
  331. package/src/express-middleware/devproxy.js +1 -1
  332. package/src/express-middleware/files.js +11 -9
  333. package/src/express-middleware/images.js +12 -5
  334. package/src/express-middleware/ok.js +16 -0
  335. package/src/express-middleware/robotstxt.js +1 -1
  336. package/src/express-middleware/sitemap.js +37 -5
  337. package/src/express-middleware/static.js +3 -3
  338. package/src/helpers/Api/Api.js +1 -1
  339. package/src/helpers/Blocks/Blocks.js +52 -6
  340. package/src/helpers/Blocks/Blocks.test.js +92 -13
  341. package/src/helpers/Extensions/index.js +2 -1
  342. package/src/helpers/Extensions/withBlockSchemaEnhancer.js +63 -61
  343. package/src/helpers/Extensions/withBlockSchemaEnhancer.test.js +145 -0
  344. package/src/helpers/FormValidation/FormValidation.js +42 -3
  345. package/src/helpers/FormValidation/FormValidation.test.js +73 -0
  346. package/src/helpers/Html/Html.jsx +5 -9
  347. package/src/helpers/Html/Html.test.jsx +5 -0
  348. package/src/helpers/Loadable/__mocks__/Loadable.js +18 -18
  349. package/src/helpers/MessageLabels/MessageLabels.js +111 -4
  350. package/src/helpers/Robots/Robots.js +24 -6
  351. package/src/helpers/ScrollToTop/ScrollToTop.jsx +5 -3
  352. package/src/helpers/Site/index.js +21 -0
  353. package/src/helpers/Sitemap/Sitemap.js +44 -2
  354. package/src/helpers/Url/Url.js +30 -4
  355. package/src/helpers/Url/Url.test.js +55 -0
  356. package/src/helpers/Utils/UseDetectClickOutside.stories.jsx +190 -0
  357. package/src/helpers/Utils/Utils.js +73 -13
  358. package/src/helpers/Utils/Utils.test.js +17 -4
  359. package/src/helpers/Utils/usePagination.js +67 -14
  360. package/src/helpers/Utils/usePagination.test.js +115 -0
  361. package/src/helpers/index.js +22 -10
  362. package/src/hooks/client/useClient.js +11 -0
  363. package/src/hooks/clipboard/useClipboard.js +26 -0
  364. package/src/hooks/index.js +2 -0
  365. package/src/icons/grid-block.svg +11 -0
  366. package/src/middleware/Api.test.js +54 -0
  367. package/src/middleware/api.js +209 -175
  368. package/src/middleware/blacklistRoutes.js +25 -22
  369. package/src/middleware/index.js +2 -2
  370. package/src/middleware/storeProtectLoadUtils.js +61 -62
  371. package/src/middleware/storeProtectLoadUtils.test.js +47 -43
  372. package/src/reducers/actions/actions.js +8 -6
  373. package/src/reducers/actions/actions.test.js +70 -0
  374. package/src/reducers/breadcrumbs/breadcrumbs.js +1 -1
  375. package/src/reducers/content/content.test.js +4 -4
  376. package/src/reducers/index.js +6 -0
  377. package/src/reducers/navigation/navigation.js +6 -6
  378. package/src/reducers/navigation/navigation.test.js +30 -0
  379. package/src/reducers/navroot/navroot.js +79 -0
  380. package/src/reducers/navroot/navroot.test.js +110 -0
  381. package/src/reducers/relations/relations.js +201 -0
  382. package/src/reducers/site/site.js +51 -0
  383. package/src/reducers/site/site.test.js +67 -0
  384. package/src/reducers/types/types.js +1 -1
  385. package/src/reducers/userSession/userSession.js +15 -1
  386. package/src/registry.js +2 -2
  387. package/src/routes.js +14 -0
  388. package/src/server.jsx +37 -23
  389. package/src/start-server.js +2 -2
  390. package/src/storybook.jsx +24 -38
  391. package/test-setup-config.js +12 -1
  392. package/theme/themes/pastanaga/collections/form.overrides +46 -0
  393. package/theme/themes/pastanaga/collections/menu.overrides +3 -2
  394. package/theme/themes/pastanaga/elements/container.overrides +5 -2
  395. package/theme/themes/pastanaga/elements/input.overrides +11 -1
  396. package/theme/themes/pastanaga/elements/label.overrides +10 -0
  397. package/theme/themes/pastanaga/elements/step.overrides +2 -1
  398. package/theme/themes/pastanaga/extras/blocks.less +25 -15
  399. package/theme/themes/pastanaga/extras/color-picker-widget.less +1 -1
  400. package/theme/themes/pastanaga/extras/contents.less +6 -1
  401. package/theme/themes/pastanaga/extras/draftjs.less +4 -4
  402. package/theme/themes/pastanaga/extras/grid.less +427 -0
  403. package/theme/themes/pastanaga/extras/login.less +3 -0
  404. package/theme/themes/pastanaga/extras/main.less +14 -7
  405. package/theme/themes/pastanaga/extras/react-dates-overrides.less +4 -2
  406. package/theme/themes/pastanaga/extras/search.less +7 -1
  407. package/theme/themes/pastanaga/extras/sidebar.less +9 -4
  408. package/theme/themes/pastanaga/extras/time-picker-overrides.less +5 -3
  409. package/theme/themes/pastanaga/extras/toc.less +29 -0
  410. package/theme/themes/pastanaga/extras/toolbar.less +6 -2
  411. package/theme/themes/pastanaga/extras/userscontrolpanel.less +104 -73
  412. package/theme/themes/pastanaga/extras/widgets.less +1 -1
  413. package/theme/themes/pastanaga/modules/rating.overrides +2 -1
  414. package/theme/themes/pastanaga-cms-ui/elements/container.overrides +2 -1
  415. package/theme/themes/pastanaga-cms-ui/extras/cms-ui.elements.container.less +6 -2
  416. package/theme/themes/pastanaga-cms-ui/extras/cms-ui.site.less +2 -2
  417. package/tsconfig.json +33 -0
  418. package/webpack-plugins/webpack-less-plugin.js +19 -0
  419. package/.changelog.draft +0 -19
  420. package/.editorconfig +0 -36
  421. package/.storybook/main.js +0 -127
  422. package/.storybook/manager.js +0 -15
  423. package/.storybook/preview.js +0 -21
  424. package/.storybook/static/previewImage.svg +0 -48
  425. package/.vale.ini +0 -10
  426. package/.yarnrc.yml +0 -5
  427. package/jsdoc.json +0 -16
  428. package/netlify.toml +0 -5
  429. package/pyvenv.cfg +0 -3
  430. package/share/man/man1/ttx.1 +0 -225
  431. package/src/components/manage/Blocks/Teaser/utils.js +0 -44
  432. package/src/components/manage/Blocks/Teaser/utils.test.jsx +0 -229
  433. package/src/components/theme/Header/Header.md +0 -27
  434. package/styles/Vocab/Base/accept.txt +0 -0
  435. package/styles/Vocab/Base/reject.txt +0 -0
  436. package/styles/Vocab/Plone/accept.txt +0 -8
  437. package/styles/Vocab/Plone/reject.txt +0 -0
  438. package/towncrier.toml +0 -33
@@ -11,6 +11,7 @@ import {
11
11
  getControlpanel,
12
12
  updateUser,
13
13
  updateGroup,
14
+ getUserSchema,
14
15
  } from '@plone/volto/actions';
15
16
  import {
16
17
  Icon,
@@ -98,6 +99,7 @@ class UsersControlpanel extends Component {
98
99
  this.updateUserRole = this.updateUserRole.bind(this);
99
100
  this.state = {
100
101
  search: '',
102
+ isLoading: false,
101
103
  showAddUser: false,
102
104
  showAddUserErrorConfirm: false,
103
105
  addUserError: '',
@@ -107,6 +109,7 @@ class UsersControlpanel extends Component {
107
109
  isClient: false,
108
110
  currentPage: 0,
109
111
  pageSize: 10,
112
+ loginUsingEmail: false,
110
113
  };
111
114
  }
112
115
 
@@ -120,6 +123,15 @@ class UsersControlpanel extends Component {
120
123
  entries: this.props.users,
121
124
  });
122
125
  }
126
+ await this.props.getUserSchema();
127
+ };
128
+
129
+ // Because username field needs to be disabled if email login is enabled!
130
+ checkLoginUsingEmailStatus = async () => {
131
+ await this.props.getControlpanel('security');
132
+ this.setState({
133
+ loginUsingEmail: this.props.controlPanelData?.data.use_email_as_login,
134
+ });
123
135
  };
124
136
 
125
137
  /**
@@ -132,6 +144,7 @@ class UsersControlpanel extends Component {
132
144
  isClient: true,
133
145
  });
134
146
  this.fetchData();
147
+ this.checkLoginUsingEmailStatus();
135
148
  }
136
149
 
137
150
  UNSAFE_componentWillReceiveProps(nextProps) {
@@ -171,9 +184,19 @@ class UsersControlpanel extends Component {
171
184
  */
172
185
  onSearch(event) {
173
186
  event.preventDefault();
174
- this.props.listUsers({
175
- search: this.state.search,
176
- });
187
+ this.setState({ isLoading: true });
188
+ this.props
189
+ .listUsers({
190
+ search: this.state.search,
191
+ })
192
+ .then(() => {
193
+ this.setState({ isLoading: false });
194
+ })
195
+ .catch((error) => {
196
+ this.setState({ isLoading: false });
197
+ // eslint-disable-next-line no-console
198
+ console.error('Error searching users', error);
199
+ });
177
200
  }
178
201
 
179
202
  /**
@@ -255,12 +278,28 @@ class UsersControlpanel extends Component {
255
278
  * @returns {undefined}
256
279
  */
257
280
  onAddUserSubmit(data, callback) {
258
- const { groups, sendPasswordReset } = data;
259
- if (groups && groups.length > 0) this.addUserToGroup(data);
260
- this.props.createUser(data, sendPasswordReset);
261
- this.setState({
262
- addUserSetFormDataCallback: callback,
263
- });
281
+ const { groups, sendPasswordReset, password } = data;
282
+ if (
283
+ sendPasswordReset !== undefined &&
284
+ sendPasswordReset === true &&
285
+ password !== undefined
286
+ ) {
287
+ toast.error(
288
+ <Toast
289
+ error
290
+ title={this.props.intl.formatMessage(messages.error)}
291
+ content={this.props.intl.formatMessage(
292
+ messages.addUserFormPasswordAndSendPasswordTogetherNotAllowed,
293
+ )}
294
+ />,
295
+ );
296
+ } else {
297
+ if (groups && groups.length > 0) this.addUserToGroup(data);
298
+ this.props.createUser(data, sendPasswordReset);
299
+ this.setState({
300
+ addUserSetFormDataCallback: callback,
301
+ });
302
+ }
264
303
  }
265
304
 
266
305
  /**
@@ -382,6 +421,65 @@ class UsersControlpanel extends Component {
382
421
  let usernameToDelete = this.state.userToDelete
383
422
  ? this.state.userToDelete.username
384
423
  : '';
424
+ // Copy the userschema using JSON serialization/deserialization
425
+ // this is really ugly, but if we don't do this the original value
426
+ // of the userschema is changed and it is used like that through
427
+ // the lifecycle of the application
428
+ let adduserschema = {};
429
+ if (this.props?.userschema?.loaded) {
430
+ adduserschema = JSON.parse(
431
+ JSON.stringify(this.props?.userschema?.userschema),
432
+ );
433
+ adduserschema.properties['username'] = {
434
+ title: this.props.intl.formatMessage(messages.addUserFormUsernameTitle),
435
+ type: 'string',
436
+ description: this.props.intl.formatMessage(
437
+ messages.addUserFormUsernameDescription,
438
+ ),
439
+ };
440
+ adduserschema.properties['password'] = {
441
+ title: this.props.intl.formatMessage(messages.addUserFormPasswordTitle),
442
+ type: 'password',
443
+ description: this.props.intl.formatMessage(
444
+ messages.addUserFormPasswordDescription,
445
+ ),
446
+ widget: 'password',
447
+ };
448
+ adduserschema.properties['sendPasswordReset'] = {
449
+ title: this.props.intl.formatMessage(
450
+ messages.addUserFormSendPasswordResetTitle,
451
+ ),
452
+ type: 'boolean',
453
+ };
454
+ adduserschema.properties['roles'] = {
455
+ title: this.props.intl.formatMessage(messages.addUserFormRolesTitle),
456
+ type: 'array',
457
+ choices: this.props.roles.map((role) => [role.id, role.title]),
458
+ noValueOption: false,
459
+ };
460
+ adduserschema.properties['groups'] = {
461
+ title: this.props.intl.formatMessage(messages.addUserGroupNameTitle),
462
+ type: 'array',
463
+ choices: this.props.groups.map((group) => [group.id, group.id]),
464
+ noValueOption: false,
465
+ };
466
+ if (
467
+ adduserschema.fieldsets &&
468
+ adduserschema.fieldsets.length > 0 &&
469
+ !adduserschema.fieldsets[0]['fields'].includes('username')
470
+ ) {
471
+ adduserschema.fieldsets[0]['fields'] = adduserschema.fieldsets[0][
472
+ 'fields'
473
+ ].concat([
474
+ 'username',
475
+ 'password',
476
+ 'sendPasswordReset',
477
+ 'roles',
478
+ 'groups',
479
+ ]);
480
+ }
481
+ }
482
+
385
483
  return (
386
484
  <Container className="users-control-panel">
387
485
  <Helmet title={this.props.intl.formatMessage(messages.users)} />
@@ -408,7 +506,7 @@ class UsersControlpanel extends Component {
408
506
  onConfirm={this.onDeleteOk}
409
507
  size={null}
410
508
  />
411
- {this.state.showAddUser ? (
509
+ {this.props?.userschema?.loaded && this.state.showAddUser ? (
412
510
  <ModalForm
413
511
  open={this.state.showAddUser}
414
512
  className="modal"
@@ -419,92 +517,7 @@ class UsersControlpanel extends Component {
419
517
  }
420
518
  title={this.props.intl.formatMessage(messages.addUserFormTitle)}
421
519
  loading={this.props.createRequest.loading}
422
- schema={{
423
- fieldsets: [
424
- {
425
- id: 'default',
426
- title: 'FIXME: User Data',
427
- fields: [
428
- 'username',
429
- 'fullname',
430
- 'email',
431
- 'password',
432
- 'sendPasswordReset',
433
- 'roles',
434
- 'groups',
435
- ],
436
- },
437
- ],
438
- properties: {
439
- username: {
440
- title: this.props.intl.formatMessage(
441
- messages.addUserFormUsernameTitle,
442
- ),
443
- type: 'string',
444
- description: this.props.intl.formatMessage(
445
- messages.addUserFormUsernameDescription,
446
- ),
447
- },
448
- fullname: {
449
- title: this.props.intl.formatMessage(
450
- messages.addUserFormFullnameTitle,
451
- ),
452
- type: 'string',
453
- description: this.props.intl.formatMessage(
454
- messages.addUserFormFullnameDescription,
455
- ),
456
- },
457
- email: {
458
- title: this.props.intl.formatMessage(
459
- messages.addUserFormEmailTitle,
460
- ),
461
- type: 'string',
462
- description: this.props.intl.formatMessage(
463
- messages.addUserFormEmailDescription,
464
- ),
465
- widget: 'email',
466
- },
467
- password: {
468
- title: this.props.intl.formatMessage(
469
- messages.addUserFormPasswordTitle,
470
- ),
471
- type: 'password',
472
- description: this.props.intl.formatMessage(
473
- messages.addUserFormPasswordDescription,
474
- ),
475
- widget: 'password',
476
- },
477
- sendPasswordReset: {
478
- title: this.props.intl.formatMessage(
479
- messages.addUserFormSendPasswordResetTitle,
480
- ),
481
- type: 'boolean',
482
- },
483
- roles: {
484
- title: this.props.intl.formatMessage(
485
- messages.addUserFormRolesTitle,
486
- ),
487
- type: 'array',
488
- choices: this.props.roles.map((role) => [
489
- role.id,
490
- role.title,
491
- ]),
492
- noValueOption: false,
493
- },
494
- groups: {
495
- title: this.props.intl.formatMessage(
496
- messages.addUserGroupNameTitle,
497
- ),
498
- type: 'array',
499
- choices: this.props.groups.map((group) => [
500
- group.id,
501
- group.id,
502
- ]),
503
- noValueOption: false,
504
- },
505
- },
506
- required: ['username', 'email'],
507
- }}
520
+ schema={adduserschema}
508
521
  />
509
522
  ) : null}
510
523
  </div>
@@ -533,7 +546,11 @@ class UsersControlpanel extends Component {
533
546
  <Form.Field>
534
547
  <Input
535
548
  name="SearchableText"
536
- action={{ icon: 'search' }}
549
+ action={{
550
+ icon: 'search',
551
+ loading: this.state.isLoading,
552
+ disabled: this.state.isLoading,
553
+ }}
537
554
  placeholder={this.props.intl.formatMessage(
538
555
  messages.searchUsers,
539
556
  )}
@@ -544,7 +561,8 @@ class UsersControlpanel extends Component {
544
561
  </Form>
545
562
  </Segment>
546
563
  <Form>
547
- <div className="table">
564
+ {((this.props.many_users && this.state.entries.length > 0) ||
565
+ !this.props.many_users) && (
548
566
  <Table padded striped attached unstackable>
549
567
  <Table.Header>
550
568
  <Table.Row>
@@ -578,11 +596,18 @@ class UsersControlpanel extends Component {
578
596
  user={user}
579
597
  updateUser={this.updateUserRole}
580
598
  inheritedRole={this.props.inheritedRole}
599
+ userschema={this.props.userschema}
600
+ listUsers={this.props.listUsers}
581
601
  />
582
602
  ))}
583
603
  </Table.Body>
584
604
  </Table>
585
- </div>
605
+ )}
606
+ {this.state.entries.length === 0 && this.state.search && (
607
+ <Segment>
608
+ {this.props.intl.formatMessage(messages.userSearchNoResults)}
609
+ </Segment>
610
+ )}
586
611
  <div className="contents-pagination">
587
612
  <Pagination
588
613
  current={this.state.currentPage}
@@ -670,6 +695,8 @@ export default compose(
670
695
  createRequest: state.users.create,
671
696
  loadRolesRequest: state.roles,
672
697
  inheritedRole: state.authRole.authenticatedRole,
698
+ userschema: state.userschema,
699
+ controlPanelData: state.controlpanels?.controlpanel,
673
700
  }),
674
701
  (dispatch) =>
675
702
  bindActionCreators(
@@ -682,6 +709,7 @@ export default compose(
682
709
  createUser,
683
710
  updateUser,
684
711
  updateGroup,
712
+ getUserSchema,
685
713
  },
686
714
  dispatch,
687
715
  ),
@@ -1,21 +1,14 @@
1
- /**
2
- * Delete container.
3
- * @module components/manage/Delete/Delete
4
- */
5
-
6
- import React, { Component } from 'react';
7
- import PropTypes from 'prop-types';
8
- import { Helmet } from '@plone/volto/helpers';
9
- import { connect } from 'react-redux';
10
- import { compose } from 'redux';
11
- import { withRouter } from 'react-router-dom';
1
+ import { useEffect, useState } from 'react';
2
+ import { useDispatch, useSelector, shallowEqual } from 'react-redux';
3
+ import { useHistory, useLocation } from 'react-router-dom';
12
4
  import { Portal } from 'react-portal';
13
5
  import { Button, Container, List, Segment } from 'semantic-ui-react';
14
- import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
6
+ import { FormattedMessage, defineMessages, useIntl } from 'react-intl';
15
7
  import qs from 'query-string';
16
8
 
17
- import { deleteContent, getContent } from '@plone/volto/actions';
18
9
  import { Toolbar } from '@plone/volto/components';
10
+ import { Helmet, usePrevious } from '@plone/volto/helpers';
11
+ import { deleteContent, getContent } from '@plone/volto/actions';
19
12
 
20
13
  const messages = defineMessages({
21
14
  delete: {
@@ -32,172 +25,104 @@ const messages = defineMessages({
32
25
  },
33
26
  });
34
27
 
35
- /**
36
- * Delete container class.
37
- * @class Delete
38
- * @extends Component
39
- */
40
- class Delete extends Component {
41
- /**
42
- * Property types.
43
- * @property {Object} propTypes Property types.
44
- * @static
45
- */
46
- static propTypes = {
47
- deleteContent: PropTypes.func.isRequired,
48
- getContent: PropTypes.func.isRequired,
49
- deleteRequest: PropTypes.shape({
50
- loading: PropTypes.bool,
51
- loaded: PropTypes.bool,
52
- }).isRequired,
53
- pathname: PropTypes.string.isRequired,
54
- content: PropTypes.shape({
55
- title: PropTypes.string,
56
- }),
57
- returnUrl: PropTypes.string,
58
- };
28
+ const Delete = () => {
29
+ const dispatch = useDispatch();
30
+ const intl = useIntl();
31
+ const [isClient, setisClient] = useState(false);
32
+ const { pathname, search } = useLocation();
33
+ const history = useHistory();
34
+ const deleteRequest = useSelector((state) => state.content?.delete);
35
+ const content = useSelector((state) => state.content?.data, shallowEqual);
59
36
 
60
- /**
61
- * Default properties
62
- * @property {Object} defaultProps Default properties.
63
- * @static
64
- */
65
- static defaultProps = {
66
- content: null,
67
- returnUrl: null,
68
- };
37
+ const prevdeleteRequestLoading = usePrevious(deleteRequest.loading);
38
+ const returnUrl = qs.parse(search).return_url;
69
39
 
70
- /**
71
- * Constructor
72
- * @method constructor
73
- * @param {Object} props Component properties
74
- * @constructs WysiwygEditor
75
- */
76
- constructor(props) {
77
- super(props);
78
- this.onCancel = this.onCancel.bind(this);
79
- this.onSubmit = this.onSubmit.bind(this);
80
- this.state = { isClient: false };
81
- }
40
+ useEffect(() => {
41
+ setisClient(true);
42
+ }, []);
43
+
44
+ useEffect(() => {
45
+ dispatch(getContent(pathname.split('/delete')[0]));
46
+ }, [dispatch, pathname]);
82
47
 
83
- /**
84
- * Component will receive props
85
- * @method componentWillReceiveProps
86
- * @param {Object} nextProps Next properties
87
- * @returns {undefined}
88
- */
89
- UNSAFE_componentWillReceiveProps(nextProps) {
90
- if (this.props.deleteRequest.loading && nextProps.deleteRequest.loaded) {
91
- this.props.history.push(
92
- this.props.returnUrl ||
93
- this.props.pathname.replace('/delete', '').replace(/\/[^/]*$/, ''),
48
+ useEffect(() => {
49
+ if (prevdeleteRequestLoading && deleteRequest.loaded) {
50
+ history.push(
51
+ returnUrl || pathname.replace('/delete', '').replace(/\/[^/]*$/, ''),
94
52
  );
95
53
  }
96
- }
97
-
98
- /**
99
- * Component did mount
100
- * @method componentDidMount
101
- * @returns {undefined}
102
- */
103
- componentDidMount() {
104
- this.props.getContent(this.props.pathname.split('/delete')[0]);
105
- this.setState({ isClient: true });
106
- }
54
+ }, [
55
+ history,
56
+ pathname,
57
+ returnUrl,
58
+ prevdeleteRequestLoading,
59
+ deleteRequest.loaded,
60
+ ]);
107
61
 
108
- /**
109
- * Submit handler
110
- * @method onSubmit
111
- * @returns {undefined}
112
- */
113
- onSubmit() {
114
- this.props.deleteContent(this.props.pathname.replace('/delete', ''));
115
- }
62
+ const onSubmit = () => {
63
+ dispatch(deleteContent(pathname.replace('/delete', '')));
64
+ };
116
65
 
117
- /**
118
- * Cancel handler
119
- * @method onCancel
120
- * @returns {undefined}
121
- */
122
- onCancel() {
123
- this.props.history.push(this.props.pathname.replace('/delete', ''));
124
- }
66
+ const onCancel = () => {
67
+ history.push(pathname.replace('/delete', ''));
68
+ };
125
69
 
126
- /**
127
- * Render method.
128
- * @method render
129
- * @returns {string} Markup for the component.
130
- */
131
- render() {
132
- if (this.props.content) {
133
- return (
134
- <div id="page-delete">
135
- <Helmet title={this.props.intl.formatMessage(messages.delete)} />
136
- <Container>
137
- <Segment.Group raised>
138
- <Segment className="primary">
139
- <FormattedMessage
140
- id="Do you really want to delete this item?"
141
- defaultMessage="Do you really want to delete this item?"
142
- />
143
- </Segment>
144
- <Segment attached>
145
- <List bulleted>
146
- <List.Item>{this.props.content.title}</List.Item>
147
- </List>
148
- </Segment>
149
- <Segment className="actions" clearing>
150
- <Button
151
- basic
152
- circular
153
- primary
154
- floated="right"
155
- icon="arrow right"
156
- aria-label={this.props.intl.formatMessage(messages.ok)}
157
- title={this.props.intl.formatMessage(messages.ok)}
158
- size="big"
159
- onClick={this.onSubmit}
160
- />
161
- <Button
162
- basic
163
- circular
164
- secondary
165
- icon="remove"
166
- aria-label={this.props.intl.formatMessage(messages.cancel)}
167
- title={this.props.intl.formatMessage(messages.cancel)}
168
- floated="right"
169
- size="big"
170
- onClick={this.onCancel}
171
- />
172
- </Segment>
173
- </Segment.Group>
174
- </Container>
175
- {this.state.isClient && (
176
- <Portal node={document.getElementById('toolbar')}>
177
- <Toolbar
178
- pathname={this.props.pathname}
179
- hideDefaultViewButtons
180
- inner={<span />}
70
+ if (content) {
71
+ return (
72
+ <div id="page-delete">
73
+ <Helmet title={intl.formatMessage(messages.delete)} />
74
+ <Container>
75
+ <Segment.Group raised>
76
+ <Segment className="primary">
77
+ <FormattedMessage
78
+ id="Do you really want to delete this item?"
79
+ defaultMessage="Do you really want to delete this item?"
181
80
  />
182
- </Portal>
183
- )}
184
- </div>
185
- );
186
- }
187
- return <div />;
81
+ </Segment>
82
+ <Segment attached>
83
+ <List bulleted>
84
+ <List.Item>{content.title}</List.Item>
85
+ </List>
86
+ </Segment>
87
+ <Segment className="actions" clearing>
88
+ <Button
89
+ basic
90
+ circular
91
+ primary
92
+ floated="right"
93
+ icon="arrow right"
94
+ aria-label={intl.formatMessage(messages.ok)}
95
+ title={intl.formatMessage(messages.ok)}
96
+ size="big"
97
+ onClick={onSubmit}
98
+ />
99
+ <Button
100
+ basic
101
+ circular
102
+ secondary
103
+ icon="remove"
104
+ aria-label={intl.formatMessage(messages.cancel)}
105
+ title={intl.formatMessage(messages.cancel)}
106
+ floated="right"
107
+ size="big"
108
+ onClick={onCancel}
109
+ />
110
+ </Segment>
111
+ </Segment.Group>
112
+ </Container>
113
+ {isClient && (
114
+ <Portal node={document.getElementById('toolbar')}>
115
+ <Toolbar
116
+ pathname={pathname}
117
+ hideDefaultViewButtons
118
+ inner={<span />}
119
+ />
120
+ </Portal>
121
+ )}
122
+ </div>
123
+ );
188
124
  }
189
- }
125
+ return <div />;
126
+ };
190
127
 
191
- export default compose(
192
- withRouter,
193
- injectIntl,
194
- connect(
195
- (state, props) => ({
196
- content: state.content.data,
197
- deleteRequest: state.content.delete,
198
- pathname: props.location.pathname,
199
- returnUrl: qs.parse(props.location.search).return_url,
200
- }),
201
- { deleteContent, getContent },
202
- ),
203
- )(Delete);
128
+ export default Delete;
@@ -17,6 +17,7 @@ import { useSelector } from 'react-redux';
17
17
  import { Api } from '@plone/volto/helpers';
18
18
  import configureStore from '@plone/volto/store';
19
19
  import { DefaultView } from '@plone/volto/components/';
20
+ import { serializeNodes } from '@plone/volto-slate/editor/render';
20
21
 
21
22
  import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable';
22
23
 
@@ -69,7 +70,7 @@ const DiffField = ({
69
70
  .replace('\u202F', ' '),
70
71
  );
71
72
  break;
72
- case 'json':
73
+ case 'json': {
73
74
  const api = new Api();
74
75
  const history = createBrowserHistory();
75
76
  const store = configureStore(window.__data, history, api);
@@ -90,6 +91,29 @@ const DiffField = ({
90
91
  ),
91
92
  );
92
93
  break;
94
+ }
95
+ case 'slate': {
96
+ const api = new Api();
97
+ const history = createBrowserHistory();
98
+ const store = configureStore(window.__data, history, api);
99
+ parts = diffWords(
100
+ ReactDOMServer.renderToStaticMarkup(
101
+ <Provider store={store}>
102
+ <ConnectedRouter history={history}>
103
+ {serializeNodes(one)}
104
+ </ConnectedRouter>
105
+ </Provider>,
106
+ ),
107
+ ReactDOMServer.renderToStaticMarkup(
108
+ <Provider store={store}>
109
+ <ConnectedRouter history={history}>
110
+ {serializeNodes(two)}
111
+ </ConnectedRouter>
112
+ </Provider>,
113
+ ),
114
+ );
115
+ break;
116
+ }
93
117
  case 'textarea':
94
118
  default:
95
119
  parts = diffWords(one, two);