@plone/volto 19.0.0-alpha.0 → 19.0.0-alpha.10

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 (367) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc +37 -0
  3. package/CHANGELOG.md +274 -2
  4. package/README.md +3 -6
  5. package/cypress/docker/prefixed-rules.yml +26 -0
  6. package/cypress/docker/prefixed.yml +24 -0
  7. package/cypress/support/commands.js +12 -6
  8. package/cypress/support/guillotina.js +1 -0
  9. package/cypress.config.js +1 -0
  10. package/locales/af.json +1 -0
  11. package/locales/ar.json +1 -0
  12. package/locales/bg.json +1 -0
  13. package/locales/bn.json +1 -0
  14. package/locales/ca/LC_MESSAGES/volto.po +96 -17
  15. package/locales/ca.json +1 -1
  16. package/locales/cs.json +1 -0
  17. package/locales/cy.json +1 -0
  18. package/locales/da.json +1 -0
  19. package/locales/de/LC_MESSAGES/volto.po +104 -25
  20. package/locales/de.json +1 -1
  21. package/locales/el.json +1 -0
  22. package/locales/en/LC_MESSAGES/volto.po +97 -18
  23. package/locales/en.json +1 -1
  24. package/locales/en_AU.json +1 -0
  25. package/locales/en_GB.json +1 -0
  26. package/locales/eo.json +1 -0
  27. package/locales/es/LC_MESSAGES/volto.po +97 -18
  28. package/locales/es.json +1 -1
  29. package/locales/et.json +1 -0
  30. package/locales/eu/LC_MESSAGES/volto.po +96 -17
  31. package/locales/eu.json +1 -1
  32. package/locales/fa.json +1 -0
  33. package/locales/fi/LC_MESSAGES/volto.po +96 -17
  34. package/locales/fi.json +1 -1
  35. package/locales/fr/LC_MESSAGES/volto.po +97 -18
  36. package/locales/fr.json +1 -1
  37. package/locales/fu.json +1 -0
  38. package/locales/gl.json +1 -0
  39. package/locales/he.json +1 -0
  40. package/locales/hi/LC_MESSAGES/volto.po +100 -21
  41. package/locales/hi.json +1 -1
  42. package/locales/hr.json +1 -0
  43. package/locales/hu.json +1 -0
  44. package/locales/hy.json +1 -0
  45. package/locales/id.json +1 -0
  46. package/locales/it/LC_MESSAGES/volto.po +101 -22
  47. package/locales/it.json +1 -1
  48. package/locales/ja/LC_MESSAGES/volto.po +96 -17
  49. package/locales/ja.json +1 -1
  50. package/locales/ka.json +1 -0
  51. package/locales/kn.json +1 -0
  52. package/locales/ko.json +1 -0
  53. package/locales/lt.json +1 -0
  54. package/locales/lv.json +1 -0
  55. package/locales/mi.json +1 -0
  56. package/locales/mk.json +1 -0
  57. package/locales/my.json +1 -0
  58. package/locales/nb_NO.json +1 -0
  59. package/locales/nl/LC_MESSAGES/volto.po +100 -21
  60. package/locales/nl.json +1 -1
  61. package/locales/nn.json +1 -0
  62. package/locales/pl.json +1 -0
  63. package/locales/pt/LC_MESSAGES/volto.po +96 -17
  64. package/locales/pt.json +1 -1
  65. package/locales/pt_BR/LC_MESSAGES/volto.po +116 -37
  66. package/locales/pt_BR.json +1 -1
  67. package/locales/rm.json +1 -0
  68. package/locales/ro/LC_MESSAGES/volto.po +100 -21
  69. package/locales/ro.json +1 -1
  70. package/locales/ru/LC_MESSAGES/volto.po +100 -21
  71. package/locales/ru.json +1 -1
  72. package/locales/sk.json +1 -0
  73. package/locales/sl.json +1 -0
  74. package/locales/sm.json +1 -0
  75. package/locales/sq.json +1 -0
  76. package/locales/sr.json +1 -0
  77. package/locales/sr@cyrl.json +1 -0
  78. package/locales/sr@latn.json +1 -0
  79. package/locales/sv.json +1 -1
  80. package/locales/ta.json +1 -0
  81. package/locales/te.json +1 -0
  82. package/locales/th.json +1 -0
  83. package/locales/to.json +1 -0
  84. package/locales/tr.json +1 -0
  85. package/locales/uk.json +1 -0
  86. package/locales/vi.json +1 -0
  87. package/locales/volto.pot +97 -18
  88. package/locales/zh_CN/LC_MESSAGES/volto.po +96 -17
  89. package/locales/zh_CN.json +1 -1
  90. package/locales/zh_Hant.json +1 -0
  91. package/locales/zh_Hant_HK.json +1 -0
  92. package/package.json +36 -27
  93. package/razzle.config.js +16 -0
  94. package/src/actions/actions/actions.test.js +3 -3
  95. package/src/actions/addons/addons.test.js +15 -12
  96. package/src/actions/aliases/aliases.test.js +1 -1
  97. package/src/actions/content/content.js +0 -1
  98. package/src/actions/controlpanels/controlpanels.js +13 -7
  99. package/src/actions/controlpanels/controlpanels.test.js +11 -5
  100. package/src/actions/querystring/querystring.test.js +2 -2
  101. package/src/actions/types/types.test.js +1 -1
  102. package/src/actions/users/users.js +2 -2
  103. package/src/components/manage/Actions/Actions.test.jsx +5 -1
  104. package/src/components/manage/Add/Add.jsx +27 -26
  105. package/src/components/manage/Add/Add.test.jsx +6 -3
  106. package/src/components/manage/Aliases/Aliases.test.jsx +7 -7
  107. package/src/components/manage/Blocks/Block/BlocksForm.jsx +1 -0
  108. package/src/components/manage/Blocks/Block/BlocksForm.test.jsx +48 -16
  109. package/src/components/manage/Blocks/Block/Edit.jsx +3 -1
  110. package/src/components/manage/Blocks/Block/EditBlockWrapper.jsx +9 -4
  111. package/src/components/manage/Blocks/Block/Settings.test.jsx +5 -1
  112. package/src/components/manage/Blocks/Block/StyleWrapper.jsx +11 -3
  113. package/src/components/manage/Blocks/Description/View.test.jsx +1 -1
  114. package/src/components/manage/Blocks/HTML/Edit.test.jsx +12 -5
  115. package/src/components/manage/Blocks/HTML/View.test.jsx +1 -1
  116. package/src/components/manage/Blocks/Image/Edit.jsx +5 -1
  117. package/src/components/manage/Blocks/Image/ImageSidebar.test.jsx +6 -2
  118. package/src/components/manage/Blocks/LeadImage/Edit.jsx +2 -2
  119. package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.jsx +1 -1
  120. package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.test.jsx +8 -1
  121. package/src/components/manage/Blocks/Listing/ImageGallery.jsx +6 -4
  122. package/src/components/manage/Blocks/Listing/View.test.jsx +3 -1
  123. package/src/components/manage/Blocks/Maps/Edit.jsx +2 -1
  124. package/src/components/manage/Blocks/Maps/MapsSidebar.test.jsx +5 -1
  125. package/src/components/manage/Blocks/Search/SearchBlockView.jsx +21 -4
  126. package/src/components/manage/Blocks/Search/components/DateRangeFacet.test.jsx +13 -7
  127. package/src/components/manage/Blocks/Search/components/SelectFacet.test.jsx +12 -6
  128. package/src/components/manage/Blocks/Teaser/Data.jsx +21 -7
  129. package/src/components/manage/Blocks/Teaser/DefaultBody.jsx +1 -1
  130. package/src/components/manage/Blocks/Teaser/schema.js +8 -3
  131. package/src/components/manage/Blocks/Title/Edit.jsx +8 -2
  132. package/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.test.jsx +11 -1
  133. package/src/components/manage/Blocks/Video/Edit.jsx +2 -1
  134. package/src/components/manage/Blocks/Video/VideoSidebar.test.jsx +5 -1
  135. package/src/components/manage/ConditionalLink/ConditionalLink.test.tsx +109 -0
  136. package/src/components/manage/ConditionalLink/ConditionalLink.tsx +36 -0
  137. package/src/components/manage/Contents/Contents.jsx +23 -2
  138. package/src/components/manage/Contents/Contents.test.jsx +36 -13
  139. package/src/components/manage/Contents/ContentsBreadcrumbs.Multilingual.test.jsx +18 -5
  140. package/src/components/manage/Contents/ContentsBreadcrumbs.jsx +20 -26
  141. package/src/components/manage/Contents/ContentsBreadcrumbs.test.jsx +14 -0
  142. package/src/components/manage/Contents/ContentsDeleteModal.jsx +258 -206
  143. package/src/components/manage/Contents/ContentsDeleteModal.stories.jsx +26 -8
  144. package/src/components/manage/Contents/ContentsItem.jsx +10 -2
  145. package/src/components/manage/Contents/ContentsPropertiesModal.test.jsx +5 -1
  146. package/src/components/manage/Contents/ContentsRenameModal.test.jsx +5 -1
  147. package/src/components/manage/Contents/ContentsTagsModal.test.jsx +5 -1
  148. package/src/components/manage/Contents/ContentsUploadModal.test.jsx +13 -22
  149. package/src/components/manage/Contents/ContentsWorkflowModal.test.jsx +5 -1
  150. package/src/components/manage/Contents/__mocks__/index.tsx +16 -0
  151. package/src/components/manage/Contents/__mocks__/index.vitest.tsx +5 -0
  152. package/src/components/manage/Controlpanels/AddonsControlpanel.test.jsx +28 -3
  153. package/src/components/manage/Controlpanels/Aliases.test.jsx +35 -3
  154. package/src/components/manage/Controlpanels/ContentType.jsx +1 -1
  155. package/src/components/manage/Controlpanels/ContentType.test.jsx +29 -3
  156. package/src/components/manage/Controlpanels/ContentTypeLayout.test.jsx +4 -2
  157. package/src/components/manage/Controlpanels/ContentTypes.test.jsx +25 -2
  158. package/src/components/manage/Controlpanels/Controlpanel.test.jsx +37 -6
  159. package/src/components/manage/Controlpanels/Controlpanels.test.jsx +47 -3
  160. package/src/components/manage/Controlpanels/Groups/GroupsControlpanel.jsx +3 -2
  161. package/src/components/manage/Controlpanels/Groups/GroupsControlpanel.test.jsx +15 -9
  162. package/src/components/manage/Controlpanels/ModerateComments.test.jsx +31 -5
  163. package/src/components/manage/Controlpanels/Rules/AddRule.test.jsx +13 -4
  164. package/src/components/manage/Controlpanels/Rules/ConfigureRule.test.jsx +9 -5
  165. package/src/components/manage/Controlpanels/Rules/EditRule.test.jsx +12 -4
  166. package/src/components/manage/Controlpanels/Rules/Rules.test.jsx +7 -3
  167. package/src/components/manage/Controlpanels/UndoControlpanel.test.jsx +33 -4
  168. package/src/components/manage/Controlpanels/Users/RenderUsers.jsx +156 -175
  169. package/src/components/manage/Controlpanels/Users/UserGroupMembershipControlPanel.test.jsx +3 -1
  170. package/src/components/manage/Controlpanels/Users/UsersControlpanel.jsx +575 -630
  171. package/src/components/manage/Controlpanels/Users/UsersControlpanel.test.jsx +16 -9
  172. package/src/components/manage/Delete/Delete.test.jsx +45 -4
  173. package/src/components/manage/Diff/Diff.test.jsx +15 -6
  174. package/src/components/manage/Diff/DiffField.test.jsx +12 -6
  175. package/src/components/manage/Display/Display.test.jsx +17 -6
  176. package/src/components/manage/Edit/Edit.jsx +2 -3
  177. package/src/components/manage/Edit/Edit.test.jsx +11 -3
  178. package/src/components/manage/Form/BlockDataForm.test.jsx +5 -1
  179. package/src/components/manage/Form/Form.jsx +32 -0
  180. package/src/components/manage/Form/Form.test.jsx +27 -19
  181. package/src/components/manage/Form/InlineForm.jsx +2 -2
  182. package/src/components/manage/Form/InlineForm.test.jsx +5 -1
  183. package/src/components/manage/Form/ModalForm.test.jsx +5 -1
  184. package/src/components/manage/Form/__mocks__/index.tsx +17 -0
  185. package/src/components/manage/Form/__mocks__/index.vitest.tsx +73 -0
  186. package/src/components/manage/History/History.test.jsx +3 -1
  187. package/src/components/manage/LinksToItem/LinksToItem.test.jsx +6 -4
  188. package/src/components/manage/MaybeWrap/MaybeWrap.tsx +15 -0
  189. package/src/components/manage/Multilingual/CompareLanguages.jsx +2 -5
  190. package/src/components/manage/Multilingual/CreateTranslation.jsx +8 -8
  191. package/src/components/manage/Multilingual/ManageTranslations.jsx +4 -2
  192. package/src/components/manage/Multilingual/ManageTranslations.test.jsx +8 -3
  193. package/src/components/manage/Multilingual/TranslationObject.jsx +1 -1
  194. package/src/components/manage/Preferences/ChangePassword.test.jsx +9 -2
  195. package/src/components/manage/Preferences/PersonalInformation.test.jsx +3 -1
  196. package/src/components/manage/Preferences/PersonalPreferences.test.jsx +20 -7
  197. package/src/components/manage/Rules/Rules.test.jsx +6 -3
  198. package/src/components/manage/Sharing/Sharing.test.jsx +3 -1
  199. package/src/components/manage/Sidebar/ObjectBrowserNav.jsx +2 -1
  200. package/src/components/manage/Sidebar/ObjectBrowserNav.test.jsx +3 -3
  201. package/src/components/manage/Sidebar/SidebarPortal.test.tsx +42 -0
  202. package/src/components/manage/Sidebar/SidebarPortal.tsx +48 -0
  203. package/src/components/manage/TemplateChooser/TemplateChooser.jsx +2 -1
  204. package/src/components/manage/Toolbar/More.jsx +4 -1
  205. package/src/components/manage/Toolbar/More.test.jsx +9 -7
  206. package/src/components/manage/Toolbar/PersonalTools.jsx +2 -1
  207. package/src/components/manage/Toolbar/Toolbar.jsx +3 -4
  208. package/src/components/manage/Toolbar/Types.jsx +7 -7
  209. package/src/components/manage/UniversalLink/UniversalLink.test.jsx +196 -14
  210. package/src/components/manage/UniversalLink/UniversalLink.tsx +215 -0
  211. package/src/components/manage/Widgets/ArrayWidget.test.jsx +22 -5
  212. package/src/components/manage/Widgets/CheckboxGroupWidget.test.jsx +12 -5
  213. package/src/components/manage/Widgets/DatetimeWidget.jsx +5 -0
  214. package/src/components/manage/Widgets/DatetimeWidget.test.jsx +21 -6
  215. package/src/components/manage/Widgets/FileWidget.jsx +14 -8
  216. package/src/components/manage/Widgets/ImageWidget.jsx +176 -40
  217. package/src/components/manage/Widgets/InternalUrlWidget.jsx +2 -0
  218. package/src/components/manage/Widgets/NumberWidget.test.jsx +8 -7
  219. package/src/components/manage/Widgets/ObjectBrowserWidget.jsx +3 -0
  220. package/src/components/manage/Widgets/ObjectListWidget.jsx +11 -1
  221. package/src/components/manage/Widgets/ObjectListWidget.test.jsx +18 -8
  222. package/src/components/manage/Widgets/ObjectWidget.test.jsx +5 -1
  223. package/src/components/manage/Widgets/RadioGroupWidget.test.jsx +12 -5
  224. package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.test.jsx +12 -6
  225. package/src/components/manage/Widgets/RegistryImageWidget.test.jsx +44 -41
  226. package/src/components/manage/Widgets/SchemaWidget.test.jsx +12 -5
  227. package/src/components/manage/Widgets/SchemaWidgetFieldset.test.jsx +12 -5
  228. package/src/components/manage/Widgets/SelectAutoComplete.jsx +29 -12
  229. package/src/components/manage/Widgets/SelectAutoComplete.test.jsx +12 -6
  230. package/src/components/manage/Widgets/SelectWidget.jsx +3 -1
  231. package/src/components/manage/Widgets/SelectWidget.test.jsx +12 -6
  232. package/src/components/manage/Widgets/TimeWidget.test.jsx +13 -5
  233. package/src/components/manage/Widgets/TokenWidget.test.jsx +12 -6
  234. package/src/components/manage/Widgets/UrlWidget.jsx +2 -0
  235. package/src/components/manage/Widgets/VocabularyTermsWidget.test.jsx +18 -9
  236. package/src/components/manage/Widgets/__mocks__/index.tsx +16 -0
  237. package/src/components/manage/Widgets/__mocks__/index.vitest.tsx +41 -0
  238. package/src/components/manage/Workflow/Workflow.test.jsx +17 -7
  239. package/src/components/theme/AlternateHrefLangs/AlternateHrefLangs.jsx +1 -3
  240. package/src/components/theme/AlternateHrefLangs/AlternateHrefLangs.test.jsx +0 -4
  241. package/src/components/theme/App/App.jsx +3 -1
  242. package/src/components/theme/App/App.test.jsx +22 -17
  243. package/src/components/theme/AppExtras/AppExtras.test.jsx +6 -6
  244. package/src/components/theme/Avatar/Avatar.jsx +2 -1
  245. package/src/components/theme/Comments/CommentEditModal.test.jsx +5 -1
  246. package/src/components/theme/Comments/Comments.test.jsx +29 -12
  247. package/src/components/theme/ContactForm/ContactForm.test.jsx +8 -4
  248. package/src/components/theme/FormattedDate/FormattedDate.stories.jsx +20 -2
  249. package/src/components/theme/Header/Header.test.jsx +19 -13
  250. package/src/components/theme/Image/Image.jsx +11 -8
  251. package/src/components/theme/LanguageSelector/{LanguageSelector.test.jsx → LanguageSelector.test.tsx} +6 -6
  252. package/src/components/theme/LanguageSelector/LanguageSelector.tsx +89 -0
  253. package/src/components/theme/Logo/Logo.Multilingual.test.jsx +0 -5
  254. package/src/components/theme/Logout/Logout.test.jsx +1 -1
  255. package/src/components/theme/MultilingualRedirector/MultilingualRedirector.jsx +8 -12
  256. package/src/components/theme/MultilingualRedirector/MultilingualRedirector.test.jsx +3 -5
  257. package/src/components/theme/Navigation/NavItem.jsx +1 -5
  258. package/src/components/theme/Navigation/Navigation.Multilingual.test.jsx +0 -5
  259. package/src/components/theme/NotFound/NotFound.jsx +5 -2
  260. package/src/components/theme/NotFound/NotFound.test.jsx +3 -0
  261. package/src/components/theme/PasswordReset/PasswordReset.test.jsx +10 -1
  262. package/src/components/theme/PasswordReset/RequestPasswordReset.test.jsx +5 -1
  263. package/src/components/theme/PreviewImage/PreviewImage.jsx +1 -1
  264. package/src/components/theme/Register/Register.test.jsx +5 -1
  265. package/src/components/theme/RequestTimeout/RequestTimeout.jsx +1 -1
  266. package/src/components/theme/Search/Search.test.jsx +6 -4
  267. package/src/components/theme/Sitemap/Sitemap.jsx +6 -5
  268. package/src/components/theme/Sitemap/Sitemap.test.jsx +0 -1
  269. package/src/components/theme/TsTest/TsTest.test.tsx +0 -1
  270. package/src/components/theme/View/EventDatesInfo.test.jsx +12 -5
  271. package/src/components/theme/View/EventView.test.jsx +12 -5
  272. package/src/components/theme/View/FileView.jsx +9 -1
  273. package/src/components/theme/View/ListingView.test.jsx +2 -0
  274. package/src/components/theme/View/SummaryView.test.jsx +10 -0
  275. package/src/components/theme/View/TabularView.test.jsx +1 -0
  276. package/src/components/theme/View/View.jsx +1 -1
  277. package/src/components/theme/View/View.test.jsx +42 -23
  278. package/src/components/theme/Widgets/ImageWidget.jsx +2 -1
  279. package/src/config/ControlPanels.js +1 -0
  280. package/src/config/index.js +18 -25
  281. package/src/config/server.js +0 -2
  282. package/src/express-middleware/devproxy.js +20 -5
  283. package/src/helpers/Api/APIResourceWithAuth.js +8 -3
  284. package/src/helpers/Api/Api.js +7 -4
  285. package/src/helpers/Api/Api.plone.rest.test.js +11 -9
  286. package/src/helpers/Api/Api.test.js +11 -14
  287. package/src/helpers/AsyncConnect/AsyncConnect.test.jsx +145 -189
  288. package/src/helpers/AsyncConnect/ssr.js +4 -1
  289. package/src/helpers/AuthToken/AuthToken.test.js +60 -22
  290. package/src/helpers/Blocks/Blocks.test.js +1 -1
  291. package/src/helpers/Content/Content.js +23 -0
  292. package/src/helpers/Content/Content.test.js +39 -0
  293. package/src/helpers/Content/withClientSideContent.jsx +35 -0
  294. package/src/helpers/Extensions/withBlockSchemaEnhancer.jsx +4 -1
  295. package/src/helpers/Html/Html.jsx +13 -7
  296. package/src/helpers/Html/Html.test.jsx +32 -28
  297. package/src/helpers/LanguageMap/LanguageMap.js +115 -8
  298. package/src/helpers/Loadable/__mocks__/Loadable.jsx +16 -1
  299. package/src/helpers/Loadable/__mocks__/Loadable.vitest.jsx +39 -0
  300. package/src/helpers/MessageLabels/MessageLabels.js +5 -0
  301. package/src/helpers/Sitemap/Sitemap.js +4 -4
  302. package/src/helpers/Url/Url.js +32 -2
  303. package/src/helpers/Url/Url.test.js +62 -0
  304. package/src/helpers/Utils/withSaveAsDraft.jsx +241 -0
  305. package/src/hooks/user/useUser.js +1 -1
  306. package/src/middleware/Api.test.js +51 -0
  307. package/src/middleware/api.js +78 -29
  308. package/src/middleware/storeProtectLoadUtils.test.js +93 -81
  309. package/src/reducers/content/content.js +3 -18
  310. package/src/reducers/diff/diff.js +5 -1
  311. package/src/reducers/diff/diff.test.js +60 -4
  312. package/src/routes.js +4 -2
  313. package/src/server.jsx +45 -14
  314. package/src/start-client.jsx +9 -6
  315. package/src/start-server.js +9 -3
  316. package/test-setup-config.jsx +0 -2
  317. package/test-setup-globals-vitest.js +46 -0
  318. package/theme/themes/pastanaga/collections/table.overrides +9 -0
  319. package/theme/themes/pastanaga/extras/blocks.less +26 -0
  320. package/theme/themes/pastanaga/extras/contents.less +17 -5
  321. package/theme/themes/pastanaga/extras/main.less +32 -2
  322. package/tsconfig.declarations.json +12 -1
  323. package/tsconfig.json +5 -5
  324. package/types/components/manage/Blocks/Teaser/schema.d.ts +1 -0
  325. package/types/components/manage/ConditionalLink/ConditionalLink.d.ts +11 -15
  326. package/types/components/manage/Contents/__mocks__/index.vitest.d.ts +2 -0
  327. package/types/components/manage/Controlpanels/Users/RenderUsers.d.ts +18 -2
  328. package/types/components/manage/Controlpanels/Users/UsersControlpanel.d.ts +6 -2
  329. package/types/components/manage/Controlpanels/index.d.ts +2 -2
  330. package/types/components/manage/Form/__mocks__/index.vitest.d.ts +8 -0
  331. package/types/components/manage/MaybeWrap/MaybeWrap.d.ts +7 -5
  332. package/types/components/manage/Sidebar/SidebarPortal.d.ts +7 -15
  333. package/types/components/manage/UniversalLink/UniversalLink.d.ts +54 -20
  334. package/types/components/manage/Widgets/ImageWidget.d.ts +41 -1
  335. package/types/components/manage/Widgets/RecurrenceWidget/Utils.d.ts +12 -18
  336. package/types/components/manage/Widgets/__mocks__/index.vitest.d.ts +33 -0
  337. package/types/components/theme/FormattedDate/FormattedDate.stories.d.ts +1 -1
  338. package/types/components/theme/LanguageSelector/LanguageSelector.d.ts +3 -10
  339. package/types/helpers/Content/Content.d.ts +7 -0
  340. package/types/helpers/Content/withClientSideContent.d.ts +1 -0
  341. package/types/helpers/Extensions/withBlockSchemaEnhancer.d.ts +4 -5
  342. package/types/helpers/Helmet/Helmet.d.ts +1 -1
  343. package/types/helpers/LanguageMap/LanguageMap.d.ts +428 -4
  344. package/types/helpers/Loadable/__mocks__/Loadable.vitest.d.ts +3 -0
  345. package/types/helpers/MessageLabels/MessageLabels.d.ts +68 -62
  346. package/types/helpers/Url/Url.d.ts +14 -0
  347. package/types/helpers/Url/bulkFlattenToAppURL.d.ts +5 -0
  348. package/types/helpers/Utils/withSaveAsDraft.d.ts +1 -0
  349. package/types/middleware/api.d.ts +6 -9
  350. package/types/react-router-hash-link.d.ts +12 -0
  351. package/types/reducers/index.d.ts +1 -0
  352. package/types/routes.d.ts +4 -0
  353. package/types/server.d.ts +1 -1
  354. package/types/start-client.d.ts +0 -1
  355. package/vite-plugins/svg.mjs +81 -0
  356. package/vitest.config.mjs +77 -0
  357. package/package-why.json +0 -34
  358. package/src/actions/content/content.multilingual.test.js +0 -17
  359. package/src/components/manage/ConditionalLink/ConditionalLink.jsx +0 -27
  360. package/src/components/manage/ConditionalLink/ConditionalLink.test.jsx +0 -30
  361. package/src/components/manage/MaybeWrap/MaybeWrap.jsx +0 -9
  362. package/src/components/manage/Sidebar/SidebarPortal.jsx +0 -47
  363. package/src/components/manage/Sidebar/SidebarPortal.test.jsx +0 -26
  364. package/src/components/manage/UniversalLink/UniversalLink.jsx +0 -154
  365. package/src/components/manage/Widgets/FileWidget.test.jsx +0 -91
  366. package/src/components/theme/LanguageSelector/LanguageSelector.jsx +0 -77
  367. package/theme/themes/pastanaga/extras/utils.less +0 -63
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  }
10
10
  ],
