@panneau/app 2.0.0 → 2.0.1

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