@eeacms/volto-eea-website-theme 0.6.12 → 0.6.15

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.
package/CHANGELOG.md CHANGED
@@ -4,9 +4,32 @@ All notable changes to this project will be documented in this file. Dates are d
4
4
 
5
5
  Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
6
6
 
7
+ #### [0.6.15](https://github.com/eea/volto-eea-website-theme/compare/0.6.14...0.6.15)
8
+
9
+ - Moved customized Toolbar to volto-eea-website-policy [`403b06d`](https://github.com/eea/volto-eea-website-theme/commit/403b06dd1225f4f15883d938d47facfe730a3699)
10
+ - change(logo): use a real svg logo for white eea logo [`e2703af`](https://github.com/eea/volto-eea-website-theme/commit/e2703af2bf3779ad3aa21fa673fa5652691a9f25)
11
+
12
+ #### [0.6.14](https://github.com/eea/volto-eea-website-theme/compare/0.6.13...0.6.14)
13
+
14
+ > 30 June 2022
15
+
16
+ - develop [`#46`](https://github.com/eea/volto-eea-website-theme/pull/46)
17
+ - change(header): show eea information systems on mobile [`abdf181`](https://github.com/eea/volto-eea-website-theme/commit/abdf1819465ba1ca582c2a2d82ec02a137c0cf7f)
18
+ - change(pageheader): share dropdown appears below the share icon [`10aaafc`](https://github.com/eea/volto-eea-website-theme/commit/10aaafc79d03784972b7cf40639077246340eda9)
19
+ - change(pageheader): removed blogger, reddit and stumbleupon sharing links [`0f7d887`](https://github.com/eea/volto-eea-website-theme/commit/0f7d88700076704abb04ba1bf806ab669fe085be)
20
+
21
+ #### [0.6.13](https://github.com/eea/volto-eea-website-theme/compare/0.6.12...0.6.13)
22
+
23
+ > 23 June 2022
24
+
25
+ - Fix double header issue - refs #151713 [`#45`](https://github.com/eea/volto-eea-website-theme/pull/45)
26
+ - Customize EventView - copied unchanged from @plone/volto 16.0.0-alpha.7 [`346fc87`](https://github.com/eea/volto-eea-website-theme/commit/346fc87c0834627efa70ed1303c5ee98a5a17ae2)
27
+
7
28
  #### [0.6.12](https://github.com/eea/volto-eea-website-theme/compare/0.6.11...0.6.12)
8
29
 
9
- - change(footer): updated logos order and added climate observatory [`96ddddf`](https://github.com/eea/volto-eea-website-theme/commit/96ddddffd0530ffb10d50a1d011f82bb97e6ba2b)
30
+ > 23 June 2022
31
+
32
+ - change(footer): updated logos order and added climate observatory [`#44`](https://github.com/eea/volto-eea-website-theme/pull/44)
10
33
 
11
34
  #### [0.6.11](https://github.com/eea/volto-eea-website-theme/compare/0.6.10...0.6.11)
12
35
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eeacms/volto-eea-website-theme",
3
- "version": "0.6.12",
3
+ "version": "0.6.15",
4
4
  "description": "@eeacms/volto-eea-website-theme: Volto add-on",
5
5
  "main": "src/index.js",
6
6
  "author": "European Environment Agency: IDM2 A-Team",
@@ -161,18 +161,10 @@ const View = (props) => {
161
161
  sharePage(metadata['@id'], 'linkedin');
162
162
  }}
163
163
  />
164
- <Banner.Action icon="blogger b" />
165
- <Banner.Action
166
- icon="ri-reddit-line"
167
- onClick={() => {
168
- sharePage(metadata['@id'], 'reddit');
169
- }}
170
- />
171
- <Banner.Action icon="stumbleupon circle" />
172
164
  </div>
173
165
  </>
174
166
  )}
175
- position="top center"
167
+ position="bottom center"
176
168
  size="small"
177
169
  trigger={
178
170
  <Banner.Action
package/src/config.js CHANGED
@@ -8,7 +8,7 @@ import copernicusLogo from '@eeacms/volto-eea-design-system/../theme/themes/eea/
8
8
  import industryLogo from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/logo/industry.svg';
9
9
  import marineLogo from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/logo/marine.svg';
10
10
  import eionetLogo from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/logo/eionet.svg';
11
- import eeaLogo from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/logo/eea.svg';
11
+ import eeaLogo from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/logo/eea-white.svg';
12
12
  import climateLogo from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/logo/climate-health.svg';
13
13
 
14
14
  // TODO: to be consolidated with headerLinks
@@ -18,7 +18,7 @@ import { getNavigation } from '@plone/volto/actions';
18
18
  import { Header, Logo } from '@eeacms/volto-eea-design-system/ui';
19
19
  import { usePrevious } from '@eeacms/volto-eea-design-system/helpers';
20
20
  import { find } from 'lodash';
21
- import WhiteLogoImage from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/logo/eea.svg';
21
+ import WhiteLogoImage from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/logo/eea-white.svg';
22
22
  import LogoImage from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/images/Header/eea-logo.svg';
23
23
  import globeIcon from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/images/Header/global-line.svg';
24
24
  import eeaFlag from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/images/Header/eea.png';
@@ -83,7 +83,7 @@ const EEAHeader = ({ pathname, token, items, history }) => {
83
83
  <Image src={eeaFlag} alt="eea flag"></Image>
84
84
  <Header.TopDropdownMenu
85
85
  text="An official website of the European Union | How do you Know?"
86
- mobileText="An official EU website"
86
+ mobileText=" "
87
87
  icon="chevron down"
88
88
  aria-label="dropdown"
89
89
  className=""
@@ -110,7 +110,6 @@ const EEAHeader = ({ pathname, token, items, history }) => {
110
110
  <Header.TopItem>
111
111
  <Header.TopDropdownMenu
112
112
  id="theme-sites"
113
- className="tablet or lower hidden"
114
113
  text={eea.globalHeaderPartnerLinks.title}
115
114
  viewportWidth={width}
116
115
  >
@@ -0,0 +1,90 @@
1
+ /**
2
+ * EventView view component.
3
+ * @module components/theme/View/EventView
4
+ */
5
+
6
+ import React from 'react';
7
+ import PropTypes from 'prop-types';
8
+ import { hasBlocksData, flattenHTMLToAppURL } from '@plone/volto/helpers';
9
+ import { Image, Grid } from 'semantic-ui-react';
10
+ import RenderBlocks from '@plone/volto/components/theme/View/RenderBlocks';
11
+ import { EventDetails } from '@plone/volto/components';
12
+
13
+ const EventTextfieldView = ({ content }) => (
14
+ <React.Fragment>
15
+ {content.title && <h1 className="documentFirstHeading">{content.title}</h1>}
16
+ {content.description && (
17
+ <p className="documentDescription">{content.description}</p>
18
+ )}
19
+ {content.image && (
20
+ <Image
21
+ className="document-image"
22
+ src={content.image.scales.thumb.download}
23
+ floated="right"
24
+ />
25
+ )}
26
+ {content.text && (
27
+ <div
28
+ dangerouslySetInnerHTML={{
29
+ __html: flattenHTMLToAppURL(content.text.data),
30
+ }}
31
+ />
32
+ )}
33
+ </React.Fragment>
34
+ );
35
+
36
+ /**
37
+ * EventView view component class.
38
+ * @function EventView
39
+ * @params {object} content Content object.
40
+ * @returns {string} Markup of the component.
41
+ */
42
+ const EventView = (props) => {
43
+ const { content } = props;
44
+
45
+ return (
46
+ <div id="page-document" className="ui container viewwrapper event-view">
47
+ <Grid>
48
+ <Grid.Column mobile={12} tablet={7} computer={7}>
49
+ {hasBlocksData(content) ? (
50
+ <RenderBlocks {...props} />
51
+ ) : (
52
+ <EventTextfieldView {...props} />
53
+ )}
54
+ </Grid.Column>
55
+ <Grid.Column mobile={12} tablet={5} computer={5}>
56
+ <EventDetails content={content} />
57
+ </Grid.Column>
58
+ </Grid>
59
+ </div>
60
+ );
61
+ };
62
+
63
+ /**
64
+ * Property types.
65
+ * @property {Object} propTypes Property types.
66
+ * @static
67
+ */
68
+ EventView.propTypes = {
69
+ content: PropTypes.shape({
70
+ title: PropTypes.string,
71
+ description: PropTypes.string,
72
+ text: PropTypes.shape({
73
+ data: PropTypes.string,
74
+ }),
75
+ attendees: PropTypes.arrayOf(PropTypes.string).isRequired,
76
+ contact_email: PropTypes.string,
77
+ contact_name: PropTypes.string,
78
+ contact_phone: PropTypes.string,
79
+ end: PropTypes.string.isRequired,
80
+ event_url: PropTypes.string,
81
+ location: PropTypes.string,
82
+ open_end: PropTypes.bool,
83
+ recurrence: PropTypes.any,
84
+ start: PropTypes.string.isRequired,
85
+ subjects: PropTypes.arrayOf(PropTypes.string).isRequired,
86
+ whole_day: PropTypes.bool,
87
+ }).isRequired,
88
+ };
89
+
90
+ export default EventView;
@@ -1,589 +0,0 @@
1
- /**
2
- * Toolbar component.
3
- * @module components/manage/Toolbar/Toolbar
4
- */
5
-
6
- import React, { Component } from 'react';
7
- import { defineMessages, injectIntl } from 'react-intl';
8
- import PropTypes from 'prop-types';
9
- import { Link } from 'react-router-dom';
10
- import jwtDecode from 'jwt-decode';
11
- import { connect } from 'react-redux';
12
- import { compose } from 'redux';
13
- import { doesNodeContainClick } from 'semantic-ui-react/dist/commonjs/lib';
14
- import { withCookies } from 'react-cookie';
15
- import { filter, find } from 'lodash';
16
- import cx from 'classnames';
17
- import config from '@plone/volto/registry';
18
-
19
- import More from '@plone/volto/components/manage/Toolbar/More';
20
- import PersonalTools from '@plone/volto/components/manage/Toolbar/PersonalTools';
21
- import Types from '@plone/volto/components/manage/Toolbar/Types';
22
- import PersonalInformation from '@plone/volto/components/manage/Preferences/PersonalInformation';
23
- import PersonalPreferences from '@plone/volto/components/manage/Preferences/PersonalPreferences';
24
- import StandardWrapper from '@plone/volto/components/manage/Toolbar/StandardWrapper';
25
- import {
26
- getTypes,
27
- listActions,
28
- setExpandedToolbar,
29
- unlockContent,
30
- } from '@plone/volto/actions';
31
- import { Icon } from '@plone/volto/components';
32
- import { BodyClass, getBaseUrl, getCookieOptions } from '@plone/volto/helpers';
33
- import { Pluggable } from '@plone/volto/components/manage/Pluggable';
34
-
35
- import penSVG from '@plone/volto/icons/pen.svg';
36
- import unlockSVG from '@plone/volto/icons/unlock.svg';
37
- import folderSVG from '@plone/volto/icons/folder.svg';
38
- import addSVG from '@plone/volto/icons/add-document.svg';
39
- import moreSVG from '@plone/volto/icons/more.svg';
40
- import userSVG from '@plone/volto/icons/user.svg';
41
- import clearSVG from '@plone/volto/icons/clear.svg';
42
-
43
- const messages = defineMessages({
44
- edit: {
45
- id: 'Edit',
46
- defaultMessage: 'Edit',
47
- },
48
- contents: {
49
- id: 'Contents',
50
- defaultMessage: 'Contents',
51
- },
52
- add: {
53
- id: 'Add',
54
- defaultMessage: 'Add',
55
- },
56
- more: {
57
- id: 'More',
58
- defaultMessage: 'More',
59
- },
60
- personalTools: {
61
- id: 'Personal tools',
62
- defaultMessage: 'Personal tools',
63
- },
64
- shrinkToolbar: {
65
- id: 'Shrink toolbar',
66
- defaultMessage: 'Shrink toolbar',
67
- },
68
- personalInformation: {
69
- id: 'Personal Information',
70
- defaultMessage: 'Personal Information',
71
- },
72
- personalPreferences: {
73
- id: 'Personal Preferences',
74
- defaultMessage: 'Personal Preferences',
75
- },
76
- collection: {
77
- id: 'Collection',
78
- defaultMessage: 'Collection',
79
- },
80
- file: {
81
- id: 'File',
82
- defaultMessage: 'File',
83
- },
84
- link: {
85
- id: 'Link',
86
- defaultMessage: 'Link',
87
- },
88
- newsItem: {
89
- id: 'News Item',
90
- defaultMessage: 'News Item',
91
- },
92
- page: {
93
- id: 'Page',
94
- defaultMessage: 'Page',
95
- },
96
- back: {
97
- id: 'Back',
98
- defaultMessage: 'Back',
99
- },
100
- unlock: {
101
- id: 'Unlock',
102
- defaultMessage: 'Unlock',
103
- },
104
- });
105
-
106
- const toolbarComponents = {
107
- personalTools: { component: PersonalTools, wrapper: null },
108
- more: { component: More, wrapper: null },
109
- types: { component: Types, wrapper: null, contentAsProps: true },
110
- profile: {
111
- component: PersonalInformation,
112
- wrapper: StandardWrapper,
113
- wrapperTitle: messages.personalInformation,
114
- hideToolbarBody: true,
115
- },
116
- preferences: {
117
- component: PersonalPreferences,
118
- wrapper: StandardWrapper,
119
- wrapperTitle: messages.personalPreferences,
120
- hideToolbarBody: true,
121
- },
122
- };
123
-
124
- /**
125
- * Toolbar container class.
126
- * @class Toolbar
127
- * @extends Component
128
- */
129
- class Toolbar extends Component {
130
- /**
131
- * Property types.
132
- * @property {Object} propTypes Property types.
133
- * @static
134
- */
135
- static propTypes = {
136
- actions: PropTypes.shape({
137
- object: PropTypes.arrayOf(PropTypes.object),
138
- object_buttons: PropTypes.arrayOf(PropTypes.object),
139
- user: PropTypes.arrayOf(PropTypes.object),
140
- }),
141
- token: PropTypes.string,
142
- userId: PropTypes.string,
143
- pathname: PropTypes.string.isRequired,
144
- content: PropTypes.shape({
145
- '@type': PropTypes.string,
146
- is_folderish: PropTypes.bool,
147
- review_state: PropTypes.string,
148
- }),
149
- getTypes: PropTypes.func.isRequired,
150
- types: PropTypes.arrayOf(
151
- PropTypes.shape({
152
- '@id': PropTypes.string,
153
- addable: PropTypes.bool,
154
- title: PropTypes.string,
155
- }),
156
- ),
157
- listActions: PropTypes.func.isRequired,
158
- unlockContent: PropTypes.func,
159
- unlockRequest: PropTypes.objectOf(PropTypes.any),
160
- inner: PropTypes.element.isRequired,
161
- hideDefaultViewButtons: PropTypes.bool,
162
- };
163
-
164
- /**
165
- * Default properties.
166
- * @property {Object} defaultProps Default properties.
167
- * @static
168
- */
169
- static defaultProps = {
170
- actions: null,
171
- token: null,
172
- userId: null,
173
- content: null,
174
- hideDefaultViewButtons: false,
175
- types: [],
176
- };
177
-
178
- toolbarWindow = React.createRef();
179
-
180
- constructor(props) {
181
- super(props);
182
- const { cookies } = props;
183
- this.state = {
184
- expanded: cookies.get('toolbar_expanded') !== 'false',
185
- showMenu: false,
186
- menuStyle: {},
187
- menuComponents: [],
188
- loadedComponents: [],
189
- hideToolbarBody: false,
190
- };
191
- }
192
-
193
- /**
194
- * Component will mount
195
- * @method componentDidMount
196
- * @returns {undefined}
197
- */
198
- componentDidMount() {
199
- this.props.listActions(getBaseUrl(this.props.pathname));
200
- this.props.getTypes(getBaseUrl(this.props.pathname));
201
- this.props.setExpandedToolbar(this.state.expanded);
202
- document.addEventListener('mousedown', this.handleClickOutside, false);
203
- }
204
-
205
- /**
206
- * Component will receive props
207
- * @method componentWillReceiveProps
208
- * @param {Object} nextProps Next properties
209
- * @returns {undefined}
210
- */
211
- UNSAFE_componentWillReceiveProps(nextProps) {
212
- if (nextProps.pathname !== this.props.pathname) {
213
- this.props.listActions(getBaseUrl(nextProps.pathname));
214
- this.props.getTypes(getBaseUrl(nextProps.pathname));
215
- }
216
-
217
- // Unlock
218
- if (this.props.unlockRequest.loading && nextProps.unlockRequest.loaded) {
219
- this.props.listActions(getBaseUrl(nextProps.pathname));
220
- }
221
- }
222
-
223
- /**
224
- * Component will receive props
225
- * @method componentWillUnmount
226
- * @returns {undefined}
227
- */
228
- componentWillUnmount() {
229
- document.removeEventListener('mousedown', this.handleClickOutside, false);
230
- }
231
-
232
- handleShrink = () => {
233
- const { cookies } = this.props;
234
- cookies.set('toolbar_expanded', !this.state.expanded, getCookieOptions());
235
- this.setState(
236
- (state) => ({ expanded: !state.expanded }),
237
- () => this.props.setExpandedToolbar(this.state.expanded),
238
- );
239
- };
240
-
241
- closeMenu = () =>
242
- this.setState(() => ({ showMenu: false, loadedComponents: [] }));
243
-
244
- loadComponent = (type) => {
245
- const { loadedComponents } = this.state;
246
- if (!this.state.loadedComponents.includes(type)) {
247
- this.setState({
248
- loadedComponents: [...loadedComponents, type],
249
- hideToolbarBody: toolbarComponents[type].hideToolbarBody || false,
250
- });
251
- }
252
- };
253
-
254
- unloadComponent = () => {
255
- this.setState((state) => ({
256
- loadedComponents: state.loadedComponents.slice(0, -1),
257
- hideToolbarBody:
258
- toolbarComponents[
259
- state.loadedComponents[state.loadedComponents.length - 2]
260
- ].hideToolbarBody || false,
261
- }));
262
- };
263
-
264
- toggleMenu = (e, selector) => {
265
- if (this.state.showMenu) {
266
- this.closeMenu();
267
- return;
268
- }
269
- // PersonalTools always shows at bottom
270
- if (selector === 'personalTools') {
271
- this.setState((state) => ({
272
- showMenu: !state.showMenu,
273
- menuStyle: { bottom: 0 },
274
- }));
275
- } else {
276
- this.setState((state) => ({
277
- showMenu: !state.showMenu,
278
- menuStyle: { top: 0 },
279
- }));
280
- }
281
- this.loadComponent(selector);
282
- };
283
-
284
- handleClickOutside = (e) => {
285
- if (this.pusher && doesNodeContainClick(this.pusher, e)) return;
286
- this.closeMenu();
287
- };
288
-
289
- unlock = (e) => {
290
- this.props.unlockContent(getBaseUrl(this.props.pathname), true);
291
- };
292
-
293
- /**
294
- * Render method.
295
- * @method render
296
- * @returns {string} Markup for the component.
297
- */
298
- render() {
299
- const path = getBaseUrl(this.props.pathname);
300
- const lock = this.props.content?.lock;
301
- const unlockAction =
302
- lock?.locked && lock?.stealable && lock?.creator !== this.props.userId;
303
- const editAction =
304
- !unlockAction && find(this.props.actions.object, { id: 'edit' });
305
- const folderContentsAction = find(this.props.actions.object, {
306
- id: 'folderContents',
307
- });
308
- const { expanded } = this.state;
309
-
310
- return (
311
- this.props.token && (
312
- <>
313
- <BodyClass
314
- className={expanded ? 'has-toolbar' : 'has-toolbar-collapsed'}
315
- />
316
- <div
317
- style={this.state.menuStyle}
318
- className={
319
- this.state.showMenu ? 'toolbar-content show' : 'toolbar-content'
320
- }
321
- ref={this.toolbarWindow}
322
- >
323
- {this.state.showMenu && (
324
- // This sets the scroll locker in the body tag in mobile
325
- <BodyClass className="has-toolbar-menu-open" />
326
- )}
327
- <div
328
- className="pusher-puller"
329
- ref={(node) => (this.pusher = node)}
330
- style={{
331
- transform: this.toolbarWindow.current
332
- ? `translateX(-${
333
- (this.state.loadedComponents.length - 1) *
334
- this.toolbarWindow.current.getBoundingClientRect().width
335
- }px)`
336
- : null,
337
- }}
338
- >
339
- {this.state.loadedComponents.map((component, index) =>
340
- (() => {
341
- const ToolbarComponent =
342
- toolbarComponents[component].component;
343
- const WrapperComponent = toolbarComponents[component].wrapper;
344
- const haveActions =
345
- toolbarComponents[component].hideToolbarBody;
346
- const title =
347
- toolbarComponents[component].wrapperTitle &&
348
- this.props.intl.formatMessage(
349
- toolbarComponents[component].wrapperTitle,
350
- );
351
- if (WrapperComponent) {
352
- return (
353
- <WrapperComponent
354
- componentName={component}
355
- componentTitle={title}
356
- pathname={this.props.pathname}
357
- loadComponent={this.loadComponent}
358
- unloadComponent={this.unloadComponent}
359
- componentIndex={index}
360
- theToolbar={this.toolbarWindow}
361
- key={`personalToolsComponent-${index}`}
362
- closeMenu={this.closeMenu}
363
- hasActions={haveActions}
364
- >
365
- <ToolbarComponent
366
- pathname={this.props.pathname}
367
- loadComponent={this.loadComponent}
368
- unloadComponent={this.unloadComponent}
369
- componentIndex={index}
370
- theToolbar={this.toolbarWindow}
371
- closeMenu={this.closeMenu}
372
- isToolbarEmbedded
373
- />
374
- </WrapperComponent>
375
- );
376
- } else {
377
- return (
378
- <ToolbarComponent
379
- pathname={this.props.pathname}
380
- loadComponent={this.loadComponent}
381
- unloadComponent={this.unloadComponent}
382
- componentIndex={index}
383
- theToolbar={this.toolbarWindow}
384
- key={`personalToolsComponent-${index}`}
385
- closeMenu={this.closeMenu}
386
- content={
387
- toolbarComponents[component].contentAsProps
388
- ? this.props.content
389
- : null
390
- }
391
- />
392
- );
393
- }
394
- })(),
395
- )}
396
- </div>
397
- </div>
398
- <div className={this.state.expanded ? 'toolbar expanded' : 'toolbar'}>
399
- <div className="toolbar-body">
400
- <div className="toolbar-actions">
401
- {this.props.hideDefaultViewButtons && this.props.inner && (
402
- <>{this.props.inner}</>
403
- )}
404
- {!this.props.hideDefaultViewButtons && (
405
- <>
406
- {unlockAction && (
407
- <button
408
- aria-label={this.props.intl.formatMessage(
409
- messages.unlock,
410
- )}
411
- className="unlock"
412
- onClick={(e) => this.unlock(e)}
413
- tabIndex={0}
414
- >
415
- <Icon
416
- name={unlockSVG}
417
- size="30px"
418
- className="unlock"
419
- title={this.props.intl.formatMessage(messages.unlock)}
420
- />
421
- </button>
422
- )}
423
-
424
- {editAction && (
425
- <Link
426
- aria-label={this.props.intl.formatMessage(
427
- messages.edit,
428
- )}
429
- className="edit"
430
- to={`${path}/edit`}
431
- >
432
- <Icon
433
- name={penSVG}
434
- size="30px"
435
- className="circled"
436
- title={this.props.intl.formatMessage(messages.edit)}
437
- />
438
- </Link>
439
- )}
440
- {this.props.content &&
441
- this.props.content.is_folderish &&
442
- folderContentsAction &&
443
- !this.props.pathname.endsWith('/contents') && (
444
- <Link
445
- aria-label={this.props.intl.formatMessage(
446
- messages.contents,
447
- )}
448
- to={`${path}/contents`}
449
- >
450
- <Icon
451
- name={folderSVG}
452
- size="30px"
453
- title={this.props.intl.formatMessage(
454
- messages.contents,
455
- )}
456
- />
457
- </Link>
458
- )}
459
- {this.props.content &&
460
- this.props.content.is_folderish &&
461
- folderContentsAction &&
462
- this.props.pathname.endsWith('/contents') && (
463
- <Link
464
- to={`${path}`}
465
- aria-label={this.props.intl.formatMessage(
466
- messages.back,
467
- )}
468
- >
469
- <Icon
470
- name={clearSVG}
471
- className="contents circled"
472
- size="30px"
473
- title={this.props.intl.formatMessage(messages.back)}
474
- />
475
- </Link>
476
- )}
477
- {this.props.content &&
478
- ((this.props.content.is_folderish &&
479
- this.props.types.length > 0) ||
480
- (config.settings.isMultilingual &&
481
- this.props.content['@components']?.translations)) && (
482
- <button
483
- className="add"
484
- aria-label={this.props.intl.formatMessage(
485
- messages.add,
486
- )}
487
- onClick={(e) => this.toggleMenu(e, 'types')}
488
- tabIndex={0}
489
- id="toolbar-add"
490
- >
491
- <Icon
492
- name={addSVG}
493
- size="30px"
494
- title={this.props.intl.formatMessage(messages.add)}
495
- />
496
- </button>
497
- )}
498
- <div className="toolbar-button-spacer" />
499
- <button
500
- className="more"
501
- aria-label={this.props.intl.formatMessage(messages.more)}
502
- onClick={(e) => this.toggleMenu(e, 'more')}
503
- tabIndex={0}
504
- id="toolbar-more"
505
- >
506
- <Icon
507
- className="mobile hidden"
508
- name={moreSVG}
509
- size="30px"
510
- title={this.props.intl.formatMessage(messages.more)}
511
- />
512
- {this.state.showMenu ? (
513
- <Icon
514
- className="mobile only"
515
- name={clearSVG}
516
- size="30px"
517
- />
518
- ) : (
519
- <Icon
520
- className="mobile only"
521
- name={moreSVG}
522
- size="30px"
523
- />
524
- )}
525
- </button>
526
- </>
527
- )}
528
- </div>
529
- <div className="toolbar-bottom">
530
- <Pluggable name="main.toolbar.bottom" />
531
- {!this.props.hideDefaultViewButtons && (
532
- <button
533
- className="user"
534
- aria-label={this.props.intl.formatMessage(
535
- messages.personalTools,
536
- )}
537
- onClick={(e) => this.toggleMenu(e, 'personalTools')}
538
- tabIndex={0}
539
- id="toolbar-personal"
540
- >
541
- <Icon
542
- name={userSVG}
543
- size="30px"
544
- title={this.props.intl.formatMessage(
545
- messages.personalTools,
546
- )}
547
- />
548
- </button>
549
- )}
550
- </div>
551
- </div>
552
- <div className="toolbar-handler">
553
- <button
554
- aria-label={this.props.intl.formatMessage(
555
- messages.shrinkToolbar,
556
- )}
557
- className={cx({
558
- [this.props.content?.review_state]: this.props.content
559
- ?.review_state,
560
- })}
561
- onClick={this.handleShrink}
562
- />
563
- </div>
564
- </div>
565
- <div className="pusher" />
566
- </>
567
- )
568
- );
569
- }
570
- }
571
-
572
- export default compose(
573
- injectIntl,
574
- withCookies,
575
- connect(
576
- (state, props) => ({
577
- actions: state.actions.actions,
578
- token: state.userSession.token,
579
- userId: state.userSession.token
580
- ? jwtDecode(state.userSession.token).sub
581
- : '',
582
- content: state.content.data,
583
- pathname: props.pathname,
584
- types: filter(state.types.types, 'addable'),
585
- unlockRequest: state.content.unlock,
586
- }),
587
- { getTypes, listActions, setExpandedToolbar, unlockContent },
588
- ),
589
- )(Toolbar);