11
11
  "license": "MIT",
12
- "version": "19.0.0-alpha.0",
12
+ "version": "19.0.0-alpha.10",
13
13
  "repository": {
14
14
  "type": "git",
15
15
  "url": "git@github.com:plone/volto.git"
@@ -144,21 +144,25 @@
144
144
  "not dead"
145
145
  ],
146
146
  "engines": {
147
- "node": "^20 || ^22"
147
+ "node": "^22 || ^24"
148
148
  },
149
149
  "dependencies": {
150
+ "@dnd-kit/core": "6.0.8",
151
+ "@dnd-kit/sortable": "7.0.2",
152
+ "@dnd-kit/utilities": "3.2.2",
150
153
  "@loadable/component": "5.14.1",
151
154
  "@loadable/server": "5.14.0",
152
155
  "@redux-devtools/extension": "^3.3.0",
153
- "classnames": "2.2.6",
156
+ "classnames": "2.5.1",
154
157
  "connected-react-router": "6.8.0",
155
- "debug": "4.3.2",
158
+ "debug": "4.3.4",
156
159
  "decorate-component-with-props": "1.2.1",
157
160
  "dependency-graph": "0.10.0",
158
161
  "detect-browser": "5.1.0",
159
162
  "diff": "3.5.0",
160
163
  "express": "4.19.2",
161
164
  "filesize": "6",
165
+ "full-icu": "1.4.0",
162
166
  "github-slugger": "1.4.0",
163
167
  "history": "4.10.1",
164
168
  "hoist-non-react-statics": "3.3.2",
@@ -181,7 +185,7 @@
181
185
  "process": "^0.11.10",
182
186
  "promise-file-reader": "1.0.2",
183
187
  "prop-types": "15.7.2",
184
- "query-string": "7.1.0",
188
+ "query-string": "^9.0.0",
185
189
  "rc-time-picker": "3.7.3",
186
190
  "react": "18.2.0",
187
191
  "react-anchor-link-smooth-scroll": "1.0.12",
@@ -225,9 +229,9 @@
225
229
  "semantic-ui-less": "2.4.1",
226
230
  "semantic-ui-react": "2.1.5",
227
231
  "serialize-javascript": "3.1.0",
228
- "slate": "0.100.0",
229
- "slate-hyperscript": "0.100.0",
230
- "slate-react": "0.98.4",
232
+ "slate": "0.118.1",
233
+ "slate-hyperscript": "0.115.0",
234
+ "slate-react": "0.117.4",
231
235
  "superagent": "3.8.2",
232
236
  "tlds": "1.203.1",
233
237
  "undoo": "0.5.0",
@@ -236,9 +240,9 @@
236
240
  "url": "^0.11.3",
237
241
  "use-deep-compare-effect": "1.8.1",
238
242
  "uuid": "^8.3.2",
239
- "@plone/volto-slate": "19.0.0-alpha.0",
240
- "@plone/scripts": "4.0.0-alpha.0",
241
- "@plone/registry": "3.0.0-alpha.2"
243
+ "@plone/scripts": "4.0.0-alpha.3",
244
+ "@plone/registry": "3.0.0-alpha.7",
245
+ "@plone/volto-slate": "19.0.0-alpha.6"
242
246
  },
