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