@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/lib/index.js CHANGED
@@ -18,17 +18,20 @@ var FiltersProvider = require('@panneau/filters');
18
18
  var FormsProvider = require('@panneau/forms');
19
19
  var intl = require('@panneau/intl');
20
20
  var ListsProvider = require('@panneau/lists');
21
- var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
22
- var utils = require('@panneau/core/utils');
21
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
23
22
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
23
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
24
+ var isObject = require('lodash/isObject');
24
25
  var queryString = require('query-string');
25
26
  var reactIntl = require('react-intl');
26
27
  var hooks = require('@panneau/core/hooks');
28
+ var utils = require('@panneau/core/utils');
27
29
  var classNames = require('classnames');
28
30
  var Button = require('@panneau/element-button');
29
31
  var Form = require('@panneau/element-form');
30
- var Navbar = require('@panneau/element-navbar');
32
+ var isArray = require('lodash/isArray');
31
33
  var Menu = require('@panneau/element-menu');
34
+ var Navbar = require('@panneau/element-navbar');
32
35
  var Label = require('@panneau/element-label');
33
36
  var isString = require('lodash/isString');
34
37
  var Alert = require('@panneau/element-alert');
@@ -50,13 +53,16 @@ var FieldsProvider__default = /*#__PURE__*/_interopDefaultLegacy(FieldsProvider)
50
53
  var FiltersProvider__default = /*#__PURE__*/_interopDefaultLegacy(FiltersProvider);
51
54
  var FormsProvider__default = /*#__PURE__*/_interopDefaultLegacy(FormsProvider);
52
55
  var ListsProvider__default = /*#__PURE__*/_interopDefaultLegacy(ListsProvider);
53
- var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
56
+ var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
54
57
  var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
58
+ var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
59
+ var isObject__default = /*#__PURE__*/_interopDefaultLegacy(isObject);
55
60
  var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
56
61
  var Button__default = /*#__PURE__*/_interopDefaultLegacy(Button);
57
62
  var Form__default = /*#__PURE__*/_interopDefaultLegacy(Form);
58
- var Navbar__default = /*#__PURE__*/_interopDefaultLegacy(Navbar);
63
+ var isArray__default = /*#__PURE__*/_interopDefaultLegacy(isArray);
59
64
  var Menu__default = /*#__PURE__*/_interopDefaultLegacy(Menu);
65
+ var Navbar__default = /*#__PURE__*/_interopDefaultLegacy(Navbar);
60
66
  var Label__default = /*#__PURE__*/_interopDefaultLegacy(Label);
61
67
  var isString__default = /*#__PURE__*/_interopDefaultLegacy(isString);
62
68
  var Alert__default = /*#__PURE__*/_interopDefaultLegacy(Alert);
@@ -65,8 +71,8 @@ var Pagination__default = /*#__PURE__*/_interopDefaultLegacy(Pagination);
65
71
  var _toPropertyKey__default = /*#__PURE__*/_interopDefaultLegacy(_toPropertyKey);
66
72
  var FormGroup__default = /*#__PURE__*/_interopDefaultLegacy(FormGroup);
67
73
 
68
- var _excluded$5 = ["resource", "action", "previous", "status", "value", "onSubmit", "errors", "generalError", "className"];
69
- var propTypes$n = {
74
+ var _excluded$6 = ["resource", "action", "previous", "status", "value", "onSubmit", "errors", "generalError", "className"];
75
+ var propTypes$m = {
70
76
  resource: core.PropTypes.resource.isRequired,
71
77
  action: PropTypes__default["default"].string,
72
78
  previous: PropTypes__default["default"].string,
@@ -80,7 +86,7 @@ var propTypes$n = {
80
86
  errors: PropTypes__default["default"].objectOf(PropTypes__default["default"].arrayOf(PropTypes__default["default"].string)),
81
87
  className: PropTypes__default["default"].string
82
88
  };
83
- var defaultProps$n = {
89
+ var defaultProps$m = {
84
90
  action: null,
85
91
  previous: null,
86
92
  status: null,
@@ -100,7 +106,7 @@ var DeleteForm = function DeleteForm(_ref) {
100
106
  _ref.errors;
101
107
  var generalError = _ref.generalError,
102
108
  className = _ref.className,
103
- props = _objectWithoutProperties__default["default"](_ref, _excluded$5);
109
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$6);
104
110
  var _ref2 = value || {},
105
111
  _ref2$id = _ref2.id,
106
112
  id = _ref2$id === void 0 ? null : _ref2$id;
@@ -171,11 +177,11 @@ var DeleteForm = function DeleteForm(_ref) {
171
177
  }]
172
178
  })))));
173
179
  };
174
- DeleteForm.propTypes = propTypes$n;
175
- DeleteForm.defaultProps = defaultProps$n;
180
+ DeleteForm.propTypes = propTypes$m;
181
+ DeleteForm.defaultProps = defaultProps$m;
176
182
 
177
- var _excluded$4 = ["component", "resource", "onSuccess", "item", "type", "isDelete"];
178
- var propTypes$m = {
183
+ var _excluded$5 = ["component", "resource", "onSuccess", "item", "type", "isDelete"];
184
+ var propTypes$l = {
179
185
  component: PropTypes__default["default"].string,
180
186
  resource: core.PropTypes.resource.isRequired,
181
187
  item: PropTypes__default["default"].object,
@@ -184,7 +190,7 @@ var propTypes$m = {
184
190
  onSuccess: PropTypes__default["default"].func,
185
191
  isDelete: PropTypes__default["default"].bool
186
192
  };
187
- var defaultProps$m = {
193
+ var defaultProps$l = {
188
194
  component: null,
189
195
  item: null,
190
196
  type: null,
@@ -198,7 +204,7 @@ var ResourceForm = function ResourceForm(_ref) {
198
204
  item = _ref.item,
199
205
  type = _ref.type,
200
206
  isDelete = _ref.isDelete,
201
- props = _objectWithoutProperties__default["default"](_ref, _excluded$4);
207
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$5);
202
208
  var locales = contexts.useLocales();
203
209
  var FormComponents = contexts.useFormsComponents();
204
210
  var _resource$fields = resource.fields,
@@ -326,15 +332,15 @@ var ResourceForm = function ResourceForm(_ref) {
326
332
  onChange: setValue
327
333
  })));
328
334
  };
329
- ResourceForm.propTypes = propTypes$m;
330
- ResourceForm.defaultProps = defaultProps$m;
335
+ ResourceForm.propTypes = propTypes$l;
336
+ ResourceForm.defaultProps = defaultProps$l;
331
337
 
332
- var propTypes$l = {
338
+ var propTypes$k = {
333
339
  className: PropTypes__default["default"].string,
334
340
  itemClassName: PropTypes__default["default"].string,
335
341
  linkClassName: PropTypes__default["default"].string
336
342
  };
337
- var defaultProps$l = {
343
+ var defaultProps$k = {
338
344
  className: null,
339
345
  itemClassName: null,
340
346
  linkClassName: null
@@ -360,7 +366,7 @@ var AccountMenu = function AccountMenu(_ref) {
360
366
  "value": "Account"
361
367
  }]
362
368
  }),