243
247
  "devDependencies": {
244
248
  "@babel/core": "^7.0.0",
@@ -251,9 +255,6 @@
251
255
  "@babel/plugin-syntax-export-namespace-from": "7.8.3",
252
256
  "@babel/runtime": "7.20.6",
253
257
  "@babel/types": "7.20.5",
254
- "@dnd-kit/core": "6.0.8",
255
- "@dnd-kit/sortable": "7.0.2",
256
- "@dnd-kit/utilities": "3.2.2",
257
258
  "@fiverr/afterbuild-webpack-plugin": "^1.0.0",
258
259
  "@jest/globals": "^29.7.0",
259
260
  "@loadable/babel-plugin": "5.13.2",
@@ -268,21 +269,26 @@
268
269
  "@storybook/react": "^8.0.4",
269
270
  "@storybook/react-webpack5": "^8.0.4",
270
271
  "@storybook/theming": "^8.0.4",
271
- "@testing-library/cypress": "10.0.1",
272
+ "@testing-library/cypress": "10.1.0",
272
273
  "@testing-library/jest-dom": "6.4.2",
273
- "@testing-library/react": "14.2.0",
274
+ "@testing-library/react": "14.3.1",
274
275
  "@testing-library/react-hooks": "8.0.1",
275
276
  "@types/history": "^4.7.11",
276
277
  "@types/jest": "^29.5.8",
277
278
  "@types/loadable__component": "^5.13.9",
278
279
  "@types/lodash": "^4.14.201",
280
+ "@types/node": "^24",
279
281
  "@types/react": "^18",
280
282
  "@types/react-dom": "^18",
283
+ "@types/react-intl-redux": "^0.1.19",
281
284
  "@types/react-router-dom": "^5.3.3",
282
285
  "@types/react-test-renderer": "18.0.7",
286
+ "@types/redux-mock-store": "^1.5.0",
283
287
  "@types/uuid": "^9.0.2",
284
288
  "@typescript-eslint/eslint-plugin": "^7.7.0",
285
289
  "@typescript-eslint/parser": "^7.7.0",
290
+ "@vitejs/plugin-react": "^4.3.4",
291
+ "@vitest/ui": "^2.1.8",
286
292
  "autoprefixer": "10.4.8",
287
293
  "axe-core": "4.4.2",
288
294
  "babel-loader": "9.1.0",
@@ -294,27 +300,28 @@
294
300
  "bundlewatch": "0.3.3",
295
301
  "circular-dependency-plugin": "5.2.2",
296
302
  "css-loader": "5.2.7",
297
- "cypress": "13.13.2",
298
- "cypress-axe": "1.5.0",
303
+ "cypress": "15.5.0",
304
+ "cypress-axe": "1.7.0",
299
305
  "cypress-file-upload": "5.0.8",
300
306
  "deep-freeze": "0.0.1",
301
307
  "eslint": "^8.57.0",
302
- "eslint-config-prettier": "^9.1.0",
308
+ "eslint-config-prettier": "^9.1.2",
303
309
  "eslint-config-react-app": "^7.0.1",
304
310
  "eslint-import-resolver-alias": "^1.1.2",
305
311
  "eslint-import-resolver-babel-plugin-root-import": "^1.1.1",
306
312
  "eslint-import-resolver-typescript": "^3.6.1",
307
313
  "eslint-plugin-import": "^2.29.1",
308
314
  "eslint-plugin-jsx-a11y": "^6.7.1",
315
+ "eslint-plugin-no-only-tests": "^3.3.0",
309
316
  "eslint-plugin-prettier": "^5.1.3",
310
317
  "eslint-plugin-react": "^7.34.1",
311
318
  "eslint-plugin-react-hooks": "^4.6.0",
312
- "full-icu": "1.4.0",
313
319
  "html-webpack-plugin": "5.5.0",
314
320
  "identity-obj-proxy": "3.0.0",
315
321
  "jest": "26.6.3",
316
322
  "jest-environment-jsdom": "^26",
317
323
  "jest-file": "1.0.0",
324
+ "jiti": "^2.4.2",
318
325
  "jsdom": "^16.7.0",
319
326
  "jsonwebtoken": "9.0.0",
320
327
  "less": "3.11.1",
@@ -336,7 +343,7 @@
336
343
  "react-docgen-typescript-plugin": "^1.0.5",
337
344
  "react-error-overlay": "6.0.9",
338
345
  "react-is": "^18.2.0",
339
- "release-it": "^17.1.1",
346
+ "release-it": "^19.0.4",
340
347
  "semver": "^7.5.4",
341
348
  "start-server-and-test": "1.14.0",
342
349
  "storybook": "^8.0.4",
@@ -345,6 +352,7 @@
345
352
  "stylelint-config-idiomatic-order": "10.0.0",
346
353
  "stylelint-prettier": "5.0.0",
347
354
  "svg-loader": "0.0.2",
355
+ "svgo": "^3.0.0",
348
356
  "svgo-loader": "3.0.3",
349
357
  "terser-webpack-plugin": "5.3.6",
350
358
  "tmp": "0.2.1",
@@ -352,13 +360,13 @@
352
360
  "ts-loader": "9.4.4",
353
361
  "typescript": "^5.7.3",
354
362
  "use-trace-update": "1.3.2",
363
+ "vitest": "^3.0.4",
355
364
  "wait-on": "6.0.0",
356
365
  "webpack": "5.90.1",
357
366
  "webpack-bundle-analyzer": "4.10.1",
358
367
  "webpack-dev-server": "4.11.1",
359
368
  "webpack-node-externals": "3.0.0",
360
- "why": "0.6.2",
361
- "@plone/types": "2.0.0-alpha.1",
369
+ "@plone/types": "2.0.0-alpha.8",
362
370
  "@plone/volto-coresandbox": "1.0.0"
363
371
  },
