@plone/volto 17.0.0-alpha.26 → 17.0.0-alpha.28

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 (154) hide show
  1. package/.eslintrc +26 -3
  2. package/.yarn/install-state.gz +0 -0
  3. package/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +541 -0
  4. package/.yarn/releases/yarn-3.6.3.cjs +874 -0
  5. package/CHANGELOG.md +60 -0
  6. package/addon-registry.js +10 -1
  7. package/create-addons-loader.js +1 -1
  8. package/locales/ca/LC_MESSAGES/volto.po +57 -31
  9. package/locales/ca.json +1 -1
  10. package/locales/de/LC_MESSAGES/volto.po +58 -32
  11. package/locales/de.json +1 -1
  12. package/locales/en/LC_MESSAGES/volto.po +57 -31
  13. package/locales/en.json +1 -1
  14. package/locales/es/LC_MESSAGES/volto.po +65 -39
  15. package/locales/es.json +1 -1
  16. package/locales/eu/LC_MESSAGES/volto.po +57 -31
  17. package/locales/eu.json +1 -1
  18. package/locales/fi/LC_MESSAGES/volto.po +57 -31
  19. package/locales/fi.json +1 -1
  20. package/locales/fr/LC_MESSAGES/volto.po +57 -31
  21. package/locales/fr.json +1 -1
  22. package/locales/it/LC_MESSAGES/volto.po +57 -31
  23. package/locales/it.json +1 -1
  24. package/locales/ja/LC_MESSAGES/volto.po +57 -31
  25. package/locales/ja.json +1 -1
  26. package/locales/nl/LC_MESSAGES/volto.po +57 -31
  27. package/locales/nl.json +1 -1
  28. package/locales/pt/LC_MESSAGES/volto.po +57 -31
  29. package/locales/pt.json +1 -1
  30. package/locales/pt_BR/LC_MESSAGES/volto.po +57 -31
  31. package/locales/pt_BR.json +1 -1
  32. package/locales/ro/LC_MESSAGES/volto.po +57 -31
  33. package/locales/ro.json +1 -1
  34. package/locales/volto.pot +62 -32
  35. package/locales/zh_CN/LC_MESSAGES/volto.po +57 -31
  36. package/locales/zh_CN.json +1 -1
  37. package/package.json +35 -26
  38. package/packages/volto-slate/package.json +1 -1
  39. package/packages/volto-slate/src/blocks/Text/TextBlockView.jsx +2 -1
  40. package/packages/volto-slate/src/blocks/Text/index.js +0 -5
  41. package/packages/volto-slate/src/editor/plugins/Link/render.jsx +5 -6
  42. package/packages/volto-slate/src/editor/render.jsx +11 -1
  43. package/razzle.config.js +4 -6
  44. package/src/components/index.js +194 -194
  45. package/src/components/manage/Add/Add.jsx +7 -8
  46. package/src/components/manage/Blocks/Block/Settings.test.jsx +17 -15
  47. package/src/components/manage/Blocks/HTML/Edit.jsx +8 -8
  48. package/src/components/manage/Blocks/HeroImageLeft/Edit.jsx +30 -25
  49. package/src/components/manage/Blocks/Listing/ListingBody.jsx +6 -4
  50. package/src/components/manage/Blocks/Maps/Edit.test.jsx +1 -2
  51. package/src/components/manage/Blocks/Maps/View.test.jsx +1 -2
  52. package/src/components/manage/Blocks/Search/components/Facets.jsx +2 -3
  53. package/src/components/manage/Blocks/Search/components/FilterList.jsx +4 -6
  54. package/src/components/manage/Blocks/Search/components/SelectFacet.jsx +2 -9
  55. package/src/components/manage/Blocks/Search/hocs/withQueryString.jsx +3 -0
  56. package/src/components/manage/Blocks/Search/hocs/withSearch.jsx +8 -6
  57. package/src/components/manage/Blocks/Search/schema.js +13 -13
  58. package/src/components/manage/Blocks/Table/Cell.jsx +2 -3
  59. package/src/components/manage/Blocks/Text/Edit.jsx +2 -3
  60. package/src/components/manage/Blocks/Title/View.jsx +4 -37
  61. package/src/components/manage/Blocks/ToC/View.jsx +1 -0
  62. package/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx +3 -2
  63. package/src/components/manage/Blocks/ToC/variations/HorizontalMenu.jsx +3 -2
  64. package/src/components/manage/Contents/Contents.jsx +252 -114
  65. package/src/components/manage/Contents/ContentsPropertiesModal.jsx +90 -154
  66. package/src/components/manage/Contents/ContentsRenameModal.jsx +88 -139
  67. package/src/components/manage/Contents/ContentsRenameModal.stories.jsx +61 -0
  68. package/src/components/manage/Contents/ContentsTagsModal.jsx +83 -130
  69. package/src/components/manage/Contents/ContentsTagsModal.stories.jsx +68 -0
  70. package/src/components/manage/Contents/ContentsUploadModal.jsx +1 -2
  71. package/src/components/manage/Contents/ContentsWorkflowModal.jsx +87 -154
  72. package/src/components/manage/Controlpanels/Aliases.jsx +4 -12
  73. package/src/components/manage/Controlpanels/Rules/AddRule.jsx +2 -9
  74. package/src/components/manage/Controlpanels/UndoControlpanel.jsx +6 -9
  75. package/src/components/manage/Form/BlockDataForm.test.jsx +17 -15
  76. package/src/components/manage/Form/Form.jsx +2 -3
  77. package/src/components/manage/Form/InlineForm.test.jsx +16 -14
  78. package/src/components/manage/LockingToastsFactory/LockingToastsFactory.jsx +1 -2
  79. package/src/components/manage/Sharing/Sharing.jsx +7 -0
  80. package/src/components/manage/Sidebar/Sidebar.jsx +139 -220
  81. package/src/components/manage/Toolbar/More.jsx +12 -12
  82. package/src/components/manage/Toolbar/PersonalTools.jsx +97 -155
  83. package/src/components/manage/Toolbar/Toolbar.jsx +2 -2
  84. package/src/components/manage/UniversalLink/UniversalLink.test.jsx +2 -1
  85. package/src/components/manage/Widgets/AlignWidget.jsx +2 -4
  86. package/src/components/manage/Widgets/ColorPickerWidget.test.jsx +9 -7
  87. package/src/components/manage/Widgets/DatetimeWidget.jsx +2 -8
  88. package/src/components/manage/Widgets/IdWidget.jsx +1 -2
  89. package/src/components/manage/Widgets/ObjectBrowserWidget.jsx +2 -9
  90. package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.jsx +2 -9
  91. package/src/components/manage/Widgets/RecurrenceWidget/WeekdayOfTheMonthIndexField.jsx +4 -4
  92. package/src/components/manage/Widgets/SchemaWidget.jsx +6 -9
  93. package/src/components/manage/Widgets/WysiwygWidget.jsx +2 -9
  94. package/src/components/theme/Comments/Comments.jsx +3 -10
  95. package/src/components/theme/ContentMetadataTags/ContentMetadataTags.jsx +4 -0
  96. package/src/components/theme/Login/Login.jsx +1 -2
  97. package/src/components/theme/PasswordReset/PasswordReset.jsx +1 -2
  98. package/src/components/theme/PreviewImage/PreviewImage.jsx +10 -5
  99. package/src/components/theme/PreviewImage/PreviewImage.test.js +17 -0
  100. package/src/components/theme/Register/Register.jsx +2 -4
  101. package/src/components/theme/TsTest/TsTest.test.tsx +11 -0
  102. package/src/components/theme/TsTest/TsTest.tsx +15 -0
  103. package/src/components/theme/View/AlbumView.jsx +3 -2
  104. package/src/components/theme/Widgets/ImageWidget.stories.jsx +1 -2
  105. package/src/config/Loadables.jsx +1 -1
  106. package/src/config/RichTextEditor/Blocks.jsx +2 -3
  107. package/src/config/RichTextEditor/Plugins.jsx +2 -3
  108. package/src/config/RichTextEditor/ToHTML.jsx +12 -10
  109. package/src/config/RichTextEditor/index.js +2 -3
  110. package/src/config/Views.jsx +5 -5
  111. package/src/express-middleware/ok.js +1 -1
  112. package/src/helpers/Blocks/Blocks.js +4 -6
  113. package/src/helpers/Blocks/Blocks.test.js +35 -35
  114. package/src/helpers/Extensions/withBlockSchemaEnhancer.js +48 -50
  115. package/src/helpers/FormValidation/FormValidation.js +7 -6
  116. package/src/helpers/Html/Html.jsx +2 -8
  117. package/src/helpers/Loadable/__mocks__/Loadable.js +18 -18
  118. package/src/helpers/MessageLabels/MessageLabels.js +2 -3
  119. package/src/helpers/Utils/UseDetectClickOutside.stories.jsx +2 -3
  120. package/src/helpers/Utils/Utils.js +10 -0
  121. package/src/helpers/Utils/Utils.test.js +13 -0
  122. package/src/helpers/index.js +1 -0
  123. package/src/hooks/index.js +1 -1
  124. package/src/middleware/api.js +194 -190
  125. package/src/middleware/blacklistRoutes.js +25 -22
  126. package/src/middleware/storeProtectLoadUtils.js +61 -62
  127. package/src/middleware/storeProtectLoadUtils.test.js +47 -43
  128. package/src/reducers/content/content.test.js +4 -4
  129. package/src/reducers/navigation/navigation.js +5 -5
  130. package/src/reducers/navigation/navigation.test.js +30 -0
  131. package/src/registry.js +2 -2
  132. package/src/storybook.jsx +24 -38
  133. package/theme/themes/pastanaga/collections/menu.overrides +3 -2
  134. package/theme/themes/pastanaga/elements/container.overrides +5 -2
  135. package/theme/themes/pastanaga/elements/input.overrides +1 -1
  136. package/theme/themes/pastanaga/elements/step.overrides +2 -1
  137. package/theme/themes/pastanaga/extras/blocks.less +20 -14
  138. package/theme/themes/pastanaga/extras/color-picker-widget.less +1 -1
  139. package/theme/themes/pastanaga/extras/contents.less +5 -1
  140. package/theme/themes/pastanaga/extras/draftjs.less +4 -4
  141. package/theme/themes/pastanaga/extras/grid.less +5 -4
  142. package/theme/themes/pastanaga/extras/main.less +6 -6
  143. package/theme/themes/pastanaga/extras/react-dates-overrides.less +4 -2
  144. package/theme/themes/pastanaga/extras/search.less +2 -2
  145. package/theme/themes/pastanaga/extras/sidebar.less +5 -4
  146. package/theme/themes/pastanaga/extras/time-picker-overrides.less +5 -3
  147. package/theme/themes/pastanaga/extras/toolbar.less +6 -2
  148. package/theme/themes/pastanaga/extras/userscontrolpanel.less +17 -9
  149. package/theme/themes/pastanaga/extras/widgets.less +1 -1
  150. package/theme/themes/pastanaga/modules/rating.overrides +2 -1
  151. package/theme/themes/pastanaga-cms-ui/elements/container.overrides +2 -1
  152. package/theme/themes/pastanaga-cms-ui/extras/cms-ui.elements.container.less +6 -2
  153. package/theme/themes/pastanaga-cms-ui/extras/cms-ui.site.less +2 -2
  154. package/tsconfig.json +33 -0