363
- href: route('panneau.account'),
369
+ href: route('account'),
364
370
  dropdown: [
365
371
  // {
366
372
  // label: (
@@ -369,7 +375,7 @@ var AccountMenu = function AccountMenu(_ref) {
369
375
  // description="Menu label"
370
376
  // />
371
377
  // ),
372
- // href: route('panneau.account'),
378
+ // href: route('account'),
373
379
  // },
374
380
  {
375
381
  label: /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
@@ -390,7 +396,7 @@ var AccountMenu = function AccountMenu(_ref) {
390
396
  "value": "Login"
391
397
  }]
392
398
  }),
393
- href: route('login')
399
+ href: route('auth.login')
394
400
  }];
395
401
  }, [user, route, onClickLogout]);
396
402
  return items !== null ? /*#__PURE__*/React__default["default"].createElement(Menu__default["default"], {
@@ -401,15 +407,15 @@ var AccountMenu = function AccountMenu(_ref) {
401
407
  dropdownAlign: "end"
402
408
  }) : null;
403
409
  };
404
- AccountMenu.propTypes = propTypes$l;
405
- AccountMenu.defaultProps = defaultProps$l;
410
+ AccountMenu.propTypes = propTypes$k;
411
+ AccountMenu.defaultProps = defaultProps$k;
406
412
 
407
- var propTypes$k = {
413
+ var propTypes$j = {
408
414
  className: PropTypes__default["default"].string,
409
415
  itemClassName: PropTypes__default["default"].string,
410
416
  linkClassName: PropTypes__default["default"].string
411
417
  };
412
- var defaultProps$k = {
418
+ var defaultProps$j = {
413
419
  className: null,
414
420
  itemClassName: null,
415
421
  linkClassName: null
@@ -446,42 +452,77 @@ var ResourcesMenu = function ResourcesMenu(_ref) {
446
452
  linkClassName: linkClassName
447
453
  });
448
454
  };
449
- ResourcesMenu.propTypes = propTypes$k;
450
- ResourcesMenu.defaultProps = defaultProps$k;
455
+ ResourcesMenu.propTypes = propTypes$j;
456
+ ResourcesMenu.defaultProps = defaultProps$j;
451
457
 
452
- /* eslint-disable react/jsx-props-no-spreading */
453
- var propTypes$j = {};
454
- var defaultProps$j = {};
458
+ var propTypes$i = {};
459
+ var defaultProps$i = {};
455
460
  var MainNavbar = function MainNavbar(props) {
456
461
  var _usePanneau = contexts.usePanneau(),
457
- name = _usePanneau.name;
462
+ name = _usePanneau.name,
463
+ _usePanneau$menus = _usePanneau.menus,
464
+ menus = _usePanneau$menus === void 0 ? null : _usePanneau$menus;
465
+ var _ref = menus || {},
466
+ _ref$main = _ref.main,
467
+ main = _ref$main === void 0 ? null : _ref$main,
468
+ _ref$guest = _ref.guest,
469
+ guest = _ref$guest === void 0 ? null : _ref$guest;
458
470
  var _usePanneauColorSchem = contexts.usePanneauColorScheme(),
459
471
  background = _usePanneauColorSchem.background;
460
472
  var route = contexts.useUrlGenerator();
461
473
  var user = auth.useUser();
474
+ var items = React.useMemo(function () {
475
+ var menuItems = (user !== null ? main : guest) || [];
476
+ var hasResources = menuItems.indexOf('resources') !== -1;
477
+ var hasAccount = menuItems.indexOf('account') !== -1;
478
+ return [!hasResources && user !== null ? 'resources' : null].concat(_toConsumableArray__default["default"](menuItems), [!hasAccount && menuItems.indexOf('separator') === -1 ? 'separator' : null, !hasAccount ? 'account' : null]).filter(function (it) {
479
+ return it !== null;
480
+ }).reduce(function (currentItems, item) {
481
+ if (item === 'resources') {
482
+ return [].concat(_toConsumableArray__default["default"](currentItems), [/*#__PURE__*/React__default["default"].createElement(ResourcesMenu, {
483
+ className: "navbar-nav",
484
+ itemClassName: "nav-item",
485
+ linkClassName: "nav-link"
486
+ })]);
487
+ }
488
+ if (item === 'account') {
489
+ return [].concat(_toConsumableArray__default["default"](currentItems), [/*#__PURE__*/React__default["default"].createElement(AccountMenu, {
490
+ className: "navbar-nav",
491
+ itemClassName: "nav-item",
492
+ linkClassName: "nav-link"
493
+ })]);
494
+ }
495
+ if (item === 'separator') {
496
+ return [].concat(_toConsumableArray__default["default"](currentItems), [/*#__PURE__*/React__default["default"].createElement("span", {
497
+ className: "ms-auto"
498
+ })]);
499
+ }
500
+ var lastItem = currentItems.length > 0 ? currentItems[currentItems.length - 1] : null;
501
+ return isArray__default["default"](lastItem) ? [].concat(_toConsumableArray__default["default"](currentItems.slice(0, currentItems.length - 1)), [[].concat(_toConsumableArray__default["default"](lastItem), [item])]) : [].concat(_toConsumableArray__default["default"](currentItems), [[item]]);
502
+ }, []).map(function (it) {
503
+ return isArray__default["default"](it) ? /*#__PURE__*/React__default["default"].createElement(Menu__default["default"], {
504
+ items: it,
505
+ className: "navbar-nav",
506
+ itemClassName: "nav-item",
507
+ linkClassName: "nav-link"
508
+ }) : it;
509
+ });
510
+ }, [main]);
462
511
  return /*#__PURE__*/React__default["default"].createElement(Navbar__default["default"], Object.assign({
463
512
  theme: background
464
513
  }, props), name !== null ? /*#__PURE__*/React__default["default"].createElement(reactRouterDom.Link, {
465
514
  to: route('home'),
466
515
  className: "navbar-brand"
467
- }, name) : null, user !== null ? /*#__PURE__*/React__default["default"].createElement(ResourcesMenu, {
468
- className: "navbar-nav ml-4",
469
- itemClassName: "nav-item",
470
- linkClassName: "nav-link"
471
- }) : null, /*#__PURE__*/React__default["default"].createElement(AccountMenu, {
472
- className: "navbar-nav ms-auto",
473
- itemClassName: "nav-item",
474
- linkClassName: "nav-link"
475
- }));
516
+ }, name) : null, items);
476
517
  };
477
- MainNavbar.propTypes = propTypes$j;
478
- MainNavbar.defaultProps = defaultProps$j;
518
+ MainNavbar.propTypes = propTypes$i;
519
+ MainNavbar.defaultProps = defaultProps$i;
479
520
 
480
- var propTypes$i = {
521
+ var propTypes$h = {
481
522
  children: PropTypes__default["default"].node.isRequired,
482
523
  fullscreen: PropTypes__default["default"].bool
483
524
  };
484
- var defaultProps$i = {
525
+ var defaultProps$h = {
485
526
  fullscreen: false
486
527
  };
487
528
  var MainLayout = function MainLayout(_ref) {
@@ -501,17 +542,17 @@ var MainLayout = function MainLayout(_ref) {
501
542
  }, _defineProperty__default["default"](_ref2, "bg-".concat(background), background !== null), _defineProperty__default["default"](_ref2, "text-".concat(text), text !== null), _ref2)])
