@panneau/app 1.0.4 → 1.1.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,12 +1,12 @@
1
1
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import _objectSpread from '@babel/runtime/helpers/objectSpread2';
3
3
  import PropTypes$1 from 'prop-types';
4
- import React, { useMemo, useCallback, useState, useEffect } from 'react';
5
- import { useLocation, useHistory, Switch, Route, Redirect, MemoryRouter } from 'react-router';
4
+ import React, { useMemo, useCallback, useState, useEffect, Fragment } from 'react';
5
+ import { useLocation, useNavigate, useParams, Route, Routes, Navigate, MemoryRouter } from 'react-router';
6
6
  import { Link, BrowserRouter } from 'react-router-dom';
7
7
  import { useUser, useLogout, useAuth, AuthProvider } from '@panneau/auth';
8
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';
9
+ import { useLocales, useFormsComponents, FormProvider, useUrlGenerator, usePanneauResources, usePanneau, usePanneauColorScheme, ResourceProvider, useFiltersComponents, useListsComponents, useComponentsManager, useFormComponent, useRoutes, usePagesComponentsManager, PanneauProvider, UppyProvider, RoutesProvider, ComponentsProvider } from '@panneau/core/contexts';
10
10
  import { useResourceStore, useResourceUpdate, useResourceDestroy, useResourceItem, useResourceItems, ApiProvider } from '@panneau/data';
11
11
  import DisplaysProvider from '@panneau/displays';
12
12
  import FieldsProvider from '@panneau/fields';
@@ -14,17 +14,20 @@ import FiltersProvider from '@panneau/filters';
14
14
  import FormsProvider from '@panneau/forms';
15
15
  import { useResourceValues, IntlProvider } from '@panneau/intl';
16
16
  import ListsProvider from '@panneau/lists';
17
- import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
18
- import { getComponentFromName } from '@panneau/core/utils';
17
+ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
19
18
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
19
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
20
+ import isObject from 'lodash/isObject';
20
21
  import { parse, stringify } from 'query-string';
21
22
  import { FormattedMessage, defineMessages } from 'react-intl';
22
23
  import { useResourceUrlGenerator, useForm } from '@panneau/core/hooks';
24
+ import { getComponentFromName } from '@panneau/core/utils';
23
25
  import classNames from 'classnames';
24
26
  import Button from '@panneau/element-button';
25
27
  import Form from '@panneau/element-form';
26
- import Navbar from '@panneau/element-navbar';
28
+ import isArray from 'lodash/isArray';
27
29
  import Menu from '@panneau/element-menu';
30
+ import Navbar from '@panneau/element-navbar';
28
31
  import Label from '@panneau/element-label';
29
32
  import isString from 'lodash/isString';
30
33
  import Alert from '@panneau/element-alert';
@@ -35,8 +38,8 @@ import { faUndo } from '@fortawesome/free-solid-svg-icons';
35
38
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
36
39
  import FormGroup from '@panneau/element-form-group';
37
40
 
38
- var _excluded$5 = ["resource", "action", "previous", "status", "value", "onSubmit", "errors", "generalError", "className"];
39
- var propTypes$n = {
41
+ var _excluded$6 = ["resource", "action", "previous", "status", "value", "onSubmit", "errors", "generalError", "className"];
42
+ var propTypes$m = {
40
43
  resource: PropTypes.resource.isRequired,
41
44
  action: PropTypes$1.string,
42
45
  previous: PropTypes$1.string,
@@ -50,7 +53,7 @@ var propTypes$n = {
50
53
  errors: PropTypes$1.objectOf(PropTypes$1.arrayOf(PropTypes$1.string)),
51
54
  className: PropTypes$1.string
52
55
  };
53
- var defaultProps$n = {
56
+ var defaultProps$m = {
54
57
  action: null,
55
58
  previous: null,
56
59
  status: null,
@@ -70,7 +73,7 @@ var DeleteForm = function DeleteForm(_ref) {
70
73
  _ref.errors;
71
74
  var generalError = _ref.generalError,
72
75
  className = _ref.className,
73
- props = _objectWithoutProperties(_ref, _excluded$5);
76
+ props = _objectWithoutProperties(_ref, _excluded$6);
74
77
  var _ref2 = value || {},
75
78
  _ref2$id = _ref2.id,
76
79
  id = _ref2$id === void 0 ? null : _ref2$id;
@@ -141,11 +144,11 @@ var DeleteForm = function DeleteForm(_ref) {
141
144
  }]
142
145
  })))));
143
146
  };
144
- DeleteForm.propTypes = propTypes$n;
145
- DeleteForm.defaultProps = defaultProps$n;
147
+ DeleteForm.propTypes = propTypes$m;
148
+ DeleteForm.defaultProps = defaultProps$m;
146
149
 
147
- var _excluded$4 = ["component", "resource", "onSuccess", "item", "type", "isDelete"];
148
- var propTypes$m = {
150
+ var _excluded$5 = ["component", "resource", "onSuccess", "item", "type", "isDelete"];
151
+ var propTypes$l = {
149
152
  component: PropTypes$1.string,
150
153
  resource: PropTypes.resource.isRequired,
151
154
  item: PropTypes$1.object,
@@ -154,7 +157,7 @@ var propTypes$m = {
154
157
  onSuccess: PropTypes$1.func,
155
158
  isDelete: PropTypes$1.bool
156
159
  };
157
- var defaultProps$m = {
160
+ var defaultProps$l = {
158
161
  component: null,
159
162
  item: null,
160
163
  type: null,
@@ -168,7 +171,7 @@ var ResourceForm = function ResourceForm(_ref) {
168
171
  item = _ref.item,
169
172
  type = _ref.type,
170
173
  isDelete = _ref.isDelete,
171
- props = _objectWithoutProperties(_ref, _excluded$4);
174
+ props = _objectWithoutProperties(_ref, _excluded$5);
172
175
  var locales = useLocales();
173
176
  var FormComponents = useFormsComponents();
174
177
  var _resource$fields = resource.fields,
@@ -296,15 +299,15 @@ var ResourceForm = function ResourceForm(_ref) {
296
299
  onChange: setValue
297
300
  })));
298
301
  };
299
- ResourceForm.propTypes = propTypes$m;
300
- ResourceForm.defaultProps = defaultProps$m;
302
+ ResourceForm.propTypes = propTypes$l;
303
+ ResourceForm.defaultProps = defaultProps$l;
301
304
 
302
- var propTypes$l = {
305
+ var propTypes$k = {
303
306
  className: PropTypes$1.string,
304
307
  itemClassName: PropTypes$1.string,
305
308
  linkClassName: PropTypes$1.string
306
309
  };
307
- var defaultProps$l = {
310
+ var defaultProps$k = {
308
311
  className: null,
309
312
  itemClassName: null,
310
313
  linkClassName: null
@@ -330,7 +333,7 @@ var AccountMenu = function AccountMenu(_ref) {
330
333
  "value": "Account"
331
334
  }]
332
335
  }),
333
- href: route('panneau.account'),
336
+ href: route('account'),
334
337
  dropdown: [
335
338
  // {
336
339
  // label: (
@@ -339,7 +342,7 @@ var AccountMenu = function AccountMenu(_ref) {
339
342
  // description="Menu label"
340
343
  // />
341
344
  // ),
342
- // href: route('panneau.account'),
345
+ // href: route('account'),
343
346
  // },
344
347
  {
345
348
  label: /*#__PURE__*/React.createElement(FormattedMessage, {
@@ -360,7 +363,7 @@ var AccountMenu = function AccountMenu(_ref) {
360
363
  "value": "Login"
361
364
  }]
362
365
  }),
363
- href: route('login')
366
+ href: route('auth.login')
364
367
  }];
365
368
  }, [user, route, onClickLogout]);