364
372
  "volta": {
@@ -370,10 +378,11 @@
370
378
  "start:coresandbox": "make build-deps && ADDONS=coresandbox razzle start",
371
379
  "build": "make build-deps && razzle build --noninteractive",
372
380
  "build:types": "tsc --project tsconfig.declarations.json",
373
- "test": "razzle test --maxWorkers=50%",
381
+ "vitest": "vitest",
382
+ "coverage": "vitest run --coverage",
383
+ "test": "razzle test --maxWorkers=${MAX_WORKERS:-50%}",
374
384
  "test:ci": "CI=true NODE_ICU_DATA=node_modules/full-icu razzle test",
375
385
  "test:husky": "CI=true yarn test --bail --findRelatedTests",
376
- "test:debug": "node --inspect node_modules/.bin/jest --runInBand",
377
386
  "start:prod": "NODE_ENV=production node build/server.js",
378
387
  "prettier": "prettier --single-quote --check '{src,cypress}/**/*.{js,jsx,ts,tsx}' --check '*.js'",
379
388
  "prettier:fix": "prettier --single-quote --write '{src,cypress}/**/*.{js,jsx,ts,tsx}' --write '*.js'",
@@ -381,8 +390,8 @@
381
390
  "stylelint": "stylelint 'theme/**/*.{css,less}' 'src/**/*.{css,less}'",
382
391
  "stylelint:overrides": "stylelint 'theme/**/*.overrides' 'src/**/*.overrides'",
383
392
  "stylelint:fix": "yarn stylelint --fix && yarn stylelint:overrides --fix",
384
- "lint": "eslint --max-warnings=0 'src/**/*.{js,jsx,ts,tsx,json}'",
385
- "lint:fix": "eslint --fix 'src/**/*.{js,jsx,ts,tsx,json}'",
393
+ "lint": "eslint --max-warnings=0 '{src,cypress}/**/*.{js,jsx,ts,tsx,json}'",
394
+ "lint:fix": "eslint --fix '{src,cypress}/**/*.{js,jsx,ts,tsx,json}'",
386
395
  "lint:husky": "eslint --max-warnings=0 --fix",
387
396
  "i18n": "rm -rf build/messages && NODE_ENV=production i18n",
388
397
  "i18n:ci": "pnpm i18n && git diff -G'^[^\"POT]' --exit-code",
package/razzle.config.js CHANGED
@@ -414,6 +414,22 @@ const defaultModify = ({
414
414
  ]
415
415
  : [];
416
416
 
417
+ // If Volto is served under a subpath,
418
+ // we have to adjust where Webpack assets are served too.
419
+ const subpathPrefix = process.env.RAZZLE_SUBPATH_PREFIX || '';
420
+ if (subpathPrefix) {
421
+ if (target === 'web' && dev) {
422
+ if (config.devServer.devMiddleware) {
423
+ config.devServer.devMiddleware.publicPath = subpathPrefix;
424
+ } else {
425
+ config.devServer.publicPath += `${subpathPrefix.slice(1)}/`;
426
+ }
427
+ }
428
+ const publicPath = config.output.publicPath;
429
+ if (publicPath.indexOf(subpathPrefix) === -1) {
430
+ config.output.publicPath = `${publicPath}${subpathPrefix.slice(1)}/`;
431
+ }
432
+ }
417
433
  return config;
418
434
  };
419
435
 
@@ -7,9 +7,9 @@ describe('Actions action', () => {
7
7
  const url = 'http://localhost';
8
8
  const action = listActions(url);
9
9
 
10
- expect(action.type).toEqual(LIST_ACTIONS);
11
- expect(action.request.op).toEqual('get');
12
- expect(action.request.path).toEqual(`${url}/@actions`);
10
+ expect(action.type).toBe(LIST_ACTIONS);
11
+ expect(action.request.op).toBe('get');
12
+ expect(action.request.path).toBe(`${url}/@actions`);
13
13
  });
14
14
  });
