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

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