502
543
  }, children));
503
544
  };
504
- MainLayout.propTypes = propTypes$i;
505
- MainLayout.defaultProps = defaultProps$i;
545
+ MainLayout.propTypes = propTypes$h;
546
+ MainLayout.defaultProps = defaultProps$h;
506
547
 
507
- var propTypes$h = {
548
+ var propTypes$g = {
508
549
  title: core.PropTypes.label,
509
550
  actions: PropTypes__default["default"].node,
510
551
  small: PropTypes__default["default"].bool,
511
552
  className: PropTypes__default["default"].string,
512
553
  children: PropTypes__default["default"].node
513
554
  };
514
- var defaultProps$h = {
555
+ var defaultProps$g = {
515
556
  title: null,
516
557
  actions: null,
517
558
  small: false,
@@ -549,22 +590,22 @@ var PageHeader = function PageHeader(_ref) {
549
590
  className: "col-12 col-md-8 col-lg-7"
550
591
  }, inner)) : inner), children);
551
592
  };
552
- PageHeader.propTypes = propTypes$h;
553
- PageHeader.defaultProps = defaultProps$h;
593
+ PageHeader.propTypes = propTypes$g;
594
+ PageHeader.defaultProps = defaultProps$g;
554
595
 
555
- var propTypes$g = {
596
+ var propTypes$f = {
556
597
  resource: core.PropTypes.resource.isRequired
557
598
  };
558
- var defaultProps$g = {};
599
+ var defaultProps$f = {};
559
600
  var ResourceCreatePage = function ResourceCreatePage(_ref) {
560
601
  var resource = _ref.resource;
561
- var history = reactRouter.useHistory();
602
+ var navigate = reactRouter.useNavigate();
562
603
  var _useLocation = reactRouter.useLocation(),
563
604
  search = _useLocation.search;
564
605
  var resourceRoute = hooks.useResourceUrlGenerator(resource);
565
606
  var onSuccess = React.useCallback(function () {
566
- history.push("".concat(resourceRoute('index'), "?created=true"));
567
- }, [history, resourceRoute]);
607
+ navigate("".concat(resourceRoute('index'), "?created=true"));
608
+ }, [navigate, resourceRoute]);
568
609
  var _useMemo = React.useMemo(function () {
569
610
  return queryString.parse(search);
570
611
  }, [search]),
@@ -598,26 +639,26 @@ var ResourceCreatePage = function ResourceCreatePage(_ref) {
598
639
  onSuccess: onSuccess
599
640
  }))))));
600
641
  };
601
- ResourceCreatePage.propTypes = propTypes$g;
602
- ResourceCreatePage.defaultProps = defaultProps$g;
642
+ ResourceCreatePage.propTypes = propTypes$f;
643
+ ResourceCreatePage.defaultProps = defaultProps$f;
603
644
 
604
645
  // import Button from '../buttons/Button';
605
646
 
606
- var propTypes$f = {
607
- resource: core.PropTypes.resource.isRequired,
608
- itemId: PropTypes__default["default"].string.isRequired
647
+ var propTypes$e = {
648
+ resource: core.PropTypes.resource.isRequired
609
649
  };
610
- var defaultProps$f = {};
650
+ var defaultProps$e = {};
611
651
  var ResourceDeletePage = function ResourceDeletePage(_ref) {
612
- var resource = _ref.resource,
613
- itemId = _ref.itemId;
614
- var history = reactRouter.useHistory();
652
+ var resource = _ref.resource;
653
+ var _useParams = reactRouter.useParams(),
654
+ itemId = _useParams.id;
655
+ var navigate = reactRouter.useNavigate();
615
656
  var resourceRoute = hooks.useResourceUrlGenerator(resource);
616
657
  var _useResourceItem = data.useResourceItem(resource, itemId),
617
658
  item = _useResourceItem.item;
618
659
  var onSuccess = React.useCallback(function () {
619
- return history.push("".concat(resourceRoute('index'), "?deleted=true"));
620
- }, [history, resourceRoute]);
660
+ return navigate("".concat(resourceRoute('index'), "?deleted=true"));
661
+ }, [navigate, resourceRoute]);
621
662
 
622
663
  // Navigate back
623
664
  var _ref2 = history || {},
@@ -656,19 +697,19 @@ var ResourceDeletePage = function ResourceDeletePage(_ref) {
656
697
  isDelete: true
657
698
  }) : null)))));
658
699
  };
659
- ResourceDeletePage.propTypes = propTypes$f;
660
- ResourceDeletePage.defaultProps = defaultProps$f;
700
+ ResourceDeletePage.propTypes = propTypes$e;
701
+ ResourceDeletePage.defaultProps = defaultProps$e;
661
702
 
662
703
  // import Button from '../buttons/Button';
663
704
 
664
- var propTypes$e = {
665
- resource: core.PropTypes.resource.isRequired,
666
- itemId: PropTypes__default["default"].string.isRequired
705
+ var propTypes$d = {
706
+ resource: core.PropTypes.resource.isRequired
667
707
  };
668
- var defaultProps$e = {};
708
+ var defaultProps$d = {};
669
709
  var ResourceEditPage = function ResourceEditPage(_ref) {
670
- var resource = _ref.resource,
671
- itemId = _ref.itemId;
710
+ var resource = _ref.resource;
711
+ var _useParams = reactRouter.useParams(),
712
+ itemId = _useParams.id;
672
713
  var _useResourceItem = data.useResourceItem(resource, itemId),
673
714
  item = _useResourceItem.item;
674
715
  var _ref2 = item || {},
@@ -713,14 +754,14 @@ var ResourceEditPage = function ResourceEditPage(_ref) {
713
754
  onSuccess: onSuccess
714
755
  }) : null)))));
715
756
  };
716
- ResourceEditPage.propTypes = propTypes$e;
717
- ResourceEditPage.defaultProps = defaultProps$e;
757
+ ResourceEditPage.propTypes = propTypes$d;
758
+ ResourceEditPage.defaultProps = defaultProps$d;
718
759
 
719
- var propTypes$d = {
760
+ var propTypes$c = {
720
761
  resource: core.PropTypes.resource.isRequired,
721
762
  className: PropTypes__default["default"].string
722
763
  };
723
- var defaultProps$d = {
764
+ var defaultProps$c = {
724
765
  className: null
725
766
  };
726
767
  var ResourceCreateButtom = function ResourceCreateButtom(_ref) {
@@ -737,10 +778,9 @@ var ResourceCreateButtom = function ResourceCreateButtom(_ref) {
737
778
  setDropdownOpened = _useState2[1];
738
779
  var onClickDropdown = React.useCallback(function (e) {
739
780
  e.preventDefault();
740
- setDropdownOpened(function (opened) {
741
- return !opened;
742
- });
743
- }, [setDropdownOpened]);
781
+ e.stopPropagation();
782
+ setDropdownOpened(!dropdownOpened);
783
+ }, [setDropdownOpened, dropdownOpened]);
744
784
  var finalTypes = types !== null ? types.filter(function (_ref2) {
745
785
  var _ref2$settings = _ref2.settings,
746
786
  _ref2$settings2 = _ref2$settings === void 0 ? {} : _ref2$settings,
@@ -750,8 +790,10 @@ var ResourceCreateButtom = function ResourceCreateButtom(_ref) {
750
790
  }) : null;
751
791
  var hasMultipleTypes = finalTypes !== null && finalTypes.length > 1;
752
792
  var onDropdownClickOutside = React.useCallback(function () {
753
- setDropdownOpened(false);
754
- }, [setDropdownOpened]);
793
+ if (dropdownOpened) {
794
+ setDropdownOpened(false);
795
+ }
796
+ }, [setDropdownOpened, dropdownOpened]);
755
797
  var button = /*#__PURE__*/React__default["default"].createElement(Button__default["default"], {
756
798
  href: !hasMultipleTypes ? "".concat(resourceRoute('create')).concat(finalTypes !== null && finalTypes.length === 1 ? "?type=".concat(finalTypes[0].id) : '') : '#',
757
799
  size: "lg",
@@ -788,11 +830,11 @@ var ResourceCreateButtom = function ResourceCreateButtom(_ref) {
788
830
  onClickOutside: onDropdownClickOutside
789
831
  })) : button;
790
832
  };