15
15
  });
@@ -16,35 +16,38 @@ describe('Addons action', () => {
16
16
  it('should create an action to install an addon', () => {
17
17
  const id = 'plone.app.example';
18
18
  const action = installAddon(id);
19
- expect(action.type).toEqual(INSTALL_ADDON);
20
- expect(action.request.op).toEqual('post');
21
- expect(action.request.path).toEqual(`/@addons/${id}/install`);
19
+ expect(action.type).toBe(INSTALL_ADDON);
20
+ expect(action.request.op).toBe('post');
21
+ expect(action.request.path).toBe(`/@addons/${id}/install`);
22
22
  });
23
23
  });
24
+
24
25
  describe('uninstallAddon', () => {
25
26
  it('should create an action to uninstall an addon', () => {
26
27
  const id = 'plone.app.example';
27
28
  const action = uninstallAddon(id);
28
- expect(action.type).toEqual(UNINSTALL_ADDON);
29
- expect(action.request.op).toEqual('post');
30
- expect(action.request.path).toEqual(`/@addons/${id}/uninstall`);
29
+ expect(action.type).toBe(UNINSTALL_ADDON);
30
+ expect(action.request.op).toBe('post');
31
+ expect(action.request.path).toBe(`/@addons/${id}/uninstall`);
31
32
  });
32
33
  });
