@panneau/app 1.0.0-alpha.99 → 1.0.3-alpha.0

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/es/index.js CHANGED
@@ -1,293 +1,56 @@
1
1
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import _objectSpread from '@babel/runtime/helpers/objectSpread2';
3
- import { PropTypes as PropTypes$1 } from '@panneau/core';
4
- import { useFormsComponents, FormProvider, usePanneauResources, useUrlGenerator, usePanneau, usePanneauColorScheme, ResourceProvider, useFiltersComponents, useListsComponents, useFormComponent, useRoutes, PanneauProvider, UppyProvider, RoutesProvider, ComponentsProvider } from '@panneau/core/contexts';
5
- import { useApi, useResourceStore, useResourceUpdate, useResourceDestroy, useResourceItem, useResourceItems, ApiProvider } from '@panneau/data';
3
+ import PropTypes$1 from 'prop-types';
4
+ import React, { useMemo, useCallback, useState, useEffect } from 'react';
5
+ import { useLocation, useNavigate, useParams, Route, Routes, MemoryRouter } from 'react-router';
6
+ import { Link, BrowserRouter } from 'react-router-dom';
7
+ import { useUser, useLogout, useAuth, AuthProvider } from '@panneau/auth';
8
+ import { PropTypes } from '@panneau/core';
9
+ import { useLocales, useFormsComponents, FormProvider, useUrlGenerator, usePanneauResources, usePanneau, usePanneauColorScheme, ResourceProvider, useFiltersComponents, useListsComponents, useComponentsManager, useFormComponent, useRoutes, PanneauProvider, UppyProvider, RoutesProvider, ComponentsProvider } from '@panneau/core/contexts';
10
+ import { useResourceStore, useResourceUpdate, useResourceDestroy, useResourceItem, useResourceItems, ApiProvider } from '@panneau/data';
6
11
  import DisplaysProvider from '@panneau/displays';
7
12
  import FieldsProvider from '@panneau/fields';
8
13
  import FiltersProvider from '@panneau/filters';
9
14
  import FormsProvider from '@panneau/forms';
10
- import { ResourceMessage, IntlProvider } from '@panneau/intl';
15
+ import { useResourceValues, IntlProvider } from '@panneau/intl';
11
16
  import ListsProvider from '@panneau/lists';
12
- import PropTypes from 'prop-types';
13
- import React, { useState, useCallback, useEffect, useContext, useMemo } from 'react';
14
- import { useLocation, useHistory, Switch, Route, Redirect, MemoryRouter } from 'react-router';
15
- import { Link, BrowserRouter } from 'react-router-dom';
16
17
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
17
18
  import { getComponentFromName } from '@panneau/core/utils';
18
- import { useResourceUrlGenerator, useForm } from '@panneau/core/hooks';
19
- import { parse, stringify } from 'query-string';
20
19
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
20
+ import { parse, stringify } from 'query-string';
21
+ import { FormattedMessage, defineMessages } from 'react-intl';
22
+ import { useResourceUrlGenerator, useForm } from '@panneau/core/hooks';
23
+ import classNames from 'classnames';
21
24
  import Button from '@panneau/element-button';
22
25
  import Form from '@panneau/element-form';
23
- import classNames from 'classnames';
24
- import { FormattedMessage, defineMessages } from 'react-intl';
25
26
  import Navbar from '@panneau/element-navbar';
26
27
  import Menu from '@panneau/element-menu';
27
28
  import Label from '@panneau/element-label';
29
+ import isString from 'lodash/isString';
28
30
  import Alert from '@panneau/element-alert';
29
31
  import Dropdown from '@panneau/element-dropdown';
32
+ import Pagination from '@panneau/element-pagination';
33
+ import _toPropertyKey from '@babel/runtime/helpers/toPropertyKey';
34
+ import { faUndo } from '@fortawesome/free-solid-svg-icons';
35
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
36
+ import FormGroup from '@panneau/element-form-group';
30
37
 
31
- var useAuthCheck = function useAuthCheck() {
32
- var _useState = useState(false),
33
- _useState2 = _slicedToArray(_useState, 2),
34
- loading = _useState2[0],
35
- setLoading = _useState2[1];
36
-
37
- var api = useApi();
38
- var check = useCallback(function () {
39
- setLoading(true);
40
- return api.auth.check().then(function (response) {
41
- setLoading(false);
42
- return response;
43
- })["catch"](function (e) {
44
- setLoading(false);
45
- throw e;
46
- });
47
- }, [api, setLoading]);
48
- return {
49
- check: check,
50
- loading: loading
51
- };
52
- };
53
-
54
- var useAuthLogin = function useAuthLogin() {
55
- var _useState = useState(false),
56
- _useState2 = _slicedToArray(_useState, 2),
57
- loading = _useState2[0],
58
- setLoading = _useState2[1];
59
-
60
- var api = useApi();
61
- var login = useCallback(function (email, password) {
62
- setLoading(true);
63
- return api.auth.login(email, password).then(function (response) {
64
- setLoading(false);
65
- return response;
66
- })["catch"](function (e) {
67
- setLoading(false);
68
- throw e;
69
- });
70
- }, [api, setLoading]);
71
- return {
72
- login: login,
73
- loading: loading
74
- };
75
- };
76
-
77
- var useAuthLogout = function useAuthLogout() {
78
- var _useState = useState(false),
79
- _useState2 = _slicedToArray(_useState, 2),
80
- loading = _useState2[0],
81
- setLoading = _useState2[1];
82
-
83
- var api = useApi();
84
- var logout = useCallback(function () {
85
- setLoading(true);
86
- return api.auth.logout().then(function (response) {
87
- setLoading(false);
88
- return response;
89
- })["catch"](function (e) {
90
- setLoading(false);
91
- throw e;
92
- });
93
- }, [api, setLoading]);
94
- return {
95
- logout: logout,
96
- loading: loading
97
- };
98
- };
99
-
100
- var useAuthRegister = function useAuthRegister() {
101
- var _useState = useState(false),
102
- _useState2 = _slicedToArray(_useState, 2),
103
- loading = _useState2[0],
104
- setLoading = _useState2[1];
105
-
106
- var api = useApi();
107
- var register = useCallback(function (data) {
108
- setLoading(true);
109
- return api.auth.register(data).then(function (response) {
110
- setLoading(false);
111
- return response;
112
- })["catch"](function (e) {
113
- setLoading(false);
114
- throw e;
115
- });
116
- }, [api, setLoading]);
117
- return {
118
- register: register,
119
- loading: loading
120
- };
121
- };
122
-
123
- var useAuthRequestPassword = function useAuthRequestPassword() {
124
- var _useState = useState(false),
125
- _useState2 = _slicedToArray(_useState, 2),
126
- loading = _useState2[0],
127
- setLoading = _useState2[1];
128
-
129
- var api = useApi();
130
- var request = useCallback(function (email) {
131
- setLoading(true);
132
- return api.auth.requestPassword(email).then(function (response) {
133
- setLoading(false);
134
- return response;
135
- })["catch"](function (e) {
136
- setLoading(false);
137
- throw e;
138
- });
139
- }, [api, setLoading]);
140
- return {
141
- request: request,
142
- loading: loading
143
- };
144
- };
145
-
146
- var useAuthResetPassword = function useAuthResetPassword() {
147
- var _useState = useState(false),
148
- _useState2 = _slicedToArray(_useState, 2),
149
- loading = _useState2[0],
150
- setLoading = _useState2[1];
151
-
152
- var api = useApi();
153
- var reset = useCallback(function (data) {
154
- setLoading(true);
155
- return api.auth.resetPassword(data).then(function (response) {
156
- setLoading(false);
157
- return response;
158
- })["catch"](function (e) {
159
- setLoading(false);
160
- throw e;
161
- });
162
- }, [api, setLoading]);
163
- return {
164
- reset: reset,
165
- loading: loading
166
- };
167
- };
168
-
169
- var AuthContext = /*#__PURE__*/React.createContext(null);
170
- var useAuth = function useAuth() {
171
- return useContext(AuthContext);
172
- };
173
- var useUser = function useUser() {
174
- var _useAuth = useAuth(),
175
- user = _useAuth.user;
176
-
177
- return user;
178
- };
179
- var useLogout = function useLogout() {
180
- var _useAuth3 = useAuth(),
181
- logout = _useAuth3.logout;
182
-
183
- return logout;
184
- };
185
- var propTypes$o = {
186
- children: PropTypes.node.isRequired,
187
- user: PropTypes$1.user,
188
- checkOnMount: PropTypes.bool
189
- };
190
- var defaultProps$o = {
191
- user: null,
192
- checkOnMount: false
193
- };
194
- var AuthProvider = function AuthProvider(_ref) {
195
- var initialUser = _ref.user,
196
- checkOnMount = _ref.checkOnMount,
197
- children = _ref.children;
198
-
199
- // const route = useUrlGenerator();
200
- var _useState = useState(initialUser),
201
- _useState2 = _slicedToArray(_useState, 2),
202
- user = _useState2[0],
203
- setUser = _useState2[1];
204
-
205
- var _useAuthLogin = useAuthLogin(),
206
- authLogin = _useAuthLogin.login;
207
-
208
- var _useAuthLogout = useAuthLogout(),
209
- authLogout = _useAuthLogout.logout;
210
-
211
- var _useAuthCheck = useAuthCheck(),
212
- authCheck = _useAuthCheck.check;
213
-
214
- var _useAuthRegister = useAuthRegister(),
215
- authRegister = _useAuthRegister.register;
216
-
217
- var _useAuthRequestPasswo = useAuthRequestPassword(),
218
- authRequestPassword = _useAuthRequestPasswo.request;
219
-
220
- var _useAuthResetPassword = useAuthResetPassword(),
221
- authResetPassword = _useAuthResetPassword.reset;
222
-
223
- var login = useCallback(function (email, password) {
224
- return authLogin(email, password).then(function (newUser) {
225
- setUser(newUser);
226
- return newUser;
227
- });
228
- }, [authLogin, setUser]);
229
- var logout = useCallback(function () {
230
- return authLogout().then(function () {
231
- setUser(null);
232
- }).then(function () {
233
- console.log('logout redirect'); // eslint-disable-line
234
-
235
- window.location.href = '/';
236
- });
237
- }, [authLogout, setUser]);
238
- var register = useCallback(function (data) {
239
- return authRegister(data).then(function (newUser) {
240
- setUser(newUser);
241
- return newUser;
242
- });
243
- }, [authRegister, setUser]);
244
- var requestPassword = useCallback(function (email) {
245
- return authRequestPassword(email);
246
- }, [authRequestPassword]);
247
- var resetPassword = useCallback(function (data) {
248
- return authResetPassword(data);
249
- }, [authResetPassword]);
250
- useEffect(function () {
251
- if (checkOnMount) {
252
- authCheck().then(function () {
253
- var newUser = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
254
- setUser(newUser);
255
- })["catch"](function () {
256
- setUser(null);
257
- });
258
- }
259
- }, [authCheck, setUser, checkOnMount]);
260
- return /*#__PURE__*/React.createElement(AuthContext.Provider, {
261
- value: {
262
- user: user,
263
- setUser: setUser,
264
- loggedIn: user !== null,
265
- logout: logout,
266
- login: login,
267
- register: register,
268
- requestPassword: requestPassword,
269
- resetPassword: resetPassword
270
- }
271
- }, children);
272
- };
273
- AuthProvider.propTypes = propTypes$o;
274
- AuthProvider.defaultProps = defaultProps$o;
275
-
276
- var propTypes$n = {
277
- resource: PropTypes$1.resource.isRequired,
278
- action: PropTypes.string,
279
- previous: PropTypes.string,
280
- fields: PropTypes$1.fields.isRequired,
281
- value: PropTypes.object,
38
+ var _excluded$5 = ["resource", "action", "previous", "status", "value", "onSubmit", "errors", "generalError", "className"];
39
+ var propTypes$m = {
40
+ resource: PropTypes.resource.isRequired,
41
+ action: PropTypes$1.string,
42
+ previous: PropTypes$1.string,
43
+ fields: PropTypes.fields.isRequired,
44
+ value: PropTypes$1.object,
282
45
  // eslint-disable-line react/forbid-prop-types
283
- onChange: PropTypes.func.isRequired,
284
- onSubmit: PropTypes.func,
285
- status: PropTypes$1.formStatus,
286
- generalError: PropTypes.string,
287
- errors: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)),
288
- className: PropTypes.string
46
+ onChange: PropTypes$1.func.isRequired,
47
+ onSubmit: PropTypes$1.func,
48
+ status: PropTypes.formStatus,
49
+ generalError: PropTypes$1.string,
50
+ errors: PropTypes$1.objectOf(PropTypes$1.arrayOf(PropTypes$1.string)),
51
+ className: PropTypes$1.string
289
52
  };
