@panneau/app 2.0.1 → 2.0.2

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 ADDED
@@ -0,0 +1,1784 @@
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
+ import _objectSpread from '@babel/runtime/helpers/objectSpread2';
3
+ import PropTypes$1 from 'prop-types';
4
+ import React, { useMemo, useCallback, useState, useEffect, Fragment } from 'react';
5
+ import { useLocation, useNavigate, useParams, Route, Routes, Navigate, MemoryRouter } from 'react-router';
6
+ import { Link, BrowserRouter } from 'react-router-dom';
7
+ import { useUser, useLogout, useAuth, AuthProvider } from '@panneau/auth';
8
+ import { PropTypes } from '@panneau/core';
9
+ import { useLocales, useFormsComponents, FormProvider, useUrlGenerator, usePanneauResources, usePanneau, usePanneauColorScheme, ResourceProvider, useFiltersComponents, useListsComponents, useComponentsManager, useFormComponent, useRoutes, usePagesComponentsManager, PanneauProvider, UppyProvider, RoutesProvider, ComponentsProvider } from '@panneau/core/contexts';
10
+ import { useResourceStore, useResourceUpdate, useResourceDestroy, useResourceItem, useResourceItems, ApiProvider } from '@panneau/data';
11
+ import DisplaysProvider from '@panneau/displays';
12
+ import FieldsProvider from '@panneau/fields';
13
+ import FiltersProvider from '@panneau/filters';
14
+ import FormsProvider from '@panneau/forms';
15
+ import { useResourceValues, IntlProvider } from '@panneau/intl';
16
+ import ListsProvider from '@panneau/lists';
17
+ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
18
+ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
19
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
20
+ import isObject from 'lodash/isObject';
21
+ import { parse, stringify } from 'query-string';
22
+ import { FormattedMessage, defineMessages } from 'react-intl';
23
+ import { useResourceUrlGenerator, useForm } from '@panneau/core/hooks';
24
+ import { getComponentFromName } from '@panneau/core/utils';
25
+ import classNames from 'classnames';
26
+ import Button from '@panneau/element-button';
27
+ import Form from '@panneau/element-form';
28
+ import isArray from 'lodash/isArray';
29
+ import Menu from '@panneau/element-menu';
30
+ import Navbar from '@panneau/element-navbar';
31
+ import Label from '@panneau/element-label';
32
+ import isString from 'lodash/isString';
33
+ import Alert from '@panneau/element-alert';
34
+ import Dropdown from '@panneau/element-dropdown';
35
+ import Pagination from '@panneau/element-pagination';
36
+ import _toPropertyKey from '@babel/runtime/helpers/toPropertyKey';
37
+ import { faUndo } from '@fortawesome/free-solid-svg-icons';
38
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
39
+ import FormGroup from '@panneau/element-form-group';
40
+
41
+ var _excluded$6 = ["resource", "action", "previous", "status", "value", "onSubmit", "errors", "generalError", "className"];
42
+ var propTypes$m = {
43
+ resource: PropTypes.resource.isRequired,
44
+ action: PropTypes$1.string,
45
+ previous: PropTypes$1.string,
46
+ fields: PropTypes.fields.isRequired,
47
+ value: PropTypes$1.object,
48
+ // eslint-disable-line react/forbid-prop-types
49
+ onChange: PropTypes$1.func.isRequired,
50
+ onSubmit: PropTypes$1.func,
51
+ status: PropTypes.formStatus,
52
+ generalError: PropTypes$1.string,
53
+ errors: PropTypes$1.objectOf(PropTypes$1.arrayOf(PropTypes$1.string)),
54
+ className: PropTypes$1.string
55
+ };
56
+ var defaultProps$m = {
57
+ action: null,
58
+ previous: null,
59
+ status: null,
60
+ value: null,
61
+ onSubmit: null,
62
+ generalError: null,
63
+ errors: null,
64
+ className: null
65
+ };
66
+ var DeleteForm = function DeleteForm(_ref) {
67
+ var resource = _ref.resource,
68
+ action = _ref.action,
69
+ previous = _ref.previous;
70
+ _ref.status;
71
+ var value = _ref.value,
72
+ onSubmit = _ref.onSubmit;
73
+ _ref.errors;
74
+ var generalError = _ref.generalError,
75
+ className = _ref.className,
76
+ props = _objectWithoutProperties(_ref, _excluded$6);
77
+ var _ref2 = value || {},
78
+ _ref2$id = _ref2.id,
79
+ id = _ref2$id === void 0 ? null : _ref2$id;
80
+ var resourceValues = useResourceValues(resource, {
81
+ id: id
82
+ });
83
+ return /*#__PURE__*/React.createElement(Form, Object.assign({
84
+ className: classNames(['form', _defineProperty({
85
+ 'invalid-feedback': generalError !== null
86
+ }, className, className !== null)]),
87
+ action: action,
88
+ onSubmit: onSubmit,
89
+ withoutActions: true,
90
+ withoutErrors: true
91
+ }, props), /*#__PURE__*/React.createElement("div", {
92
+ className: "card"
93
+ }, /*#__PURE__*/React.createElement("div", {
94
+ className: "card-body"
95
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
96
+ values: resourceValues,
97
+ id: "yzfiXJ",
98
+ defaultMessage: [{
99
+ "type": 0,
100
+ "value": "Are you sure you want to delete "
101
+ }, {
102
+ "type": 1,
103
+ "value": "the_singular"
104
+ }, {
105
+ "type": 0,
106
+ "value": " #"
107
+ }, {
108
+ "type": 1,
109
+ "value": "id"
110
+ }, {
111
+ "type": 0,
112
+ "value": "?"
113
+ }]
114
+ }), generalError ? /*#__PURE__*/React.createElement("p", {
115
+ className: "text-danger"
116
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
117
+ id: "y9zauY",
118
+ defaultMessage: [{
119
+ "type": 0,
120
+ "value": "An error occured and we could not delete this item successfully."
121
+ }]
122
+ })) : null), /*#__PURE__*/React.createElement("div", {
123
+ className: "card-body d-flex"
124
+ }, previous !== null ? /*#__PURE__*/React.createElement(Button, {
125
+ href: previous,
126
+ className: "me-2",
127
+ theme: "secondary",
128
+ outline: true
129
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
130
+ id: "PyxZY2",
131
+ defaultMessage: [{
132
+ "type": 0,
133
+ "value": "Cancel"
134
+ }]
135
+ })) : null, /*#__PURE__*/React.createElement(Button, {
136
+ type: "submit",
137
+ className: "ms-auto",
138
+ theme: "danger"
139
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
140
+ id: "Bhu3B2",
141
+ defaultMessage: [{
142
+ "type": 0,
143
+ "value": "Delete"
144
+ }]
145
+ })))));
146
+ };
147
+ DeleteForm.propTypes = propTypes$m;
148
+ DeleteForm.defaultProps = defaultProps$m;
149
+
150
+ var _excluded$5 = ["component", "resource", "onSuccess", "item", "type", "isDelete"];
151
+ var propTypes$l = {
152
+ component: PropTypes$1.string,
153
+ resource: PropTypes.resource.isRequired,
154
+ item: PropTypes$1.object,
155
+ // eslint-disable-line react/forbid-prop-types
156
+ type: PropTypes$1.string,
157
+ onSuccess: PropTypes$1.func,
158
+ isDelete: PropTypes$1.bool
159
+ };
160
+ var defaultProps$l = {
161
+ component: null,
162
+ item: null,
163
+ type: null,
164
+ onSuccess: null,
165
+ isDelete: false
166
+ };
167
+ var ResourceForm = function ResourceForm(_ref) {
168
+ var component = _ref.component,
169
+ resource = _ref.resource,
170
+ onSuccess = _ref.onSuccess,
171
+ item = _ref.item,
172
+ type = _ref.type,
173
+ isDelete = _ref.isDelete,
174
+ props = _objectWithoutProperties(_ref, _excluded$5);
175
+ var locales = useLocales();
176
+ var FormComponents = useFormsComponents();
177
+ var _resource$fields = resource.fields,
178
+ resourceFields = _resource$fields === void 0 ? [] : _resource$fields,
179
+ _resource$types = resource.types,
180
+ resourceTypes = _resource$types === void 0 ? [] : _resource$types,
181
+ forms = resource.forms;
182
+ var resourceType = type !== null ? resourceTypes.find(function (it) {
183
+ return it.id === type;
184
+ }) || null : null;
185
+ var _ref2 = resourceType || {},
186
+ _ref2$fields = _ref2.fields,
187
+ resourceTypeFields = _ref2$fields === void 0 ? null : _ref2$fields;
188
+ var isCreate = item === null || !item.id;
189
+
190
+ // Pick fields from resource root or form
191
+ var _ref3 = forms || {},
192
+ _ref3$default = _ref3["default"],
193
+ defaultForm = _ref3$default === void 0 ? null : _ref3$default,
194
+ _ref3$create = _ref3.create,
195
+ createForm = _ref3$create === void 0 ? null : _ref3$create,
196
+ _ref3$edit = _ref3.edit,
197
+ editForm = _ref3$edit === void 0 ? null : _ref3$edit,
198
+ _ref3$delete = _ref3["delete"],
199
+ deleteForm = _ref3$delete === void 0 ? null : _ref3$delete;
200
+ var _ref4 = defaultForm || {},
201
+ _ref4$fields = _ref4.fields,
202
+ defaultFields = _ref4$fields === void 0 ? null : _ref4$fields,
203
+ defaultComponent = _ref4.component;
204
+ var createOrEditSource = isCreate ? createForm || {} : editForm || {};
205
+ var _ref5 = isDelete ? deleteForm || {} : createOrEditSource || {},
206
+ _ref5$fields = _ref5.fields,
207
+ formFields = _ref5$fields === void 0 ? null : _ref5$fields,
208
+ _ref5$component = _ref5.component,
209
+ formComponent = _ref5$component === void 0 ? null : _ref5$component;
210
+ var finalFields = useMemo(function () {
211
+ return (formFields || defaultFields || resourceTypeFields || resourceFields).filter(function (_ref6) {
212
+ var _ref6$settings = _ref6.settings,
213
+ _ref6$settings2 = _ref6$settings === void 0 ? {} : _ref6$settings,
214
+ _ref6$settings2$hidde = _ref6$settings2.hiddenInForm,
215
+ hiddenInForm = _ref6$settings2$hidde === void 0 ? false : _ref6$settings2$hidde;
216
+ return !hiddenInForm;
217
+ });
218
+ }, [formFields, defaultFields, resourceTypeFields, resourceFields]);
219
+
220
+ // Form routes
221
+ var resourceRoute = useResourceUrlGenerator(resource);
222
+ var _useResourceStore = useResourceStore(resource),
223
+ store = _useResourceStore.store;
224
+ var _useResourceUpdate = useResourceUpdate(resource, item != null ? item.id : null),
225
+ update = _useResourceUpdate.update;
226
+ var _useResourceDestroy = useResourceDestroy(resource, item != null ? item.id : null),
227
+ destroy = _useResourceDestroy.destroy;
228
+
229
+ // Post actions
230
+ var postAction = isCreate ? store : update;
231
+ var postForm = useCallback(function (action, data) {
232
+ return isDelete ? destroy() : postAction(data);
233
+ }, [postAction, isDelete, destroy, store, update]);
234
+
235
+ // Form state
236
+ var getInitialValue = useCallback(function () {
237
+ return item !== null ? item : finalFields.reduce(function (defaultValues, _ref7) {
238
+ var name = _ref7.name,
239
+ _ref7$defaultValue = _ref7.defaultValue,
240
+ defaultValue = _ref7$defaultValue === void 0 ? null : _ref7$defaultValue;
241
+ return defaultValue !== null ? _objectSpread(_objectSpread({}, defaultValues), {}, _defineProperty({}, name, defaultValue)) : defaultValues;
242
+ }, type !== null ? {
243
+ type: type
244
+ } : null);
245
+ }, [item, type, finalFields]);
246
+ var _useState = useState(getInitialValue()),
247
+ _useState2 = _slicedToArray(_useState, 2),
248
+ value = _useState2[0],
249
+ setValueState = _useState2[1];
250
+ var setValue = useCallback(function (newValue) {
251
+ // console.log('new value in resource form', newValue); // eslint-disable-line
252
+ setValueState(newValue);
253
+ }, [setValueState]);
254
+ var _useForm = useForm({
255
+ fields: finalFields,
256
+ value: value,
257
+ postForm: postForm,
258
+ setValue: setValue,
259
+ onComplete: onSuccess,
260
+ locales: locales
261
+ }),
262
+ fields = _useForm.fields,
263
+ onSubmit = _useForm.onSubmit,
264
+ status = _useForm.status,
265
+ generalError = _useForm.generalError,
266
+ errors = _useForm.errors;
267
+
268
+ // Form action
269
+ var modifyAction = isCreate ? resourceRoute('store') : resourceRoute('update', {
270
+ id: item.id
271
+ });
272
+ var action = isDelete ? resourceRoute('destroy', {
273
+ id: item.id
274
+ }) : modifyAction;
275
+ var defaultFormName = isDelete ? component || formComponent || null : component || formComponent || defaultComponent || 'normal';
276
+
277
+ // Form component
278
+ var FormComponent = getComponentFromName(defaultFormName, FormComponents, isDelete ? DeleteForm : component);
279
+
280
+ // Lisen to item value change - this is important
281
+ useEffect(function () {
282
+ // console.log('get initial value from the top'); // eslint-disable-line
283
+ setValue(getInitialValue());
284
+ }, [getInitialValue, setValue]);
285
+ return /*#__PURE__*/React.createElement(FormProvider, {
286
+ value: value,
287
+ setValue: setValue
288
+ }, /*#__PURE__*/React.createElement(FormComponent, Object.assign({}, props, {
289
+ status: status,
290
+ resource: resource,
291
+ item: item,
292
+ fields: fields,
293
+ generalError: generalError,
294
+ errors: errors,
295
+ action: action,
296
+ onSubmit: onSubmit,
297
+ isCreate: isCreate,
298
+ value: value,
299
+ onChange: setValue
300
+ })));
301
+ };
302
+ ResourceForm.propTypes = propTypes$l;
303
+ ResourceForm.defaultProps = defaultProps$l;
304
+
305
+ var propTypes$k = {
306
+ className: PropTypes$1.string,
307
+ itemClassName: PropTypes$1.string,
308
+ linkClassName: PropTypes$1.string
309
+ };
310
+ var defaultProps$k = {
311
+ className: null,
312
+ itemClassName: null,
313
+ linkClassName: null
314
+ };
315
+ var AccountMenu = function AccountMenu(_ref) {
316
+ var className = _ref.className,
317
+ itemClassName = _ref.itemClassName,
318
+ linkClassName = _ref.linkClassName;
319
+ var route = useUrlGenerator();
320
+ var user = useUser();
321
+ var logout = useLogout();
322
+ var onClickLogout = useCallback(function (e) {
323
+ e.preventDefault();
324
+ logout();
325
+ }, [logout, route]);
326
+ var items = useMemo(function () {
327
+ return user !== null ? [{
328
+ id: 'account',
329
+ label: /*#__PURE__*/React.createElement(FormattedMessage, {
330
+ id: "IuqEHB",
331
+ defaultMessage: [{
332
+ "type": 0,
333
+ "value": "Account"
334
+ }]
335
+ }),
336
+ href: route('account'),
337
+ dropdown: [
338
+ // {
339
+ // label: (
340
+ // <FormattedMessage
341
+ // defaultMessage="Update account"
342
+ // description="Menu label"
343
+ // />
344
+ // ),
345
+ // href: route('account'),
346
+ // },
347
+ {
348
+ label: /*#__PURE__*/React.createElement(FormattedMessage, {
349
+ id: "REIcPg",
350
+ defaultMessage: [{
351
+ "type": 0,
352
+ "value": "Logout"
353
+ }]
354
+ }),
355
+ href: route('auth.logout'),
356
+ onClick: onClickLogout
357
+ }]
358
+ }] : [{
359
+ label: /*#__PURE__*/React.createElement(FormattedMessage, {
360
+ id: "d0g58T",
361
+ defaultMessage: [{
362
+ "type": 0,
363
+ "value": "Login"
364
+ }]
365
+ }),
366
+ href: route('auth.login')
367
+ }];
368
+ }, [user, route, onClickLogout]);
369
+ return items !== null ? /*#__PURE__*/React.createElement(Menu, {
370
+ className: className,
371
+ itemClassName: itemClassName,
372
+ linkClassName: linkClassName,
373
+ items: items,
374
+ dropdownAlign: "end"
375
+ }) : null;
376
+ };
377
+ AccountMenu.propTypes = propTypes$k;
378
+ AccountMenu.defaultProps = defaultProps$k;
379
+
380
+ var propTypes$j = {
381
+ className: PropTypes$1.string,
382
+ itemClassName: PropTypes$1.string,
383
+ linkClassName: PropTypes$1.string
384
+ };
385
+ var defaultProps$j = {
386
+ className: null,
387
+ itemClassName: null,
388
+ linkClassName: null
389
+ };
390
+ var ResourcesMenu = function ResourcesMenu(_ref) {
391
+ var className = _ref.className,
392
+ itemClassName = _ref.itemClassName,
393
+ linkClassName = _ref.linkClassName;
394
+ var _useLocation = useLocation(),
395
+ pathname = _useLocation.pathname;
396
+ var resources = usePanneauResources();
397
+ var resourceRoute = useResourceUrlGenerator();
398
+ var items = useMemo(function () {
399
+ return resources.filter(function (_ref2) {
400
+ var _ref2$settings = _ref2.settings,
401
+ _ref2$settings2 = _ref2$settings === void 0 ? {} : _ref2$settings,
402
+ _ref2$settings2$hideI = _ref2$settings2.hideInNavbar,
403
+ hideInNavbar = _ref2$settings2$hideI === void 0 ? false : _ref2$settings2$hideI;
404
+ return !hideInNavbar;
405
+ }).map(function (it) {
406
+ var url = resourceRoute(it, 'index');
407
+ return {
408
+ id: it.id,
409
+ label: it.name,
410
+ href: url,
411
+ active: pathname.substr(0, url.length) === url
412
+ };
413
+ });
414
+ }, [resources, pathname, resourceRoute]);
415
+ return /*#__PURE__*/React.createElement(Menu, {
416
+ items: items,
417
+ className: className,
418
+ itemClassName: itemClassName,
419
+ linkClassName: linkClassName
420
+ });
421
+ };
422
+ ResourcesMenu.propTypes = propTypes$j;
423
+ ResourcesMenu.defaultProps = defaultProps$j;
424
+
425
+ var propTypes$i = {};
426
+ var defaultProps$i = {};
427
+ var MainNavbar = function MainNavbar(props) {
428
+ var _usePanneau = usePanneau(),
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;
437
+ var _usePanneauColorSchem = usePanneauColorScheme(),
438
+ background = _usePanneauColorSchem.background;
439
+ var route = useUrlGenerator();
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]);
478
+ return /*#__PURE__*/React.createElement(Navbar, Object.assign({
479
+ theme: background
480
+ }, props), name !== null ? /*#__PURE__*/React.createElement(Link, {
481
+ to: route('home'),
482
+ className: "navbar-brand"
483
+ }, name) : null, items);
484
+ };
485
+ MainNavbar.propTypes = propTypes$i;
486
+ MainNavbar.defaultProps = defaultProps$i;
487
+
488
+ var propTypes$h = {
489
+ children: PropTypes$1.node.isRequired,
490
+ fullscreen: PropTypes$1.bool
491
+ };
492
+ var defaultProps$h = {
493
+ fullscreen: false
494
+ };
495
+ var MainLayout = function MainLayout(_ref) {
496
+ var _ref2;
497
+ var children = _ref.children,
498
+ fullscreen = _ref.fullscreen;
499
+ var _usePanneauColorSchem = usePanneauColorScheme(),
500
+ background = _usePanneauColorSchem.background,
501
+ text = _usePanneauColorSchem.text;
502
+ return /*#__PURE__*/React.createElement("div", {
503
+ className: classNames(['d-flex', 'flex-column', 'min-vh-100'])
504
+ }, /*#__PURE__*/React.createElement(MainNavbar, {
505
+ className: classNames(['border-bottom', 'sticky-top', 'px-3'])
506
+ }), /*#__PURE__*/React.createElement("div", {
507
+ className: classNames(['flex-grow-1', (_ref2 = {
508
+ 'd-flex flex-column': fullscreen
509
+ }, _defineProperty(_ref2, "bg-".concat(background), background !== null), _defineProperty(_ref2, "text-".concat(text), text !== null), _ref2)])
510
+ }, children));
511
+ };
512
+ MainLayout.propTypes = propTypes$h;
513
+ MainLayout.defaultProps = defaultProps$h;
514
+
515
+ var propTypes$g = {
516
+ title: PropTypes.label,
517
+ actions: PropTypes$1.node,
518
+ small: PropTypes$1.bool,
519
+ className: PropTypes$1.string,
520
+ children: PropTypes$1.node
521
+ };
522
+ var defaultProps$g = {
523
+ title: null,
524
+ actions: null,
525
+ small: false,
526
+ className: null,
527
+ children: null
528
+ };
529
+ var PageHeader = function PageHeader(_ref) {
530
+ var _ref2;
531
+ var title = _ref.title,
532
+ actions = _ref.actions,
533
+ small = _ref.small,
534
+ className = _ref.className,
535
+ children = _ref.children;
536
+ // TODO: fix page header components
537
+ // const { components } = usePanneau();
538
+ var _usePanneauColorSchem = usePanneauColorScheme(),
539
+ text = _usePanneauColorSchem.text,
540
+ background = _usePanneauColorSchem.background;
541
+ // console.log('page-header', components); // eslint-disable-line
542
+
543
+ var inner = /*#__PURE__*/React.createElement("div", {
544
+ className: "d-flex align-items-center flex-wrap"
545
+ }, title !== null ? /*#__PURE__*/React.createElement("h1", {
546
+ className: "mb-0"
547
+ }, /*#__PURE__*/React.createElement(Label, null, title)) : null, actions !== null ? /*#__PURE__*/React.createElement("div", {
548
+ className: "ms-auto"
549
+ }, actions) : null);
550
+ return /*#__PURE__*/React.createElement("div", {
551
+ className: classNames(['py-4', (_ref2 = {}, _defineProperty(_ref2, "bg-".concat(background), background !== null), _defineProperty(_ref2, "text-".concat(text), text !== null), _defineProperty(_ref2, "border-bottom", background || text !== null), _defineProperty(_ref2, className, className !== null), _ref2)])
552
+ }, /*#__PURE__*/React.createElement("div", {
553
+ className: "container-sm"
554
+ }, small ? /*#__PURE__*/React.createElement("div", {
555
+ className: "row justify-content-center"
556
+ }, /*#__PURE__*/React.createElement("div", {
557
+ className: "col-12 col-md-8 col-lg-7"
558
+ }, inner)) : inner), children);
559
+ };
560
+ PageHeader.propTypes = propTypes$g;
561
+ PageHeader.defaultProps = defaultProps$g;
562
+
563
+ var propTypes$f = {
564
+ resource: PropTypes.resource.isRequired
565
+ };
566
+ var defaultProps$f = {};
567
+ var ResourceCreatePage = function ResourceCreatePage(_ref) {
568
+ var resource = _ref.resource;
569
+ var navigate = useNavigate();
570
+ var _useLocation = useLocation(),
571
+ search = _useLocation.search;
572
+ var resourceRoute = useResourceUrlGenerator(resource);
573
+ var onSuccess = useCallback(function () {
574
+ navigate("".concat(resourceRoute('index'), "?created=true"));
575
+ }, [navigate, resourceRoute]);
576
+ var _useMemo = useMemo(function () {
577
+ return parse(search);
578
+ }, [search]),
579
+ _useMemo$type = _useMemo.type,
580
+ type = _useMemo$type === void 0 ? null : _useMemo$type;
581
+ var resourceValues = useResourceValues(resource);
582
+ return /*#__PURE__*/React.createElement(ResourceProvider, {
583
+ resource: resource
584
+ }, /*#__PURE__*/React.createElement(MainLayout, null, /*#__PURE__*/React.createElement(PageHeader, {
585
+ title: /*#__PURE__*/React.createElement(FormattedMessage, {
586
+ values: resourceValues,
587
+ id: "6viUpq",
588
+ defaultMessage: [{
589
+ "type": 0,
590
+ "value": "Create "
591
+ }, {
592
+ "type": 1,
593
+ "value": "a_singular"
594
+ }]
595
+ }),
596
+ small: true
597
+ }), /*#__PURE__*/React.createElement("div", {
598
+ className: "container-sm py-4"
599
+ }, /*#__PURE__*/React.createElement("div", {
600
+ className: "row justify-content-center"
601
+ }, /*#__PURE__*/React.createElement("div", {
602
+ className: "col-12 col-md-8 col-lg-7"
603
+ }, /*#__PURE__*/React.createElement(ResourceForm, {
604
+ resource: resource,
605
+ type: type,
606
+ onSuccess: onSuccess
607
+ }))))));
608
+ };
609
+ ResourceCreatePage.propTypes = propTypes$f;
610
+ ResourceCreatePage.defaultProps = defaultProps$f;
611
+
612
+ // import Button from '../buttons/Button';
613
+
614
+ var propTypes$e = {
615
+ resource: PropTypes.resource.isRequired
616
+ };
617
+ var defaultProps$e = {};
618
+ var ResourceDeletePage = function ResourceDeletePage(_ref) {
619
+ var resource = _ref.resource;
620
+ var _useParams = useParams(),
621
+ itemId = _useParams.id;
622
+ var navigate = useNavigate();
623
+ var resourceRoute = useResourceUrlGenerator(resource);
624
+ var _useResourceItem = useResourceItem(resource, itemId),
625
+ item = _useResourceItem.item;
626
+ var onSuccess = useCallback(function () {
627
+ return navigate("".concat(resourceRoute('index'), "?deleted=true"));
628
+ }, [navigate, resourceRoute]);
629
+
630
+ // Navigate back
631
+ var _ref2 = history || {},
632
+ _ref2$entries = _ref2.entries,
633
+ entries = _ref2$entries === void 0 ? [] : _ref2$entries;
634
+ var previousEntry = entries !== null && entries.length > 1 ? entries[entries.length - 2] : null;
635
+ var previous = (previousEntry === null || previousEntry === void 0 ? void 0 : previousEntry.pathname) || null;
636
+ var resourceValues = useResourceValues(resource);
637
+ return /*#__PURE__*/React.createElement(ResourceProvider, {
638
+ resource: resource
639
+ }, /*#__PURE__*/React.createElement(MainLayout, null, /*#__PURE__*/React.createElement(PageHeader, {
640
+ title: /*#__PURE__*/React.createElement(FormattedMessage, {
641
+ values: resourceValues,
642
+ id: "zN5N/Q",
643
+ defaultMessage: [{
644
+ "type": 0,
645
+ "value": "Delete "
646
+ }, {
647
+ "type": 1,
648
+ "value": "a_singular"
649
+ }]
650
+ }),
651
+ small: true
652
+ }), /*#__PURE__*/React.createElement("div", {
653
+ className: "container-sm py-4"
654
+ }, /*#__PURE__*/React.createElement("div", {
655
+ className: "row justify-content-center"
656
+ }, /*#__PURE__*/React.createElement("div", {
657
+ className: "col-12 col-md-8 col-lg-7"
658
+ }, item !== null ? /*#__PURE__*/React.createElement(ResourceForm, {
659
+ component: "",
660
+ resource: resource,
661
+ item: item,
662
+ onSuccess: onSuccess,
663
+ previous: previous,
664
+ isDelete: true
665
+ }) : null)))));
666
+ };
667
+ ResourceDeletePage.propTypes = propTypes$e;
668
+ ResourceDeletePage.defaultProps = defaultProps$e;
669
+
670
+ // import Button from '../buttons/Button';
671
+
672
+ var propTypes$d = {
673
+ resource: PropTypes.resource.isRequired
674
+ };
675
+ var defaultProps$d = {};
676
+ var ResourceEditPage = function ResourceEditPage(_ref) {
677
+ var resource = _ref.resource;
678
+ var _useParams = useParams(),
679
+ itemId = _useParams.id;
680
+ var _useResourceItem = useResourceItem(resource, itemId),
681
+ item = _useResourceItem.item;
682
+ var _ref2 = item || {},
683
+ _ref2$type = _ref2.type,
684
+ type = _ref2$type === void 0 ? null : _ref2$type;
685
+ var _useState = useState(item),
686
+ _useState2 = _slicedToArray(_useState, 2),
687
+ editItem = _useState2[0],
688
+ setEditItem = _useState2[1];
689
+ var onSuccess = useCallback(function (newItem) {
690
+ return setEditItem(newItem);
691
+ }, []);
692
+ useEffect(function () {
693
+ setEditItem(item);
694
+ }, [item, setEditItem]);
695
+ var resourceValues = useResourceValues(resource);
696
+ return /*#__PURE__*/React.createElement(ResourceProvider, {
697
+ resource: resource
698
+ }, /*#__PURE__*/React.createElement(MainLayout, null, /*#__PURE__*/React.createElement(PageHeader, {
699
+ title: /*#__PURE__*/React.createElement(FormattedMessage, {
700
+ values: resourceValues,
701
+ id: "mCfzkJ",
702
+ defaultMessage: [{
703
+ "type": 0,
704
+ "value": "Edit "
705
+ }, {
706
+ "type": 1,
707
+ "value": "a_singular"
708
+ }]
709
+ }),
710
+ small: true
711
+ }), /*#__PURE__*/React.createElement("div", {
712
+ className: "container-sm py-4"
713
+ }, /*#__PURE__*/React.createElement("div", {
714
+ className: "row justify-content-center"
715
+ }, /*#__PURE__*/React.createElement("div", {
716
+ className: "col-12 col-md-8 col-lg-7"
717
+ }, editItem !== null ? /*#__PURE__*/React.createElement(ResourceForm, {
718
+ resource: resource,
719
+ item: editItem,
720
+ type: type,
721
+ onSuccess: onSuccess
722
+ }) : null)))));
723
+ };
724
+ ResourceEditPage.propTypes = propTypes$d;
725
+ ResourceEditPage.defaultProps = defaultProps$d;
726
+
727
+ var propTypes$c = {
728
+ resource: PropTypes.resource.isRequired,
729
+ className: PropTypes$1.string
730
+ };
731
+ var defaultProps$c = {
732
+ className: null
733
+ };
734
+ var ResourceCreateButtom = function ResourceCreateButtom(_ref) {
735
+ var resource = _ref.resource,
736
+ className = _ref.className;
737
+ var _resource$types = resource.types,
738
+ types = _resource$types === void 0 ? null : _resource$types;
739
+ // const intl = useIntl();
740
+ var resourceRoute = useResourceUrlGenerator(resource);
741
+ var resourceValues = useResourceValues(resource);
742
+ var _useState = useState(false),
743
+ _useState2 = _slicedToArray(_useState, 2),
744
+ dropdownOpened = _useState2[0],
745
+ setDropdownOpened = _useState2[1];
746
+ var onClickDropdown = useCallback(function (e) {
747
+ e.preventDefault();
748
+ e.stopPropagation();
749
+ setDropdownOpened(!dropdownOpened);
750
+ }, [setDropdownOpened, dropdownOpened]);
751
+ var finalTypes = types !== null ? types.filter(function (_ref2) {
752
+ var _ref2$settings = _ref2.settings,
753
+ _ref2$settings2 = _ref2$settings === void 0 ? {} : _ref2$settings,
754
+ _ref2$settings2$canCr = _ref2$settings2.canCreate,
755
+ canCreate = _ref2$settings2$canCr === void 0 ? true : _ref2$settings2$canCr;
756
+ return canCreate;
757
+ }) : null;
758
+ var hasMultipleTypes = finalTypes !== null && finalTypes.length > 1;
759
+ var onDropdownClickOutside = useCallback(function () {
760
+ if (dropdownOpened) {
761
+ setDropdownOpened(false);
762
+ }
763
+ }, [setDropdownOpened, dropdownOpened]);
764
+ var button = /*#__PURE__*/React.createElement(Button, {
765
+ href: !hasMultipleTypes ? "".concat(resourceRoute('create')).concat(finalTypes !== null && finalTypes.length === 1 ? "?type=".concat(finalTypes[0].id) : '') : '#',
766
+ size: "lg",
767
+ theme: "primary",
768
+ className: classNames([_defineProperty({
769
+ 'dropdown-toggle': hasMultipleTypes
770
+ }, className, className !== null)]),
771
+ onClick: hasMultipleTypes ? onClickDropdown : null
772
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
773
+ values: resourceValues,
774
+ id: "l+ddDH",
775
+ defaultMessage: [{
776
+ "type": 0,
777
+ "value": "Create "
778
+ }, {
779
+ "type": 1,
780
+ "value": "a_singular"
781
+ }]
782
+ }));
783
+ return hasMultipleTypes ? /*#__PURE__*/React.createElement("div", {
784
+ className: classNames(['dropdown', {
785
+ show: dropdownOpened
786
+ }])
787
+ }, button, /*#__PURE__*/React.createElement(Dropdown, {
788
+ items: finalTypes.map(function (it) {
789
+ return {
790
+ id: it.id,
791
+ label: it.name,
792
+ href: "".concat(resourceRoute('create'), "?type=").concat(it.id)
793
+ };
794
+ }),
795
+ visible: dropdownOpened,
796
+ align: "end",
797
+ onClickOutside: onDropdownClickOutside
798
+ })) : button;
799
+ };
800
+ ResourceCreateButtom.propTypes = propTypes$c;
801
+ ResourceCreateButtom.defaultProps = defaultProps$c;
802
+
803
+ var _excluded$4 = ["component", "name", "groupLabel"];
804
+ var propTypes$b = {
805
+ filters: PropTypes$1.arrayOf(PropTypes$1.shape({
806
+ id: PropTypes$1.string.isRequired,
807
+ component: PropTypes$1.string.isRequired
808
+ })),
809
+ value: PropTypes$1.object,
810
+ // eslint-disable-line react/forbid-prop-types
811
+ onChange: PropTypes$1.func,
812
+ onReset: PropTypes$1.func,
813
+ withContainer: PropTypes$1.bool,
814
+ withReset: PropTypes$1.bool,
815
+ defaultValue: PropTypes$1.objectOf(PropTypes$1.object),
816
+ // eslint-disable-line react/forbid-prop-types
817
+ className: PropTypes$1.string
818
+ };
819
+ var defaultProps$b = {
820
+ filters: [],
821
+ value: null,
822
+ onChange: null,
823
+ onReset: null,
824
+ withContainer: false,
825
+ withReset: true,
826
+ defaultValue: {
827
+ page: null
828
+ },
829
+ className: null
830
+ };
831
+ var ResourceFilters = function ResourceFilters(_ref) {
832
+ var filters = _ref.filters,
833
+ value = _ref.value,
834
+ onChange = _ref.onChange,
835
+ onReset = _ref.onReset,
836
+ withContainer = _ref.withContainer,
837
+ withReset = _ref.withReset,
838
+ defaultValue = _ref.defaultValue,
839
+ className = _ref.className;
840
+ var FilterComponents = useFiltersComponents();
841
+ var _usePanneauColorSchem = usePanneauColorScheme(),
842
+ background = _usePanneauColorSchem.background;
843
+ var currentFilters = filters || [];
844
+ var onFiltersReset = useCallback(function () {
845
+ if (onReset !== null) {
846
+ onReset(null);
847
+ }
848
+ }, [onReset]);
849
+ var hasActiveFilter = (currentFilters || []).reduce(function (isActive, item) {
850
+ if (value !== null && value[item.name]) {
851
+ return true;
852
+ }
853
+ return isActive;
854
+ }, false);
855
+
856
+ // console.log('value', value);
857
+
858
+ return /*#__PURE__*/React.createElement(Navbar, {
859
+ className: classNames([_defineProperty({
860
+ 'navbar-expand-md': withContainer
861
+ }, className, className !== null), 'justify-content-start', 'align-items-start', 'flex-column', 'flex-md-row']),
862
+ theme: background,
863
+ withoutCollapse: true
864
+ }, currentFilters.map(function (_ref3, index) {
865
+ var component = _ref3.component,
866
+ name = _ref3.name,
867
+ groupLabel = _ref3.groupLabel,
868
+ filterProps = _objectWithoutProperties(_ref3, _excluded$4);
869
+ var FilterComponent = getComponentFromName(component, FilterComponents, null);
870
+ var filterValue = value !== null && value[name] ? value[name] : null;
871
+ var onFilterChange = useCallback(function (newFilterValue) {
872
+ if (name !== null && onChange !== null) {
873
+ onChange(_objectSpread(_objectSpread({}, value), {}, _defineProperty({}, name, newFilterValue), defaultValue));
874
+ }
875
+ }, [onChange, name, value, defaultValue]);
876
+ var onFilterClear = useCallback(function () {
877
+ if (name !== null && onChange !== null) {
878
+ var _ref4 = value || {};
879
+ _ref4[name];
880
+ var newValue = _objectWithoutProperties(_ref4, [name].map(_toPropertyKey));
881
+ onChange(_objectSpread(_objectSpread({}, newValue), defaultValue));
882
+ }
883
+ }, [onChange, name, value, defaultValue]);
884
+ return FilterComponent !== null ? /*#__PURE__*/React.createElement(FormGroup, {
885
+ key: "filter-".concat(name, "-").concat(index + 1),
886
+ label: groupLabel,
887
+ className: "me-4"
888
+ }, /*#__PURE__*/React.createElement(FilterComponent, Object.assign({}, filterProps, {
889
+ value: filterValue,
890
+ onChange: onFilterChange,
891
+ onClear: onFilterClear
892
+ }))) : null;
893
+ }), withReset && hasActiveFilter && currentFilters.length > 0 ? /*#__PURE__*/React.createElement(Button, {
894
+ theme: "primary",
895
+ onClick: onFiltersReset
896
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
897
+ icon: faUndo
898
+ })) : null);
899
+ };
900
+ ResourceFilters.propTypes = propTypes$b;
901
+ ResourceFilters.defaultProps = defaultProps$b;
902
+
903
+ var _excluded$3 = ["component", "showPagination", "filters"],
904
+ _excluded2$1 = ["page"];
905
+ var propTypes$a = {
906
+ resource: PropTypes.resource.isRequired,
907
+ query: PropTypes$1.object,
908
+ // eslint-disable-line react/forbid-prop-types
909
+ paginated: PropTypes$1.bool,
910
+ baseUrl: PropTypes$1.string,
911
+ component: PropTypes$1.oneOfType([PropTypes$1.elementType, PropTypes$1.string]),
912
+ componentProps: PropTypes$1.object,
913
+ // eslint-disable-line react/forbid-prop-types
914
+ onQueryChange: PropTypes$1.func,
915
+ onQueryReset: PropTypes$1.func
916
+ };
917
+ var defaultProps$a = {
918
+ query: null,
919
+ paginated: true,
920
+ component: null,
921
+ baseUrl: null,
922
+ componentProps: null,
923
+ onQueryChange: null,
924
+ onQueryReset: null
925
+ };
926
+ var ResourceItemsList = function ResourceItemsList(_ref) {
927
+ var resource = _ref.resource,
928
+ query = _ref.query,
929
+ baseUrl = _ref.baseUrl,
930
+ onQueryChange = _ref.onQueryChange,
931
+ onQueryReset = _ref.onQueryReset,
932
+ paginated = _ref.paginated;
933
+ var _resource$index = resource.index,
934
+ _resource$index2 = _resource$index === void 0 ? {} : _resource$index,
935
+ _resource$index2$comp = _resource$index2.component,
936
+ listComponent = _resource$index2$comp === void 0 ? null : _resource$index2$comp,
937
+ _resource$index2$show = _resource$index2.showPagination,
938
+ showPagination = _resource$index2$show === void 0 ? true : _resource$index2$show,
939
+ _resource$index2$filt = _resource$index2.filters,
940
+ filters = _resource$index2$filt === void 0 ? null : _resource$index2$filt,
941
+ listProps = _objectWithoutProperties(_resource$index2, _excluded$3);
942
+ var _usePanneauColorSchem = usePanneauColorScheme(),
943
+ _usePanneauColorSchem2 = _usePanneauColorSchem.background,
944
+ theme = _usePanneauColorSchem2 === void 0 ? null : _usePanneauColorSchem2;
945
+ var ListComponents = useListsComponents();
946
+ var _useMemo = useMemo(function () {
947
+ var _ref2 = query || {},
948
+ _ref2$page = _ref2.page,
949
+ currentPage = _ref2$page === void 0 ? 1 : _ref2$page,
950
+ rest = _objectWithoutProperties(_ref2, _excluded2$1);
951
+ return [currentPage, rest];
952
+ }, [query]),
953
+ _useMemo2 = _slicedToArray(_useMemo, 2),
954
+ page = _useMemo2[0],
955
+ queryWithoutPage = _useMemo2[1];
956
+ var itemsProps = useResourceItems(resource, queryWithoutPage, paginated ? parseInt(page, 10) : null);
957
+ var _ref3 = itemsProps || {},
958
+ _ref3$lastPage = _ref3.lastPage,
959
+ lastPage = _ref3$lastPage === void 0 ? 0 : _ref3$lastPage,
960
+ _ref3$total = _ref3.total,
961
+ total = _ref3$total === void 0 ? 0 : _ref3$total;
962
+ var ListComponent = getComponentFromName(listComponent || 'table', ListComponents);
963
+ return /*#__PURE__*/React.createElement(React.Fragment, null, filters !== null ? /*#__PURE__*/React.createElement(ResourceFilters, {
964
+ filters: filters,
965
+ value: query,
966
+ onChange: onQueryChange,
967
+ onReset: onQueryReset
968
+ }) : null, paginated && showPagination ? /*#__PURE__*/React.createElement(Pagination, {
969
+ page: page,
970
+ lastPage: lastPage,
971
+ total: total,
972
+ url: baseUrl,
973
+ query: query,
974
+ className: "mt-1 mb-1"
975
+ }) : null, ListComponent !== null ? /*#__PURE__*/React.createElement(ListComponent, Object.assign({}, itemsProps, listProps, {
976
+ resource: resource,
977
+ baseUrl: baseUrl,
978
+ query: query,
979
+ onQueryChange: onQueryChange,
980
+ onQueryReset: onQueryReset,
981
+ theme: theme
982
+ })) : null, paginated && showPagination ? /*#__PURE__*/React.createElement(Pagination, {
983
+ page: page,
984
+ lastPage: lastPage,
985
+ total: total,
986
+ url: baseUrl,
987
+ query: query,
988
+ className: "mt-4 mb-1"
989
+ }) : null);
990
+ };
991
+ ResourceItemsList.propTypes = propTypes$a;
992
+ ResourceItemsList.defaultProps = defaultProps$a;
993
+
994
+ var _excluded$2 = ["id", "component"];
995
+ var propTypes$9 = {
996
+ resource: PropTypes.resource.isRequired,
997
+ defaultActions: PropTypes$1.arrayOf(PropTypes$1.object) // eslint-disable-line react/forbid-prop-types
998
+ };
999
+
1000
+ var defaultProps$9 = {
1001
+ defaultActions: ['create']
1002
+ };
1003
+ var ResourceIndexPage = function ResourceIndexPage(_ref) {
1004
+ var resource = _ref.resource,
1005
+ defaultActions = _ref.defaultActions;
1006
+ var name = resource.name,
1007
+ _resource$settings = resource.settings,
1008
+ settings = _resource$settings === void 0 ? {} : _resource$settings,
1009
+ _resource$index = resource.index,
1010
+ index = _resource$index === void 0 ? {} : _resource$index;
1011
+ var _ref2 = settings || {},
1012
+ _ref2$canCreate = _ref2.canCreate,
1013
+ canCreate = _ref2$canCreate === void 0 ? true : _ref2$canCreate,
1014
+ _ref2$indexIsPaginate = _ref2.indexIsPaginated,
1015
+ paginated = _ref2$indexIsPaginate === void 0 ? false : _ref2$indexIsPaginate;
1016
+ var _ref3 = index || {},
1017
+ _ref3$actions = _ref3.actions,
1018
+ actions = _ref3$actions === void 0 ? null : _ref3$actions;
1019
+ var finalActions = useMemo(function () {
1020
+ return (actions || defaultActions.filter(function (it) {
1021
+ return it !== 'create' || canCreate;
1022
+ })).map(function (it) {
1023
+ return it === 'create' ? {
1024
+ id: 'create',
1025
+ component: ResourceCreateButtom,
1026
+ size: 'lg',
1027
+ theme: 'primary'
1028
+ } : it;
1029
+ });
1030
+ }, [canCreate, actions]);
1031
+ var resourceValues = useResourceValues(resource);
1032
+ var componentsManager = useComponentsManager();
1033
+ var _useLocation = useLocation(),
1034
+ search = _useLocation.search;
1035
+ var navigate = useNavigate();
1036
+ var query = useMemo(function () {
1037
+ return parse(search);
1038
+ }, [search]);
1039
+ var listQuery = useMemo(function () {
1040
+ return query;
1041
+ }, [query]); // TODO: omit routes
1042
+ var _ref4 = query || {},
1043
+ _ref4$created = _ref4.created,
1044
+ created = _ref4$created === void 0 ? false : _ref4$created,
1045
+ _ref4$deleted = _ref4.deleted,
1046
+ deleted = _ref4$deleted === void 0 ? false : _ref4$deleted;
1047
+ var resourceRoute = useResourceUrlGenerator(resource);
1048
+ var url = resourceRoute('index');
1049
+ var onQueryChange = useCallback(function (submitQuery) {
1050
+ var newQuery = submitQuery !== null ? Object.keys(submitQuery).reduce(function (currentQuery, key) {
1051
+ var value = submitQuery[key];
1052
+ return value !== null ? _objectSpread(_objectSpread({}, currentQuery), {}, _defineProperty({}, key, value)) : currentQuery;
1053
+ }, null) : null;
1054
+ navigate("".concat(url).concat(newQuery !== null ? "?".concat(stringify(newQuery, {
1055
+ arrayFormat: 'bracket'
1056
+ })) : ''));
1057
+ }, [navigate, url, query, paginated]);
1058
+ var onQueryReset = useCallback(function () {
1059
+ var queryString = stringify(null, {
1060
+ arrayFormat: 'bracket'
1061
+ });
1062
+ navigate("".concat(url, "?").concat(queryString));
1063
+ }, [navigate, url, paginated]);
1064
+ var onClickCloseAlert = useCallback(function () {
1065
+ navigate(url, {
1066
+ replace: true
1067
+ });
1068
+ }, [navigate, url]);
1069
+ return /*#__PURE__*/React.createElement(ResourceProvider, {
1070
+ resource: resource
1071
+ }, /*#__PURE__*/React.createElement(MainLayout, null, /*#__PURE__*/React.createElement(PageHeader, {
1072
+ title: name,
1073
+ actions: finalActions.length > 0 ? /*#__PURE__*/React.createElement("div", {
1074
+ className: "d-flex align-items-center"
1075
+ }, finalActions.map(function (_ref5) {
1076
+ var id = _ref5.id,
1077
+ _ref5$component = _ref5.component,
1078
+ component = _ref5$component === void 0 ? Button : _ref5$component,
1079
+ actionProps = _objectWithoutProperties(_ref5, _excluded$2);
1080
+ var ActionComponent = isString(component) ? componentsManager.getComponent(component) : component;
1081
+ return ActionComponent !== null ? /*#__PURE__*/React.createElement(ActionComponent, Object.assign({
1082
+ key: "action-".concat(id)
1083
+ }, actionProps, ActionComponent !== Button ? {
1084
+ resource: resource,
1085
+ query: query,
1086
+ onQueryChange: onQueryChange
1087
+ } : {})) : null;
1088
+ })) : null
1089
+ }), /*#__PURE__*/React.createElement("div", {
1090
+ className: classNames(['container-sm py-4'])
1091
+ }, created ? /*#__PURE__*/React.createElement(Alert, {
1092
+ className: "mb-4",
1093
+ onClose: onClickCloseAlert
1094
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
1095
+ values: resourceValues,
1096
+ id: "bfP/d8",
1097
+ defaultMessage: [{
1098
+ "type": 1,
1099
+ "value": "The_singular"
1100
+ }, {
1101
+ "type": 0,
1102
+ "value": " has been created."
1103
+ }]
1104
+ })) : null, deleted ? /*#__PURE__*/React.createElement(Alert, {
1105
+ className: "mb-4",
1106
+ onClose: onClickCloseAlert
1107
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
1108
+ values: resourceValues,
1109
+ id: "dkRdks",
1110
+ defaultMessage: [{
1111
+ "type": 1,
1112
+ "value": "The_singular"
1113
+ }, {
1114
+ "type": 0,
1115
+ "value": " has been deleted."
1116
+ }]
1117
+ })) : null, /*#__PURE__*/React.createElement(ResourceItemsList, {
1118
+ resource: resource,
1119
+ baseUrl: url,
1120
+ query: listQuery,
1121
+ paginated: paginated,
1122
+ onQueryChange: onQueryChange,
1123
+ onQueryReset: onQueryReset
1124
+ }))));
1125
+ };
1126
+ ResourceIndexPage.propTypes = propTypes$9;
1127
+ ResourceIndexPage.defaultProps = defaultProps$9;
1128
+
1129
+ var propTypes$8 = {
1130
+ resource: PropTypes.resource.isRequired
1131
+ };
1132
+ var defaultProps$8 = {};
1133
+ var ResourceShowPage = function ResourceShowPage(_ref) {
1134
+ var resource = _ref.resource;
1135
+ return /*#__PURE__*/React.createElement(ResourceProvider, {
1136
+ resource: resource
1137
+ }, /*#__PURE__*/React.createElement(MainLayout, null, /*#__PURE__*/React.createElement(PageHeader, {
1138
+ title: resource === null || resource === void 0 ? void 0 : resource.name
1139
+ }), /*#__PURE__*/React.createElement("div", {
1140
+ className: "container-sm"
1141
+ }, "Show page")));
1142
+ };
1143
+ ResourceShowPage.propTypes = propTypes$8;
1144
+ ResourceShowPage.defaultProps = defaultProps$8;
1145
+
1146
+ /* eslint-disable react/jsx-props-no-spreading */
1147
+ var propTypes$7 = {};
1148
+ var defaultProps$7 = {};
1149
+ var HomePage = function HomePage() {
1150
+ var route = useUrlGenerator();
1151
+ var resources = usePanneauResources();
1152
+ var visibleResources = resources.filter(function (_ref) {
1153
+ var _ref$settings = _ref.settings,
1154
+ _ref$settings2 = _ref$settings === void 0 ? {} : _ref$settings,
1155
+ _ref$settings2$hideIn = _ref$settings2.hideInNavbar,
1156
+ hideInNavbar = _ref$settings2$hideIn === void 0 ? false : _ref$settings2$hideIn;
1157
+ return !hideInNavbar;
1158
+ });
1159
+ return /*#__PURE__*/React.createElement(MainLayout, null, /*#__PURE__*/React.createElement("div", {
1160
+ className: "container-sm py-4"
1161
+ }, visibleResources.map(function (resource) {
1162
+ var _ref2 = resource || {},
1163
+ resourceId = _ref2.id;
1164
+ var resourceValues = useResourceValues(resource);
1165
+ return /*#__PURE__*/React.createElement(Link, {
1166
+ className: "d-block my-2",
1167
+ key: "resource-link-".concat(resourceId),
1168
+ to: route('resources.index', {
1169
+ resource: resourceId
1170
+ })
1171
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
1172
+ values: resourceValues,
1173
+ id: "FntHPK",
1174
+ defaultMessage: [{
1175
+ "type": 0,
1176
+ "value": "View "
1177
+ }, {
1178
+ "type": 1,
1179
+ "value": "the_plural"
1180
+ }]
1181
+ }));
1182
+ })));
1183
+ };
1184
+ HomePage.propTypes = propTypes$7;
1185
+ HomePage.defaultProps = defaultProps$7;
1186
+
1187
+ var propTypes$6 = {};
1188
+ var defaultProps$6 = {};
1189
+ var AccountPage = function AccountPage() {
1190
+ return /*#__PURE__*/React.createElement(MainLayout, null, /*#__PURE__*/React.createElement("div", {
1191
+ className: "container-sm py-4"
1192
+ }, "Account page"));
1193
+ };
1194
+ AccountPage.propTypes = propTypes$6;
1195
+ AccountPage.defaultProps = defaultProps$6;
1196
+
1197
+ /* eslint-disable react/jsx-props-no-spreading */
1198
+ var propTypes$5 = {
1199
+ fields: PropTypes.fields,
1200
+ className: PropTypes$1.string,
1201
+ onSuccess: PropTypes$1.func
1202
+ };
1203
+ var defaultProps$5 = {
1204
+ fields: [{
1205
+ name: 'email',
1206
+ type: 'email',
1207
+ size: 'lg',
1208
+ label: /*#__PURE__*/React.createElement(FormattedMessage, {
1209
+ id: "LI0Gz4",
1210
+ defaultMessage: [{
1211
+ "type": 0,
1212
+ "value": "Email"
1213
+ }]
1214
+ })
1215
+ }, {
1216
+ name: 'password',
1217
+ type: 'password',
1218
+ size: 'lg',
1219
+ label: /*#__PURE__*/React.createElement(FormattedMessage, {
1220
+ id: "4yfet+",
1221
+ defaultMessage: [{
1222
+ "type": 0,
1223
+ "value": "Password"
1224
+ }]
1225
+ })
1226
+ }],
1227
+ className: null,
1228
+ onSuccess: null
1229
+ };
1230
+ var LoginForm = function LoginForm(_ref) {
1231
+ var formFields = _ref.fields,
1232
+ className = _ref.className,
1233
+ onSuccess = _ref.onSuccess;
1234
+ var url = useUrlGenerator();
1235
+ var _useAuth = useAuth(),
1236
+ login = _useAuth.login;
1237
+ var postForm = useCallback(function (action, _ref2) {
1238
+ var email = _ref2.email,
1239
+ password = _ref2.password;
1240
+ return login(email, password);
1241
+ }, [login]);
1242
+ var _useForm = useForm({
1243
+ fields: formFields,
1244
+ postForm: postForm,
1245
+ onComplete: onSuccess
1246
+ }),
1247
+ value = _useForm.value,
1248
+ setValue = _useForm.setValue,
1249
+ fields = _useForm.fields,
1250
+ onSubmit = _useForm.onSubmit,
1251
+ status = _useForm.status,
1252
+ generalError = _useForm.generalError,
1253
+ errors = _useForm.errors;
1254
+ var NormalForm = useFormComponent('normal');
1255
+ return /*#__PURE__*/React.createElement(NormalForm, {
1256
+ action: url('auth.login'),
1257
+ method: "post",
1258
+ fields: fields,
1259
+ onSubmit: onSubmit,
1260
+ className: className,
1261
+ status: status,
1262
+ generalError: generalError,
1263
+ errors: errors,
1264
+ value: value,
1265
+ onChange: setValue,
1266
+ submitButtonLabel: /*#__PURE__*/React.createElement(FormattedMessage, {
1267
+ id: "g6qbbX",
1268
+ defaultMessage: [{
1269
+ "type": 0,
1270
+ "value": "Log in"
1271
+ }]
1272
+ })
1273
+ });
1274
+ };
1275
+ LoginForm.propTypes = propTypes$5;
1276
+ LoginForm.defaultProps = defaultProps$5;
1277
+
1278
+ var propTypes$4 = {
1279
+ children: PropTypes$1.node.isRequired,
1280
+ fullscreen: PropTypes$1.bool
1281
+ };
1282
+ var defaultProps$4 = {
1283
+ fullscreen: false
1284
+ };
1285
+ var GuestLayout = function GuestLayout(_ref) {
1286
+ var _classNames;
1287
+ var fullscreen = _ref.fullscreen,
1288
+ children = _ref.children;
1289
+ var _usePanneauColorSchem = usePanneauColorScheme(),
1290
+ background = _usePanneauColorSchem.background,
1291
+ text = _usePanneauColorSchem.text;
1292
+ return /*#__PURE__*/React.createElement("div", {
1293
+ className: classNames({
1294
+ 'd-flex flex-column min-vh-100': fullscreen
1295
+ })
1296
+ }, /*#__PURE__*/React.createElement(MainNavbar, {
1297
+ className: classNames(['sticky-top', 'px-3'])
1298
+ }), /*#__PURE__*/React.createElement("div", {
1299
+ className: classNames((_classNames = {
1300
+ 'd-flex flex-column flex-grow-1': fullscreen
1301
+ }, _defineProperty(_classNames, "bg-".concat(background), background !== null), _defineProperty(_classNames, "text-".concat(text), text !== null), _classNames))
1302
+ }, /*#__PURE__*/React.createElement("div", {
1303
+ className: classNames({
1304
+ 'w-100 my-auto': fullscreen
1305
+ })
1306
+ }, children)));
1307
+ };
1308
+ GuestLayout.propTypes = propTypes$4;
1309
+ GuestLayout.defaultProps = defaultProps$4;
1310
+
1311
+ /* eslint-disable react/jsx-props-no-spreading */
1312
+ var propTypes$3 = {};
1313
+ var defaultProps$3 = {};
1314
+ var LoginPage = function LoginPage() {
1315
+ var route = useUrlGenerator();
1316
+ var onSuccess = useCallback(function () {
1317
+ window.location.href = route('home');
1318
+ }, [route]);
1319
+ return /*#__PURE__*/React.createElement(GuestLayout, {
1320
+ fullscreen: true
1321
+ }, /*#__PURE__*/React.createElement("div", {
1322
+ className: "container-sm py-4"
1323
+ }, /*#__PURE__*/React.createElement("div", {
1324
+ className: "row justify-content-center"
1325
+ }, /*#__PURE__*/React.createElement("div", {
1326
+ className: "col-12 col-sm-8 col-md-6"
1327
+ }, /*#__PURE__*/React.createElement("h1", {
1328
+ className: "mb-4"
1329
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
1330
+ id: "AeOZq+",
1331
+ defaultMessage: [{
1332
+ "type": 0,
1333
+ "value": "Login"
1334
+ }]
1335
+ })), /*#__PURE__*/React.createElement(LoginForm, {
1336
+ onSuccess: onSuccess
1337
+ })))));
1338
+ };
1339
+ LoginPage.propTypes = propTypes$3;
1340
+ LoginPage.defaultProps = defaultProps$3;
1341
+
1342
+ var messages = defineMessages({
1343
+ metaTitle401: {
1344
+ "id": "HOobY2",
1345
+ "defaultMessage": [{
1346
+ "type": 0,
1347
+ "value": "Error 401"
1348
+ }]
1349
+ },
1350
+ title401: {
1351
+ "id": "6nwWPR",
1352
+ "defaultMessage": [{
1353
+ "type": 0,
1354
+ "value": "Error 401"
1355
+ }]
1356
+ },
1357
+ description401: {
1358
+ "id": "82P2dS",
1359
+ "defaultMessage": [{
1360
+ "type": 0,
1361
+ "value": "You are not authorized to access this page."
1362
+ }]
1363
+ },
1364
+ metaTitle403: {
1365
+ "id": "+6cCPF",
1366
+ "defaultMessage": [{
1367
+ "type": 0,
1368
+ "value": "Error 403"
1369
+ }]
1370
+ },
1371
+ title403: {
1372
+ "id": "Pih2UO",
1373
+ "defaultMessage": [{
1374
+ "type": 0,
1375
+ "value": "Error 403"
1376
+ }]
1377
+ },
1378
+ description403: {
1379
+ "id": "8HFiMs",
1380
+ "defaultMessage": [{
1381
+ "type": 0,
1382
+ "value": "Access to this page is forbidden"
1383
+ }]
1384
+ },
1385
+ metaTitle404: {
1386
+ "id": "US/AMe",
1387
+ "defaultMessage": [{
1388
+ "type": 0,
1389
+ "value": "Error 404"
1390
+ }]
1391
+ },
1392
+ title404: {
1393
+ "id": "6Ie+vL",
1394
+ "defaultMessage": [{
1395
+ "type": 0,
1396
+ "value": "Error 404"
1397
+ }]
1398
+ },
1399
+ description404: {
1400
+ "id": "wKPI1y",
1401
+ "defaultMessage": [{
1402
+ "type": 0,
1403
+ "value": "This page doesn’t exist"
1404
+ }]
1405
+ },
1406
+ metaTitle500: {
1407
+ "id": "ejwBSw",
1408
+ "defaultMessage": [{
1409
+ "type": 0,
1410
+ "value": "Error 500"
1411
+ }]
1412
+ },
1413
+ title500: {
1414
+ "id": "owrRHV",
1415
+ "defaultMessage": [{
1416
+ "type": 0,
1417
+ "value": "Error 500"
1418
+ }]
1419
+ },
1420
+ description500: {
1421
+ "id": "yALN2p",
1422
+ "defaultMessage": [{
1423
+ "type": 0,
1424
+ "value": "There was an error"
1425
+ }]
1426
+ },
1427
+ gotoHome: {
1428
+ "id": "hezcGl",
1429
+ "defaultMessage": [{
1430
+ "type": 0,
1431
+ "value": "Go to home page"
1432
+ }]
1433
+ }
1434
+ });
1435
+ var propTypes$2 = {
1436
+ statusCode: PropTypes.statusCode
1437
+ };
1438
+ var defaultProps$2 = {
1439
+ statusCode: null
1440
+ };
1441
+ var ErrorPage = function ErrorPage(_ref) {
1442
+ var statusCode = _ref.statusCode;
1443
+ return /*#__PURE__*/React.createElement(GuestLayout, {
1444
+ fullscreen: true
1445
+ }, /*#__PURE__*/React.createElement("div", {
1446
+ className: "container-sm py-4"
1447
+ }, /*#__PURE__*/React.createElement("div", {
1448
+ className: "row justify-content-center"
1449
+ }, /*#__PURE__*/React.createElement("div", {
1450
+ className: "col-12 col-sm-8 col-md-6"
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)]))))));
1452
+ };
1453
+ ErrorPage.propTypes = propTypes$2;
1454
+ ErrorPage.defaultProps = defaultProps$2;
1455
+
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;
1462
+ var resourceId = resource.id,
1463
+ _resource$pages = resource.pages,
1464
+ resourcePages = _resource$pages === void 0 ? {} : _resource$pages,
1465
+ _resource$extraRoutes = resource.extraRoutes,
1466
+ extraRoutes = _resource$extraRoutes === void 0 ? [] : _resource$extraRoutes;
1467
+
1468
+ // Load custom pages from resource
1469
+ var _ref2 = pages || {},
1470
+ _ref2$index = _ref2.index,
1471
+ indexPage = _ref2$index === void 0 ? null : _ref2$index,
1472
+ _ref2$show = _ref2.show,
1473
+ showPage = _ref2$show === void 0 ? null : _ref2$show,
1474
+ _ref2$create = _ref2.create,
1475
+ createPage = _ref2$create === void 0 ? null : _ref2$create,
1476
+ _ref2$edit = _ref2.edit,
1477
+ editPage = _ref2$edit === void 0 ? null : _ref2$edit,
1478
+ _ref2$delete = _ref2["delete"],
1479
+ deletePage = _ref2$delete === void 0 ? null : _ref2$delete;
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, {
1497
+ path: route('resources.index', {
1498
+ resource: resourceId
1499
+ }),
1500
+ exact: true,
1501
+ element: /*#__PURE__*/React.createElement(ResourceIndexComponent, {
1502
+ resource: resource
1503
+ })
1504
+ }), /*#__PURE__*/React.createElement(Route, {
1505
+ path: route('resources.create', {
1506
+ resource: resourceId
1507
+ }),
1508
+ exact: true,
1509
+ element: /*#__PURE__*/React.createElement(ResourceCreateComponent, {
1510
+ resource: resource
1511
+ })
1512
+ }), /*#__PURE__*/React.createElement(Route, {
1513
+ path: route('resources.show', {
1514
+ resource: resourceId,
1515
+ id: ':id'
1516
+ }),
1517
+ exact: true,
1518
+ element: /*#__PURE__*/React.createElement(ResourceShowComponent, {
1519
+ resource: resource
1520
+ })
1521
+ }), /*#__PURE__*/React.createElement(Route, {
1522
+ path: route('resources.edit', {
1523
+ resource: resourceId,
1524
+ id: ':id'
1525
+ }),
1526
+ exact: true,
1527
+ element: /*#__PURE__*/React.createElement(ResourceEditComponent, {
1528
+ resource: resource
1529
+ })
1530
+ }), /*#__PURE__*/React.createElement(Route, {
1531
+ path: route('resources.delete', {
1532
+ resource: resourceId,
1533
+ id: ':id'
1534
+ }),
1535
+ exact: true,
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
+ })));
1555
+ };
1556
+
1557
+ var _excluded = ["home", "login", "account", "error", "index", "show", "create", "edit", "delete"],
1558
+ _excluded2 = ["path", "route", "component", "exact"];
1559
+ var propTypes$1 = {
1560
+ statusCode: PropTypes.statusCode
1561
+ };
1562
+ var defaultProps$1 = {
1563
+ statusCode: null
1564
+ };
1565
+ var PanneauRoutes = function PanneauRoutes(_ref) {
1566
+ var initialStatusCode = _ref.statusCode;
1567
+ var routes = useRoutes();
1568
+ var _useLocation = useLocation(),
1569
+ pathname = _useLocation.pathname;
1570
+ var _useState = useState({
1571
+ statusCode: initialStatusCode,
1572
+ pathname: pathname
1573
+ }),
1574
+ _useState2 = _slicedToArray(_useState, 2),
1575
+ _useState2$ = _useState2[0],
1576
+ statusCode = _useState2$.statusCode,
1577
+ lastPathname = _useState2$.pathname,
1578
+ setInitialRequest = _useState2[1];
1579
+ var user = useUser();
1580
+ var route = useUrlGenerator();
1581
+ var resources = usePanneauResources();
1582
+ var componentsManager = usePagesComponentsManager();
1583
+ useEffect(function () {
1584
+ if (pathname !== lastPathname) {
1585
+ setInitialRequest({
1586
+ pathname: pathname,
1587
+ statusCode: null
1588
+ });
1589
+ }
1590
+ }, [pathname, lastPathname]);
1591
+
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;
1597
+ var _ref2 = pages || {},
1598
+ _ref2$home = _ref2.home,
1599
+ homePage = _ref2$home === void 0 ? null : _ref2$home,
1600
+ _ref2$login = _ref2.login,
1601
+ loginPage = _ref2$login === void 0 ? null : _ref2$login,
1602
+ _ref2$account = _ref2.account,
1603
+ accountPage = _ref2$account === void 0 ? null : _ref2$account,
1604
+ _ref2$error = _ref2.error,
1605
+ errorPage = _ref2$error === void 0 ? null : _ref2$error;
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, {
1659
+ path: routes.home,
1660
+ exact: true,
1661
+ element: /*#__PURE__*/React.createElement(HomeComponent, null)
1662
+ }), resources.map(function (resource) {
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
+ }));
1672
+ }), /*#__PURE__*/React.createElement(Route, {
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;
1691
+ }), /*#__PURE__*/React.createElement(Route, {
1692
+ path: "*",
1693
+ element: /*#__PURE__*/React.createElement(ErrorComponent, null)
1694
+ }));
1695
+ };
1696
+ PanneauRoutes.propTypes = propTypes$1;
1697
+ PanneauRoutes.defaultProps = defaultProps$1;
1698
+
1699
+ var propTypes = {
1700
+ definition: PropTypes.panneauDefinition.isRequired,
1701
+ components: PropTypes$1.oneOfType([PropTypes$1.objectOf(PropTypes$1.elementType), PropTypes$1.objectOf(PropTypes$1.objectOf(PropTypes$1.elementType))]),
1702
+ user: PropTypes.user,
1703
+ memoryRouter: PropTypes$1.bool,
1704
+ baseUrl: PropTypes$1.string,
1705
+ uppy: PropTypes.uppy,
1706
+ statusCode: PropTypes.statusCode
1707
+ };
1708
+ var defaultProps = {
1709
+ components: null,
1710
+ user: null,
1711
+ memoryRouter: false,
1712
+ baseUrl: null,
1713
+ uppy: null,
1714
+ statusCode: null
1715
+ };
1716
+ var Container = function Container(_ref) {
1717
+ var definition = _ref.definition,
1718
+ components = _ref.components,
1719
+ user = _ref.user,
1720
+ memoryRouter = _ref.memoryRouter,
1721
+ baseUrl = _ref.baseUrl,
1722
+ uppy = _ref.uppy,
1723
+ statusCode = _ref.statusCode;
1724
+ var _definition$intl = definition.intl,
1725
+ _definition$intl2 = _definition$intl === void 0 ? {} : _definition$intl,
1726
+ _definition$intl2$loc = _definition$intl2.locale,
1727
+ locale = _definition$intl2$loc === void 0 ? 'en' : _definition$intl2$loc,
1728
+ _definition$intl2$loc2 = _definition$intl2.locales,
1729
+ locales = _definition$intl2$loc2 === void 0 ? [] : _definition$intl2$loc2,
1730
+ _definition$routes = definition.routes,
1731
+ routes = _definition$routes === void 0 ? {} : _definition$routes,
1732
+ _definition$settings = definition.settings,
1733
+ _definition$settings2 = _definition$settings === void 0 ? {} : _definition$settings,
1734
+ _definition$settings3 = _definition$settings2.memoryRouter,
1735
+ usesMemoryRouter = _definition$settings3 === void 0 ? false : _definition$settings3;
1736
+ var Router = memoryRouter || usesMemoryRouter ? MemoryRouter : BrowserRouter;
1737
+ var extraMessages = useMemo(function () {
1738
+ var _definition$intl3 = definition.intl,
1739
+ _definition$intl4 = _definition$intl3 === void 0 ? {} : _definition$intl3,
1740
+ _definition$intl4$mes = _definition$intl4.messages,
1741
+ messages = _definition$intl4$mes === void 0 ? null : _definition$intl4$mes,
1742
+ _definition$resources = definition.resources,
1743
+ resources = _definition$resources === void 0 ? [] : _definition$resources;
1744
+ return _objectSpread(_objectSpread({}, messages), resources.reduce(function (allMessages, _ref2) {
1745
+ var id = _ref2.id,
1746
+ _ref2$intl = _ref2.intl,
1747
+ _ref2$intl2 = _ref2$intl === void 0 ? {} : _ref2$intl,
1748
+ _ref2$intl2$messages = _ref2$intl2.messages,
1749
+ resourceMessages = _ref2$intl2$messages === void 0 ? {} : _ref2$intl2$messages;
1750
+ return _objectSpread(_objectSpread({}, allMessages), Object.keys(resourceMessages).reduce(function (allResourceMessages, key) {
1751
+ return _objectSpread(_objectSpread({}, allResourceMessages), {}, _defineProperty({}, "resources.".concat(id, ".").concat(key), resourceMessages[key]));
1752
+ }, {}));
1753
+ }, {}));
1754
+ }, [definition]);
1755
+ var onUnauthorized = useCallback(function () {
1756
+ window.location.href = baseUrl;
1757
+ }, [baseUrl]);
1758
+ var onLogout = useCallback(function () {
1759
+ window.location.reload();
1760
+ }, [baseUrl]);
1761
+ return /*#__PURE__*/React.createElement(Router, null, /*#__PURE__*/React.createElement(IntlProvider, {
1762
+ locale: locale,
1763
+ locales: locales,
1764
+ extraMessages: extraMessages
1765
+ }, /*#__PURE__*/React.createElement(PanneauProvider, {
1766
+ definition: definition
1767
+ }, /*#__PURE__*/React.createElement(UppyProvider, uppy, /*#__PURE__*/React.createElement(RoutesProvider, {
1768
+ routes: routes
1769
+ }, /*#__PURE__*/React.createElement(FieldsProvider, null, /*#__PURE__*/React.createElement(FormsProvider, null, /*#__PURE__*/React.createElement(ListsProvider, null, /*#__PURE__*/React.createElement(DisplaysProvider, null, /*#__PURE__*/React.createElement(FiltersProvider, null, /*#__PURE__*/React.createElement(ApiProvider, {
1770
+ baseUrl: baseUrl,
1771
+ onUnauthorized: onUnauthorized
1772
+ }, /*#__PURE__*/React.createElement(AuthProvider, {
1773
+ user: user,
1774
+ onLogout: onLogout
1775
+ }, /*#__PURE__*/React.createElement(ComponentsProvider, {
1776
+ components: components
1777
+ }, /*#__PURE__*/React.createElement(PanneauRoutes, {
1778
+ statusCode: statusCode
1779
+ }))))))))))))));
1780
+ };
1781
+ Container.propTypes = propTypes;
1782
+ Container.defaultProps = defaultProps;
1783
+
1784
+ export { GuestLayout, MainLayout, PageHeader, ResourceFilters, ResourceForm, ResourceItemsList, Container as default };