@plone/volto 17.0.0-alpha.1 → 17.0.0-alpha.11

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 (182) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/CHANGELOG.md +403 -16
  3. package/CONTRIBUTING.md +1 -1
  4. package/README.md +12 -15
  5. package/addon-registry.js +34 -0
  6. package/create-theme-addons-loader.js +79 -0
  7. package/cypress/support/commands.js +45 -0
  8. package/locales/ca/LC_MESSAGES/volto.po +187 -6
  9. package/locales/ca.json +1 -1
  10. package/locales/de/LC_MESSAGES/volto.po +206 -25
  11. package/locales/de.json +1 -1
  12. package/locales/en/LC_MESSAGES/volto.po +186 -5
  13. package/locales/en.json +1 -1
  14. package/locales/es/LC_MESSAGES/volto.po +187 -6
  15. package/locales/es.json +1 -1
  16. package/locales/eu/LC_MESSAGES/volto.po +187 -6
  17. package/locales/eu.json +1 -1
  18. package/locales/fi/LC_MESSAGES/volto.po +4792 -0
  19. package/locales/fi.json +1 -1
  20. package/locales/fr/LC_MESSAGES/volto.po +187 -6
  21. package/locales/fr.json +1 -1
  22. package/locales/it/LC_MESSAGES/volto.po +187 -6
  23. package/locales/it.json +1 -1
  24. package/locales/ja/LC_MESSAGES/volto.po +187 -6
  25. package/locales/ja.json +1 -1
  26. package/locales/nl/LC_MESSAGES/volto.po +842 -649
  27. package/locales/nl.json +1 -1
  28. package/locales/pt/LC_MESSAGES/volto.po +187 -6
  29. package/locales/pt.json +1 -1
  30. package/locales/pt_BR/LC_MESSAGES/volto.po +195 -14
  31. package/locales/pt_BR.json +1 -1
  32. package/locales/ro/LC_MESSAGES/volto.po +187 -6
  33. package/locales/ro.json +1 -1
  34. package/locales/volto.pot +187 -6
  35. package/locales/zh_CN/LC_MESSAGES/volto.po +187 -6
  36. package/locales/zh_CN.json +1 -1
  37. package/package-why.json +0 -1
  38. package/package.json +9 -8
  39. package/packages/volto-slate/build/messages/src/blocks/Table/TableBlockEdit.json +1 -1
  40. package/packages/volto-slate/build/messages/src/blocks/Text/DefaultTextBlockEditor.json +1 -1
  41. package/packages/volto-slate/build/messages/src/blocks/Text/DetachedTextBlockEditor.json +1 -1
  42. package/packages/volto-slate/build/messages/src/blocks/Text/SlashMenu.json +1 -1
  43. package/packages/volto-slate/build/messages/src/editor/plugins/AdvancedLink/index.json +1 -1
  44. package/packages/volto-slate/build/messages/src/editor/plugins/Link/index.json +1 -1
  45. package/packages/volto-slate/build/messages/src/editor/plugins/Table/index.json +1 -1
  46. package/packages/volto-slate/build/messages/src/elementEditor/messages.json +1 -1
  47. package/packages/volto-slate/build/messages/src/widgets/HtmlSlateWidget.json +1 -1
  48. package/packages/volto-slate/build/messages/src/widgets/RichTextWidgetView.json +1 -1
  49. package/packages/volto-slate/package.json +1 -1
  50. package/packages/volto-slate/src/blocks/Table/index.js +2 -0
  51. package/packages/volto-slate/src/blocks/Text/SlashMenu.jsx +4 -3
  52. package/packages/volto-slate/src/editor/deserialize.js +0 -1
  53. package/packages/volto-slate/src/editor/plugins/StyleMenu/StyleMenu.jsx +14 -4
  54. package/razzle.config.js +28 -0
  55. package/src/actions/index.js +6 -0
  56. package/src/actions/language/language.js +9 -8
  57. package/src/actions/querystringsearch/querystringsearch.js +20 -14
  58. package/src/actions/relations/rebuild.js +25 -0
  59. package/src/actions/relations/relations.js +86 -0
  60. package/src/actions/relations/relations.test.js +15 -0
  61. package/src/components/index.js +1 -0
  62. package/src/components/manage/Add/Add.jsx +2 -2
  63. package/src/components/manage/BlockChooser/BlockChooser.jsx +14 -5
  64. package/src/components/manage/BlockChooser/BlockChooser.test.jsx +5 -0
  65. package/src/components/manage/Blocks/Listing/Edit.jsx +0 -19
  66. package/src/components/manage/Blocks/Listing/ListingBody.jsx +77 -61
  67. package/src/components/manage/Blocks/Listing/ListingBody.test.jsx +20 -0
  68. package/src/components/manage/Blocks/Listing/View.jsx +0 -4
  69. package/src/components/manage/Blocks/Listing/getAsyncData.js +10 -2
  70. package/src/components/manage/Blocks/Listing/withQuerystringResults.jsx +25 -16
  71. package/src/components/manage/Blocks/Search/SearchBlockEdit.jsx +5 -4
  72. package/src/components/manage/Blocks/Search/SearchBlockView.jsx +2 -1
  73. package/src/components/manage/Blocks/Search/components/DateRangeFacet.jsx +4 -1
  74. package/src/components/manage/Blocks/Search/components/Facets.jsx +58 -2
  75. package/src/components/manage/Blocks/Search/hocs/withSearch.jsx +32 -15
  76. package/src/components/manage/Blocks/Search/layout/LeftColumnFacets.jsx +17 -5
  77. package/src/components/manage/Blocks/Search/layout/RightColumnFacets.jsx +17 -5
  78. package/src/components/manage/Blocks/Search/layout/TopSideFacets.jsx +21 -5
  79. package/src/components/manage/Blocks/Search/schema.js +16 -1
  80. package/src/components/manage/Blocks/ToC/Edit.jsx +1 -0
  81. package/src/components/manage/Contents/Contents.jsx +69 -33
  82. package/src/components/manage/Contents/ContentsItem.jsx +6 -0
  83. package/src/components/manage/Controlpanels/AddonsControlpanel.jsx +3 -3
  84. package/src/components/manage/Controlpanels/Controlpanels.jsx +199 -224
  85. package/src/components/manage/Controlpanels/Controlpanels.test.jsx +46 -7
  86. package/src/components/manage/Controlpanels/Relations/BrokenRelations.jsx +66 -0
  87. package/src/components/manage/Controlpanels/Relations/Relations.jsx +114 -0
  88. package/src/components/manage/Controlpanels/Relations/RelationsListing.jsx +479 -0
  89. package/src/components/manage/Controlpanels/Relations/RelationsMatrix.jsx +531 -0
  90. package/src/components/manage/Controlpanels/Users/UserGroupMembershipControlPanel.jsx +3 -3
  91. package/src/components/manage/Controlpanels/Users/UserGroupMembershipListing.jsx +51 -82
  92. package/src/components/manage/Controlpanels/Users/UserGroupMembershipMatrix.jsx +79 -75
  93. package/src/components/manage/DragDropList/DragDropList.jsx +63 -42
  94. package/src/components/manage/Form/BlocksToolbar.jsx +5 -1
  95. package/src/components/manage/Form/Form.jsx +11 -5
  96. package/src/components/manage/Form/InlineForm.jsx +39 -9
  97. package/src/components/manage/Form/InlineFormState.js +8 -0
  98. package/src/components/manage/Multilingual/CreateTranslation.jsx +2 -2
  99. package/src/components/manage/Multilingual/TranslationObject.jsx +4 -3
  100. package/src/components/manage/Preferences/ChangePassword.jsx +2 -2
  101. package/src/components/manage/Preferences/PersonalPreferences.jsx +2 -2
  102. package/src/components/manage/Toast/Toast.jsx +1 -1
  103. package/src/components/manage/Toolbar/Types.jsx +2 -2
  104. package/src/components/manage/Widgets/DatetimeWidget.jsx +9 -5
  105. package/src/components/manage/Widgets/ObjectListWidget.jsx +3 -8
  106. package/src/components/manage/Widgets/RecurrenceWidget/ByDayField.jsx +2 -1
  107. package/src/components/manage/Widgets/RecurrenceWidget/MonthOfTheYearField.jsx +2 -1
  108. package/src/components/manage/Widgets/RecurrenceWidget/Occurences.jsx +2 -1
  109. package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.jsx +7 -2
  110. package/src/components/manage/Widgets/RecurrenceWidget/WeekdayOfTheMonthField.jsx +2 -1
  111. package/src/components/manage/Widgets/SelectUtils.js +1 -1
  112. package/src/components/manage/Widgets/SelectWidget.jsx +1 -1
  113. package/src/components/theme/Footer/Footer.jsx +2 -13
  114. package/src/components/theme/Header/Header.jsx +37 -63
  115. package/src/components/theme/Header/Header.test.jsx +18 -0
  116. package/src/components/theme/Icon/Icon.jsx +2 -2
  117. package/src/components/theme/LanguageSelector/LanguageSelector.js +8 -3
  118. package/src/components/theme/Login/Login.jsx +1 -0
  119. package/src/components/theme/Logo/Logo.jsx +2 -1
  120. package/src/components/theme/MultilingualRedirector/MultilingualRedirector.jsx +2 -2
  121. package/src/components/theme/Navigation/NavItem.jsx +4 -2
  122. package/src/components/theme/NotFound/NotFound.jsx +55 -41
  123. package/src/components/theme/PasswordReset/PasswordReset.jsx +7 -4
  124. package/src/components/theme/PasswordReset/RequestPasswordReset.jsx +1 -1
  125. package/src/components/theme/Sitemap/Sitemap.jsx +5 -3
  126. package/src/components/theme/View/DefaultView.jsx +1 -1
  127. package/src/components/theme/View/EventDatesInfo.jsx +2 -1
  128. package/src/components/theme/View/RenderBlocks.jsx +7 -1
  129. package/src/components/theme/Widgets/DateWidget.jsx +2 -1
  130. package/src/components/theme/Widgets/DatetimeWidget.jsx +2 -1
  131. package/src/components/theme/Widgets/RelationsWidget.jsx +13 -11
  132. package/src/config/ControlPanels.js +2 -0
  133. package/src/config/Widgets.jsx +1 -0
  134. package/src/config/index.js +2 -0
  135. package/src/constants/ActionTypes.js +4 -0
  136. package/src/constants/Languages.js +8 -4
  137. package/src/express-middleware/sitemap.js +36 -4
  138. package/src/helpers/Api/Api.js +1 -1
  139. package/src/helpers/FormValidation/FormValidation.js +11 -2
  140. package/src/helpers/FormValidation/FormValidation.test.js +73 -0
  141. package/src/helpers/Html/Html.jsx +3 -1
  142. package/src/helpers/Html/Html.test.jsx +5 -0
  143. package/src/helpers/MessageLabels/MessageLabels.js +72 -0
  144. package/src/helpers/Robots/Robots.js +24 -6
  145. package/src/helpers/Sitemap/Sitemap.js +44 -2
  146. package/src/helpers/Url/Url.js +27 -6
  147. package/src/helpers/Url/Url.test.js +26 -0
  148. package/src/helpers/Utils/Utils.js +38 -13
  149. package/src/helpers/Utils/Utils.test.js +4 -4
  150. package/src/helpers/Utils/usePagination.js +72 -14
  151. package/src/helpers/Utils/usePagination.test.js +115 -0
  152. package/src/helpers/index.js +7 -2
  153. package/src/hooks/userSession/useToken.js +5 -0
  154. package/src/middleware/Api.test.js +54 -0
  155. package/src/middleware/api.js +8 -4
  156. package/src/reducers/actions/actions.js +1 -1
  157. package/src/reducers/breadcrumbs/breadcrumbs.js +1 -1
  158. package/src/reducers/index.js +2 -0
  159. package/src/reducers/navigation/navigation.js +1 -1
  160. package/src/reducers/relations/relations.js +173 -0
  161. package/src/reducers/types/types.js +1 -1
  162. package/src/routes.js +5 -0
  163. package/src/server.jsx +28 -23
  164. package/test-setup-config.js +1 -0
  165. package/theme/themes/pastanaga/extras/contents.less +1 -0
  166. package/theme/themes/pastanaga/extras/main.less +80 -1
  167. package/theme/themes/pastanaga/extras/search.less +6 -0
  168. package/theme/themes/pastanaga/extras/sidebar.less +4 -0
  169. package/theme/themes/pastanaga/extras/userscontrolpanel.less +99 -76
  170. package/.changelog.draft +0 -28
  171. package/.editorconfig +0 -36
  172. package/.storybook/main.js +0 -127
  173. package/.storybook/manager.js +0 -15
  174. package/.storybook/preview.js +0 -21
  175. package/.storybook/static/previewImage.svg +0 -48
  176. package/.yarnrc.yml +0 -5
  177. package/jsdoc.json +0 -16
  178. package/netlify.toml +0 -5
  179. package/pyvenv.cfg +0 -3
  180. package/share/man/man1/ttx.1 +0 -225
  181. package/src/components/theme/Header/Header.md +0 -27
  182. package/towncrier.toml +0 -33
