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

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