@plone/volto 18.0.0-alpha.41 → 18.0.0-alpha.43

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 (187) hide show
  1. package/CHANGELOG.md +114 -0
  2. package/finalreleasechangelog.py +48 -0
  3. package/locales/ca/LC_MESSAGES/volto.po +39 -13
  4. package/locales/ca.json +1 -1
  5. package/locales/de/LC_MESSAGES/volto.po +40 -14
  6. package/locales/de.json +1 -1
  7. package/locales/en/LC_MESSAGES/volto.po +39 -13
  8. package/locales/en.json +1 -1
  9. package/locales/es/LC_MESSAGES/volto.po +40 -14
  10. package/locales/es.json +1 -1
  11. package/locales/eu/LC_MESSAGES/volto.po +40 -14
  12. package/locales/eu.json +1 -1
  13. package/locales/fi/LC_MESSAGES/volto.po +40 -14
  14. package/locales/fi.json +1 -1
  15. package/locales/fr/LC_MESSAGES/volto.po +40 -14
  16. package/locales/fr.json +1 -1
  17. package/locales/hi/LC_MESSAGES/volto.po +40 -14
  18. package/locales/hi.json +1 -1
  19. package/locales/it/LC_MESSAGES/volto.po +40 -14
  20. package/locales/it.json +1 -1
  21. package/locales/ja/LC_MESSAGES/volto.po +39 -13
  22. package/locales/ja.json +1 -1
  23. package/locales/nl/LC_MESSAGES/volto.po +39 -13
  24. package/locales/nl.json +1 -1
  25. package/locales/pt/LC_MESSAGES/volto.po +39 -13
  26. package/locales/pt.json +1 -1
  27. package/locales/pt_BR/LC_MESSAGES/volto.po +40 -14
  28. package/locales/pt_BR.json +1 -1
  29. package/locales/ro/LC_MESSAGES/volto.po +39 -13
  30. package/locales/ro.json +1 -1
  31. package/locales/volto.pot +40 -14
  32. package/locales/zh_CN/LC_MESSAGES/volto.po +40 -14
  33. package/locales/zh_CN.json +1 -1
  34. package/package.json +5 -6
  35. package/razzle.config.js +3 -3
  36. package/src/components/index.js +0 -1
  37. package/src/components/manage/Actions/Actions.stories.jsx +138 -0
  38. package/src/components/manage/Add/Add.jsx +7 -4
  39. package/src/components/manage/BlockChooser/BlockChooser.jsx +9 -1
  40. package/src/components/manage/Blocks/Block/BlocksForm.jsx +5 -0
  41. package/src/components/manage/Blocks/Block/Edit.jsx +24 -8
  42. package/src/components/manage/Blocks/Block/EditBlockWrapper.jsx +17 -1
  43. package/src/components/manage/Blocks/Block/Order/Item.jsx +8 -2
  44. package/src/components/manage/Blocks/Block/Order/Order.jsx +2 -0
  45. package/src/components/manage/Blocks/Container/Data.jsx +10 -2
  46. package/src/components/manage/Blocks/Grid/View.jsx +3 -0
  47. package/src/components/manage/Blocks/Image/ImageSidebar.jsx +10 -2
  48. package/src/components/manage/Blocks/LeadImage/Edit.jsx +74 -126
  49. package/src/components/manage/Blocks/Listing/ListingData.jsx +10 -2
  50. package/src/components/manage/Blocks/Maps/MapsSidebar.jsx +3 -1
  51. package/src/components/manage/Blocks/Search/SearchBlockEdit.jsx +2 -0
  52. package/src/components/manage/Blocks/Search/SearchBlockView.jsx +18 -2
  53. package/src/components/manage/Blocks/Search/components/SortOn.jsx +82 -55
  54. package/src/components/manage/Blocks/Search/hocs/withSearch.jsx +1 -1
  55. package/src/components/manage/Blocks/Search/widgets/SelectMetadataField.jsx +107 -176
  56. package/src/components/manage/Blocks/Teaser/Data.jsx +10 -2
  57. package/src/components/manage/Blocks/Teaser/DefaultBody.jsx +15 -8
  58. package/src/components/manage/Blocks/ToC/Edit.jsx +36 -28
  59. package/src/components/manage/Blocks/Video/Edit.jsx +105 -172
  60. package/src/components/manage/Blocks/Video/Edit.stories.jsx +57 -0
  61. package/src/components/manage/Blocks/Video/VideoSidebar.jsx +3 -1
  62. package/src/components/manage/Contents/Contents.jsx +4 -1
  63. package/src/components/manage/Contents/ContentsBreadcrumbs.stories.jsx +46 -0
  64. package/src/components/manage/Contents/ContentsPropertiesModal.jsx +85 -52
  65. package/src/components/manage/Contents/ContentsUploadModal.jsx +230 -323
  66. package/src/components/manage/Contents/ContentsUploadModal.stories.jsx +56 -0
  67. package/src/components/manage/Controlpanels/AddonsControlpanel.jsx +323 -441
  68. package/src/components/manage/Controlpanels/Aliases.jsx +452 -580
  69. package/src/components/manage/Controlpanels/Aliases.stories.jsx +74 -0
  70. package/src/components/manage/Controlpanels/ContentTypeSchema.jsx +1 -0
  71. package/src/components/manage/Controlpanels/Controlpanel.jsx +41 -2
  72. package/src/components/manage/Controlpanels/Controlpanel.test.jsx +55 -24
  73. package/src/components/manage/Controlpanels/DatabaseInformation.jsx +162 -229
  74. package/src/components/manage/Controlpanels/Groups/RenderGroups.jsx +74 -122
  75. package/src/components/manage/Controlpanels/UndoControlpanel.jsx +3 -3
  76. package/src/components/manage/Controlpanels/Users/UserGroupMembershipListing.jsx +28 -12
  77. package/src/components/manage/Controlpanels/Users/UserGroupMembershipMatrix.jsx +12 -4
  78. package/src/components/manage/Display/Display.jsx +92 -148
  79. package/src/components/manage/Display/Display.stories.jsx +46 -0
  80. package/src/components/manage/Edit/Edit.jsx +2 -4
  81. package/src/components/manage/Form/Form.jsx +85 -20
  82. package/src/components/manage/Form/InlineForm.jsx +2 -4
  83. package/src/components/manage/Form/ModalForm.jsx +1 -1
  84. package/src/components/manage/History/History.jsx +1 -1
  85. package/src/components/manage/Pluggable/Pluggable.test.js +1 -1
  86. package/src/components/manage/Preferences/ChangePassword.jsx +94 -172
  87. package/src/components/manage/Preferences/ChangePassword.stories.jsx +41 -0
  88. package/src/components/manage/Preferences/PersonalInformation.jsx +50 -115
  89. package/src/components/manage/Preferences/PersonalPreferences.jsx +46 -100
  90. package/src/components/manage/Preferences/PersonalPreferences.stories.jsx +48 -0
  91. package/src/components/manage/Toolbar/More.jsx +308 -399
  92. package/src/components/manage/Toolbar/Toolbar.jsx +1 -1
  93. package/src/components/manage/Widgets/ArrayWidget.jsx +2 -2
  94. package/src/components/manage/Widgets/DatetimeWidget.jsx +121 -175
  95. package/src/components/manage/Widgets/ImageWidget.jsx +6 -5
  96. package/src/components/manage/Widgets/RecurrenceWidget/EndField.jsx +7 -1
  97. package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.jsx +80 -31
  98. package/src/components/manage/Widgets/ReferenceWidget.jsx +134 -210
  99. package/src/components/theme/Register/Register.jsx +70 -142
  100. package/src/components/theme/Register/Register.stories.jsx +49 -0
  101. package/src/components/theme/Search/Search.jsx +13 -5
  102. package/src/components/theme/Tags/Tags.jsx +19 -10
  103. package/src/components/theme/Tags/Tags.test.jsx +9 -11
  104. package/src/components/theme/View/AlbumView.jsx +122 -167
  105. package/src/components/theme/View/LinkView.jsx +4 -0
  106. package/src/components/theme/View/LinkView.test.jsx +2 -0
  107. package/src/components/theme/View/View.jsx +0 -13
  108. package/src/components/theme/View/View.test.jsx +0 -3
  109. package/src/config/ControlPanels.js +49 -43
  110. package/src/config/Widgets.jsx +1 -1
  111. package/src/config/config.test.js +1 -0
  112. package/src/config/index.js +23 -2
  113. package/src/config/slots.js +12 -0
  114. package/src/config/validation.ts +155 -0
  115. package/src/helpers/Blocks/Blocks.js +12 -7
  116. package/src/helpers/Blocks/Blocks.test.js +15 -0
  117. package/src/helpers/Blocks/cloneBlocks.ts +1 -1
  118. package/src/helpers/Extensions/withBlockExtensions.jsx +1 -1
  119. package/src/helpers/FormValidation/FormValidation.jsx +128 -172
  120. package/src/helpers/FormValidation/FormValidation.test.js +836 -8
  121. package/src/helpers/FormValidation/validators.ts +203 -0
  122. package/src/helpers/MessageLabels/MessageLabels.js +28 -0
  123. package/src/helpers/Url/Url.test.js +19 -6
  124. package/src/helpers/Url/urlRegex.js +1 -1
  125. package/src/helpers/User/User.js +1 -1
  126. package/src/helpers/index.js +2 -0
  127. package/src/hooks/client/useClient.js +1 -1
  128. package/src/middleware/api.js +4 -2
  129. package/src/middleware/index.js +1 -0
  130. package/src/middleware/userSessionReset.js +46 -0
  131. package/src/store.js +2 -0
  132. package/test-setup-config.jsx +10 -0
  133. package/theme/themes/default/modules/embed.variables +1 -1
  134. package/theme/themes/pastanaga/collections/form.overrides +34 -0
  135. package/theme/themes/pastanaga/extras/blocks.less +6 -0
  136. package/theme/themes/pastanaga/extras/sidebar.less +4 -0
  137. package/theme/themes/pastanaga/extras/toolbar.less +10 -3
  138. package/tsconfig.declarations.json +3 -2
  139. package/types/components/index.d.ts +0 -1
  140. package/types/components/manage/Actions/Actions.stories.d.ts +8 -0
  141. package/types/components/manage/Blocks/Block/Order/Order.d.ts +2 -1
  142. package/types/components/manage/Blocks/LeadImage/Edit.d.ts +14 -5
  143. package/types/components/manage/Blocks/Search/widgets/SelectMetadataField.d.ts +0 -5
  144. package/types/components/manage/Blocks/ToC/Edit.d.ts +1 -6
  145. package/types/components/manage/Blocks/Video/Edit.d.ts +1 -1
  146. package/types/components/manage/Blocks/Video/Edit.stories.d.ts +8 -0
  147. package/types/components/manage/Contents/ContentsBreadcrumbs.stories.d.ts +8 -0
  148. package/types/components/manage/Contents/ContentsUploadModal.d.ts +14 -2
  149. package/types/components/manage/Contents/ContentsUploadModal.stories.d.ts +8 -0
  150. package/types/components/manage/Contents/index.d.ts +1 -1
  151. package/types/components/manage/Controlpanels/AddonsControlpanel.d.ts +2 -2
  152. package/types/components/manage/Controlpanels/Aliases.d.ts +2 -2
  153. package/types/components/manage/Controlpanels/Aliases.stories.d.ts +8 -0
  154. package/types/components/manage/Controlpanels/DatabaseInformation.d.ts +2 -2
  155. package/types/components/manage/Controlpanels/Groups/RenderGroups.d.ts +10 -5
  156. package/types/components/manage/Controlpanels/index.d.ts +4 -4
  157. package/types/components/manage/Display/Display.stories.d.ts +8 -0
  158. package/types/components/manage/Preferences/ChangePassword.d.ts +2 -2
  159. package/types/components/manage/Preferences/ChangePassword.stories.d.ts +8 -0
  160. package/types/components/manage/Preferences/PersonalInformation.d.ts +7 -2
  161. package/types/components/manage/Preferences/PersonalPreferences.d.ts +5 -1
  162. package/types/components/manage/Preferences/PersonalPreferences.stories.d.ts +8 -0
  163. package/types/components/manage/Toolbar/More.d.ts +8 -5
  164. package/types/components/manage/Widgets/DatetimeWidget.d.ts +0 -85
  165. package/types/components/manage/Widgets/DatetimeWidget.stories.d.ts +0 -1
  166. package/types/components/manage/Widgets/ReferenceWidget.d.ts +27 -2
  167. package/types/components/manage/Widgets/index.d.ts +1 -1
  168. package/types/components/theme/Register/Register.d.ts +2 -2
  169. package/types/components/theme/Register/Register.stories.d.ts +9 -0
  170. package/types/components/theme/Tags/Tags.d.ts +15 -7
  171. package/types/components/theme/View/AlbumView.d.ts +3 -17
  172. package/types/config/ControlPanels.d.ts +8 -0
  173. package/types/config/RichTextEditor/ToHTML.d.ts +1 -1
  174. package/types/config/Widgets.d.ts +3 -3
  175. package/types/config/slots.d.ts +21 -0
  176. package/types/config/validation.d.ts +3 -0
  177. package/types/helpers/Blocks/Blocks.d.ts +6 -0
  178. package/types/helpers/Extensions/withBlockExtensions.d.ts +1 -1
  179. package/types/helpers/FormValidation/FormValidation.d.ts +2 -0
  180. package/types/helpers/FormValidation/validators.d.ts +29 -0
  181. package/types/helpers/MessageLabels/MessageLabels.d.ts +36 -0
  182. package/types/helpers/User/User.d.ts +1 -1
  183. package/types/helpers/index.d.ts +2 -2
  184. package/types/middleware/index.d.ts +1 -0
  185. package/types/middleware/userSessionReset.d.ts +5 -0
  186. package/src/components/theme/SocialSharing/SocialSharing.jsx +0 -48
  187. package/src/components/theme/SocialSharing/SocialSharing.test.jsx +0 -14