366
369
  return items !== null ? /*#__PURE__*/React.createElement(Menu, {
@@ -371,15 +374,15 @@ var AccountMenu = function AccountMenu(_ref) {
371
374
  dropdownAlign: "end"
372
375
  }) : null;
373
376
  };
374
- AccountMenu.propTypes = propTypes$l;
375
- AccountMenu.defaultProps = defaultProps$l;
377
+ AccountMenu.propTypes = propTypes$k;
378
+ AccountMenu.defaultProps = defaultProps$k;
376
379
 
377
- var propTypes$k = {
380
+ var propTypes$j = {
378
381
  className: PropTypes$1.string,
379
382
  itemClassName: PropTypes$1.string,
380
383
  linkClassName: PropTypes$1.string
381
384
  };
382
- var defaultProps$k = {
385
+ var defaultProps$j = {
383
386
  className: null,
384
387
  itemClassName: null,
385
388
  linkClassName: null
@@ -416,42 +419,77 @@ var ResourcesMenu = function ResourcesMenu(_ref) {
416
419
  linkClassName: linkClassName
417
420
  });
418
421
  };
419
- ResourcesMenu.propTypes = propTypes$k;
420
- ResourcesMenu.defaultProps = defaultProps$k;
422
+ ResourcesMenu.propTypes = propTypes$j;
423
+ ResourcesMenu.defaultProps = defaultProps$j;
421
424
 
422
- /* eslint-disable react/jsx-props-no-spreading */
423
- var propTypes$j = {};
424
- var defaultProps$j = {};
425
+ var propTypes$i = {};
426
+ var defaultProps$i = {};
425
427
  var MainNavbar = function MainNavbar(props) {
426
428
  var _usePanneau = usePanneau(),
427
- name = _usePanneau.name;
429
+ name = _usePanneau.name,
430
+ _usePanneau$menus = _usePanneau.menus,
431
+ menus = _usePanneau$menus === void 0 ? null : _usePanneau$menus;
432
+ var _ref = menus || {},
433
+ _ref$main = _ref.main,
434
+ main = _ref$main === void 0 ? null : _ref$main,
435
+ _ref$guest = _ref.guest,
436
+ guest = _ref$guest === void 0 ? null : _ref$guest;
428
437
  var _usePanneauColorSchem = usePanneauColorScheme(),
429
438
  background = _usePanneauColorSchem.background;
430
439
  var route = useUrlGenerator();
431
440
  var user = useUser();
441
+ var items = useMemo(function () {
442
+ var menuItems = (user !== null ? main : guest) || [];
443
+ var hasResources = menuItems.indexOf('resources') !== -1;
444
+ var hasAccount = menuItems.indexOf('account') !== -1;
445
+ return [!hasResources && user !== null ? 'resources' : null].concat(_toConsumableArray(menuItems), [!hasAccount && menuItems.indexOf('separator') === -1 ? 'separator' : null, !hasAccount ? 'account' : null]).filter(function (it) {
446
+ return it !== null;
447
+ }).reduce(function (currentItems, item) {
448
+ if (item === 'resources') {
449
+ return [].concat(_toConsumableArray(currentItems), [/*#__PURE__*/React.createElement(ResourcesMenu, {
450
+ className: "navbar-nav",
451
+ itemClassName: "nav-item",
452
+ linkClassName: "nav-link"
453
+ })]);
454
+ }
455
+ if (item === 'account') {
456
+ return [].concat(_toConsumableArray(currentItems), [/*#__PURE__*/React.createElement(AccountMenu, {
457
+ className: "navbar-nav",
458
+ itemClassName: "nav-item",
459
+ linkClassName: "nav-link"
460
+ })]);
461
+ }
462
+ if (item === 'separator') {
463
+ return [].concat(_toConsumableArray(currentItems), [/*#__PURE__*/React.createElement("span", {
464
+ className: "ms-auto"
465
+ })]);
466
+ }
467
+ var lastItem = currentItems.length > 0 ? currentItems[currentItems.length - 1] : null;
468
+ return isArray(lastItem) ? [].concat(_toConsumableArray(currentItems.slice(0, currentItems.length - 1)), [[].concat(_toConsumableArray(lastItem), [item])]) : [].concat(_toConsumableArray(currentItems), [[item]]);
469
+ }, []).map(function (it) {
470
+ return isArray(it) ? /*#__PURE__*/React.createElement(Menu, {
471
+ items: it,
472
+ className: "navbar-nav",
473
+ itemClassName: "nav-item",
474
+ linkClassName: "nav-link"
475
+ }) : it;
476
+ });
477
+ }, [main]);
432
478
  return /*#__PURE__*/React.createElement(Navbar, Object.assign({
433
479
  theme: background
434
480
  }, props), name !== null ? /*#__PURE__*/React.createElement(Link, {
435
481
  to: route('home'),
436
482
  className: "navbar-brand"
437
- }, name) : null, user !== null ? /*#__PURE__*/React.createElement(ResourcesMenu, {
438
- className: "navbar-nav ml-4",
439
- itemClassName: "nav-item",
440
- linkClassName: "nav-link"
441
- }) : null, /*#__PURE__*/React.createElement(AccountMenu, {
442
- className: "navbar-nav ms-auto",
443
- itemClassName: "nav-item",
444
- linkClassName: "nav-link"
445
- }));
483
+ }, name) : null, items);
446
484
  };
447
- MainNavbar.propTypes = propTypes$j;
448
- MainNavbar.defaultProps = defaultProps$j;
485
+ MainNavbar.propTypes = propTypes$i;
486
+ MainNavbar.defaultProps = defaultProps$i;
449
487
 
450
- var propTypes$i = {
488
+ var propTypes$h = {
451
489
  children: PropTypes$1.node.isRequired,
452
490
  fullscreen: PropTypes$1.bool
453
491
  };
454
- var defaultProps$i = {
492
+ var defaultProps$h = {
455
493
  fullscreen: false
456
494
  };
457
495
  var MainLayout = function MainLayout(_ref) {
@@ -471,17 +509,17 @@ var MainLayout = function MainLayout(_ref) {
471
509
  }, _defineProperty(_ref2, "bg-".concat(background), background !== null), _defineProperty(_ref2, "text-".concat(text), text !== null), _ref2)])
472
510
  }, children));
473
511
  };
474
- MainLayout.propTypes = propTypes$i;
475
- MainLayout.defaultProps = defaultProps$i;
512
+ MainLayout.propTypes = propTypes$h;
513
+ MainLayout.defaultProps = defaultProps$h;
476
514
 
