@guillotinaweb/react-gmi 0.29.1 → 0.29.2-alpha.3

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.
Files changed (70) hide show
  1. package/README.md +2 -1
  2. package/dist/actions/copy_item.d.ts +2 -2
  3. package/dist/actions/move_item.d.ts +2 -2
  4. package/dist/actions/remove_item.d.ts +2 -2
  5. package/dist/components/behaviors/iattachment.d.ts +4 -2
  6. package/dist/components/behaviors/imultiimageorderedattachment.d.ts +3 -1
  7. package/dist/components/behaviors/iworkflow.d.ts +1 -1
  8. package/dist/components/context_toolbar.d.ts +1 -1
  9. package/dist/components/fields/editComponent.d.ts +5 -4
  10. package/dist/components/fields/editableField.d.ts +4 -2
  11. package/dist/components/fields/renderField.d.ts +8 -5
  12. package/dist/components/flash.d.ts +1 -1
  13. package/dist/components/input/email.d.ts +2 -2
  14. package/dist/components/input/form_builder.d.ts +2 -2
  15. package/dist/components/input/input.d.ts +1 -1
  16. package/dist/components/input/search_input.d.ts +1 -1
  17. package/dist/components/input/search_input_list.d.ts +2 -2
  18. package/dist/components/input/select_vocabulary.d.ts +2 -2
  19. package/dist/components/input/upload.d.ts +1 -2
  20. package/dist/components/pagination.d.ts +1 -1
  21. package/dist/components/panel/permissions.d.ts +1 -1
  22. package/dist/components/panel/permissions_prinperm.d.ts +2 -2
  23. package/dist/components/panel/permissions_prinrole.d.ts +1 -1
  24. package/dist/components/panel/permissions_roleperm.d.ts +1 -1
  25. package/dist/components/path.d.ts +1 -1
  26. package/dist/components/properties_view.d.ts +2 -2
  27. package/dist/components/search_labels.d.ts +1 -1
  28. package/dist/components/search_options_labels.d.ts +1 -1
  29. package/dist/components/search_vocabulary_labels.d.ts +2 -2
  30. package/dist/components/selected_items_actions.d.ts +14 -0
  31. package/dist/components/tabs.d.ts +4 -2
  32. package/dist/components/widgets/tags.d.ts +4 -1
  33. package/dist/contexts/index.d.ts +21 -19
  34. package/dist/forms/required_fields.d.ts +2 -3
  35. package/dist/forms/users.d.ts +1 -1
  36. package/dist/hooks/useClickAway.d.ts +2 -1
  37. package/dist/hooks/useConfig.d.ts +4 -2
  38. package/dist/hooks/useCrudContext.d.ts +11 -10
  39. package/dist/hooks/useInput.d.ts +4 -3
  40. package/dist/hooks/useRegistry.d.ts +29 -29
  41. package/dist/hooks/useSetState.d.ts +6 -1
  42. package/dist/hooks/useVocabulary.d.ts +1 -1
  43. package/dist/lib/auth.d.ts +14 -19
  44. package/dist/lib/client.d.ts +49 -36
  45. package/dist/lib/helpers.d.ts +10 -18
  46. package/dist/lib/processResponse.d.ts +9 -0
  47. package/dist/lib/rest.d.ts +9 -16
  48. package/dist/lib/utils.d.ts +3 -2
  49. package/dist/lib/validators.d.ts +1 -1
  50. package/dist/locales/generic_messages.d.ts +248 -370
  51. package/dist/models/index.d.ts +5 -5
  52. package/dist/models/sharing.d.ts +5 -5
  53. package/dist/react-gmi.esm.js +1179 -900
  54. package/dist/react-gmi.esm.js.map +1 -1
  55. package/dist/react-gmi.js +1178 -900
  56. package/dist/react-gmi.js.map +1 -1
  57. package/dist/react-gmi.modern.js +1161 -856
  58. package/dist/react-gmi.modern.js.map +1 -1
  59. package/dist/react-gmi.umd.js +1178 -900
  60. package/dist/react-gmi.umd.js.map +1 -1
  61. package/dist/reducers/guillotina.d.ts +22 -8
  62. package/dist/types/global.d.ts +9 -0
  63. package/dist/types/guillotina.d.ts +153 -19
  64. package/dist/views/folder.d.ts +1 -1
  65. package/dist/views/groups.d.ts +1 -1
  66. package/dist/views/item.d.ts +1 -1
  67. package/dist/views/users.d.ts +1 -1
  68. package/package.json +3 -2
  69. package/dist/lib/search.test.d.ts +0 -1
  70. package/dist/setupTests.d.ts +0 -1
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import React, { createContext, useContext, useState, useCallback, useRef, useEffect, forwardRef, Children, isValidElement, cloneElement, Fragment as Fragment$1, Component, useReducer } from 'react';
2
+ import React, { createContext, useContext, useState, useCallback, useRef, useEffect, forwardRef, Children, isValidElement, cloneElement, Fragment as Fragment$1, useMemo, Component, useReducer } from 'react';
3
3
  import usePortal from 'react-useportal';
4
4
  import { defineMessages, useIntl, injectIntl, IntlProvider } from 'react-intl';
5
5
  import PropTypes from 'prop-types';
@@ -104,6 +104,97 @@ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
104
104
  return it.next.bind(it);
105
105
  }
106
106
 
107
+ var initialState = {
108
+ path: '',
109
+ loading: false,
110
+ context: undefined,
111
+ flash: {
112
+ message: undefined,
113
+ type: undefined
114
+ },
115
+ action: {
116
+ action: undefined,
117
+ params: undefined
118
+ },
119
+ permissions: [],
120
+ errorStatus: undefined,
121
+ registry: {},
122
+ refresh: undefined
123
+ };
124
+ var GuillotinaReducerActionTypes;
125
+
126
+ (function (GuillotinaReducerActionTypes) {
127
+ GuillotinaReducerActionTypes["SET_PATH"] = "SET_PATH";
128
+ GuillotinaReducerActionTypes["SET_CONTEXT"] = "SET_CONTEXT";
129
+ GuillotinaReducerActionTypes["SET_ERROR"] = "SET_ERROR";
130
+ GuillotinaReducerActionTypes["SET_FLASH"] = "SET_FLASH";
131
+ GuillotinaReducerActionTypes["CLEAR_FLASH"] = "CLEAR_FLASH";
132
+ GuillotinaReducerActionTypes["SET_ACTION"] = "SET_ACTION";
133
+ GuillotinaReducerActionTypes["CLEAR_ACTION"] = "CLEAR_ACTION";
134
+ GuillotinaReducerActionTypes["REFRESH"] = "REFRESH";
135
+ GuillotinaReducerActionTypes["APPLY"] = "APPLY";
136
+ })(GuillotinaReducerActionTypes || (GuillotinaReducerActionTypes = {}));
137
+
138
+ function guillotinaReducer(state, action) {
139
+ switch (action.type) {
140
+ case GuillotinaReducerActionTypes.SET_PATH:
141
+ return _extends({}, state, {
142
+ path: action.payload.path,
143
+ loading: true
144
+ });
145
+
146
+ case GuillotinaReducerActionTypes.SET_CONTEXT:
147
+ return _extends({}, state, action.payload, {
148
+ errorStatus: undefined,
149
+ loading: false
150
+ });
151
+
152
+ case GuillotinaReducerActionTypes.SET_ERROR:
153
+ return _extends({}, state, {
154
+ errorStatus: action.payload.errorStatus,
155
+ loading: false
156
+ });
157
+
158
+ case GuillotinaReducerActionTypes.SET_FLASH:
159
+ return _extends({}, state, action.payload);
160
+
161
+ case GuillotinaReducerActionTypes.CLEAR_FLASH:
162
+ return _extends({}, state, {
163
+ flash: {
164
+ message: undefined,
165
+ type: undefined
166
+ }
167
+ });
168
+
169
+ case GuillotinaReducerActionTypes.SET_ACTION:
170
+ return _extends({}, state, {
171
+ action: action.payload
172
+ });
173
+
174
+ case GuillotinaReducerActionTypes.CLEAR_ACTION:
175
+ return _extends({}, state, {
176
+ action: {
177
+ action: undefined,
178
+ params: undefined
179
+ }
180
+ });
181
+
182
+ case GuillotinaReducerActionTypes.REFRESH:
183
+ return _extends({}, state, {
184
+ refresh: Date.now(),
185
+ loading: !action.payload.transparent
186
+ });
187
+
188
+ case GuillotinaReducerActionTypes.APPLY:
189
+ return _extends({}, state, {
190
+ context: _extends({}, state.context, action.payload.context)
191
+ });
192
+
193
+ default:
194
+ return state;
195
+ }
196
+ }
197
+
107
198
  var AuthContext = createContext({});
108
199
  var ClientContext = createContext(null);
