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

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