477
- var propTypes$h = {
515
+ var propTypes$g = {
478
516
  title: PropTypes.label,
479
517
  actions: PropTypes$1.node,
480
518
  small: PropTypes$1.bool,
481
519
  className: PropTypes$1.string,
482
520
  children: PropTypes$1.node
483
521
  };
484
- var defaultProps$h = {
522
+ var defaultProps$g = {
485
523
  title: null,
486
524
  actions: null,
487
525
  small: false,
@@ -519,22 +557,22 @@ var PageHeader = function PageHeader(_ref) {
519
557
  className: "col-12 col-md-8 col-lg-7"
520
558
  }, inner)) : inner), children);
521
559
  };
522
- PageHeader.propTypes = propTypes$h;
523
- PageHeader.defaultProps = defaultProps$h;
560
+ PageHeader.propTypes = propTypes$g;
561
+ PageHeader.defaultProps = defaultProps$g;
524
562
 
525
- var propTypes$g = {
563
+ var propTypes$f = {
526
564
  resource: PropTypes.resource.isRequired
527
565
  };
528
- var defaultProps$g = {};
566
+ var defaultProps$f = {};
529
567
  var ResourceCreatePage = function ResourceCreatePage(_ref) {
530
568
  var resource = _ref.resource;
531
- var history = useHistory();
569
+ var navigate = useNavigate();
532
570
  var _useLocation = useLocation(),
533
571
  search = _useLocation.search;
534
572
  var resourceRoute = useResourceUrlGenerator(resource);
535
573
  var onSuccess = useCallback(function () {
536
- history.push("".concat(resourceRoute('index'), "?created=true"));
537
- }, [history, resourceRoute]);
574
+ navigate("".concat(resourceRoute('index'), "?created=true"));
575
+ }, [navigate, resourceRoute]);
538
576
  var _useMemo = useMemo(function () {
539
577
  return parse(search);
540
578
  }, [search]),
@@ -568,26 +606,26 @@ var ResourceCreatePage = function ResourceCreatePage(_ref) {
568
606
  onSuccess: onSuccess
569
607
  }))))));
570
608
  };
571
- ResourceCreatePage.propTypes = propTypes$g;
572
- ResourceCreatePage.defaultProps = defaultProps$g;
609
+ ResourceCreatePage.propTypes = propTypes$f;
610
+ ResourceCreatePage.defaultProps = defaultProps$f;
573
611
 
574
612
  // import Button from '../buttons/Button';
575
613
 
576
- var propTypes$f = {
577
- resource: PropTypes.resource.isRequired,
578
- itemId: PropTypes$1.string.isRequired
614
+ var propTypes$e = {
615
+ resource: PropTypes.resource.isRequired
579
616
  };
580
- var defaultProps$f = {};
617
+ var defaultProps$e = {};
581
618
  var ResourceDeletePage = function ResourceDeletePage(_ref) {
582
- var resource = _ref.resource,
583
- itemId = _ref.itemId;
584
- var history = useHistory();
619
+ var resource = _ref.resource;
620
+ var _useParams = useParams(),
621
+ itemId = _useParams.id;
622
+ var navigate = useNavigate();
585
623
  var resourceRoute = useResourceUrlGenerator(resource);
586
624
  var _useResourceItem = useResourceItem(resource, itemId),
587
625
  item = _useResourceItem.item;
588
626
  var onSuccess = useCallback(function () {
589
- return history.push("".concat(resourceRoute('index'), "?deleted=true"));
590
- }, [history, resourceRoute]);
627
+ return navigate("".concat(resourceRoute('index'), "?deleted=true"));
628
+ }, [navigate, resourceRoute]);
591
629
 
592
630
  // Navigate back
593
631
  var _ref2 = history || {},
@@ -626,19 +664,19 @@ var ResourceDeletePage = function ResourceDeletePage(_ref) {
626
664
  isDelete: true
627
665
  }) : null)))));
628
666
  };
629
- ResourceDeletePage.propTypes = propTypes$f;
630
- ResourceDeletePage.defaultProps = defaultProps$f;
667
+ ResourceDeletePage.propTypes = propTypes$e;
668
+ ResourceDeletePage.defaultProps = defaultProps$e;
631
669
 
632
670
  // import Button from '../buttons/Button';
633
671
 
634
- var propTypes$e = {
635
- resource: PropTypes.resource.isRequired,
636
- itemId: PropTypes$1.string.isRequired
672
+ var propTypes$d = {
673
+ resource: PropTypes.resource.isRequired
637
674
  };
638
- var defaultProps$e = {};
675
+ var defaultProps$d = {};
639
676
  var ResourceEditPage = function ResourceEditPage(_ref) {
640
- var resource = _ref.resource,
641
- itemId = _ref.itemId;
677
+ var resource = _ref.resource;
678
+ var _useParams = useParams(),
679
+ itemId = _useParams.id;
642
680
  var _useResourceItem = useResourceItem(resource, itemId),
643
681
  item = _useResourceItem.item;
644
682
  var _ref2 = item || {},
@@ -683,14 +721,14 @@ var ResourceEditPage = function ResourceEditPage(_ref) {
683
721
  onSuccess: onSuccess
684
722
  }) : null)))));
685
723
  };
686
- ResourceEditPage.propTypes = propTypes$e;
687
- ResourceEditPage.defaultProps = defaultProps$e;
724
+ ResourceEditPage.propTypes = propTypes$d;
725
+ ResourceEditPage.defaultProps = defaultProps$d;
688
726
 
689
- var propTypes$d = {
727
+ var propTypes$c = {
690
728
  resource: PropTypes.resource.isRequired,
691
729
  className: PropTypes$1.string
692
730
  };
693
- var defaultProps$d = {
731
+ var defaultProps$c = {
694
732
  className: null
695
733
  };
696
734
  var ResourceCreateButtom = function ResourceCreateButtom(_ref) {
@@ -707,10 +745,9 @@ var ResourceCreateButtom = function ResourceCreateButtom(_ref) {
707
745
  setDropdownOpened = _useState2[1];
708
746
  var onClickDropdown = useCallback(function (e) {
709
747
  e.preventDefault();
710
- setDropdownOpened(function (opened) {
711
- return !opened;
712
- });
713
- }, [setDropdownOpened]);
748
+ e.stopPropagation();
749
+ setDropdownOpened(!dropdownOpened);
750
+ }, [setDropdownOpened, dropdownOpened]);
714
751
  var finalTypes = types !== null ? types.filter(function (_ref2) {
715
752
  var _ref2$settings = _ref2.settings,
716
753
  _ref2$settings2 = _ref2$settings === void 0 ? {} : _ref2$settings,
@@ -720,8 +757,10 @@ var ResourceCreateButtom = function ResourceCreateButtom(_ref) {
720
757
  }) : null;
721
758
  var hasMultipleTypes = finalTypes !== null && finalTypes.length > 1;
722
759
  var onDropdownClickOutside = useCallback(function () {
723
- setDropdownOpened(false);
724
- }, [setDropdownOpened]);
760
+ if (dropdownOpened) {
761
+ setDropdownOpened(false);
762
+ }
763
+ }, [setDropdownOpened, dropdownOpened]);
725
764
  var button = /*#__PURE__*/React.createElement(Button, {
726
765
  href: !hasMultipleTypes ? "".concat(resourceRoute('create')).concat(finalTypes !== null && finalTypes.length === 1 ? "?type=".concat(finalTypes[0].id) : '') : '#',
727
766
  size: "lg",
@@ -758,11 +797,11 @@ var ResourceCreateButtom = function ResourceCreateButtom(_ref) {
758
797
  onClickOutside: onDropdownClickOutside
759
798
  })) : button;
760
799
  };
