@panneau/app 1.0.0-alpha.18 → 1.0.0-alpha.180

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