@plone/volto 19.0.0-alpha.2 → 19.0.0-alpha.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/.eslintignore +1 -0
  2. package/.eslintrc +37 -3
  3. package/CHANGELOG.md +338 -1
  4. package/README.md +20 -16
  5. package/babel.js +1 -3
  6. package/cypress/docker/prefixed-rules.yml +26 -0
  7. package/cypress/docker/prefixed.yml +24 -0
  8. package/cypress/support/commands.js +12 -6
  9. package/cypress/support/guillotina.js +1 -0
  10. package/cypress.config.js +1 -0
  11. package/global-test-setup.js +1 -2
  12. package/locales/af.json +1 -0
  13. package/locales/ar.json +1 -0
  14. package/locales/bg.json +1 -0
  15. package/locales/bn.json +1 -0
  16. package/locales/ca/LC_MESSAGES/volto.po +124 -17
  17. package/locales/ca.json +1 -1
  18. package/locales/cs.json +1 -0
  19. package/locales/cy.json +1 -0
  20. package/locales/da.json +1 -0
  21. package/locales/de/LC_MESSAGES/volto.po +135 -28
  22. package/locales/de.json +1 -1
  23. package/locales/el.json +1 -0
  24. package/locales/en/LC_MESSAGES/volto.po +125 -18
  25. package/locales/en.json +1 -1
  26. package/locales/en_AU.json +1 -0
  27. package/locales/en_GB.json +1 -0
  28. package/locales/eo.json +1 -0
  29. package/locales/es/LC_MESSAGES/volto.po +125 -18
  30. package/locales/es.json +1 -1
  31. package/locales/et.json +1 -0
  32. package/locales/eu/LC_MESSAGES/volto.po +124 -17
  33. package/locales/eu.json +1 -1
  34. package/locales/fa.json +1 -0
  35. package/locales/fi/LC_MESSAGES/volto.po +124 -17
  36. package/locales/fi.json +1 -1
  37. package/locales/fr/LC_MESSAGES/volto.po +125 -18
  38. package/locales/fr.json +1 -1
  39. package/locales/fu.json +1 -0
  40. package/locales/gl.json +1 -0
  41. package/locales/he.json +1 -0
  42. package/locales/hi/LC_MESSAGES/volto.po +128 -21
  43. package/locales/hi.json +1 -1
  44. package/locales/hr.json +1 -0
  45. package/locales/hu.json +1 -0
  46. package/locales/hy.json +1 -0
  47. package/locales/id.json +1 -0
  48. package/locales/it/LC_MESSAGES/volto.po +129 -22
  49. package/locales/it.json +1 -1
  50. package/locales/ja/LC_MESSAGES/volto.po +124 -17
  51. package/locales/ja.json +1 -1
  52. package/locales/ka.json +1 -0
  53. package/locales/kn.json +1 -0
  54. package/locales/ko.json +1 -0
  55. package/locales/lt.json +1 -0
  56. package/locales/lv.json +1 -0
  57. package/locales/mi.json +1 -0
  58. package/locales/mk.json +1 -0
  59. package/locales/my.json +1 -0
  60. package/locales/nb_NO.json +1 -0
  61. package/locales/nl/LC_MESSAGES/volto.po +128 -21
  62. package/locales/nl.json +1 -1
  63. package/locales/nn.json +1 -0
  64. package/locales/pl.json +1 -0
  65. package/locales/pt/LC_MESSAGES/volto.po +124 -17
  66. package/locales/pt.json +1 -1
  67. package/locales/pt_BR/LC_MESSAGES/volto.po +147 -40
  68. package/locales/pt_BR.json +1 -1
  69. package/locales/rm.json +1 -0
  70. package/locales/ro/LC_MESSAGES/volto.po +128 -21
  71. package/locales/ro.json +1 -1
  72. package/locales/ru/LC_MESSAGES/volto.po +128 -21
  73. package/locales/ru.json +1 -1
  74. package/locales/sk.json +1 -0
  75. package/locales/sl.json +1 -0
  76. package/locales/sm.json +1 -0
  77. package/locales/sq.json +1 -0
  78. package/locales/sr.json +1 -0
  79. package/locales/sr@cyrl.json +1 -0
  80. package/locales/sr@latn.json +1 -0
  81. package/locales/sv.json +1 -1
  82. package/locales/ta.json +1 -0
  83. package/locales/te.json +1 -0
  84. package/locales/th.json +1 -0
  85. package/locales/to.json +1 -0
  86. package/locales/tr.json +1 -0
  87. package/locales/uk.json +1 -0
  88. package/locales/vi.json +1 -0
  89. package/locales/volto.pot +125 -18
  90. package/locales/zh_CN/LC_MESSAGES/volto.po +124 -17
  91. package/locales/zh_CN.json +1 -1
  92. package/locales/zh_Hant.json +1 -0
  93. package/locales/zh_Hant_HK.json +1 -0
  94. package/package.json +43 -100
  95. package/razzle.config.js +21 -21
  96. package/src/actions/content/content.js +0 -1
  97. package/src/actions/controlpanels/controlpanels.js +13 -7
  98. package/src/actions/controlpanels/controlpanels.test.js +11 -5
  99. package/src/actions/users/users.js +2 -2
  100. package/src/components/manage/Actions/Actions.test.jsx +1 -5
  101. package/src/components/manage/Add/Add.jsx +5 -6
  102. package/src/components/manage/BlockChooser/BlockChooser.jsx +1 -0
  103. package/src/components/manage/Blocks/Block/BlocksForm.test.jsx +1 -5
  104. package/src/components/manage/Blocks/Block/Edit.jsx +1 -0
  105. package/src/components/manage/Blocks/Block/EditBlockWrapper.jsx +9 -4
  106. package/src/components/manage/Blocks/Block/Settings.test.jsx +1 -5
  107. package/src/components/manage/Blocks/HTML/Edit.test.jsx +1 -5
  108. package/src/components/manage/Blocks/Image/Edit.jsx +5 -1
  109. package/src/components/manage/Blocks/Image/ImageSidebar.test.jsx +1 -5
  110. package/src/components/manage/Blocks/LeadImage/Edit.jsx +2 -2
  111. package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.jsx +1 -1
  112. package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.test.jsx +1 -5
  113. package/src/components/manage/Blocks/Listing/ImageGallery.jsx +6 -4
  114. package/src/components/manage/Blocks/Maps/Edit.jsx +2 -1
  115. package/src/components/manage/Blocks/Maps/MapsSidebar.test.jsx +1 -5
  116. package/src/components/manage/Blocks/Search/SearchBlockView.jsx +21 -4
  117. package/src/components/manage/Blocks/Search/components/DateRangeFacet.test.jsx +1 -6
  118. package/src/components/manage/Blocks/Search/components/SelectFacet.test.jsx +1 -6
  119. package/src/components/manage/Blocks/Teaser/Data.jsx +21 -7
  120. package/src/components/manage/Blocks/Teaser/DefaultBody.jsx +1 -1
  121. package/src/components/manage/Blocks/Teaser/schema.js +8 -3
  122. package/src/components/manage/Blocks/Video/Edit.jsx +2 -1
  123. package/src/components/manage/Blocks/Video/VideoSidebar.test.jsx +1 -5
  124. package/src/components/manage/Contents/Contents.jsx +689 -654
  125. package/src/components/manage/Contents/Contents.test.jsx +8 -5
  126. package/src/components/manage/Contents/ContentsBreadcrumbs.Multilingual.test.jsx +18 -5
  127. package/src/components/manage/Contents/ContentsBreadcrumbs.jsx +20 -26
  128. package/src/components/manage/Contents/ContentsBreadcrumbs.test.jsx +14 -0
  129. package/src/components/manage/Contents/ContentsDeleteModal.jsx +258 -206
  130. package/src/components/manage/Contents/ContentsDeleteModal.stories.jsx +26 -8
  131. package/src/components/manage/Contents/ContentsItem.jsx +10 -2
  132. package/src/components/manage/Contents/ContentsPropertiesModal.test.jsx +1 -5
  133. package/src/components/manage/Contents/ContentsRenameModal.test.jsx +1 -5
  134. package/src/components/manage/Contents/ContentsTagsModal.test.jsx +1 -5
  135. package/src/components/manage/Contents/ContentsUploadModal.test.jsx +13 -22
  136. package/src/components/manage/Contents/ContentsWorkflowModal.test.jsx +1 -5
  137. package/src/components/manage/Contents/DropZoneContent.jsx +323 -0
  138. package/src/components/manage/Contents/__mocks__/index.tsx +2 -18
  139. package/src/components/manage/Controlpanels/Aliases.test.jsx +1 -5
  140. package/src/components/manage/Controlpanels/ContentType.jsx +1 -1
  141. package/src/components/manage/Controlpanels/ContentType.test.jsx +1 -5
  142. package/src/components/manage/Controlpanels/Groups/GroupsControlpanel.jsx +3 -2
  143. package/src/components/manage/Controlpanels/Relations/Relations.jsx +1 -1
  144. package/src/components/manage/Controlpanels/Rules/AddRule.test.jsx +1 -5
  145. package/src/components/manage/Controlpanels/Rules/EditRule.test.jsx +1 -5
  146. package/src/components/manage/Controlpanels/UndoControlpanel.test.jsx +1 -5
  147. package/src/components/manage/Controlpanels/Users/RenderUsers.jsx +156 -175
  148. package/src/components/manage/Controlpanels/Users/UsersControlpanel.jsx +575 -630
  149. package/src/components/manage/Controlpanels/Users/UsersControlpanel.test.jsx +4 -3
  150. package/src/components/manage/Diff/Diff.test.jsx +1 -6
  151. package/src/components/manage/Diff/DiffField.test.jsx +1 -6
  152. package/src/components/manage/Display/Display.test.jsx +2 -11
  153. package/src/components/manage/Edit/Edit.jsx +2 -3
  154. package/src/components/manage/Edit/Edit.test.jsx +1 -5
  155. package/src/components/manage/Form/BlockDataForm.test.jsx +1 -5
  156. package/src/components/manage/Form/Form.test.jsx +1 -5
  157. package/src/components/manage/Form/InlineForm.jsx +2 -2
  158. package/src/components/manage/Form/InlineForm.test.jsx +1 -5
  159. package/src/components/manage/Form/ModalForm.jsx +12 -10
  160. package/src/components/manage/Form/ModalForm.test.jsx +27 -5
  161. package/src/components/manage/Form/__mocks__/index.tsx +9 -27
  162. package/src/components/manage/Multilingual/CompareLanguages.jsx +2 -5
  163. package/src/components/manage/Multilingual/CreateTranslation.jsx +8 -8
  164. package/src/components/manage/Multilingual/ManageTranslations.jsx +4 -2
  165. package/src/components/manage/Multilingual/ManageTranslations.test.jsx +5 -1
  166. package/src/components/manage/Multilingual/TranslationObject.jsx +1 -1
  167. package/src/components/manage/Preferences/ChangePassword.test.jsx +1 -5
  168. package/src/components/manage/Preferences/PersonalPreferences.test.jsx +1 -17
  169. package/src/components/manage/Sidebar/ObjectBrowser.jsx +3 -0
  170. package/src/components/manage/Sidebar/ObjectBrowserBody.jsx +13 -1
  171. package/src/components/manage/Sidebar/ObjectBrowserNav.jsx +2 -1
  172. package/src/components/manage/Sidebar/SidebarPortal.test.tsx +42 -0
  173. package/src/components/manage/Sidebar/SidebarPortal.tsx +48 -0
  174. package/src/components/manage/TemplateChooser/TemplateChooser.jsx +2 -1
  175. package/src/components/manage/Toolbar/More.jsx +4 -1
  176. package/src/components/manage/Toolbar/More.test.jsx +3 -0
  177. package/src/components/manage/Toolbar/PersonalTools.jsx +2 -1
  178. package/src/components/manage/Toolbar/Toolbar.jsx +3 -4
  179. package/src/components/manage/Toolbar/Types.jsx +7 -7
  180. package/src/components/manage/UniversalLink/UniversalLink.tsx +1 -0
  181. package/src/components/manage/Widgets/AlignWidget.stories.jsx +9 -0
  182. package/src/components/manage/Widgets/AlignWidget.test.tsx +95 -0
  183. package/src/components/manage/Widgets/{AlignWidget.jsx → AlignWidget.tsx} +23 -7
  184. package/src/components/manage/Widgets/ArrayWidget.test.jsx +1 -6
  185. package/src/components/manage/Widgets/BlockAlignment.stories.tsx +104 -0
  186. package/src/components/manage/Widgets/BlockAlignment.test.tsx +104 -0
  187. package/src/components/manage/Widgets/BlockAlignment.tsx +88 -0
  188. package/src/components/manage/Widgets/BlockWidth.stories.tsx +69 -0
  189. package/src/components/manage/Widgets/BlockWidth.test.tsx +62 -0
  190. package/src/components/manage/Widgets/BlockWidth.tsx +101 -0
  191. package/src/components/manage/Widgets/ButtonsWidget.stories.jsx +61 -0
  192. package/src/components/manage/Widgets/ButtonsWidget.test.tsx +138 -0
  193. package/src/components/manage/Widgets/ButtonsWidget.tsx +176 -0
  194. package/src/components/manage/Widgets/CheckboxGroupWidget.test.jsx +1 -6
  195. package/src/components/manage/Widgets/DatetimeWidget.jsx +16 -1
  196. package/src/components/manage/Widgets/DatetimeWidget.test.jsx +1 -6
  197. package/src/components/manage/Widgets/FileWidget.jsx +14 -8
  198. package/src/components/manage/Widgets/FormFieldWrapper.jsx +146 -168
  199. package/src/components/manage/Widgets/ImageWidget.jsx +171 -38
  200. package/src/components/manage/Widgets/InternalUrlWidget.jsx +2 -0
  201. package/src/components/manage/Widgets/ObjectBrowserWidget.jsx +8 -0
  202. package/src/components/manage/Widgets/ObjectListWidget.test.jsx +2 -11
  203. package/src/components/manage/Widgets/ObjectWidget.test.jsx +1 -5
  204. package/src/components/manage/Widgets/QueryWidget.jsx +137 -9
  205. package/src/components/manage/Widgets/RadioGroupWidget.test.jsx +1 -6
  206. package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.test.jsx +1 -6
  207. package/src/components/manage/Widgets/RegistryImageWidget.test.jsx +3 -2
  208. package/src/components/manage/Widgets/SchemaWidget.test.jsx +1 -6
  209. package/src/components/manage/Widgets/SchemaWidgetFieldset.test.jsx +1 -6
  210. package/src/components/manage/Widgets/SelectAutoComplete.jsx +29 -12
  211. package/src/components/manage/Widgets/SelectAutoComplete.test.jsx +1 -6
  212. package/src/components/manage/Widgets/SelectWidget.test.jsx +1 -6
  213. package/src/components/manage/Widgets/Size.stories.tsx +69 -0
  214. package/src/components/manage/Widgets/Size.test.tsx +59 -0
  215. package/src/components/manage/Widgets/Size.tsx +78 -0
  216. package/src/components/manage/Widgets/TimeWidget.test.jsx +1 -6
  217. package/src/components/manage/Widgets/TokenWidget.test.jsx +1 -6
  218. package/src/components/manage/Widgets/UrlWidget.jsx +2 -0
  219. package/src/components/manage/Widgets/VocabularyTermsWidget.test.jsx +2 -11
  220. package/src/components/manage/Widgets/__mocks__/index.tsx +33 -51
  221. package/src/components/manage/Widgets/index.tsx +21 -0
  222. package/src/components/manage/Workflow/Workflow.test.jsx +2 -11
  223. package/src/components/theme/AlternateHrefLangs/AlternateHrefLangs.jsx +1 -3
  224. package/src/components/theme/AlternateHrefLangs/AlternateHrefLangs.test.jsx +0 -4
  225. package/src/components/theme/App/App.jsx +5 -1
  226. package/src/components/theme/App/App.test.jsx +1 -0
  227. package/src/components/theme/Avatar/Avatar.jsx +2 -1
  228. package/src/components/theme/Comments/CommentEditModal.test.jsx +1 -5
  229. package/src/components/theme/Comments/Comments.test.jsx +2 -11
  230. package/src/components/theme/ContactForm/ContactForm.test.jsx +1 -5
  231. package/src/components/theme/FormattedDate/FormattedDate.stories.jsx +20 -2
  232. package/src/components/theme/Image/Image.jsx +11 -8
  233. package/src/components/theme/InjectPloneComponentsCSS/InjectPloneComponentsCSS.tsx +7 -0
  234. package/src/components/theme/LanguageSelector/{LanguageSelector.test.jsx → LanguageSelector.test.tsx} +6 -6
  235. package/src/components/theme/LanguageSelector/LanguageSelector.tsx +89 -0
  236. package/src/components/theme/Logo/Logo.Multilingual.test.jsx +0 -5
  237. package/src/components/theme/MultilingualRedirector/MultilingualRedirector.jsx +10 -14
  238. package/src/components/theme/MultilingualRedirector/MultilingualRedirector.test.jsx +3 -5
  239. package/src/components/theme/Navigation/NavItem.jsx +1 -5
  240. package/src/components/theme/Navigation/Navigation.Multilingual.test.jsx +0 -5
  241. package/src/components/theme/NotFound/NotFound.jsx +5 -2
  242. package/src/components/theme/NotFound/NotFound.test.jsx +3 -0
  243. package/src/components/theme/PasswordReset/RequestPasswordReset.test.jsx +1 -5
  244. package/src/components/theme/PreviewImage/PreviewImage.jsx +1 -1
  245. package/src/components/theme/Register/Register.test.jsx +1 -5
  246. package/src/components/theme/RequestTimeout/RequestTimeout.jsx +1 -1
  247. package/src/components/theme/Sitemap/Sitemap.jsx +6 -5
  248. package/src/components/theme/Sitemap/Sitemap.test.jsx +0 -1
  249. package/src/components/theme/Unauthorized/Unauthorized.jsx +5 -2
  250. package/src/components/theme/View/EventDatesInfo.test.jsx +1 -6
  251. package/src/components/theme/View/EventView.test.jsx +1 -6
  252. package/src/components/theme/View/FileView.jsx +9 -1
  253. package/src/components/theme/View/View.jsx +8 -1
  254. package/src/components/theme/Widgets/ImageWidget.jsx +2 -1
  255. package/src/config/ControlPanels.js +1 -0
  256. package/src/config/Widgets.jsx +7 -0
  257. package/src/config/index.js +18 -25
  258. package/src/config/server.js +0 -2
  259. package/src/config/slots.js +19 -0
  260. package/src/express-middleware/devproxy.js +20 -5
  261. package/src/helpers/Api/APIResourceWithAuth.js +8 -3
  262. package/src/helpers/Api/Api.js +7 -4
  263. package/src/helpers/AsyncConnect/ssr.js +4 -1
  264. package/src/helpers/Content/Content.js +23 -0
  265. package/src/helpers/Content/Content.test.js +39 -0
  266. package/src/helpers/Content/withClientSideContent.jsx +35 -0
  267. package/src/helpers/Extensions/withBlockSchemaEnhancer.jsx +4 -1
  268. package/src/helpers/Html/Html.jsx +13 -7
  269. package/src/helpers/LanguageMap/LanguageMap.js +115 -8
  270. package/src/helpers/Loadable/__mocks__/Loadable.jsx +7 -22
  271. package/src/helpers/MessageLabels/MessageLabels.js +5 -0
  272. package/src/helpers/Sitemap/Sitemap.js +4 -4
  273. package/src/helpers/Url/Url.js +33 -2
  274. package/src/helpers/Url/Url.test.js +62 -0
  275. package/src/hooks/user/useUser.js +1 -1
  276. package/src/internalChecks.test.ts +11 -0
  277. package/src/middleware/Api.test.js +4 -0
  278. package/src/middleware/api.js +82 -28
  279. package/src/middleware/storeProtectLoadUtils.test.js +3 -3
  280. package/src/reducers/content/content.js +3 -18
  281. package/src/reducers/diff/diff.js +5 -1
  282. package/src/reducers/diff/diff.test.js +60 -4
  283. package/src/reducers/querystring/querystring.js +8 -1
  284. package/src/routes.js +4 -2
  285. package/src/server.jsx +45 -14
  286. package/src/start-client.jsx +9 -6
  287. package/src/start-server.js +9 -3
  288. package/test-addons-loader.js +3 -0
  289. package/test-setup-config.jsx +0 -2
  290. package/test-setup-globals.js +30 -2
  291. package/theme/themes/pastanaga/extras/blocks.less +26 -0
  292. package/theme/themes/pastanaga/extras/contents.less +80 -5
  293. package/theme/themes/pastanaga/extras/main.less +17 -2
  294. package/theme/themes/pastanaga/extras/widgets.less +79 -0
  295. package/tsconfig.declarations.json +1 -1
  296. package/tsconfig.json +4 -5
  297. package/types/components/manage/Blocks/Teaser/schema.d.ts +1 -0
  298. package/types/components/manage/Contents/DropZoneContent.d.ts +2 -0
  299. package/types/components/manage/Contents/__mocks__/index.d.ts +2 -2
  300. package/types/components/manage/Controlpanels/Relations/RelationsMatrix.d.ts +1 -1
  301. package/types/components/manage/Controlpanels/Users/RenderUsers.d.ts +18 -2
  302. package/types/components/manage/Controlpanels/Users/UsersControlpanel.d.ts +6 -2
  303. package/types/components/manage/Controlpanels/index.d.ts +2 -2
  304. package/types/components/manage/Form/__mocks__/index.d.ts +8 -8
  305. package/types/components/manage/Multilingual/ManageTranslations.d.ts +1 -1
  306. package/types/components/manage/Sidebar/ObjectBrowser.d.ts +1 -1
  307. package/types/components/manage/Sidebar/SidebarPortal.d.ts +7 -15
  308. package/types/components/manage/Widgets/AlignWidget.d.ts +8 -10
  309. package/types/components/manage/Widgets/AlignWidget.stories.d.ts +1 -0
  310. package/types/components/manage/Widgets/BlockAlignment.d.ts +7 -0
  311. package/types/components/manage/Widgets/BlockAlignment.stories.d.ts +8 -0
  312. package/types/components/manage/Widgets/BlockWidth.d.ts +7 -0
  313. package/types/components/manage/Widgets/BlockWidth.stories.d.ts +6 -0
  314. package/types/components/manage/Widgets/ButtonsWidget.d.ts +48 -1
  315. package/types/components/manage/Widgets/ButtonsWidget.stories.d.ts +3 -0
  316. package/types/components/manage/Widgets/FormFieldWrapper.d.ts +28 -5
  317. package/types/components/manage/Widgets/ImageWidget.d.ts +41 -1
  318. package/types/components/manage/Widgets/InternalUrlWidget.d.ts +1 -1
  319. package/types/components/manage/Widgets/ObjectBrowserWidget.d.ts +2 -0
  320. package/types/components/manage/Widgets/QueryWidget.d.ts +5 -2
  321. package/types/components/manage/Widgets/RecurrenceWidget/Utils.d.ts +12 -18
  322. package/types/components/manage/Widgets/Size.d.ts +7 -0
  323. package/types/components/manage/Widgets/Size.stories.d.ts +6 -0
  324. package/types/components/manage/Widgets/UrlWidget.d.ts +1 -1
  325. package/types/components/manage/Widgets/__mocks__/index.d.ts +33 -33
  326. package/types/components/manage/Widgets/index.d.ts +11 -6
  327. package/types/components/theme/FormattedDate/FormattedDate.stories.d.ts +1 -1
  328. package/types/components/theme/InjectPloneComponentsCSS/InjectPloneComponentsCSS.d.ts +3 -0
  329. package/types/components/theme/LanguageSelector/LanguageSelector.d.ts +3 -10
  330. package/types/components/theme/Unauthorized/Unauthorized.d.ts +2 -2
  331. package/types/config/Widgets.d.ts +6 -0
  332. package/types/config/slots.d.ts +7 -0
  333. package/types/helpers/Content/Content.d.ts +7 -0
  334. package/types/helpers/Content/withClientSideContent.d.ts +1 -0
  335. package/types/helpers/Extensions/withBlockSchemaEnhancer.d.ts +4 -5
  336. package/types/helpers/Helmet/Helmet.d.ts +1 -1
  337. package/types/helpers/LanguageMap/LanguageMap.d.ts +428 -4
  338. package/types/helpers/Loadable/__mocks__/Loadable.d.ts +2 -2
  339. package/types/helpers/MessageLabels/MessageLabels.d.ts +68 -62
  340. package/types/helpers/Url/Url.d.ts +14 -0
  341. package/types/helpers/Url/bulkFlattenToAppURL.d.ts +5 -0
  342. package/types/middleware/api.d.ts +6 -9
  343. package/types/reducers/index.d.ts +1 -0
  344. package/types/start-client.d.ts +0 -1
  345. package/vitest.config.mjs +4 -4
  346. package/webpack-plugins/webpack-scss-plugin.js +172 -0
  347. package/jest-addons-loader.js +0 -3
  348. package/jest-extender-plugin.js +0 -39
  349. package/jest-setup-afterenv.js +0 -2
  350. package/jest-svgsystem-transform.js +0 -10
  351. package/package-why.json +0 -34
  352. package/patches/patchit.sh +0 -2
  353. package/patches/razzle-jest.patch +0 -10
  354. package/src/actions/content/content.multilingual.test.js +0 -17
  355. package/src/components/manage/Contents/__mocks__/index.vitest.tsx +0 -5
  356. package/src/components/manage/Form/__mocks__/index.vitest.tsx +0 -73
  357. package/src/components/manage/Sidebar/SidebarPortal.jsx +0 -47
  358. package/src/components/manage/Sidebar/SidebarPortal.test.jsx +0 -26
  359. package/src/components/manage/Widgets/AlignWidget.test.jsx +0 -59
  360. package/src/components/manage/Widgets/ButtonsWidget.jsx +0 -41
  361. package/src/components/manage/Widgets/ButtonsWidget.test.jsx +0 -70
  362. package/src/components/manage/Widgets/__mocks__/index.vitest.tsx +0 -41
  363. package/src/components/theme/LanguageSelector/LanguageSelector.jsx +0 -77
  364. package/src/helpers/Loadable/__mocks__/Loadable.vitest.jsx +0 -39
  365. package/test-setup-globals-vitest.js +0 -46
  366. package/theme/themes/pastanaga/extras/utils.less +0 -63