791
- ResourceCreateButtom.propTypes = propTypes$d;
792
- ResourceCreateButtom.defaultProps = defaultProps$d;
833
+ ResourceCreateButtom.propTypes = propTypes$c;
834
+ ResourceCreateButtom.defaultProps = defaultProps$c;
793
835
 
794
- var _excluded$3 = ["component", "name", "groupLabel"];
795
- var propTypes$c = {
836
+ var _excluded$4 = ["component", "name", "groupLabel"];
837
+ var propTypes$b = {
796
838
  filters: PropTypes__default["default"].arrayOf(PropTypes__default["default"].shape({
797
839
  id: PropTypes__default["default"].string.isRequired,
798
840
  component: PropTypes__default["default"].string.isRequired
@@ -807,7 +849,7 @@ var propTypes$c = {
807
849
  // eslint-disable-line react/forbid-prop-types
808
850
  className: PropTypes__default["default"].string
809
851
  };
810
- var defaultProps$c = {
852
+ var defaultProps$b = {
811
853
  filters: [],
812
854
  value: null,
813
855
  onChange: null,
@@ -856,7 +898,7 @@ var ResourceFilters = function ResourceFilters(_ref) {
856
898
  var component = _ref3.component,
857
899
  name = _ref3.name,
858
900
  groupLabel = _ref3.groupLabel,
859
- filterProps = _objectWithoutProperties__default["default"](_ref3, _excluded$3);
901
+ filterProps = _objectWithoutProperties__default["default"](_ref3, _excluded$4);
860
902
  var FilterComponent = utils.getComponentFromName(component, FilterComponents, null);
861
903
  var filterValue = value !== null && value[name] ? value[name] : null;
862
904
  var onFilterChange = React.useCallback(function (newFilterValue) {
@@ -888,12 +930,12 @@ var ResourceFilters = function ResourceFilters(_ref) {
888
930
  icon: freeSolidSvgIcons.faUndo
889
931
  })) : null);
890
932
  };
891
- ResourceFilters.propTypes = propTypes$c;
892
- ResourceFilters.defaultProps = defaultProps$c;
933
+ ResourceFilters.propTypes = propTypes$b;
934
+ ResourceFilters.defaultProps = defaultProps$b;
893
935
 
894
- var _excluded$2 = ["component", "showPagination", "filters"],
936
+ var _excluded$3 = ["component", "showPagination", "filters"],
895
937
  _excluded2$1 = ["page"];
896
- var propTypes$b = {
938
+ var propTypes$a = {
897
939
  resource: core.PropTypes.resource.isRequired,
898
940
  query: PropTypes__default["default"].object,
899
941
  // eslint-disable-line react/forbid-prop-types
@@ -905,7 +947,7 @@ var propTypes$b = {
905
947
  onQueryChange: PropTypes__default["default"].func,
906
948
  onQueryReset: PropTypes__default["default"].func
907
949
  };
908
- var defaultProps$b = {
950
+ var defaultProps$a = {
909
951
  query: null,
910
952
  paginated: true,
911
953
  component: null,
@@ -929,7 +971,7 @@ var ResourceItemsList = function ResourceItemsList(_ref) {
929
971
  showPagination = _resource$index2$show === void 0 ? true : _resource$index2$show,
930
972
  _resource$index2$filt = _resource$index2.filters,
931
973
  filters = _resource$index2$filt === void 0 ? null : _resource$index2$filt,
932
- listProps = _objectWithoutProperties__default["default"](_resource$index2, _excluded$2);
974
+ listProps = _objectWithoutProperties__default["default"](_resource$index2, _excluded$3);
933
975
  var _usePanneauColorSchem = contexts.usePanneauColorScheme(),
934
976
  _usePanneauColorSchem2 = _usePanneauColorSchem.background,
935
977
  theme = _usePanneauColorSchem2 === void 0 ? null : _usePanneauColorSchem2;
@@ -979,16 +1021,16 @@ var ResourceItemsList = function ResourceItemsList(_ref) {
979
1021
  className: "mt-4 mb-1"
980
1022
  }) : null);
981
1023
  };
982
- ResourceItemsList.propTypes = propTypes$b;
983
- ResourceItemsList.defaultProps = defaultProps$b;
1024
+ ResourceItemsList.propTypes = propTypes$a;
1025
+ ResourceItemsList.defaultProps = defaultProps$a;
984
1026
 
985
- var _excluded$1 = ["id", "component"];
986
- var propTypes$a = {
1027
+ var _excluded$2 = ["id", "component"];
1028
+ var propTypes$9 = {
987
1029
  resource: core.PropTypes.resource.isRequired,
988
1030
  defaultActions: PropTypes__default["default"].arrayOf(PropTypes__default["default"].object) // eslint-disable-line react/forbid-prop-types
989
1031
  };
990
1032
 
991
- var defaultProps$a = {
1033
+ var defaultProps$9 = {
992
1034
  defaultActions: ['create']
993
1035
  };
994
1036
  var ResourceIndexPage = function ResourceIndexPage(_ref) {
@@ -1023,7 +1065,7 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
1023
1065
  var componentsManager = contexts.useComponentsManager();
1024
1066
  var _useLocation = reactRouter.useLocation(),
1025
1067
  search = _useLocation.search;
1026
- var history = reactRouter.useHistory();
1068
+ var navigate = reactRouter.useNavigate();
1027
1069
  var query = React.useMemo(function () {
1028
1070
  return queryString.parse(search);
1029
1071
  }, [search]);
@@ -1042,19 +1084,21 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
1042
1084
  var value = submitQuery[key];
1043
1085
  return value !== null ? _objectSpread__default["default"](_objectSpread__default["default"]({}, currentQuery), {}, _defineProperty__default["default"]({}, key, value)) : currentQuery;
1044
1086
  }, null) : null;
1045
- history.push("".concat(url).concat(newQuery !== null ? "?".concat(queryString.stringify(newQuery, {
1087
+ navigate("".concat(url).concat(newQuery !== null ? "?".concat(queryString.stringify(newQuery, {
1046
1088
  arrayFormat: 'bracket'
1047
1089
  })) : ''));
1048
- }, [history, url, query, paginated]);
1090
+ }, [navigate, url, query, paginated]);
1049
1091
  var onQueryReset = React.useCallback(function () {
1050
1092
  var queryString$1 = queryString.stringify(null, {
1051
1093
  arrayFormat: 'bracket'
1052
1094
  });
1053
- history.push("".concat(url, "?").concat(queryString$1));
1054
- }, [history, url, paginated]);
1095
+ navigate("".concat(url, "?").concat(queryString$1));
1096
+ }, [navigate, url, paginated]);
1055
1097
  var onClickCloseAlert = React.useCallback(function () {
1056
- history.replace(url);
1057
- }, [history, url]);
1098
+ navigate(url, {
1099
+ replace: true
1100
+ });
1101
+ }, [navigate, url]);
1058
1102
  return /*#__PURE__*/React__default["default"].createElement(contexts.ResourceProvider, {
1059
1103
  resource: resource
1060
1104
  }, /*#__PURE__*/React__default["default"].createElement(MainLayout, null, /*#__PURE__*/React__default["default"].createElement(PageHeader, {
@@ -1065,7 +1109,7 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
1065
1109
  var id = _ref5.id,
1066
1110
  _ref5$component = _ref5.component,
1067
1111
  component = _ref5$component === void 0 ? Button__default["default"] : _ref5$component,
1068
- actionProps = _objectWithoutProperties__default["default"](_ref5, _excluded$1);
1112
+ actionProps = _objectWithoutProperties__default["default"](_ref5, _excluded$2);
1069
1113
  var ActionComponent = isString__default["default"](component) ? componentsManager.getComponent(component) : component;
1070
1114
  return ActionComponent !== null ? /*#__PURE__*/React__default["default"].createElement(ActionComponent, Object.assign({
1071
1115
  key: "action-".concat(id)
@@ -1112,13 +1156,13 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
1112
1156
  onQueryReset: onQueryReset
1113
1157
  }))));
1114
1158
  };
1115
- ResourceIndexPage.propTypes = propTypes$a;
1116
- ResourceIndexPage.defaultProps = defaultProps$a;
1159
+ ResourceIndexPage.propTypes = propTypes$9;
1160
+ ResourceIndexPage.defaultProps = defaultProps$9;
1117
1161
 
1118
- var propTypes$9 = {
1162
+ var propTypes$8 = {
1119
1163
  resource: core.PropTypes.resource.isRequired
1120
1164
  };
1121
- var defaultProps$9 = {};
1165
+ var defaultProps$8 = {};
1122
1166
  var ResourceShowPage = function ResourceShowPage(_ref) {
1123
1167
  var resource = _ref.resource;
1124
1168
  return /*#__PURE__*/React__default["default"].createElement(contexts.ResourceProvider, {
@@ -1129,12 +1173,12 @@ var ResourceShowPage = function ResourceShowPage(_ref) {
1129
1173
  className: "container-sm"
1130
1174
  }, "Show page")));
1131
1175
  };
1132
- ResourceShowPage.propTypes = propTypes$9;
1133
- ResourceShowPage.defaultProps = defaultProps$9;
1176
+ ResourceShowPage.propTypes = propTypes$8;
1177
+ ResourceShowPage.defaultProps = defaultProps$8;
1134
1178
 
1135
1179
  /* eslint-disable react/jsx-props-no-spreading */
1136
- var propTypes$8 = {};
1137
- var defaultProps$8 = {};
1180
+ var propTypes$7 = {};
1181
+ var defaultProps$7 = {};
1138
1182
  var HomePage = function HomePage() {
1139
1183
  var route = contexts.useUrlGenerator();
1140
1184
  var resources = contexts.usePanneauResources();
@@ -1170,26 +1214,26 @@ var HomePage = function HomePage() {
1170
1214
  }));
1171
1215
  })));
1172
1216
  };
1173
- HomePage.propTypes = propTypes$8;
1174
- HomePage.defaultProps = defaultProps$8;
1217
+ HomePage.propTypes = propTypes$7;
1218
+ HomePage.defaultProps = defaultProps$7;
1175
1219
 
1176
- var propTypes$7 = {};
1177
- var defaultProps$7 = {};
1220
+ var propTypes$6 = {};
1221
+ var defaultProps$6 = {};
1178
1222
  var AccountPage = function AccountPage() {
1179
1223
  return /*#__PURE__*/React__default["default"].createElement(MainLayout, null, /*#__PURE__*/React__default["default"].createElement("div", {
1180
1224
  className: "container-sm py-4"
1181
1225
  }, "Account page"));
1182
1226
  };
1183
- AccountPage.propTypes = propTypes$7;
1184
- AccountPage.defaultProps = defaultProps$7;
1227
+ AccountPage.propTypes = propTypes$6;
1228
+ AccountPage.defaultProps = defaultProps$6;
1185
1229
 
1186
1230
  /* eslint-disable react/jsx-props-no-spreading */
1187
- var propTypes$6 = {
1231
+ var propTypes$5 = {
1188
1232
  fields: core.PropTypes.fields,
1189
1233
  className: PropTypes__default["default"].string,
1190
1234
  onSuccess: PropTypes__default["default"].func
1191
1235
  };
1192
- var defaultProps$6 = {
1236
+ var defaultProps$5 = {
1193
1237
  fields: [{
1194
1238
  name: 'email',
1195
1239
  type: 'email',
@@ -1261,14 +1305,14 @@ var LoginForm = function LoginForm(_ref) {
1261
1305
  })
1262
1306
  });
1263
1307
  };
1264
- LoginForm.propTypes = propTypes$6;
1265
- LoginForm.defaultProps = defaultProps$6;
1308
+ LoginForm.propTypes = propTypes$5;
1309
+ LoginForm.defaultProps = defaultProps$5;
1266
1310
 
1267
- var propTypes$5 = {
1311
+ var propTypes$4 = {
1268
1312
  children: PropTypes__default["default"].node.isRequired,
1269
1313
  fullscreen: PropTypes__default["default"].bool
1270
1314
  };
1271
- var defaultProps$5 = {
1315
+ var defaultProps$4 = {
1272
1316
  fullscreen: false
1273
1317
  };
1274
1318
  var GuestLayout = function GuestLayout(_ref) {
@@ -1294,12 +1338,12 @@ var GuestLayout = function GuestLayout(_ref) {
1294
1338
  })
1295
1339
  }, children)));