34
+
33
35
  describe('upgradeAddon', () => {
34
36
  it('should create an action to upgrade an addon', () => {
35
37
  const id = 'plone.app.example';
36
38
  const action = upgradeAddon(id);
37
- expect(action.type).toEqual(UPGRADE_ADDON);
38
- expect(action.request.op).toEqual('post');
39
- expect(action.request.path).toEqual(`/@addons/${id}/upgrade`);
39
+ expect(action.type).toBe(UPGRADE_ADDON);
40
+ expect(action.request.op).toBe('post');
41
+ expect(action.request.path).toBe(`/@addons/${id}/upgrade`);
40
42
  });
41
43
  });
44
+
42
45
  describe('listAddons', () => {
43
46
  it('should create an action to list all addons', () => {
44
47
  const action = listAddons();
45
- expect(action.type).toEqual(LIST_ADDONS);
46
- expect(action.request.op).toEqual('get');
47
- expect(action.request.path).toEqual(`/@addons`);
48
+ expect(action.type).toBe(LIST_ADDONS);
49
+ expect(action.request.op).toBe('get');
50
+ expect(action.request.path).toBe(`/@addons`);
48
51
  });
49
52
  });
50
53
  });
@@ -1,5 +1,4 @@
1
1
  import { getAliases, addAliases, removeAliases } from './aliases';