@@ -1,14 +1,8 @@
1
- /**
2
- * Personal information component.
3
- * @module components/manage/Preferences/PersonalInformation
4
- */
5
-
6
- import React, { Component } from 'react';
1
+ import React, { useEffect } from 'react';
7
2
  import PropTypes from 'prop-types';
8
- import { connect } from 'react-redux';
9
- import { compose } from 'redux';
10
- import { injectIntl } from 'react-intl';
11
- import { withRouter } from 'react-router-dom';
3
+ import { useDispatch, useSelector } from 'react-redux';
4
+ import { useIntl } from 'react-intl';
5
+ import { useHistory } from 'react-router-dom';
12
6
  import jwtDecode from 'jwt-decode';
13
7
  import { toast } from 'react-toastify';
14
8
  import { messages } from '@plone/volto/helpers';
@@ -16,117 +10,58 @@ import { Toast } from '@plone/volto/components';
16
10
  import { Form } from '@plone/volto/components/manage/Form';
17
11
  import { getUser, updateUser, getUserSchema } from '@plone/volto/actions';
18
12
 
19
- /**
20
- * PersonalInformation class.
21
- * @class PersonalInformation
22
- * @extends Component
23
- */
24
- class PersonalInformation extends Component {
25
- /**
26
- * Property types.
27
- * @property {Object} propTypes Property types.
28
- * @static
29
- */
30
- static propTypes = {
31
- user: PropTypes.shape({
32
- fullname: PropTypes.string,
33
- email: PropTypes.string,
34
- home_page: PropTypes.string,
35
- location: PropTypes.string,
36
- }).isRequired,
37
- updateUser: PropTypes.func.isRequired,
38
- getUser: PropTypes.func.isRequired,
39
- userId: PropTypes.string.isRequired,
40
- loaded: PropTypes.bool.isRequired,
41
- loading: PropTypes.bool,
42
- closeMenu: PropTypes.func,
43
- getUserSchema: PropTypes.func.isRequired,
44
- };
45
-
46
- /**
47
- * Constructor
48
- * @method constructor
49
- * @param {Object} props Component properties
50
- * @constructs ChangePassword
51
- */
52
- constructor(props) {
53
- super(props);
54
- this.onCancel = this.onCancel.bind(this);
55
- this.onSubmit = this.onSubmit.bind(this);
56
- }
13
+ const PersonalInformation = (props) => {
14
+ const intl = useIntl();
15
+ const dispatch = useDispatch();
16
+ const history = useHistory();
17
+ const user = useSelector((state) => state.users.user);
18
+ const userId = useSelector((state) =>
19
+ state.userSession.token ? jwtDecode(state.userSession.token).sub : '',
20
+ );
21
+ const loading = useSelector((state) => state.users.update.loading);
22
+ const userschema = useSelector((state) => state.userschema);
57
23
 
58
- componentDidMount() {
59
- this.props.getUser(this.props.userId);
60
- this.props.getUserSchema();
61
- }
24
+ useEffect(() => {
25
+ dispatch(getUser(userId));
26
+ dispatch(getUserSchema());
27
+ }, [dispatch, userId]);
62
28
 
63
- /**
64
- * Submit handler
65
- * @method onSubmit
66
- * @param {object} data Form data.
67
- * @returns {undefined}
68
- */
69
- onSubmit(data) {
70
- // We don't want the user to change his login name/username or the roles
71
- // from this form
72
- // Backend will complain anyways, but we clean the data here before it does
29
+ const onSubmit = (data) => {
73
30
  delete data.id;
74
31
  delete data.username;
75
32
  delete data.roles;
76
- this.props.updateUser(this.props.userId, data);
77
- toast.success(
78
- <Toast
79
- success
80
- title={this.props.intl.formatMessage(messages.success)}
81
- content={this.props.intl.formatMessage(messages.saved)}
82
- />,
33
+ dispatch(updateUser(userId, data)).then(() =>
34
+ toast.success(
35
+ <Toast
36
+ success
37
+ title={intl.formatMessage(messages.success)}
38
+ content={intl.formatMessage(messages.saved)}
39
+ />,
40
+ ),
83
41
  );
84
- if (this.props.closeMenu) this.props.closeMenu();
85
- }
42
+ if (props.closeMenu) props.closeMenu();
43
+ };
86
44
 
87
- /**
88
- * Cancel handler
89
- * @method onCancel
90
- * @returns {undefined}
91
- */
92
- onCancel() {
93
- if (this.props.closeMenu) this.props.closeMenu();
94
- else this.props.history.goBack();
95
- }
45
+ const onCancel = () => {
46
+ if (props.closeMenu) props.closeMenu();
47
+ else history.goBack();
48
+ };
96
49
 
97
- /**
98
- * Render method.
99
- * @method render
100
- * @returns {string} Markup for the component.
101
- */
102
- render() {
103
- return (
104
- this.props?.userschema?.loaded && (
105
- <Form
106
- formData={this.props.user}
107
- schema={this.props?.userschema.userschema}
108
- onSubmit={this.onSubmit}
109
- onCancel={this.onCancel}
110
- loading={this.props.loading}
111
- />
112
- )
113
- );
114
- }
115
- }
50
+ return (
51
+ userschema?.loaded && (
52
+ <Form
53
+ formData={user}
54
+ schema={userschema.userschema}
55
+ onSubmit={onSubmit}
56
+ onCancel={onCancel}
57
+ loading={loading}
58
+ />
59
+ )
60
+ );
61
+ };
62
+
63
+ PersonalInformation.propTypes = {
64
+ closeMenu: PropTypes.func,
65
+ };
116
66
 
117
- export default compose(
118
- withRouter,
119
- injectIntl,
120
- connect(
121
- (state, props) => ({
122
- user: state.users.user,
123
- userId: state.userSession.token
124
- ? jwtDecode(state.userSession.token).sub
125
- : '',
126
- loaded: state.users.get.loaded,
127
- loading: state.users.update.loading,
128
- userschema: state.userschema,
129
- }),
130
- { getUser, updateUser, getUserSchema },
131
- ),
132
- )(PersonalInformation);
67
+ export default PersonalInformation;
@@ -1,16 +1,10 @@
1
- /**
2
- * Personal preferences component.
3
- * @module components/manage/Preferences/PersonalPreferences
4
- */
5
-
6
- import React, { Component } from 'react';
7
1
  import PropTypes from 'prop-types';
8
- import { connect } from 'react-redux';
9
- import { compose } from 'redux';
2
+ import { useDispatch } from 'react-redux';
10
3
  import { map, keys } from 'lodash';
11
- import { withCookies } from 'react-cookie';
12
- import { defineMessages, injectIntl } from 'react-intl';
4
+ import { defineMessages, useIntl } from 'react-intl';
13
5
  import { toast } from 'react-toastify';
6
+ import { compose } from 'redux';
7
+ import { withCookies } from 'react-cookie';
14
8
 
15
9
  import { Toast } from '@plone/volto/components';
16
10
  import { Form } from '@plone/volto/components/manage/Form';
@@ -50,104 +44,56 @@ const messages = defineMessages({
50
44
  },
51
45
  });