@@ -8,23 +8,25 @@ import { Provider } from 'react-intl-redux';
8
8
 
9
9
  const mockStore = configureStore();
10
10
 
11
- const withStateManagement = (Component) => ({ ...props }) => {
12
- const [formData, onChangeFormData] = React.useState(props.formData || {});
13
- const onChangeField = (id, value) => {
14
- onChangeFormData({ ...formData, [id]: value });
15
- };
11
+ const withStateManagement =
12
+ (Component) =>
13
+ ({ ...props }) => {
14
+ const [formData, onChangeFormData] = React.useState(props.formData || {});
15
+ const onChangeField = (id, value) => {
16
+ onChangeFormData({ ...formData, [id]: value });
17
+ };
16
18
 
17
- // NOTE: onChangeBlock here is not "really" implemented
19
+ // NOTE: onChangeBlock here is not "really" implemented
18
20
 
19
- return (
20
- <Component
21
- {...props}
22
- onChangeField={onChangeField}
23
- onChangeBlock={(block, data) => onChangeFormData(data)}
24
- formData={formData}
25
- />
26
- );
27
- };
21
+ return (
22
+ <Component
23
+ {...props}
24
+ onChangeField={onChangeField}
25
+ onChangeBlock={(block, data) => onChangeFormData(data)}
26
+ formData={formData}
27
+ />
28
+ );
29
+ };
28
30
 
