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