52
46
 
53
- /**
54
- * PersonalPreferences class.
55
- * @class PersonalPreferences
56
- * @extends Component
57
- */
58
- class PersonalPreferences extends Component {
59
- /**
60
- * Property types.
61
- * @property {Object} propTypes Property types.
62
- * @static
63
- */
64
- static propTypes = {
65
- changeLanguage: PropTypes.func.isRequired,
66
- closeMenu: PropTypes.func.isRequired,
67
- };
68
-
69
- /**
70
- * Constructor
71
- * @method constructor
72
- * @param {Object} props Component properties
73
- * @constructs PersonalPreferences
74
- */
75
- constructor(props) {
76
- super(props);
77
- this.onCancel = this.onCancel.bind(this);
78
- this.onSubmit = this.onSubmit.bind(this);
79
- }
80
-
81
- /**
82
- * Submit handler
83
- * @method onSubmit
84
- * @param {object} data Form data.
85
- * @returns {undefined}
86
- */
87
- onSubmit(data) {
47
+ const PersonalPreferences = (props) => {
48
+ const intl = useIntl();
49
+ const dispatch = useDispatch();
50
+ const { closeMenu } = props;
51
+ const onSubmit = (data) => {
88
52
  let language = data.language || 'en';
89
53
  if (config.settings.supportedLanguages.includes(language)) {
90
54
  const langFileName = toGettextLang(language);
91
55
  import(
92
56
  /* @vite-ignore */ '@root/../locales/' + langFileName + '.json'
93
57
  ).then((locale) => {
94
- this.props.changeLanguage(language, locale.default);
58
+ dispatch(changeLanguage(language, locale.default));
95
59
  });
96
60
  }
97
- toast.success(
98
- <Toast success title={this.props.intl.formatMessage(messages.saved)} />,
99
- );
100
- this.props.closeMenu();
101
- }
102
-
103
- /**
104
- * Cancel handler
105
- * @method onCancel
106
- * @returns {undefined}
107
- */
108
- onCancel() {
109
- this.props.closeMenu();
110
- }
61
+ toast.success(<Toast success title={intl.formatMessage(messages.saved)} />);
62
+ closeMenu();
63
+ };
111
64
 
112
- /**
113
- * Render method.
114
- * @method render
115
- * @returns {string} Markup for the component.
116
- */
117
- render() {
118
- const { cookies } = this.props;
119
- return (
120
- <Form
121
- formData={{ language: cookies.get('I18N_LANGUAGE') || '' }}
122
- schema={{
123
- fieldsets: [
124
- {
125
- id: 'default',
126
- title: this.props.intl.formatMessage(messages.default),
127
- fields: ['language'],
128
- },
129
- ],
130
- properties: {
131
- language: {
132
- description: this.props.intl.formatMessage(
133
- messages.languageDescription,
134
- ),
135
- title: this.props.intl.formatMessage(messages.language),
136
- type: 'string',
137
- choices: map(keys(languages), (lang) => [lang, languages[lang]]),
138
- },
65
+ const onCancel = () => {
66
+ closeMenu();
67
+ };
68
+ const { cookies } = props;
69
+ return (
70
+ <Form
71
+ formData={{ language: cookies.get('I18N_LANGUAGE') || '' }}
72
+ schema={{
73
+ fieldsets: [
74
+ {
75
+ id: 'default',
76
+ title: intl.formatMessage(messages.default),
77
+ fields: ['language'],
78
+ },
79
+ ],
80
+ properties: {
81
+ language: {
82
+ description: intl.formatMessage(messages.languageDescription),
83
+ title: intl.formatMessage(messages.language),
84
+ type: 'string',
85
+ choices: map(keys(languages), (lang) => [lang, languages[lang]]),
139
86
  },
140
- required: [],
141
- }}
142
- onSubmit={this.onSubmit}
143
- onCancel={this.onCancel}
144
- />
145
- );
146
- }
147
- }
87
+ },
88
+ required: [],
89
+ }}
90
+ onSubmit={onSubmit}
91
+ onCancel={onCancel}
92
+ />
93
+ );
94
+ };
148
95
 
149
- export default compose(
150
- injectIntl,
151
- withCookies,
152
- connect(null, { changeLanguage }),
153
- )(PersonalPreferences);
96
+ PersonalPreferences.propTypes = {
97
+ closeMenu: PropTypes.func.isRequired,
98
+ };
99
+ export default compose(withCookies)(PersonalPreferences);
@@ -0,0 +1,48 @@
1
+ import { injectIntl } from 'react-intl';
2
+ import React from 'react';
3
+ import PersonalPreferencesComponent from './PersonalPreferences';
4
+ import { RealStoreWrapper as Wrapper } from '@plone/volto/storybook';
5
+ const IntlPersonalPreferencesComponent = injectIntl(
6
+ PersonalPreferencesComponent,
7
+ );
8
+
9
+ function StoryComponent(args) {
10
+ return (
11
+ <Wrapper
12
+ customStore={{
13
+ intl: {
14
+ locale: 'en',
15
+ messages: {},
16
+ },
17
+ vocabularies: {
18
+ 'plone.app.vocabularies.Keywords': {
19
+ items: [{ title: 'My item', value: 'myitem' }],
20
+ itemsTotal: 1,
21
+ },
22
+ },
23
+ }}
24
+ >
25
+ <div id="toolbar" style={{ display: 'none' }} />
26
+ <IntlPersonalPreferencesComponent
27
+ {...args}
28
+ location={{ pathname: '/blog' }}
29
+ closeMenu={() => {}}
30
+ />
31
+ </Wrapper>
32
+ );
33
+ }
34
+
35
+ export const PersonalPreferences = StoryComponent.bind({});
36
+
37
+ export default {
38
+ title: 'Public components/PersonalPreferences',
39
+ component: PersonalPreferences,
40
+ decorators: [
41
+ (Story) => (
42
+ <div className="ui segment form attached" style={{ width: '400px' }}>
43
+ <Story />
44
+ </div>
45
+ ),
46
+ ],
47
+ argTypes: {},
48
+ };