761
- ResourceCreateButtom.propTypes = propTypes$d;
762
- ResourceCreateButtom.defaultProps = defaultProps$d;
800
+ ResourceCreateButtom.propTypes = propTypes$c;
801
+ ResourceCreateButtom.defaultProps = defaultProps$c;
763
802
 
764
- var _excluded$3 = ["component", "name", "groupLabel"];
765
- var propTypes$c = {
803
+ var _excluded$4 = ["component", "name", "groupLabel"];
804
+ var propTypes$b = {
766
805
  filters: PropTypes$1.arrayOf(PropTypes$1.shape({
767
806
  id: PropTypes$1.string.isRequired,
768
807
  component: PropTypes$1.string.isRequired
@@ -777,7 +816,7 @@ var propTypes$c = {
777
816
  // eslint-disable-line react/forbid-prop-types
778
817
  className: PropTypes$1.string
779
818
  };
780
- var defaultProps$c = {
819
+ var defaultProps$b = {
781
820
  filters: [],
782
821
  value: null,
783
822
  onChange: null,
@@ -826,7 +865,7 @@ var ResourceFilters = function ResourceFilters(_ref) {
826
865
  var component = _ref3.component,
827
866
  name = _ref3.name,
828
867
  groupLabel = _ref3.groupLabel,
829
- filterProps = _objectWithoutProperties(_ref3, _excluded$3);
868
+ filterProps = _objectWithoutProperties(_ref3, _excluded$4);
830
869
  var FilterComponent = getComponentFromName(component, FilterComponents, null);
831
870
  var filterValue = value !== null && value[name] ? value[name] : null;
832
871
  var onFilterChange = useCallback(function (newFilterValue) {
@@ -858,12 +897,12 @@ var ResourceFilters = function ResourceFilters(_ref) {
858
897
  icon: faUndo
859
898
  })) : null);
860
899
  };
861
- ResourceFilters.propTypes = propTypes$c;
862
- ResourceFilters.defaultProps = defaultProps$c;
900
+ ResourceFilters.propTypes = propTypes$b;
901
+ ResourceFilters.defaultProps = defaultProps$b;
863
902
 
864
- var _excluded$2 = ["component", "showPagination", "filters"],
903
+ var _excluded$3 = ["component", "showPagination", "filters"],
865
904
  _excluded2$1 = ["page"];
866
- var propTypes$b = {
905
+ var propTypes$a = {
867
906
  resource: PropTypes.resource.isRequired,
868
907
  query: PropTypes$1.object,
869
908
  // eslint-disable-line react/forbid-prop-types
@@ -875,7 +914,7 @@ var propTypes$b = {
875
914
  onQueryChange: PropTypes$1.func,
876
915
  onQueryReset: PropTypes$1.func
877
916
  };
878
- var defaultProps$b = {
917
+ var defaultProps$a = {
879
918
  query: null,
880
919
  paginated: true,
881
920
  component: null,
@@ -899,7 +938,7 @@ var ResourceItemsList = function ResourceItemsList(_ref) {
899
938
  showPagination = _resource$index2$show === void 0 ? true : _resource$index2$show,
900
939
  _resource$index2$filt = _resource$index2.filters,
901
940
  filters = _resource$index2$filt === void 0 ? null : _resource$index2$filt,
902
- listProps = _objectWithoutProperties(_resource$index2, _excluded$2);
941
+ listProps = _objectWithoutProperties(_resource$index2, _excluded$3);
903
942
  var _usePanneauColorSchem = usePanneauColorScheme(),
904
943
  _usePanneauColorSchem2 = _usePanneauColorSchem.background,
905
944
  theme = _usePanneauColorSchem2 === void 0 ? null : _usePanneauColorSchem2;
@@ -949,16 +988,16 @@ var ResourceItemsList = function ResourceItemsList(_ref) {
949
988
  className: "mt-4 mb-1"
950
989
  }) : null);
951
990
  };
952
- ResourceItemsList.propTypes = propTypes$b;
953
- ResourceItemsList.defaultProps = defaultProps$b;
991
+ ResourceItemsList.propTypes = propTypes$a;
992
+ ResourceItemsList.defaultProps = defaultProps$a;
954
993
 
955
- var _excluded$1 = ["id", "component"];
956
- var propTypes$a = {
994
+ var _excluded$2 = ["id", "component"];
995
+ var propTypes$9 = {
957
996
  resource: PropTypes.resource.isRequired,
958
997
  defaultActions: PropTypes$1.arrayOf(PropTypes$1.object) // eslint-disable-line react/forbid-prop-types
959
998
  };
960
999
 
961
- var defaultProps$a = {
1000
+ var defaultProps$9 = {
962
1001
  defaultActions: ['create']
963
1002
  };
964
1003
  var ResourceIndexPage = function ResourceIndexPage(_ref) {
@@ -993,7 +1032,7 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
993
1032
  var componentsManager = useComponentsManager();
994
1033
  var _useLocation = useLocation(),
995
1034
  search = _useLocation.search;
996
- var history = useHistory();
1035
+ var navigate = useNavigate();
997
1036
  var query = useMemo(function () {
998
1037
  return parse(search);
999
1038
  }, [search]);
@@ -1012,19 +1051,21 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
1012
1051
  var value = submitQuery[key];
1013
1052
  return value !== null ? _objectSpread(_objectSpread({}, currentQuery), {}, _defineProperty({}, key, value)) : currentQuery;
1014
1053
  }, null) : null;
1015
- history.push("".concat(url).concat(newQuery !== null ? "?".concat(stringify(newQuery, {
1054
+ navigate("".concat(url).concat(newQuery !== null ? "?".concat(stringify(newQuery, {
1016
1055
  arrayFormat: 'bracket'
1017
1056
  })) : ''));
1018
- }, [history, url, query, paginated]);
1057
+ }, [navigate, url, query, paginated]);
1019
1058
  var onQueryReset = useCallback(function () {
1020
1059
  var queryString = stringify(null, {
1021
1060
  arrayFormat: 'bracket'
1022
1061
  });
1023
- history.push("".concat(url, "?").concat(queryString));
1024
- }, [history, url, paginated]);
1062
+ navigate("".concat(url, "?").concat(queryString));
1063
+ }, [navigate, url, paginated]);
1025
1064
  var onClickCloseAlert = useCallback(function () {
1026
- history.replace(url);
1027
- }, [history, url]);
1065
+ navigate(url, {
1066
+ replace: true
1067
+ });
1068
+ }, [navigate, url]);
1028
1069
  return /*#__PURE__*/React.createElement(ResourceProvider, {
1029
1070
  resource: resource
1030
1071
  }, /*#__PURE__*/React.createElement(MainLayout, null, /*#__PURE__*/React.createElement(PageHeader, {
@@ -1035,7 +1076,7 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
1035
1076
  var id = _ref5.id,
1036
1077
  _ref5$component = _ref5.component,
1037
1078
  component = _ref5$component === void 0 ? Button : _ref5$component,
1038
- actionProps = _objectWithoutProperties(_ref5, _excluded$1);
1079
+ actionProps = _objectWithoutProperties(_ref5, _excluded$2);
1039
1080
  var ActionComponent = isString(component) ? componentsManager.getComponent(component) : component;
1040
1081
  return ActionComponent !== null ? /*#__PURE__*/React.createElement(ActionComponent, Object.assign({
1041
1082
  key: "action-".concat(id)
@@ -1082,13 +1123,13 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
1082
1123
  onQueryReset: onQueryReset
1083
1124
  }))));
1084
1125
  };
1085
- ResourceIndexPage.propTypes = propTypes$a;
1086
- ResourceIndexPage.defaultProps = defaultProps$a;
1126
+ ResourceIndexPage.propTypes = propTypes$9;
1127
+ ResourceIndexPage.defaultProps = defaultProps$9;
1087
1128
 
1088
- var propTypes$9 = {
1129
+ var propTypes$8 = {
1089
1130
  resource: PropTypes.resource.isRequired
1090
1131
  };
1091
- var defaultProps$9 = {};
1132
+ var defaultProps$8 = {};
1092
1133
  var ResourceShowPage = function ResourceShowPage(_ref) {
1093
1134
  var resource = _ref.resource;
1094
1135
  return /*#__PURE__*/React.createElement(ResourceProvider, {
@@ -1099,12 +1140,12 @@ var ResourceShowPage = function ResourceShowPage(_ref) {
1099
1140
  className: "container-sm"
1100
1141
  }, "Show page")));
1101
1142
  };
1102
- ResourceShowPage.propTypes = propTypes$9;
1103
- ResourceShowPage.defaultProps = defaultProps$9;
1143
+ ResourceShowPage.propTypes = propTypes$8;
1144
+ ResourceShowPage.defaultProps = defaultProps$8;
1104
1145
 
1105
1146
  /* eslint-disable react/jsx-props-no-spreading */
1106
- var propTypes$8 = {};
1107
- var defaultProps$8 = {};
1147
+ var propTypes$7 = {};
1148
+ var defaultProps$7 = {};
1108
1149
  var HomePage = function HomePage() {
1109
1150
  var route = useUrlGenerator();
1110
1151
  var resources = usePanneauResources();
@@ -1140,26 +1181,26 @@ var HomePage = function HomePage() {
1140
1181
  }));
1141
1182
  })));
1142
1183
  };
1143
- HomePage.propTypes = propTypes$8;
1144
- HomePage.defaultProps = defaultProps$8;
1184
+ HomePage.propTypes = propTypes$7;
1185
+ HomePage.defaultProps = defaultProps$7;
1145
1186
 
1146
- var propTypes$7 = {};
1147
- var defaultProps$7 = {};
1187
+ var propTypes$6 = {};
1188
+ var defaultProps$6 = {};
1148
1189
  var AccountPage = function AccountPage() {
1149
1190
  return /*#__PURE__*/React.createElement(MainLayout, null, /*#__PURE__*/React.createElement("div", {
1150
1191
  className: "container-sm py-4"
1151
1192
  }, "Account page"));
1152
1193
  };
1153
- AccountPage.propTypes = propTypes$7;
1154
- AccountPage.defaultProps = defaultProps$7;
1194
+ AccountPage.propTypes = propTypes$6;
1195
+ AccountPage.defaultProps = defaultProps$6;
1155
1196
 
1156
1197
  /* eslint-disable react/jsx-props-no-spreading */
1157
- var propTypes$6 = {
1198
+ var propTypes$5 = {
1158
1199
  fields: PropTypes.fields,
1159
1200
  className: PropTypes$1.string,
1160
1201
  onSuccess: PropTypes$1.func
1161
1202
  };
1162
- var defaultProps$6 = {
1203
+ var defaultProps$5 = {
1163
1204
  fields: [{
1164
1205
  name: 'email',
1165
1206
  type: 'email',
@@ -1231,14 +1272,14 @@ var LoginForm = function LoginForm(_ref) {
1231
1272
  })
1232
1273
  });
1233
1274
  };
1234
- LoginForm.propTypes = propTypes$6;
1235
- LoginForm.defaultProps = defaultProps$6;
1275
+ LoginForm.propTypes = propTypes$5;
1276
+ LoginForm.defaultProps = defaultProps$5;
1236
1277
 
1237
- var propTypes$5 = {
1278
+ var propTypes$4 = {
1238
1279
  children: PropTypes$1.node.isRequired,
1239
1280
  fullscreen: PropTypes$1.bool
1240
1281
  };
1241
- var defaultProps$5 = {
1282
+ var defaultProps$4 = {
1242
1283
  fullscreen: false
1243
1284
  };
1244
1285
  var GuestLayout = function GuestLayout(_ref) {
@@ -1264,12 +1305,12 @@ var GuestLayout = function GuestLayout(_ref) {
1264
1305
  })
1265
1306
  }, children)));