2
-
3
2
  import {
4
3
  GET_ALIASES,
5
4
  ADD_ALIASES,
@@ -18,6 +17,7 @@ describe('Aliases action', () => {
18
17
  );
19
18
  });
20
19
  });
20
+
21
21
  describe('addAliases', () => {
22
22
  it('should create an action to add aliases', () => {
23
23
  const url = '/news';
@@ -164,7 +164,6 @@ export function getContent(
164
164
  b_size: settings.defaultPageSize,
165
165
  }
166
166
  : {},
167
- settings.isMultilingual ? { expand: 'translations' } : {},
168
167
  );
169
168
 
170
169
  let qs = Object.keys(query)
@@ -12,6 +12,8 @@ import {
12
12
  SYSTEM_INFORMATION,
13
13
  DATABASE_INFORMATION,
14
14
  } from '@plone/volto/constants/ActionTypes';
15
+ import { getSite } from '@plone/volto/actions/site/site';
16
+
15
17
  /**
16
18
  * Get controlpanel function.
17
19
  * @function getControlpanel
@@ -86,13 +88,17 @@ export function listControlpanels() {
86
88
  * @returns {Object} Update controlpanel action.
87
89
  */
88
90
  export function updateControlpanel(url, data) {
89
- return {
90
- type: UPDATE_CONTROLPANEL,
91
- request: {
92
- op: 'patch',
93
- path: url,
94
- data,
95
- },
91
+ return (dispatch) => {
92
+ dispatch({
93
+ type: UPDATE_CONTROLPANEL,
94
+ request: {
95
+ op: 'patch',
96
+ path: url,
97
+ data,
98
+ },
99
+ }).then(() => {
100
+ dispatch(getSite());
101
+ });
96
102
  };
97
103
  }
98
104
 
@@ -35,12 +35,18 @@ describe('Controlpanels action', () => {
35
35
  it('should create an action to update a controlpanel', () => {
36
36
  const url = 'http://localhost';
37
37
  const data = 'Hello World!';
38
- const action = updateControlpanel(url, data);
39
38
 
40
- expect(action.type).toEqual(UPDATE_CONTROLPANEL);
41
- expect(action.request.op).toEqual('patch');
42
- expect(action.request.path).toEqual(url);
43
- expect(action.request.data).toEqual(data);
39
+ const dispatch = vi.fn().mockResolvedValue();
40
+ updateControlpanel(url, data)(dispatch);
41
+
42
+ expect(dispatch).toHaveBeenCalledWith({
43
+ type: UPDATE_CONTROLPANEL,
44
+ request: {
45
+ op: 'patch',
46
+ path: url,
47
+ data,
48
+ },
49
+ });
44
50
  });
45
51
  });
46
52
  });
@@ -5,7 +5,7 @@ describe('Querystring action', () => {
5
5
  describe('getQuerystring', () => {
6
6
  it('should create an action to get the querystring config', () => {
7
7
  const getState = () => ({});
8
- const dispatch = jest.fn();
8
+ const dispatch = vi.fn();
9
9
  getQuerystring()(dispatch, getState);
10
10
  expect(dispatch).toHaveBeenCalledWith({
11
11
  type: GET_QUERYSTRING,
@@ -21,7 +21,7 @@ describe('Querystring action', () => {
21
21
  data: { '@id': 'http://localhost:3000/some/content' },
22
22
  },
23
23
  });
24
- const dispatch = jest.fn();
24
+ const dispatch = vi.fn();
25
25
  getQuerystring()(dispatch, getState);
26
26
  expect(dispatch).toHaveBeenCalledWith({
27
27
  type: GET_QUERYSTRING,
@@ -10,7 +10,7 @@ describe('Types action', () => {
10
10
  },
11
11
  });
12
12
  const url = '/blog';
13
- const dispatch = jest.fn();
13
+ const dispatch = vi.fn();
14
14
 
15
15
  getTypes(url)(dispatch, getState);
16
16
 
@@ -3,7 +3,7 @@
3
3
  * @module actions/users/users
4
4
  */
5
5
 
6
- import { stringify } from 'query-string';
6
+ import qs from 'query-string';
7
7
 
8
8
  import {
9
9
  CREATE_USER,
@@ -92,7 +92,7 @@ export function listUsers(options = {}) {
92
92
 
93
93
  let filterarg =
94
94
  groups_filter.length > 0
95
- ? stringify(
95
+ ? qs.stringify(
96
96
  { 'groups-filter': groups_filter },
97
97
  { arrayFormat: 'colon-list-separator' },
98
98
  )
@@ -8,7 +8,11 @@ import Actions from './Actions';
8
8
 
9
9
  const mockStore = configureStore();
10
10
 
11
- jest.mock('@plone/volto/components/manage/Contents');
11
+ vi.mock('@plone/volto/components/manage/Contents', async () => {
12
+ return await import(
13
+ '@plone/volto/components/manage/Contents/__mocks__/index.vitest.tsx'
14
+ );
15
+ });
12
16
 
13
17
  describe('Actions', () => {
14
18
  it('renders an actions component', () => {
@@ -223,11 +223,10 @@ class Add extends Component {
223
223
  ? keys(this.props.schema.definitions)
224
224
  : null,
225
225
  '@type': this.props.type,
226
- ...(config.settings.isMultilingual &&
227
- this.props.location?.state?.translationOf && {
228
- translation_of: this.props.location.state.translationOf,
229
- language: this.props.location.state.language,
230
- }),
226
+ ...(this.props.location?.state?.translationOf && {
227
+ translation_of: this.props.location.state.translationOf,
228
+ language: this.props.location.state.language,
229
+ }),
231
230
  });
232
231
  }
233
232
 
@@ -348,7 +347,7 @@ class Add extends Component {
348
347
  <div id="page-add">
349
348
  <Helmet
350
349
  title={this.props.intl.formatMessage(messages.add, {
351
- type: this.props.type,
350
+ type: this.props?.schema?.title || this.props.type,
352
351
  })}
353
352
  />
354
353
  <Form
@@ -359,27 +358,29 @@ class Add extends Component {
359
358
  }
360
359
  schema={this.props.schema}
361
360
  type={this.props.type}
362
- formData={{
363
- ...(blocksFieldname && {
364
- [blocksFieldname]:
365
- initialBlocks ||
366
- this.props.schema.properties[blocksFieldname]?.default,
367
- }),
368
- ...(blocksLayoutFieldname && {
369
- [blocksLayoutFieldname]: {
370
- items:
371
- initialBlocksLayout ||
372
- this.props.schema.properties[blocksLayoutFieldname]?.default
373
- ?.items,
361
+ formData={
362
+ this.props.location?.state?.initialFormData || {
363
+ ...(blocksFieldname && {
364
+ [blocksFieldname]:
365
+ initialBlocks ||
366
+ this.props.schema.properties[blocksFieldname]?.default,
367
+ }),
368
+ ...(blocksLayoutFieldname && {
369
+ [blocksLayoutFieldname]: {
370
+ items:
371
+ initialBlocksLayout ||
372
+ this.props.schema.properties[blocksLayoutFieldname]
373
+ ?.default?.items,
374
+ },
375
+ }),
376
+ // Copy the Language Independent Fields values from the to-be translated content
377
+ // into the default values of the translated content Add form.
378
+ ...lifData(),
379
+ parent: {
380
+ '@id': this.props.content?.['@id'] || '',
374
381
  },
375
- }),
376
- // Copy the Language Independent Fields values from the to-be translated content
377
- // into the default values of the translated content Add form.
378
- ...lifData(),
379
- parent: {
380
- '@id': this.props.content?.['@id'] || '',
381
- },
382
- }}
382
+ }
383
+ }
383
384
  requestError={this.state.error}
384
385
  onSubmit={this.onSubmit}
385
386
  hideActions
@@ -3,7 +3,6 @@ import { render } from '@testing-library/react';
3
3
  import configureStore from 'redux-mock-store';
4
4
  import { Provider } from 'react-intl-redux';
5
5
  import config from '@plone/volto/registry';
6
-
7
6
  import Add from './Add';
8
7
 
9
8
  const mockStore = configureStore();
@@ -16,9 +15,13 @@ beforeAll(() => {
16
15
  config.settings.loadables = {};
17
16
  });
18
17
 
19
- jest.mock('../Toolbar/Toolbar', () => jest.fn(() => <div id="Portal" />));
18
+ vi.mock('../Toolbar/Toolbar', () => ({
19
+ default: vi.fn(() => <div id="Portal" />),
20
+ }));
20
21
 
21
- jest.mock('../Form/Form', () => jest.fn(() => <div className="Form" />));
22
+ vi.mock('../Form/Form', () => ({
23
+ default: vi.fn(() => <div className="Form" />),
24
+ }));
22
25
 
23
26
  describe('Add', () => {
24
27
  it('renders an empty add component', () => {
@@ -9,9 +9,13 @@ import Aliases from './Aliases';
9
9
  const middlewares = [thunk];
10
10
  const mockStore = configureMockStore(middlewares);
11
11
 
12
- jest.mock('../Toolbar/Toolbar', () => jest.fn(() => <div id="Portal" />));
12
+ vi.mock('../Toolbar/Toolbar', () => ({
13
+ default: vi.fn(() => <div id="Portal" />),
14
+ }));
13
15
 
14
- jest.mock('../Toolbar/More', () => jest.fn(() => <div className="More" />));
16
+ vi.mock('../Toolbar/More', () => ({
17
+ default: vi.fn(() => <div className="More" />),
18
+ }));
15
19
 
16
20
  describe('Aliases', () => {
17
21
  it('renders aliases object control', () => {
@@ -27,11 +31,7 @@ describe('Aliases', () => {
27
31
  loading: false,
28
32
  error: null,
29
33
  },
30
- get: {
31
- loading: false,
32
- loaded: true,
33
- error: null,
34
- },
34
+ get: { __esModule: true, loading: false, loaded: true, error: null },
35
35
  items: [],
36
36
  },
37
37
  content: {
@@ -359,6 +359,7 @@ const BlocksForm = (props) => {
359
359
  editable,
360
360
  showBlockChooser: selectedBlock === childId,
361
361
  detached: isContainer,
362
+ isContainer,
362
363
  // Properties to pass to the BlocksForm to match the View ones
363
364
  content: properties,
364
365
  history,