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