@panneau/app 1.0.0-alpha.99 → 1.0.3-alpha.0

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