1266
1307
  };
1267
- GuestLayout.propTypes = propTypes$5;
1268
- GuestLayout.defaultProps = defaultProps$5;
1308
+ GuestLayout.propTypes = propTypes$4;
1309
+ GuestLayout.defaultProps = defaultProps$4;
1269
1310
 
1270
1311
  /* eslint-disable react/jsx-props-no-spreading */
1271
- var propTypes$4 = {};
1272
- var defaultProps$4 = {};
1312
+ var propTypes$3 = {};
1313
+ var defaultProps$3 = {};
1273
1314
  var LoginPage = function LoginPage() {
1274
1315
  var route = useUrlGenerator();
1275
1316
  var onSuccess = useCallback(function () {
@@ -1295,8 +1336,8 @@ var LoginPage = function LoginPage() {
1295
1336
  onSuccess: onSuccess
1296
1337
  })))));
1297
1338
  };
1298
- LoginPage.propTypes = propTypes$4;
1299
- LoginPage.defaultProps = defaultProps$4;
1339
+ LoginPage.propTypes = propTypes$3;
1340
+ LoginPage.defaultProps = defaultProps$3;
1300
1341
 
1301
1342
  var messages = defineMessages({
1302
1343
  metaTitle401: {
@@ -1391,10 +1432,10 @@ var messages = defineMessages({
1391
1432
  }]
1392
1433
  }
1393
1434
  });