@@ -1,8 +1,3 @@
1
- /**
2
- * Contents component.
3
- * @module components/manage/Contents/Contents
4
- */
5
-
6
1
  import React, { Component } from 'react';
7
2
  import PropTypes from 'prop-types';
8
3
  import { connect } from 'react-redux';
@@ -90,6 +85,7 @@ import sortUpSVG from '@plone/volto/icons/sort-up.svg';
90
85
  import downKeySVG from '@plone/volto/icons/down-key.svg';
91
86
  import moreSVG from '@plone/volto/icons/more.svg';
92
87
  import clearSVG from '@plone/volto/icons/clear.svg';
88
+ import DropzoneContent from './DropZoneContent';
93
89
 
94
90
  const messages = defineMessages({
95
91
  back: {
@@ -264,6 +260,10 @@ const messages = defineMessages({
264
260
  id: 'All',
265
261
  defaultMessage: 'All',
266
262
  },
263
+ resultCount: {
264
+ id: 'resultCount',
265
+ defaultMessage: 'Result count',
266
+ },
267
267
  });
268
268
 
269
269
  /**
@@ -1149,682 +1149,717 @@ class Contents extends Component {
1149
1149
  {this.props.intl.formatMessage(messages.loading)}
1150
1150
  </Loader>
1151
1151
  </Dimmer>
1152
-
1153
1152
  <Helmet
1154
1153
  title={this.props.intl.formatMessage(messages.contents)}
1155
1154
  />
1156
- <div className="container">
1157
- <article id="content">
1158
- <ContentsDeleteModal
1159
- open={this.state.showDelete}
1160
- onCancel={this.onDeleteCancel}
1161
- onOk={this.onDeleteOk}
1162
- items={this.state.items}
1163
- itemsToDelete={this.state.itemsToDelete}
1164
- />
1165
- <ContentsUploadModal
1166
- open={this.state.showUpload}
1167
- onCancel={this.onUploadCancel}
1168
- onOk={this.onUploadOk}
1169
- pathname={getBaseUrl(this.props.pathname)}
1170
- />
1171
- <ContentsRenameModal
1172
- open={this.state.showRename}
1173
- onCancel={this.onRenameCancel}
1174
- onOk={this.onRenameOk}
1175
- items={map(this.state.selected, (item) => ({
1176
- url: item,
1177
- title: this.getFieldById(item, 'title'),
1178
- id: this.getFieldById(item, 'id'),
1179
- }))}
1180
- />
1181
- <ContentsTagsModal
1182
- open={this.state.showTags}
1183
- onCancel={this.onTagsCancel}
1184
- onOk={this.onTagsOk}
1185
- items={map(this.state.selected, (item) => ({
1186
- url: item,
1187
- subjects: this.getFieldById(item, 'Subject'),
1188
- }))}
1189
- />
1190
- <ContentsPropertiesModal
1191
- open={this.state.showProperties}
1192
- onCancel={this.onPropertiesCancel}
1193
- onOk={this.onPropertiesOk}
1194
- items={this.state.selected}
1195
- values={map(this.state.selected, (id) =>
1196
- find(this.state.items, { '@id': id }),
1197
- ).filter((item) => item)}
1198
- />
1199
- {this.state.showWorkflow && (
1200
- <ContentsWorkflowModal
1201
- open={this.state.showWorkflow}
1202
- onCancel={this.onWorkflowCancel}
1203
- onOk={this.onWorkflowOk}
1155
+ <DropzoneContent
1156
+ onOk={this.onUploadOk}
1157
+ onCancel={this.onUploadCancel}
1158
+ pathname={getBaseUrl(this.props.pathname)}
1159
+ >
1160
+ <div className="container">
1161
+ <article id="content">
1162
+ <ContentsDeleteModal
1163
+ open={this.state.showDelete}
1164
+ onCancel={this.onDeleteCancel}
1165
+ onOk={this.onDeleteOk}
1166
+ items={this.state.items}
1167
+ itemsToDelete={this.state.itemsToDelete}
1168
+ hasMultiplePages={
1169
+ Math.ceil(this.props.total / this.state.pageSize) > 1
1170
+ }
1171
+ />
1172
+ <ContentsUploadModal
1173
+ open={this.state.showUpload}
1174
+ onCancel={this.onUploadCancel}
1175
+ onOk={this.onUploadOk}
1176
+ pathname={getBaseUrl(this.props.pathname)}
1177
+ />
1178
+ <ContentsRenameModal
1179
+ open={this.state.showRename}
1180
+ onCancel={this.onRenameCancel}
1181
+ onOk={this.onRenameOk}
1182
+ items={map(this.state.selected, (item) => ({
1183
+ url: item,
1184
+ title: this.getFieldById(item, 'title'),
1185
+ id: this.getFieldById(item, 'id'),
1186
+ }))}
1187
+ />
1188
+ <ContentsTagsModal
1189
+ open={this.state.showTags}
1190
+ onCancel={this.onTagsCancel}
1191
+ onOk={this.onTagsOk}
1192
+ items={map(this.state.selected, (item) => ({
1193
+ url: item,
1194
+ subjects: this.getFieldById(item, 'Subject'),
1195
+ }))}
1196
+ />
1197
+ <ContentsPropertiesModal
1198
+ open={this.state.showProperties}
1199
+ onCancel={this.onPropertiesCancel}
1200
+ onOk={this.onPropertiesOk}
1204
1201
  items={this.state.selected}
1202
+ values={map(this.state.selected, (id) =>
1203
+ find(this.state.items, { '@id': id }),
1204
+ ).filter((item) => item)}
1205
1205
  />
1206
- )}
1207
- <section id="content-core">
1208
- <Segment.Group raised>
1209
- <Menu secondary attached className="top-menu">
1210
- <Menu.Menu className="top-menu-menu">
1211
- <Popup
1212
- trigger={
1213
- <Menu.Item
1214
- icon
1215
- as={Button}
1216
- onClick={this.upload}
1217
- className="upload"
1218
- aria-label={this.props.intl.formatMessage(
1219
- messages.upload,
1220
- )}
1221
- >
1222
- <Icon
1223
- name={uploadSVG}
1224
- color="#007eb1"
1225
- size="24px"
1206
+ {this.state.showWorkflow && (
1207
+ <ContentsWorkflowModal
1208
+ open={this.state.showWorkflow}
1209
+ onCancel={this.onWorkflowCancel}
1210
+ onOk={this.onWorkflowOk}
1211
+ items={this.state.selected}
1212
+ />
1213
+ )}
1214
+ <section id="content-core">
1215
+ <Segment.Group raised>
1216
+ <Menu secondary attached className="top-menu">
1217
+ <Menu.Menu className="top-menu-menu">
1218
+ <Popup
1219
+ trigger={
1220
+ <Menu.Item
1221
+ icon
1222
+ as={Button}
1223
+ onClick={this.upload}
1226
1224
  className="upload"
1227
- />
1228
- </Menu.Item>
1229
- }
1230
- position="top center"
1231
- content={this.props.intl.formatMessage(
1232
- messages.upload,
1233
- )}
1234
- size="mini"
1235
- />
1236
- </Menu.Menu>
1237
- <Menu.Menu className="top-menu-menu">
1238
- <Popup
1239
- trigger={
1240
- <Menu.Item
1241
- icon
1242
- as={Button}
1243
- onClick={this.rename}
1244
- disabled={!selected}
1245
- aria-label={this.props.intl.formatMessage(
1246
- messages.rename,
1247
- )}
1248
- >
1249
- <Icon
1250
- name={renameSVG}
1251
- color={selected ? '#826a6a' : 'grey'}
1252
- size="24px"
1253
- className="rename"
1254
- />
1255
- </Menu.Item>
1256
- }
1257
- position="top center"
1258
- content={this.props.intl.formatMessage(
1259
- messages.rename,
1260
- )}
1261
- size="mini"
1262
- />
1263
- <Popup
1264
- trigger={
1265
- <Menu.Item
1266
- icon
1267
- as={Button}
1268
- onClick={this.workflow}
1269
- disabled={!selected}
1270
- aria-label={this.props.intl.formatMessage(
1271
- messages.state,
1272
- )}
1273
- >
1274
- <Icon
1275
- name={semaphoreSVG}
1276
- color={selected ? '#826a6a' : 'grey'}
1277
- size="24px"
1278
- className="semaphore"
1279
- />
1280
- </Menu.Item>
1281
- }
1282
- position="top center"
1283
- content={this.props.intl.formatMessage(
1284
- messages.state,
1285
- )}
1286
- size="mini"
1287
- />
1288
- <Popup
1289
- trigger={
1290
- <Menu.Item
1291
- icon
1292
- as={Button}
1293
- onClick={this.tags}
1294
- disabled={!selected}
1295
- aria-label={this.props.intl.formatMessage(
1296
- messages.tags,
1297
- )}
1298
- >
1299
- <Icon
1300
- name={tagSVG}
1301
- color={selected ? '#826a6a' : 'grey'}
1302
- size="24px"
1303
- className="tag"
1304
- />
1305
- </Menu.Item>
1306
- }
1307
- position="top center"
1308
- content={this.props.intl.formatMessage(
1309
- messages.tags,
1310
- )}
1311
- size="mini"
1312
- />
1313
-
1314
- <Popup
1315
- trigger={
1316
- <Menu.Item
1317
- icon
1318
- as={Button}
1319
- onClick={this.properties}
1320
- disabled={!selected}
1321
- aria-label={this.props.intl.formatMessage(
1322
- messages.properties,
1323
- )}
1324
- >
1325
- <Icon
1326
- name={propertiesSVG}
1327
- color={selected ? '#826a6a' : 'grey'}
1328
- size="24px"
1329
- className="properties"
1330
- />
1331
- </Menu.Item>
1332
- }
1333
- position="top center"
1334
- content={this.props.intl.formatMessage(
1335
- messages.properties,
1336
- )}
1337
- size="mini"
1338
- />
1339
- </Menu.Menu>
1340
- <Menu.Menu className="top-menu-menu">
1341
- <Popup
1342
- trigger={
1343
- <Menu.Item
1344
- icon
1345
- as={Button}
1346
- onClick={this.cut}
1347
- disabled={!selected}
1348
- aria-label={this.props.intl.formatMessage(
1349
- messages.cut,
1350
- )}
1351
- >
1352
- <Icon
1353
- name={cutSVG}
1354
- color={selected ? '#826a6a' : 'grey'}
1355
- size="24px"
1356
- className="cut"
1357
- />
1358
- </Menu.Item>
1359
- }
1360
- position="top center"
1361
- content={this.props.intl.formatMessage(
1362
- messages.cut,
1363
- )}
1364
- size="mini"
1365
- />
1366
- <Popup
1367
- trigger={
1368
- <Menu.Item
1369
- icon
1370
- as={Button}
1371
- onClick={this.copy}
1372
- disabled={!selected}
1373
- aria-label={this.props.intl.formatMessage(
1374
- messages.copy,
1375
- )}
1376
- >
1377
- <Icon
1378
- name={copySVG}
1379
- color={selected ? '#826a6a' : 'grey'}
1380
- size="24px"
1381
- className="copy"
1382
- />
1383
- </Menu.Item>
1384
- }
1385
- position="top center"
1386
- content={this.props.intl.formatMessage(
1387
- messages.copy,
1388
- )}
1389
- size="mini"
1390
- />
1391
-
1392
- <Popup
1393
- trigger={
1394
- <Menu.Item
1395
- icon
1396
- as={Button}
1397
- onClick={this.paste}
1398
- disabled={!this.props.action}
1399
- aria-label={this.props.intl.formatMessage(
1400
- messages.paste,
1401
- )}
1402
- >
1403
- <Icon
1404
- name={pasteSVG}
1405
- color={selected ? '#826a6a' : 'grey'}
1406
- size="24px"
1407
- className="paste"
1408
- />
1409
- </Menu.Item>
1410
- }
1411
- position="top center"
1412
- content={this.props.intl.formatMessage(
1413
- messages.paste,
1414
- )}
1415
- size="mini"
1416
- />
1225
+ aria-controls="contents-table-wrapper"
1226
+ aria-label={this.props.intl.formatMessage(
1227
+ messages.filter,
1228
+ )}
1229
+ >
1230
+ <Icon
1231
+ name={uploadSVG}
1232
+ color="#007eb1"
1233
+ size="24px"
1234
+ className="upload"
1235
+ />
1236
+ </Menu.Item>
1237
+ }
1238
+ position="top center"
1239
+ content={this.props.intl.formatMessage(
1240
+ messages.upload,
1241
+ )}
1242
+ size="mini"
1243
+ />
1244
+ </Menu.Menu>
1245
+ <Menu.Menu className="top-menu-menu">
1246
+ <Popup
1247
+ trigger={
1248
+ <Menu.Item
1249
+ icon
1250
+ as={Button}
1251
+ onClick={this.rename}
1252
+ disabled={!selected}
1253
+ aria-label={this.props.intl.formatMessage(
1254
+ messages.rename,
1255
+ )}
1256
+ >
1257
+ <Icon
1258
+ name={renameSVG}
1259
+ color={selected ? '#826a6a' : 'grey'}
1260
+ size="24px"
1261
+ className="rename"
1262
+ />
1263
+ </Menu.Item>
1264
+ }
1265
+ position="top center"
1266
+ content={this.props.intl.formatMessage(
1267
+ messages.rename,
1268
+ )}
1269
+ size="mini"
1270
+ />
1271
+ <Popup
1272
+ trigger={
1273
+ <Menu.Item
1274
+ icon
1275
+ as={Button}
1276
+ onClick={this.workflow}
1277
+ disabled={!selected}
1278
+ aria-label={this.props.intl.formatMessage(
1279
+ messages.state,
1280
+ )}
1281
+ >
1282
+ <Icon
1283
+ name={semaphoreSVG}
1284
+ color={selected ? '#826a6a' : 'grey'}
1285
+ size="24px"
1286
+ className="semaphore"
1287
+ />
1288
+ </Menu.Item>
1289
+ }
1290
+ position="top center"
1291
+ content={this.props.intl.formatMessage(
1292
+ messages.state,
1293
+ )}
1294
+ size="mini"
1295
+ />
1296
+ <Popup
1297
+ trigger={
1298
+ <Menu.Item
1299
+ icon
1300
+ as={Button}
1301
+ onClick={this.tags}
1302
+ disabled={!selected}
1303
+ aria-label={this.props.intl.formatMessage(
1304
+ messages.tags,
1305
+ )}
1306
+ >
1307
+ <Icon
1308
+ name={tagSVG}
1309
+ color={selected ? '#826a6a' : 'grey'}
1310
+ size="24px"
1311
+ className="tag"
1312
+ />
1313
+ </Menu.Item>
1314
+ }
1315
+ position="top center"
1316
+ content={this.props.intl.formatMessage(
1317
+ messages.tags,
1318
+ )}
1319
+ size="mini"
1320
+ />
1417
1321
 
1418
- <Popup
1419
- trigger={
1420
- <Menu.Item
1421
- icon
1422
- as={Button}
1423
- onClick={this.delete}
1424
- disabled={!selected}
1425
- aria-label={this.props.intl.formatMessage(
1426
- messages.delete,
1427
- )}
1428
- >
1429
- <Icon
1430
- name={deleteSVG}
1431
- color={selected ? '#e40166' : 'grey'}
1432
- size="24px"
1433
- className="delete"
1434
- />
1435
- </Menu.Item>
1436
- }
1437
- position="top center"
1438
- content={this.props.intl.formatMessage(
1439
- messages.delete,
1440
- )}
1441
- size="mini"
1442
- />
1443
- </Menu.Menu>
1444
- <Menu.Menu
1445
- position="right"
1446
- className="top-menu-searchbox"
1447
- >
1448
- <div className="ui right aligned category search item">
1449
- <Input
1450
- type="text"
1451
- transparent
1452
- placeholder={this.props.intl.formatMessage(
1453
- messages.filter,
1322
+ <Popup
1323
+ trigger={
1324
+ <Menu.Item
1325
+ icon
1326
+ as={Button}
1327
+ onClick={this.properties}
1328
+ disabled={!selected}
1329
+ aria-label={this.props.intl.formatMessage(
1330
+ messages.properties,
1331
+ )}
1332
+ >
1333
+ <Icon
1334
+ name={propertiesSVG}
1335
+ color={selected ? '#826a6a' : 'grey'}
1336
+ size="24px"
1337
+ className="properties"
1338
+ />
1339
+ </Menu.Item>
1340
+ }
1341
+ position="top center"
1342
+ content={this.props.intl.formatMessage(
1343
+ messages.properties,
1454
1344
  )}
1455
- size="small"
1456
- value={this.state.filter}
1457
- onChange={this.onChangeFilter}
1345
+ size="mini"
1458
1346
  />
1459
- {this.state.filter && (
1460
- <Button
1461
- className="icon icon-container"
1462
- onClick={() => {
1463
- this.onChangeFilter('', { value: '' });
1464
- }}
1465
- >
1466
- <Icon
1467
- name={clearSVG}
1468
- size="30px"
1469
- color="#e40166"
1470
- />
1471
- </Button>
1472
- )}
1473
- <Icon
1474
- name={zoomSVG}
1475
- size="30px"
1476
- color="#007eb1"
1477
- className="zoom"
1478
- style={{ flexShrink: '0' }}
1347
+ </Menu.Menu>
1348
+ <Menu.Menu className="top-menu-menu">
1349
+ <Popup
1350
+ trigger={
1351
+ <Menu.Item
1352
+ icon
1353
+ as={Button}
1354
+ onClick={this.cut}
1355
+ disabled={!selected}
1356
+ aria-label={this.props.intl.formatMessage(
1357
+ messages.cut,
1358
+ )}
1359
+ >
1360
+ <Icon
1361
+ name={cutSVG}
1362
+ color={selected ? '#826a6a' : 'grey'}
1363
+ size="24px"
1364
+ className="cut"
1365
+ />
1366
+ </Menu.Item>
1367
+ }
1368
+ position="top center"
1369
+ content={this.props.intl.formatMessage(
1370
+ messages.cut,
1371
+ )}
1372
+ size="mini"
1479
1373
  />
1480
- <div className="results" />
1481
- </div>
1482
- </Menu.Menu>
1483
- </Menu>
1484
- <Segment
1485
- secondary
1486
- attached
1487
- className="contents-breadcrumbs"
1488
- >
1489
- <ContentsBreadcrumbs items={this.props.breadcrumbs} />
1490
- <Dropdown
1491
- item
1492
- upward={false}
1493
- icon={
1494
- <Icon name={moreSVG} size="24px" color="#826a6a" />
1495
- }
1496
- className="right floating selectIndex"
1497
- >
1498
- <Dropdown.Menu className="left">
1499
- <Dropdown.Header
1374
+ <Popup
1375
+ trigger={
1376
+ <Menu.Item
1377
+ icon
1378
+ as={Button}
1379
+ onClick={this.copy}
1380
+ disabled={!selected}
1381
+ aria-label={this.props.intl.formatMessage(
1382
+ messages.copy,
1383
+ )}
1384
+ >
1385
+ <Icon
1386
+ name={copySVG}
1387
+ color={selected ? '#826a6a' : 'grey'}
1388
+ size="24px"
1389
+ className="copy"
1390
+ />
1391
+ </Menu.Item>
1392
+ }
1393
+ position="top center"
1500
1394
  content={this.props.intl.formatMessage(
1501
- messages.selectColumns,
1395
+ messages.copy,
1502
1396
  )}
1397
+ size="mini"
1503
1398
  />
1504
- <Dropdown.Menu scrolling>
1505
- {map(
1506
- filter(
1507
- this.state.index.order,
1508
- (index) => index !== 'sortable_title',
1509
- ),
1510
- (index) => (
1511
- <Dropdown.Item
1512
- key={index}
1513
- value={index}
1514
- onClick={this.onSelectIndex}
1515
- className="iconAlign"
1516
- >
1517
- {this.state.index.values[index].selected ? (
1518
- <Icon
1519
- name={checkboxCheckedSVG}
1520
- size="24px"
1521
- color="#007eb1"
1522
- className={
1523
- this.state.index.values[index].label
1524
- }
1525
- />
1526
- ) : (
1527
- <Icon
1528
- name={checkboxUncheckedSVG}
1529
- className={
1530
- this.state.index.values[index].label
1531
- }
1532
- size="24px"
1533
- />
1534
- )}
1535
- <span>
1536
- {' '}
1537
- {this.props.intl.formatMessage({
1538
- id: this.state.index.values[index]
1539
- .label,
1540
- defaultMessage:
1541
- this.state.index.values[index].label,
1542
- })}
1543
- </span>
1544
- </Dropdown.Item>
1545
- ),
1399
+
1400
+ <Popup
1401
+ trigger={
1402
+ <Menu.Item
1403
+ icon
1404
+ as={Button}
1405
+ onClick={this.paste}
1406
+ disabled={!this.props.action}
1407
+ aria-label={this.props.intl.formatMessage(
1408
+ messages.paste,
1409
+ )}
1410
+ >
1411
+ <Icon
1412
+ name={pasteSVG}
1413
+ color={selected ? '#826a6a' : 'grey'}
1414
+ size="24px"
1415
+ className="paste"
1416
+ />
1417
+ </Menu.Item>
1418
+ }
1419
+ position="top center"
1420
+ content={this.props.intl.formatMessage(
1421
+ messages.paste,
1546
1422
  )}
1547
- </Dropdown.Menu>
1548
- </Dropdown.Menu>
1549
- </Dropdown>
1550
- </Segment>
1551
- <div className="contents-table-wrapper">
1552
- <Table selectable compact singleLine attached>
1553
- <Table.Header>
1554
- <Table.Row>
1555
- <Table.HeaderCell>
1556
- <Popup
1557
- menu={true}
1558
- position="bottom left"
1559
- flowing={true}
1560
- basic={true}
1561
- on="click"
1562
- popper={{
1563
- className: 'dropdown-popup',
1423
+ size="mini"
1424
+ />
1425
+
1426
+ <Popup
1427
+ trigger={
1428
+ <Menu.Item
1429
+ icon
1430
+ as={Button}
1431
+ onClick={this.delete}
1432
+ disabled={!selected}
1433
+ aria-label={this.props.intl.formatMessage(
1434
+ messages.delete,
1435
+ )}
1436
+ >
1437
+ <Icon
1438
+ name={deleteSVG}
1439
+ color={selected ? '#e40166' : 'grey'}
1440
+ size="24px"
1441
+ className="delete"
1442
+ />
1443
+ </Menu.Item>
1444
+ }
1445
+ position="top center"
1446
+ content={this.props.intl.formatMessage(
1447
+ messages.delete,
1448
+ )}
1449
+ size="mini"
1450
+ />
1451
+ </Menu.Menu>
1452
+ <Menu.Menu
1453
+ position="right"
1454
+ className="top-menu-searchbox"
1455
+ >
1456
+ <div className="ui right aligned category search item">
1457
+ <Input
1458
+ type="text"
1459
+ transparent
1460
+ placeholder={this.props.intl.formatMessage(
1461
+ messages.filter,
1462
+ )}
1463
+ size="small"
1464
+ value={this.state.filter}
1465
+ onChange={this.onChangeFilter}
1466
+ />
1467
+ {this.state.filter && (
1468
+ <Button
1469
+ className="icon icon-container"
1470
+ onClick={() => {
1471
+ this.onChangeFilter('', { value: '' });
1564
1472
  }}
1565
- trigger={
1566
- <Icon
1567
- name={configurationSVG}
1568
- size="24px"
1569
- color="#826a6a"
1570
- className="dropdown-popup-trigger configuration-svg"
1571
- />
1572
- }
1573
1473
  >
1574
- <Menu vertical borderless fluid>
1575
- <Menu.Header
1576
- content={this.props.intl.formatMessage(
1577
- messages.rearrangeBy,
1578
- )}
1579
- />
1580
- {map(
1581
- [
1582
- 'id',
1583
- 'sortable_title',
1584
- 'EffectiveDate',
1585
- 'CreationDate',
1586
- 'ModificationDate',
1587
- 'portal_type',
1588
- ],
1589
- (index) => (
1590
- <Dropdown
1591
- key={index}
1592
- item
1593
- simple
1594
- className={`sort_${index} icon-align`}
1595
- icon={
1596
- <Icon
1597
- name={downKeySVG}
1598
- size="24px"
1599
- className="left"
1600
- />
1474
+ <Icon
1475
+ name={clearSVG}
1476
+ size="30px"
1477
+ color="#e40166"
1478
+ />
1479
+ </Button>
1480
+ )}
1481
+ <Icon
1482
+ name={zoomSVG}
1483
+ size="30px"
1484
+ color="#007eb1"
1485
+ className="zoom"
1486
+ style={{ flexShrink: '0' }}
1487
+ />
1488
+ <div className="results" />
1489
+ </div>
1490
+ </Menu.Menu>
1491
+ </Menu>
1492
+ <Segment
1493
+ secondary
1494
+ attached
1495
+ className="contents-breadcrumbs"
1496
+ >
1497
+ <ContentsBreadcrumbs items={this.props.breadcrumbs} />
1498
+ <Dropdown
1499
+ item
1500
+ upward={false}
1501
+ icon={
1502
+ <Icon
1503
+ name={moreSVG}
1504
+ size="24px"
1505
+ color="#826a6a"
1506
+ />
1507
+ }
1508
+ className="right floating selectIndex"
1509
+ >
1510
+ <Dropdown.Menu className="left">
1511
+ <Dropdown.Header
1512
+ content={this.props.intl.formatMessage(
1513
+ messages.selectColumns,
1514
+ )}
1515
+ />
1516
+ <Dropdown.Menu scrolling>
1517
+ {map(
1518
+ filter(
1519
+ this.state.index.order,
1520
+ (index) => index !== 'sortable_title',
1521
+ ),
1522
+ (index) => (
1523
+ <Dropdown.Item
1524
+ key={index}
1525
+ value={index}
1526
+ onClick={this.onSelectIndex}
1527
+ className="iconAlign"
1528
+ >
1529
+ {this.state.index.values[index]
1530
+ .selected ? (
1531
+ <Icon
1532
+ name={checkboxCheckedSVG}
1533
+ size="24px"
1534
+ color="#007eb1"
1535
+ className={
1536
+ this.state.index.values[index].label
1601
1537
  }
1602
- text={this.props.intl.formatMessage({
1603
- id: Indexes[index].label,
1604
- })}
1605
- >
1606
- <Dropdown.Menu>
1607
- <Dropdown.Item
1608
- onClick={this.onSortItems}
1609
- value={`${Indexes[index].sort_on}|ascending`}
1610
- className={`sort_${Indexes[index].sort_on}_ascending icon-align`}
1611
- >
1612
- <Icon
1613
- name={sortDownSVG}
1614
- size="24px"
1615
- />{' '}
1616
- <FormattedMessage
1617
- id="Ascending"
1618
- defaultMessage="Ascending"
1619
- />
1620
- </Dropdown.Item>
1621
- <Dropdown.Item
1622
- onClick={this.onSortItems}
1623
- value={`${Indexes[index].sort_on}|descending`}
1624
- className={`sort_${Indexes[index].sort_on}_descending icon-align`}
1625
- >
1538
+ />
1539
+ ) : (
1540
+ <Icon
1541
+ name={checkboxUncheckedSVG}
1542
+ className={
1543
+ this.state.index.values[index].label
1544
+ }
1545
+ size="24px"
1546
+ />
1547
+ )}
1548
+ <span>
1549
+ {' '}
1550
+ {this.props.intl.formatMessage({
1551
+ id: this.state.index.values[index]
1552
+ .label,
1553
+ defaultMessage:
1554
+ this.state.index.values[index]
1555
+ .label,
1556
+ })}
1557
+ </span>
1558
+ </Dropdown.Item>
1559
+ ),
1560
+ )}
1561
+ </Dropdown.Menu>
1562
+ </Dropdown.Menu>
1563
+ </Dropdown>
1564
+ </Segment>
1565
+ <div
1566
+ id="contents-table-wrapper"
1567
+ className="contents-table-wrapper"
1568
+ role="region"
1569
+ >
1570
+ <span
1571
+ aria-live="polite"
1572
+ className="search-feedback"
1573
+ role="status"
1574
+ >
1575
+ {`${this.props.intl.formatMessage(
1576
+ messages.resultCount,
1577
+ )}: ${this.props.total || 0}`}
1578
+ </span>
1579
+ <Table selectable compact singleLine attached>
1580
+ <Table.Header>
1581
+ <Table.Row>
1582
+ <Table.HeaderCell>
1583
+ <Popup
1584
+ menu={true}
1585
+ position="bottom left"
1586
+ flowing={true}
1587
+ basic={true}
1588
+ on="click"
1589
+ popper={{
1590
+ className: 'dropdown-popup',
1591
+ }}
1592
+ trigger={
1593
+ <Icon
1594
+ name={configurationSVG}
1595
+ size="24px"
1596
+ color="#826a6a"
1597
+ className="dropdown-popup-trigger configuration-svg"
1598
+ />
1599
+ }
1600
+ >
1601
+ <Menu vertical borderless fluid>
1602
+ <Menu.Header
1603
+ content={this.props.intl.formatMessage(
1604
+ messages.rearrangeBy,
1605
+ )}
1606
+ />
1607
+ {map(
1608
+ [
1609
+ 'id',
1610
+ 'sortable_title',
1611
+ 'EffectiveDate',
1612
+ 'CreationDate',
1613
+ 'ModificationDate',
1614
+ 'portal_type',
1615
+ ],
1616
+ (index) => (
1617
+ <Dropdown
1618
+ key={index}
1619
+ item
1620
+ simple
1621
+ className={`sort_${index} icon-align`}
1622
+ icon={
1626
1623
  <Icon
1627
- name={sortUpSVG}
1624
+ name={downKeySVG}
1628
1625
  size="24px"
1629
- />{' '}
1630
- <FormattedMessage
1631
- id="Descending"
1632
- defaultMessage="Descending"
1626
+ className="left"
1633
1627
  />
1634
- </Dropdown.Item>
1635
- </Dropdown.Menu>
1636
- </Dropdown>
1637
- ),
1638
- )}
1639
- </Menu>
1640
- </Popup>
1641
- </Table.HeaderCell>
1642
- <Table.HeaderCell>
1643
- <Popup
1644
- menu={true}
1645
- position="bottom left"
1646
- flowing={true}
1647
- basic={true}
1648
- on="click"
1649
- popper={{
1650
- className: 'dropdown-popup',
1651
- }}
1652
- trigger={
1653
- <Icon
1654
- name={
1655
- this.state.selected.length === 0
1656
- ? checkboxUncheckedSVG
1657
- : this.state.selected.length ===
1658
- this.state.items.length
1659
- ? checkboxCheckedSVG
1660
- : checkboxIndeterminateSVG
1661
- }
1662
- color={
1663
- this.state.selected.length > 0
1664
- ? '#007eb1'
1665
- : '#826a6a'
1666
- }
1667
- className="dropdown-popup-trigger"
1668
- size="24px"
1669
- />
1670
- }
1671
- >
1672
- <Menu vertical borderless fluid>
1673
- <Menu.Header
1674
- content={this.props.intl.formatMessage(
1675
- messages.select,
1628
+ }
1629
+ text={this.props.intl.formatMessage(
1630
+ {
1631
+ id: Indexes[index].label,
1632
+ },
1633
+ )}
1634
+ >
1635
+ <Dropdown.Menu>
1636
+ <Dropdown.Item
1637
+ onClick={this.onSortItems}
1638
+ value={`${Indexes[index].sort_on}|ascending`}
1639
+ className={`sort_${Indexes[index].sort_on}_ascending icon-align`}
1640
+ >
1641
+ <Icon
1642
+ name={sortDownSVG}
1643
+ size="24px"
1644
+ />{' '}
1645
+ <FormattedMessage
1646
+ id="Ascending"
1647
+ defaultMessage="Ascending"
1648
+ />
1649
+ </Dropdown.Item>
1650
+ <Dropdown.Item
1651
+ onClick={this.onSortItems}
1652
+ value={`${Indexes[index].sort_on}|descending`}
1653
+ className={`sort_${Indexes[index].sort_on}_descending icon-align`}
1654
+ >
1655
+ <Icon
1656
+ name={sortUpSVG}
1657
+ size="24px"
1658
+ />{' '}
1659
+ <FormattedMessage
1660
+ id="Descending"
1661
+ defaultMessage="Descending"
1662
+ />
1663
+ </Dropdown.Item>
1664
+ </Dropdown.Menu>
1665
+ </Dropdown>
1666
+ ),
1676
1667
  )}
1677
- />
1678
- <Menu.Item onClick={this.onSelectAll}>
1668
+ </Menu>
1669
+ </Popup>
1670
+ </Table.HeaderCell>
1671
+ <Table.HeaderCell>
1672
+ <Popup
1673
+ menu={true}
1674
+ position="bottom left"
1675
+ flowing={true}
1676
+ basic={true}
1677
+ on="click"
1678
+ popper={{
1679
+ className: 'dropdown-popup',
1680
+ }}
1681
+ trigger={
1679
1682
  <Icon
1680
- name={checkboxCheckedSVG}
1681
- color="#007eb1"
1683
+ name={
1684
+ this.state.selected.length === 0
1685
+ ? checkboxUncheckedSVG
1686
+ : this.state.selected.length ===
1687
+ this.state.items.length
1688
+ ? checkboxCheckedSVG
1689
+ : checkboxIndeterminateSVG
1690
+ }
1691
+ color={
1692
+ this.state.selected.length > 0
1693
+ ? '#007eb1'
1694
+ : '#826a6a'
1695
+ }
1696
+ className="dropdown-popup-trigger"
1682
1697
  size="24px"
1683
- />{' '}
1684
- <FormattedMessage
1685
- id="All"
1686
- defaultMessage="All"
1687
1698
  />
1688
- </Menu.Item>
1689
- <Menu.Item onClick={this.onSelectNone}>
1690
- <Icon
1691
- name={checkboxUncheckedSVG}
1692
- size="24px"
1693
- />{' '}
1694
- <FormattedMessage
1695
- id="None"
1696
- defaultMessage="None"
1699
+ }
1700
+ >
1701
+ <Menu vertical borderless fluid>
1702
+ <Menu.Header
1703
+ content={this.props.intl.formatMessage(
1704
+ messages.select,
1705
+ )}
1697
1706
  />
1698
- </Menu.Item>
1699
- <Divider />
1700
- <Menu.Header
1701
- content={this.props.intl.formatMessage(
1702
- messages.selected,
1703
- {
1704
- count: this.state.selected.length,
1705
- },
1706
- )}
1707
- />
1708
- <Input
1709
- icon={<Icon name={zoomSVG} size="24px" />}
1710
- iconPosition="left"
1711
- className="item search"
1712
- placeholder={this.props.intl.formatMessage(
1713
- messages.filter,
1714
- )}
1715
- value={
1716
- this.state.selectedMenuFilter || ''
1717
- }
1718
- onChange={this.onChangeSelected}
1719
- onClick={(e) => {
1720
- e.preventDefault();
1721
- e.stopPropagation();
1722
- }}
1723
- />
1724
- <Menu.Menu scrolling>
1725
- {map(filteredItems, (item) => (
1726
- <Menu.Item
1727
- key={item}
1728
- value={item}
1729
- onClick={this.onDeselect}
1730
- >
1731
- <Icon
1732
- name={deleteSVG}
1733
- color="#e40166"
1734
- size="24px"
1735
- />{' '}
1736
- {this.getFieldById(item, 'title')}
1737
- </Menu.Item>
1738
- ))}
1739
- </Menu.Menu>
1740
- </Menu>
1741
- </Popup>
1742
- </Table.HeaderCell>
1743
- <Table.HeaderCell
1744
- width={Math.ceil(
1745
- 16 / this.state.index.selectedCount,
1707
+ <Menu.Item onClick={this.onSelectAll}>
1708
+ <Icon
1709
+ name={checkboxCheckedSVG}
1710
+ color="#007eb1"
1711
+ size="24px"
1712
+ />{' '}
1713
+ <FormattedMessage
1714
+ id="All"
1715
+ defaultMessage="All"
1716
+ />
1717
+ </Menu.Item>
1718
+ <Menu.Item onClick={this.onSelectNone}>
1719
+ <Icon
1720
+ name={checkboxUncheckedSVG}
1721
+ size="24px"
1722
+ />{' '}
1723
+ <FormattedMessage
1724
+ id="None"
1725
+ defaultMessage="None"
1726
+ />
1727
+ </Menu.Item>
1728
+ <Divider />
1729
+ <Menu.Header
1730
+ content={this.props.intl.formatMessage(
1731
+ messages.selected,
1732
+ {
1733
+ count: this.state.selected.length,
1734
+ },
1735
+ )}
1736
+ />
1737
+ <Input
1738
+ icon={
1739
+ <Icon name={zoomSVG} size="24px" />
1740
+ }
1741
+ iconPosition="left"
1742
+ className="item search"
1743
+ placeholder={this.props.intl.formatMessage(
1744
+ messages.filter,
1745
+ )}
1746
+ value={
1747
+ this.state.selectedMenuFilter || ''
1748
+ }
1749
+ onChange={this.onChangeSelected}
1750
+ onClick={(e) => {
1751
+ e.preventDefault();
1752
+ e.stopPropagation();
1753
+ }}
1754
+ />
1755
+ <Menu.Menu scrolling>
1756
+ {map(filteredItems, (item) => (
1757
+ <Menu.Item
1758
+ key={item}
1759
+ value={item}
1760
+ onClick={this.onDeselect}
1761
+ >
1762
+ <Icon
1763
+ name={deleteSVG}
1764
+ color="#e40166"
1765
+ size="24px"
1766
+ />{' '}
1767
+ {this.getFieldById(item, 'title')}
1768
+ </Menu.Item>
1769
+ ))}
1770
+ </Menu.Menu>
1771
+ </Menu>
1772
+ </Popup>
1773
+ </Table.HeaderCell>
1774
+ <Table.HeaderCell
1775
+ width={Math.ceil(
1776
+ 16 / this.state.index.selectedCount,
1777
+ )}
1778
+ >
1779
+ <FormattedMessage
1780
+ id="Title"
1781
+ defaultMessage="Title"
1782
+ />
1783
+ </Table.HeaderCell>
1784
+ {map(
1785
+ this.state.index.order,
1786
+ (index, order) =>
1787
+ this.state.index.values[index].selected && (
1788
+ <ContentsIndexHeader
1789
+ key={index}
1790
+ width={Math.ceil(
1791
+ 16 / this.state.index.selectedCount,
1792
+ )}
1793
+ label={
1794
+ this.state.index.values[index].label
1795
+ }
1796
+ order={order}
1797
+ onOrderIndex={this.onOrderIndex}
1798
+ />
1799
+ ),
1746
1800
  )}
1747
- >
1748
- <FormattedMessage
1749
- id="Title"
1750
- defaultMessage="Title"
1751
- />
1752
- </Table.HeaderCell>
1753
- {map(
1754
- this.state.index.order,
1755
- (index, order) =>
1756
- this.state.index.values[index].selected && (
1757
- <ContentsIndexHeader
1758
- key={index}
1759
- width={Math.ceil(
1760
- 16 / this.state.index.selectedCount,
1761
- )}
1762
- label={
1763
- this.state.index.values[index].label
1764
- }
1765
- order={order}
1766
- onOrderIndex={this.onOrderIndex}
1767
- />
1768
- ),
1769
- )}
1770
- <Table.HeaderCell textAlign="right">
1771
- <FormattedMessage
1772
- id="Actions"
1773
- defaultMessage="Actions"
1801
+ <Table.HeaderCell textAlign="right">
1802
+ <FormattedMessage
1803
+ id="Actions"
1804
+ defaultMessage="Actions"
1805
+ />
1806
+ </Table.HeaderCell>
1807
+ </Table.Row>
1808
+ </Table.Header>
1809
+ <Table.Body>
1810
+ {this.state.items.map((item, order) => (
1811
+ <ContentsItem
1812
+ key={item['@id']}
1813
+ item={item}
1814
+ order={order}
1815
+ selected={
1816
+ indexOf(
1817
+ this.state.selected,
1818
+ item['@id'],
1819
+ ) !== -1
1820
+ }
1821
+ onClick={this.onSelect}
1822
+ indexes={filter(
1823
+ map(this.state.index.order, (index) => ({
1824
+ id: index,
1825
+ type: this.state.index.values[index].type,
1826
+ })),
1827
+ (index) =>
1828
+ this.state.index.values[index.id]
1829
+ .selected,
1830
+ )}
1831
+ onCut={this.cut}
1832
+ onCopy={this.copy}
1833
+ onDelete={this.delete}
1834
+ onOrderItem={this.onOrderItem}
1835
+ onMoveToTop={this.onMoveToTop}
1836
+ onMoveToBottom={this.onMoveToBottom}
1774
1837
  />
1775
- </Table.HeaderCell>
1776
- </Table.Row>
1777
- </Table.Header>
1778
- <Table.Body>
1779
- {this.state.items.map((item, order) => (
1780
- <ContentsItem
1781
- key={item['@id']}
1782
- item={item}
1783
- order={order}
1784
- selected={
1785
- indexOf(this.state.selected, item['@id']) !==
1786
- -1
1787
- }
1788
- onClick={this.onSelect}
1789
- indexes={filter(
1790
- map(this.state.index.order, (index) => ({
1791
- id: index,
1792
- type: this.state.index.values[index].type,
1793
- })),
1794
- (index) =>
1795
- this.state.index.values[index.id].selected,
1796
- )}
1797
- onCut={this.cut}
1798
- onCopy={this.copy}
1799
- onDelete={this.delete}
1800
- onOrderItem={this.onOrderItem}
1801
- onMoveToTop={this.onMoveToTop}
1802
- onMoveToBottom={this.onMoveToBottom}
1803
- />
1804
- ))}
1805
- </Table.Body>
1806
- </Table>
1807
- </div>
1808
-
1809
- <div className="contents-pagination">
1810
- <Pagination
1811
- current={this.state.currentPage}
1812
- total={Math.ceil(
1813
- this.props.total / this.state.pageSize,
1814
- )}
1815
- pageSize={this.state.pageSize}
1816
- pageSizes={[
1817
- 50,
1818
- this.props.intl.formatMessage(messages.all),
1819
- ]}
1820
- onChangePage={this.onChangePage}
1821
- onChangePageSize={this.onChangePageSize}
1822
- />
1823
- </div>
1824
- </Segment.Group>
1825
- </section>
1826
- </article>
1827
- </div>
1838
+ ))}
1839
+ </Table.Body>
1840
+ </Table>
1841
+ </div>
1842
+
1843
+ <div className="contents-pagination">
1844
+ <Pagination
1845
+ current={this.state.currentPage}
1846
+ total={Math.ceil(
1847
+ this.props.total / this.state.pageSize,
1848
+ )}
1849
+ pageSize={this.state.pageSize}
1850
+ pageSizes={[
1851
+ 50,
1852
+ this.props.intl.formatMessage(messages.all),
1853
+ ]}
1854
+ onChangePage={this.onChangePage}
1855
+ onChangePageSize={this.onChangePageSize}
1856
+ />
1857
+ </div>
1858
+ </Segment.Group>
1859
+ </section>
1860
+ </article>
1861
+ </div>
1862
+ </DropzoneContent>
1828
1863
  {this.state.isClient &&
1829
1864
  createPortal(
1830
1865
  <Toolbar