109
200
  var Traversal = /*#__PURE__*/function () {
@@ -134,7 +225,7 @@ var Traversal = /*#__PURE__*/function () {
134
225
  transparent = _ref2$transparent === void 0 ? false : _ref2$transparent;
135
226
 
136
227
  this.dispatch({
137
- type: 'REFRESH',
228
+ type: GuillotinaReducerActionTypes.REFRESH,
138
229
  payload: {
139
230
  transparent: transparent
140
231
  }
@@ -142,15 +233,18 @@ var Traversal = /*#__PURE__*/function () {
142
233
  };
143
234
 
144
235
  _proto.apply = function apply(data) {
236
+ // apply a optimistic update to context
145
237
  this.dispatch({
146
- type: 'APPLY',
147
- payload: data
238
+ type: GuillotinaReducerActionTypes.APPLY,
239
+ payload: {
240
+ context: data
241
+ }
148
242
  });
149
243
  };
150
244
 
151
245
  _proto.flash = function flash(message, type) {
152
246
  this.dispatch({
153
- type: 'SET_FLASH',
247
+ type: GuillotinaReducerActionTypes.SET_FLASH,
154
248
  payload: {
155
249
  flash: {
156
250
  message: message,
@@ -167,7 +261,8 @@ var Traversal = /*#__PURE__*/function () {
167
261
 
168
262
  _proto.clearFlash = function clearFlash() {
169
263
  this.dispatch({
170
- type: 'CLEAR_FLASH'
264
+ type: GuillotinaReducerActionTypes.CLEAR_FLASH,
265
+ payload: {}
171
266
  });
172
267
  };
173
268
 
@@ -177,7 +272,7 @@ var Traversal = /*#__PURE__*/function () {
177
272
  }
178
273
 
179
274
  this.dispatch({
180
- type: 'SET_ACTION',
275
+ type: GuillotinaReducerActionTypes.SET_ACTION,
181
276
  payload: {
182
277
  action: action,
183
278
  params: params
@@ -187,7 +282,8 @@ var Traversal = /*#__PURE__*/function () {
187
282
 
188
283
  _proto.cancelAction = function cancelAction() {
189
284
  this.dispatch({
190
- type: 'CLEAR_ACTION'
285
+ type: GuillotinaReducerActionTypes.CLEAR_ACTION,
286
+ payload: {}
191
287
  });
192
288
  };
193
289
 
@@ -224,6 +320,10 @@ var Traversal = /*#__PURE__*/function () {
224
320
  }, {
225
321
  key: "context",
226
322
  get: function get() {
323
+ if (this.state.context === undefined) {
324
+ throw new Error('Context is not loaded');
325
+ }
326
+
227
327
  return this.state.context;
228
328
  }
229
329
  }, {
@@ -246,7 +346,13 @@ function TraversalProvider(_ref3) {
246
346
  });
247
347
  }
248
348
  function useTraversal() {
249
- return useContext(TraversalContext);
349
+ var traversal = useContext(TraversalContext);
350
+
351
+ if (!traversal) {
352
+ throw new Error('useTraversal must be used within a TraversalProvider');
353
+ }
354
+
355
+ return traversal;
250
356
  }
251
357
  function ClientProvider(_ref4) {
252
358
  var children = _ref4.children,
@@ -257,7 +363,13 @@ function ClientProvider(_ref4) {
257
363
  });
258
364
  }
259
365
  function useGuillotinaClient() {
260
- return useContext(ClientContext);
366
+ var client = useContext(ClientContext);
367
+
368
+ if (!client) {
369
+ throw new Error('useGuillotinaClient must be used within a ClientProvider');
370
+ }
371
+
372
+ return client;
261
373
  }
262
374
 
263
375
  var genericMessages = defineMessages({
@@ -764,8 +876,10 @@ function base64ToArrayBuffer(base64) {
764
876
  return bytes;
765
877
  }
766
878
  function stringToSlug(str) {
767
- str = str.replace(/^\s+|\s+$/g, '');
768
- str = str.toLowerCase();
879
+ str = str.replace(/^\s+|\s+$/g, ''); // trim
880
+
881
+ str = str.toLowerCase(); // remove accents, swap ñ for n, etc
882
+
769
883
  var from = 'àáäâèéëêìíïîòóöôùúüûñç·/_,:;';
770
884
  var to = 'aaaaeeeeiiiioooouuuunc------';
771
885
 
@@ -773,13 +887,16 @@ function stringToSlug(str) {
773
887
  str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
774
888
  }
775
889
 
776
- str = str.replace(/[^a-z0-9 -]/g, '').replace(/\s+/g, '-').replace(/-+/g, '-');
890
+ str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
891
+ .replace(/\s+/g, '-') // collapse whitespace and replace by -
892
+ .replace(/-+/g, '-'); // collapse dashes
893
+
777
894
  return str;
778
895
  }
779
896
  function sleep(ms) {
780
897
  return new Promise(function (resolve) {
781
898
  setTimeout(function () {
782
- resolve(null);
899
+ resolve();
783
900
  }, ms);
784
901
  });
785
902
  }
@@ -808,8 +925,6 @@ var getActionsObject = function getActionsObject(intl, multiple) {
808
925
  };
809
926
 
810
927
  var Button = function Button(_ref) {
811
- var _ref2;
812
-
813
928
  var children = _ref.children,
814
929
  _ref$className = _ref.className,
815
930
  className = _ref$className === void 0 ? 'is-primary' : _ref$className,
@@ -821,9 +936,7 @@ var Button = function Button(_ref) {
821
936
  _ref$disabled = _ref.disabled,
822
937
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
823
938
  dataTest = _ref.dataTest;
824
-
825
- var css = (_ref2 = []).concat.apply(_ref2, ['button'].concat(className.split(' ')));
826
-
939
+ var css = [].concat(className.split(' '), ['button']);
827
940
  if (loading) css = css.concat('is-loading');
828
941
  return jsx("p", {
829
942
  className: "control",
@@ -838,6 +951,50 @@ var Button = function Button(_ref) {
838
951
  });
839
952
  };
840
953
 
954
+ var formatDate = function formatDate(str) {
955
+ var d = new Date(str);
956
+ var minutes = d.getMinutes() < 10 ? "0" + d.getMinutes() : d.getMinutes();
957
+ return d.getDate() + "/" + (d.getMonth() + 1) + "/" + d.getFullYear() + " " + d.getHours() + ":" + minutes;
958
+ };
959
+ var get = function get(obj, path, defValue) {
960
+ var _pathArray$reduce;
961
+
962
+ // If path is not defined or it has false value
963
+ if (!path) return defValue; // Check if path is string or array. Regex : ensure that we do not have '.' and brackets.
964
+ // Regex explained: https://regexr.com/58j0k
965
+
966
+ var pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g); // Find value if exist return otherwise return undefined value;
967
+
968
+ if (pathArray === null) return defValue;
969
+ return (_pathArray$reduce = pathArray.reduce(function (prevObj, key) {
970
+ return prevObj && prevObj[key];
971
+ }, obj)) != null ? _pathArray$reduce : defValue;
972
+ };
973
+ function getNewId(id) {
974
+ if (id === void 0) {
975
+ id = '';
976
+ }
977
+
978
+ var suffix = '-copy-';
979
+ var rgx = new RegExp("($|" + suffix + "\\d*)");
980
+ return stringToSlug(id).replace(rgx, function (r) {
981
+ var num = parseInt(r.replace(suffix, '') || '0');
982
+ return "" + suffix + (num + 1);
983
+ });
984
+ }
985
+ function debounce(callback, wait) {
986
+ var timer;
987
+ return function () {
988
+ var _arguments = arguments;
989
+ clearTimeout(timer);
990
+ return new Promise(function (resolve) {
991
+ timer = setTimeout(function () {
992
+ return resolve(callback.apply(void 0, [].slice.call(_arguments)));
993
+ }, wait);
994
+ });
995
+ };
996
+ }
997
+
841
998
  function Modal(props) {
842
999
  var isActive = props.isActive,
843
1000
  setActive = props.setActive,
@@ -917,7 +1074,8 @@ function Confirm(_ref) {
917
1074
  })]
918
1075
  })]
919
1076
  });
920
- }
1077
+ } // @todo Improve it... Replacing the inputText to a tree
1078
+
921
1079
  function PathTree(_ref2) {
922
1080
  var title = _ref2.title,
923
1081
  defaultPath = _ref2.defaultPath,
@@ -933,7 +1091,7 @@ function PathTree(_ref2) {
933
1091
  }), jsxs("form", {
934
1092
  onSubmit: function onSubmit(e) {
935
1093
  e.preventDefault();
936
- onConfirm(e.target[0].value, e.target);
1094
+ onConfirm(get(e, 'target.0.value', ''), e.target);
937
1095
  },
938
1096
  children: [jsx("small", {
939
1097
  style: {
@@ -965,51 +1123,6 @@ function PathTree(_ref2) {
965
1123
  });
966
1124
  }
967
1125
 
968
- function useSetState(initialState) {
969
- var _useState = useState(initialState),
970
- state = _useState[0],
971
- set = _useState[1];
972
-
973
- var setState = useCallback(function (patch) {
974
- set(function (prevState) {
975
- return Object.assign({}, prevState, patch instanceof Function ? patch(prevState) : patch);
976
- });
977
- }, [set]);
978
- return [state, setState];
979
- }
980
-
981
- function _catch(body, recover) {
982
- try {
983
- var result = body();
984
- } catch (e) {
985
- return recover(e);
986
- }
987
-
988
- if (result && result.then) {
989
- return result.then(void 0, recover);
990
- }
991
-
992
- return result;
993
- }
994
-
995
- var initial = {
996
- loading: undefined,
997
- isError: false,
998
- errorMessage: undefined,
999
- result: undefined,
1000
- response: undefined
1001
- };
1002
-
1003
- var getErrorMessage = function getErrorMessage(dataError, defaultValue) {
1004
- if (dataError && dataError.details) {
1005
- return dataError.details;
1006
- } else if (dataError && dataError.reason) {
1007
- return dataError.reason;
1008
- }
1009
-
1010
- return defaultValue;
1011
- };
1012
-
1013
1126
  var processResponse = function processResponse(res, ready_body) {
1014
1127
  if (ready_body === void 0) {
1015
1128
  ready_body = true;
@@ -1029,7 +1142,7 @@ var processResponse = function processResponse(res, ready_body) {
1029
1142
  return {
1030
1143
  isError: true,
1031
1144
  loading: false,
1032
- errorMessage: getErrorMessage(_res$json2, res.status),
1145
+ errorMessage: getErrorMessage(_res$json2, res.status).toString(),
1033
1146
  response: res
1034
1147
  };
1035
1148
  });
@@ -1038,10 +1151,66 @@ var processResponse = function processResponse(res, ready_body) {
1038
1151
  }
1039
1152
  };
1040
1153
 
1041
- var patch = function patch(setState, Ctx) {
1154
+ var getErrorMessage = function getErrorMessage(dataError, defaultValue) {
1155
+ if (dataError && dataError.details) {
1156
+ return dataError.details;
1157
+ } else if (dataError && dataError.reason) {
1158
+ return dataError.reason;
1159
+ }
1160
+
1161
+ return defaultValue;
1162
+ };
1163
+
1164
+ /**
1165
+ * Do setState like react class component.
1166
+ */
1167
+
1168
+ function useSetState(initialState) {
1169
+ var _useState = useState(initialState),
1170
+ state = _useState[0],
1171
+ setState = _useState[1]; // Function which accepts a partial state to merge
1172
+
1173
+
1174
+ var setCustomState = useCallback(function (newPartialState) {
1175
+ try {
1176
+ setState(function (prevState) {
1177
+ return _extends({}, prevState, newPartialState);
1178
+ });
1179
+ } catch (error) {
1180
+ // eslint-disable-next-line no-console
1181
+ console.error(error);
1182
+ }
1183
+ }, []); // Return
1184
+
1185
+ return [state, setCustomState];
1186
+ } // **** Export Default **** //
1187
+
1188
+ function _catch(body, recover) {
1189
+ try {
1190
+ var result = body();
1191
+ } catch (e) {
1192
+ return recover(e);
1193
+ }
1194
+
1195
+ if (result && result.then) {
1196
+ return result.then(void 0, recover);
1197
+ }
1198
+
1199
+ return result;
1200
+ }
1201
+
1202
+ var initial = {
1203
+ loading: undefined,
1204
+ isError: false,
1205
+ errorMessage: undefined,
1206
+ result: undefined,
1207
+ response: undefined
1208
+ };
1209
+
1210
+ function patch(setState, Ctx) {
1042
1211
  return function (data, endpoint, body) {
1043
- if (endpoint === void 0) {
1044
- endpoint = undefined;
1212
+ if (data === void 0) {
1213
+ data = {};
1045
1214
  }
1046
1215
 
1047
1216
  if (body === void 0) {
@@ -1049,7 +1218,7 @@ var patch = function patch(setState, Ctx) {
1049
1218
  }
1050
1219
 
1051
1220
  try {
1052
- function _temp5() {
1221
+ function _temp3() {
1053
1222
  setState(newState);
1054
1223
  return newState;
1055
1224
  }
@@ -1059,7 +1228,7 @@ var patch = function patch(setState, Ctx) {
1059
1228
  });
1060
1229
  var newState = {};
1061
1230
 
1062
- var _temp6 = _catch(function () {
1231
+ var _temp4 = _catch(function () {
1063
1232
  var path = endpoint ? "" + Ctx.path + endpoint : Ctx.path;
1064
1233
  return Promise.resolve(Ctx.client.patch(path, data)).then(function (res) {
1065
1234
  return Promise.resolve(processResponse(res, body)).then(function (_processResponse) {
@@ -1074,29 +1243,25 @@ var patch = function patch(setState, Ctx) {
1074
1243
  };
1075
1244
  });
1076
1245
 
1077
- return Promise.resolve(_temp6 && _temp6.then ? _temp6.then(_temp5) : _temp5(_temp6));
1246
+ return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp3) : _temp3(_temp4));
1078
1247
  } catch (e) {
1079
1248
  return Promise.reject(e);
1080
1249
  }
1081
1250
  };
1082
- };
1251
+ }
1083
1252
 
1084
- var del = function del(setState, Ctx) {
1253
+ function del(setState, Ctx) {
1085
1254
  return function (data, endpoint, body) {
1086
1255
  if (data === void 0) {
1087
1256
  data = {};
1088
1257
  }
1089
1258
 
1090
- if (endpoint === void 0) {
1091
- endpoint = undefined;
1092
- }
1093
-
1094
1259
  if (body === void 0) {
1095
1260
  body = false;
1096
1261
  }
1097
1262
 
1098
1263
  try {
1099
- function _temp9() {
1264
+ function _temp7() {
1100
1265
  setState(newState);
1101
1266
  return newState;
1102
1267
  }
@@ -1106,7 +1271,7 @@ var del = function del(setState, Ctx) {
1106
1271
  });
1107
1272
  var newState = {};
1108
1273
 
1109
- var _temp10 = _catch(function () {
1274
+ var _temp8 = _catch(function () {
1110
1275
  var path = endpoint ? "" + Ctx.path + endpoint : Ctx.path;
1111
1276
  return Promise.resolve(Ctx.client.delete(path, data)).then(function (res) {
1112
1277
  return Promise.resolve(processResponse(res, body)).then(function (_processResponse2) {
@@ -1121,17 +1286,17 @@ var del = function del(setState, Ctx) {
1121
1286
  };
1122
1287
  });
1123
1288
 
1124
- return Promise.resolve(_temp10 && _temp10.then ? _temp10.then(_temp9) : _temp9(_temp10));
1289
+ return Promise.resolve(_temp8 && _temp8.then ? _temp8.then(_temp7) : _temp7(_temp8));
1125
1290
  } catch (e) {
1126
1291
  return Promise.reject(e);
1127
1292
  }
1128
1293
  };
1129
- };
1294
+ }
1130
1295
 
1131
- var post = function post(setState, Ctx) {
1296
+ function post(setState, Ctx) {
1132
1297
  return function (data, endpoint, body) {
1133
- if (endpoint === void 0) {
1134
- endpoint = undefined;
1298
+ if (data === void 0) {
1299
+ data = {};
1135
1300
  }
1136
1301
 
1137
1302
  if (body === void 0) {
@@ -1139,7 +1304,7 @@ var post = function post(setState, Ctx) {
1139
1304
  }
1140
1305
 
1141
1306
  try {
1142
- function _temp13() {
1307
+ function _temp11() {
1143
1308
  setState(newState);
1144
1309
  return newState;
1145
1310
  }
@@ -1149,7 +1314,7 @@ var post = function post(setState, Ctx) {
1149
1314
  });
1150
1315
  var newState = {};
1151
1316
 
1152
- var _temp14 = _catch(function () {
1317
+ var _temp12 = _catch(function () {
1153
1318
  var path = endpoint ? "" + Ctx.path + endpoint : Ctx.path;
1154
1319
  return Promise.resolve(Ctx.client.post(path, data)).then(function (res) {
1155
1320
  return Promise.resolve(processResponse(res, body)).then(function (_processResponse3) {
@@ -1164,21 +1329,17 @@ var post = function post(setState, Ctx) {
1164
1329
  };
1165
1330
  });
1166
1331
 
1167
- return Promise.resolve(_temp14 && _temp14.then ? _temp14.then(_temp13) : _temp13(_temp14));
1332
+ return Promise.resolve(_temp12 && _temp12.then ? _temp12.then(_temp11) : _temp11(_temp12));
1168
1333
  } catch (e) {
1169
1334
  return Promise.reject(e);
1170
1335
  }
1171
1336
  };
1172
- };
1337
+ }
1173
1338
 
1174
- var get = function get(setState, Ctx) {
1339
+ function get$1(setState, Ctx) {
1175
1340
  return function (endpoint) {
1176
- if (endpoint === void 0) {
1177
- endpoint = undefined;
1178
- }
1179
-
1180
1341
  try {
1181
- function _temp17() {
1342
+ function _temp15() {
1182
1343
  setState(newState);
1183
1344
  return newState;
1184
1345
  }
@@ -1188,7 +1349,7 @@ var get = function get(setState, Ctx) {
1188
1349
  });
1189
1350
  var newState = {};
1190
1351
 
1191
- var _temp18 = _catch(function () {
1352
+ var _temp16 = _catch(function () {
1192
1353
  var path = endpoint ? "" + Ctx.path + endpoint : Ctx.path;
1193
1354
  return Promise.resolve(Ctx.client.get(path)).then(function (res) {
1194
1355
  return Promise.resolve(processResponse(res, true)).then(function (_processResponse4) {
@@ -1203,12 +1364,16 @@ var get = function get(setState, Ctx) {
1203
1364
  };
1204
1365
  });
1205
1366
 
1206
- return Promise.resolve(_temp18 && _temp18.then ? _temp18.then(_temp17) : _temp17(_temp18));
1367
+ return Promise.resolve(_temp16 && _temp16.then ? _temp16.then(_temp15) : _temp15(_temp16));
1207
1368
  } catch (e) {
1208
1369
  return Promise.reject(e);
1209
1370
  }
1210
1371
  };
1211
- };
1372
+ } // const get = (
1373
+ // setState: (value: Partial<State>) => void,
1374
+ // Ctx: Traversal
1375
+ // ) =>
1376
+
1212
1377
 
1213
1378
  function useCrudContext() {
1214
1379
  var Ctx = useTraversal();
@@ -1222,7 +1387,7 @@ function useCrudContext() {
1222
1387
  patch: patch(setState, Ctx),
1223
1388
  del: del(setState, Ctx),
1224
1389
  post: post(setState, Ctx),
1225
- get: get(setState, Ctx)
1390
+ get: get$1(setState, Ctx)
1226
1391
  });
1227
1392
  }
1228
1393
 
@@ -1270,9 +1435,6 @@ function AddItem(props) {
1270
1435
  children: jsx(Form, {
1271
1436
  loading: loading,
1272
1437
  onSubmit: doSubmit,
1273
- onError: function onError(err) {
1274
- return console.log(err);
1275
- },
1276
1438
  actionName: 'Add ' + type,
1277
1439
  title: 'Add ' + type,
1278
1440
  type: type,
@@ -1282,31 +1444,52 @@ function AddItem(props) {
1282
1444
  }
1283
1445
 
1284
1446
  var Permissions = ['guillotina.AddContent', 'guillotina.ModifyContent', 'guillotina.ViewContent', 'guillotina.DeleteContent', 'guillotina.AccessContent', 'guillotina.SeePermissions', 'guillotina.ChangePermissions', 'guillotina.MoveContent', 'guillotina.DuplicateContent', 'guillotina.ReadConfiguration', 'guillotina.RegisterConfigurations', 'guillotina.WriteConfiguration', 'guillotina.ManageAddons', 'guillotina.swagger.View'];
1285
- var Config = {
1447
+ var defaultConfig = {
1286
1448
  DisabledTypes: ['UserManager', 'GroupManager'],
1287
1449
  PageSize: 10,
1288
1450
  DelayActions: 200,
1289
1451
  Permissions: Permissions,
1290
1452
  SearchEngine: 'PostreSQL',
1453
+ // Elasticsearch
1291
1454
  fieldHaveDeleteButton: function fieldHaveDeleteButton(schema) {
1292
1455
  return (schema == null ? void 0 : schema.widget) === 'file' || (schema == null ? void 0 : schema.widget) === 'select' || (schema == null ? void 0 : schema.type) === 'array';
1293
1456
  }
1294
1457
  };
1295
- var calculated = Object.assign({}, Config);
1296
-
1297
- var addConfig = function addConfig(additional, original) {
1298
- var rest = Object.assign({}, original);
1299
- Object.keys(additional).forEach(function (item) {
1300
- if (typeof Config[item] === 'object' && Array.isArray(Config[item])) {
1301
- rest[item] = [].concat(Config[item], additional[item]);
1302
- } else if (typeof Config[item] === 'object') {
1303
- rest[item] = Object.assign({}, Config[item], additional[item]);
1458
+ var calculated = Object.assign({}, defaultConfig);
1459
+
1460
+ function addConfig(updates, currentConfig) {
1461
+ var updatedConfig = _extends({}, currentConfig);
1462
+
1463
+ Object.entries(updates).forEach(function (_ref) {
1464
+ var key = _ref[0],
1465
+ value = _ref[1];
1466
+ var currentKey = key;
1467
+ var currentValue = currentConfig[currentKey];
1468
+
1469
+ if (Array.isArray(value) && Array.isArray(currentValue)) {
1470
+ var _extends2;
1471
+
1472
+ // Correctly type the array concatenation
1473
+ updatedConfig = _extends({}, updatedConfig, (_extends2 = {}, _extends2[currentKey] = [].concat(currentValue, value), _extends2));
1474
+ } else if (isPlainObject(value) && isPlainObject(currentValue)) {
1475
+ var _extends3;
1476
+
1477
+ // Correctly type the object merging
1478
+ updatedConfig = _extends({}, updatedConfig, (_extends3 = {}, _extends3[currentKey] = _extends({}, currentValue, value), _extends3));
1304
1479
  } else {
1305
- rest[item] = additional[item];
1480
+ var _extends4;
1481
+
1482
+ // Directly assign all other types
1483
+ updatedConfig = _extends({}, updatedConfig, (_extends4 = {}, _extends4[currentKey] = value, _extends4));
1306
1484
  }
1307
1485
  });
1308
- return rest;
1309
- };
1486
+ return updatedConfig;
1487
+ } // Helper function to check if a value is a plain object (and not a React node, etc.)
1488
+
1489
+
1490
+ function isPlainObject(value) {
1491
+ return Object.prototype.toString.call(value) === '[object Object]';
1492
+ }
1310
1493
 
1311
1494
  function useConfig(cfg) {
1312
1495
  if (cfg === void 0) {
@@ -1330,7 +1513,7 @@ function RemoveItems(props) {
1330
1513
  setLoading(true);
1331
1514
  var actions = items.map(function (item) {
1332
1515
  try {
1333
- return Promise.resolve(Ctx.client.delete("" + Ctx.path + item['@name'])).then(function (res) {
1516
+ return Promise.resolve(Ctx.client.delete("" + Ctx.path + item.id, {})).then(function (res) {
1334
1517
  var _temp = function () {
1335
1518
  if (!res.ok) {
1336
1519
  return Promise.resolve(res.json()).then(function (err) {
@@ -1344,7 +1527,9 @@ function RemoveItems(props) {
1344
1527
  } catch (e) {
1345
1528
  return Promise.reject(e);
1346
1529
  }
1347
- });
1530
+ }); // this sleep is here, to let elasticsearch, wait for
1531
+ // index our operations... (will work 99% of use cases)
1532
+
1348
1533
  actions.push(sleep(cfg.DelayActions));
1349
1534
  return Promise.resolve(Promise.all(actions)).then(function () {
1350
1535
  if (errors.length === 0) {
@@ -1374,9 +1559,9 @@ function RemoveItems(props) {
1374
1559
 
1375
1560
  var _props$items = props.items,
1376
1561
  items = _props$items === void 0 ? [] : _props$items;
1377
- var last = items[items.length - 1]['@name'];
1562
+ var last = items[items.length - 1].id;
1378
1563
  var itemsNames = items.map(function (item) {
1379
- return item['@name'];
1564
+ return item.id;
1380
1565
  }).join(', ').replace(", " + last, " and " + last);
1381
1566
  return jsx(Confirm, {
1382
1567
  loading: loading,
@@ -1403,7 +1588,7 @@ var Checkbox = function Checkbox(_ref) {
1403
1588
  dataTest = _ref.dataTest;
1404
1589
  var inputRef = useRef(null);
1405
1590
 
1406
- var _useState = useState(checked),
1591
+ var _useState = useState(!!checked),
1407
1592
  state = _useState[0],
1408
1593
  setState = _useState[1];
1409
1594
 
@@ -1422,13 +1607,13 @@ var Checkbox = function Checkbox(_ref) {
1422
1607
  className: "field",
1423
1608
  children: jsxs("label", {
1424
1609
  htmlFor: id,
1425
- className: classnames(['checkbox', className]),
1610
+ className: classnames(['checkbox', className != null ? className : '']),
1426
1611
  children: [jsx("input", {
1427
1612
  ref: inputRef,
1428
1613
  disabled: disabled || loading,
1429
1614
  id: id,
1430
1615
  type: "checkbox",
1431
- className: classnames(['checkbox', classNameInput]),
1616
+ className: classnames(['checkbox', classNameInput != null ? classNameInput : '']),
1432
1617
  checked: state,
1433
1618
  onChange: updateState,
1434
1619
  "data-test": dataTest
@@ -1466,7 +1651,7 @@ var applyValidators = function applyValidators(value, validators) {
1466
1651
  return result;
1467
1652
  };
1468
1653
 
1469
- var useInput = function useInput(onChange, value, validator) {
1654
+ var useInput = function useInput(onChange, value, validators) {
1470
1655
  var _useState = useState({
1471
1656
  hasError: false,
1472
1657
  value: value
@@ -1475,7 +1660,7 @@ var useInput = function useInput(onChange, value, validator) {
1475
1660
  setState = _useState[1];
1476
1661
 
1477
1662
  var onUpdate = function onUpdate(ev) {
1478
- var value = ev && ev.target ? ev.target.value : ev ? ev : '';
1663
+ var value = ev && ev.target ? ev.target.value : '';
1479
1664
  setState({
1480
1665
  value: value,
1481
1666
  hasError: false
@@ -1484,7 +1669,7 @@ var useInput = function useInput(onChange, value, validator) {
1484
1669
  };
1485
1670
 
1486
1671
  var onBlur = function onBlur() {
1487
- var hasError = applyValidators(state.value, validator) === false;
1672
+ var hasError = applyValidators(state.value, validators) === false;
1488
1673
  if (hasError) setState({
1489
1674
  value: state.value,
1490
1675
  hasError: hasError
@@ -1514,6 +1699,9 @@ var useInput = function useInput(onChange, value, validator) {
1514
1699
  };
1515
1700
  };
1516
1701
 
1702
+ // From github.com/protonmail/proton-shared
1703
+
1704
+ /* eslint-disable no-useless-escape */
1517
1705
  var REGEX_EMAIL = /(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/i;
1518
1706
  var REGEX_URL = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)/;
1519
1707
  var REGEX_HEX_COLOR = /^#([a-f0-9]{3,4}|[a-f0-9]{4}(?:[a-f0-9]{2}){1,2})\b$/i;
@@ -1614,10 +1802,10 @@ var Input = forwardRef(function (_ref, ref) {
1614
1802
  dataTest = _ref$dataTest === void 0 ? 'testInput' : _ref$dataTest,
1615
1803
  disabled = _ref.disabled,
1616
1804
  onKeyUp = _ref.onKeyUp;
1617
- var validatorFn = null;
1805
+ var validatorFn = [];
1618
1806
 
1619
1807
  if (required) {
1620
- validatorFn = Array.isArray(validator) ? validator.push(notEmpty) : [validator, notEmpty];
1808
+ validatorFn = Array.isArray(validator) ? [].concat(validator, [notEmpty]) : [validator, notEmpty];
1621
1809
  }
1622
1810
 
1623
1811
  var _useInput = useInput(onChange, value != null ? value : '', validatorFn),
@@ -1629,17 +1817,18 @@ var Input = forwardRef(function (_ref, ref) {
1629
1817
 
1630
1818
  var _useState2 = useState(false),
1631
1819
  mounted = _useState2[0],
1632
- setMounted = _useState2[1];
1820
+ setMounted = _useState2[1]; // eslint-disable-next-line
1821
+
1633
1822
 
1634
- ref = ref || useRef();
1823
+ var newRef = ref || useRef();
1635
1824
  useEffect(function () {
1636
1825
  setMounted(true);
1637
1826
  }, []);
1638
1827
  useEffect(function () {
1639
- if (autofocus && !error && ref != null && typeof ref !== 'function') {
1640
- ref.current.focus();
1828
+ if (autofocus && !error && newRef != null && typeof newRef !== 'function' && newRef.current) {
1829
+ newRef.current.focus();
1641
1830
  }
1642
- }, [mounted, autofocus, ref, error]);
1831
+ }, [mounted, autofocus, newRef, error]);
1643
1832
  var theError = state.hasError ? errorMessage || 'invalid field' : '';
1644
1833
  var statusClasses = state.hasError ? 'is-danger' : '';
1645
1834
 
@@ -1680,7 +1869,8 @@ Input.displayName = 'Input';
1680
1869
 
1681
1870
  var Icon = function Icon(_ref) {
1682
1871
  var icon = _ref.icon,
1683
- className = _ref.className,
1872
+ _ref$className = _ref.className,
1873
+ className = _ref$className === void 0 ? '' : _ref$className,
1684
1874
  align = _ref.align;
1685
1875
  var addClass = className ? className.split(' ') : [className];
1686
1876
  align = align || 'is-right';
@@ -1697,7 +1887,8 @@ var EmailInput = function EmailInput(_ref) {
1697
1887
  value = _ref$value === void 0 ? '' : _ref$value,
1698
1888
  dataTest = _ref.dataTest,
1699
1889
  placeholder = _ref.placeholder,
1700
- id = _ref.id;
1890
+ id = _ref.id,
1891
+ onChange = _ref.onChange;
1701
1892
  var intl = useIntl();
1702
1893
  return jsx(Input, {
1703
1894
  type: "email",
@@ -1715,7 +1906,8 @@ var EmailInput = function EmailInput(_ref) {
1715
1906
  icon: "fas fa-envelope"
1716
1907
  }),
1717
1908
  id: id,
1718
- placeholder: placeholder
1909
+ placeholder: placeholder,
1910
+ onChange: onChange
1719
1911
  });
1720
1912
  };
1721
1913
 
@@ -1789,24 +1981,26 @@ function FormBuilder(_ref) {
1789
1981
  remotes = _ref$remotes === void 0 ? {} : _ref$remotes,
1790
1982
  _ref$submitButton = _ref.submitButton,
1791
1983
  submitButton = _ref$submitButton === void 0 ? true : _ref$submitButton;
1792
- var ref = useRef();
1984
+ var ref = useRef(null);
1793
1985
  var properties = schema.properties,
1794
1986
  required = schema.required;
1795
- var values = Object.assign({}, formData || {});
1987
+ var values = Object.assign({}, formData || {}); // build initial state
1988
+
1796
1989
  var initialState = {};
1797
1990
  var fields = Object.keys(properties).filter(function (x) {
1798
1991
  return !exclude.includes(x);
1799
1992
  });
1800
1993
  fields.forEach(function (element) {
1801
1994
  initialState[element] = values[element] || undefined;
1802
- });
1995
+ }); // Register remotes
1803
1996
 
1804
- if (!ref.current) {
1997
+ if (ref.current === null) {
1805
1998
  ref.current = {};
1806
1999
  Object.keys(remotes).forEach(function (item) {
1807
2000
  return ref.current[item] = remotes[item];
1808
2001
  });
1809
2002
  } else {
2003
+ // apply remote changes
1810
2004
  Object.keys(remotes).forEach(function (key) {
1811
2005
  if (JSON.stringify(ref.current[key]) !== JSON.stringify(remotes[key])) {
1812
2006
  ref.current[key] = remotes[key];
@@ -1817,15 +2011,16 @@ function FormBuilder(_ref) {
1817
2011
  ref.current = ref.current || {};
1818
2012
 
1819
2013
  var onUpdate = function onUpdate(field) {
1820
- return function (ev) {
1821
- ref.current[field] = ev.target ? ev.target.value : ev.value || ev;
2014
+ return function (value) {
2015
+ ref.current[field] = value;
1822
2016
  };
1823
2017
  };
1824
2018
 
1825
2019
  var GetTag = function GetTag(_ref2) {
1826
2020
  var field = _ref2.field;
1827
2021
  var property = properties[field];
1828
- var Tag = formComponents[property.widget || property.type];
2022
+ var key = property.widget || property.type;
2023
+ var Tag = formComponents[key];
1829
2024
  var props = {
1830
2025
  value: initialState[field],
1831
2026
  onChange: onUpdate(field),
@@ -1840,7 +2035,6 @@ function FormBuilder(_ref) {
1840
2035
  props.placeholder += ' *';
1841
2036
  }
1842
2037
 
1843
- Tag.displayName = field + "Field";
1844
2038
  return jsx(Tag, _extends({}, props));
1845
2039
  };
1846
2040
 
@@ -1909,9 +2103,13 @@ var Select = forwardRef(function (_ref, ref) {
1909
2103
  selectValue = selectValue.concat([ev.target.selectedOptions[i].value]);
1910
2104
  }
1911
2105
 
1912
- onChange(selectValue);
2106
+ if (onChange) {
2107
+ onChange(selectValue);
2108
+ }
1913
2109
  } else {
1914
- onChange(ev.target.value);
2110
+ if (onChange) {
2111
+ onChange(ev.target.value);
2112
+ }
1915
2113
  }
1916
2114
  };
1917
2115
 
@@ -1960,33 +2158,6 @@ var Select = forwardRef(function (_ref, ref) {
1960
2158
  });
1961
2159
  Select.displayName = 'Select';
1962
2160
 
1963
- var formatDate = function formatDate(str) {
1964
- var d = new Date(str);
1965
- var minutes = d.getMinutes() < 10 ? "0" + d.getMinutes() : d.getMinutes();
1966
- return d.getDate() + "/" + (d.getMonth() + 1) + "/" + d.getFullYear() + " " + d.getHours() + ":" + minutes;
1967
- };
1968
- var get$1 = function get(obj, path, defValue) {
1969
- var _pathArray$reduce;
1970
-
1971
- if (!path) return undefined;
1972
- var pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g);
1973
- return (_pathArray$reduce = pathArray.reduce(function (prevObj, key) {
1974
- return prevObj && prevObj[key];
1975
- }, obj)) != null ? _pathArray$reduce : defValue;
1976
- };
1977
- function getNewId(id) {
1978
- if (id === void 0) {
1979
- id = '';
1980
- }
1981
-
1982
- var suffix = '-copy-';
1983
- var rgx = new RegExp("($|" + suffix + "\\d*)");
1984
- return stringToSlug(id).replace(rgx, function (r) {
1985
- var num = parseInt(r.replace(suffix, '') || '0');
1986
- return "" + suffix + (num + 1);
1987
- });
1988
- }
1989
-
1990
2161
  function _catch$1(body, recover) {
1991
2162
  try {
1992
2163
  var result = body();
@@ -2002,10 +2173,6 @@ function _catch$1(body, recover) {
2002
2173
  }
2003
2174
 
2004
2175
  function useVocabulary(vocabularyName, path) {
2005
- if (path === void 0) {
2006
- path = null;
2007
- }
2008
-
2009
2176
  var traversal = useTraversal();
2010
2177
 
2011
2178
  var _useSetState = useSetState({
@@ -2074,8 +2241,10 @@ var SelectVocabulary = forwardRef(function (_ref, ref) {
2074
2241
  var vocabulary = useVocabulary(vocabularyName);
2075
2242
 
2076
2243
  var getOptions = function getOptions() {
2077
- if (get$1(vocabulary, 'data.items', null)) {
2078
- var vocData = vocabulary.data.items.map(function (item) {
2244
+ if (get(vocabulary, 'data.items', null)) {
2245
+ var _vocabulary$data$item, _vocabulary$data;
2246
+
2247
+ var vocData = ((_vocabulary$data$item = vocabulary == null ? void 0 : (_vocabulary$data = vocabulary.data) == null ? void 0 : _vocabulary$data.items) != null ? _vocabulary$data$item : []).map(function (item) {
2079
2248
  return {
2080
2249
  text: item.title,
2081
2250
  value: item.token
@@ -2121,6 +2290,8 @@ var SelectVocabulary = forwardRef(function (_ref, ref) {
2121
2290
  });
2122
2291
  SelectVocabulary.displayName = 'SelectVocabulary';
2123
2292
 
2293
+ // https://github.com/molefrog/wouter
2294
+
2124
2295
  var setURLParams = function setURLParams(p) {
2125
2296
  return window.history.pushState(0, '0', '' + '?' + p.toString().replace(/%2F/g, '/'));
2126
2297
  };
@@ -2140,7 +2311,10 @@ var useLocation = function useLocation() {
2140
2311
 
2141
2312
  var prevPath = useRef(path);
2142
2313
  useEffect(function () {
2143
- patchHistoryEvents();
2314
+ patchHistoryEvents(); // this function checks if the location has been changed since the
2315
+ // last render and updates the state only when needed.
2316
+ // unfortunately, we can't rely on `path` value here, since it can be stale,
2317
+ // that's why we store the last pathname in a ref.
2144
2318
 
2145
2319
  var checkForUpdates = function checkForUpdates() {
2146
2320
  var pathname = currentSearchParams();
@@ -2150,14 +2324,22 @@ var useLocation = function useLocation() {
2150
2324
  var events = ['popstate', 'pushState', 'replaceState'];
2151
2325
  events.map(function (e) {
2152
2326
  return window.addEventListener(e, checkForUpdates);
2153
- });
2327
+ }); // it's possible that an update has occurred between render and the effect handler,
2328
+ // so we run additional check on mount to catch these updates. Based on:
2329
+ // https://gist.github.com/bvaughn/e25397f70e8c65b0ae0d7c90b731b189
2330
+
2154
2331
  checkForUpdates();
2155
2332
  return function () {
2156
2333
  events.map(function (e) {
2157
2334
  return window.removeEventListener(e, checkForUpdates);
2158
2335
  });
2159
2336
  };
2160
- }, []);
2337
+ }, []); // the 2nd argument of the `useLocation` return value is a function
2338
+ // that allows to perform a navigation.
2339
+ //
2340
+ // the function reference should stay the same between re-renders, so that
2341
+ // it can be passed down as an element prop without any performance concerns.
2342
+
2161
2343
  var navigate = useCallback(function (to, replace) {
2162
2344
  if (replace) {
2163
2345
  clean(to);
@@ -2176,23 +2358,40 @@ var useLocation = function useLocation() {
2176
2358
  setURLParams(current);
2177
2359
  }, [path]);
2178
2360
  return [path, navigate, remove];
2179
- };
2361
+ }; // While History API does have `popstate` event, the only
2362
+ // proper way to listen to changes via `push/replaceState`
2363
+ // is to monkey-patch these methods.
2364
+ //
2365
+ // See https://stackoverflow.com/a/4585031
2366
+
2180
2367
  var patched = 0;
2181
2368
 
2182
2369
  var patchHistoryEvents = function patchHistoryEvents() {
2183
2370
  if (patched) return;
2184
- ['pushState', 'replaceState'].map(function (type) {
2185
- var original = window.history[type];
2186
-
2187
- window.history[type] = function () {
2188
- var args = [].slice.call(arguments);
2189
- var result = original.apply(this, args);
2190
- var event = new Event(type);
2191
- event.arguments = args;
2192
- dispatchEvent(event);
2193
- return result;
2194
- };
2195
- });
2371
+ var originalPushState = window.history.pushState;
2372
+
2373
+ window.history.pushState = function () {
2374
+ var args = [].slice.call(arguments);
2375
+ var result = originalPushState.apply(this, args); // eslint-disable-next-line @typescript-eslint/no-explicit-any
2376
+
2377
+ var event = new Event('pushState');
2378
+ event.arguments = args;
2379
+ dispatchEvent(event);
2380
+ return result;
2381
+ };
2382
+
2383
+ var originalReplaceState = window.history.replaceState;
2384
+
2385
+ window.history.replaceState = function () {
2386
+ var args = [].slice.call(arguments);
2387
+ var result = originalReplaceState.apply(this, args); // eslint-disable-next-line @typescript-eslint/no-explicit-any
2388
+
2389
+ var event = new Event('replaceState');
2390
+ event.arguments = args;
2391
+ dispatchEvent(event);
2392
+ return result;
2393
+ };
2394
+
2196
2395
  return patched = 1;
2197
2396
  };
2198
2397
 
@@ -2247,7 +2446,7 @@ function TdLink(_ref) {
2247
2446
  children = _ref.children,
2248
2447
  _ref$style = _ref.style,
2249
2448
  style = _ref$style === void 0 ? {} : _ref$style;
2250
- var link = useRef();
2449
+ var link = useRef(null);
2251
2450
 
2252
2451
  function onClick() {
2253
2452
  if (link && link.current) {
@@ -2354,15 +2553,7 @@ var RestClient = /*#__PURE__*/function () {
2354
2553
 
2355
2554
  var _proto = RestClient.prototype;
2356
2555
 
2357
- _proto.request = function request(path, data, headers) {
2358
- if (data === void 0) {
2359
- data = undefined;
2360
- }
2361
-
2362
- if (headers === void 0) {
2363
- headers = undefined;
2364
- }
2365
-
2556
+ _proto.request = function request(path, data, headers, signal) {
2366
2557
  try {
2367
2558
  var _this2 = this;
2368
2559
 
@@ -2378,9 +2569,18 @@ var RestClient = /*#__PURE__*/function () {
2378
2569
  path = "/" + path;
2379
2570
  }
2380
2571
 
2381
- data = data || {};
2382
- data.headers = headers || _this2.getHeaders();
2383
- return Promise.resolve(fetch("" + _this2.url + path, data));
2572
+ var dataRequest = data || {};
2573
+ dataRequest.headers = _this2.getHeaders();
2574
+
2575
+ if (headers) {
2576
+ dataRequest.headers = _extends({}, dataRequest.headers, headers);
2577
+ }
2578
+
2579
+ if (signal) {
2580
+ dataRequest.signal = signal;
2581
+ }
2582
+
2583
+ return Promise.resolve(fetch("" + _this2.url + path, dataRequest));
2384
2584
  } catch (e) {
2385
2585
  return Promise.reject(e);
2386
2586
  }
@@ -2388,12 +2588,12 @@ var RestClient = /*#__PURE__*/function () {
2388
2588
 
2389
2589
  _proto.getHeaders = function getHeaders() {
2390
2590
  var authToken = this.auth.getToken();
2391
- if (!authToken) return {};
2392
- return {
2393
- Accept: 'application/json',
2394
- 'Content-Type': 'application/json',
2395
- Authorization: 'Bearer ' + authToken
2396
- };
2591
+ var headersInit = {};
2592
+ if (!authToken) return headersInit;
2593
+ headersInit.Accept = 'application/json';
2594
+ headersInit['Content-Type'] = 'application/json';
2595
+ headersInit.Authorization = 'Bearer ' + authToken;
2596
+ return headersInit;
2397
2597
  };
2398
2598
 
2399
2599
  _proto.post = function post(path, data) {
@@ -2409,11 +2609,11 @@ var RestClient = /*#__PURE__*/function () {
2409
2609
  }
2410
2610
  };
2411
2611
 
2412
- _proto.get = function get(path) {
2612
+ _proto.get = function get(path, signal) {
2413
2613
  try {
2414
2614
  var _this6 = this;
2415
2615
 
2416
- return Promise.resolve(_this6.request(path));
2616
+ return Promise.resolve(_this6.request(path, undefined, undefined, signal));
2417
2617
  } catch (e) {
2418
2618
  return Promise.reject(e);
2419
2619
  }
@@ -2451,24 +2651,20 @@ var RestClient = /*#__PURE__*/function () {
2451
2651
 
2452
2652
  var headers = _this12.getHeaders();
2453
2653
 
2454
- delete headers['Content-Type'];
2455
- headers['Content-Type'] = data['content-type'];
2456
- headers['X-UPLOAD-FILENAME'] = data.filename;
2457
- headers['Content-Encoding'] = 'base64';
2654
+ var newHeaders = {};
2655
+ newHeaders['Content-Type'] = data['content-type'];
2656
+ newHeaders['X-UPLOAD-FILENAME'] = data.filename;
2657
+ newHeaders['Content-Encoding'] = 'base64';
2458
2658
  return Promise.resolve(_this12.request(path, {
2459
2659
  method: 'PATCH',
2460
2660
  body: data.data
2461
- }, headers));
2661
+ }, _extends({}, headers, newHeaders)));
2462
2662
  } catch (e) {
2463
2663
  return Promise.reject(e);
2464
2664
  }
2465
2665
  };
2466
2666
 
2467
2667
  _proto.delete = function _delete(path, data) {
2468
- if (data === void 0) {
2469
- data = undefined;
2470
- }
2471
-
2472
2668
  try {
2473
2669
  var _this14 = this;
2474
2670
 
@@ -2609,6 +2805,14 @@ var GuillotinaClient = /*#__PURE__*/function () {
2609
2805
  }
2610
2806
  };
2611
2807
 
2808
+ _proto.getQueryParamsSearchFunction = function getQueryParamsSearchFunction(name) {
2809
+ if (name === 'getQueryParamsElasticsearch') {
2810
+ return this.getQueryParamsElasticsearch;
2811
+ }
2812
+
2813
+ return this.getQueryParamsPostresql;
2814
+ };
2815
+
2612
2816
  _proto.getQueryParamsPostresql = function getQueryParamsPostresql(_ref) {
2613
2817
  var _ref$start = _ref.start,
2614
2818
  start = _ref$start === void 0 ? 0 : _ref$start,
@@ -2700,7 +2904,7 @@ var GuillotinaClient = /*#__PURE__*/function () {
2700
2904
  label: 'id/name',
2701
2905
  key: 'title',
2702
2906
  isSortable: true,
2703
- child: function child(m, navigate, search) {
2907
+ child: function child(m, _navigate, search) {
2704
2908
  return jsxs(TdLink, {
2705
2909
  model: m,
2706
2910
  children: [m.name, search && jsxs(React.Fragment, {
@@ -2734,15 +2938,19 @@ var GuillotinaClient = /*#__PURE__*/function () {
2734
2938
  });
2735
2939
  }
2736
2940
  }];
2737
- };
2941
+ } // BBB API changes. Compat G5 and G6
2942
+ ;
2738
2943
 
2739
2944
  _proto.applyCompat = function applyCompat(data) {
2740
- data.member = data.items;
2741
- data.items_count = data.items_total;
2742
- return data;
2945
+ var result = _extends({}, data, {
2946
+ member: data.items,
2947
+ items_count: data.items_total
2948
+ });
2949
+
2950
+ return result;
2743
2951
  };
2744
2952
 
2745
- _proto.search = function search(path, params, container, prepare) {
2953
+ _proto.search = function search(path, params, container, prepare, signal) {
2746
2954
  if (container === void 0) {
2747
2955
  container = false;
2748
2956
  }
@@ -2764,7 +2972,7 @@ var GuillotinaClient = /*#__PURE__*/function () {
2764
2972
 
2765
2973
  var query = prepare ? toQueryString(params) : params;
2766
2974
  var url = path + "@search?" + query;
2767
- return Promise.resolve(_this7.rest.get(url)).then(function (res) {
2975
+ return Promise.resolve(_this7.rest.get(url, signal)).then(function (res) {
2768
2976
  return Promise.resolve(res.json()).then(function (data) {
2769
2977
  return _this7.applyCompat(data);
2770
2978
  });
@@ -2894,7 +3102,8 @@ var GuillotinaClient = /*#__PURE__*/function () {
2894
3102
 
2895
3103
  var _temp4 = function () {
2896
3104
  if (!cacheSchemas[name]) {
2897
- var url = _this25.getContainerFromPath(path);
3105
+ var url = _this25.getContainerFromPath(path); // todo: handle db case (only addable containers)
3106
+
2898
3107
 
2899
3108
  return Promise.resolve(_this25.rest.get(url + "@types/" + name)).then(function (res) {
2900
3109
  return Promise.resolve(res.json()).then(function (_res$json) {
@@ -2975,23 +3184,53 @@ var GuillotinaClient = /*#__PURE__*/function () {
2975
3184
  var users = _this37.getUsers(path);
2976
3185
 
2977
3186
  return Promise.resolve(Promise.all([groups, users])).then(function (_ref3) {
2978
- var gr = _ref3[0],
2979
- usr = _ref3[1];
3187
+ var responseGroups = _ref3[0],
3188
+ responseUsers = _ref3[1];
2980
3189
 
2981
- function _temp6(_gr$json) {
2982
- function _temp5(_usr$json) {
3190
+ function _temp8() {
3191
+ function _temp6() {
2983
3192
  return {
2984
- groups: _gr$json,
2985
- users: _usr$json
3193
+ groups: groupsData,
3194
+ users: usersData
2986
3195
  };
2987
3196
  }
2988
3197
 
2989
- var _usr$ok = usr.ok;
2990
- return _usr$ok ? Promise.resolve(usr.json()).then(_temp5) : _temp5([]);
3198
+ var _temp5 = function () {
3199
+ if (responseUsers) {
3200
+ return Promise.resolve(responseUsers.json()).then(function (usersDataResponse) {
3201
+ usersData = usersDataResponse.map(function (user) {
3202
+ return {
3203
+ '@name': user.id,
3204
+ user_roles: user.roles,
3205
+ fullname: user.fullname,
3206
+ email: user.email
3207
+ };
3208
+ });
3209
+ });
3210
+ }
3211
+ }();
3212
+
3213
+ return _temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5);
2991
3214
  }
2992
3215
 
2993
- var _gr$ok = gr.ok;
2994
- return _gr$ok ? Promise.resolve(gr.json()).then(_temp6) : _temp6([]);
3216
+ var groupsData = [];
3217
+ var usersData = [];
3218
+
3219
+ var _temp7 = function () {
3220
+ if (responseGroups.ok) {
3221
+ return Promise.resolve(responseGroups.json()).then(function (groupsDataResponse) {
3222
+ groupsData = groupsDataResponse.map(function (group) {
3223
+ return {
3224
+ '@name': group.id,
3225
+ user_roles: group.roles,
3226
+ users: group.users
3227
+ };
3228
+ });
3229
+ });
3230
+ }
3231
+ }();
3232
+
3233
+ return _temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7);
2995
3234
  });
2996
3235
  } catch (e) {
2997
3236
  return Promise.reject(e);
@@ -3013,6 +3252,7 @@ var GuillotinaClient = /*#__PURE__*/function () {
3013
3252
  try {
3014
3253
  var _this41 = this;
3015
3254
 
3255
+ // paths used to query the API always has to start without a "/"
3016
3256
  if (path.startsWith('/')) {
3017
3257
  path = path.slice(1);
3018
3258
  }
@@ -3032,7 +3272,7 @@ var GuillotinaClient = /*#__PURE__*/function () {
3032
3272
  try {
3033
3273
  var _this43 = this;
3034
3274
 
3035
- function _temp10() {
3275
+ function _temp12() {
3036
3276
  return cacheTypes[path];
3037
3277
  }
3038
3278
 
@@ -3040,10 +3280,10 @@ var GuillotinaClient = /*#__PURE__*/function () {
3040
3280
  path = path.slice(1);
3041
3281
  }
3042
3282
 
3043
- var _temp11 = function () {
3283
+ var _temp13 = function () {
3044
3284
  if (!cacheTypes[path]) {
3045
3285
  return Promise.resolve(_this43.rest.get(path + '@addable-types')).then(function (types) {
3046
- var _temp7 = function () {
3286
+ var _temp9 = function () {
3047
3287
  if (types.status === 401 || types.status === 404) {
3048
3288
  cacheTypes[path] = [];
3049
3289
  } else {
@@ -3053,12 +3293,12 @@ var GuillotinaClient = /*#__PURE__*/function () {
3053
3293
  }
3054
3294
  }();
3055
3295
 
3056
- if (_temp7 && _temp7.then) return _temp7.then(function () {});
3296
+ if (_temp9 && _temp9.then) return _temp9.then(function () {});
3057
3297
  });
3058
3298
  }
3059
3299
  }();
3060
3300
 
3061
- return Promise.resolve(_temp11 && _temp11.then ? _temp11.then(_temp10) : _temp10(_temp11));
3301
+ return Promise.resolve(_temp13 && _temp13.then ? _temp13.then(_temp12) : _temp12(_temp13));
3062
3302
  } catch (e) {
3063
3303
  return Promise.reject(e);
3064
3304
  }
@@ -3070,17 +3310,24 @@ function getClient(url, container, auth) {
3070
3310
  return new GuillotinaClient(new RestClient(url, container, auth), container === '/');
3071
3311
  }
3072
3312
  var lightFileReader = function lightFileReader(file) {
3073
- return new Promise(function (resolve) {
3313
+ return new Promise(function (resolve, reject) {
3074
3314
  var reader = new FileReader();
3075
3315
  reader.readAsArrayBuffer(file);
3076
3316
 
3077
3317
  reader.onloadend = function (e) {
3078
- var fileData = e.target.result;
3079
- resolve({
3080
- filename: file.name.normalize('NFD').replace(/[\u0300-\u036f]/g, ''),
3081
- data: fileData,
3082
- 'content-type': file.type
3083
- });
3318
+ var _e$target;
3319
+
3320
+ var fileData = e == null ? void 0 : (_e$target = e.target) == null ? void 0 : _e$target.result;
3321
+
3322
+ if (fileData) {
3323
+ resolve({
3324
+ filename: file.name.normalize('NFD').replace(/[\u0300-\u036f]/g, ''),
3325
+ data: fileData,
3326
+ 'content-type': file.type
3327
+ });
3328
+ } else {
3329
+ reject('Error reading file');
3330
+ }
3084
3331
  };
3085
3332
  });
3086
3333
  };
@@ -3111,9 +3358,15 @@ function FileUpload(_ref) {
3111
3358
 
3112
3359
  var changed = function changed(event) {
3113
3360
  try {
3114
- return Promise.resolve(lightFileReader(event.target.files[0])).then(function (fileToUpload) {
3115
- onChange(fileToUpload);
3116
- });
3361
+ var _temp2 = function () {
3362
+ if (event.target.files) {
3363
+ return Promise.resolve(lightFileReader(event.target.files[0])).then(function (fileToUpload) {
3364
+ onChange(fileToUpload);
3365
+ });
3366
+ }
3367
+ }();
3368
+
3369
+ return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);
3117
3370
  } catch (e) {
3118
3371
  return Promise.reject(e);
3119
3372
  }
@@ -3204,12 +3457,12 @@ Textarea.displayName = 'Textarea';
3204
3457
 
3205
3458
  var defaultEvents = ['mousedown', 'touchstart'];
3206
3459
 
3207
- var on = function on(obj) {
3208
- return obj.addEventListener.apply(obj, [].slice.call(arguments, 1));
3460
+ var on = function on(obj, type, handler) {
3461
+ return obj.addEventListener(type, handler);
3209
3462
  };
3210
3463
 
3211
- var off = function off(obj) {
3212
- return obj.removeEventListener.apply(obj, [].slice.call(arguments, 1));
3464
+ var off = function off(obj, type, handler) {
3465
+ return obj.removeEventListener(type, handler);
3213
3466
  };
3214
3467
 
3215
3468
  function useClickAway(ref, onClickAway, events) {
@@ -3241,23 +3494,7 @@ function useClickAway(ref, onClickAway, events) {
3241
3494
  }, [events, ref]);
3242
3495
  }
3243
3496
 
3244
- function debounce(func, wait) {
3245
- var timeout;
3246
- return function () {
3247
- var context = this;
3248
- var args = arguments;
3249
-
3250
- var later = function later() {
3251
- timeout = null;
3252
- func.apply(context, args);
3253
- };
3254
-
3255
- clearTimeout(timeout);
3256
- timeout = setTimeout(later, wait);
3257
- };
3258
- }
3259
-
3260
- var initialState = {
3497
+ var initialState$1 = {
3261
3498
  page: 0,
3262
3499
  items: undefined,
3263
3500
  loading: false,
@@ -3267,10 +3504,9 @@ var SearchInput = function SearchInput(_ref) {
3267
3504
  var onChange = _ref.onChange,
3268
3505
  error = _ref.error,
3269
3506
  errorZoneClassName = _ref.errorZoneClassName,
3270
- _ref$traversal = _ref.traversal,
3271
- traversal = _ref$traversal === void 0 ? null : _ref$traversal,
3507
+ traversal = _ref.traversal,
3272
3508
  _ref$path = _ref.path,
3273
- path = _ref$path === void 0 ? null : _ref$path,
3509
+ path = _ref$path === void 0 ? undefined : _ref$path,
3274
3510
  _ref$qs = _ref.qs,
3275
3511
  qs = _ref$qs === void 0 ? [] : _ref$qs,
3276
3512
  _ref$queryCondition = _ref.queryCondition,
@@ -3285,14 +3521,14 @@ var SearchInput = function SearchInput(_ref) {
3285
3521
  _ref$dataTestItem = _ref.dataTestItem,
3286
3522
  dataTestItem = _ref$dataTestItem === void 0 ? 'searchInputItemTest' : _ref$dataTestItem,
3287
3523
  _ref$renderTextItemOp = _ref.renderTextItemOption,
3288
- renderTextItemOption = _ref$renderTextItemOp === void 0 ? null : _ref$renderTextItemOp,
3524
+ renderTextItemOption = _ref$renderTextItemOp === void 0 ? undefined : _ref$renderTextItemOp,
3289
3525
  _ref$typeNameQuery = _ref.typeNameQuery,
3290
- typeNameQuery = _ref$typeNameQuery === void 0 ? null : _ref$typeNameQuery,
3526
+ typeNameQuery = _ref$typeNameQuery === void 0 ? undefined : _ref$typeNameQuery,
3291
3527
  _ref$labelProperty = _ref.labelProperty,
3292
3528
  labelProperty = _ref$labelProperty === void 0 ? 'id' : _ref$labelProperty;
3293
3529
  var intl = useIntl();
3294
3530
 
3295
- var _useSetState = useSetState(initialState),
3531
+ var _useSetState = useSetState(initialState$1),
3296
3532
  options = _useSetState[0],
3297
3533
  setOptions = _useSetState[1];
3298
3534
 
@@ -3346,7 +3582,7 @@ var SearchInput = function SearchInput(_ref) {
3346
3582
  var searchTermParsed = ["id", value];
3347
3583
  var getSearch = traversal.registry.get;
3348
3584
  var fnName = getSearch('searchEngineQueryParamsFunction', SearchEngine);
3349
- var qsParsed = traversal.client[fnName]({
3585
+ var qsParsed = traversal.client.getQueryParamsSearchFunction(fnName)({
3350
3586
  path: traversal.path,
3351
3587
  start: 0,
3352
3588
  pageSize: PageSize,
@@ -3364,7 +3600,7 @@ var SearchInput = function SearchInput(_ref) {
3364
3600
 
3365
3601
  return Promise.resolve(traversal.client.search(path ? path : traversal.client.getContainerFromPath(traversal.path), searchTermQs, false, false)).then(function (data) {
3366
3602
  var newValuesLabel = data.items.reduce(function (result, item) {
3367
- result[item.id] = get$1(item, labelProperty, item.id);
3603
+ result[item.id] = get(item, labelProperty, item.id);
3368
3604
  return result;
3369
3605
  }, {});
3370
3606
  setValueLabel(newValuesLabel);
@@ -3392,6 +3628,7 @@ var SearchInput = function SearchInput(_ref) {
3392
3628
  }
3393
3629
 
3394
3630
  try {
3631
+ console.log('handle search input');
3395
3632
  setOptions({
3396
3633
  loading: true
3397
3634
  });
@@ -3406,7 +3643,7 @@ var SearchInput = function SearchInput(_ref) {
3406
3643
 
3407
3644
  var fnName = _get('searchEngineQueryParamsFunction', SearchEngine);
3408
3645
 
3409
- var qsParsed = traversal.client[fnName]({
3646
+ var qsParsed = traversal.client.getQueryParamsSearchFunction(fnName)({
3410
3647
  path: traversal.path,
3411
3648
  start: page * PageSize,
3412
3649
  pageSize: PageSize,
@@ -3419,7 +3656,7 @@ var SearchInput = function SearchInput(_ref) {
3419
3656
  typeNameParsed = parser("type_name__in=" + typeNameQuery);
3420
3657
  }
3421
3658
 
3422
- if (qs.length > 0 || searchTermParsed.length > 0 || qsParsed.length > 0 || typeNameParsed.length > 0) {
3659
+ if (qs.length > 0 || searchTermParsed.length > 0 || qsParsed.length > 0 || typeNameParsed.length > 0 || sortParsed.length > 0) {
3423
3660
  searchTermQs = buildQs([].concat(qs, searchTermParsed, qsParsed, typeNameParsed, sortParsed));
3424
3661
  }
3425
3662
 
@@ -3444,7 +3681,7 @@ var SearchInput = function SearchInput(_ref) {
3444
3681
  return renderTextItemOption(item);
3445
3682
  }
3446
3683
 
3447
- return get$1(item, labelProperty, item.title) || item['@name'];
3684
+ return get(item, labelProperty, item.title) || item['@name'];
3448
3685
  };
3449
3686
 
3450
3687
  useEffect(function () {
@@ -3470,7 +3707,7 @@ var SearchInput = function SearchInput(_ref) {
3470
3707
  if (!ev.currentTarget.contains(ev.relatedTarget)) {
3471
3708
  if (searchTerm !== '') {
3472
3709
  setSearchTerm('');
3473
- setOptions(initialState);
3710
+ setOptions(initialState$1);
3474
3711
  }
3475
3712
 
3476
3713
  setIsOpen(false);
@@ -3488,6 +3725,7 @@ var SearchInput = function SearchInput(_ref) {
3488
3725
  }
3489
3726
 
3490
3727
  setIsOpen(!isOpen);
3728
+ console.log('on clic btn', options);
3491
3729
 
3492
3730
  if (!options.loading && !options.items) {
3493
3731
  handleSearch(options.page);
@@ -3496,7 +3734,7 @@ var SearchInput = function SearchInput(_ref) {
3496
3734
  "aria-haspopup": "true",
3497
3735
  "aria-controls": "dropdown-menu",
3498
3736
  children: [jsx("span", {
3499
- children: value ? get$1(valueLabel, value, value) : intl.formatMessage(genericMessages.choose)
3737
+ children: value ? get(valueLabel, value, value) : intl.formatMessage(genericMessages.choose)
3500
3738
  }), jsx("span", {
3501
3739
  className: "icon",
3502
3740
  children: jsx("i", {
@@ -3570,23 +3808,7 @@ var SearchInput = function SearchInput(_ref) {
3570
3808
  });
3571
3809
  };
3572
3810
 
3573
- function debounce$1(func, wait) {
3574
- var timeout;
3575
- return function () {
3576
- var context = this;
3577
- var args = arguments;
3578
-
3579
- var later = function later() {
3580
- timeout = null;
3581
- func.apply(context, args);
3582
- };
3583
-
3584
- clearTimeout(timeout);
3585
- timeout = setTimeout(later, wait);
3586
- };
3587
- }
3588
-
3589
- var initialState$1 = {
3811
+ var initialState$2 = {
3590
3812
  page: 0,
3591
3813
  items: undefined,
3592
3814
  loading: false,
@@ -3596,10 +3818,9 @@ var SearchInputList = function SearchInputList(_ref) {
3596
3818
  var onChange = _ref.onChange,
3597
3819
  error = _ref.error,
3598
3820
  errorZoneClassName = _ref.errorZoneClassName,
3599
- _ref$traversal = _ref.traversal,
3600
- traversal = _ref$traversal === void 0 ? null : _ref$traversal,
3821
+ traversal = _ref.traversal,
3601
3822
  _ref$path = _ref.path,
3602
- path = _ref$path === void 0 ? null : _ref$path,
3823
+ path = _ref$path === void 0 ? undefined : _ref$path,
3603
3824
  _ref$qs = _ref.qs,
3604
3825
  qs = _ref$qs === void 0 ? [] : _ref$qs,
3605
3826
  _ref$queryCondition = _ref.queryCondition,
@@ -3614,14 +3835,14 @@ var SearchInputList = function SearchInputList(_ref) {
3614
3835
  _ref$dataTestItem = _ref.dataTestItem,
3615
3836
  dataTestItem = _ref$dataTestItem === void 0 ? 'searchInputItemTest' : _ref$dataTestItem,
3616
3837
  _ref$renderTextItemOp = _ref.renderTextItemOption,
3617
- renderTextItemOption = _ref$renderTextItemOp === void 0 ? null : _ref$renderTextItemOp,
3838
+ renderTextItemOption = _ref$renderTextItemOp === void 0 ? undefined : _ref$renderTextItemOp,
3618
3839
  _ref$typeNameQuery = _ref.typeNameQuery,
3619
- typeNameQuery = _ref$typeNameQuery === void 0 ? null : _ref$typeNameQuery,
3840
+ typeNameQuery = _ref$typeNameQuery === void 0 ? undefined : _ref$typeNameQuery,
3620
3841
  _ref$labelProperty = _ref.labelProperty,
3621
3842
  labelProperty = _ref$labelProperty === void 0 ? 'id' : _ref$labelProperty;
3622
3843
  var intl = useIntl();
3623
3844
 
3624
- var _useSetState = useSetState(initialState$1),
3845
+ var _useSetState = useSetState(initialState$2),
3625
3846
  options = _useSetState[0],
3626
3847
  setOptions = _useSetState[1];
3627
3848
 
@@ -3667,7 +3888,7 @@ var SearchInputList = function SearchInputList(_ref) {
3667
3888
  };
3668
3889
  };
3669
3890
 
3670
- var delayedQuery = useCallback(debounce$1(function (value) {
3891
+ var delayedQuery = useCallback(debounce(function (value) {
3671
3892
  return handleSearch(0, false, value);
3672
3893
  }, 500), []);
3673
3894
 
@@ -3699,7 +3920,7 @@ var SearchInputList = function SearchInputList(_ref) {
3699
3920
 
3700
3921
  var fnName = _get('searchEngineQueryParamsFunction', SearchEngine);
3701
3922
 
3702
- var qsParsed = traversal.client[fnName]({
3923
+ var qsParsed = traversal.client.getQueryParamsSearchFunction(fnName)({
3703
3924
  path: traversal.path,
3704
3925
  start: page * PageSize,
3705
3926
  pageSize: PageSize,
@@ -3741,7 +3962,7 @@ var SearchInputList = function SearchInputList(_ref) {
3741
3962
  var searchTermParsed = ['__or', "id=" + value.join('%26id=')];
3742
3963
  var getSearch = traversal.registry.get;
3743
3964
  var fnName = getSearch('searchEngineQueryParamsFunction', SearchEngine);
3744
- var qsParsed = traversal.client[fnName]({
3965
+ var qsParsed = traversal.client.getQueryParamsSearchFunction(fnName)({
3745
3966
  path: traversal.path,
3746
3967
  start: 0,
3747
3968
  pageSize: 100,
@@ -3757,9 +3978,9 @@ var SearchInputList = function SearchInputList(_ref) {
3757
3978
  searchTermQs = buildQs([].concat(qs, [searchTermParsed], qsParsed, typeNameParsed));
3758
3979
  }
3759
3980
 
3760
- return Promise.resolve(traversal.client.search(path ? path : traversal.client.getContainerFromPath(traversal.path), searchTermQs, false, false, 0, 100)).then(function (data) {
3981
+ return Promise.resolve(traversal.client.search(path ? path : traversal.client.getContainerFromPath(traversal.path), searchTermQs, false, false)).then(function (data) {
3761
3982
  var newValuesLabel = data.items.reduce(function (result, item) {
3762
- result[item.id] = get$1(item, labelProperty, item.id);
3983
+ result[item.id] = get(item, labelProperty, item.id);
3763
3984
  return result;
3764
3985
  }, {});
3765
3986
  setValuesLabels(newValuesLabel);
@@ -3779,7 +4000,7 @@ var SearchInputList = function SearchInputList(_ref) {
3779
4000
  return renderTextItemOption(item);
3780
4001
  }
3781
4002
 
3782
- return get$1(item, labelProperty, item.title) || item['@name'];
4003
+ return get(item, labelProperty, item.title) || item['@name'];
3783
4004
  };
3784
4005
 
3785
4006
  useEffect(function () {
@@ -3802,7 +4023,7 @@ var SearchInputList = function SearchInputList(_ref) {
3802
4023
  children: value.map(function (tag, index) {
3803
4024
  return jsxs("div", {
3804
4025
  className: "tag is-info is-medium",
3805
- children: [get$1(valuesLabel, tag, tag), jsx("button", {
4026
+ children: [get(valuesLabel, tag, tag), jsx("button", {
3806
4027
  className: "delete is-small",
3807
4028
  onClick: function onClick(ev) {
3808
4029
  ev.stopPropagation();
@@ -3822,7 +4043,7 @@ var SearchInputList = function SearchInputList(_ref) {
3822
4043
  if (!ev.currentTarget.contains(ev.relatedTarget)) {
3823
4044
  if (searchTerm !== '') {
3824
4045
  setSearchTerm('');
3825
- setOptions(initialState$1);
4046
+ setOptions(initialState$2);
3826
4047
  }
3827
4048
 
3828
4049
  setIsOpen(false);
@@ -3886,7 +4107,7 @@ var SearchInputList = function SearchInputList(_ref) {
3886
4107
  if (onChange && !value.includes(item.id)) {
3887
4108
  var _extends2;
3888
4109
 
3889
- setValuesLabels(_extends({}, valuesLabel, (_extends2 = {}, _extends2[item.id] = get$1(item, labelProperty, item.id), _extends2)));
4110
+ setValuesLabels(_extends({}, valuesLabel, (_extends2 = {}, _extends2[item.id] = get(item, labelProperty, item.id), _extends2)));
3890
4111
  onChange([].concat(value, [item.id]));
3891
4112
  }
3892
4113
  },
@@ -4074,7 +4295,7 @@ function EditableField(_ref) {
4074
4295
  ref.current.focus();
4075
4296
  }
4076
4297
  });
4077
- var canModified = modifyContent && !get$1(schema, 'readonly', false);
4298
+ var canModified = schema !== undefined && modifyContent && !get(schema, 'readonly', false);
4078
4299
 
4079
4300
  var saveField = function saveField(ev) {
4080
4301
  try {
@@ -4140,7 +4361,7 @@ function EditableField(_ref) {
4140
4361
  var deleteField = function deleteField(ev) {
4141
4362
  try {
4142
4363
  if (ev) ev.preventDefault();
4143
- return Promise.resolve(function () {
4364
+ return Promise.resolve(function (_schema$items) {
4144
4365
  if ((schema == null ? void 0 : schema.widget) === 'file') {
4145
4366
  var _ns2, _ref4, _ref5;
4146
4367
 
@@ -4168,7 +4389,7 @@ function EditableField(_ref) {
4168
4389
  });
4169
4390
  } else if ((schema == null ? void 0 : schema.type) === 'string' && schema != null && schema.enum) {
4170
4391
  setValue(null);
4171
- } else if ((schema == null ? void 0 : schema.type) === 'array' && (schema == null ? void 0 : schema.items.type) === 'string') {
4392
+ } else if ((schema == null ? void 0 : schema.type) === 'array' && (schema == null ? void 0 : (_schema$items = schema.items) == null ? void 0 : _schema$items.type) === 'string') {
4172
4393
  setValue([]);
4173
4394
  }
4174
4395
  }());
@@ -4225,7 +4446,7 @@ function EditableField(_ref) {
4225
4446
  dataTest: "editableFieldBtnCancelTest",
4226
4447
  children: intl.formatMessage(genericMessages.cancel)
4227
4448
  })
4228
- }), !required && fieldHaveDeleteButton(schema) && jsx("div", {
4449
+ }), !required && schema && fieldHaveDeleteButton(schema) && jsx("div", {
4229
4450
  className: "control",
4230
4451
  children: jsx(Button, {
4231
4452
  className: "is-small is-danger",
@@ -4254,7 +4475,8 @@ var DownloadField = function DownloadField(_ref) {
4254
4475
  var blob = new Blob([text], {
4255
4476
  type: data.content_type
4256
4477
  });
4257
- var url = window.URL.createObjectURL(blob);
4478
+ var url = window.URL.createObjectURL(blob); // Create blob link to download
4479
+
4258
4480
  var link = document.createElement('a');
4259
4481
  link.href = url;
4260
4482
 
@@ -4269,6 +4491,7 @@ var DownloadField = function DownloadField(_ref) {
4269
4491
  setTimeout(function () {
4270
4492
  var _link$parentNode;
4271
4493
 
4494
+ // For Firefox it is necessary to delay revoking the ObjectURL
4272
4495
  window.URL.revokeObjectURL(url);
4273
4496
  (_link$parentNode = link.parentNode) == null ? void 0 : _link$parentNode.removeChild(link);
4274
4497
  }, 100);
@@ -4344,23 +4567,27 @@ function RenderField(_ref) {
4344
4567
  }
4345
4568
 
4346
4569
  if (type === 'object') {
4570
+ var _schema$properties;
4571
+
4347
4572
  if (Array.isArray(value)) {
4348
- return value.map(function (item) {
4573
+ return value.map(function (item, index) {
4349
4574
  return jsx("div", {
4350
4575
  children: jsx(RenderField, {
4351
4576
  value: item
4352
4577
  })
4353
- }, item);
4578
+ }, "renderField_" + index + "_" + (schema == null ? void 0 : schema.title));
4354
4579
  });
4355
4580
  }
4356
4581
 
4357
- return Object.keys(value).map(function (key) {
4358
- return jsx(FieldValue, {
4359
- field: get$1(schema, "properties." + key + ".title", key),
4360
- schema: get$1(schema, "properties." + key, {}),
4361
- value: value[key]
4362
- }, key);
4363
- });
4582
+ if ((schema == null ? void 0 : (_schema$properties = schema.properties) == null ? void 0 : _schema$properties.key) !== undefined) {
4583
+ return Object.keys(value).map(function (key) {
4584
+ return jsx(FieldValue, {
4585
+ field: get(schema, "properties." + key + ".title", key),
4586
+ schema: schema.properties.key,
4587
+ value: get(value, key, {})
4588
+ }, key);
4589
+ });
4590
+ }
4364
4591
  }
4365
4592
 
4366
4593
  return jsxs("p", {
@@ -4404,6 +4631,7 @@ var SearchRenderField = function SearchRenderField(_ref3) {
4404
4631
  var schema = _ref3.schema,
4405
4632
  value = _ref3.value,
4406
4633
  modifyContent = _ref3.modifyContent;
4634
+ console.log('search render fields');
4407
4635
  var intl = useIntl();
4408
4636
 
4409
4637
  var _useState = useState([]),
@@ -4428,7 +4656,7 @@ var SearchRenderField = function SearchRenderField(_ref3) {
4428
4656
  var searchTermParsed = ['__or', "id=" + valuesToSearch.join('%26id=')];
4429
4657
  var getSearch = traversal.registry.get;
4430
4658
  var fnName = getSearch('searchEngineQueryParamsFunction', SearchEngine);
4431
- var qsParsed = traversal.client[fnName]({
4659
+ var qsParsed = traversal.client.getQueryParamsSearchFunction(fnName)({
4432
4660
  path: traversal.path,
4433
4661
  start: 0,
4434
4662
  pageSize: 100,
@@ -4439,11 +4667,11 @@ var SearchRenderField = function SearchRenderField(_ref3) {
4439
4667
  searchTermQs = buildQs([searchTermParsed].concat(qsParsed));
4440
4668
  }
4441
4669
 
4442
- return Promise.resolve(traversal.client.search(traversal.client.getContainerFromPath(traversal.path), searchTermQs, false, false, 0, 100)).then(function (data) {
4670
+ return Promise.resolve(traversal.client.search(traversal.client.getContainerFromPath(traversal.path), searchTermQs, false, false)).then(function (data) {
4443
4671
  var newValuesLabel = data.items.map(function (item) {
4444
4672
  var _schema$labelProperty;
4445
4673
 
4446
- return get$1(item, (_schema$labelProperty = schema == null ? void 0 : schema.labelProperty) != null ? _schema$labelProperty : 'title', item.id);
4674
+ return get(item, (_schema$labelProperty = schema == null ? void 0 : schema.labelProperty) != null ? _schema$labelProperty : 'title', item.id);
4447
4675
  });
4448
4676
  setValuesLabels(newValuesLabel);
4449
4677
  setIsLoadingData(false);
@@ -4453,13 +4681,15 @@ var SearchRenderField = function SearchRenderField(_ref3) {
4453
4681
  }
4454
4682
  };
4455
4683
 
4456
- var valuesToSearch = value;
4684
+ var valuesToSearch = [];
4457
4685
 
4458
- if (typeof valuesToSearch === 'string') {
4459
- valuesToSearch = [valuesToSearch];
4686
+ if (typeof value === 'string' && value) {
4687
+ valuesToSearch = [value];
4688
+ } else if (Array.isArray(value)) {
4689
+ valuesToSearch = value;
4460
4690
  }
4461
4691
 
4462
- if (valuesToSearch !== undefined && valuesToSearch.length > 0) {
4692
+ if (valuesToSearch.length > 0) {
4463
4693
  fetchData(valuesToSearch);
4464
4694
  } else {
4465
4695
  setValuesLabels([]);
@@ -4494,7 +4724,7 @@ var VocabularyRenderField = function VocabularyRenderField(_ref4) {
4494
4724
  modifyContent = _ref4.modifyContent;
4495
4725
  var intl = useIntl();
4496
4726
  var DEFAULT_VALUE_EDITABLE_FIELD = getDefaultValueEditableField(intl);
4497
- var vocabularyName = (schema == null ? void 0 : (_schema$items = schema.items) == null ? void 0 : _schema$items.vocabularyName) || (schema == null ? void 0 : schema.vocabularyName);
4727
+ var vocabularyName = (schema == null ? void 0 : (_schema$items = schema.items) == null ? void 0 : _schema$items.vocabularyName) || (schema == null ? void 0 : schema.vocabularyName) || '';
4498
4728
  var vocabulary = useVocabulary(vocabularyName);
4499
4729
 
4500
4730
  var getRenderProps = function getRenderProps() {
@@ -4505,7 +4735,7 @@ var VocabularyRenderField = function VocabularyRenderField(_ref4) {
4505
4735
  if (schema != null && schema.vocabularyName) {
4506
4736
  var _vocabularyValue$titl;
4507
4737
 
4508
- var vocabularyValue = get$1(vocabulary, 'data.items', []).find(function (item) {
4738
+ var vocabularyValue = get(vocabulary, 'data.items', []).find(function (item) {
4509
4739
  return item.token === value;
4510
4740
  });
4511
4741
  renderProps['value'] = (_vocabularyValue$titl = vocabularyValue == null ? void 0 : vocabularyValue.title) != null ? _vocabularyValue$titl : '';
@@ -4515,7 +4745,7 @@ var VocabularyRenderField = function VocabularyRenderField(_ref4) {
4515
4745
  renderProps['value'] = ((_renderProps$value = renderProps['value']) != null ? _renderProps$value : []).map(function (value) {
4516
4746
  var _get$find$title, _get$find;
4517
4747
 
4518
- return (_get$find$title = (_get$find = get$1(vocabulary, 'data.items', []).find(function (item) {
4748
+ return (_get$find$title = (_get$find = get(vocabulary, 'data.items', []).find(function (item) {
4519
4749
  return item.token === value;
4520
4750
  })) == null ? void 0 : _get$find.title) != null ? _get$find$title : '';
4521
4751
  });
@@ -4592,7 +4822,7 @@ var EditComponent = forwardRef(function (_ref, ref) {
4592
4822
  queryCondition: schema != null && schema.queryCondition ? schema.queryCondition : 'title__in',
4593
4823
  path: schema.queryPath,
4594
4824
  labelProperty: schema != null && schema.labelProperty ? schema.labelProperty : 'title',
4595
- typeNameQuery: schema != null && schema.typeNameQuery ? schema.typeNameQuery : null
4825
+ typeNameQuery: schema == null ? void 0 : schema.typeNameQuery
4596
4826
  })]
4597
4827
  });
4598
4828
  } else if ((schema == null ? void 0 : schema.widget) === 'search') {
@@ -4609,7 +4839,7 @@ var EditComponent = forwardRef(function (_ref, ref) {
4609
4839
  queryCondition: schema != null && schema.queryCondition ? schema.queryCondition : 'title__in',
4610
4840
  path: schema.queryPath,
4611
4841
  labelProperty: schema != null && schema.labelProperty ? schema.labelProperty : 'title',
4612
- typeNameQuery: schema != null && schema.typeNameQuery ? schema.typeNameQuery : null
4842
+ typeNameQuery: schema == null ? void 0 : schema.typeNameQuery
4613
4843
  })]
4614
4844
  });
4615
4845
  } else if ((schema == null ? void 0 : schema.widget) === 'textarea' || (schema == null ? void 0 : schema.widget) === 'richtext') {
@@ -4639,7 +4869,7 @@ var EditComponent = forwardRef(function (_ref, ref) {
4639
4869
 
4640
4870
  if (schema.items.vocabularyName) {
4641
4871
  return jsx(SelectVocabulary, {
4642
- vocabularyName: get$1(schema, 'items.vocabularyName', null),
4872
+ vocabularyName: get(schema, 'items.vocabularyName', ''),
4643
4873
  val: val || [],
4644
4874
  className: className,
4645
4875
  classWrap: "is-fullwidth",
@@ -4676,22 +4906,25 @@ var EditComponent = forwardRef(function (_ref, ref) {
4676
4906
  }), jsx(InputList, {
4677
4907
  value: val || [],
4678
4908
  className: className,
4679
- onChange: function onChange(ev) {
4680
- return _setValue(ev);
4909
+ onChange: function onChange(val) {
4910
+ return _setValue(val);
4681
4911
  },
4682
4912
  ref: ref,
4683
4913
  dataTest: dataTest
4684
4914
  })]
4685
4915
  });
4686
4916
  } else if ((schema == null ? void 0 : schema.widget) === 'file') {
4917
+ var value = val;
4687
4918
  return jsx(FileUpload, {
4688
4919
  onChange: function onChange(ev) {
4689
4920
  return _setValue(ev);
4690
4921
  },
4691
- label: get$1(val, 'filename', null),
4922
+ label: get(value, 'filename', undefined),
4692
4923
  dataTest: dataTest
4693
4924
  });
4694
4925
  } else if ((schema == null ? void 0 : schema.widget) === 'select' && schema.type === 'string') {
4926
+ var _schema$vocabulary;
4927
+
4695
4928
  if (schema != null && schema.vocabularyName) {
4696
4929
  return jsx(SelectVocabulary, {
4697
4930
  val: val || '',
@@ -4700,7 +4933,7 @@ var EditComponent = forwardRef(function (_ref, ref) {
4700
4933
  classWrap: "is-fullwidth",
4701
4934
  dataTest: dataTest,
4702
4935
  onChange: _setValue,
4703
- vocabularyName: get$1(schema, 'vocabularyName', null),
4936
+ vocabularyName: get(schema, 'vocabularyName', ''),
4704
4937
  placeholder: placeholder,
4705
4938
  id: id
4706
4939
  });
@@ -4712,7 +4945,7 @@ var EditComponent = forwardRef(function (_ref, ref) {
4712
4945
  appendDefault: true,
4713
4946
  classWrap: "is-fullwidth",
4714
4947
  dataTest: dataTest,
4715
- options: schema == null ? void 0 : schema.vocabulary.map(function (item) {
4948
+ options: ((_schema$vocabulary = schema == null ? void 0 : schema.vocabulary) != null ? _schema$vocabulary : []).map(function (item) {
4716
4949
  return {
4717
4950
  text: item,
4718
4951
  value: item
@@ -4723,26 +4956,27 @@ var EditComponent = forwardRef(function (_ref, ref) {
4723
4956
  id: id
4724
4957
  });
4725
4958
  } else if ((schema == null ? void 0 : schema.type) === 'object' && schema.widget !== 'file') {
4726
- var value = val;
4959
+ var _value = val;
4727
4960
  return jsxs(Fragment, {
4728
4961
  children: [schema.title && jsx("h4", {
4729
4962
  className: "subtitle mt-2",
4730
4963
  children: schema.title
4731
- }), Object.keys(get$1(schema, 'properties', {})).map(function (key) {
4964
+ }), Object.keys(get(schema, 'properties', {})).map(function (key) {
4732
4965
  var _subSchema$title;
4733
4966
 
4734
- var subSchema = get$1(schema, 'properties', {})[key];
4735
- var requiredFields = get$1(schema, 'required', []);
4967
+ var subSchema = get(schema, "properties." + key, null);
4968
+ var requiredFields = get(schema, 'required', []);
4969
+ if (!subSchema) return null;
4736
4970
  return jsx(EditComponent, {
4737
4971
  id: id + "[" + key + "]",
4738
4972
  schema: subSchema,
4739
- val: value && key in value ? value[key] : '',
4973
+ val: _value && key in _value ? _value[key] : '',
4740
4974
  placeholder: (_subSchema$title = subSchema == null ? void 0 : subSchema.title) != null ? _subSchema$title : '',
4741
4975
  required: requiredFields.includes(key),
4742
4976
  setValue: function setValue(ev) {
4743
4977
  var _extends2;
4744
4978
 
4745
- _setValue(_extends({}, value, (_extends2 = {}, _extends2[key] = ev, _extends2)));
4979
+ _setValue(_extends({}, _value, (_extends2 = {}, _extends2[key] = ev, _extends2)));
4746
4980
  },
4747
4981
  dataTest: key + "TestInput"
4748
4982
  }, id + "[" + key + "]");
@@ -4804,9 +5038,9 @@ function IAttachment(_ref) {
4804
5038
  }, 1), jsx("td", {
4805
5039
  children: jsx(EditableField, {
4806
5040
  field: key,
4807
- value: values[key],
5041
+ value: values.file,
4808
5042
  ns: "guillotina.behaviors.attachment.IAttachment",
4809
- schema: properties[key],
5043
+ schema: properties.file,
4810
5044
  modifyContent: modifyContent && ['file'].includes(key)
4811
5045
  })
4812
5046
  }, 2)]
@@ -4856,6 +5090,11 @@ function IMultiAttachment(_ref) {
4856
5090
 
4857
5091
  setLoading(true);
4858
5092
  setError(undefined);
5093
+
5094
+ if (!file) {
5095
+ return Promise.resolve();
5096
+ }
5097
+
4859
5098
  var endpoint = Ctx.path + "@upload/files/" + fileKey;
4860
5099
  return Promise.resolve(Ctx.client.upload(endpoint, file)).then(function (req) {
4861
5100
  if (req.status !== 200) {
@@ -4924,7 +5163,7 @@ function IMultiAttachment(_ref) {
4924
5163
  field: "files/" + key,
4925
5164
  value: values['files'][key],
4926
5165
  ns: "guillotina.behaviors.attachment.IMultiAttachment.files",
4927
- schema: properties['files']['additionalProperties'],
5166
+ schema: get(properties, 'files.additionalProperties', {}),
4928
5167
  modifyContent: false
4929
5168
  }), jsx("div", {
4930
5169
  className: "ml-5",
@@ -5148,13 +5387,18 @@ function IImageAttachment(_ref) {
5148
5387
  ev.preventDefault();
5149
5388
  setLoading(true);
5150
5389
  setError(undefined);
5390
+
5391
+ if (!file) {
5392
+ return Promise.resolve();
5393
+ }
5394
+
5151
5395
  var endpoint = Ctx.path + "@upload/image";
5152
5396
  return Promise.resolve(Ctx.client.upload(endpoint, file)).then(function (req) {
5153
5397
  var _exit;
5154
5398
 
5155
5399
  function _temp4(_result) {
5156
5400
  if (_exit) return _result;
5157
- setFile(undefined);
5401
+ setFile(null);
5158
5402
  setLoading(false);
5159
5403
  Ctx.flash(intl.formatMessage(genericFileMessages.image_uploaded), 'success');
5160
5404
  Ctx.refresh();
@@ -5435,7 +5679,7 @@ function IMultiImageAttachment(_ref) {
5435
5679
  fileKey = _useState[0],
5436
5680
  setFileKey = _useState[1];
5437
5681
 
5438
- var _useState2 = useState(null),
5682
+ var _useState2 = useState(undefined),
5439
5683
  file = _useState2[0],
5440
5684
  setFile = _useState2[1];
5441
5685
 
@@ -5468,6 +5712,11 @@ function IMultiImageAttachment(_ref) {
5468
5712
 
5469
5713
  setLoading(true);
5470
5714
  setError(undefined);
5715
+
5716
+ if (!file) {
5717
+ return Promise.resolve();
5718
+ }
5719
+
5471
5720
  var endpoint = Ctx.path + "@upload/images/" + fileKey;
5472
5721
  return Promise.resolve(Ctx.client.upload(endpoint, file)).then(function (req) {
5473
5722
  var _exit;
@@ -5570,7 +5819,7 @@ function IMultiImageAttachment(_ref) {
5570
5819
  field: "images/" + key,
5571
5820
  value: values['images'][key],
5572
5821
  ns: "guillotina.contrib.image.behaviors.IMultiImageAttachment.images",
5573
- schema: properties['images']['additionalProperties'],
5822
+ schema: get(properties, 'images.additionalProperties', {}),
5574
5823
  modifyContent: false,
5575
5824
  required: false
5576
5825
  }), jsx("div", {
@@ -5860,7 +6109,7 @@ function IMultiImageOrderedAttachment(_ref2) {
5860
6109
  sortedList = _useState2[0],
5861
6110
  setSortedList = _useState2[1];
5862
6111
 
5863
- var _useState3 = useState(null),
6112
+ var _useState3 = useState(undefined),
5864
6113
  file = _useState3[0],
5865
6114
  setFile = _useState3[1];
5866
6115
 
@@ -6004,7 +6253,7 @@ function IMultiImageOrderedAttachment(_ref2) {
6004
6253
  field: "images/" + key,
6005
6254
  value: values['images'][key],
6006
6255
  ns: "guillotina.contrib.image.behaviors.IMultiImageAttachment.images",
6007
- schema: properties['images']['additionalProperties'],
6256
+ schema: get(properties, 'images.additionalProperties', {}),
6008
6257
  modifyContent: false,
6009
6258
  required: false
6010
6259
  }), jsx("div", {
@@ -6059,163 +6308,6 @@ function IMultiImageOrderedAttachment(_ref2) {
6059
6308
  });
6060
6309
  }
6061
6310
 
6062
- var base = {
6063
- local: {
6064
- roleperm: {},
6065
- prinperm: {},
6066
- prinrole: {}
6067
- },
6068
- inherit: []
6069
- };
6070
- var Sharing = /*#__PURE__*/function () {
6071
- function Sharing(element) {
6072
- this.local = void 0;
6073
- this.inherit = void 0;
6074
- Object.assign(this, element || base);
6075
- }
6076
-
6077
- var _proto = Sharing.prototype;
6078
-
6079
- _proto.getRole = function getRole(role) {
6080
- return this.local.roleperm[role];
6081
- };
6082
-
6083
- _proto.getPrincipals = function getPrincipals(principal) {
6084
- return this.local.prinperm[principal];
6085
- };
6086
-
6087
- _proto.getPrinroles = function getPrinroles(role) {
6088
- return this.local.prinrole[role];
6089
- };
6090
-
6091
- _createClass(Sharing, [{
6092
- key: "roles",
6093
- get: function get() {
6094
- return Object.keys(this.local.roleperm);
6095
- }
6096
- }, {
6097
- key: "principals",
6098
- get: function get() {
6099
- return Object.keys(this.local.prinperm);
6100
- }
6101
- }, {
6102
- key: "prinrole",
6103
- get: function get() {
6104
- return Object.keys(this.local.prinrole);
6105
- }
6106
- }]);
6107
-
6108
- return Sharing;
6109
- }();
6110
-
6111
- var ItemModel = /*#__PURE__*/function () {
6112
- function ItemModel(item, url) {
6113
- if (url === void 0) {
6114
- url = '';
6115
- }
6116
-
6117
- this.item = void 0;
6118
- this.url = void 0;
6119
- this.item = item;
6120
- this.url = url;
6121
- }
6122
-
6123
- _createClass(ItemModel, [{
6124
- key: "path",
6125
- get: function get() {
6126
- var item = this.item['@id'] ? this.item['@id'] : this.item['@absolute_url'];
6127
- var path = item.split('//')[1].split('/').splice(1).join('/');
6128
- path = "/" + path + "/";
6129
-
6130
- if (this.url.length > 0) {
6131
- if (this.url.startsWith('/')) {
6132
- path = path.replace(this.url.substring(1), '');
6133
- } else {
6134
- path = path.replace(this.url, '');
6135
- }
6136
- }
6137
-
6138
- return path;
6139
- }
6140
- }, {
6141
- key: "name",
6142
- get: function get() {
6143
- return this.item.title || this.item['@name'];
6144
- }
6145
- }, {
6146
- key: "icon",
6147
- get: function get() {
6148
- var cfg = useConfig();
6149
-
6150
- if (cfg.icons && cfg.icons[this.type]) {
6151
- return cfg.icons[this.type];
6152
- }
6153
-
6154
- switch (this.type) {
6155
- case 'GroupManager':
6156
- return 'fas fa-users-cog';
6157
-
6158
- case 'UserManager':
6159
- return 'fas fa-user-cog';
6160
-
6161
- case 'User':
6162
- return 'fas fa-user';
6163
-
6164
- case 'Group':
6165
- return 'fas fa-users';
6166
-
6167
- case 'Folder':
6168
- return 'fas fa-folder';
6169
-
6170
- default:
6171
- return 'fas fa-file';
6172
- }
6173
- }
6174
- }, {
6175
- key: "fullPath",
6176
- get: function get() {
6177
- return this.url + this.item.id;
6178
- }
6179
- }, {
6180
- key: "id",
6181
- get: function get() {
6182
- if (this.item.id) {
6183
- return this.item.id;
6184
- }
6185
-
6186
- var id = this.item['@id'].split('&')[0].split('/');
6187
- return id[id.length - 1];
6188
- }
6189
- }, {
6190
- key: "uid",
6191
- get: function get() {
6192
- return this.item['@uid'];
6193
- }
6194
- }, {
6195
- key: "type",
6196
- get: function get() {
6197
- return this.item['@type'] || this.item.type_name;
6198
- }
6199
- }, {
6200
- key: "title",
6201
- get: function get() {
6202
- return this.item.title;
6203
- }
6204
- }, {
6205
- key: "created",
6206
- get: function get() {
6207
- return this.item.creation_date ? formatDate(this.item.creation_date) : '';
6208
- }
6209
- }, {
6210
- key: "updated",
6211
- get: function get() {
6212
- return this.item.modification_date ? formatDate(this.item.modification_date) : '';
6213
- }
6214
- }]);
6215
-
6216
- return ItemModel;
6217
- }();
6218
-
6219
6311
  var messages$1 = defineMessages({
6220
6312
  status_changed_ok: {
6221
6313
  id: "status_changed_ok",
@@ -6291,13 +6383,12 @@ function IWorkflow() {
6291
6383
  definition = _useState[0],
6292
6384
  setDefinition = _useState[1];
6293
6385
 
6294
- var _useState2 = useState(null),
6386
+ var _useState2 = useState(undefined),
6295
6387
  workflowAction = _useState2[0],
6296
6388
  setWorkflowAction = _useState2[1];
6297
6389
 
6298
- var model = new ItemModel(Ctx.context);
6299
6390
  var vocabulary = useVocabulary('workflow_states');
6300
- var currentState = model.item['guillotina.contrib.workflows.interfaces.IWorkflowBehavior']['review_state'];
6391
+ var currentState = Ctx.context['guillotina.contrib.workflows.interfaces.IWorkflowBehavior']['review_state'];
6301
6392
  useEffect(function () {
6302
6393
  loadDefinition();
6303
6394
  }, [Ctx.path]);
@@ -6317,7 +6408,7 @@ function IWorkflow() {
6317
6408
  }
6318
6409
 
6319
6410
  Ctx.refresh();
6320
- setWorkflowAction(null);
6411
+ setWorkflowAction(undefined);
6321
6412
  });
6322
6413
  });
6323
6414
  } catch (e) {
@@ -6326,21 +6417,23 @@ function IWorkflow() {
6326
6417
  };
6327
6418
 
6328
6419
  var getStateTitle = function getStateTitle() {
6329
- var _vocabulary$data, _vocabulary$data$item;
6420
+ var _vocabulary$data$item, _vocabulary$data;
6421
+
6422
+ if (((_vocabulary$data$item = (_vocabulary$data = vocabulary.data) == null ? void 0 : _vocabulary$data.items) != null ? _vocabulary$data$item : []).length > 0) {
6423
+ var _vocabulary$data2;
6330
6424
 
6331
- if (((_vocabulary$data = vocabulary.data) == null ? void 0 : (_vocabulary$data$item = _vocabulary$data.items) == null ? void 0 : _vocabulary$data$item.length) > 0) {
6332
- var vocabularyValue = vocabulary.data.items.find(function (item) {
6425
+ var vocabularyValue = vocabulary == null ? void 0 : (_vocabulary$data2 = vocabulary.data) == null ? void 0 : _vocabulary$data2.items.find(function (item) {
6333
6426
  return item.token === currentState;
6334
6427
  });
6335
6428
 
6336
6429
  if (vocabularyValue) {
6337
- var translatedValue = get$1(vocabularyValue, "title.translated_title." + intl.locale, null);
6430
+ var translatedValue = get(vocabularyValue, "title.translated_title." + intl.locale, null);
6338
6431
 
6339
6432
  if (translatedValue !== null) {
6340
6433
  return translatedValue;
6341
6434
  }
6342
6435
 
6343
- var titleValue = get$1(vocabularyValue, "title.title." + intl.locale, null);
6436
+ var titleValue = get(vocabularyValue, "title.title." + intl.locale, null);
6344
6437
 
6345
6438
  if (titleValue !== null) {
6346
6439
  return titleValue;
@@ -6356,7 +6449,7 @@ function IWorkflow() {
6356
6449
  children: [workflowAction && jsx(Confirm, {
6357
6450
  loading: loading,
6358
6451
  onCancel: function onCancel() {
6359
- return setWorkflowAction(null);
6452
+ return setWorkflowAction(undefined);
6360
6453
  },
6361
6454
  onConfirm: doWorkflowAction,
6362
6455
  message: intl.formatMessage(messages$1.confirm_message, {
@@ -6382,7 +6475,7 @@ function IWorkflow() {
6382
6475
  onClick: function onClick() {
6383
6476
  return setWorkflowAction(transition['@id'].split('@workflow')[1].slice(1));
6384
6477
  },
6385
- children: get$1(transition, "metadata.translated_title." + intl.locale, transition.title)
6478
+ children: get(transition, "metadata.translated_title." + intl.locale, transition.title)
6386
6479
  }, transition['@id']);
6387
6480
  })]
6388
6481
  })]
@@ -6408,14 +6501,17 @@ function PanelActions() {
6408
6501
 
6409
6502
  return jsx(Fragment$1, {
6410
6503
  children: Object.keys(ACTIONS_OBJECT).map(function (actionKey) {
6411
- if (hasPerm(ACTIONS_OBJECT[actionKey].perms)) {
6504
+ var actionKeyTyped = actionKey;
6505
+ var actionObject = ACTIONS_OBJECT[actionKeyTyped];
6506
+
6507
+ if (hasPerm(actionObject.perms)) {
6412
6508
  return jsx("button", {
6413
6509
  className: "button mr-4",
6414
6510
  onClick: function onClick() {
6415
- onAction(actionKey);
6511
+ onAction(actionKeyTyped);
6416
6512
  },
6417
- children: ACTIONS_OBJECT[actionKey].text
6418
- }, "panel_action_" + ACTIONS_OBJECT[actionKey].text);
6513
+ children: actionObject.text
6514
+ }, "panel_action_" + actionObject.text);
6419
6515
  }
6420
6516
  })
6421
6517
  });
@@ -6457,7 +6553,8 @@ var messages$2 = defineMessages({
6457
6553
  "value": "Installed Addons"
6458
6554
  }]
6459
6555
  }
6460
- });
6556
+ }); // TODO: Refactor without useAsync... just crudContext
6557
+
6461
6558
  function PanelAddons() {
6462
6559
  var _state$data$available, _state$data, _state$data$available2, _state$data2, _state$data$installed, _state$data3, _state$data$installed2, _state$data4;
6463
6560
 
@@ -6612,8 +6709,9 @@ var prepareData = function prepareData(result) {
6612
6709
 
6613
6710
  var arrayToObject = function arrayToObject(array) {
6614
6711
  return array.reduce(function (obj, item) {
6615
- obj[item.id] = item;
6616
- return obj;
6712
+ var _extends2;
6713
+
6714
+ return _extends({}, obj, (_extends2 = {}, _extends2[item.id] = item, _extends2));
6617
6715
  }, {});
6618
6716
  };
6619
6717
 
@@ -6775,8 +6873,9 @@ function ItemsActionsProvider(_ref) {
6775
6873
 
6776
6874
  function onSelectAllItems(checked) {
6777
6875
  setSelected(items.reduce(function (obj, item) {
6778
- obj[item.path + "/" + item.id] = checked;
6779
- return obj;
6876
+ var _extends2;
6877
+
6878
+ return _extends({}, obj, (_extends2 = {}, _extends2[item.path + "/" + item.id] = checked, _extends2));
6780
6879
  }, {
6781
6880
  all: checked
6782
6881
  }));
@@ -6784,11 +6883,11 @@ function ItemsActionsProvider(_ref) {
6784
6883
 
6785
6884
  function onSelectOneItem(item) {
6786
6885
  setSelected(function (state) {
6787
- var _extends2;
6886
+ var _extends3;
6788
6887
 
6789
- return _extends({}, state, (_extends2 = {
6888
+ return _extends({}, state, (_extends3 = {
6790
6889
  all: false
6791
- }, _extends2[item.path + "/" + item.id] = !state[item.path + "/" + item.id], _extends2));
6890
+ }, _extends3[item.path + "/" + item.id] = !state[item.path + "/" + item.id], _extends3));
6792
6891
  });
6793
6892
  }
6794
6893
 
@@ -6810,13 +6909,38 @@ function ItemsActionsProvider(_ref) {
6810
6909
  children: children
6811
6910
  });
6812
6911
  }
6813
- function AllItemsCheckbox(_ref2) {
6814
- var dataTest = _ref2.dataTest;
6815
6912
 
6913
+ var useItemsActions = function useItemsActions() {
6816
6914
  var _useContext = useContext(ItemsActionsCtx),
6915
+ onAction = _useContext.onAction,
6916
+ onSelectOneItem = _useContext.onSelectOneItem,
6817
6917
  onSelectAllItems = _useContext.onSelectAllItems,
6818
6918
  selected = _useContext.selected;
6819
6919
 
6920
+ if (!onAction || !onSelectOneItem || !onSelectAllItems || !selected) {
6921
+ throw new Error('useItemsActions must be used inside ItemsActionsProvider');
6922
+ }
6923
+
6924
+ return {
6925
+ onAction: onAction,
6926
+ onSelectOneItem: onSelectOneItem,
6927
+ onSelectAllItems: onSelectAllItems,
6928
+ selected: selected
6929
+ };
6930
+ };
6931
+ /**
6932
+ * Checkbox component without props that consume the ItemsActionsContext
6933
+ * and it select/unselect all items of the page.
6934
+ */
6935
+
6936
+
6937
+ function AllItemsCheckbox(_ref2) {
6938
+ var dataTest = _ref2.dataTest;
6939
+
6940
+ var _useItemsActions = useItemsActions(),
6941
+ onSelectAllItems = _useItemsActions.onSelectAllItems,
6942
+ selected = _useItemsActions.selected;
6943
+
6820
6944
  return jsx(Checkbox, {
6821
6945
  onChange: onSelectAllItems,
6822
6946
  checked: selected.all,
@@ -6827,9 +6951,9 @@ function ItemCheckbox(_ref3) {
6827
6951
  var item = _ref3.item,
6828
6952
  dataTest = _ref3.dataTest;
6829
6953
 
6830
- var _useContext2 = useContext(ItemsActionsCtx),
6831
- selected = _useContext2.selected,
6832
- onSelectOneItem = _useContext2.onSelectOneItem;
6954
+ var _useItemsActions2 = useItemsActions(),
6955
+ selected = _useItemsActions2.selected,
6956
+ onSelectOneItem = _useItemsActions2.onSelectOneItem;
6833
6957
 
6834
6958
  var absId = item.path + "/" + item.id;
6835
6959
  var value = selected[absId];
@@ -6841,14 +6965,18 @@ function ItemCheckbox(_ref3) {
6841
6965
  dataTest: dataTest
6842
6966
  });
6843
6967
  }
6968
+ /**
6969
+ * Dropdown to choose some action to apply to the selected items.
6970
+ */
6971
+
6844
6972
  function ItemsActionsDropdown() {
6845
6973
  var intl = useIntl();
6846
6974
  var ACTIONS_OBJECT = getActionsObject(intl, true);
6847
6975
  var traversal = useTraversal();
6848
6976
 
6849
- var _useContext3 = useContext(ItemsActionsCtx),
6850
- selected = _useContext3.selected,
6851
- onAction = _useContext3.onAction;
6977
+ var _useItemsActions3 = useItemsActions(),
6978
+ selected = _useItemsActions3.selected,
6979
+ onAction = _useItemsActions3.onAction;
6852
6980
 
6853
6981
  var disabled = Object.values(selected).every(function (v) {
6854
6982
  return !v;
@@ -6932,6 +7060,7 @@ function Pagination(_ref) {
6932
7060
  "aria-label": "pagination",
6933
7061
  children: [jsx("a", {
6934
7062
  className: "pagination-previous is-small",
7063
+ // disabled={current === 0}
6935
7064
  onClick: function onClick() {
6936
7065
  return current > 0 ? doPaginate(current - 1) : null;
6937
7066
  },
@@ -6943,6 +7072,7 @@ function Pagination(_ref) {
6943
7072
  })
6944
7073
  }), jsx("a", {
6945
7074
  className: "pagination-next is-small",
7075
+ // disabled={current >= maxPages - 1}
6946
7076
  onClick: function onClick() {
6947
7077
  return doPaginate(current + 1);
6948
7078
  },
@@ -6957,6 +7087,170 @@ function Pagination(_ref) {
6957
7087
  });
6958
7088
  }
6959
7089
 
7090
+ var base = {
7091
+ local: {
7092
+ roleperm: {},
7093
+ prinperm: {},
7094
+ prinrole: {}
7095
+ },
7096
+ inherit: []
7097
+ };
7098
+ var Sharing = /*#__PURE__*/function () {
7099
+ function Sharing(element) {
7100
+ this.local = void 0;
7101
+ this.inherit = void 0;
7102
+
7103
+ if (element === undefined) {
7104
+ throw new Error('Sharing element is undefined');
7105
+ }
7106
+
7107
+ this.local = element.local || base.local;
7108
+ this.inherit = element.inherit || base.inherit;
7109
+ }
7110
+
7111
+ var _proto = Sharing.prototype;
7112
+
7113
+ _proto.getRole = function getRole(role) {
7114
+ return this.local.roleperm[role];
7115
+ };
7116
+
7117
+ _proto.getPrincipals = function getPrincipals(principal) {
7118
+ return this.local.prinperm[principal];
7119
+ };
7120
+
7121
+ _proto.getPrinroles = function getPrinroles(role) {
7122
+ return this.local.prinrole[role];
7123
+ };
7124
+
7125
+ _createClass(Sharing, [{
7126
+ key: "roles",
7127
+ get: function get() {
7128
+ return Object.keys(this.local.roleperm);
7129
+ }
7130
+ }, {
7131
+ key: "principals",
7132
+ get: function get() {
7133
+ return Object.keys(this.local.prinperm);
7134
+ }
7135
+ }, {
7136
+ key: "prinrole",
7137
+ get: function get() {
7138
+ return Object.keys(this.local.prinrole);
7139
+ }
7140
+ }]);
7141
+
7142
+ return Sharing;
7143
+ }();
7144
+
7145
+ var ItemModel = /*#__PURE__*/function () {
7146
+ function ItemModel(item, url) {
7147
+ if (url === void 0) {
7148
+ url = '';
7149
+ }
7150
+
7151
+ this.item = void 0;
7152
+ this.url = void 0;
7153
+ this.item = item;
7154
+ this.url = url;
7155
+ }
7156
+
7157
+ _createClass(ItemModel, [{
7158
+ key: "path",
7159
+ get: function get() {
7160
+ // Compat
7161
+ var item = this.item['@id'] ? this.item['@id'] : this.item['@absolute_url'];
7162
+ var path = item.split('//')[1].split('/').splice(1).join('/');
7163
+ path = "/" + path + "/";
7164
+
7165
+ if (this.url.length > 0) {
7166
+ if (this.url.startsWith('/')) {
7167
+ path = path.replace(this.url.substring(1), '');
7168
+ } else {
7169
+ path = path.replace(this.url, '');
7170
+ }
7171
+ }
7172
+
7173
+ return path;
7174
+ }
7175
+ }, {
7176
+ key: "name",
7177
+ get: function get() {
7178
+ return this.item.title || this.item['@name'];
7179
+ }
7180
+ }, {
7181
+ key: "icon",
7182
+ get: function get() {
7183
+ var cfg = useConfig();
7184
+
7185
+ if (cfg.icons && cfg.icons[this.type]) {
7186
+ return cfg.icons[this.type];
7187
+ }
7188
+
7189
+ switch (this.type) {
7190
+ case 'GroupManager':
7191
+ return 'fas fa-users-cog';
7192
+
7193
+ case 'UserManager':
7194
+ return 'fas fa-user-cog';
7195
+
7196
+ case 'User':
7197
+ return 'fas fa-user';
7198
+
7199
+ case 'Group':
7200
+ return 'fas fa-users';
7201
+
7202
+ case 'Folder':
7203
+ return 'fas fa-folder';
7204
+
7205
+ default:
7206
+ return 'fas fa-file';
7207
+ }
7208
+ }
7209
+ }, {
7210
+ key: "fullPath",
7211
+ get: function get() {
7212
+ return this.url + this.id;
7213
+ }
7214
+ }, {
7215
+ key: "id",
7216
+ get: function get() {
7217
+ if ('id' in this.item) {
7218
+ return this.item.id;
7219
+ }
7220
+
7221
+ var id = this.item['@id'].split('&')[0].split('/');
7222
+ return id[id.length - 1];
7223
+ }
7224
+ }, {
7225
+ key: "uid",
7226
+ get: function get() {
7227
+ return this.item['@uid'];
7228
+ }
7229
+ }, {
7230
+ key: "type",
7231
+ get: function get() {
7232
+ return this.item['@type'] || this.item.type_name;
7233
+ }
7234
+ }, {
7235
+ key: "title",
7236
+ get: function get() {
7237
+ return this.item.title;
7238
+ }
7239
+ }, {
7240
+ key: "created",
7241
+ get: function get() {
7242
+ return this.item.creation_date ? formatDate(this.item.creation_date) : '';
7243
+ }
7244
+ }, {
7245
+ key: "updated",
7246
+ get: function get() {
7247
+ return this.item.modification_date ? formatDate(this.item.modification_date) : '';
7248
+ }
7249
+ }]);
7250
+
7251
+ return ItemModel;
7252
+ }();
7253
+
6960
7254
  function Item(_ref) {
6961
7255
  var item = _ref.item,
6962
7256
  icon = _ref.icon;
@@ -7097,11 +7391,11 @@ function SearchOptionsLabels(_ref) {
7097
7391
  renderValue = _useState[0],
7098
7392
  setRenderValue = _useState[1];
7099
7393
 
7100
- var defaultRenderValue = location.get(query);
7394
+ var defaultRenderValue = location.get(query) || '';
7101
7395
  useEffect(function () {
7102
7396
  var value = defaultRenderValue;
7103
7397
 
7104
- if ((options != null ? options : []).length > 0) {
7398
+ if (options && (options != null ? options : []).length > 0) {
7105
7399
  var option = options.find(function (item) {
7106
7400
  return item.value === value;
7107
7401
  });
@@ -7150,14 +7444,16 @@ function SearchVocabularyLabels(_ref) {
7150
7444
  setRenderValue = _useState[1];
7151
7445
 
7152
7446
  var vocabulary = useVocabulary(vocabularyName);
7153
- var defaultRenderValue = location.get(query);
7447
+ var defaultRenderValue = location.get(query) || '';
7154
7448
  useEffect(function () {
7155
7449
  var _vocabulary$data$item, _vocabulary$data;
7156
7450
 
7157
7451
  var value = defaultRenderValue;
7158
7452
 
7159
7453
  if (((_vocabulary$data$item = vocabulary == null ? void 0 : (_vocabulary$data = vocabulary.data) == null ? void 0 : _vocabulary$data.items) != null ? _vocabulary$data$item : []).length > 0) {
7160
- var vocabularyValue = vocabulary.data.items.find(function (item) {
7454
+ var _vocabulary$data2;
7455
+
7456
+ var vocabularyValue = vocabulary == null ? void 0 : (_vocabulary$data2 = vocabulary.data) == null ? void 0 : _vocabulary$data2.items.find(function (item) {
7161
7457
  return item.token === value;
7162
7458
  });
7163
7459
 
@@ -7191,7 +7487,7 @@ function SearchVocabularyLabels(_ref) {
7191
7487
  return null;
7192
7488
  }
7193
7489
 
7194
- var initialState$2 = {
7490
+ var initialState$3 = {
7195
7491
  page: 0,
7196
7492
  items: [],
7197
7493
  loading: true,
@@ -7210,7 +7506,7 @@ function PanelItems() {
7210
7506
  var intl = useIntl();
7211
7507
  var Ctx = useTraversal();
7212
7508
 
7213
- var _useSetState = useSetState(initialState$2),
7509
+ var _useSetState = useSetState(initialState$3),
7214
7510
  state = _useSetState[0],
7215
7511
  setState = _useSetState[1];
7216
7512
 
@@ -7226,7 +7522,7 @@ function PanelItems() {
7226
7522
  var page;
7227
7523
 
7228
7524
  try {
7229
- page = parseInt(location.get('page')) || 0;
7525
+ page = parseInt(location.get('page') || '0');
7230
7526
  } catch (_unused) {
7231
7527
  page = 0;
7232
7528
  }
@@ -7273,7 +7569,7 @@ function PanelItems() {
7273
7569
  var resultQueryParams = [];
7274
7570
  var resultDynamicLocation = [];
7275
7571
  filterSchema.forEach(function (filter) {
7276
- var itemParam = location.get(filter.attribute_key);
7572
+ var itemParam = location.get(filter.attribute_key) || '';
7277
7573
  resultDynamicLocation.push(itemParam);
7278
7574
 
7279
7575
  if (itemParam) {
@@ -7285,53 +7581,51 @@ function PanelItems() {
7285
7581
  var controller = new AbortController();
7286
7582
  if (Ctx.state.loading) return;
7287
7583
 
7288
- try {
7289
- setState({
7290
- loading: true,
7291
- total: Ctx.context.length
7292
- });
7293
- var get = Ctx.registry.get;
7294
- var fnName = get('searchEngineQueryParamsFunction', SearchEngine);
7295
-
7296
- if (sortParsed === undefined) {
7297
- var defaultSortValue = Ctx.registry.getDefaultSortValue(Ctx.context['@type'], {
7298
- key: 'id',
7299
- direction: 'des'
7584
+ var getData = function getData() {
7585
+ try {
7586
+ setState({
7587
+ loading: true,
7588
+ total: Ctx.context.length
7300
7589
  });
7301
- sortParsed = parser("_sort_" + defaultSortValue.direction + "=" + defaultSortValue.key);
7302
- }
7590
+ var get = Ctx.registry.get;
7591
+ var fnName = get('searchEngineQueryParamsFunction', SearchEngine);
7303
7592
 
7304
- var qsParsed = Ctx.client[fnName]({
7305
- path: Ctx.path,
7306
- start: page * PageSize,
7307
- pageSize: PageSize
7308
- });
7309
- var qs = '';
7593
+ if (sortParsed === undefined) {
7594
+ var defaultSortValue = Ctx.registry.getDefaultSortValue(Ctx.context['@type']);
7595
+ sortParsed = parser("_sort_" + defaultSortValue.direction + "=" + defaultSortValue.key);
7596
+ }
7597
+
7598
+ var qsParsed = Ctx.client.getQueryParamsSearchFunction(fnName)({
7599
+ path: Ctx.path,
7600
+ start: page * PageSize,
7601
+ pageSize: PageSize
7602
+ });
7603
+ var qs = '';
7310
7604
 
7311
- if (search || type || resultQueryParams.length > 0) {
7312
- var _searchParsed, _typeParsed, _sortParsed;
7605
+ if (search || type || resultQueryParams.length > 0) {
7606
+ var _searchParsed, _typeParsed, _sortParsed;
7313
7607
 
7314
- qs = buildQs([].concat(qsParsed, (_searchParsed = searchParsed) != null ? _searchParsed : [], (_typeParsed = typeParsed) != null ? _typeParsed : [], (_sortParsed = sortParsed) != null ? _sortParsed : [], resultQueryParams));
7315
- } else {
7316
- var _sortParsed2;
7608
+ qs = buildQs([].concat(qsParsed, (_searchParsed = searchParsed) != null ? _searchParsed : [], (_typeParsed = typeParsed) != null ? _typeParsed : [], (_sortParsed = sortParsed) != null ? _sortParsed : [], resultQueryParams));
7609
+ } else {
7610
+ var _sortParsed2;
7317
7611
 
7318
- qs = buildQs([].concat(qsParsed, (_sortParsed2 = sortParsed) != null ? _sortParsed2 : []));
7319
- }
7612
+ qs = buildQs([].concat(qsParsed, (_sortParsed2 = sortParsed) != null ? _sortParsed2 : []));
7613
+ }
7320
7614
 
7321
- var signal = controller.signal;
7322
- return Promise.resolve(Ctx.client.search(Ctx.path, qs, false, false, {
7323
- signal: signal
7324
- })).then(function (data) {
7325
- setState({
7326
- items: data.member,
7327
- loading: false,
7328
- total: data.items_count
7615
+ var signal = controller.signal;
7616
+ return Promise.resolve(Ctx.client.search(Ctx.path, qs, false, false, signal)).then(function (data) {
7617
+ setState({
7618
+ items: data.items,
7619
+ loading: false,
7620
+ total: data.items_count
7621
+ });
7329
7622
  });
7330
- });
7331
- } catch (e) {
7332
- Promise.reject(e);
7333
- }
7623
+ } catch (e) {
7624
+ return Promise.reject(e);
7625
+ }
7626
+ };
7334
7627
 
7628
+ getData();
7335
7629
  return function () {
7336
7630
  controller.abort();
7337
7631
  };
@@ -7376,12 +7670,14 @@ function PanelItems() {
7376
7670
  var _filter$values;
7377
7671
 
7378
7672
  if (filter.type === 'select' && ((_filter$values = filter.values) != null ? _filter$values : []).length > 0) {
7673
+ var _filter$values2;
7674
+
7379
7675
  return jsx(Select, {
7380
7676
  id: filter.attribute_key,
7381
7677
  placeholder: filter.label,
7382
7678
  appendDefault: true,
7383
7679
  classWrap: "is-size-7 is-fullwidth",
7384
- options: filter.values,
7680
+ options: (_filter$values2 = filter.values) != null ? _filter$values2 : [],
7385
7681
  value: location.get(filter.attribute_key) || '',
7386
7682
  dataTest: "filterInput" + filter.attribute_key,
7387
7683
  onChange: function onChange(value) {
@@ -7448,7 +7744,7 @@ function PanelItems() {
7448
7744
  var filterData = location.get(filter.attribute_key);
7449
7745
 
7450
7746
  if (filterData) {
7451
- var _filter$values2;
7747
+ var _filter$values3;
7452
7748
 
7453
7749
  if (filter.type === 'select' && filter.vocabulary) {
7454
7750
  return jsx("div", {
@@ -7457,7 +7753,7 @@ function PanelItems() {
7457
7753
  vocabularyName: filter == null ? void 0 : filter.vocabulary
7458
7754
  })
7459
7755
  }, filter.attribute_key);
7460
- } else if (filter.type === 'select' && ((_filter$values2 = filter.values) != null ? _filter$values2 : []).length > 0) {
7756
+ } else if (filter.type === 'select' && ((_filter$values3 = filter.values) != null ? _filter$values3 : []).length > 0) {
7461
7757
  return jsx("div", {
7462
7758
  children: jsx(SearchOptionsLabels, {
7463
7759
  query: filter.attribute_key,
@@ -7503,7 +7799,7 @@ function PanelItems() {
7503
7799
  className: "has-text-info is-flex is-align-items-center",
7504
7800
  children: [jsx("span", {
7505
7801
  children: column.label
7506
- }), getIcon(column.key, column.isSortable)]
7802
+ }), getIcon(column.key, !!column.isSortable)]
7507
7803
  })
7508
7804
  }, "table-col-" + column.label);
7509
7805
  }), jsx("th", {
@@ -7514,7 +7810,7 @@ function PanelItems() {
7514
7810
  children: [items && items.map(function (item) {
7515
7811
  return jsx(RItem, {
7516
7812
  item: item,
7517
- search: search,
7813
+ search: search != null ? search : '',
7518
7814
  columns: columns
7519
7815
  }, item['@uid']);
7520
7816
  }), items && items.length === 0 && jsx("tr", {
@@ -7538,17 +7834,19 @@ function PanelItems() {
7538
7834
  }
7539
7835
 
7540
7836
  function BehaviorsView(_ref) {
7837
+ var _context$__behaviors_;
7838
+
7541
7839
  var context = _ref.context,
7542
7840
  schema = _ref.schema;
7543
7841
  var Ctx = useTraversal();
7544
7842
  var getBehavior = Ctx.registry.getBehavior;
7545
- var behaviors = [].concat(context.__behaviors__, context['@static_behaviors']);
7843
+ var behaviors = [].concat((_context$__behaviors_ = context.__behaviors__) != null ? _context$__behaviors_ : [], Object(context['@static_behaviors']));
7546
7844
 
7547
- var GetBehavior = function GetBehavior(b) {
7548
- var Cls = getBehavior(b, BehaviorNotImplemented);
7845
+ var GetBehavior = function GetBehavior(behaviorName) {
7846
+ var Cls = getBehavior(behaviorName, BehaviorNotImplemented);
7549
7847
  return jsx(Cls, {
7550
- values: context[b],
7551
- properties: get$1(schema, ['definitions', b, 'properties'], {})
7848
+ values: context[behaviorName],
7849
+ properties: get(schema, ['definitions', behaviorName, 'properties'], {})
7552
7850
  });
7553
7851
  };
7554
7852
 
@@ -7644,9 +7942,11 @@ function PanelProperties() {
7644
7942
  var properties = Object.keys((schema == null ? void 0 : (_schema$data = schema.data) == null ? void 0 : _schema$data.properties) || []).filter(function (key) {
7645
7943
  return !ignoreFields.includes(key);
7646
7944
  }).map(function (key) {
7945
+ var _schema$data2;
7946
+
7647
7947
  return {
7648
7948
  key: key,
7649
- value: schema.data.properties[key]
7949
+ value: schema == null ? void 0 : (_schema$data2 = schema.data) == null ? void 0 : _schema$data2.properties[key]
7650
7950
  };
7651
7951
  });
7652
7952
  useEffect(function () {
@@ -7658,7 +7958,7 @@ function PanelProperties() {
7658
7958
  setSchema({
7659
7959
  loading: true
7660
7960
  });
7661
- return Promise.resolve(Ctx.client.getTypeSchema(Ctx.path, model.type)).then(function (dataJson) {
7961
+ return Promise.resolve(Ctx.client.getTypeSchema(Ctx.path, Ctx.context.type_name)).then(function (dataJson) {
7662
7962
  setSchema({
7663
7963
  loading: false,
7664
7964
  data: dataJson
@@ -7733,7 +8033,7 @@ function PanelProperties() {
7733
8033
  }), jsx("td", {
7734
8034
  children: jsx(EditableField, {
7735
8035
  field: prop,
7736
- value: Ctx.context[prop],
8036
+ value: get(Ctx.context, prop, ''),
7737
8037
  modifyContent: false
7738
8038
  })
7739
8039
  })]
@@ -7757,7 +8057,7 @@ function PanelProperties() {
7757
8057
  })
7758
8058
  }), jsx("tbody", {
7759
8059
  children: properties.map(function (_ref) {
7760
- var _schema$data$required, _schema$data2;
8060
+ var _schema$data$required, _schema$data3;
7761
8061
 
7762
8062
  var key = _ref.key,
7763
8063
  value = _ref.value;
@@ -7770,10 +8070,10 @@ function PanelProperties() {
7770
8070
  }), jsx("td", {
7771
8071
  children: jsx(EditableField, {
7772
8072
  field: key,
7773
- value: Ctx.context[key],
8073
+ value: get(Ctx.context, key, ''),
7774
8074
  schema: value,
7775
8075
  modifyContent: modifyContent,
7776
- required: ((_schema$data$required = (_schema$data2 = schema.data) == null ? void 0 : _schema$data2.required) != null ? _schema$data$required : []).includes(key)
8076
+ required: ((_schema$data$required = (_schema$data3 = schema.data) == null ? void 0 : _schema$data3.required) != null ? _schema$data$required : []).includes(key)
7777
8077
  })
7778
8078
  })]
7779
8079
  }, 'prop' + key);
@@ -7809,14 +8109,6 @@ function PermissionPrinperm(_ref) {
7809
8109
  state = _useSetState[0],
7810
8110
  setState = _useSetState[1];
7811
8111
 
7812
- var getMultiples = function getMultiples(field, setter) {
7813
- return function (values) {
7814
- var _setter;
7815
-
7816
- setter((_setter = {}, _setter[field] = values, _setter));
7817
- };
7818
- };
7819
-
7820
8112
  var savePermission = function savePermission() {
7821
8113
  try {
7822
8114
  if (!state.principal || !state.setting || state.permission.length === 0) {
@@ -7866,7 +8158,7 @@ function PermissionPrinperm(_ref) {
7866
8158
  children: intl.formatMessage(genericMessages.select_principal)
7867
8159
  }), jsx(Select, {
7868
8160
  appendDefault: true,
7869
- options: principals,
8161
+ options: principals != null ? principals : [],
7870
8162
  onChange: function onChange(value) {
7871
8163
  return setState({
7872
8164
  principal: value
@@ -7880,8 +8172,12 @@ function PermissionPrinperm(_ref) {
7880
8172
  className: "label",
7881
8173
  children: intl.formatMessage(genericMessages.select_permissions)
7882
8174
  }), jsx(Select, {
7883
- options: permissions,
7884
- onChange: getMultiples('permission', setState),
8175
+ options: permissions != null ? permissions : [],
8176
+ onChange: function onChange(values) {
8177
+ setState({
8178
+ permission: values
8179
+ });
8180
+ },
7885
8181
  size: 5,
7886
8182
  multiple: true,
7887
8183
  dataTest: "selectPermissionsTest"
@@ -7932,14 +8228,6 @@ function PermissionPrinrole(_ref) {
7932
8228
  state = _useSetState[0],
7933
8229
  setState = _useSetState[1];
7934
8230
 
7935
- var getMultiples = function getMultiples(field, setter) {
7936
- return function (values) {
7937
- var _setter;
7938
-
7939
- setter((_setter = {}, _setter[field] = values, _setter));
7940
- };
7941
- };
7942
-
7943
8231
  var savePermission = function savePermission() {
7944
8232
  try {
7945
8233
  if (!state.principal || !state.setting || state.roles.length === 0) {
@@ -7989,7 +8277,7 @@ function PermissionPrinrole(_ref) {
7989
8277
  children: intl.formatMessage(genericMessages.select_principal)
7990
8278
  }), jsx(Select, {
7991
8279
  appendDefault: true,
7992
- options: principals,
8280
+ options: principals != null ? principals : [],
7993
8281
  onChange: function onChange(value) {
7994
8282
  return setState({
7995
8283
  principal: value
@@ -8004,7 +8292,11 @@ function PermissionPrinrole(_ref) {
8004
8292
  children: intl.formatMessage(genericMessages.select_role)
8005
8293
  }), jsx(Select, {
8006
8294
  options: roles,
8007
- onChange: getMultiples('roles', setState),
8295
+ onChange: function onChange(values) {
8296
+ setState({
8297
+ roles: values
8298
+ });
8299
+ },
8008
8300
  size: 5,
8009
8301
  multiple: true,
8010
8302
  dataTest: "selectRoleTest"
@@ -8055,14 +8347,6 @@ function PermissionRoleperm(_ref) {
8055
8347
  state = _useSetState[0],
8056
8348
  setState = _useSetState[1];
8057
8349
 
8058
- var getMultiples = function getMultiples(field, setter) {
8059
- return function (values) {
8060
- var _setter;
8061
-
8062
- setter((_setter = {}, _setter[field] = values, _setter));
8063
- };
8064
- };
8065
-
8066
8350
  var savePermission = function savePermission() {
8067
8351
  try {
8068
8352
  if (!state.role || !state.setting || state.permission.length === 0) {
@@ -8126,8 +8410,12 @@ function PermissionRoleperm(_ref) {
8126
8410
  className: "label",
8127
8411
  children: intl.formatMessage(genericMessages.select_permissions)
8128
8412
  }), jsx(Select, {
8129
- options: permissions,
8130
- onChange: getMultiples('permission', setState),
8413
+ options: permissions != null ? permissions : [],
8414
+ onChange: function onChange(values) {
8415
+ setState({
8416
+ permission: values
8417
+ });
8418
+ },
8131
8419
  dataTest: "selectPermissionsTest",
8132
8420
  size: 5,
8133
8421
  multiple: true
@@ -8260,7 +8548,18 @@ function PanelPermissions() {
8260
8548
  useEffect(function () {
8261
8549
  get('@sharing');
8262
8550
  }, [reset]);
8263
- var perms = new Sharing(result);
8551
+ var perms = useMemo(function () {
8552
+ if (result) {
8553
+ return new Sharing(result);
8554
+ }
8555
+
8556
+ return null;
8557
+ }, [result]);
8558
+
8559
+ if (perms === null) {
8560
+ return null;
8561
+ }
8562
+
8264
8563
  return jsxs("div", {
8265
8564
  className: "columns",
8266
8565
  children: [!loading && jsxs("div", {
@@ -8418,14 +8717,14 @@ function AddPermission(_ref) {
8418
8717
  return Promise.resolve(Ctx.client.getPrincipals(Ctx.path)).then(function (principalsData) {
8419
8718
  var groups = principalsData.groups.map(function (group) {
8420
8719
  return {
8421
- text: group.id,
8422
- value: group.id
8720
+ text: group['@name'],
8721
+ value: group['@name']
8423
8722
  };
8424
8723
  });
8425
8724
  var users = principalsData.users.map(function (user) {
8426
8725
  return {
8427
- text: user.fullname || user.id,
8428
- value: user.id
8726
+ text: user.fullname || user['@name'],
8727
+ value: user['@name']
8429
8728
  };
8430
8729
  });
8431
8730
  principals = [].concat(groups, users);
@@ -8496,18 +8795,6 @@ var prepareAvailable = function prepareAvailable(items, already, title) {
8496
8795
  text: "Add " + title
8497
8796
  };
8498
8797
  if (items.length === 0) return [];
8499
-
8500
- if (items[0] && typeof items[0] === 'string') {
8501
- return [def].concat(items.map(function (x) {
8502
- return {
8503
- value: x,
8504
- text: x
8505
- };
8506
- })).filter(function (item) {
8507
- return !already.includes(item.value);
8508
- });
8509
- }
8510
-
8511
8798
  return [def].concat(items).filter(function (item) {
8512
8799
  return !already.includes(item.value);
8513
8800
  });
@@ -8520,7 +8807,7 @@ function TagsWidget(_ref) {
8520
8807
  noData = _ref.noData,
8521
8808
  onChange = _ref.onChange,
8522
8809
  loading = _ref.loading;
8523
- var selectRef = useRef();
8810
+ var selectRef = useRef(null);
8524
8811
 
8525
8812
  var _useState = useState(items),
8526
8813
  result = _useState[0],
@@ -8568,7 +8855,7 @@ function TagsWidget(_ref) {
8568
8855
  marginBottom: '20px'
8569
8856
  },
8570
8857
  children: noData
8571
- }), available.length > 1 && jsx("li", {
8858
+ }), (available != null ? available : []).length > 1 && jsx("li", {
8572
8859
  className: "widget-list-add select is-small",
8573
8860
  children: jsx(Select, {
8574
8861
  options: availableData,
@@ -8586,13 +8873,13 @@ function TagsWidget(_ref) {
8586
8873
  });
8587
8874
  }
8588
8875
 
8589
- var initialState$3 = {
8590
- types: undefined
8876
+ var initialState$4 = {
8877
+ types: []
8591
8878
  };
8592
8879
  function CreateButton() {
8593
8880
  var intl = useIntl();
8594
8881
 
8595
- var _useSetState = useSetState(initialState$3),
8882
+ var _useSetState = useSetState(initialState$4),
8596
8883
  state = _useSetState[0],
8597
8884
  setState = _useSetState[1];
8598
8885
 
@@ -8640,7 +8927,8 @@ function CreateButton() {
8640
8927
 
8641
8928
  if (state.types && state.types.length === 0) {
8642
8929
  return null;
8643
- }
8930
+ } // Implement some kind of filtering
8931
+
8644
8932
 
8645
8933
  return jsx(Dropdown, {
8646
8934
  id: "dropdown-menu",
@@ -8679,7 +8967,7 @@ function ContextToolbar(_ref) {
8679
8967
  var AddButton = _ref.AddButton;
8680
8968
  var intl = useIntl();
8681
8969
 
8682
- var _useSetState2 = useSetState(initialState$3),
8970
+ var _useSetState2 = useSetState(initialState$4),
8683
8971
  state = _useSetState2[0],
8684
8972
  setState = _useSetState2[1];
8685
8973
 
@@ -8690,7 +8978,7 @@ function ContextToolbar(_ref) {
8690
8978
 
8691
8979
  var traversal = useTraversal();
8692
8980
  var Config = useConfig();
8693
- var searchText = location.get('q');
8981
+ var searchText = location.get('q') || '';
8694
8982
 
8695
8983
  var _useState = useState(searchText || ''),
8696
8984
  searchValue = _useState[0],
@@ -8703,14 +8991,13 @@ function ContextToolbar(_ref) {
8703
8991
  setSearchValue(searchText);
8704
8992
  }, [searchText]);
8705
8993
 
8706
- var onSearchQuery = function onSearchQuery(ev) {
8707
- var search = ev.target[0].value;
8994
+ var onSearchQuery = function onSearchQuery(event) {
8995
+ event.preventDefault();
8708
8996
  setLocation({
8709
- q: search,
8997
+ q: event.currentTarget.elements.filterInput.value,
8710
8998
  tab: 'Items',
8711
8999
  page: 0
8712
9000
  });
8713
- ev.preventDefault();
8714
9001
  };
8715
9002
 
8716
9003
  var onSearchByType = function onSearchByType(typeText) {
@@ -8744,7 +9031,8 @@ function ContextToolbar(_ref) {
8744
9031
  type: "text",
8745
9032
  className: "input is-size-7",
8746
9033
  placeholder: intl.formatMessage(genericMessages.search),
8747
- "data-test": "inputFilterTest"
9034
+ "data-test": "inputFilterTest",
9035
+ id: "filterInput"
8748
9036
  })
8749
9037
  }), jsx("div", {
8750
9038
  className: "control",
@@ -8771,7 +9059,9 @@ function ContextToolbar(_ref) {
8771
9059
  value: item
8772
9060
  };
8773
9061
  }),
8774
- onChange: onSearchByType
9062
+ onChange: function onChange(value) {
9063
+ return onSearchByType(value);
9064
+ }
8775
9065
  })
8776
9066
  }), traversal.hasPerm('guillotina.AddContent') && jsx("div", {
8777
9067
  className: "level-item",
@@ -8812,11 +9102,11 @@ function TabsPanel(_ref2) {
8812
9102
  location = _useLocation[0],
8813
9103
  setLocation = _useLocation[1];
8814
9104
 
8815
- if (location.get('tab')) {
8816
- currentTab = location.get('tab');
8817
- } else {
8818
- currentTab = currentTab || Object.keys(tabs)[0];
8819
- }
9105
+ currentTab = location.get('tab') || Object.keys(tabs)[0];
9106
+ /*if (!Object.keys(tabs).includes(currentTab)) {
9107
+ setLocation(defaultTab)
9108
+ currentTab = defaultTab
9109
+ }*/
8820
9110
 
8821
9111
  var _useState = useState(currentTab),
8822
9112
  current = _useState[0],
@@ -8825,7 +9115,7 @@ function TabsPanel(_ref2) {
8825
9115
  var CurrentComp = tabs[current] || fallback;
8826
9116
  React.useEffect(function () {
8827
9117
  if (Object.keys(tabs).includes(currentTab)) {
8828
- setTab(currentTab);
9118
+ setTab(currentTab); // setLocation({tab: currentTab})
8829
9119
  }
8830
9120
  }, [currentTab, tabs]);
8831
9121
 
@@ -8884,14 +9174,14 @@ var tabsPermissions = {
8884
9174
  Behaviors: 'guillotina.ModifyContent',
8885
9175
  Permissions: 'guillotina.SeePermissions'
8886
9176
  };
8887
- function FolderCtx(props) {
9177
+ function FolderCtx() {
8888
9178
  var ctx = useTraversal();
8889
9179
  var calculated = ctx.filterTabs(tabs, tabsPermissions);
8890
- return jsx(TabsPanel, _extends({
9180
+ return jsx(TabsPanel, {
8891
9181
  tabs: calculated,
8892
9182
  currentTab: "Items",
8893
- rightToolbar: jsx(ContextToolbar, _extends({}, props))
8894
- }, props));
9183
+ rightToolbar: jsx(ContextToolbar, {})
9184
+ });
8895
9185
  }
8896
9186
 
8897
9187
  var tabs$1 = {
@@ -8905,13 +9195,13 @@ var tabsPermissions$1 = {
8905
9195
  Behaviors: 'guillotina.ModifyContent',
8906
9196
  Permissions: 'guillotina.SeePermissions'
8907
9197
  };
8908
- function ItemCtx(props) {
9198
+ function ItemCtx() {
8909
9199
  var ctx = useTraversal();
8910
9200
  var calculated = ctx.filterTabs(tabs$1, tabsPermissions$1);
8911
- return jsx(TabsPanel, _extends({
9201
+ return jsx(TabsPanel, {
8912
9202
  tabs: calculated,
8913
9203
  currentTab: "Properties"
8914
- }, props));
9204
+ });
8915
9205
  }
8916
9206
 
8917
9207
  function _catch$7(body, recover) {
@@ -8930,8 +9220,9 @@ function _catch$7(body, recover) {
8930
9220
 
8931
9221
  function ApplicationCtx() {
8932
9222
  var intl = useIntl();
8933
- var context = useTraversal();
8934
- var databases = context.state.context.databases;
9223
+ var traversal = useTraversal();
9224
+ var appContext = traversal.state.context;
9225
+ var databases = appContext.databases;
8935
9226
  return jsxs(Fragment, {
8936
9227
  children: [jsx("h3", {
8937
9228
  children: intl.formatMessage({
@@ -8945,22 +9236,26 @@ function ApplicationCtx() {
8945
9236
  className: "container",
8946
9237
  children: [jsx(ItemTitle, {
8947
9238
  title: "Objects"
8948
- }), databases.map(function (db) {
8949
- return jsx(Item, {
8950
- item: {
8951
- id: db,
8952
- path: "/" + db + "/"
8953
- },
8954
- icon: 'fas fa-database'
8955
- }, db);
9239
+ }), jsx("table", {
9240
+ children: jsx("tbody", {
9241
+ children: databases.map(function (db) {
9242
+ return jsx(Item, {
9243
+ item: {
9244
+ id: db,
9245
+ path: "/" + db + "/"
9246
+ },
9247
+ icon: 'fas fa-database'
9248
+ }, db);
9249
+ })
9250
+ })
8956
9251
  })]
8957
9252
  })]
8958
9253
  });
8959
9254
  }
8960
9255
  function DatabaseCtx() {
8961
- var context = useTraversal();
8962
- var containers = context.state.context.containers;
8963
- var path = context.state.path;
9256
+ var traversal = useTraversal();
9257
+ var containers = traversal.state.context.containers;
9258
+ var path = traversal.state.path;
8964
9259
  return jsx(Fragment, {
8965
9260
  children: jsxs("div", {
8966
9261
  className: "container",
@@ -9248,17 +9543,17 @@ function UsersToolbar() {
9248
9543
 
9249
9544
  var searchText = location.get('q');
9250
9545
 
9251
- var onSearchQuery = function onSearchQuery(ev) {
9252
- var search = ev.target[0].value;
9546
+ var onSearchQuery = function onSearchQuery(event) {
9547
+ event.preventDefault();
9253
9548
  setLocation({
9254
- q: search,
9549
+ q: event.currentTarget.elements.filterInput.value,
9255
9550
  page: 0
9256
9551
  });
9257
- ev.preventDefault();
9258
- };
9552
+ }; // cleanup form on state.search change
9553
+
9259
9554
 
9260
9555
  useEffect(function () {
9261
- if (!searchText || searchText === '') {
9556
+ if (ref.current && (!searchText || searchText === '')) {
9262
9557
  ref.current.value = '';
9263
9558
  }
9264
9559
  }, [searchText]);
@@ -9278,7 +9573,8 @@ function UsersToolbar() {
9278
9573
  type: "text",
9279
9574
  className: "input is-size-7",
9280
9575
  placeholder: intl.formatMessage(genericMessages.search),
9281
- "data-test": "inputFilterTest"
9576
+ "data-test": "inputFilterTest",
9577
+ id: "filterInput"
9282
9578
  })
9283
9579
  }), jsx("div", {
9284
9580
  className: "control",
@@ -9310,12 +9606,12 @@ function UsersToolbar() {
9310
9606
  })]
9311
9607
  });
9312
9608
  }
9313
- function UsersCtx(props) {
9314
- return jsx(TabsPanel, _extends({
9609
+ function UsersCtx() {
9610
+ return jsx(TabsPanel, {
9315
9611
  tabs: tabs$3,
9316
9612
  currentTab: "Users",
9317
9613
  rightToolbar: jsx(UsersToolbar, {})
9318
- }, props));
9614
+ });
9319
9615
  }
9320
9616
  function UserCtx() {
9321
9617
  var intl = useIntl();
@@ -9332,9 +9628,10 @@ function UserCtx() {
9332
9628
  state = _useState[0],
9333
9629
  setState = _useState[1];
9334
9630
 
9631
+ var userDataContext = Ctx.context;
9335
9632
  var fields = {
9336
9633
  user_groups: [],
9337
- user_roles: Ctx.context.user_roles
9634
+ user_roles: userDataContext.user_roles
9338
9635
  };
9339
9636
 
9340
9637
  var _useRemoteField = useRemoteField(fields),
@@ -9438,7 +9735,7 @@ function UserCtx() {
9438
9735
  "value": "Username"
9439
9736
  }]
9440
9737
  }), ":", ' ']
9441
- }), ' ', Ctx.context.username, " (", Ctx.context.email, ")"]
9738
+ }), ' ', userDataContext.username, " (", userDataContext.email, ")"]
9442
9739
  }), jsxs("p", {
9443
9740
  children: [jsxs("label", {
9444
9741
  children: [' ', intl.formatMessage({
@@ -9448,7 +9745,7 @@ function UserCtx() {
9448
9745
  "value": "Creation Date"
9449
9746
  }]
9450
9747
  }), ":", ' ']
9451
- }), ' ', formatDate(Ctx.context.creation_date)]
9748
+ }), ' ', formatDate(userDataContext.creation_date)]
9452
9749
  }), jsxs("p", {
9453
9750
  children: [jsxs("label", {
9454
9751
  children: [' ', intl.formatMessage({
@@ -9458,7 +9755,7 @@ function UserCtx() {
9458
9755
  "value": "Modification Date"
9459
9756
  }]
9460
9757
  }), ":", ' ']
9461
- }), ' ', formatDate(Ctx.context.modification_date)]
9758
+ }), ' ', formatDate(userDataContext.modification_date)]
9462
9759
  }), jsx(Button, {
9463
9760
  className: "is-size-7 is-info",
9464
9761
  onClick: function onClick() {
@@ -9477,7 +9774,7 @@ function UserCtx() {
9477
9774
  onSubmit: function onSubmit(ev) {
9478
9775
  return updateObject(ev);
9479
9776
  },
9480
- formData: Ctx.context,
9777
+ formData: userDataContext,
9481
9778
  exclude: ['password'],
9482
9779
  remotes: remotes,
9483
9780
  submitButton: false,
@@ -9491,7 +9788,7 @@ function UserCtx() {
9491
9788
  className: "column",
9492
9789
  children: [jsx(TagsWidget, {
9493
9790
  onChange: updateRemote('user_groups'),
9494
- items: Ctx.context.user_groups,
9791
+ items: userDataContext.user_groups,
9495
9792
  title: "Groups",
9496
9793
  noData: intl.formatMessage({
9497
9794
  id: "there_is_no_groups_for_this_user",
@@ -9512,7 +9809,12 @@ function UserCtx() {
9512
9809
  "value": "The user doesn't have any role"
9513
9810
  }]
9514
9811
  }),
9515
- available: state.roles
9812
+ available: state.roles.map(function (x) {
9813
+ return {
9814
+ value: x,
9815
+ text: x
9816
+ };
9817
+ })
9516
9818
  })]
9517
9819
  })]
9518
9820
  })]
@@ -9528,7 +9830,7 @@ function CopyItems(props) {
9528
9830
  try {
9529
9831
  return Promise.resolve(Promise.all(items.map(function (item, i) {
9530
9832
  var input = form[i + 1] || {};
9531
- return Ctx.client.post("" + Ctx.path + item['@name'] + "/@duplicate", {
9833
+ return Ctx.client.post("" + Ctx.path + item.id + "/@duplicate", {
9532
9834
  destination: path,
9533
9835
  new_id: input.value || getNewId(item.id)
9534
9836
  });
@@ -9574,7 +9876,7 @@ function CopyItems(props) {
9574
9876
  }), jsx("input", {
9575
9877
  type: "text",
9576
9878
  className: "input",
9577
- "data-test": "inputCopyIdTest-" + item['@name'],
9879
+ "data-test": "inputCopyIdTest-" + item.id,
9578
9880
  defaultValue: getNewId(item.id)
9579
9881
  })]
9580
9882
  }, item.id);
@@ -9647,9 +9949,9 @@ function MoveItems(props) {
9647
9949
  var moveItems = function moveItems(path) {
9648
9950
  try {
9649
9951
  return Promise.resolve(Promise.all(items.map(function (item) {
9650
- return Ctx.client.post("" + Ctx.path + item['@name'] + "/@move", {
9952
+ return Ctx.client.post("" + Ctx.path + item.id + "/@move", {
9651
9953
  destination: path,
9652
- new_id: item['@name']
9954
+ new_id: item.id
9653
9955
  });
9654
9956
  }))).then(function (responses) {
9655
9957
  Ctx.refresh();
@@ -9986,17 +10288,17 @@ function GroupToolbar() {
9986
10288
 
9987
10289
  var searchText = location.get('q');
9988
10290
 
9989
- var onSearchQuery = function onSearchQuery(ev) {
9990
- var search = ev.target[0].value;
10291
+ var onSearchQuery = function onSearchQuery(event) {
10292
+ event.preventDefault();
9991
10293
  setLocation({
9992
- q: search,
10294
+ q: event.currentTarget.elements.filterInput.value,
9993
10295
  page: 0
9994
10296
  });
9995
- ev.preventDefault();
9996
- };
10297
+ }; // cleanup form on state.search change
10298
+
9997
10299
 
9998
10300
  useEffect(function () {
9999
- if (!searchText || searchText === '') {
10301
+ if (ref.current && (!searchText || searchText === '')) {
10000
10302
  ref.current.value = '';
10001
10303
  }
10002
10304
  }, [searchText]);
@@ -10016,7 +10318,8 @@ function GroupToolbar() {
10016
10318
  type: "text",
10017
10319
  className: "input is-size-7",
10018
10320
  placeholder: intl.formatMessage(genericMessages.search),
10019
- "data-test": "inputFilterTest"
10321
+ "data-test": "inputFilterTest",
10322
+ id: "filterInput"
10020
10323
  })
10021
10324
  }), jsx("div", {
10022
10325
  className: "control",
@@ -10054,12 +10357,12 @@ function GroupToolbar() {
10054
10357
  })]
10055
10358
  });
10056
10359
  }
10057
- function GroupsCtx(props) {
10058
- return jsx(TabsPanel, _extends({
10360
+ function GroupsCtx() {
10361
+ return jsx(TabsPanel, {
10059
10362
  tabs: tabs$4,
10060
10363
  currentTab: "Groups",
10061
10364
  rightToolbar: jsx(GroupToolbar, {})
10062
- }, props));
10365
+ });
10063
10366
  }
10064
10367
  var sortParsed = parser("_sort_asc=id");
10065
10368
  var searchParsed = parser('type_name=User');
@@ -10074,6 +10377,7 @@ function GroupCtx() {
10074
10377
  roles = _useState[0],
10075
10378
  setRoles = _useState[1];
10076
10379
 
10380
+ var groupDataContext = Ctx.context;
10077
10381
  useEffect(function () {
10078
10382
  var getRoles = function getRoles() {
10079
10383
  try {
@@ -10127,11 +10431,11 @@ function GroupCtx() {
10127
10431
  var addRole = function addRole(role) {
10128
10432
  try {
10129
10433
  return Promise.resolve(patch({
10130
- user_roles: Ctx.context.user_roles.concat(role)
10434
+ user_roles: groupDataContext.user_roles.concat(role)
10131
10435
  })).then(function (_ref) {
10132
10436
  var isError = _ref.isError,
10133
10437
  errorMessage = _ref.errorMessage;
10134
- handleResponse(isError, intl.formatMessage({
10438
+ handleResponse(!!isError, intl.formatMessage({
10135
10439
  id: "role_added_to_group",
10136
10440
  defaultMessage: [{
10137
10441
  "type": 0,
@@ -10145,7 +10449,7 @@ function GroupCtx() {
10145
10449
  }]
10146
10450
  }, {
10147
10451
  role: role
10148
- }), errorMessage);
10452
+ }), errorMessage != null ? errorMessage : '');
10149
10453
  });
10150
10454
  } catch (e) {
10151
10455
  return Promise.reject(e);
@@ -10155,13 +10459,13 @@ function GroupCtx() {
10155
10459
  var removeRole = function removeRole(role) {
10156
10460
  try {
10157
10461
  return Promise.resolve(patch({
10158
- user_roles: Ctx.context.user_roles.filter(function (r) {
10462
+ user_roles: groupDataContext.user_roles.filter(function (r) {
10159
10463
  return r !== role;
10160
10464
  })
10161
10465
  })).then(function (_ref2) {
10162
10466
  var isError = _ref2.isError,
10163
10467
  errorMessage = _ref2.errorMessage;
10164
- handleResponse(isError, intl.formatMessage({
10468
+ handleResponse(!!isError, intl.formatMessage({
10165
10469
  id: "role_removed_from_group",
10166
10470
  defaultMessage: [{
10167
10471
  "type": 0,
@@ -10175,7 +10479,7 @@ function GroupCtx() {
10175
10479
  }]
10176
10480
  }, {
10177
10481
  role: role
10178
- }), errorMessage);
10482
+ }), errorMessage != null ? errorMessage : '');
10179
10483
  });
10180
10484
  } catch (e) {
10181
10485
  return Promise.reject(e);
@@ -10185,30 +10489,32 @@ function GroupCtx() {
10185
10489
  var addUser = function addUser(newUserId) {
10186
10490
  try {
10187
10491
  var data = {};
10188
- Ctx.context.users.forEach(function (user) {
10492
+ groupDataContext.users.forEach(function (user) {
10189
10493
  data[user] = true;
10190
10494
  });
10191
10495
  data[newUserId] = true;
10192
10496
  return Promise.resolve(Ctx.client.rest.patch(Ctx.containerPath + "@groups/" + Ctx.context['@name'], {
10193
10497
  users: data
10194
- })).then(function (_ref3) {
10195
- var isError = _ref3.isError,
10196
- errorMessage = _ref3.errorMessage;
10197
- handleResponse(isError, intl.formatMessage({
10198
- id: "user_added_to_group",
10199
- defaultMessage: [{
10200
- "type": 0,
10201
- "value": "User "
10202
- }, {
10203
- "type": 1,
10204
- "value": "user"
10498
+ })).then(function (response) {
10499
+ return Promise.resolve(processResponse(response)).then(function (_ref3) {
10500
+ var isError = _ref3.isError,
10501
+ errorMessage = _ref3.errorMessage;
10502
+ handleResponse(isError, intl.formatMessage({
10503
+ id: "user_added_to_group",
10504
+ defaultMessage: [{
10505
+ "type": 0,
10506
+ "value": "User "
10507
+ }, {
10508
+ "type": 1,
10509
+ "value": "user"
10510
+ }, {
10511
+ "type": 0,
10512
+ "value": " added to group"
10513
+ }]
10205
10514
  }, {
10206
- "type": 0,
10207
- "value": " added to group"
10208
- }]
10209
- }, {
10210
- user: newUserId
10211
- }), errorMessage);
10515
+ user: newUserId
10516
+ }), errorMessage != null ? errorMessage : '');
10517
+ });
10212
10518
  });
10213
10519
  } catch (e) {
10214
10520
  return Promise.reject(e);
@@ -10218,29 +10524,31 @@ function GroupCtx() {
10218
10524
  var removeUser = function removeUser(userToRemove) {
10219
10525
  try {
10220
10526
  var data = {};
10221
- Ctx.context.users.forEach(function (user) {
10527
+ groupDataContext.users.forEach(function (user) {
10222
10528
  data[user] = userToRemove !== user;
10223
10529
  });
10224
10530
  return Promise.resolve(Ctx.client.rest.patch(Ctx.containerPath + "@groups/" + Ctx.context['@name'], {
10225
10531
  users: data
10226
- })).then(function (_ref4) {
10227
- var isError = _ref4.isError,
10228
- errorMessage = _ref4.errorMessage;
10229
- handleResponse(isError, intl.formatMessage({
10230
- id: "user_removed_from_group",
10231
- defaultMessage: [{
10232
- "type": 0,
10233
- "value": "User "
10234
- }, {
10235
- "type": 1,
10236
- "value": "user"
10532
+ })).then(function (response) {
10533
+ return Promise.resolve(processResponse(response)).then(function (_ref4) {
10534
+ var isError = _ref4.isError,
10535
+ errorMessage = _ref4.errorMessage;
10536
+ handleResponse(isError, intl.formatMessage({
10537
+ id: "user_removed_from_group",
10538
+ defaultMessage: [{
10539
+ "type": 0,
10540
+ "value": "User "
10541
+ }, {
10542
+ "type": 1,
10543
+ "value": "user"
10544
+ }, {
10545
+ "type": 0,
10546
+ "value": " removed from group"
10547
+ }]
10237
10548
  }, {
10238
- "type": 0,
10239
- "value": " removed from group"
10240
- }]
10241
- }, {
10242
- user: userToRemove
10243
- }), errorMessage);
10549
+ user: userToRemove
10550
+ }), errorMessage != null ? errorMessage : '');
10551
+ });
10244
10552
  });
10245
10553
  } catch (e) {
10246
10554
  return Promise.reject(e);
@@ -10295,11 +10603,13 @@ function GroupCtx() {
10295
10603
  })
10296
10604
  }), jsx(Select, {
10297
10605
  options: roles.filter(function (role) {
10298
- return !Ctx.context.user_roles.includes(role.value);
10606
+ return !groupDataContext.user_roles.includes(role.value);
10299
10607
  }),
10300
10608
  appendDefault: true,
10301
- onChange: addRole
10302
- }), jsx("hr", {}), Ctx.context.user_roles.map(function (urole) {
10609
+ onChange: function onChange(value) {
10610
+ return addRole(value);
10611
+ }
10612
+ }), jsx("hr", {}), groupDataContext.user_roles.map(function (urole) {
10303
10613
  return jsx("p", {
10304
10614
  className: "control",
10305
10615
  children: jsx(Tag, {
@@ -10331,7 +10641,7 @@ function GroupCtx() {
10331
10641
  traversal: Ctx,
10332
10642
  onChange: addUser,
10333
10643
  btnClass: "is-small"
10334
- }), jsx("hr", {}), Ctx.context.users.map(function (user) {
10644
+ }), jsx("hr", {}), groupDataContext.users.map(function (user) {
10335
10645
  return jsx("p", {
10336
10646
  className: "control",
10337
10647
  children: jsx(Tag, {
@@ -10480,7 +10790,7 @@ function Path() {
10480
10790
  var links = buildPaths(segments);
10481
10791
 
10482
10792
  if (segments.length === 1) {
10483
- return false;
10793
+ return null;
10484
10794
  }
10485
10795
 
10486
10796
  return jsx("nav", {
@@ -10614,11 +10924,13 @@ var getComponent = function getComponent(context, path, fallback) {
10614
10924
  fallback = undefined;
10615
10925
  }
10616
10926
 
10617
- if (!context) return;
10927
+ if (!context) return; // console.log("Component for path", path)
10928
+ // lookup by path
10618
10929
 
10619
10930
  if (registry.paths[path]) {
10620
10931
  return registry.paths[path];
10621
- }
10932
+ } // by type
10933
+
10622
10934
 
10623
10935
  if (registry.views[context['@type']]) {
10624
10936
  return registry.views[context['@type']];
@@ -10641,19 +10953,15 @@ var getItemsColumn = function getItemsColumn(type) {
10641
10953
  return undefined;
10642
10954
  };
10643
10955
 
10644
- var getForm = function getForm(type, fallback) {
10645
- if (fallback === void 0) {
10646
- fallback = BaseForm;
10647
- }
10956
+ var getView = function getView(name) {
10957
+ return registry.views[name];
10958
+ };
10648
10959
 
10649
- return registry.forms[type] || fallback;
10960
+ var getForm = function getForm(type, fallback) {
10961
+ return registry.forms[type] || fallback || BaseForm;
10650
10962
  };
10651
10963
 
10652
10964
  var getAction = function getAction(type, fallback) {
10653
- if (fallback === void 0) {
10654
- fallback = undefined;
10655
- }
10656
-
10657
10965
  return registry.actions[type] || fallback;
10658
10966
  };
10659
10967
 
@@ -10670,10 +10978,21 @@ var getSchemas = function getSchemas(type) {
10670
10978
  };
10671
10979
 
10672
10980
  var getFieldsToFilter = function getFieldsToFilter(type, fallback) {
10981
+ if (fallback === void 0) {
10982
+ fallback = ['title'];
10983
+ }
10984
+
10673
10985
  return registry.fieldsToFilter[type] || fallback;
10674
10986
  };
10675
10987
 
10676
10988
  var getDefaultSortValue = function getDefaultSortValue(type, fallback) {
10989
+ if (fallback === void 0) {
10990
+ fallback = {
10991
+ key: 'id',
10992
+ direction: 'des'
10993
+ };
10994
+ }
10995
+
10677
10996
  return registry.defaultSortValue[type] || fallback;
10678
10997
  };
10679
10998
 
@@ -10681,12 +11000,14 @@ var defaultComponent = function defaultComponent(context) {
10681
11000
  return context.is_folderish ? FolderCtx : ItemCtx;
10682
11001
  };
10683
11002
  function useRegistry(data) {
11003
+ // if data is provided we need to merge it into actual registry
10684
11004
  var ref = React.useRef();
10685
11005
 
10686
11006
  if (data && !ref.current) {
10687
11007
  ref.current = true;
10688
11008
  Object.keys(data).map(function (key) {
10689
- return registry[key] = _extends({}, registry[key], data[key]);
11009
+ var registryKey = key;
11010
+ registry[registryKey] = _extends({}, registry[registryKey], data[registryKey]);
10690
11011
  });
10691
11012
  }
10692
11013
 
@@ -10701,86 +11022,26 @@ function useRegistry(data) {
10701
11022
  getItemsColumn: getItemsColumn,
10702
11023
  getFieldsToFilter: getFieldsToFilter,
10703
11024
  getDefaultSortValue: getDefaultSortValue,
10704
- getSchemas: getSchemas
11025
+ getSchemas: getSchemas,
11026
+ getView: getView
10705
11027
  };
10706
11028
  }
11029
+ /*
10707
11030
 
10708
- var initialState$4 = {
10709
- path: '',
10710
- loading: false,
10711
- context: undefined,
10712
- flash: {
10713
- message: undefined,
10714
- type: undefined
10715
- },
10716
- action: {
10717
- action: undefined,
10718
- params: undefined
11031
+ const registry = {
11032
+ paths: {
11033
+ "/db/guillotina/tags/": TagsContext
10719
11034
  },
10720
- permissions: undefined,
10721
- errorStatus: undefined,
10722
- registry: {},
10723
- refresh: undefined
10724
- };
10725
- function guillotinaReducer(state, action) {
10726
- switch (action.type) {
10727
- case 'SET_PATH':
10728
- return _extends({}, state, {
10729
- path: action.payload,
10730
- loading: true
10731
- });
10732
-
10733
- case 'SET_CONTEXT':
10734
- return _extends({}, state, action.payload, {
10735
- errorStatus: undefined,
10736
- loading: false
10737
- });
10738
-
10739
- case 'SET_ERROR':
10740
- return _extends({}, state, {
10741
- errorStatus: action.payload,
10742
- loading: false
10743
- });
10744
-
10745
- case 'SET_FLASH':
10746
- return _extends({}, state, action.payload);
10747
-
10748
- case 'CLEAR_FLASH':
10749
- return _extends({}, state, {
10750
- flash: {
10751
- message: undefined,
10752
- type: undefined
10753
- }
10754
- });
10755
-
10756
- case 'SET_ACTION':
10757
- return _extends({}, state, {
10758
- action: action.payload
10759
- });
11035
+ forms: {
11036
+ Tag: AddTagForm
11037
+ }
11038
+ }
10760
11039
 
10761
- case 'CLEAR_ACTION':
10762
- return _extends({}, state, {
10763
- action: {
10764
- action: undefined,
10765
- params: undefined
10766
- }
10767
- });
10768
11040
 
10769
- case 'REFRESH':
10770
- return _extends({}, state, {
10771
- refresh: Date.now(),
10772
- loading: !action.payload.transparent
10773
- });
11041
+ <guillotina registry={registry} />
10774
11042
 
10775
- case 'APPLY':
10776
- return _extends({}, state, {
10777
- context: _extends({}, state.context, action.payload)
10778
- });
10779
11043
 
10780
- default:
10781
- return state;
10782
- }
10783
- }
11044
+ */
10784
11045
 
10785
11046
  var actions = [
10786
11047
  {
@@ -13591,25 +13852,27 @@ function Guillotina(_ref) {
13591
13852
  props = _objectWithoutPropertiesLoose(_ref, ["auth", "locale"]);
13592
13853
 
13593
13854
  var messages = loadLocaleData(locale);
13594
- var url = props.url || 'http://localhost:8080';
13855
+ var url = props.url || 'http://localhost:8080'; // without trailing slash
13856
+
13595
13857
  var config = props.config || {};
13596
13858
  var client = useGuillotinaClient();
13597
13859
 
13598
13860
  var _useConfig = useConfig(config),
13599
13861
  Permissions = _useConfig.Permissions;
13600
13862
 
13601
- var registry = useRegistry(props.registry || {});
13863
+ var registry = useRegistry(props.registry); // Location is cooked routing solution (only uses search params)
13602
13864
 
13603
13865
  var _useLocation = useLocation(),
13604
- location = _useLocation[0];
13866
+ location = _useLocation[0]; // if there is no path provided just go to root
13867
+
13605
13868
 
13606
13869
  var searchPath = location.get('path') || '/';
13607
13870
 
13608
13871
  if (searchPath && searchPath !== '') {
13609
- initialState$4.path = searchPath;
13872
+ initialState.path = searchPath;
13610
13873
  }
13611
13874
 
13612
- var _useReducer = useReducer(guillotinaReducer, initialState$4),
13875
+ var _useReducer = useReducer(guillotinaReducer, initialState),
13613
13876
  state = _useReducer[0],
13614
13877
  dispatch = _useReducer[1];
13615
13878
 
@@ -13617,8 +13880,10 @@ function Guillotina(_ref) {
13617
13880
  refresh = state.refresh;
13618
13881
  useEffect(function () {
13619
13882
  dispatch({
13620
- type: 'SET_PATH',
13621
- payload: searchPath
13883
+ type: GuillotinaReducerActionTypes.SET_PATH,
13884
+ payload: {
13885
+ path: searchPath
13886
+ }
13622
13887
  });
13623
13888
  }, [searchPath]);
13624
13889
  useEffect(function () {
@@ -13627,14 +13892,18 @@ function Guillotina(_ref) {
13627
13892
  return Promise.resolve(client.getContext(path)).then(function (data) {
13628
13893
  if (data.status === 401) {
13629
13894
  dispatch({
13630
- type: 'SET_ERROR',
13631
- payload: 'notallowed'
13895
+ type: GuillotinaReducerActionTypes.SET_ERROR,
13896
+ payload: {
13897
+ errorStatus: 'notallowed'
13898
+ }
13632
13899
  });
13633
13900
  return;
13634
13901
  } else if (data.status === 404) {
13635
13902
  dispatch({
13636
- type: 'SET_ERROR',
13637
- payload: 'notfound'
13903
+ type: GuillotinaReducerActionTypes.SET_ERROR,
13904
+ payload: {
13905
+ errorStatus: 'notallowed'
13906
+ }
13638
13907
  });
13639
13908
  return;
13640
13909
  }
@@ -13643,7 +13912,7 @@ function Guillotina(_ref) {
13643
13912
  return Promise.resolve(client.canido(path, Permissions)).then(function (pr) {
13644
13913
  return Promise.resolve(pr.json()).then(function (permissions) {
13645
13914
  dispatch({
13646
- type: 'SET_CONTEXT',
13915
+ type: GuillotinaReducerActionTypes.SET_CONTEXT,
13647
13916
  payload: {
13648
13917
  context: context,
13649
13918
  permissions: permissions
@@ -13660,9 +13929,9 @@ function Guillotina(_ref) {
13660
13929
 
13661
13930
  initContext();
13662
13931
  }, [path, refresh, client]);
13663
- var ErrorBoundary = registry.get('views', 'ErrorBoundary');
13664
- var NotAllowed = registry.get('views', 'NotAllowed');
13665
- var NotFound = registry.get('views', 'NotFound');
13932
+ var ErrorBoundary = registry.getView('ErrorBoundary');
13933
+ var NotAllowed = registry.getView('NotAllowed');
13934
+ var NotFound = registry.getView('NotFound');
13666
13935
  var Path = registry.get('components', 'Path');
13667
13936
  var contextData = {
13668
13937
  url: url,
@@ -13685,7 +13954,7 @@ function Guillotina(_ref) {
13685
13954
  children: jsxs(ErrorBoundary, {
13686
13955
  children: [!errorStatus && jsx(TraversalProvider, _extends({}, contextData, {
13687
13956
  children: permissions && jsxs(React.Fragment, {
13688
- children: [action.action && jsx(Action, _extends({}, action.params)), jsx("div", {
13957
+ children: [action.action && Action !== null && jsx(Action, _extends({}, action.params)), jsx("div", {
13689
13958
  className: "level",
13690
13959
  children: jsx("div", {
13691
13960
  className: "level-left",
@@ -13694,7 +13963,7 @@ function Guillotina(_ref) {
13694
13963
  children: jsx(Path, {})
13695
13964
  })
13696
13965
  })
13697
- }), jsx(Flash, {}), Main && jsx(ErrorBoundary, {
13966
+ }), jsx(Flash, {}), Main !== undefined && jsx(ErrorBoundary, {
13698
13967
  children: jsxs("div", {
13699
13968
  className: "box main-panel",
13700
13969
  children: [state.loading && jsx(Loading, {}), !state.loading && jsx(Main, {
@@ -13804,7 +14073,7 @@ var ERRORS = {
13804
14073
  var initialState$5 = {
13805
14074
  username: '',
13806
14075
  password: '',
13807
- loading: undefined,
14076
+ loading: false,
13808
14077
  errors: undefined
13809
14078
  };
13810
14079
  var Login = function Login(_ref) {
@@ -13820,7 +14089,7 @@ var Login = function Login(_ref) {
13820
14089
 
13821
14090
  var inputRef = useRef(null);
13822
14091
  useEffect(function () {
13823
- if (inputRef) {
14092
+ if (inputRef && inputRef.current) {
13824
14093
  inputRef.current.focus();
13825
14094
  }
13826
14095
  }, [inputRef]);
@@ -14041,30 +14310,30 @@ function RequiredFieldsForm(_ref) {
14041
14310
  dataTest: dataTest,
14042
14311
  children: [schema && schema.data && !schema.loading && schema.formFields.map(function (key) {
14043
14312
  if (!ignoreFiels.includes(key)) {
14044
- var _value$title;
14313
+ var _schema$data, _value$title, _schema$data2;
14045
14314
 
14046
- var value = schema.data.properties[key];
14315
+ var value = (_schema$data = schema.data) == null ? void 0 : _schema$data.properties[key];
14047
14316
  return jsx(EditComponent, {
14048
14317
  id: key,
14049
14318
  placeholder: (_value$title = value == null ? void 0 : value.title) != null ? _value$title : '',
14050
14319
  className: "",
14051
14320
  required: true,
14052
- schema: schema.data.properties[key],
14053
- setValue: function setValue(ev) {
14321
+ schema: (_schema$data2 = schema.data) == null ? void 0 : _schema$data2.properties[key],
14322
+ setValue: function setValue(value) {
14054
14323
  if (key === 'title') {
14055
14324
  var _extends2;
14056
14325
 
14057
14326
  setFormData(_extends({}, formData, (_extends2 = {
14058
- uuid: stringToSlug(ev)
14059
- }, _extends2[key] = ev, _extends2)));
14327
+ uuid: stringToSlug(value)
14328
+ }, _extends2[key] = value, _extends2)));
14060
14329
  } else if (key === 'uuid') {
14061
14330
  setFormData(_extends({}, formData, {
14062
- uuid: stringToSlug(ev)
14331
+ uuid: stringToSlug(value)
14063
14332
  }));
14064
14333
  } else {
14065
14334
  var _extends3;
14066
14335
 
14067
- setFormData(_extends({}, formData, (_extends3 = {}, _extends3[key] = ev, _extends3)));
14336
+ setFormData(_extends({}, formData, (_extends3 = {}, _extends3[key] = value, _extends3)));
14068
14337
  }
14069
14338
  },
14070
14339
  error: errors[key],
@@ -14195,6 +14464,7 @@ var Auth = /*#__PURE__*/function () {
14195
14464
  method: 'post'
14196
14465
  })).then(function (data) {
14197
14466
  if (data.status === 401) {
14467
+ // invalid token
14198
14468
  _this4.cleanAuth();
14199
14469
 
14200
14470
  _this4.logout();
@@ -14257,7 +14527,7 @@ var Auth = /*#__PURE__*/function () {
14257
14527
 
14258
14528
  if (!authToken) return {};
14259
14529
 
14260
- if (this.willExpire(expires) && this.retryRefresh < this.maxRetry) {
14530
+ if (this.willExpire(expires != null ? expires : '') && this.retryRefresh < this.maxRetry) {
14261
14531
 
14262
14532
  (function () {
14263
14533
  try {
@@ -14315,5 +14585,14 @@ var Auth = /*#__PURE__*/function () {
14315
14585
  return Auth;
14316
14586
  }();
14317
14587
 
14318
- export { AddItem, AddPermission, AllItemsCheckbox, ApplicationCtx, Auth, AuthContext, BaseForm, BehaviorNotImplemented, BehaviorsView, Button, Checkbox, ClientContext, ClientProvider, Config, Confirm, ContainerCtx, ContextToolbar, CreateButton, CreateContainer, DatabaseCtx, Delete, DownloadField, EditComponent, EditableField, EmailInput, FileUpload, Flash, FolderCtx, Form, FormBuilder, GroupCtx, GroupToolbar, GroupsCtx, Guillotina, GuillotinaClient, IAttachment, IImageAttachment, IMultiAttachment, IMultiImageAttachment, IMultiImageOrderedAttachment, IWorkflow, Icon, Input, InputList, Item, ItemCheckbox, ItemCtx, ItemModel, ItemTitle, ItemsActionsDropdown, ItemsActionsProvider, Layout, Link, Loading, Login, Modal, NotAllowed, Notification, Pagination, PanelActions, PanelAddons, PanelBehaviors, PanelItems, PanelNotImplemented, PanelPermissions, PanelProperties, PasswordInput, Path, PathTree, PermissionPrinperm, PermissionPrinrole, PermissionRoleperm, Permissions, PropertiesButtonView, PropertiesView, REGEX_EMAIL, REGEX_HEX_COLOR, REGEX_NUMBER, REGEX_URL, RItem, RemoveItems, RenderField, RenderFieldComponent, RequiredFieldsForm, RestClient, SearchInput, SearchInputList, SearchLabels, SearchOptionsLabels, SearchRenderField, SearchVocabularyLabels, Select, SelectVocabulary, Sharing, Table, TabsPanel, Tag, TagsWidget, TdLink, Textarea, Traversal, TraversalContext, TraversalProvider, UserCtx, UserForm, UsersCtx, UsersToolbar, VocabularyRenderField, base64ToArrayBuffer, buildQs, classnames, defaultComponent, formatDate, generateUID, genericFileMessages, genericMessages, get$1 as get, getActionsObject, getClient, getNewId, isEmail, isEmpty, isHexColor, isNumber, isURL, lightFileReader, maxLength, messages$4 as messages, minLength, noop, notEmpty, parser, sleep, stringToSlug, toQueryString, useConfig, useCrudContext, useGuillotinaClient, useLocation, useRegistry, useRemoteField, useTraversal, useVocabulary };
14588
+ var Setting;
14589
+
14590
+ (function (Setting) {
14591
+ Setting["Allow"] = "Allow";
14592
+ Setting["AllowSingle"] = "AllowSingle";
14593
+ Setting["Deny"] = "Deny";
14594
+ Setting["Unset"] = "Unset";
14595
+ })(Setting || (Setting = {}));
14596
+
14597
+ export { AddItem, AddPermission, AllItemsCheckbox, ApplicationCtx, Auth, AuthContext, BaseForm, BehaviorNotImplemented, BehaviorsView, Button, Checkbox, ClientContext, ClientProvider, Confirm, ContainerCtx, ContextToolbar, CreateButton, CreateContainer, DatabaseCtx, Delete, DownloadField, EditComponent, EditableField, EmailInput, FileUpload, Flash, FolderCtx, Form, FormBuilder, GroupCtx, GroupToolbar, GroupsCtx, Guillotina, GuillotinaClient, IAttachment, IImageAttachment, IMultiAttachment, IMultiImageAttachment, IMultiImageOrderedAttachment, IWorkflow, Icon, Input, InputList, Item, ItemCheckbox, ItemCtx, ItemModel, ItemTitle, ItemsActionsDropdown, ItemsActionsProvider, Layout, Link, Loading, Login, Modal, NotAllowed, Notification, Pagination, PanelActions, PanelAddons, PanelBehaviors, PanelItems, PanelNotImplemented, PanelPermissions, PanelProperties, PasswordInput, Path, PathTree, PermissionPrinperm, PermissionPrinrole, PermissionRoleperm, Permissions, PropertiesButtonView, PropertiesView, REGEX_EMAIL, REGEX_HEX_COLOR, REGEX_NUMBER, REGEX_URL, RItem, RemoveItems, RenderField, RenderFieldComponent, RequiredFieldsForm, RestClient, SearchInput, SearchInputList, SearchLabels, SearchOptionsLabels, SearchRenderField, SearchVocabularyLabels, Select, SelectVocabulary, Setting, Sharing, Table, TabsPanel, Tag, TagsWidget, TdLink, Textarea, Traversal, TraversalContext, TraversalProvider, UserCtx, UserForm, UsersCtx, UsersToolbar, VocabularyRenderField, base64ToArrayBuffer, buildQs, classnames, debounce, defaultComponent, defaultConfig, formatDate, generateUID, genericFileMessages, genericMessages, get, getActionsObject, getClient, getNewId, isEmail, isEmpty, isHexColor, isNumber, isURL, lightFileReader, maxLength, messages$4 as messages, minLength, noop, notEmpty, parser, sleep, stringToSlug, toQueryString, useConfig, useCrudContext, useGuillotinaClient, useLocation, useRegistry, useRemoteField, useTraversal, useVocabulary };
14319
14598
  //# sourceMappingURL=react-gmi.esm.js.map