1394
- var propTypes$3 = {
1435
+ var propTypes$2 = {
1395
1436
  statusCode: PropTypes.statusCode
1396
1437
  };
1397
- var defaultProps$3 = {
1438
+ var defaultProps$2 = {
1398
1439
  statusCode: null
1399
1440
  };
1400
1441
  var ErrorPage = function ErrorPage(_ref) {
@@ -1409,37 +1450,20 @@ var ErrorPage = function ErrorPage(_ref) {
1409
1450
  className: "col-12 col-sm-8 col-md-6"
1410
1451
  }, /*#__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)]))))));
1411
1452
  };
1412
- ErrorPage.propTypes = propTypes$3;
1413
- ErrorPage.defaultProps = defaultProps$3;
1453
+ ErrorPage.propTypes = propTypes$2;
1454
+ ErrorPage.defaultProps = defaultProps$2;
1414
1455
 
1415
- var basePages = /*#__PURE__*/Object.freeze({
1416
- __proto__: null,
1417
- ResourceCreate: ResourceCreatePage,
1418
- ResourceDelete: ResourceDeletePage,
1419
- ResourceEdit: ResourceEditPage,
1420
- ResourceIndex: ResourceIndexPage,
1421
- ResourceShow: ResourceShowPage,
1422
- Home: HomePage,
1423
- Account: AccountPage,
1424
- Login: LoginPage,
1425
- Error: ErrorPage
1426
- });
1427
-
1428
- var _excluded = ["path", "component", "exact"],
1429
- _excluded2 = ["id"];
1430
- var propTypes$2 = {
1431
- resource: PropTypes.resource.isRequired
1432
- };
1433
- var defaultProps$2 = {};
1434
- var ResourceRoutes = function ResourceRoutes(_ref) {
1435
- var resource = _ref.resource;
1456
+ var _excluded$1 = ["path", "component", "exact"];
1457
+ var createResourceRoutes = function createResourceRoutes(resource, _ref) {
1458
+ var route = _ref.route,
1459
+ componentsManager = _ref.componentsManager,
1460
+ _ref$pages = _ref.pages,
1461
+ pages = _ref$pages === void 0 ? {} : _ref$pages;
1436
1462
  var resourceId = resource.id,
1437
1463
  _resource$pages = resource.pages,
1438
- pages = _resource$pages === void 0 ? {} : _resource$pages,
1464
+ resourcePages = _resource$pages === void 0 ? {} : _resource$pages,
1439
1465
  _resource$extraRoutes = resource.extraRoutes,
1440
1466
  extraRoutes = _resource$extraRoutes === void 0 ? [] : _resource$extraRoutes;
1441
- var route = useUrlGenerator();
1442
- var componentsManager = useComponentsManager();
1443
1467
 
1444
1468
  // Load custom pages from resource
1445
1469
  var _ref2 = pages || {},
@@ -1453,96 +1477,85 @@ var ResourceRoutes = function ResourceRoutes(_ref) {
1453
1477
  editPage = _ref2$edit === void 0 ? null : _ref2$edit,
1454
1478
  _ref2$delete = _ref2["delete"],
1455
1479
  deletePage = _ref2$delete === void 0 ? null : _ref2$delete;
1456
- var ResourceIndexComponent = indexPage !== null && typeof indexPage.component !== 'undefined' ? componentsManager.getComponent(indexPage.component) : ResourceIndexPage;
1457
- var ResourceShowComponent = showPage !== null && typeof showPage.component !== 'undefined' ? componentsManager.getComponent(showPage.component) : ResourceShowPage;
1458
- var ResourceCreateComponent = createPage !== null && typeof createPage.component !== 'undefined' ? componentsManager.getComponent(createPage.component) : ResourceCreatePage;
1459
- var ResourceEditComponent = editPage !== null && typeof editPage.component !== 'undefined' ? componentsManager.getComponent(editPage.component) : ResourceEditPage;
1460
- var ResourceDeleteComponent = deletePage !== null && typeof deletePage.component !== 'undefined' ? componentsManager.getComponent(deletePage.component) : ResourceDeletePage;
1461
- return /*#__PURE__*/React.createElement(Switch, null, extraRoutes.map(function (_ref3) {
1462
- var path = _ref3.path,
1463
- component = _ref3.component,
1464
- _ref3$exact = _ref3.exact,
1465
- exact = _ref3$exact === void 0 ? true : _ref3$exact,
1466
- pageProps = _objectWithoutProperties(_ref3, _excluded);
1467
- var RouteComponent = componentsManager.getComponent(component);
1468
- return RouteComponent !== null ? /*#__PURE__*/React.createElement(Route, {
1469
- key: "route-".concat(path),
1470
- path: path,
1471
- exact: exact,
1472
- render: function render(_ref4) {
1473
- var _ref4$match$params = _ref4.match.params,
1474
- id = _ref4$match$params.id,
1475
- params = _objectWithoutProperties(_ref4$match$params, _excluded2);
1476
- return /*#__PURE__*/React.createElement(RouteComponent, Object.assign({
1477
- resource: resource,
1478
- itemId: id
1479
- }, pageProps, params));
1480
- }
1481
- }) : null;
1482
- }), /*#__PURE__*/React.createElement(Route, {
1480
+ var _ref3 = resourcePages || {},
1481
+ _ref3$index = _ref3.index,
1482
+ resourceIndexPage = _ref3$index === void 0 ? null : _ref3$index,
1483
+ _ref3$show = _ref3.show,
1484
+ resourceShowPage = _ref3$show === void 0 ? null : _ref3$show,
1485
+ _ref3$create = _ref3.create,
1486
+ resourceCreatePage = _ref3$create === void 0 ? null : _ref3$create,
1487
+ _ref3$edit = _ref3.edit,
1488
+ resourceEditPage = _ref3$edit === void 0 ? null : _ref3$edit,
1489
+ _ref3$delete = _ref3["delete"],
1490
+ resourceDeletePage = _ref3$delete === void 0 ? null : _ref3$delete;
1491
+ var ResourceIndexComponent = componentsManager.getComponent(resourceIndexPage === null || resourceIndexPage === void 0 ? void 0 : resourceIndexPage.component) || componentsManager.getComponent(indexPage === null || indexPage === void 0 ? void 0 : indexPage.component) || ResourceIndexPage;
1492
+ var ResourceShowComponent = componentsManager.getComponent(resourceShowPage === null || resourceShowPage === void 0 ? void 0 : resourceShowPage.component) || componentsManager.getComponent(showPage === null || showPage === void 0 ? void 0 : showPage.component) || ResourceShowPage;
1493
+ var ResourceCreateComponent = componentsManager.getComponent(resourceCreatePage === null || resourceCreatePage === void 0 ? void 0 : resourceCreatePage.component) || componentsManager.getComponent(createPage === null || createPage === void 0 ? void 0 : createPage.component) || ResourceCreatePage;
1494
+ var ResourceEditComponent = componentsManager.getComponent(resourceEditPage === null || resourceEditPage === void 0 ? void 0 : resourceEditPage.component) || componentsManager.getComponent(editPage === null || editPage === void 0 ? void 0 : editPage.component) || ResourceEditPage;
1495
+ var ResourceDeleteComponent = componentsManager.getComponent(resourceDeletePage === null || resourceDeletePage === void 0 ? void 0 : resourceDeletePage.component) || componentsManager.getComponent(deletePage === null || deletePage === void 0 ? void 0 : deletePage.component) || ResourceDeletePage;
1496
+ return [/*#__PURE__*/React.createElement(Route, {
1483
1497
  path: route('resources.index', {
1484
1498
  resource: resourceId
1485
1499
  }),
1486
1500
  exact: true,
1487
- render: function render() {
1488
- return /*#__PURE__*/React.createElement(ResourceIndexComponent, {
1489
- resource: resource
1490
- });
1491
- }
1501
+ element: /*#__PURE__*/React.createElement(ResourceIndexComponent, {
1502
+ resource: resource
1503
+ })
1492
1504
  }), /*#__PURE__*/React.createElement(Route, {
1493
1505
  path: route('resources.create', {
1494
1506
  resource: resourceId
1495
1507
  }),
1496
1508
  exact: true,
1497
- render: function render() {
1498
- return /*#__PURE__*/React.createElement(ResourceCreateComponent, {
1499
- resource: resource
1500
- });
1501
- }
1509
+ element: /*#__PURE__*/React.createElement(ResourceCreateComponent, {
1510
+ resource: resource
1511
+ })
1502
1512
  }), /*#__PURE__*/React.createElement(Route, {
1503
1513
  path: route('resources.show', {
1504
1514
  resource: resourceId,
1505
1515
  id: ':id'
1506
1516
  }),
1507
1517
  exact: true,
1508
- render: function render(_ref5) {
1509
- var id = _ref5.match.params.id;
1510
- return /*#__PURE__*/React.createElement(ResourceShowComponent, {
1511
- resource: resource,
1512
- itemId: id
1513
- });
1514
- }
1518
+ element: /*#__PURE__*/React.createElement(ResourceShowComponent, {
1519
+ resource: resource
1520
+ })
1515
1521
  }), /*#__PURE__*/React.createElement(Route, {
1516
1522
  path: route('resources.edit', {
1517
1523
  resource: resourceId,
1518
1524
  id: ':id'
1519
1525
  }),
1520
1526
  exact: true,
1521
- render: function render(_ref6) {
1522
- var id = _ref6.match.params.id;
1523
- return /*#__PURE__*/React.createElement(ResourceEditComponent, {
1524
- resource: resource,
1525
- itemId: id
1526
- });
1527
- }
1527
+ element: /*#__PURE__*/React.createElement(ResourceEditComponent, {
1528
+ resource: resource
1529
+ })
1528
1530
  }), /*#__PURE__*/React.createElement(Route, {
1529
1531
  path: route('resources.delete', {
1530
1532
  resource: resourceId,
1531
1533
  id: ':id'
1532
1534
  }),
1533
1535
  exact: true,
1534
- render: function render(_ref7) {
1535
- var id = _ref7.match.params.id;
1536
- return /*#__PURE__*/React.createElement(ResourceDeleteComponent, {
1537
- resource: resource,
1538
- itemId: id
1539
- });
1540
- }
1541
- }));
1536
+ element: /*#__PURE__*/React.createElement(ResourceDeleteComponent, {
1537
+ resource: resource
1538
+ })
1539
+ })].concat(_toConsumableArray(extraRoutes.map(function (_ref4) {
1540
+ var path = _ref4.path,
1541
+ component = _ref4.component,
1542
+ _ref4$exact = _ref4.exact,
1543
+ exact = _ref4$exact === void 0 ? true : _ref4$exact,
1544
+ pageProps = _objectWithoutProperties(_ref4, _excluded$1);
1545
+ var RouteComponent = componentsManager.getComponent(component);
1546
+ return RouteComponent !== null ? /*#__PURE__*/React.createElement(Route, {
1547
+ key: "route-".concat(path),
1548
+ path: path,
1549
+ exact: exact,
1550
+ element: /*#__PURE__*/React.createElement(RouteComponent, Object.assign({
1551
+ resource: resource
1552
+ }, pageProps))
1553
+ }) : null;
1554
+ })));
1542
1555
  };
1543
- ResourceRoutes.propTypes = propTypes$2;
1544
- ResourceRoutes.defaultProps = defaultProps$2;
1545
1556
 
1557
+ var _excluded = ["home", "login", "account", "error", "index", "show", "create", "edit", "delete"],
1558
+ _excluded2 = ["path", "route", "component", "exact"];
1546
1559
  var propTypes$1 = {
1547
1560
  statusCode: PropTypes.statusCode
1548
1561
  };
@@ -1551,13 +1564,9 @@ var defaultProps$1 = {
1551
1564
  };
1552
1565
  var PanneauRoutes = function PanneauRoutes(_ref) {
1553
1566
  var initialStatusCode = _ref.statusCode;
1554
- var _usePanneau = usePanneau(),
1555
- _usePanneau$pages = _usePanneau.pages,
1556
- pages = _usePanneau$pages === void 0 ? {} : _usePanneau$pages;
1557
1567
  var routes = useRoutes();
1558
1568
  var _useLocation = useLocation(),
1559
- pathname = _useLocation.pathname; // search
1560
-
1569
+ pathname = _useLocation.pathname;
1561
1570
  var _useState = useState({
1562
1571
  statusCode: initialStatusCode,
1563
1572
  pathname: pathname
@@ -1565,27 +1574,26 @@ var PanneauRoutes = function PanneauRoutes(_ref) {
1565
1574
  _useState2 = _slicedToArray(_useState, 2),
1566
1575
  _useState2$ = _useState2[0],
1567
1576
  statusCode = _useState2$.statusCode,
1568
- initialPathname = _useState2$.pathname,
1577
+ lastPathname = _useState2$.pathname,
1569
1578
  setInitialRequest = _useState2[1];
1570
1579
  var user = useUser();
1571
1580
  var route = useUrlGenerator();
1572
1581
  var resources = usePanneauResources();
1573
-
1574
- // const nextUrl = useMemo(() => {
1575
- // const query = parseQuery(search);
1576
- // return query !== null ? query.next || null : null;
1577
- // }, [search]);
1578
-
1582
+ var componentsManager = usePagesComponentsManager();
1579
1583
  useEffect(function () {
1580
- if (pathname !== initialPathname) {
1584
+ if (pathname !== lastPathname) {
1581
1585
  setInitialRequest({
1582
1586
  pathname: pathname,
1583
1587
  statusCode: null
1584
1588
  });
1585
1589
  }
1586
- }, [pathname, initialPathname]);
1590
+ }, [pathname, lastPathname]);
1587
1591
 
1588
1592
  // Custom Pages
1593
+ var _usePanneau = usePanneau(),
1594
+ _usePanneau$pages = _usePanneau.pages,
1595
+ pages = _usePanneau$pages === void 0 ? null : _usePanneau$pages,
1596
+ routesDefinition = _usePanneau.routes;
1589
1597
  var _ref2 = pages || {},
1590
1598
  _ref2$home = _ref2.home,
1591
1599
  homePage = _ref2$home === void 0 ? null : _ref2$home,
@@ -1595,55 +1603,94 @@ var PanneauRoutes = function PanneauRoutes(_ref) {
1595
1603
  accountPage = _ref2$account === void 0 ? null : _ref2$account,
1596
1604
  _ref2$error = _ref2.error,
1597
1605
  errorPage = _ref2$error === void 0 ? null : _ref2$error;
1598
- var HomeComponent = getComponentFromName((homePage === null || homePage === void 0 ? void 0 : homePage.component) || 'home', basePages, homePage === null || homePage === void 0 ? void 0 : homePage.component);
1599
- var LoginComponent = getComponentFromName((loginPage === null || loginPage === void 0 ? void 0 : loginPage.component) || 'login', basePages, loginPage === null || loginPage === void 0 ? void 0 : loginPage.component);
1600
- var AccountComponent = getComponentFromName((accountPage === null || accountPage === void 0 ? void 0 : accountPage.component) || 'account', basePages, accountPage === null || accountPage === void 0 ? void 0 : accountPage.component);
1601
- var ErrorComponent = getComponentFromName((errorPage === null || errorPage === void 0 ? void 0 : errorPage.component) || 'error', basePages, errorPage === null || errorPage === void 0 ? void 0 : errorPage.component);
1602
- return /*#__PURE__*/React.createElement(Switch, null, statusCode !== null ? /*#__PURE__*/React.createElement(Route, {
1603
- path: "*",
1604
- render: function render() {
1605
- return /*#__PURE__*/React.createElement(ErrorComponent, {
1606
- statusCode: statusCode
1607
- });
1608
- }
1609
- }) : null, user === null ? /*#__PURE__*/React.createElement(Route, {
1610
- path: "*",
1611
- exact: true,
1612
- component: LoginComponent
1613
- }) : null, user !== null ? /*#__PURE__*/React.createElement(Route, {
1606
+ _ref2.index;
1607
+ _ref2.show;
1608
+ _ref2.create;
1609
+ _ref2.edit;
1610
+ _ref2["delete"];
1611
+ var otherPages = _objectWithoutProperties(_ref2, _excluded);
1612
+ var customRoutes = useMemo(function () {
1613
+ return [].concat(_toConsumableArray(Object.keys(routesDefinition).filter(function (key) {
1614
+ return key.match(/^(resources\.|auth\.)/) === null && key !== 'home' && key !== 'account';
1615
+ }).filter(function (key) {
1616
+ var routeDef = routesDefinition[key];
1617
+ return isObject(routeDef) && typeof routeDef.component !== 'undefined' && typeof routeDef.path !== 'undefined';
1618
+ }).map(function (key) {
1619
+ return routesDefinition[key];
1620
+ })), _toConsumableArray(Object.keys(otherPages).map(function (key) {
1621
+ return otherPages[key];
1622
+ }).filter(function (_ref3) {
1623
+ var _ref3$path = _ref3.path,
1624
+ path = _ref3$path === void 0 ? null : _ref3$path,
1625
+ _ref3$route = _ref3.route,
1626
+ pageRoute = _ref3$route === void 0 ? null : _ref3$route;
1627
+ return path !== null || pageRoute !== null;
1628
+ })));
1629
+ }, [routesDefinition, otherPages]);
1630
+ var HomeComponent = componentsManager.getComponent(homePage === null || homePage === void 0 ? void 0 : homePage.component) || HomePage;
1631
+ var LoginComponent = componentsManager.getComponent(loginPage === null || loginPage === void 0 ? void 0 : loginPage.component) || LoginPage;
1632
+ var AccountComponent = componentsManager.getComponent(accountPage === null || accountPage === void 0 ? void 0 : accountPage.component) || AccountPage;
1633
+ var ErrorComponent = componentsManager.getComponent(errorPage === null || errorPage === void 0 ? void 0 : errorPage.component) || ErrorPage;
1634
+
1635
+ // If there is an error status code
1636
+ if (statusCode !== null) {
1637
+ return /*#__PURE__*/React.createElement(ErrorComponent, {
1638
+ statusCode: statusCode
1639
+ });
1640
+ }
1641
+
1642
+ // If user is unauthenticated
1643
+ if (user === null) {
1644
+ return /*#__PURE__*/React.createElement(Routes, null, /*#__PURE__*/React.createElement(Route, {
1645
+ path: routes['auth.login'],
1646
+ exact: true,
1647
+ element: /*#__PURE__*/React.createElement(LoginComponent, null)
1648
+ }), /*#__PURE__*/React.createElement(Route, {
1649
+ path: "*",
1650
+ element: /*#__PURE__*/React.createElement(Navigate, {
1651
+ to: "".concat(route('auth.login'), "?next=").concat(encodeURIComponent(pathname)),
1652
+ replace: true
1653
+ })
1654
+ }));
1655
+ }
1656
+
1657
+ // Normal routes
1658
+ return /*#__PURE__*/React.createElement(Routes, null, /*#__PURE__*/React.createElement(Route, {
1614
1659
  path: routes.home,
1615
1660
  exact: true,
1616
- component: HomeComponent
1617
- }) : /*#__PURE__*/React.createElement(Redirect, {
1618
- from: routes.home,
1619
- exact: true,
1620
- to: route('login')
1661
+ element: /*#__PURE__*/React.createElement(HomeComponent, null)
1621
1662
  }), resources.map(function (resource) {
1622
- var _ref3 = resource || {},
1623
- resourceId = _ref3.id;
1624
- return user !== null ? /*#__PURE__*/React.createElement(Route, {
1625
- key: "resource-".concat(resourceId),
1626
- path: route('resources.index', {
1627
- resource: resourceId
1628
- }),
1629
- render: function render() {
1630
- return /*#__PURE__*/React.createElement(ResourceRoutes, {
1631
- resource: resource
1632
- });
1633
- }
1634
- }) : /*#__PURE__*/React.createElement(Redirect, {
1635
- key: "resource-".concat(resourceId),
1636
- from: route('resources.index', {
1637
- resource: resourceId
1638
- }),
1639
- to: "".concat(route('login'), "?next=").concat(encodeURIComponent(pathname))
1640
- });
1663
+ var _ref4 = resource || {},
1664
+ resourceId = _ref4.id;
1665
+ return /*#__PURE__*/React.createElement(Fragment, {
1666
+ key: "resource-".concat(resourceId)
1667
+ }, createResourceRoutes(resource, {
1668
+ route: route,
1669
+ componentsManager: componentsManager,
1670
+ pages: pages
1671
+ }));
1641
1672
  }), /*#__PURE__*/React.createElement(Route, {
1642
- path: route('auth.account'),
1643
- component: AccountComponent
1673
+ path: routes.account,
1674
+ exact: true,
1675
+ element: /*#__PURE__*/React.createElement(AccountComponent, null)
1676
+ }), customRoutes.map(function (_ref5) {
1677
+ var _ref5$path = _ref5.path,
1678
+ path = _ref5$path === void 0 ? null : _ref5$path,
1679
+ _ref5$route = _ref5.route,
1680
+ pageRoute = _ref5$route === void 0 ? null : _ref5$route,
1681
+ component = _ref5.component,
1682
+ _ref5$exact = _ref5.exact,
1683
+ exact = _ref5$exact === void 0 ? true : _ref5$exact,
1684
+ props = _objectWithoutProperties(_ref5, _excluded2);
1685
+ var PageComponent = componentsManager.getComponent(component);
1686
+ return PageComponent !== null ? /*#__PURE__*/React.createElement(Route, {
1687
+ path: path || routes[pageRoute],
1688
+ exact: exact,
1689
+ element: /*#__PURE__*/React.createElement(PageComponent, props)
1690
+ }) : null;
1644
1691
  }), /*#__PURE__*/React.createElement(Route, {
1645
1692
  path: "*",
1646
- component: ErrorComponent
1693
+ element: /*#__PURE__*/React.createElement(ErrorComponent, null)
1647
1694
  }));
1648
1695
  };
1649
1696
  PanneauRoutes.propTypes = propTypes$1;