29
31
  beforeAll(() => {
30
32
  config.widgets = {
@@ -229,9 +229,8 @@ class Form extends Component {
229
229
  let activeIndex = 0;
230
230
 
231
231
  if (requestError && prevProps.requestError !== requestError) {
232
- errors = FormValidation.giveServerErrorsToCorrespondingFields(
233
- requestError,
234
- );
232
+ errors =
233
+ FormValidation.giveServerErrorsToCorrespondingFields(requestError);
235
234
  activeIndex = FormValidation.showFirstTabWithErrors({
236
235
  errors,
237
236
  schema: this.props.schema,
@@ -19,22 +19,24 @@ function NewBaseWidget(name) {
19
19
  );
20
20
  }
21
21
 
22
- const withStateManagement = (Component) => ({ ...props }) => {
23
- const [formData, onChangeFormData] = React.useState(props.formData || {});
24
- const onChangeField = (id, value) => {
25
- onChangeFormData({ ...formData, [id]: value });
22
+ const withStateManagement =
23
+ (Component) =>
24
+ ({ ...props }) => {
25
+ const [formData, onChangeFormData] = React.useState(props.formData || {});
26
+ const onChangeField = (id, value) => {
27
+ onChangeFormData({ ...formData, [id]: value });
28
+ };
29
+
30
+ return (
31
+ <Component
32
+ {...props}
33
+ onChangeField={onChangeField}
34
+ onChangeFormData={onChangeFormData}
35
+ formData={formData}
36
+ />
37
+ );
26
38
  };
27
39
 
28
- return (
29
- <Component
30
- {...props}
31
- onChangeField={onChangeField}
32
- onChangeFormData={onChangeFormData}
33
- formData={formData}
34
- />
35
- );
36
- };
37
-
38
40
  beforeAll(() => {
39
41
  config.widgets.default = NewBaseWidget('default');
40
42
  config.widgets.type.boolean = NewBaseWidget('boolean');
@@ -12,8 +12,7 @@ const messages = defineMessages({
12
12
  defaultMessage: 'This item was locked by {creator} on {date}',
13
13
  },
14
14
  unlockItem: {
15
- id:
16
- 'If you are certain this user has abandoned the object, you may unlock the object. You will then be able to edit it.',
15
+ id: 'If you are certain this user has abandoned the object, you may unlock the object. You will then be able to edit it.',
17
16
  defaultMessage:
18
17
  'If you are certain this user has abandoned the object, you may unlock the object. You will then be able to edit it.',
19
18
  },
@@ -39,6 +39,10 @@ const messages = defineMessages({
39
39
  id: 'Search for user or group',
40
40
  defaultMessage: 'Search for user or group',
41
41
  },
42
+ search: {
43
+ id: 'Search',
44
+ defaultMessage: 'Search',
45
+ },
42
46
  inherit: {
43
47
  id: 'Inherit permissions from higher levels',
44
48
  defaultMessage: 'Inherit permissions from higher levels',
@@ -343,6 +347,9 @@ class SharingComponent extends Component {
343
347
  icon: 'search',
344
348
  loading: isLoading,
345
349
  disabled: isLoading,
350
+ 'aria-label': this.props.intl.formatMessage(
351
+ messages.search,
352
+ ),
346
353
  }}
347
354
  placeholder={this.props.intl.formatMessage(
348
355
  messages.searchForUserOrGroup,
@@ -1,15 +1,10 @@
1
- /**
2
- * Sidebar component.
3
- * @module components/manage/Sidebar/Sidebar
4
- */
5
-
6
- import React, { Component, Fragment } from 'react';
1
+ import React, { useState, Fragment, useCallback } from 'react';
7
2
  import PropTypes from 'prop-types';
8
3
  import { Button, Tab } from 'semantic-ui-react';
9
- import { connect } from 'react-redux';
4
+ import { useDispatch, useSelector } from 'react-redux';
10
5
  import { compose } from 'redux';
11
6
  import { withCookies } from 'react-cookie';
12
- import { defineMessages, injectIntl } from 'react-intl';
7
+ import { defineMessages, useIntl } from 'react-intl';
13
8
  import cx from 'classnames';
14
9
  import { BodyClass, getCookieOptions } from '@plone/volto/helpers';
15
10
  import { Icon } from '@plone/volto/components';
@@ -41,101 +36,45 @@ const messages = defineMessages({
41
36
  },
42
37
  });
43
38
 
44
- /**
45
- * Sidebar container class.
46
- * @class Sidebar
47
- * @extends Component
48
- */
49
- class Sidebar extends Component {
50
- /**
51
- * Property types.
52
- * @property {Object} propTypes Property types.
53
- * @static
54
- */
55
- static propTypes = {
56
- documentTab: PropTypes.bool,
57
- blockTab: PropTypes.bool,
58
- settingsTab: PropTypes.bool,
59
- };
60
-
61
- /**
62
- * Default properties.
63
- * @property {Object} defaultProps Default properties.
64
- * @static
65
- */
66
- static defaultProps = {
67
- documentTab: true,
68
- blockTab: true,
69
- settingsTab: false,
70
- };
39
+ const Sidebar = (props) => {
40
+ const dispatch = useDispatch();
41
+ const intl = useIntl();
42
+ const { cookies, content, documentTab, blockTab, settingsTab } = props;
43
+ const [expanded, setExpanded] = useState(
44
+ cookies.get('sidebar_expanded') !== 'false',
45
+ );
46
+ const [size] = useState(0);
47
+ const [showFull, setshowFull] = useState(true);
71
48
 
72
- /**
73
- * Constructor
74
- * @method constructor
75
- * @param {Object} props Component properties
76
- * @constructs Sidebar
77
- */
78
- constructor(props) {
79
- super(props);
80
- const { cookies } = props;
81
- this.onToggleExpanded = this.onToggleExpanded.bind(this);
82
- this.onToggleFullSize = this.onToggleFullSize.bind(this);
83
- this.onTabChange = this.onTabChange.bind(this);
84
- this.state = {
85
- expanded: cookies.get('sidebar_expanded') !== 'false',
86
- size: 0,
87
- showFull: true,
88
- showFullToolbarExpanded: true,
89
- };
90
- }
49
+ const tab = useSelector((state) => state.sidebar.tab);
50
+ const toolbarExpanded = useSelector((state) => state.toolbar.expanded);
51
+ const type = useSelector((state) => state.schema?.schema?.title);
91
52
 
92
- /**
93
- * On toggle expanded handler
94
- * also reset sidebar since this has mimized it
95
- * @method onToggleExpanded
96
- * @returns {undefined}
97
- */
98
- onToggleExpanded() {
99
- const { cookies } = this.props;
100
- cookies.set('sidebar_expanded', !this.state.expanded, getCookieOptions());
101
- this.setState({
102
- expanded: !this.state.expanded,
103
- });
104
- this.resetFullSizeSidebar();
105
- }
53
+ const onToggleExpanded = () => {
54
+ cookies.set('sidebar_expanded', !expanded, getCookieOptions());
55
+ setExpanded(!expanded);
56
+ resetFullSizeSidebar();
57
+ };
106
58
 
107
- /**
108
- * Remove fullsize classes
109
- * Reset state
110
- */
111
- resetFullSizeSidebar() {
112
- if (!this.state.expanded) {
59
+ const resetFullSizeSidebar = useCallback(() => {
60
+ if (!expanded) {
113
61
  const currentResizer = document.querySelector('#sidebar');
114
- const sidebarContainer = currentResizer.getElementsByClassName(
115
- 'sidebar-container',
116
- )[0];
62
+ const sidebarContainer =
63
+ currentResizer.getElementsByClassName('sidebar-container')[0];
117
64
  sidebarContainer.classList.remove('full-size');
118
65
  sidebarContainer.classList.remove('no-toolbar');
119
-
120
- this.setState({
121
- showFull: true,
122
- });
66
+ setshowFull(true);
123
67
  }
124
- }
68
+ }, [expanded]);
125
69
 
126
- /**
127
- * Set width of sibar to 100% minus the width of the toolbar or reset to
128
- * initial size, by adding css classes
129
- */
130
- onToggleFullSize() {
70
+ const onToggleFullSize = useCallback(() => {
131
71
  const currentResizer = document.querySelector('#sidebar');
132
- const sidebarContainer = currentResizer.getElementsByClassName(
133
- 'sidebar-container',
134
- )[0];
72
+ const sidebarContainer =
73
+ currentResizer.getElementsByClassName('sidebar-container')[0];
135
74
 
136
- if (this.state.showFull) {
75
+ if (showFull) {
137
76
  sidebarContainer.classList.add('full-size');
138
- if (!this.props.toolbarExpanded) {
77
+ if (!toolbarExpanded) {
139
78
  sidebarContainer.classList.add('no-toolbar');
140
79
  } else {
141
80
  sidebarContainer.classList.remove('no-toolbar');
@@ -144,139 +83,119 @@ class Sidebar extends Component {
144
83
  sidebarContainer.classList.remove('full-size');
145
84
  sidebarContainer.classList.remove('no-toolbar');
146
85
  }
86
+ setshowFull(!showFull);
87
+ }, [showFull, toolbarExpanded]);
147
88
 
148
- this.setState((prevState) => ({
149
- showFull: !prevState.showFull,
150
- }));
151
- }
152
-
153
- /**
154
- * On tab change
155
- * @method onTabChange
156
- * @param {Object} event Event object
157
- * @param {Object} data Data object
158
- * @returns {undefined}
159
- */
160
- onTabChange(event, data) {
89
+ const onTabChange = (event, data) => {
161
90
  event.nativeEvent.stopImmediatePropagation();
162
- this.props.setSidebarTab(data.activeIndex);
163
- }
164
-
165
- /**
166
- * Render method.
167
- * @method render
168
- * @returns {string} Markup for the component.
169
- */
170
- render() {
171
- const { expanded } = this.state;
91
+ dispatch(setSidebarTab(data.activeIndex));
92
+ };
172
93
 
173
- return (
174
- <Fragment>
175
- <BodyClass
176
- className={expanded ? 'has-sidebar' : 'has-sidebar-collapsed'}
94
+ return (
95
+ <Fragment>
96
+ <BodyClass
97
+ className={expanded ? 'has-sidebar' : 'has-sidebar-collapsed'}
98
+ />
99
+ <div
100
+ className={cx('sidebar-container', { collapsed: !expanded })}
101
+ style={size > 0 ? { width: size } : null}
102
+ >
103
+ <Button
104
+ aria-label={
105
+ expanded
106
+ ? intl.formatMessage(messages.shrinkSidebar)
107
+ : intl.formatMessage(messages.expandSidebar)
108
+ }
109
+ className={
110
+ content && content.review_state
111
+ ? `${content.review_state} trigger`
112
+ : 'trigger'
113
+ }
114
+ onClick={onToggleExpanded}
177
115
  />
178
- <div
179
- className={cx('sidebar-container', { collapsed: !expanded })}
180
- style={this.state.size > 0 ? { width: this.state.size } : null}
116
+ <Button
117
+ className="full-size-sidenav-btn"
118
+ onClick={onToggleFullSize}
119
+ aria-label="full-screen-sidenav"
181
120
  >
182
- <Button
183
- aria-label={
184
- expanded
185
- ? this.props.intl.formatMessage(messages.shrinkSidebar)
186
- : this.props.intl.formatMessage(messages.expandSidebar)
187
- }
188
- className={
189
- this.props.content && this.props.content.review_state
190
- ? `${this.props.content.review_state} trigger`
191
- : 'trigger'
192
- }
193
- onClick={this.onToggleExpanded}
121
+ <Icon
122
+ className="full-size-icon"
123
+ name={showFull ? expandSVG : collapseSVG}
194
124
  />
195
- <Button
196
- className="full-size-sidenav-btn"
197
- onClick={this.onToggleFullSize}
198
- aria-label="full-screen-sidenav"
199
- >
200
- <Icon
201
- className="full-size-icon"
202
- name={this.state.showFull ? expandSVG : collapseSVG}
203
- />
204
- </Button>
205
- <Tab
206
- menu={{
207
- secondary: true,
208
- pointing: true,
209
- attached: true,
210
- tabular: true,
211
- className: 'formtabs',
212
- }}
213
- className="tabs-wrapper"
214
- renderActiveOnly={false}
215
- activeIndex={this.props.tab}
216
- onTabChange={this.onTabChange}
217
- panes={[
218
- !!this.props.documentTab && {
219
- menuItem:
220
- this.props.type ||
221
- this.props.intl.formatMessage(messages.document),
222
- pane: (
223
- <Tab.Pane
224
- key="metadata"
225
- className="tab-wrapper"
226
- id="sidebar-metadata"
125
+ </Button>
126
+ <Tab
127
+ menu={{
128
+ secondary: true,
129
+ pointing: true,
130
+ attached: true,
131
+ tabular: true,
132
+ className: 'formtabs',
133
+ }}
134
+ className="tabs-wrapper"
135
+ renderActiveOnly={false}
136
+ activeIndex={tab}
137
+ onTabChange={onTabChange}
138
+ panes={[
139
+ !!documentTab && {
140
+ menuItem: type || intl.formatMessage(messages.document),
141
+ pane: (
142
+ <Tab.Pane
143
+ key="metadata"
144
+ className="tab-wrapper"
145
+ id="sidebar-metadata"
146
+ />
147
+ ),
148
+ },
149
+ !!blockTab && {
150
+ menuItem: intl.formatMessage(messages.block),
151
+ pane: (
152
+ <Tab.Pane
153
+ key="properties"
154
+ className="tab-wrapper"
155
+ id="sidebar-properties"
156
+ >
157
+ <Icon
158
+ className="tab-forbidden"
159
+ name={forbiddenSVG}
160
+ size="48px"
227
161
  />
228
- ),
229
- },
230
- !!this.props.blockTab && {
231
- menuItem: this.props.intl.formatMessage(messages.block),
232
- pane: (
233
- <Tab.Pane
234
- key="properties"
235
- className="tab-wrapper"
236
- id="sidebar-properties"
237
- >
238
- <Icon
239
- className="tab-forbidden"
240
- name={forbiddenSVG}
241
- size="48px"
242
- />
243
- </Tab.Pane>
244
- ),
245
- },
246
- !!this.props.settingsTab && {
247
- menuItem: this.props.intl.formatMessage(messages.settings),
248
- pane: (
249
- <Tab.Pane
250
- key="settings"
251
- className="tab-wrapper"
252
- id="sidebar-settings"
253
- >
254
- <Icon
255
- className="tab-forbidden"
256
- name={forbiddenSVG}
257
- size="48px"
258
- />
259
- </Tab.Pane>
260
- ),
261
- },
262
- ].filter((tab) => tab)}
263
- />
264
- </div>
265
- <div className={this.state.expanded ? 'pusher expanded' : 'pusher'} />
266
- </Fragment>
267
- );
268
- }
269
- }
162
+ </Tab.Pane>
163
+ ),
164
+ },
165
+ !!settingsTab && {
166
+ menuItem: intl.formatMessage(messages.settings),
167
+ pane: (
168
+ <Tab.Pane
169
+ key="settings"
170
+ className="tab-wrapper"
171
+ id="sidebar-settings"
172
+ >
173
+ <Icon
174
+ className="tab-forbidden"
175
+ name={forbiddenSVG}
176
+ size="48px"
177
+ />
178
+ </Tab.Pane>
179
+ ),
180
+ },
181
+ ].filter((tab) => tab)}
182
+ />
183
+ </div>
184
+ <div className={expanded ? 'pusher expanded' : 'pusher'} />
185
+ </Fragment>
186
+ );
187
+ };
188
+
189
+ Sidebar.propTypes = {
190
+ documentTab: PropTypes.bool,
191
+ blockTab: PropTypes.bool,
192
+ settingsTab: PropTypes.bool,
193
+ };
194
+
195
+ Sidebar.defaultProps = {
196
+ documentTab: true,
197
+ blockTab: true,
198
+ settingsTab: false,
199
+ };
270
200
 
271
- export default compose(
272
- injectIntl,
273
- withCookies,
274
- connect(
275
- (state) => ({
276
- tab: state.sidebar.tab,
277
- toolbarExpanded: state.toolbar.expanded,
278
- type: state.schema?.schema?.title,
279
- }),
280
- { setSidebarTab },
281
- ),
282
- )(Sidebar);
201
+ export default compose(withCookies)(Sidebar);
@@ -86,8 +86,7 @@ const messages = defineMessages({
86
86
  defaultMessage: 'Changes applied',
87
87
  },
88
88
  workingCopyAppliedBy: {
89
- id:
90
- 'Made by {creator} on {date}. This is not a working copy anymore, but the main content.',
89
+ id: 'Made by {creator} on {date}. This is not a working copy anymore, but the main content.',
91
90
  defaultMessage:
92
91
  'Made by {creator} on {date}. This is not a working copy anymore, but the main content.',
93
92
  },
@@ -322,16 +321,17 @@ class More extends Component {
322
321
  </li>
323
322
  )}
324
323
  </Plug>
325
- {path !== '' && !config.settings.excludeLinksAndReferencesMenuItem && (
326
- <Plug pluggable="toolbar-more-menu-list" id="linkstoitems">
327
- <li>
328
- <Link to={`${path}/links-to-item`}>
329
- {this.props.intl.formatMessage(messages.linkstoitem)}
330
- <Icon name={rightArrowSVG} size="24px" />
331
- </Link>
332
- </li>
333
- </Plug>
334
- )}
324
+ {path !== '' &&
325
+ !config.settings.excludeLinksAndReferencesMenuItem && (
326
+ <Plug pluggable="toolbar-more-menu-list" id="linkstoitems">
327
+ <li>
328
+ <Link to={`${path}/links-to-item`}>
329
+ {this.props.intl.formatMessage(messages.linkstoitem)}
330
+ <Icon name={rightArrowSVG} size="24px" />
331
+ </Link>
332
+ </li>
333
+ </Plug>
334
+ )}
335
335
  <Plug pluggable="toolbar-more-menu-list" id="rules">
336
336
  {rulesAction && (
337
337
  <li>