1296
1340
  };
1297
- GuestLayout.propTypes = propTypes$5;
1298
- GuestLayout.defaultProps = defaultProps$5;
1341
+ GuestLayout.propTypes = propTypes$4;
1342
+ GuestLayout.defaultProps = defaultProps$4;
1299
1343
 
1300
1344
  /* eslint-disable react/jsx-props-no-spreading */
1301
- var propTypes$4 = {};
1302
- var defaultProps$4 = {};
1345
+ var propTypes$3 = {};
1346
+ var defaultProps$3 = {};
1303
1347
  var LoginPage = function LoginPage() {
1304
1348
  var route = contexts.useUrlGenerator();
1305
1349
  var onSuccess = React.useCallback(function () {
@@ -1325,8 +1369,8 @@ var LoginPage = function LoginPage() {
1325
1369
  onSuccess: onSuccess
1326
1370
  })))));
1327
1371
  };
1328
- LoginPage.propTypes = propTypes$4;
1329
- LoginPage.defaultProps = defaultProps$4;
1372
+ LoginPage.propTypes = propTypes$3;
1373
+ LoginPage.defaultProps = defaultProps$3;
1330
1374
 
1331
1375
  var messages = reactIntl.defineMessages({
1332
1376
  metaTitle401: {
@@ -1421,10 +1465,10 @@ var messages = reactIntl.defineMessages({
1421
1465
  }]
1422
1466
  }
1423
1467
  });