290
- var defaultProps$n = {
53
+ var defaultProps$m = {
291
54
  action: null,
292
55
  previous: null,
293
56
  status: null,
@@ -304,26 +67,59 @@ var DeleteForm = function DeleteForm(_ref) {
304
67
  previous = _ref.previous;
305
68
  _ref.status;
306
69
  var value = _ref.value,
307
- onSubmit = _ref.onSubmit,
70
+ onSubmit = _ref.onSubmit;
71
+ _ref.errors;
72
+ var generalError = _ref.generalError,
308
73
  className = _ref.className,
309
- props = _objectWithoutProperties(_ref, ["resource", "action", "previous", "status", "value", "onSubmit", "className"]);
74
+ props = _objectWithoutProperties(_ref, _excluded$5);
310
75
 
76
+ var _ref2 = value || {},
77
+ _ref2$id = _ref2.id,
78
+ id = _ref2$id === void 0 ? null : _ref2$id;
79
+
80
+ var resourceValues = useResourceValues(resource, {
81
+ id: id
82
+ });
311
83
  return /*#__PURE__*/React.createElement(Form, Object.assign({
312
- className: classNames(['form', _defineProperty({}, className, className !== null)]),
84
+ className: classNames(['form', _defineProperty({
85
+ 'invalid-feedback': generalError !== null
86
+ }, className, className !== null)]),
313
87
  action: action,
314
88
  onSubmit: onSubmit,
315
- withoutActions: true
89
+ withoutActions: true,
90
+ withoutErrors: true
316
91
  }, props), /*#__PURE__*/React.createElement("div", {
317
92
  className: "card"
318
93
  }, /*#__PURE__*/React.createElement("div", {
319
94
  className: "card-body"
320
- }, /*#__PURE__*/React.createElement(ResourceMessage, {
321
- resource: resource,
322
- values: value,
323
- id: "resources.confirm_delete",
324
- defaultMessage: "Are you sure you want to delete {the_singular} #{id}?",
325
- description: "Confirmation message"
326
- })), /*#__PURE__*/React.createElement("div", {
95
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
96
+ values: resourceValues,
97
+ id: "yzfiXJ",
98
+ defaultMessage: [{
99
+ "type": 0,
100
+ "value": "Are you sure you want to delete "
101
+ }, {
102
+ "type": 1,
103
+ "value": "the_singular"
104
+ }, {
105
+ "type": 0,
106
+ "value": " #"
107
+ }, {
108
+ "type": 1,
109
+ "value": "id"
110
+ }, {
111
+ "type": 0,
112
+ "value": "?"
113
+ }]
114
+ }), generalError ? /*#__PURE__*/React.createElement("p", {
115
+ className: "text-danger"
116
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
117
+ id: "y9zauY",
118
+ defaultMessage: [{
119
+ "type": 0,
120
+ "value": "An error occured and we could not delete this item successfully."
121
+ }]
122
+ })) : null), /*#__PURE__*/React.createElement("div", {
327
123
  className: "card-body d-flex"
328
124
  }, previous !== null ? /*#__PURE__*/React.createElement(Button, {
329
125
  href: previous,
@@ -349,19 +145,20 @@ var DeleteForm = function DeleteForm(_ref) {
349
145
  })))));
350
146
  };
351
147
 
352
- DeleteForm.propTypes = propTypes$n;
353
- DeleteForm.defaultProps = defaultProps$n;
148
+ DeleteForm.propTypes = propTypes$m;
149
+ DeleteForm.defaultProps = defaultProps$m;
354
150
 
355
- var propTypes$m = {
356
- component: PropTypes.string,
357
- resource: PropTypes$1.resource.isRequired,
358
- item: PropTypes.object,
151
+ var _excluded$4 = ["component", "resource", "onSuccess", "item", "type", "isDelete"];
152
+ var propTypes$l = {
153
+ component: PropTypes$1.string,
154
+ resource: PropTypes.resource.isRequired,
155
+ item: PropTypes$1.object,
359
156
  // eslint-disable-line react/forbid-prop-types
360
- type: PropTypes.string,
361
- onSuccess: PropTypes.func,
362
- isDelete: PropTypes.bool
157
+ type: PropTypes$1.string,
158
+ onSuccess: PropTypes$1.func,
159
+ isDelete: PropTypes$1.bool
363
160
  };
364
- var defaultProps$m = {
161
+ var defaultProps$l = {
365
162
  component: null,
366
163
  item: null,
367
164
  type: null,
@@ -376,8 +173,9 @@ var ResourceForm = function ResourceForm(_ref) {
376
173
  item = _ref.item,
377
174
  type = _ref.type,
378
175
  isDelete = _ref.isDelete,
379
- props = _objectWithoutProperties(_ref, ["component", "resource", "onSuccess", "item", "type", "isDelete"]);
176
+ props = _objectWithoutProperties(_ref, _excluded$4);
380
177
 
178
+ var locales = useLocales();
381
179
  var FormComponents = useFormsComponents();
382
180
  var _resource$fields = resource.fields,
383
181
  resourceFields = _resource$fields === void 0 ? [] : _resource$fields,
@@ -458,14 +256,20 @@ var ResourceForm = function ResourceForm(_ref) {
458
256
  var _useState = useState(getInitialValue()),
459
257
  _useState2 = _slicedToArray(_useState, 2),
460
258
  value = _useState2[0],
461
- setValue = _useState2[1];
259
+ setValueState = _useState2[1];
260
+
261
+ var setValue = useCallback(function (newValue) {
262
+ // console.log('new value in resource form', newValue); // eslint-disable-line
263
+ setValueState(newValue);
264
+ }, [setValueState]);
462
265
 
463
266
  var _useForm = useForm({
464
267
  fields: finalFields,
465
268
  value: value,
466
269
  postForm: postForm,
467
270
  setValue: setValue,
468
- onComplete: onSuccess
271
+ onComplete: onSuccess,
272
+ locales: locales
469
273
  }),
470
274
  fields = _useForm.fields,
471
275
  onSubmit = _useForm.onSubmit,
@@ -482,9 +286,10 @@ var ResourceForm = function ResourceForm(_ref) {
482
286
  }) : modifyAction;
483
287
  var defaultFormName = isDelete ? component || formComponent || null : component || formComponent || defaultComponent || 'normal'; // Form component
484
288
 
485
- var FormComponent = getComponentFromName(defaultFormName, FormComponents, isDelete ? DeleteForm : component); // Lisen to item value change
289
+ var FormComponent = getComponentFromName(defaultFormName, FormComponents, isDelete ? DeleteForm : component); // Lisen to item value change - this is important
486
290
 
487
291
  useEffect(function () {
292
+ // console.log('get initial value from the top'); // eslint-disable-line
488
293
  setValue(getInitialValue());
489
294
  }, [getInitialValue, setValue]);
490
295
  return /*#__PURE__*/React.createElement(FormProvider, {
@@ -505,62 +310,13 @@ var ResourceForm = function ResourceForm(_ref) {
505
310
  })));
506
311
  };
507
312
 
508
- ResourceForm.propTypes = propTypes$m;
509
- ResourceForm.defaultProps = defaultProps$m;
510
-
511
- var propTypes$l = {
512
- className: PropTypes.string,
513
- itemClassName: PropTypes.string,
514
- linkClassName: PropTypes.string
515
- };
516
- var defaultProps$l = {
517
- className: null,
518
- itemClassName: null,
519
- linkClassName: null
520
- };
521
-
522
- var ResourcesMenu = function ResourcesMenu(_ref) {
523
- var className = _ref.className,
524
- itemClassName = _ref.itemClassName,
525
- linkClassName = _ref.linkClassName;
526
-
527
- var _useLocation = useLocation(),
528
- pathname = _useLocation.pathname;
529
-
530
- var resources = usePanneauResources();
531
- var resourceRoute = useResourceUrlGenerator();
532
- var items = useMemo(function () {
533
- return resources.filter(function (_ref2) {
534
- var _ref2$settings = _ref2.settings;
535
- _ref2$settings = _ref2$settings === void 0 ? {} : _ref2$settings;
536
- var _ref2$settings$hideIn = _ref2$settings.hideInNavbar,
537
- hideInNavbar = _ref2$settings$hideIn === void 0 ? false : _ref2$settings$hideIn;
538
- return !hideInNavbar;
539
- }).map(function (it) {
540
- var url = resourceRoute(it, 'index');
541
- return {
542
- id: it.id,
543
- label: it.name,
544
- href: url,
545
- active: pathname.substr(0, url.length) === url
546
- };
547
- });
548
- }, [resources, pathname, resourceRoute]);
549
- return /*#__PURE__*/React.createElement(Menu, {
550
- items: items,
551
- className: className,
552
- itemClassName: itemClassName,
553
- linkClassName: linkClassName
554
- });
555
- };
556
-
557
- ResourcesMenu.propTypes = propTypes$l;
558
- ResourcesMenu.defaultProps = defaultProps$l;
313
+ ResourceForm.propTypes = propTypes$l;
314
+ ResourceForm.defaultProps = defaultProps$l;
559
315
 
560
316
  var propTypes$k = {
561
- className: PropTypes.string,
562
- itemClassName: PropTypes.string,
563
- linkClassName: PropTypes.string
317
+ className: PropTypes$1.string,
318
+ itemClassName: PropTypes$1.string,
319
+ linkClassName: PropTypes$1.string
564
320
  };
565
321
  var defaultProps$k = {
566
322
  className: null,
@@ -589,7 +345,7 @@ var AccountMenu = function AccountMenu(_ref) {
589
345
  "value": "Account"
590
346
  }]
591
347
  }),
