@panneau/app 1.0.1-alpha.0 → 1.0.3-alpha.0

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