1424
- var propTypes$3 = {
1468
+ var propTypes$2 = {
1425
1469
  statusCode: core.PropTypes.statusCode
1426
1470
  };
1427
- var defaultProps$3 = {
1471
+ var defaultProps$2 = {
1428
1472
  statusCode: null
1429
1473
  };
1430
1474
  var ErrorPage = function ErrorPage(_ref) {
@@ -1439,37 +1483,20 @@ var ErrorPage = function ErrorPage(_ref) {
1439
1483
  className: "col-12 col-sm-8 col-md-6"
1440
1484
  }, /*#__PURE__*/React__default["default"].createElement("h1", null, /*#__PURE__*/React__default["default"].createElement(Label__default["default"], null, messages["title".concat(statusCode || 404)])), /*#__PURE__*/React__default["default"].createElement("p", null, /*#__PURE__*/React__default["default"].createElement(Label__default["default"], null, messages["description".concat(statusCode || 404)]))))));
1441
1485
  };
1442
- ErrorPage.propTypes = propTypes$3;
1443
- ErrorPage.defaultProps = defaultProps$3;
1444
-
1445
- var basePages = /*#__PURE__*/Object.freeze({
1446
- __proto__: null,
1447
- ResourceCreate: ResourceCreatePage,
1448
- ResourceDelete: ResourceDeletePage,
1449
- ResourceEdit: ResourceEditPage,
1450
- ResourceIndex: ResourceIndexPage,
1451
- ResourceShow: ResourceShowPage,
1452
- Home: HomePage,
1453
- Account: AccountPage,
1454
- Login: LoginPage,
1455
- Error: ErrorPage
1456
- });
1486
+ ErrorPage.propTypes = propTypes$2;
1487
+ ErrorPage.defaultProps = defaultProps$2;
1457
1488
 
1458
- var _excluded = ["path", "component", "exact"],
1459
- _excluded2 = ["id"];
1460
- var propTypes$2 = {
1461
- resource: core.PropTypes.resource.isRequired
1462
- };
1463
- var defaultProps$2 = {};
1464
- var ResourceRoutes = function ResourceRoutes(_ref) {
1465
- var resource = _ref.resource;
1489
+ var _excluded$1 = ["path", "component", "exact"];
1490
+ var createResourceRoutes = function createResourceRoutes(resource, _ref) {
1491
+ var route = _ref.route,
1492
+ componentsManager = _ref.componentsManager,
1493
+ _ref$pages = _ref.pages,
1494
+ pages = _ref$pages === void 0 ? {} : _ref$pages;
1466
1495
  var resourceId = resource.id,
1467
1496
  _resource$pages = resource.pages,
1468
- pages = _resource$pages === void 0 ? {} : _resource$pages,
1497
+ resourcePages = _resource$pages === void 0 ? {} : _resource$pages,
1469
1498
  _resource$extraRoutes = resource.extraRoutes,
1470
1499
  extraRoutes = _resource$extraRoutes === void 0 ? [] : _resource$extraRoutes;
1471
- var route = contexts.useUrlGenerator();
1472
- var componentsManager = contexts.useComponentsManager();
1473
1500
 
1474
1501
  // Load custom pages from resource
1475
1502
  var _ref2 = pages || {},
@@ -1483,96 +1510,85 @@ var ResourceRoutes = function ResourceRoutes(_ref) {
1483
1510
  editPage = _ref2$edit === void 0 ? null : _ref2$edit,
1484
1511
  _ref2$delete = _ref2["delete"],
1485
1512
  deletePage = _ref2$delete === void 0 ? null : _ref2$delete;
1486
- var ResourceIndexComponent = indexPage !== null && typeof indexPage.component !== 'undefined' ? componentsManager.getComponent(indexPage.component) : ResourceIndexPage;
1487
- var ResourceShowComponent = showPage !== null && typeof showPage.component !== 'undefined' ? componentsManager.getComponent(showPage.component) : ResourceShowPage;
1488
- var ResourceCreateComponent = createPage !== null && typeof createPage.component !== 'undefined' ? componentsManager.getComponent(createPage.component) : ResourceCreatePage;
1489
- var ResourceEditComponent = editPage !== null && typeof editPage.component !== 'undefined' ? componentsManager.getComponent(editPage.component) : ResourceEditPage;
1490
- var ResourceDeleteComponent = deletePage !== null && typeof deletePage.component !== 'undefined' ? componentsManager.getComponent(deletePage.component) : ResourceDeletePage;
1491
- return /*#__PURE__*/React__default["default"].createElement(reactRouter.Switch, null, extraRoutes.map(function (_ref3) {
1492
- var path = _ref3.path,
1493
- component = _ref3.component,
1494
- _ref3$exact = _ref3.exact,
1495
- exact = _ref3$exact === void 0 ? true : _ref3$exact,
1496
- pageProps = _objectWithoutProperties__default["default"](_ref3, _excluded);
1497
- var RouteComponent = componentsManager.getComponent(component);
1498
- return RouteComponent !== null ? /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1499
- key: "route-".concat(path),
1500
- path: path,
1501
- exact: exact,
1502
- render: function render(_ref4) {
1503
- var _ref4$match$params = _ref4.match.params,
1504
- id = _ref4$match$params.id,
1505
- params = _objectWithoutProperties__default["default"](_ref4$match$params, _excluded2);
1506
- return /*#__PURE__*/React__default["default"].createElement(RouteComponent, Object.assign({
1507
- resource: resource,
1508
- itemId: id
1509
- }, pageProps, params));
1510
- }
1511
- }) : null;
1512
- }), /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1513
+ var _ref3 = resourcePages || {},
1514
+ _ref3$index = _ref3.index,
1515
+ resourceIndexPage = _ref3$index === void 0 ? null : _ref3$index,
1516
+ _ref3$show = _ref3.show,
1517
+ resourceShowPage = _ref3$show === void 0 ? null : _ref3$show,
1518
+ _ref3$create = _ref3.create,
1519
+ resourceCreatePage = _ref3$create === void 0 ? null : _ref3$create,
1520
+ _ref3$edit = _ref3.edit,
1521
+ resourceEditPage = _ref3$edit === void 0 ? null : _ref3$edit,
1522
+ _ref3$delete = _ref3["delete"],
1523
+ resourceDeletePage = _ref3$delete === void 0 ? null : _ref3$delete;
1524
+ 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;
1525
+ 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;
1526
+ 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;
1527
+ 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;
1528
+ 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;
1529
+ return [/*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1513
1530
  path: route('resources.index', {
1514
1531
  resource: resourceId
1515
1532
  }),
1516
1533
  exact: true,
1517
- render: function render() {
1518
- return /*#__PURE__*/React__default["default"].createElement(ResourceIndexComponent, {
1519
- resource: resource
1520
- });
1521
- }
1534
+ element: /*#__PURE__*/React__default["default"].createElement(ResourceIndexComponent, {
1535
+ resource: resource
1536
+ })
1522
1537
  }), /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1523