@@ -18,7 +18,11 @@ import {
18
18
  SET_APIERROR,
19
19
  } from '@plone/volto/constants/ActionTypes';
20
20
  import { changeLanguage } from '@plone/volto/actions';
21
- import { normalizeLanguageName, getCookieOptions } from '@plone/volto/helpers';
21
+ import {
22
+ toGettextLang,
23
+ toReactIntlLang,
24
+ getCookieOptions,
25
+ } from '@plone/volto/helpers';
22
26
  let socket = null;
23
27
 
24
28
  /**
@@ -43,7 +47,7 @@ export function addExpandersToPath(path, type, isAnonymous) {
43
47
  const {
44
48
  url,
45
49
  query: { expand, ...query },
46
- } = qs.parseUrl(path);
50
+ } = qs.parseUrl(path, { decode: false });
47
51
 
48
52
  const expandersFromConfig = apiExpanders
49
53
  .filter((expand) => matchPath(url, expand.match) && expand[type])
@@ -205,11 +209,11 @@ const apiMiddlewareFactory = (api) => ({ dispatch, getState }) => (next) => (
205
209
  const lang = result?.language?.token;
206
210
  if (
207
211
  lang &&
208
- getState().intl.language !== lang &&
212
+ getState().intl.locale !== toReactIntlLang(lang) &&
209
213
  !subrequest &&
210
214
  config.settings.supportedLanguages.includes(lang)
211
215
  ) {
212
- const langFileName = normalizeLanguageName(lang);
216
+ const langFileName = toGettextLang(lang);
213
217
  import('~/../locales/' + langFileName + '.json').then((locale) => {
214
218
  dispatch(changeLanguage(lang, locale.default));
215
219
  });
@@ -46,7 +46,7 @@ export default function actions(state = initialState, action = {}) {
46
46
  'actions',
47
47
  getBaseUrl(flattenToAppURL(action.result['@id'])),
48
48
  );
49
- if (hasExpander) {
49
+ if (hasExpander && !action.subrequest) {
50
50
  return {
51
51
  ...state,
52
52
  error: null,
@@ -45,7 +45,7 @@ export default function breadcrumbs(state = initialState, action = {}) {
45
45
  'breadcrumbs',
46
46
  getBaseUrl(flattenToAppURL(action.result['@id'])),
47
47
  );
48
- if (hasExpander) {
48
+ if (hasExpander && !action.subrequest) {
49
49
  return {
50
50
  ...state,
51
51
  error: null,
@@ -25,6 +25,7 @@ import messages from '@plone/volto/reducers/messages/messages';
25
25
  import navigation from '@plone/volto/reducers/navigation/navigation';
26
26
  import querystring from '@plone/volto/reducers/querystring/querystring';
27
27
  import querystringsearch from '@plone/volto/reducers/querystringsearch/querystringsearch';
28
+ import relations from '@plone/volto/reducers/relations/relations';
28
29
  import roles from '@plone/volto/reducers/roles/roles';
29
30
  import rules from '@plone/volto/reducers/rules/rules';
30
31
  import controlpanelrule from '@plone/volto/reducers/controlPanelRule/controlPanelRule';
@@ -80,6 +81,7 @@ const reducers = {
80
81
  navigation,
81
82
  querystring,
82
83
  querystringsearch,
84
+ relations,
83
85
  roles,
84
86
  rules,
85
87
  controlpanelrule,
@@ -60,7 +60,7 @@ export default function navigation(state = initialState, action = {}) {
60
60
  'navigation',
61
61
  getBaseUrl(flattenToAppURL(action.result['@id'])),
62
62
  );
63
- if (hasExpander) {
63
+ if (hasExpander && !action.subrequest) {
64
64
  return {
65
65
  ...state,
66
66
  error: null,
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Relations reducer.
3
+ * @module reducers/relations/relations
4
+ */
5
+
6
+ import {
7
+ CREATE_RELATIONS,
8
+ DELETE_RELATIONS,
9
+ LIST_RELATIONS,
10
+ REBUILD_RELATIONS,
11
+ } from '@plone/volto/constants/ActionTypes';
12
+
13
+ const initialState = {
14
+ relations: null,
15
+ stats: null,
16
+ create: {
17
+ error: null,
18
+ loaded: false,
19
+ loading: false,
20
+ },
21
+ delete: {
22
+ error: null,
23
+ loaded: false,
24
+ loading: false,
25
+ },
26
+ list: {
27
+ error: null,
28
+ loaded: false,
29
+ loading: false,
30
+ },
31
+ rebuild: {
32
+ error: null,
33
+ loaded: false,
34
+ loading: false,
35
+ },
36
+ subrequests: {},
37
+ };
38
+
39
+ /**
40
+ * Get request key
41
+ * @function getRequestKey
42
+ * @param {string} actionType Action type.
43
+ * @returns {string} Request key.
44
+ */
45
+ function getRequestKey(actionType) {
46
+ return actionType.split('_')[0].toLowerCase();
47
+ }
48
+
49
+ /**
50
+ * Relations reducer.
51
+ * @function relations
52
+ * @param {Object} state Current state.
53
+ * @param {Object} action Action to be handled.
54
+ * @returns {Object} New state.
55
+ */
56
+ export default function relations(state = initialState, action = {}) {
57
+ switch (action.type) {
58
+ case `${CREATE_RELATIONS}_PENDING`:
59
+ case `${DELETE_RELATIONS}_PENDING`:
60
+ case `${REBUILD_RELATIONS}_PENDING`:
61
+ return {
62
+ ...state,
63
+ [getRequestKey(action.type)]: {
64
+ loading: true,
65
+ loaded: false,
66
+ error: null,
67
+ },
68
+ };
69
+ case `${LIST_RELATIONS}_PENDING`:
70
+ return action.subrequest
71
+ ? {
72
+ ...state,
73
+ subrequests: {
74
+ ...state.subrequests,
75
+ [action.subrequest]: {
76
+ ...(state.subrequests[action.subrequest] || {
77
+ relations: null,
78
+ stats: null,
79
+ }),
80
+ loaded: false,
81
+ loading: true,
82
+ error: null,
83
+ },
84
+ },
85
+ }
86
+ : {
87
+ ...state,
88
+ [getRequestKey(action.type)]: {
89
+ loading: true,
90
+ loaded: false,
91
+ error: null,
92
+ },
93
+ };
94
+ case `${LIST_RELATIONS}_SUCCESS`:
95
+ return action.subrequest
96
+ ? {
97
+ ...state,
98
+ subrequests: {
99
+ ...state.subrequests,
100
+ [action.subrequest]: {
101
+ loading: false,
102
+ loaded: true,
103
+ error: null,
104
+ relations: action.result.relations
105
+ ? action.result.relations
106
+ : state.relations,
107
+ stats: null,
108
+ },
109
+ },
110
+ }
111
+ : {
112
+ ...state,
113
+ relations: action.result.relations
114
+ ? action.result.relations
115
+ : state.relations,
116
+ stats: action.result.stats ? action.result : state.stats,
117
+ [getRequestKey(action.type)]: {
118
+ loading: false,
119
+ loaded: true,
120
+ error: null,
121
+ },
122
+ };
123
+ case `${CREATE_RELATIONS}_SUCCESS`:
124
+ case `${DELETE_RELATIONS}_SUCCESS`:
125
+ case `${REBUILD_RELATIONS}_SUCCESS`:
126
+ return {
127
+ ...state,
128
+ [getRequestKey(action.type)]: {
129
+ loading: false,
130
+ loaded: true,
131
+ error: null,
132
+ },
133
+ };
134
+ case `${LIST_RELATIONS}_FAIL`:
135
+ return action.subrequest
136
+ ? {
137
+ ...state,
138
+ subrequests: {
139
+ ...state.subrequests,
140
+ [action.subrequest]: {
141
+ relations: null,
142
+ stats: null,
143
+ loading: false,
144
+ loaded: false,
145
+ error: action.error,
146
+ },
147
+ },
148
+ }
149
+ : {
150
+ ...state,
151
+ relations: null,
152
+ stats: null,
153
+ [getRequestKey(action.type)]: {
154
+ loading: false,
155
+ loaded: false,
156
+ error: action.error,
157
+ },
158
+ };
159
+ case `${CREATE_RELATIONS}_FAIL`:
160
+ case `${DELETE_RELATIONS}_FAIL`:
161
+ case `${REBUILD_RELATIONS}_FAIL`:
162
+ return {
163
+ ...state,
164
+ [getRequestKey(action.type)]: {
165
+ loading: false,
166
+ loaded: false,
167
+ error: action.error,
168
+ },
169
+ };
170
+ default:
171
+ return state;
172
+ }
173
+ }
@@ -39,7 +39,7 @@ export default function types(state = initialState, action = {}) {
39
39
  'types',
40
40
  getBaseUrl(flattenToAppURL(action.result['@id'])),
41
41
  );
