@panneau/app 1.0.0-alpha.25 → 1.0.0-alpha.250

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