1538
  path: route('resources.create', {
1524
1539
  resource: resourceId
1525
1540
  }),
1526
1541
  exact: true,
1527
- render: function render() {
1528
- return /*#__PURE__*/React__default["default"].createElement(ResourceCreateComponent, {
1529
- resource: resource
1530
- });
1531
- }
1542
+ element: /*#__PURE__*/React__default["default"].createElement(ResourceCreateComponent, {
1543
+ resource: resource
1544
+ })
1532
1545
  }), /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1533
1546
  path: route('resources.show', {
1534
1547
  resource: resourceId,
1535
1548
  id: ':id'
1536
1549
  }),
1537
1550
  exact: true,
1538
- render: function render(_ref5) {
1539
- var id = _ref5.match.params.id;
1540
- return /*#__PURE__*/React__default["default"].createElement(ResourceShowComponent, {
1541
- resource: resource,
1542
- itemId: id
1543
- });
1544
- }
1551
+ element: /*#__PURE__*/React__default["default"].createElement(ResourceShowComponent, {
1552
+ resource: resource
1553
+ })
1545
1554
  }), /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1546
1555
  path: route('resources.edit', {
1547
1556
  resource: resourceId,
1548
1557
  id: ':id'
1549
1558
  }),
1550
1559
  exact: true,
1551
- render: function render(_ref6) {
1552
- var id = _ref6.match.params.id;
1553
- return /*#__PURE__*/React__default["default"].createElement(ResourceEditComponent, {
1554
- resource: resource,
1555
- itemId: id
1556
- });
1557
- }
1560
+ element: /*#__PURE__*/React__default["default"].createElement(ResourceEditComponent, {
1561
+ resource: resource
1562
+ })
1558
1563
  }), /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1559
1564
  path: route('resources.delete', {
1560
1565
  resource: resourceId,
1561
1566
  id: ':id'
1562
1567
  }),
1563
1568
  exact: true,
1564
- render: function render(_ref7) {
1565
- var id = _ref7.match.params.id;
1566
- return /*#__PURE__*/React__default["default"].createElement(ResourceDeleteComponent, {
1567
- resource: resource,
1568
- itemId: id
1569
- });
1570
- }
1571
- }));
1569
+ element: /*#__PURE__*/React__default["default"].createElement(ResourceDeleteComponent, {
1570
+ resource: resource
1571
+ })
1572
+ })].concat(_toConsumableArray__default["default"](extraRoutes.map(function (_ref4) {
1573
+ var path = _ref4.path,
1574
+ component = _ref4.component,
1575
+ _ref4$exact = _ref4.exact,
1576
+ exact = _ref4$exact === void 0 ? true : _ref4$exact,
1577
+ pageProps = _objectWithoutProperties__default["default"](_ref4, _excluded$1);
1578
+ var RouteComponent = componentsManager.getComponent(component);
1579
+ return RouteComponent !== null ? /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1580
+ key: "route-".concat(path),
1581
+ path: path,
1582
+ exact: exact,
1583
+ element: /*#__PURE__*/React__default["default"].createElement(RouteComponent, Object.assign({
1584
+ resource: resource
1585
+ }, pageProps))
1586
+ }) : null;
1587
+ })));
1572
1588
  };
1573
- ResourceRoutes.propTypes = propTypes$2;
1574
- ResourceRoutes.defaultProps = defaultProps$2;
1575
1589
 
1590
+ var _excluded = ["home", "login", "account", "error", "index", "show", "create", "edit", "delete"],
1591
+ _excluded2 = ["path", "route", "component", "exact"];
1576
1592
  var propTypes$1 = {
1577
1593
  statusCode: core.PropTypes.statusCode
1578
1594
  };
@@ -1581,13 +1597,9 @@ var defaultProps$1 = {
1581
1597
  };
