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