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