592
- href: route('auth.account'),
348
+ href: route('account'),
593
349
  dropdown: [// {
594
350
  // label: (
595
351
  // <FormattedMessage
@@ -597,7 +353,7 @@ var AccountMenu = function AccountMenu(_ref) {
597
353
  // description="Menu label"
598
354
  // />
599
355
  // ),
600
- // href: route('auth.account'),
356
+ // href: route('panneau.account'),
601
357
  // },
602
358
  {
603
359
  label: /*#__PURE__*/React.createElement(FormattedMessage, {
@@ -633,9 +389,58 @@ var AccountMenu = function AccountMenu(_ref) {
633
389
  AccountMenu.propTypes = propTypes$k;
634
390
  AccountMenu.defaultProps = defaultProps$k;
635
391
 
392
+ var propTypes$j = {
393
+ className: PropTypes$1.string,
394
+ itemClassName: PropTypes$1.string,
395
+ linkClassName: PropTypes$1.string
396
+ };
397
+ var defaultProps$j = {
398
+ className: null,
399
+ itemClassName: null,
400
+ linkClassName: null
401
+ };
402
+
403
+ var ResourcesMenu = function ResourcesMenu(_ref) {
404
+ var className = _ref.className,
405
+ itemClassName = _ref.itemClassName,
406
+ linkClassName = _ref.linkClassName;
407
+
408
+ var _useLocation = useLocation(),
409
+ pathname = _useLocation.pathname;
410
+
411
+ var resources = usePanneauResources();
412
+ var resourceRoute = useResourceUrlGenerator();
413
+ var items = useMemo(function () {
414
+ return resources.filter(function (_ref2) {
415
+ var _ref2$settings = _ref2.settings;
416
+ _ref2$settings = _ref2$settings === void 0 ? {} : _ref2$settings;
417
+ var _ref2$settings$hideIn = _ref2$settings.hideInNavbar,
418
+ hideInNavbar = _ref2$settings$hideIn === void 0 ? false : _ref2$settings$hideIn;
419
+ return !hideInNavbar;
420
+ }).map(function (it) {
421
+ var url = resourceRoute(it, 'index');
422
+ return {
423
+ id: it.id,
424
+ label: it.name,
425
+ href: url,
426
+ active: pathname.substr(0, url.length) === url
427
+ };
428
+ });
429
+ }, [resources, pathname, resourceRoute]);
430
+ return /*#__PURE__*/React.createElement(Menu, {
431
+ items: items,
432
+ className: className,
433
+ itemClassName: itemClassName,
434
+ linkClassName: linkClassName
435
+ });
436
+ };
437
+
438
+ ResourcesMenu.propTypes = propTypes$j;
439
+ ResourcesMenu.defaultProps = defaultProps$j;
440
+
636
441
  /* eslint-disable react/jsx-props-no-spreading */
637
- var propTypes$j = {};
638
- var defaultProps$j = {};
442
+ var propTypes$i = {};
443
+ var defaultProps$i = {};
639
444
 
640
445
  var MainNavbar = function MainNavbar(props) {
641
446
  var _usePanneau = usePanneau(),
@@ -662,14 +467,14 @@ var MainNavbar = function MainNavbar(props) {
662
467
  }));
663
468
  };
664
469
 
665
- MainNavbar.propTypes = propTypes$j;
666
- MainNavbar.defaultProps = defaultProps$j;
470
+ MainNavbar.propTypes = propTypes$i;
471
+ MainNavbar.defaultProps = defaultProps$i;
667
472
 
668
- var propTypes$i = {
669
- children: PropTypes.node.isRequired,
670
- fullscreen: PropTypes.bool
473
+ var propTypes$h = {
474
+ children: PropTypes$1.node.isRequired,
475
+ fullscreen: PropTypes$1.bool
671
476
  };
672
- var defaultProps$i = {
477
+ var defaultProps$h = {
673
478
  fullscreen: false
674
479
  };
675
480
 
@@ -694,17 +499,17 @@ var MainLayout = function MainLayout(_ref) {
694
499
  }, children));
695
500
  };
696
501
 
697
- MainLayout.propTypes = propTypes$i;
698
- MainLayout.defaultProps = defaultProps$i;
502
+ MainLayout.propTypes = propTypes$h;
503
+ MainLayout.defaultProps = defaultProps$h;
699
504
 
700
- var propTypes$h = {
701
- title: PropTypes$1.label,
702
- actions: PropTypes.node,
703
- small: PropTypes.bool,
704
- className: PropTypes.string,
705
- children: PropTypes.node
505
+ var propTypes$g = {
506
+ title: PropTypes.label,
507
+ actions: PropTypes$1.node,
508
+ small: PropTypes$1.bool,
509
+ className: PropTypes$1.string,
510
+ children: PropTypes$1.node
706
511
  };
707
- var defaultProps$h = {
512
+ var defaultProps$g = {
708
513
  title: null,
709
514
  actions: null,
710
515
  small: false,
@@ -721,14 +526,12 @@ var PageHeader = function PageHeader(_ref) {
721
526
  className = _ref.className,
722
527
  children = _ref.children;
723
528
 
724
- var _usePanneau = usePanneau(),
725
- components = _usePanneau.components;
726
-
529
+ // TODO: fix page header components
530
+ // const { components } = usePanneau();
727
531
  var _usePanneauColorSchem = usePanneauColorScheme(),
728
532
  text = _usePanneauColorSchem.text,
729
- background = _usePanneauColorSchem.background;
533
+ background = _usePanneauColorSchem.background; // console.log('page-header', components); // eslint-disable-line
730
534
 
731
- console.log('page-header', components); // eslint-disable-line
732
535
 
733
536
  var inner = /*#__PURE__*/React.createElement("div", {
734
537
  className: "d-flex align-items-center flex-wrap"
@@ -748,25 +551,25 @@ var PageHeader = function PageHeader(_ref) {
748
551
  }, inner)) : inner), children);
749
552
  };
750
553
 
751
- PageHeader.propTypes = propTypes$h;
752
- PageHeader.defaultProps = defaultProps$h;
554
+ PageHeader.propTypes = propTypes$g;
555
+ PageHeader.defaultProps = defaultProps$g;
753
556
 
754
- var propTypes$g = {
755
- resource: PropTypes$1.resource.isRequired
557
+ var propTypes$f = {
558
+ resource: PropTypes.resource.isRequired
756
559
  };
757
- var defaultProps$g = {};
560
+ var defaultProps$f = {};
758
561
 
759
562
  var ResourceCreatePage = function ResourceCreatePage(_ref) {
760
563
  var resource = _ref.resource;
761
- var history = useHistory();
564
+ var navigate = useNavigate();
762
565
 
763
566
  var _useLocation = useLocation(),
764
567
  search = _useLocation.search;
765
568
 
766
569
  var resourceRoute = useResourceUrlGenerator(resource);
767
570
  var onSuccess = useCallback(function () {
768
- history.push("".concat(resourceRoute('index'), "?created=true"));
769
- }, [history, resourceRoute]);
571
+ navigate("".concat(resourceRoute('index'), "?created=true"));
572
+ }, [navigate, resourceRoute]);
770
573
 
771
574
  var _useMemo = useMemo(function () {
772
575
  return parse(search);
@@ -774,14 +577,20 @@ var ResourceCreatePage = function ResourceCreatePage(_ref) {
774
577
  _useMemo$type = _useMemo.type,
775
578
  type = _useMemo$type === void 0 ? null : _useMemo$type;
776
579
 
580
+ var resourceValues = useResourceValues(resource);
777
581
  return /*#__PURE__*/React.createElement(ResourceProvider, {
778
582
  resource: resource
779
583
  }, /*#__PURE__*/React.createElement(MainLayout, null, /*#__PURE__*/React.createElement(PageHeader, {
780
- title: /*#__PURE__*/React.createElement(ResourceMessage, {
781
- resource: resource,
782
- id: "resources.create",
783
- defaultMessage: "Create {a_singular}",
784
- description: "Page title"
584
+ title: /*#__PURE__*/React.createElement(FormattedMessage, {
585
+ values: resourceValues,
586
+ id: "6viUpq",
587
+ defaultMessage: [{
588
+ "type": 0,
589
+ "value": "Create "
590
+ }, {
591
+ "type": 1,
592
+ "value": "a_singular"
593
+ }]
785
594
  }),
786
595
  small: true
787
596
  }), /*#__PURE__*/React.createElement("div", {
@@ -797,27 +606,29 @@ var ResourceCreatePage = function ResourceCreatePage(_ref) {
797
606
  }))))));
798
607
  };
799
608
 
800
- ResourceCreatePage.propTypes = propTypes$g;
801
- ResourceCreatePage.defaultProps = defaultProps$g;
609
+ ResourceCreatePage.propTypes = propTypes$f;
610
+ ResourceCreatePage.defaultProps = defaultProps$f;
802
611
 
803
- var propTypes$f = {
804
- resource: PropTypes$1.resource.isRequired,
805
- itemId: PropTypes.string.isRequired
612
+ var propTypes$e = {
613
+ resource: PropTypes.resource.isRequired
806
614
  };
807
- var defaultProps$f = {};
615
+ var defaultProps$e = {};
808
616
 
809
617
  var ResourceDeletePage = function ResourceDeletePage(_ref) {
810
- var resource = _ref.resource,
811
- itemId = _ref.itemId;
812
- var history = useHistory();
618
+ var resource = _ref.resource;
619
+
620
+ var _useParams = useParams(),
621
+ itemId = _useParams.id;
622
+
623
+ var navigate = useNavigate();
813
624
  var resourceRoute = useResourceUrlGenerator(resource);
814
625
 
815
626
  var _useResourceItem = useResourceItem(resource, itemId),
816
627
  item = _useResourceItem.item;
817
628
 
818
629
  var onSuccess = useCallback(function () {
819
- return history.push("".concat(resourceRoute('index'), "?deleted=true"));
820
- }, [history, resourceRoute]); // Navigate back
630
+ return navigate("".concat(resourceRoute('index'), "?deleted=true"));
631
+ }, [navigate, resourceRoute]); // Navigate back
821
632
 
822
633
  var _ref2 = history || {},
823
634
  _ref2$entries = _ref2.entries,
@@ -825,14 +636,20 @@ var ResourceDeletePage = function ResourceDeletePage(_ref) {
825
636
 
826
637
  var previousEntry = entries !== null && entries.length > 1 ? entries[entries.length - 2] : null;
827
638
  var previous = (previousEntry === null || previousEntry === void 0 ? void 0 : previousEntry.pathname) || null;
639
+ var resourceValues = useResourceValues(resource);
828
640
  return /*#__PURE__*/React.createElement(ResourceProvider, {
829
641
  resource: resource
830
642
  }, /*#__PURE__*/React.createElement(MainLayout, null, /*#__PURE__*/React.createElement(PageHeader, {
831
- title: /*#__PURE__*/React.createElement(ResourceMessage, {
832
- resource: resource,
833
- id: "resources.delete",
834
- defaultMessage: "Delete {a_singular}",
835
- description: "Page title"
643
+ title: /*#__PURE__*/React.createElement(FormattedMessage, {
644
+ values: resourceValues,
645
+ id: "zN5N/Q",
646
+ defaultMessage: [{
647
+ "type": 0,
648
+ "value": "Delete "
649
+ }, {
650
+ "type": 1,
651
+ "value": "a_singular"
652
+ }]
836
653
  }),
837
654
  small: true
838
655
  }), /*#__PURE__*/React.createElement("div", {
@@ -851,18 +668,19 @@ var ResourceDeletePage = function ResourceDeletePage(_ref) {
851
668
  }) : null)))));
852
669
  };
853
670
 
854
- ResourceDeletePage.propTypes = propTypes$f;
855
- ResourceDeletePage.defaultProps = defaultProps$f;
671
+ ResourceDeletePage.propTypes = propTypes$e;
672
+ ResourceDeletePage.defaultProps = defaultProps$e;
856
673
 
857
- var propTypes$e = {
858
- resource: PropTypes$1.resource.isRequired,
859
- itemId: PropTypes.string.isRequired
674
+ var propTypes$d = {
675
+ resource: PropTypes.resource.isRequired
860
676
  };
861
- var defaultProps$e = {};
677
+ var defaultProps$d = {};
862
678
 
863
679
  var ResourceEditPage = function ResourceEditPage(_ref) {
864
- var resource = _ref.resource,
865
- itemId = _ref.itemId;
680
+ var resource = _ref.resource;
681
+
682
+ var _useParams = useParams(),
683
+ itemId = _useParams.id;
866
684
 
867
685
  var _useResourceItem = useResourceItem(resource, itemId),
868
686
  item = _useResourceItem.item;
@@ -882,14 +700,20 @@ var ResourceEditPage = function ResourceEditPage(_ref) {
882
700
  useEffect(function () {
883
701
  setEditItem(item);
884
702
  }, [item, setEditItem]);
703
+ var resourceValues = useResourceValues(resource);
885
704
  return /*#__PURE__*/React.createElement(ResourceProvider, {
886
705
  resource: resource
887
706
  }, /*#__PURE__*/React.createElement(MainLayout, null, /*#__PURE__*/React.createElement(PageHeader, {
888
- title: /*#__PURE__*/React.createElement(ResourceMessage, {
889
- resource: resource,
890
- id: "resources.edit",
891
- defaultMessage: "Edit {a_singular}",
892
- description: "Page title"
707
+ title: /*#__PURE__*/React.createElement(FormattedMessage, {
708
+ values: resourceValues,
709
+ id: "mCfzkJ",
710
+ defaultMessage: [{
711
+ "type": 0,
712
+ "value": "Edit "
713
+ }, {
714
+ "type": 1,
715
+ "value": "a_singular"
716
+ }]
893
717
  }),
894
718
  small: true
895
719
  }), /*#__PURE__*/React.createElement("div", {
@@ -906,14 +730,14 @@ var ResourceEditPage = function ResourceEditPage(_ref) {
906
730
  }) : null)))));
907
731
  };
908
732
 
909
- ResourceEditPage.propTypes = propTypes$e;
910
- ResourceEditPage.defaultProps = defaultProps$e;
733
+ ResourceEditPage.propTypes = propTypes$d;
734
+ ResourceEditPage.defaultProps = defaultProps$d;
911
735
 
912
- var propTypes$d = {
913
- resource: PropTypes$1.resource.isRequired,
914
- className: PropTypes.string
736
+ var propTypes$c = {
737
+ resource: PropTypes.resource.isRequired,
738
+ className: PropTypes$1.string
915
739
  };
916
- var defaultProps$d = {
740
+ var defaultProps$c = {
917
741
  className: null
918
742
  };
919
743
 
@@ -921,8 +745,10 @@ var ResourceCreateButtom = function ResourceCreateButtom(_ref) {
921
745
  var resource = _ref.resource,
922
746
  className = _ref.className;
923
747
  var _resource$types = resource.types,
924
- types = _resource$types === void 0 ? null : _resource$types;
748
+ types = _resource$types === void 0 ? null : _resource$types; // const intl = useIntl();
749
+
925
750
  var resourceRoute = useResourceUrlGenerator(resource);
751
+ var resourceValues = useResourceValues(resource);
926
752
 
927
753
  var _useState = useState(false),
928
754
  _useState2 = _slicedToArray(_useState, 2),
@@ -931,34 +757,46 @@ var ResourceCreateButtom = function ResourceCreateButtom(_ref) {
931
757
 
932
758
  var onClickDropdown = useCallback(function (e) {
933
759
  e.preventDefault();
934
- setDropdownOpened(!dropdownOpened);
935
- }, [dropdownOpened, setDropdownOpened]);
760
+ setDropdownOpened(function (opened) {
761
+ return !opened;
762
+ });
763
+ }, [setDropdownOpened]);
764
+ var finalTypes = types !== null ? types.filter(function (_ref2) {
765
+ var _ref2$settings = _ref2.settings;
766
+ _ref2$settings = _ref2$settings === void 0 ? {} : _ref2$settings;
767
+ var _ref2$settings$canCre = _ref2$settings.canCreate,
768
+ canCreate = _ref2$settings$canCre === void 0 ? true : _ref2$settings$canCre;
769
+ return canCreate;
770
+ }) : null;
771
+ var hasMultipleTypes = finalTypes !== null && finalTypes.length > 1;
772
+ var onDropdownClickOutside = useCallback(function () {
773
+ setDropdownOpened(false);
774
+ }, [setDropdownOpened]);
936
775
  var button = /*#__PURE__*/React.createElement(Button, {
937
- href: types === null ? resourceRoute('create') : '#',
776
+ href: !hasMultipleTypes ? "".concat(resourceRoute('create')).concat(finalTypes !== null && finalTypes.length === 1 ? "?type=".concat(finalTypes[0].id) : '') : '#',
938
777
  size: "lg",
939
778
  theme: "primary",
940
779
  className: classNames([_defineProperty({
941
- 'dropdown-toggle': types !== null
780
+ 'dropdown-toggle': hasMultipleTypes
942
781
  }, className, className !== null)]),
943
- onClick: types !== null ? onClickDropdown : null
944
- }, /*#__PURE__*/React.createElement(ResourceMessage, {
945
- resource: resource,
946
- id: "resources.create_btn",
947
- defaultMessage: "Create {a_singular}",
948
- description: "Button label"
782
+ onClick: hasMultipleTypes ? onClickDropdown : null
783
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
784
+ values: resourceValues,
785
+ id: "l+ddDH",
786
+ defaultMessage: [{
787
+ "type": 0,
788
+ "value": "Create "
789
+ }, {
790
+ "type": 1,
791
+ "value": "a_singular"
792
+ }]
949
793
  }));
950
- return types !== null ? /*#__PURE__*/React.createElement("div", {
794
+ return hasMultipleTypes ? /*#__PURE__*/React.createElement("div", {
951
795
  className: classNames(['dropdown', {
952
796
  show: dropdownOpened
953
797
  }])
954
798
  }, button, /*#__PURE__*/React.createElement(Dropdown, {
955
- items: types.filter(function (_ref3) {
956
- var _ref3$settings = _ref3.settings;
957
- _ref3$settings = _ref3$settings === void 0 ? {} : _ref3$settings;
958
- var _ref3$settings$can_cr = _ref3$settings.can_create,
959
- canCreate = _ref3$settings$can_cr === void 0 ? true : _ref3$settings$can_cr;
960
- return canCreate;
961
- }).map(function (it) {
799
+ items: finalTypes.map(function (it) {
962
800
  return {
963
801
  id: it.id,
964
802
  label: it.name,
@@ -966,31 +804,40 @@ var ResourceCreateButtom = function ResourceCreateButtom(_ref) {
966
804
  };
967
805
  }),
968
806
  visible: dropdownOpened,
969
- align: "right"
807
+ align: "end",
808
+ onClickOutside: onDropdownClickOutside
970
809
  })) : button;
971
810
  };
972
811
 
973
- ResourceCreateButtom.propTypes = propTypes$d;
974
- ResourceCreateButtom.defaultProps = defaultProps$d;
812
+ ResourceCreateButtom.propTypes = propTypes$c;
813
+ ResourceCreateButtom.defaultProps = defaultProps$c;
975
814
 
976
- var propTypes$c = {
977
- filters: PropTypes.arrayOf(PropTypes.shape({
978
- id: PropTypes.string.isRequired,
979
- component: PropTypes.string.isRequired
815
+ var _excluded$3 = ["component", "name", "groupLabel"];
816
+ var propTypes$b = {
817
+ filters: PropTypes$1.arrayOf(PropTypes$1.shape({
818
+ id: PropTypes$1.string.isRequired,
819
+ component: PropTypes$1.string.isRequired
980
820
  })),
981
- value: PropTypes.object,
821
+ value: PropTypes$1.object,
982
822
  // eslint-disable-line react/forbid-prop-types
983
- onChange: PropTypes.func,
984
- withContainer: PropTypes.bool,
985
- withReset: PropTypes.bool,
986
- className: PropTypes.string
823
+ onChange: PropTypes$1.func,
824
+ onReset: PropTypes$1.func,
825
+ withContainer: PropTypes$1.bool,
826
+ withReset: PropTypes$1.bool,
827
+ defaultValue: PropTypes$1.objectOf(PropTypes$1.object),
828
+ // eslint-disable-line react/forbid-prop-types
829
+ className: PropTypes$1.string
987
830
  };
988
- var defaultProps$c = {
831
+ var defaultProps$b = {
989
832
  filters: [],
990
833
  value: null,
991
834
  onChange: null,
835
+ onReset: null,
992
836
  withContainer: false,
993
- withReset: false,
837
+ withReset: true,
838
+ defaultValue: {
839
+ page: null
840
+ },
994
841
  className: null
995
842
  };
996
843
 
@@ -998,65 +845,100 @@ var ResourceFilters = function ResourceFilters(_ref) {
998
845
  var filters = _ref.filters,
999
846
  value = _ref.value,
1000
847
  onChange = _ref.onChange,
848
+ onReset = _ref.onReset,
1001
849
  withContainer = _ref.withContainer,
1002
850
  withReset = _ref.withReset,
851
+ defaultValue = _ref.defaultValue,
1003
852
  className = _ref.className;
1004
853
  var FilterComponents = useFiltersComponents();
1005
- var onReset = useCallback(function () {
1006
- if (onChange !== null) {
1007
- onChange(null);
854
+
855
+ var _usePanneauColorSchem = usePanneauColorScheme(),
856
+ background = _usePanneauColorSchem.background;
857
+
858
+ var currentFilters = filters || [];
859
+ var onFiltersReset = useCallback(function () {
860
+ if (onReset !== null) {
861
+ onReset(null);
862
+ }
863
+ }, [onReset]);
864
+ var hasActiveFilter = (currentFilters || []).reduce(function (isActive, item) {
865
+ if (value !== null && value[item.name]) {
866
+ return true;
1008
867
  }
1009
- }, [onChange]);
868
+
869
+ return isActive;
870
+ }, false); // console.log('value', value);
871
+
1010
872
  return /*#__PURE__*/React.createElement(Navbar, {
1011
873
  className: classNames([_defineProperty({
1012
874
  'navbar-expand-md': withContainer
1013
- }, className, className !== null)]),
875
+ }, className, className !== null), 'justify-content-start', 'align-items-start', 'flex-column', 'flex-md-row']),
876
+ theme: background,
1014
877
  withoutCollapse: true
1015
- }, filters.map(function (_ref3, index) {
1016
- var id = _ref3.id,
1017
- component = _ref3.component,
1018
- filterProps = _objectWithoutProperties(_ref3, ["id", "component"]);
878
+ }, currentFilters.map(function (_ref3, index) {
879
+ var component = _ref3.component,
880
+ name = _ref3.name,
881
+ groupLabel = _ref3.groupLabel,
882
+ filterProps = _objectWithoutProperties(_ref3, _excluded$3);
1019
883
 
1020
884
  var FilterComponent = getComponentFromName(component, FilterComponents, null);
1021
- return FilterComponent !== null ? /*#__PURE__*/React.createElement(FilterComponent, Object.assign({}, filterProps, {
1022
- key: "filter-".concat(id, "-").concat(index + 1),
1023
- id: id,
1024
- value: value,
1025
- onChange: onChange
1026
- })) : null;
1027
- }), withReset ? /*#__PURE__*/React.createElement(Button, {
885
+ var filterValue = value !== null && value[name] ? value[name] : null;
886
+ var onFilterChange = useCallback(function (newFilterValue) {
887
+ if (name !== null && onChange !== null) {
888
+ onChange(_objectSpread(_objectSpread({}, value), {}, _defineProperty({}, name, newFilterValue), defaultValue));
889
+ }
890
+ }, [onChange, name, value, defaultValue]);
891
+ var onFilterClear = useCallback(function () {
892
+ if (name !== null && onChange !== null) {
893
+ var _ref4 = value || {};
894
+ _ref4[name];
895
+ var newValue = _objectWithoutProperties(_ref4, [name].map(_toPropertyKey));
896
+
897
+ onChange(_objectSpread(_objectSpread({}, newValue), defaultValue));
898
+ }
899
+ }, [onChange, name, value, defaultValue]);
900
+ return FilterComponent !== null ? /*#__PURE__*/React.createElement(FormGroup, {
901
+ key: "filter-".concat(name, "-").concat(index + 1),
902
+ label: groupLabel,
903
+ className: "me-4"
904
+ }, /*#__PURE__*/React.createElement(FilterComponent, Object.assign({}, filterProps, {
905
+ value: filterValue,
906
+ onChange: onFilterChange,
907
+ onClear: onFilterClear
908
+ }))) : null;
909
+ }), withReset && hasActiveFilter && currentFilters.length > 0 ? /*#__PURE__*/React.createElement(Button, {
1028
910
  theme: "primary",
1029
- onClick: onReset
1030
- }, /*#__PURE__*/React.createElement(FormattedMessage, {
1031
- id: "q6bmY1",
1032
- defaultMessage: [{
1033
- "type": 0,
1034
- "value": "Reset"
1035
- }]
911
+ onClick: onFiltersReset
912
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
913
+ icon: faUndo
1036
914
  })) : null);
1037
915
  };
1038
916
 
1039
- ResourceFilters.propTypes = propTypes$c;
1040
- ResourceFilters.defaultProps = defaultProps$c;
917
+ ResourceFilters.propTypes = propTypes$b;
918
+ ResourceFilters.defaultProps = defaultProps$b;
1041
919
 
1042
- var propTypes$b = {
1043
- resource: PropTypes$1.resource.isRequired,
1044
- query: PropTypes.object,
920
+ var _excluded$2 = ["component", "showPagination", "filters"],
921
+ _excluded2 = ["page"];
922
+ var propTypes$a = {
923
+ resource: PropTypes.resource.isRequired,
924
+ query: PropTypes$1.object,
1045
925
  // eslint-disable-line react/forbid-prop-types
1046
- paginated: PropTypes.bool,
1047
- baseUrl: PropTypes.string,
1048
- component: PropTypes.oneOfType([PropTypes.elementType, PropTypes.string]),
1049
- componentProps: PropTypes.object,
926
+ paginated: PropTypes$1.bool,
927
+ baseUrl: PropTypes$1.string,
928
+ component: PropTypes$1.oneOfType([PropTypes$1.elementType, PropTypes$1.string]),
929
+ componentProps: PropTypes$1.object,
1050
930
  // eslint-disable-line react/forbid-prop-types
1051
- onQueryChange: PropTypes.func
931
+ onQueryChange: PropTypes$1.func,
932
+ onQueryReset: PropTypes$1.func
1052
933
  };
1053
- var defaultProps$b = {
934
+ var defaultProps$a = {
1054
935
  query: null,
1055
936
  paginated: true,
1056
937
  component: null,
1057
938
  baseUrl: null,
1058
939
  componentProps: null,
1059
- onQueryChange: null
940
+ onQueryChange: null,
941
+ onQueryReset: null
1060
942
  };
1061
943
 
1062
944
  var ResourceItemsList = function ResourceItemsList(_ref) {
@@ -1064,15 +946,18 @@ var ResourceItemsList = function ResourceItemsList(_ref) {
1064
946
  query = _ref.query,
1065
947
  baseUrl = _ref.baseUrl,
1066
948
  onQueryChange = _ref.onQueryChange,
949
+ onQueryReset = _ref.onQueryReset,
1067
950
  paginated = _ref.paginated;
1068
951
  var _resource$index = resource.index;
1069
952
  _resource$index = _resource$index === void 0 ? {} : _resource$index;
1070
953
 
1071
954
  var _resource$index$compo = _resource$index.component,
1072
955
  listComponent = _resource$index$compo === void 0 ? null : _resource$index$compo,
956
+ _resource$index$showP = _resource$index.showPagination,
957
+ showPagination = _resource$index$showP === void 0 ? true : _resource$index$showP,
1073
958
  _resource$index$filte = _resource$index.filters,
1074
959
  filters = _resource$index$filte === void 0 ? null : _resource$index$filte,
1075
- listProps = _objectWithoutProperties(_resource$index, ["component", "filters"]);
960
+ listProps = _objectWithoutProperties(_resource$index, _excluded$2);
1076
961
 
1077
962
  var _usePanneauColorSchem = usePanneauColorScheme(),
1078
963
  _usePanneauColorSchem2 = _usePanneauColorSchem.background,
@@ -1080,45 +965,77 @@ var ResourceItemsList = function ResourceItemsList(_ref) {
1080
965
 
1081
966
  var ListComponents = useListsComponents();
1082
967
 
1083
- var _ref2 = query || {},
1084
- _ref2$page = _ref2.page,
1085
- page = _ref2$page === void 0 ? 1 : _ref2$page;
968
+ var _useMemo = useMemo(function () {
969
+ var _ref2 = query || {},
970
+ _ref2$page = _ref2.page,
971
+ currentPage = _ref2$page === void 0 ? 1 : _ref2$page,
972
+ rest = _objectWithoutProperties(_ref2, _excluded2);
973
+
974
+ return [currentPage, rest];
975
+ }, [query]),
976
+ _useMemo2 = _slicedToArray(_useMemo, 2),
977
+ page = _useMemo2[0],
978
+ queryWithoutPage = _useMemo2[1];
979
+
980
+ var itemsProps = useResourceItems(resource, queryWithoutPage, paginated ? parseInt(page, 10) : null);
981
+
982
+ var _ref3 = itemsProps || {},
983
+ _ref3$lastPage = _ref3.lastPage,
984
+ lastPage = _ref3$lastPage === void 0 ? 0 : _ref3$lastPage,
985
+ _ref3$total = _ref3.total,
986
+ total = _ref3$total === void 0 ? 0 : _ref3$total;
1086
987
 
1087
- var itemsProps = useResourceItems(resource, query, paginated ? parseInt(page, 10) : null);
1088
- var onListQueryChange = useCallback(function (newQuery) {
1089
- if (onQueryChange !== null) {
1090
- onQueryChange(newQuery);
1091
- }
1092
- }, [onQueryChange]);
1093
988
  var ListComponent = getComponentFromName(listComponent || 'table', ListComponents);
1094
989
  return /*#__PURE__*/React.createElement(React.Fragment, null, filters !== null ? /*#__PURE__*/React.createElement(ResourceFilters, {
1095
990
  filters: filters,
1096
991
  value: query,
1097
992
  onChange: onQueryChange,
1098
- className: "mb-4"
993
+ onReset: onQueryReset
994
+ }) : null, paginated && showPagination ? /*#__PURE__*/React.createElement(Pagination, {
995
+ page: page,
996
+ lastPage: lastPage,
997
+ total: total,
998
+ url: baseUrl,
999
+ query: query,
1000
+ className: "mt-1 mb-1"
1099
1001
  }) : null, ListComponent !== null ? /*#__PURE__*/React.createElement(ListComponent, Object.assign({}, itemsProps, listProps, {
1100
- page: paginated ? parseInt(page, 10) : null,
1101
- baseUrl: baseUrl,
1102
1002
  resource: resource,
1003
+ baseUrl: baseUrl,
1103
1004
  query: query,
1104
- onQueryChange: onListQueryChange,
1005
+ onQueryChange: onQueryChange,
1006
+ onQueryReset: onQueryReset,
1105
1007
  theme: theme
1106
- })) : null);
1008
+ })) : null, paginated && showPagination ? /*#__PURE__*/React.createElement(Pagination, {
1009
+ page: page,
1010
+ lastPage: lastPage,
1011
+ total: total,
1012
+ url: baseUrl,
1013
+ query: query,
1014
+ className: "mt-4 mb-1"
1015
+ }) : null);
1107
1016
  };
1108
1017
 
1109
- ResourceItemsList.propTypes = propTypes$b;
1110
- ResourceItemsList.defaultProps = defaultProps$b;
1018
+ ResourceItemsList.propTypes = propTypes$a;
1019
+ ResourceItemsList.defaultProps = defaultProps$a;
1111
1020
 
1112
- var propTypes$a = {
1113
- resource: PropTypes$1.resource.isRequired
1021
+ var _excluded$1 = ["id", "component"];
1022
+ var propTypes$9 = {
1023
+ resource: PropTypes.resource.isRequired,
1024
+ defaultActions: PropTypes$1.arrayOf(PropTypes$1.object) // eslint-disable-line react/forbid-prop-types
1025
+
1026
+ };
1027
+ var defaultProps$9 = {
1028
+ defaultActions: ['create']
1114
1029
  };
1115
- var defaultProps$a = {};
1116
1030
 
1117
1031
  var ResourceIndexPage = function ResourceIndexPage(_ref) {
1118
- var resource = _ref.resource;
1032
+ var resource = _ref.resource,
1033
+ defaultActions = _ref.defaultActions;
1119
1034
  var name = resource.name,
1120
1035
  _resource$settings = resource.settings,
1121
- settings = _resource$settings === void 0 ? {} : _resource$settings;
1036
+ settings = _resource$settings === void 0 ? {} : _resource$settings,
1037
+ _resource$index = resource.index,
1038
+ index = _resource$index === void 0 ? {} : _resource$index;
1122
1039
 
1123
1040
  var _ref2 = settings || {},
1124
1041
  _ref2$canCreate = _ref2.canCreate,
@@ -1126,10 +1043,29 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
1126
1043
  _ref2$indexIsPaginate = _ref2.indexIsPaginated,
1127
1044
  paginated = _ref2$indexIsPaginate === void 0 ? false : _ref2$indexIsPaginate;
1128
1045
 
1046
+ var _ref3 = index || {},
1047
+ _ref3$actions = _ref3.actions,
1048
+ actions = _ref3$actions === void 0 ? null : _ref3$actions;
1049
+
1050
+ var finalActions = useMemo(function () {
1051
+ return (actions || defaultActions.filter(function (it) {
1052
+ return it !== 'create' || canCreate;
1053
+ })).map(function (it) {
1054
+ return it === 'create' ? {
1055
+ id: 'create',
1056
+ component: ResourceCreateButtom,
1057
+ size: 'lg',
1058
+ theme: 'primary'
1059
+ } : it;
1060
+ });
1061
+ }, [canCreate, actions]);
1062
+ var resourceValues = useResourceValues(resource);
1063
+ var componentsManager = useComponentsManager();
1064
+
1129
1065
  var _useLocation = useLocation(),
1130
1066
  search = _useLocation.search;
1131
1067
 
1132
- var history = useHistory();
1068
+ var navigate = useNavigate();
1133
1069
  var query = useMemo(function () {
1134
1070
  return parse(search);
1135
1071
  }, [search]);
@@ -1137,19 +1073,29 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
1137
1073
  return query;
1138
1074
  }, [query]); // TODO: omit routes
1139
1075
 
1140
- var _ref3 = query || {},
1141
- _ref3$created = _ref3.created,
1142
- created = _ref3$created === void 0 ? false : _ref3$created,
1143
- _ref3$deleted = _ref3.deleted,
1144
- deleted = _ref3$deleted === void 0 ? false : _ref3$deleted;
1076
+ var _ref4 = query || {},
1077
+ _ref4$created = _ref4.created,
1078
+ created = _ref4$created === void 0 ? false : _ref4$created,
1079
+ _ref4$deleted = _ref4.deleted,
1080
+ deleted = _ref4$deleted === void 0 ? false : _ref4$deleted;
1145
1081
 
1146
1082
  var resourceRoute = useResourceUrlGenerator(resource);
1147
1083
  var url = resourceRoute('index');
1148
1084
  var onQueryChange = useCallback(function (submitQuery) {
1149
- history.push("".concat(url, "?").concat(stringify(submitQuery, {
1085
+ var newQuery = submitQuery !== null ? Object.keys(submitQuery).reduce(function (currentQuery, key) {
1086
+ var value = submitQuery[key];
1087
+ return value !== null ? _objectSpread(_objectSpread({}, currentQuery), {}, _defineProperty({}, key, value)) : currentQuery;
1088
+ }, null) : null;
1089
+ navigate("".concat(url).concat(newQuery !== null ? "?".concat(stringify(newQuery, {
1150
1090
  arrayFormat: 'bracket'
1151
- })));
1152
- }, [history, url]);
1091
+ })) : ''));
1092
+ }, [navigate, url, query, paginated]);
1093
+ var onQueryReset = useCallback(function () {
1094
+ var queryString = stringify(null, {
1095
+ arrayFormat: 'bracket'
1096
+ });
1097
+ navigate("".concat(url, "?").concat(queryString));
1098
+ }, [navigate, url, paginated]);
1153
1099
  var onClickCloseAlert = useCallback(function () {
1154
1100
  history.replace(url);
1155
1101
  }, [history, url]);
@@ -1157,45 +1103,68 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
1157
1103
  resource: resource
1158
1104
  }, /*#__PURE__*/React.createElement(MainLayout, null, /*#__PURE__*/React.createElement(PageHeader, {
1159
1105
  title: name,
1160
- actions: canCreate ? /*#__PURE__*/React.createElement(ResourceCreateButtom, {
1161
- resource: resource,
1162
- size: "lg",
1163
- theme: "primary"
1164
- }) : null
1106
+ actions: finalActions.length > 0 ? /*#__PURE__*/React.createElement("div", {
1107
+ className: "d-flex align-items-center"
1108
+ }, finalActions.map(function (_ref5) {
1109
+ var id = _ref5.id,
1110
+ _ref5$component = _ref5.component,
1111
+ component = _ref5$component === void 0 ? Button : _ref5$component,
1112
+ actionProps = _objectWithoutProperties(_ref5, _excluded$1);
1113
+
1114
+ var ActionComponent = isString(component) ? componentsManager.getComponent(component) : component;
1115
+ return ActionComponent !== null ? /*#__PURE__*/React.createElement(ActionComponent, Object.assign({
1116
+ key: "action-".concat(id)
1117
+ }, actionProps, ActionComponent !== Button ? {
1118
+ resource: resource,
1119
+ query: query,
1120
+ onQueryChange: onQueryChange
1121
+ } : {})) : null;
1122
+ })) : null
1165
1123
  }), /*#__PURE__*/React.createElement("div", {
1166
1124
  className: classNames(['container-sm py-4'])
1167
1125
  }, created ? /*#__PURE__*/React.createElement(Alert, {
1168
1126
  className: "mb-4",
1169
1127
  onClose: onClickCloseAlert
1170
- }, /*#__PURE__*/React.createElement(ResourceMessage, {
1171
- resource: resource,
1172
- id: "resources.created",
1173
- defaultMessage: "{the_singular} has been created.",
1174
- description: "Alert message"
1128
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
1129
+ values: resourceValues,
1130
+ id: "bfP/d8",
1131
+ defaultMessage: [{
1132
+ "type": 1,
1133
+ "value": "The_singular"
1134
+ }, {
1135
+ "type": 0,
1136
+ "value": " has been created."
1137
+ }]
1175
1138
  })) : null, deleted ? /*#__PURE__*/React.createElement(Alert, {
1176
1139
  className: "mb-4",
1177
1140
  onClose: onClickCloseAlert
1178
- }, /*#__PURE__*/React.createElement(ResourceMessage, {
1179
- resource: resource,
1180
- id: "resources.deleted",
1181
- defaultMessage: "{the_singular} has been deleted.",
1182
- description: "Alert message"
1141
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
1142
+ values: resourceValues,
1143
+ id: "dkRdks",
1144
+ defaultMessage: [{
1145
+ "type": 1,
1146
+ "value": "The_singular"
1147
+ }, {
1148
+ "type": 0,
1149
+ "value": " has been deleted."
1150
+ }]
1183
1151
  })) : null, /*#__PURE__*/React.createElement(ResourceItemsList, {
1184
1152
  resource: resource,
1185
1153
  baseUrl: url,
1186
1154
  query: listQuery,
1187
1155
  paginated: paginated,
1188
- onQueryChange: onQueryChange
1156
+ onQueryChange: onQueryChange,
1157
+ onQueryReset: onQueryReset
1189
1158
  }))));
1190
1159
  };
1191
1160
 
1192
- ResourceIndexPage.propTypes = propTypes$a;
1193
- ResourceIndexPage.defaultProps = defaultProps$a;
1161
+ ResourceIndexPage.propTypes = propTypes$9;
1162
+ ResourceIndexPage.defaultProps = defaultProps$9;
1194
1163
 
1195
- var propTypes$9 = {
1196
- resource: PropTypes$1.resource.isRequired
1164
+ var propTypes$8 = {
1165
+ resource: PropTypes.resource.isRequired
1197
1166
  };
1198
- var defaultProps$9 = {};
1167
+ var defaultProps$8 = {};
1199
1168
 
1200
1169
  var ResourceShowPage = function ResourceShowPage(_ref) {
1201
1170
  var resource = _ref.resource;
@@ -1208,12 +1177,12 @@ var ResourceShowPage = function ResourceShowPage(_ref) {
1208
1177
  }, "Show page")));
1209
1178
  };
1210
1179
 
1211
- ResourceShowPage.propTypes = propTypes$9;
1212
- ResourceShowPage.defaultProps = defaultProps$9;
1180
+ ResourceShowPage.propTypes = propTypes$8;
1181
+ ResourceShowPage.defaultProps = defaultProps$8;
1213
1182
 
1214
1183
  /* eslint-disable react/jsx-props-no-spreading */
1215
- var propTypes$8 = {};
1216
- var defaultProps$8 = {};
1184
+ var propTypes$7 = {};
1185
+ var defaultProps$7 = {};
1217
1186
 
1218
1187
  var HomePage = function HomePage() {
1219
1188
  var route = useUrlGenerator();
@@ -1231,26 +1200,32 @@ var HomePage = function HomePage() {
1231
1200
  var _ref2 = resource || {},
1232
1201
  resourceId = _ref2.id;
1233
1202
 
1203
+ var resourceValues = useResourceValues(resource);
1234
1204
  return /*#__PURE__*/React.createElement(Link, {
1235
1205
  className: "d-block my-2",
1236
1206
  key: "resource-link-".concat(resourceId),
1237
1207
  to: route('resources.index', {
1238
1208
  resource: resourceId
1239
1209
  })
1240
- }, /*#__PURE__*/React.createElement(ResourceMessage, {
1241
- resource: resource,
1242
- id: "resources.view",
1243
- defaultMessage: "View {the_plural}",
1244
- description: "Button label"
1210
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
1211
+ values: resourceValues,
1212
+ id: "FntHPK",
1213
+ defaultMessage: [{
1214
+ "type": 0,
1215
+ "value": "View "
1216
+ }, {
1217
+ "type": 1,
1218
+ "value": "the_plural"
1219
+ }]
1245
1220
  }));
1246
1221
  })));
1247
1222
  };
1248
1223
 
1249
- HomePage.propTypes = propTypes$8;
1250
- HomePage.defaultProps = defaultProps$8;
1224
+ HomePage.propTypes = propTypes$7;
1225
+ HomePage.defaultProps = defaultProps$7;
1251
1226
 
1252
- var propTypes$7 = {};
1253
- var defaultProps$7 = {};
1227
+ var propTypes$6 = {};
1228
+ var defaultProps$6 = {};
1254
1229
 
1255
1230
  var AccountPage = function AccountPage() {
1256
1231
  return /*#__PURE__*/React.createElement(MainLayout, null, /*#__PURE__*/React.createElement("div", {
@@ -1258,52 +1233,14 @@ var AccountPage = function AccountPage() {
1258
1233
  }, "Account page"));
1259
1234
  };
1260
1235
 
1261
- AccountPage.propTypes = propTypes$7;
1262
- AccountPage.defaultProps = defaultProps$7;
1263
-
1264
- var propTypes$6 = {
1265
- children: PropTypes.node.isRequired,
1266
- fullscreen: PropTypes.bool
1267
- };
1268
- var defaultProps$6 = {
1269
- fullscreen: false
1270
- };
1271
-
1272
- var GuestLayout = function GuestLayout(_ref) {
1273
- var _classNames;
1274
-
1275
- var fullscreen = _ref.fullscreen,
1276
- children = _ref.children;
1277
-
1278
- var _usePanneauColorSchem = usePanneauColorScheme(),
1279
- background = _usePanneauColorSchem.background,
1280
- text = _usePanneauColorSchem.text;
1281
-
1282
- return /*#__PURE__*/React.createElement("div", {
1283
- className: classNames({
1284
- 'd-flex flex-column min-vh-100': fullscreen
1285
- })
1286
- }, /*#__PURE__*/React.createElement(MainNavbar, {
1287
- className: classNames(['sticky-top', 'px-3'])
1288
- }), /*#__PURE__*/React.createElement("div", {
1289
- className: classNames((_classNames = {
1290
- 'd-flex flex-column flex-grow-1': fullscreen
1291
- }, _defineProperty(_classNames, "bg-".concat(background), background !== null), _defineProperty(_classNames, "text-".concat(text), text !== null), _classNames))
1292
- }, /*#__PURE__*/React.createElement("div", {
1293
- className: classNames({
1294
- 'w-100 my-auto': fullscreen
1295
- })
1296
- }, children)));
1297
- };
1298
-
1299
- GuestLayout.propTypes = propTypes$6;
1300
- GuestLayout.defaultProps = defaultProps$6;
1236
+ AccountPage.propTypes = propTypes$6;
1237
+ AccountPage.defaultProps = defaultProps$6;
1301
1238
 
1302
1239
  /* eslint-disable react/jsx-props-no-spreading */
1303
1240
  var propTypes$5 = {
1304
- fields: PropTypes$1.fields,
1305
- className: PropTypes.string,
1306
- onSuccess: PropTypes.func
1241
+ fields: PropTypes.fields,
1242
+ className: PropTypes$1.string,
1243
+ onSuccess: PropTypes$1.func
1307
1244
  };
1308
1245
  var defaultProps$5 = {
1309
1246
  fields: [{
@@ -1386,9 +1323,47 @@ var LoginForm = function LoginForm(_ref) {
1386
1323
  LoginForm.propTypes = propTypes$5;
1387
1324
  LoginForm.defaultProps = defaultProps$5;
1388
1325
 
1326
+ var propTypes$4 = {
1327
+ children: PropTypes$1.node.isRequired,
1328
+ fullscreen: PropTypes$1.bool
1329
+ };
1330
+ var defaultProps$4 = {
1331
+ fullscreen: false
1332
+ };
1333
+
1334
+ var GuestLayout = function GuestLayout(_ref) {
1335
+ var _classNames;
1336
+
1337
+ var fullscreen = _ref.fullscreen,
1338
+ children = _ref.children;
1339
+
1340
+ var _usePanneauColorSchem = usePanneauColorScheme(),
1341
+ background = _usePanneauColorSchem.background,
1342
+ text = _usePanneauColorSchem.text;
1343
+
1344
+ return /*#__PURE__*/React.createElement("div", {
1345
+ className: classNames({
1346
+ 'd-flex flex-column min-vh-100': fullscreen
1347
+ })
1348
+ }, /*#__PURE__*/React.createElement(MainNavbar, {
1349
+ className: classNames(['sticky-top', 'px-3'])
1350
+ }), /*#__PURE__*/React.createElement("div", {
1351
+ className: classNames((_classNames = {
1352
+ 'd-flex flex-column flex-grow-1': fullscreen
1353
+ }, _defineProperty(_classNames, "bg-".concat(background), background !== null), _defineProperty(_classNames, "text-".concat(text), text !== null), _classNames))
1354
+ }, /*#__PURE__*/React.createElement("div", {
1355
+ className: classNames({
1356
+ 'w-100 my-auto': fullscreen
1357
+ })
1358
+ }, children)));
1359
+ };
1360
+
1361
+ GuestLayout.propTypes = propTypes$4;
1362
+ GuestLayout.defaultProps = defaultProps$4;
1363
+
1389
1364
  /* eslint-disable react/jsx-props-no-spreading */
1390
- var propTypes$4 = {};
1391
- var defaultProps$4 = {};
1365
+ var propTypes$3 = {};
1366
+ var defaultProps$3 = {};
1392
1367
 
1393
1368
  var LoginPage = function LoginPage() {
1394
1369
  var route = useUrlGenerator();
@@ -1416,8 +1391,8 @@ var LoginPage = function LoginPage() {
1416
1391
  })))));
1417
1392
  };
1418
1393
 
1419
- LoginPage.propTypes = propTypes$4;
1420
- LoginPage.defaultProps = defaultProps$4;
1394
+ LoginPage.propTypes = propTypes$3;
1395
+ LoginPage.defaultProps = defaultProps$3;
1421
1396
 
1422
1397
  var messages = defineMessages({
1423
1398
  metaTitle401: {
@@ -1512,10 +1487,10 @@ var messages = defineMessages({
1512
1487
  }]
1513
1488
  }
1514
1489
  });
1515
- var propTypes$3 = {
1516
- statusCode: PropTypes$1.statusCode
1490
+ var propTypes$2 = {
1491
+ statusCode: PropTypes.statusCode
1517
1492
  };
1518
- var defaultProps$3 = {
1493
+ var defaultProps$2 = {
1519
1494
  statusCode: null
1520
1495
  };
1521
1496
 
@@ -1532,8 +1507,8 @@ var ErrorPage = function ErrorPage(_ref) {
1532
1507
  }, /*#__PURE__*/React.createElement("h1", null, /*#__PURE__*/React.createElement(Label, null, messages["title".concat(statusCode || 404)])), /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement(Label, null, messages["description".concat(statusCode || 404)]))))));
1533
1508
  };
1534
1509
 
1535
- ErrorPage.propTypes = propTypes$3;
1536
- ErrorPage.defaultProps = defaultProps$3;
1510
+ ErrorPage.propTypes = propTypes$2;
1511
+ ErrorPage.defaultProps = defaultProps$2;
1537
1512
 
1538
1513
  var basePages = /*#__PURE__*/Object.freeze({
1539
1514
  __proto__: null,
@@ -1548,17 +1523,16 @@ var basePages = /*#__PURE__*/Object.freeze({
1548
1523
  Error: ErrorPage
1549
1524
  });
1550
1525
 
1551
- var propTypes$2 = {
1552
- resource: PropTypes$1.resource.isRequired
1553
- };
1554
- var defaultProps$2 = {};
1526
+ var _excluded = ["path", "component", "exact"];
1555
1527
 
1556
- var ResourceRoutes = function ResourceRoutes(_ref) {
1557
- var resource = _ref.resource;
1528
+ var createResourceRoutes = function createResourceRoutes(resource, _ref) {
1529
+ var route = _ref.route,
1530
+ componentsManager = _ref.componentsManager;
1558
1531
  var resourceId = resource.id,
1559
1532
  _resource$pages = resource.pages,
1560
- pages = _resource$pages === void 0 ? {} : _resource$pages;
1561
- var route = useUrlGenerator(); // Load custom pages from resource
1533
+ pages = _resource$pages === void 0 ? {} : _resource$pages,
1534
+ _resource$extraRoutes = resource.extraRoutes,
1535
+ extraRoutes = _resource$extraRoutes === void 0 ? [] : _resource$extraRoutes; // Load custom pages from resource
1562
1536
 
1563
1537
  var _ref2 = pages || {},
1564
1538
  _ref2$index = _ref2.index,
@@ -1572,78 +1546,75 @@ var ResourceRoutes = function ResourceRoutes(_ref) {
1572
1546
  _ref2$delete = _ref2["delete"],
1573
1547
  deletePage = _ref2$delete === void 0 ? null : _ref2$delete;
1574
1548
 
1575
- var ResourceIndexComponent = getComponentFromName((indexPage === null || indexPage === void 0 ? void 0 : indexPage.component) || 'resource-index', basePages, indexPage === null || indexPage === void 0 ? void 0 : indexPage.component);
1576
- var ResourceShowComponent = getComponentFromName((showPage === null || showPage === void 0 ? void 0 : showPage.component) || 'resource-show', basePages, showPage === null || showPage === void 0 ? void 0 : showPage.component);
1577
- var ResourceCreateComponent = getComponentFromName((createPage === null || createPage === void 0 ? void 0 : createPage.component) || 'resource-create', basePages, createPage === null || createPage === void 0 ? void 0 : createPage.component);
1578
- var ResourceEditComponent = getComponentFromName((editPage === null || editPage === void 0 ? void 0 : editPage.component) || 'resource-edit', basePages, editPage === null || editPage === void 0 ? void 0 : editPage.component);
1579
- var ResourceDeleteComponent = getComponentFromName((deletePage === null || deletePage === void 0 ? void 0 : deletePage.component) || 'resource-delete', basePages, deletePage === null || deletePage === void 0 ? void 0 : deletePage.component);
1580
- return /*#__PURE__*/React.createElement(Switch, null, /*#__PURE__*/React.createElement(Route, {
1549
+ var ResourceIndexComponent = indexPage !== null && typeof indexPage.component !== 'undefined' ? componentsManager.getComponent(indexPage.component) : ResourceIndexPage;
1550
+ var ResourceShowComponent = showPage !== null && typeof showPage.component !== 'undefined' ? componentsManager.getComponent(showPage.component) : ResourceShowPage;
1551
+ var ResourceCreateComponent = createPage !== null && typeof createPage.component !== 'undefined' ? componentsManager.getComponent(createPage.component) : ResourceCreatePage;
1552
+ var ResourceEditComponent = editPage !== null && typeof editPage.component !== 'undefined' ? componentsManager.getComponent(editPage.component) : ResourceEditPage;
1553
+ var ResourceDeleteComponent = deletePage !== null && typeof deletePage.component !== 'undefined' ? componentsManager.getComponent(deletePage.component) : ResourceDeletePage;
1554
+ return /*#__PURE__*/React.createElement(React.Fragment, null, extraRoutes.map(function (_ref3) {
1555
+ var path = _ref3.path,
1556
+ component = _ref3.component,
1557
+ _ref3$exact = _ref3.exact,
1558
+ exact = _ref3$exact === void 0 ? true : _ref3$exact,
1559
+ pageProps = _objectWithoutProperties(_ref3, _excluded);
1560
+
1561
+ var RouteComponent = componentsManager.getComponent(component);
1562
+ return RouteComponent !== null ? /*#__PURE__*/React.createElement(Route, {
1563
+ key: "route-".concat(path),
1564
+ path: path,
1565
+ exact: exact,
1566
+ element: /*#__PURE__*/React.createElement(RouteComponent, Object.assign({
1567
+ resource: resource
1568
+ }, pageProps))
1569
+ }) : null;
1570
+ }), /*#__PURE__*/React.createElement(Route, {
1581
1571
  path: route('resources.index', {
1582
1572
  resource: resourceId
1583
1573
  }),
1584
1574
  exact: true,
1585
- render: function render() {
1586
- return /*#__PURE__*/React.createElement(ResourceIndexComponent, {
1587
- resource: resource
1588
- });
1589
- }
1575
+ element: /*#__PURE__*/React.createElement(ResourceIndexComponent, {
1576
+ resource: resource
1577
+ })
1590
1578
  }), /*#__PURE__*/React.createElement(Route, {
1591
1579
  path: route('resources.create', {
1592
1580
  resource: resourceId
1593
1581
  }),
1594
1582
  exact: true,
1595
- render: function render() {
1596
- return /*#__PURE__*/React.createElement(ResourceCreateComponent, {
1597
- resource: resource
1598
- });
1599
- }
1583
+ element: /*#__PURE__*/React.createElement(ResourceCreateComponent, {
1584
+ resource: resource
1585
+ })
1600
1586
  }), /*#__PURE__*/React.createElement(Route, {
1601
1587
  path: route('resources.show', {
1602
1588
  resource: resourceId,
1603
1589
  id: ':id'
1604
1590
  }),
1605
1591
  exact: true,
1606
- render: function render(_ref3) {
1607
- var id = _ref3.match.params.id;
1608
- return /*#__PURE__*/React.createElement(ResourceShowComponent, {
1609
- resource: resource,
1610
- itemId: id
1611
- });
1612
- }
1592
+ element: /*#__PURE__*/React.createElement(ResourceShowComponent, {
1593
+ resource: resource
1594
+ })
1613
1595
  }), /*#__PURE__*/React.createElement(Route, {
1614
1596
  path: route('resources.edit', {
1615
1597
  resource: resourceId,
1616
1598
  id: ':id'
1617
1599
  }),
1618
1600
  exact: true,
1619
- render: function render(_ref4) {
1620
- var id = _ref4.match.params.id;
1621
- return /*#__PURE__*/React.createElement(ResourceEditComponent, {
1622
- resource: resource,
1623
- itemId: id
1624
- });
1625
- }
1601
+ element: /*#__PURE__*/React.createElement(ResourceEditComponent, {
1602
+ resource: resource
1603
+ })
1626
1604
  }), /*#__PURE__*/React.createElement(Route, {
1627
1605
  path: route('resources.delete', {
1628
1606
  resource: resourceId,
1629
1607
  id: ':id'
1630
1608
  }),
1631
1609
  exact: true,
1632
- render: function render(_ref5) {
1633
- var id = _ref5.match.params.id;
1634
- return /*#__PURE__*/React.createElement(ResourceDeleteComponent, {
1635
- resource: resource,
1636
- itemId: id
1637
- });
1638
- }
1610
+ element: /*#__PURE__*/React.createElement(ResourceDeleteComponent, {
1611
+ resource: resource
1612
+ })
1639
1613
  }));
1640
1614
  };
1641
1615
 
1642
- ResourceRoutes.propTypes = propTypes$2;
1643
- ResourceRoutes.defaultProps = defaultProps$2;
1644
-
1645
1616
  var propTypes$1 = {
1646
- statusCode: PropTypes$1.statusCode
1617
+ statusCode: PropTypes.statusCode
1647
1618
  };
1648
1619
  var defaultProps$1 = {
1649
1620
  statusCode: null
@@ -1674,7 +1645,8 @@ var PanneauRoutes = function PanneauRoutes(_ref) {
1674
1645
 
1675
1646
  var user = useUser();
1676
1647
  var route = useUrlGenerator();
1677
- var resources = usePanneauResources(); // const nextUrl = useMemo(() => {
1648
+ var resources = usePanneauResources();
1649
+ var componentsManager = useComponentsManager(); // const nextUrl = useMemo(() => {
1678
1650
  // const query = parseQuery(search);
1679
1651
  // return query !== null ? query.next || null : null;
1680
1652
  // }, [search]);
@@ -1702,52 +1674,49 @@ var PanneauRoutes = function PanneauRoutes(_ref) {
1702
1674
  var LoginComponent = getComponentFromName((loginPage === null || loginPage === void 0 ? void 0 : loginPage.component) || 'login', basePages, loginPage === null || loginPage === void 0 ? void 0 : loginPage.component);
1703
1675
  var AccountComponent = getComponentFromName((accountPage === null || accountPage === void 0 ? void 0 : accountPage.component) || 'account', basePages, accountPage === null || accountPage === void 0 ? void 0 : accountPage.component);
1704
1676
  var ErrorComponent = getComponentFromName((errorPage === null || errorPage === void 0 ? void 0 : errorPage.component) || 'error', basePages, errorPage === null || errorPage === void 0 ? void 0 : errorPage.component);
1705
- return /*#__PURE__*/React.createElement(Switch, null, statusCode !== null ? /*#__PURE__*/React.createElement(Route, {
1706
- path: "*",
1707
- render: function render() {
1708
- return /*#__PURE__*/React.createElement(ErrorComponent, {
1709
- statusCode: statusCode
1710
- });
1711
- }
1712
- }) : null, user === null ? /*#__PURE__*/React.createElement(Route, {
1677
+ return /*#__PURE__*/React.createElement(Routes, null, statusCode !== null ? /*#__PURE__*/React.createElement(Route, {
1713
1678
  path: "*",
1714
- exact: true,
1715
- component: LoginComponent
1716
- }) : null, user !== null ? /*#__PURE__*/React.createElement(Route, {
1679
+ element: /*#__PURE__*/React.createElement(ErrorComponent, {
1680
+ statusCode: statusCode
1681
+ })
1682
+ }) : null, /*#__PURE__*/React.createElement(Route, {
1717
1683
  path: routes.home,
1718
1684
  exact: true,
1719
- component: HomeComponent
1720
- }) : /*#__PURE__*/React.createElement(Redirect, {
1721
- from: routes.home,
1685
+ element: user !== null ? /*#__PURE__*/React.createElement(HomeComponent, null) : /*#__PURE__*/React.createElement(Navigate, {
1686
+ to: route('login'),
1687
+ replace: true
1688
+ })
1689
+ }), user === null ? /*#__PURE__*/React.createElement(Route, {
1690
+ path: routes.login,
1722
1691
  exact: true,
1723
- to: route('login')
1724
- }), resources.map(function (resource) {
1692
+ element: /*#__PURE__*/React.createElement(LoginComponent, null)
1693
+ }) : null, resources.map(function (resource) {
1725
1694
  var _ref3 = resource || {},
1726
1695
  resourceId = _ref3.id;
1727
1696
 
1728
- return user !== null ? /*#__PURE__*/React.createElement(Route, {
1697
+ return user !== null ? createResourceRoutes(resource, {
1698
+ route: route,
1699
+ componentsManager: componentsManager
1700
+ }) : /*#__PURE__*/React.createElement(Route, {
1729
1701
  key: "resource-".concat(resourceId),
1730
1702
  path: route('resources.index', {
1731
1703
  resource: resourceId
1732
1704
  }),
1733
- render: function render() {
1734
- return /*#__PURE__*/React.createElement(ResourceRoutes, {
1735
- resource: resource
1736
- });
1737
- }
1738
- }) : /*#__PURE__*/React.createElement(Redirect, {
1739
- key: "resource-".concat(resourceId),
1740
- from: route('resources.index', {
1741
- resource: resourceId
1742
- }),
1743
- to: "".concat(route('login'), "?next=").concat(encodeURIComponent(pathname))
1705
+ element: /*#__PURE__*/React.createElement(Navigate, {
1706
+ to: "".concat(route('login'), "?next=").concat(encodeURIComponent(pathname)),
1707
+ replace: true
1708
+ })
1744
1709
  });
1745
1710
  }), /*#__PURE__*/React.createElement(Route, {
1746
- path: route('auth.account'),
1747
- component: AccountComponent
1711
+ path: route('account'),
1712
+ exact: true,
1713
+ element: user !== null ? /*#__PURE__*/React.createElement(AccountComponent, null) : /*#__PURE__*/React.createElement(Navigate, {
1714
+ to: "".concat(route('login'), "?next=").concat(encodeURIComponent(pathname)),
1715
+ replace: true
1716
+ })
1748
1717
  }), /*#__PURE__*/React.createElement(Route, {
1749
1718
  path: "*",
1750
- component: ErrorComponent
1719
+ elmeent: /*#__PURE__*/React.createElement(ErrorComponent, null)
1751
1720
  }));
1752
1721
  };
1753
1722
 
@@ -1755,13 +1724,13 @@ PanneauRoutes.propTypes = propTypes$1;
1755
1724
  PanneauRoutes.defaultProps = defaultProps$1;
1756
1725
 
1757
1726
  var propTypes = {
1758
- definition: PropTypes$1.panneauDefinition.isRequired,
1759
- components: PropTypes.oneOfType([PropTypes.objectOf(PropTypes.elementType), PropTypes.objectOf(PropTypes.objectOf(PropTypes.elementType))]),
1760
- user: PropTypes$1.user,
1761
- memoryRouter: PropTypes.bool,
1762
- baseUrl: PropTypes.string,
1763
- uppy: PropTypes$1.uppy,
1764
- statusCode: PropTypes$1.statusCode
1727
+ definition: PropTypes.panneauDefinition.isRequired,
1728
+ components: PropTypes$1.oneOfType([PropTypes$1.objectOf(PropTypes$1.elementType), PropTypes$1.objectOf(PropTypes$1.objectOf(PropTypes$1.elementType))]),
1729
+ user: PropTypes.user,
1730
+ memoryRouter: PropTypes$1.bool,
1731
+ baseUrl: PropTypes$1.string,
1732
+ uppy: PropTypes.uppy,
1733
+ statusCode: PropTypes.statusCode
1765
1734
  };
1766
1735
  var defaultProps = {
1767
1736
  components: null,
@@ -1811,6 +1780,12 @@ var Container = function Container(_ref) {
1811
1780
  }, {}));
1812
1781
  }, {}));
1813
1782
  }, [definition]);
1783
+ var onUnauthorized = useCallback(function () {
1784
+ window.location.href = baseUrl;
1785
+ }, [baseUrl]);
1786
+ var onLogout = useCallback(function () {
1787
+ window.location.reload();
1788
+ }, [baseUrl]);
1814
1789
  return /*#__PURE__*/React.createElement(Router, null, /*#__PURE__*/React.createElement(IntlProvider, {
1815
1790
  locale: locale,
1816
1791
  locales: locales,
@@ -1820,9 +1795,11 @@ var Container = function Container(_ref) {
1820
1795
  }, /*#__PURE__*/React.createElement(UppyProvider, uppy, /*#__PURE__*/React.createElement(RoutesProvider, {
1821
1796
  routes: routes
1822
1797
  }, /*#__PURE__*/React.createElement(FieldsProvider, null, /*#__PURE__*/React.createElement(FormsProvider, null, /*#__PURE__*/React.createElement(ListsProvider, null, /*#__PURE__*/React.createElement(DisplaysProvider, null, /*#__PURE__*/React.createElement(FiltersProvider, null, /*#__PURE__*/React.createElement(ApiProvider, {
1823
- baseUrl: baseUrl
1798
+ baseUrl: baseUrl,
1799
+ onUnauthorized: onUnauthorized
1824
1800
  }, /*#__PURE__*/React.createElement(AuthProvider, {
1825
- user: user
1801
+ user: user,
1802
+ onLogout: onLogout
1826
1803
  }, /*#__PURE__*/React.createElement(ComponentsProvider, {
1827
1804
  components: components
1828
1805
  }, /*#__PURE__*/React.createElement(PanneauRoutes, {
@@ -1833,4 +1810,4 @@ var Container = function Container(_ref) {
1833
1810
  Container.propTypes = propTypes;
1834
1811
  Container.defaultProps = defaultProps;
1835
1812
 
1836
- export default Container;
1813
+ export { GuestLayout, MainLayout, PageHeader, ResourceFilters, ResourceForm, ResourceItemsList, Container as default };