@panneau/app 1.0.0-alpha.26 → 1.0.0-alpha.262

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