@panneau/app 1.0.0-y.0 → 1.0.3-alpha.1

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