42
- if (hasExpander) {
42
+ if (hasExpander && !action.subrequest) {
43
43
  return {
44
44
  ...state,
45
45
  error: null,
package/src/routes.js CHANGED
@@ -29,6 +29,7 @@ import {
29
29
  ModerateComments,
30
30
  NotFound,
31
31
  PasswordReset,
32
+ Relations,
32
33
  Register,
33
34
  Rules,
34
35
  RequestPasswordReset,
@@ -224,6 +225,10 @@ export const defaultRoutes = [
224
225
  path: '/controlpanel/rules',
225
226
  component: RulesControlpanel,
226
227
  },
228
+ {
229
+ path: '/controlpanel/relations',
230
+ component: Relations,
231
+ },
227
232
  {
228
233
  path: '/controlpanel/:id',
229
234
  component: Controlpanel,
package/src/server.jsx CHANGED
@@ -26,8 +26,9 @@ import {
26
26
  Html,
27
27
  Api,
28
28
  persistAuthToken,
29
- normalizeLanguageName,
30
- toLangUnderscoreRegion,
29
+ toBackendLang,
30
+ toGettextLang,
31
+ toReactIntlLang,
31
32
  } from '@plone/volto/helpers';
32
33
  import { changeLanguage } from '@plone/volto/actions';
33
34
 
@@ -44,9 +45,9 @@ let locales = {};
44
45
 
45
46
  if (config.settings) {
46
47
  config.settings.supportedLanguages.forEach((lang) => {
47
- const langFileName = normalizeLanguageName(lang);
48
+ const langFileName = toGettextLang(lang);
48
49
  import('@root/../locales/' + langFileName + '.json').then((locale) => {
49
- locales = { ...locales, [lang]: locale.default };
50
+ locales = { ...locales, [toReactIntlLang(lang)]: locale.default };
50
51
  });
51
52
  });
52
53
  }
@@ -101,13 +102,15 @@ server.use(function (err, req, res, next) {
101
102
  function setupServer(req, res, next) {
102
103
  const api = new Api(req);
103
104
 
104
- const lang = new locale.Locales(
105
- req.universalCookies.get('I18N_LANGUAGE') ||
106
- config.settings.defaultLanguage ||
107
- req.headers['accept-language'],
108
- )
109
- .best(supported)
110
- .toString();
105
+ const lang = toReactIntlLang(
106
+ new locale.Locales(
107
+ req.universalCookies.get('I18N_LANGUAGE') ||
108
+ config.settings.defaultLanguage ||
109
+ req.headers['accept-language'],
110
+ )
111
+ .best(supported)
112
+ .toString(),
113
+ );
111
114
 
112
115
  // Minimum initial state for the fake Redux store instance
113
116
  const initialState = {
@@ -176,13 +179,15 @@ server.get('/*', (req, res) => {
176
179
 
177
180
  const browserdetect = detect(req.headers['user-agent']);
178
181
 
179
- const lang = new locale.Locales(
180
- req.universalCookies.get('I18N_LANGUAGE') ||
181
- config.settings.defaultLanguage ||
182
- req.headers['accept-language'],
183
- )
184
- .best(supported)
185
- .toString();
182
+ const lang = toReactIntlLang(
183
+ new locale.Locales(
184
+ req.universalCookies.get('I18N_LANGUAGE') ||
185
+ config.settings.defaultLanguage ||
186
+ req.headers['accept-language'],
187
+ )
188
+ .best(supported)
189
+ .toString(),
190
+ );
186
191
 
187
192
  const authToken = req.universalCookies.get('auth_token');
188
193
  const initialState = {
@@ -217,7 +222,7 @@ server.get('/*', (req, res) => {
217
222
 
218
223
  loadOnServer({ store, location, routes, api })
219
224
  .then(() => {
220
- const cookie_lang =
225
+ const initialLang =
221
226
  req.universalCookies.get('I18N_LANGUAGE') ||
222
227
  config.settings.defaultLanguage ||
223
228
  req.headers['accept-language'];
@@ -230,15 +235,15 @@ server.get('/*', (req, res) => {
230
235
  // present the language token field, for some reason. In this case, we
231
236
  // should follow the cookie rather then switching the language
232
237
  const contentLang = store.getState().content.get?.error
233
- ? cookie_lang
238
+ ? initialLang
234
239
  : store.getState().content.data?.language?.token ||
235
240
  config.settings.defaultLanguage;
236
241
 
237
- if (cookie_lang !== contentLang) {
238
- const newLocale = toLangUnderscoreRegion(
242
+ if (toBackendLang(initialLang) !== contentLang) {
243
+ const newLang = toReactIntlLang(
239
244
  new locale.Locales(contentLang).best(supported).toString(),
240
245
  );
241
- store.dispatch(changeLanguage(newLocale, locales[newLocale], req));
246
+ store.dispatch(changeLanguage(newLang, locales[newLang], req));
242
247
  }
243
248
 
244
249
  const context = {};
@@ -82,6 +82,7 @@ config.set('settings', {
82
82
  viewableInBrowserObjects: [],
83
83
  styleClassNameConverters,
84
84
  styleClassNameExtenders,
85
+ blockSettingsTabFieldsetsInitialStateOpen: true,
85
86
  });
86
87
  config.set('blocks', {
87
88
  blocksConfig: {
@@ -38,6 +38,7 @@
38
38
  .ui.menu.top-menu {
39
39
  padding: 10px 0;
40
40
  border-bottom: 4px solid #c7d5d8;
41
+ overflow-x: scroll;
41
42
  }
42
43
 
43
44
  .ui.menu .menu.top-menu-menu {
@@ -8,7 +8,6 @@
8
8
  @import (multiple) '../../theme.config';
9
9
 
10
10
  // Extras (third party libs)
11
- @import (less) '~hamburgers/dist/hamburgers.css';
12
11
  @import (less) '~react-toastify/dist/ReactToastify.css';
13
12
 
14
13
  // Mixins
@@ -494,6 +493,86 @@ fieldset.invisible {
494
493
  .hamburger-wrapper {
495
494
  position: relative;
496
495
  z-index: 5;
496
+ width: 70px;
497
+ height: 59px;
498
+ padding: 15px 15px;
499
+
500
+ .hamburger {
501
+ position: relative;
502
+ width: 40px;
503
+ height: 24px;
504
+ padding: 0;
505
+ border: none;
506
+ background-color: transparent;
507
+ cursor: pointer;
508
+ transition: 0.3s ease-in-out;
509
+ }
510
+
511
+ .hamburger::after {
512
+ position: absolute;
513
+ top: 0;
514
+ left: 0;
515
+ display: inline-block;
516
+ width: 100%;
517
+ height: 4px;
518
+ background-color: #000;
519
+ border-radius: 4px;
520
+ content: '';
521
+ transition: 0.3s ease-in-out;
522
+ }
523
+
524
+ .hamburger::before {
525
+ position: absolute;
526
+ top: 20px;
527
+ left: 0;
528
+ display: inline-block;
529
+ width: 100%;
530
+ height: 4px;
531
+ background-color: #000;
532
+ border-radius: 4px;
533
+ content: '';
534
+ transition: 0.3s ease-in-out;
535
+ }
536
+
537
+ .hamburger-inner {
538
+ position: absolute;
539
+ top: 10px;
540
+ left: 0;
541
+ display: inline-block;
542
+ width: 100%;
543
+ height: 4px;
544
+ border-radius: 4px;
545
+ transition: 0.3s ease-in-out;
546
+ }
547
+
548
+ .hamburger.is-active::after,
549
+ .hamburger.is-active::before {
550
+ top: 10px;
551
+ left: 50%;
552
+ width: 0%;
553
+ }
554
+
555
+ .hamburger-inner::after,
556
+ .hamburger-inner::before {
557
+ position: absolute;
558
+ top: 0;
559
+ left: 0;
560
+ display: block;
561
+ width: 100%;
562
+ height: 4px;
563
+ background-color: #000;
564
+ border-radius: 4px;
565
+ content: '';
566
+ transition: 0.3s ease-in-out;
567
+ }
568
+
569
+ .hamburger.is-active .hamburger-inner::after {
570
+ transform: rotate(45deg);
571
+ }
572
+
573
+ .hamburger.is-active .hamburger-inner::before {
574
+ transform: rotate(-45deg);
575
+ }
497
576
  }
498
577
 
499
578
  .mobile-menu {
@@ -75,3 +75,9 @@
75
75
  text-align: center;
76
76
  }
77
77
  }
78
+
79
+ .block.search {
80
+ .advanced-facet-hidden {
81
+ display: none !important;
82
+ }
83
+ }
@@ -489,3 +489,7 @@
489
489
  margin-left: 5px;
490
490
  }
491
491
  }
492
+
493
+ .formtabs {
494
+ flex-wrap: wrap;
495
+ }