1582
1598
  var PanneauRoutes = function PanneauRoutes(_ref) {
1583
1599
  var initialStatusCode = _ref.statusCode;
1584
- var _usePanneau = contexts.usePanneau(),
1585
- _usePanneau$pages = _usePanneau.pages,
1586
- pages = _usePanneau$pages === void 0 ? {} : _usePanneau$pages;
1587
1600
  var routes = contexts.useRoutes();
1588
1601
  var _useLocation = reactRouter.useLocation(),
1589
- pathname = _useLocation.pathname; // search
1590
-
1602
+ pathname = _useLocation.pathname;
1591
1603
  var _useState = React.useState({
1592
1604
  statusCode: initialStatusCode,
1593
1605
  pathname: pathname
@@ -1595,27 +1607,26 @@ var PanneauRoutes = function PanneauRoutes(_ref) {
1595
1607
  _useState2 = _slicedToArray__default["default"](_useState, 2),
1596
1608
  _useState2$ = _useState2[0],
1597
1609
  statusCode = _useState2$.statusCode,
1598
- initialPathname = _useState2$.pathname,
1610
+ lastPathname = _useState2$.pathname,
1599
1611
  setInitialRequest = _useState2[1];
1600
1612
  var user = auth.useUser();
1601
1613
  var route = contexts.useUrlGenerator();
1602
1614
  var resources = contexts.usePanneauResources();
1603
-
1604
- // const nextUrl = useMemo(() => {
1605
- // const query = parseQuery(search);
1606
- // return query !== null ? query.next || null : null;
1607
- // }, [search]);
1608
-
1615
+ var componentsManager = contexts.usePagesComponentsManager();
1609
1616
  React.useEffect(function () {
1610
- if (pathname !== initialPathname) {
1617
+ if (pathname !== lastPathname) {
1611
1618
  setInitialRequest({
1612
1619
  pathname: pathname,
1613
1620
  statusCode: null
1614
1621
  });
1615
1622
  }
1616
- }, [pathname, initialPathname]);
1623
+ }, [pathname, lastPathname]);
1617
1624
 
1618
1625
  // Custom Pages
1626
+ var _usePanneau = contexts.usePanneau(),
1627
+ _usePanneau$pages = _usePanneau.pages,
1628
+ pages = _usePanneau$pages === void 0 ? null : _usePanneau$pages,
1629
+ routesDefinition = _usePanneau.routes;
1619
1630
  var _ref2 = pages || {},
1620
1631
  _ref2$home = _ref2.home,
1621
1632
  homePage = _ref2$home === void 0 ? null : _ref2$home,
@@ -1625,55 +1636,94 @@ var PanneauRoutes = function PanneauRoutes(_ref) {
1625
1636
  accountPage = _ref2$account === void 0 ? null : _ref2$account,
1626
1637
  _ref2$error = _ref2.error,
1627
1638
  errorPage = _ref2$error === void 0 ? null : _ref2$error;
1628
- var HomeComponent = utils.getComponentFromName((homePage === null || homePage === void 0 ? void 0 : homePage.component) || 'home', basePages, homePage === null || homePage === void 0 ? void 0 : homePage.component);
1629
- var LoginComponent = utils.getComponentFromName((loginPage === null || loginPage === void 0 ? void 0 : loginPage.component) || 'login', basePages, loginPage === null || loginPage === void 0 ? void 0 : loginPage.component);
1630
- var AccountComponent = utils.getComponentFromName((accountPage === null || accountPage === void 0 ? void 0 : accountPage.component) || 'account', basePages, accountPage === null || accountPage === void 0 ? void 0 : accountPage.component);
1631
- var ErrorComponent = utils.getComponentFromName((errorPage === null || errorPage === void 0 ? void 0 : errorPage.component) || 'error', basePages, errorPage === null || errorPage === void 0 ? void 0 : errorPage.component);
1632
- return /*#__PURE__*/React__default["default"].createElement(reactRouter.Switch, null, statusCode !== null ? /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1633
- path: "*",
1634
- render: function render() {
1635
- return /*#__PURE__*/React__default["default"].createElement(ErrorComponent, {
1636
- statusCode: statusCode
1637
- });
1638
- }
1639
- }) : null, user === null ? /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1640
- path: "*",
1641
- exact: true,
1642
- component: LoginComponent
1643
- }) : null, user !== null ? /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1639
+ _ref2.index;
1640
+ _ref2.show;
1641
+ _ref2.create;
1642
+ _ref2.edit;
1643
+ _ref2["delete"];
1644
+ var otherPages = _objectWithoutProperties__default["default"](_ref2, _excluded);
1645
+ var customRoutes = React.useMemo(function () {
1646
+ return [].concat(_toConsumableArray__default["default"](Object.keys(routesDefinition).filter(function (key) {
1647
+ return key.match(/^(resources\.|auth\.)/) === null && key !== 'home' && key !== 'account';
1648
+ }).filter(function (key) {
1649
+ var routeDef = routesDefinition[key];
1650
+ return isObject__default["default"](routeDef) && typeof routeDef.component !== 'undefined' && typeof routeDef.path !== 'undefined';
1651
+ }).map(function (key) {
1652
+ return routesDefinition[key];
1653
+ })), _toConsumableArray__default["default"](Object.keys(otherPages).map(function (key) {
1654
+ return otherPages[key];
1655
+ }).filter(function (_ref3) {
1656
+ var _ref3$path = _ref3.path,
1657
+ path = _ref3$path === void 0 ? null : _ref3$path,
1658
+ _ref3$route = _ref3.route,
1659
+ pageRoute = _ref3$route === void 0 ? null : _ref3$route;
1660
+ return path !== null || pageRoute !== null;
1661
+ })));
1662
+ }, [routesDefinition, otherPages]);
1663
+ var HomeComponent = componentsManager.getComponent(homePage === null || homePage === void 0 ? void 0 : homePage.component) || HomePage;
1664
+ var LoginComponent = componentsManager.getComponent(loginPage === null || loginPage === void 0 ? void 0 : loginPage.component) || LoginPage;
1665
+ var AccountComponent = componentsManager.getComponent(accountPage === null || accountPage === void 0 ? void 0 : accountPage.component) || AccountPage;
1666
+ var ErrorComponent = componentsManager.getComponent(errorPage === null || errorPage === void 0 ? void 0 : errorPage.component) || ErrorPage;
1667
+
1668
+ // If there is an error status code
1669
+ if (statusCode !== null) {
1670
+ return /*#__PURE__*/React__default["default"].createElement(ErrorComponent, {
1671
+ statusCode: statusCode
1672
+ });
1673
+ }
1674
+
1675
+ // If user is unauthenticated
1676
+ if (user === null) {
1677
+ return /*#__PURE__*/React__default["default"].createElement(reactRouter.Routes, null, /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1678
+ path: routes['auth.login'],
1679
+ exact: true,
1680
+ element: /*#__PURE__*/React__default["default"].createElement(LoginComponent, null)
1681
+ }), /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1682
+ path: "*",
1683
+ element: /*#__PURE__*/React__default["default"].createElement(reactRouter.Navigate, {
1684
+ to: "".concat(route('auth.login'), "?next=").concat(encodeURIComponent(pathname)),
1685
+ replace: true
1686
+ })
1687
+ }));
1688
+ }
1689
+
1690
+ // Normal routes
1691
+ return /*#__PURE__*/React__default["default"].createElement(reactRouter.Routes, null, /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1644
1692
  path: routes.home,
1645
1693
  exact: true,
1646
- component: HomeComponent
1647
- }) : /*#__PURE__*/React__default["default"].createElement(reactRouter.Redirect, {
1648
- from: routes.home,
1649
- exact: true,
1650
- to: route('login')
1694
+ element: /*#__PURE__*/React__default["default"].createElement(HomeComponent, null)
1651
1695
  }), resources.map(function (resource) {
1652
- var _ref3 = resource || {},
1653
- resourceId = _ref3.id;
1654
- return user !== null ? /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1655
- key: "resource-".concat(resourceId),
1656
- path: route('resources.index', {
1657
- resource: resourceId
1658
- }),
1659
- render: function render() {
1660
- return /*#__PURE__*/React__default["default"].createElement(ResourceRoutes, {
1661
- resource: resource
1662
- });
1663
- }
1664
- }) : /*#__PURE__*/React__default["default"].createElement(reactRouter.Redirect, {
1665
- key: "resource-".concat(resourceId),
1666
- from: route('resources.index', {
1667
- resource: resourceId
1668
- }),
1669
- to: "".concat(route('login'), "?next=").concat(encodeURIComponent(pathname))
1670
- });
1696
+ var _ref4 = resource || {},
1697
+ resourceId = _ref4.id;
1698
+ return /*#__PURE__*/React__default["default"].createElement(React.Fragment, {
1699
+ key: "resource-".concat(resourceId)
1700
+ }, createResourceRoutes(resource, {
1701
+ route: route,
1702
+ componentsManager: componentsManager,
1703
+ pages: pages
1704
+ }));
1671
1705
  }), /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1672
- path: route('auth.account'),
1673
- component: AccountComponent
1706
+ path: routes.account,
1707
+ exact: true,
1708
+ element: /*#__PURE__*/React__default["default"].createElement(AccountComponent, null)
1709
+ }), customRoutes.map(function (_ref5) {
1710
+ var _ref5$path = _ref5.path,
1711
+ path = _ref5$path === void 0 ? null : _ref5$path,
1712
+ _ref5$route = _ref5.route,
1713
+ pageRoute = _ref5$route === void 0 ? null : _ref5$route,
1714
+ component = _ref5.component,
1715
+ _ref5$exact = _ref5.exact,
1716
+ exact = _ref5$exact === void 0 ? true : _ref5$exact,
1717
+ props = _objectWithoutProperties__default["default"](_ref5, _excluded2);
1718
+ var PageComponent = componentsManager.getComponent(component);
1719
+ return PageComponent !== null ? /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1720
+ path: path || routes[pageRoute],
1721
+ exact: exact,
1722
+ element: /*#__PURE__*/React__default["default"].createElement(PageComponent, props)
1723
+ }) : null;
1674
1724
  }), /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1675
1725
  path: "*",
1676
- component: ErrorComponent
1726
+ element: /*#__PURE__*/React__default["default"].createElement(ErrorComponent, null)
1677
1727
  }));
1678
1728
  };
1679
1729
  PanneauRoutes.propTypes = propTypes$1;