@guillotinaweb/react-gmi 0.29.2 → 0.30.0

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 +1 -1
  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 +1181 -904
  54. package/dist/react-gmi.esm.js.map +1 -1
  55. package/dist/react-gmi.js +1180 -904
  56. package/dist/react-gmi.js.map +1 -1
  57. package/dist/react-gmi.modern.js +1154 -851
  58. package/dist/react-gmi.modern.js.map +1 -1
  59. package/dist/react-gmi.umd.js +1180 -904
  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 +192 -44
  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';
@@ -1791,24 +1981,26 @@ function FormBuilder(_ref) {
1791
1981
  remotes = _ref$remotes === void 0 ? {} : _ref$remotes,
1792
1982
  _ref$submitButton = _ref.submitButton,
1793
1983
  submitButton = _ref$submitButton === void 0 ? true : _ref$submitButton;
1794
- var ref = useRef();
1984
+ var ref = useRef(null);
1795
1985
  var properties = schema.properties,
1796
1986
  required = schema.required;
1797
- var values = Object.assign({}, formData || {});
1987
+ var values = Object.assign({}, formData || {}); // build initial state
1988
+
1798
1989
  var initialState = {};
1799
1990
  var fields = Object.keys(properties).filter(function (x) {
1800
1991
  return !exclude.includes(x);
1801
1992
  });
1802
1993
  fields.forEach(function (element) {
1803
1994
  initialState[element] = values[element] || undefined;
1804
- });
1995
+ }); // Register remotes
1805
1996
 
1806
- if (!ref.current) {
1997
+ if (ref.current === null) {
1807
1998
  ref.current = {};
1808
1999
  Object.keys(remotes).forEach(function (item) {
1809
2000
  return ref.current[item] = remotes[item];
1810
2001
  });
1811
2002
  } else {
2003
+ // apply remote changes
1812
2004
  Object.keys(remotes).forEach(function (key) {
1813
2005
  if (JSON.stringify(ref.current[key]) !== JSON.stringify(remotes[key])) {
1814
2006
  ref.current[key] = remotes[key];
@@ -1819,15 +2011,16 @@ function FormBuilder(_ref) {
1819
2011
  ref.current = ref.current || {};
1820
2012
 
1821
2013
  var onUpdate = function onUpdate(field) {
1822
- return function (ev) {
1823
- ref.current[field] = ev.target ? ev.target.value : ev.value || ev;
2014
+ return function (value) {
2015
+ ref.current[field] = value;
1824
2016
  };
1825
2017
  };
1826
2018
 
1827
2019
  var GetTag = function GetTag(_ref2) {
1828
2020
  var field = _ref2.field;
1829
2021
  var property = properties[field];
1830
- var Tag = formComponents[property.widget || property.type];
2022
+ var key = property.widget || property.type;
2023
+ var Tag = formComponents[key];
1831
2024
  var props = {
1832
2025
  value: initialState[field],
1833
2026
  onChange: onUpdate(field),
@@ -1842,7 +2035,6 @@ function FormBuilder(_ref) {
1842
2035
  props.placeholder += ' *';
1843
2036
  }
1844
2037
 
1845
- Tag.displayName = field + "Field";
1846
2038
  return jsx(Tag, _extends({}, props));
1847
2039
  };
1848
2040
 
@@ -1911,9 +2103,13 @@ var Select = forwardRef(function (_ref, ref) {
1911
2103
  selectValue = selectValue.concat([ev.target.selectedOptions[i].value]);
1912
2104
  }
1913
2105
 
1914
- onChange(selectValue);
2106
+ if (onChange) {
2107
+ onChange(selectValue);
2108
+ }
1915
2109
  } else {
1916
- onChange(ev.target.value);
2110
+ if (onChange) {
2111
+ onChange(ev.target.value);
2112
+ }
1917
2113
  }
1918
2114
  };
1919
2115
 
@@ -1962,39 +2158,12 @@ var Select = forwardRef(function (_ref, ref) {
1962
2158
  });
1963
2159
  Select.displayName = 'Select';
1964
2160
 
1965
- var formatDate = function formatDate(str) {
1966
- var d = new Date(str);
1967
- var minutes = d.getMinutes() < 10 ? "0" + d.getMinutes() : d.getMinutes();
1968
- return d.getDate() + "/" + (d.getMonth() + 1) + "/" + d.getFullYear() + " " + d.getHours() + ":" + minutes;
1969
- };
1970
- var get$1 = function get(obj, path, defValue) {
1971
- var _pathArray$reduce;
1972
-
1973
- if (!path) return undefined;
1974
- var pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g);
1975
- return (_pathArray$reduce = pathArray.reduce(function (prevObj, key) {
1976
- return prevObj && prevObj[key];
1977
- }, obj)) != null ? _pathArray$reduce : defValue;
1978
- };
1979
- function getNewId(id) {
1980
- if (id === void 0) {
1981
- id = '';
1982
- }
1983
-
1984
- var suffix = '-copy-';
1985
- var rgx = new RegExp("($|" + suffix + "\\d*)");
1986
- return stringToSlug(id).replace(rgx, function (r) {
1987
- var num = parseInt(r.replace(suffix, '') || '0');
1988
- return "" + suffix + (num + 1);
1989
- });
1990
- }
1991
-
1992
- function _catch$1(body, recover) {
1993
- try {
1994
- var result = body();
1995
- } catch (e) {
1996
- return recover(e);
1997
- }
2161
+ function _catch$1(body, recover) {
2162
+ try {
2163
+ var result = body();
2164
+ } catch (e) {
2165
+ return recover(e);
2166
+ }
1998
2167
 
1999
2168
  if (result && result.then) {
2000
2169
  return result.then(void 0, recover);
@@ -2004,10 +2173,6 @@ function _catch$1(body, recover) {
2004
2173
  }
2005
2174
 
2006
2175
  function useVocabulary(vocabularyName, path) {
2007
- if (path === void 0) {
2008
- path = null;
2009
- }
2010
-
2011
2176
  var traversal = useTraversal();
2012
2177
 
2013
2178
  var _useSetState = useSetState({
@@ -2076,8 +2241,10 @@ var SelectVocabulary = forwardRef(function (_ref, ref) {
2076
2241
  var vocabulary = useVocabulary(vocabularyName);
2077
2242
 
2078
2243
  var getOptions = function getOptions() {
2079
- if (get$1(vocabulary, 'data.items', null)) {
2080
- 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) {
2081
2248
  return {
2082
2249
  text: item.title,
2083
2250
  value: item.token
@@ -2123,6 +2290,8 @@ var SelectVocabulary = forwardRef(function (_ref, ref) {
2123
2290
  });
2124
2291
  SelectVocabulary.displayName = 'SelectVocabulary';
2125
2292
 
2293
+ // https://github.com/molefrog/wouter
2294
+
2126
2295
  var setURLParams = function setURLParams(p) {
2127
2296
  return window.history.pushState(0, '0', '' + '?' + p.toString().replace(/%2F/g, '/'));
2128
2297
  };
@@ -2142,7 +2311,10 @@ var useLocation = function useLocation() {
2142
2311
 
2143
2312
  var prevPath = useRef(path);
2144
2313
  useEffect(function () {
2145
- 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.
2146
2318
 
2147
2319
  var checkForUpdates = function checkForUpdates() {
2148
2320
  var pathname = currentSearchParams();
@@ -2152,14 +2324,22 @@ var useLocation = function useLocation() {
2152
2324
  var events = ['popstate', 'pushState', 'replaceState'];
2153
2325
  events.map(function (e) {
2154
2326
  return window.addEventListener(e, checkForUpdates);
2155
- });
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
+
2156
2331
  checkForUpdates();
2157
2332
  return function () {
2158
2333
  events.map(function (e) {
2159
2334
  return window.removeEventListener(e, checkForUpdates);
2160
2335
  });
2161
2336
  };
2162
- }, []);
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
+
2163
2343
  var navigate = useCallback(function (to, replace) {
2164
2344
  if (replace) {
2165
2345
  clean(to);
@@ -2178,23 +2358,40 @@ var useLocation = function useLocation() {
2178
2358
  setURLParams(current);
2179
2359
  }, [path]);
2180
2360
  return [path, navigate, remove];
2181
- };
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
+
2182
2367
  var patched = 0;
2183
2368
 
2184
2369
  var patchHistoryEvents = function patchHistoryEvents() {
2185
2370
  if (patched) return;
2186
- ['pushState', 'replaceState'].map(function (type) {
2187
- var original = window.history[type];
2188
-
2189
- window.history[type] = function () {
2190
- var args = [].slice.call(arguments);
2191
- var result = original.apply(this, args);
2192
- var event = new Event(type);
2193
- event.arguments = args;
2194
- dispatchEvent(event);
2195
- return result;
2196
- };
2197
- });
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
+
2198
2395
  return patched = 1;
2199
2396
  };
2200
2397
 
@@ -2249,7 +2446,7 @@ function TdLink(_ref) {
2249
2446
  children = _ref.children,
2250
2447
  _ref$style = _ref.style,
2251
2448
  style = _ref$style === void 0 ? {} : _ref$style;
2252
- var link = useRef();
2449
+ var link = useRef(null);
2253
2450
 
2254
2451
  function onClick() {
2255
2452
  if (link && link.current) {
@@ -2356,15 +2553,7 @@ var RestClient = /*#__PURE__*/function () {
2356
2553
 
2357
2554
  var _proto = RestClient.prototype;
2358
2555
 
2359
- _proto.request = function request(path, data, headers) {
2360
- if (data === void 0) {
2361
- data = undefined;
2362
- }
2363
-
2364
- if (headers === void 0) {
2365
- headers = undefined;
2366
- }
2367
-
2556
+ _proto.request = function request(path, data, headers, signal) {
2368
2557
  try {
2369
2558
  var _this2 = this;
2370
2559
 
@@ -2380,9 +2569,18 @@ var RestClient = /*#__PURE__*/function () {
2380
2569
  path = "/" + path;
2381
2570
  }
2382
2571
 
2383
- data = data || {};
2384
- data.headers = headers || _this2.getHeaders();
2385
- 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));
2386
2584
  } catch (e) {
2387
2585
  return Promise.reject(e);
2388
2586
  }
@@ -2390,12 +2588,12 @@ var RestClient = /*#__PURE__*/function () {
2390
2588
 
2391
2589
  _proto.getHeaders = function getHeaders() {
2392
2590
  var authToken = this.auth.getToken();
2393
- if (!authToken) return {};
2394
- return {
2395
- Accept: 'application/json',
2396
- 'Content-Type': 'application/json',
2397
- Authorization: 'Bearer ' + authToken
2398
- };
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;
2399
2597
  };
2400
2598
 
2401
2599
  _proto.post = function post(path, data) {
@@ -2411,11 +2609,11 @@ var RestClient = /*#__PURE__*/function () {
2411
2609
  }
2412
2610
  };
2413
2611
 
2414
- _proto.get = function get(path) {
2612
+ _proto.get = function get(path, signal) {
2415
2613
  try {
2416
2614
  var _this6 = this;
2417
2615
 
2418
- return Promise.resolve(_this6.request(path));
2616
+ return Promise.resolve(_this6.request(path, undefined, undefined, signal));
2419
2617
  } catch (e) {
2420
2618
  return Promise.reject(e);
2421
2619
  }
@@ -2453,24 +2651,20 @@ var RestClient = /*#__PURE__*/function () {
2453
2651
 
2454
2652
  var headers = _this12.getHeaders();
2455
2653
 
2456
- delete headers['Content-Type'];
2457
- headers['Content-Type'] = data['content-type'];
2458
- headers['X-UPLOAD-FILENAME'] = data.filename;
2459
- 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';
2460
2658
  return Promise.resolve(_this12.request(path, {
2461
2659
  method: 'PATCH',
2462
2660
  body: data.data
2463
- }, headers));
2661
+ }, _extends({}, headers, newHeaders)));
2464
2662
  } catch (e) {
2465
2663
  return Promise.reject(e);
2466
2664
  }
2467
2665
  };
2468
2666
 
2469
2667
  _proto.delete = function _delete(path, data) {
2470
- if (data === void 0) {
2471
- data = undefined;
2472
- }
2473
-
2474
2668
  try {
2475
2669
  var _this14 = this;
2476
2670
 
@@ -2611,6 +2805,14 @@ var GuillotinaClient = /*#__PURE__*/function () {
2611
2805
  }
2612
2806
  };
2613
2807
 
2808
+ _proto.getQueryParamsSearchFunction = function getQueryParamsSearchFunction(name) {
2809
+ if (name === 'getQueryParamsElasticsearch') {
2810
+ return this.getQueryParamsElasticsearch;
2811
+ }
2812
+
2813
+ return this.getQueryParamsPostresql;
2814
+ };
2815
+
2614
2816
  _proto.getQueryParamsPostresql = function getQueryParamsPostresql(_ref) {
2615
2817
  var _ref$start = _ref.start,
2616
2818
  start = _ref$start === void 0 ? 0 : _ref$start,
@@ -2702,7 +2904,7 @@ var GuillotinaClient = /*#__PURE__*/function () {
2702
2904
  label: 'id/name',
2703
2905
  key: 'title',
2704
2906
  isSortable: true,
2705
- child: function child(m, navigate, search) {
2907
+ child: function child(m, _navigate, search) {
2706
2908
  return jsxs(TdLink, {
2707
2909
  model: m,
2708
2910
  children: [m.name, search && jsxs(React.Fragment, {
@@ -2736,15 +2938,19 @@ var GuillotinaClient = /*#__PURE__*/function () {
2736
2938
  });
2737
2939
  }
2738
2940
  }];
2739
- };
2941
+ } // BBB API changes. Compat G5 and G6
2942
+ ;
2740
2943
 
2741
2944
  _proto.applyCompat = function applyCompat(data) {
2742
- data.member = data.items;
2743
- data.items_count = data.items_total;
2744
- return data;
2945
+ var result = _extends({}, data, {
2946
+ member: data.items,
2947
+ items_count: data.items_total
2948
+ });
2949
+
2950
+ return result;
2745
2951
  };
2746
2952
 
2747
- _proto.search = function search(path, params, container, prepare) {
2953
+ _proto.search = function search(path, params, container, prepare, signal) {
2748
2954
  if (container === void 0) {
2749
2955
  container = false;
2750
2956
  }
@@ -2766,7 +2972,7 @@ var GuillotinaClient = /*#__PURE__*/function () {
2766
2972
 
2767
2973
  var query = prepare ? toQueryString(params) : params;
2768
2974
  var url = path + "@search?" + query;
2769
- return Promise.resolve(_this7.rest.get(url)).then(function (res) {
2975
+ return Promise.resolve(_this7.rest.get(url, signal)).then(function (res) {
2770
2976
  return Promise.resolve(res.json()).then(function (data) {
2771
2977
  return _this7.applyCompat(data);
2772
2978
  });
@@ -2896,7 +3102,8 @@ var GuillotinaClient = /*#__PURE__*/function () {
2896
3102
 
2897
3103
  var _temp4 = function () {
2898
3104
  if (!cacheSchemas[name]) {
2899
- var url = _this25.getContainerFromPath(path);
3105
+ var url = _this25.getContainerFromPath(path); // todo: handle db case (only addable containers)
3106
+
2900
3107
 
2901
3108
  return Promise.resolve(_this25.rest.get(url + "@types/" + name)).then(function (res) {
2902
3109
  return Promise.resolve(res.json()).then(function (_res$json) {
@@ -2977,23 +3184,53 @@ var GuillotinaClient = /*#__PURE__*/function () {
2977
3184
  var users = _this37.getUsers(path);
2978
3185
 
2979
3186
  return Promise.resolve(Promise.all([groups, users])).then(function (_ref3) {
2980
- var gr = _ref3[0],
2981
- usr = _ref3[1];
3187
+ var responseGroups = _ref3[0],
3188
+ responseUsers = _ref3[1];
2982
3189
 
2983
- function _temp6(_gr$json) {
2984
- function _temp5(_usr$json) {
3190
+ function _temp8() {
3191
+ function _temp6() {
2985
3192
  return {
2986
- groups: _gr$json,
2987
- users: _usr$json
3193
+ groups: groupsData,
3194
+ users: usersData
2988
3195
  };
2989
3196
  }
2990
3197
 
2991
- var _usr$ok = usr.ok;
2992
- 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);
2993
3214
  }
2994
3215
 
2995
- var _gr$ok = gr.ok;
2996
- 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);
2997
3234
  });
2998
3235
  } catch (e) {
2999
3236
  return Promise.reject(e);
@@ -3015,6 +3252,7 @@ var GuillotinaClient = /*#__PURE__*/function () {
3015
3252
  try {
3016
3253
  var _this41 = this;
3017
3254
 
3255
+ // paths used to query the API always has to start without a "/"
3018
3256
  if (path.startsWith('/')) {
3019
3257
  path = path.slice(1);
3020
3258
  }
@@ -3034,7 +3272,7 @@ var GuillotinaClient = /*#__PURE__*/function () {
3034
3272
  try {
3035
3273
  var _this43 = this;
3036
3274
 
3037
- function _temp10() {
3275
+ function _temp12() {
3038
3276
  return cacheTypes[path];
3039
3277
  }
3040
3278
 
@@ -3042,10 +3280,10 @@ var GuillotinaClient = /*#__PURE__*/function () {
3042
3280
  path = path.slice(1);
3043
3281
  }
3044
3282
 
3045
- var _temp11 = function () {
3283
+ var _temp13 = function () {
3046
3284
  if (!cacheTypes[path]) {
3047
3285
  return Promise.resolve(_this43.rest.get(path + '@addable-types')).then(function (types) {
3048
- var _temp7 = function () {
3286
+ var _temp9 = function () {
3049
3287
  if (types.status === 401 || types.status === 404) {
3050
3288
  cacheTypes[path] = [];
3051
3289
  } else {
@@ -3055,12 +3293,12 @@ var GuillotinaClient = /*#__PURE__*/function () {
3055
3293
  }
3056
3294
  }();
3057
3295
 
3058
- if (_temp7 && _temp7.then) return _temp7.then(function () {});
3296
+ if (_temp9 && _temp9.then) return _temp9.then(function () {});
3059
3297
  });
3060
3298
  }
3061
3299
  }();
3062
3300
 
3063
- return Promise.resolve(_temp11 && _temp11.then ? _temp11.then(_temp10) : _temp10(_temp11));
3301
+ return Promise.resolve(_temp13 && _temp13.then ? _temp13.then(_temp12) : _temp12(_temp13));
3064
3302
  } catch (e) {
3065
3303
  return Promise.reject(e);
3066
3304
  }
@@ -3072,17 +3310,24 @@ function getClient(url, container, auth) {
3072
3310
  return new GuillotinaClient(new RestClient(url, container, auth), container === '/');
3073
3311
  }
3074
3312
  var lightFileReader = function lightFileReader(file) {
3075
- return new Promise(function (resolve) {
3313
+ return new Promise(function (resolve, reject) {
3076
3314
  var reader = new FileReader();
3077
3315
  reader.readAsArrayBuffer(file);
3078
3316
 
3079
3317
  reader.onloadend = function (e) {
3080
- var fileData = e.target.result;
3081
- resolve({
3082
- filename: file.name.normalize('NFD').replace(/[\u0300-\u036f]/g, ''),
3083
- data: fileData,
3084
- 'content-type': file.type
3085
- });
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
+ }
3086
3331
  };
3087
3332
  });
3088
3333
  };
@@ -3113,9 +3358,15 @@ function FileUpload(_ref) {
3113
3358
 
3114
3359
  var changed = function changed(event) {
3115
3360
  try {
3116
- return Promise.resolve(lightFileReader(event.target.files[0])).then(function (fileToUpload) {
3117
- onChange(fileToUpload);
3118
- });
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);
3119
3370
  } catch (e) {
3120
3371
  return Promise.reject(e);
3121
3372
  }
@@ -3206,12 +3457,12 @@ Textarea.displayName = 'Textarea';
3206
3457
 
3207
3458
  var defaultEvents = ['mousedown', 'touchstart'];
3208
3459
 
3209
- var on = function on(obj) {
3210
- return obj.addEventListener.apply(obj, [].slice.call(arguments, 1));
3460
+ var on = function on(obj, type, handler) {
3461
+ return obj.addEventListener(type, handler);
3211
3462
  };
3212
3463
 
3213
- var off = function off(obj) {
3214
- return obj.removeEventListener.apply(obj, [].slice.call(arguments, 1));
3464
+ var off = function off(obj, type, handler) {
3465
+ return obj.removeEventListener(type, handler);
3215
3466
  };
3216
3467
 
3217
3468
  function useClickAway(ref, onClickAway, events) {
@@ -3243,23 +3494,7 @@ function useClickAway(ref, onClickAway, events) {
3243
3494
  }, [events, ref]);
3244
3495
  }
3245
3496
 
3246
- function debounce(func, wait) {
3247
- var timeout;
3248
- return function () {
3249
- var context = this;
3250
- var args = arguments;
3251
-
3252
- var later = function later() {
3253
- timeout = null;
3254
- func.apply(context, args);
3255
- };
3256
-
3257
- clearTimeout(timeout);
3258
- timeout = setTimeout(later, wait);
3259
- };
3260
- }
3261
-
3262
- var initialState = {
3497
+ var initialState$1 = {
3263
3498
  page: 0,
3264
3499
  items: undefined,
3265
3500
  loading: false,
@@ -3269,10 +3504,9 @@ var SearchInput = function SearchInput(_ref) {
3269
3504
  var onChange = _ref.onChange,
3270
3505
  error = _ref.error,
3271
3506
  errorZoneClassName = _ref.errorZoneClassName,
3272
- _ref$traversal = _ref.traversal,
3273
- traversal = _ref$traversal === void 0 ? null : _ref$traversal,
3507
+ traversal = _ref.traversal,
3274
3508
  _ref$path = _ref.path,
3275
- path = _ref$path === void 0 ? null : _ref$path,
3509
+ path = _ref$path === void 0 ? undefined : _ref$path,
3276
3510
  _ref$qs = _ref.qs,
3277
3511
  qs = _ref$qs === void 0 ? [] : _ref$qs,
3278
3512
  _ref$queryCondition = _ref.queryCondition,
@@ -3287,14 +3521,14 @@ var SearchInput = function SearchInput(_ref) {
3287
3521
  _ref$dataTestItem = _ref.dataTestItem,
3288
3522
  dataTestItem = _ref$dataTestItem === void 0 ? 'searchInputItemTest' : _ref$dataTestItem,
3289
3523
  _ref$renderTextItemOp = _ref.renderTextItemOption,
3290
- renderTextItemOption = _ref$renderTextItemOp === void 0 ? null : _ref$renderTextItemOp,
3524
+ renderTextItemOption = _ref$renderTextItemOp === void 0 ? undefined : _ref$renderTextItemOp,
3291
3525
  _ref$typeNameQuery = _ref.typeNameQuery,
3292
- typeNameQuery = _ref$typeNameQuery === void 0 ? null : _ref$typeNameQuery,
3526
+ typeNameQuery = _ref$typeNameQuery === void 0 ? undefined : _ref$typeNameQuery,
3293
3527
  _ref$labelProperty = _ref.labelProperty,
3294
3528
  labelProperty = _ref$labelProperty === void 0 ? 'id' : _ref$labelProperty;
3295
3529
  var intl = useIntl();
3296
3530
 
3297
- var _useSetState = useSetState(initialState),
3531
+ var _useSetState = useSetState(initialState$1),
3298
3532
  options = _useSetState[0],
3299
3533
  setOptions = _useSetState[1];
3300
3534
 
@@ -3348,7 +3582,7 @@ var SearchInput = function SearchInput(_ref) {
3348
3582
  var searchTermParsed = ["id", value];
3349
3583
  var getSearch = traversal.registry.get;
3350
3584
  var fnName = getSearch('searchEngineQueryParamsFunction', SearchEngine);
3351
- var qsParsed = traversal.client[fnName]({
3585
+ var qsParsed = traversal.client.getQueryParamsSearchFunction(fnName)({
3352
3586
  path: traversal.path,
3353
3587
  start: 0,
3354
3588
  pageSize: PageSize,
@@ -3366,7 +3600,7 @@ var SearchInput = function SearchInput(_ref) {
3366
3600
 
3367
3601
  return Promise.resolve(traversal.client.search(path ? path : traversal.client.getContainerFromPath(traversal.path), searchTermQs, false, false)).then(function (data) {
3368
3602
  var newValuesLabel = data.items.reduce(function (result, item) {
3369
- result[item.id] = get$1(item, labelProperty, item.id);
3603
+ result[item.id] = get(item, labelProperty, item.id);
3370
3604
  return result;
3371
3605
  }, {});
3372
3606
  setValueLabel(newValuesLabel);
@@ -3394,6 +3628,7 @@ var SearchInput = function SearchInput(_ref) {
3394
3628
  }
3395
3629
 
3396
3630
  try {
3631
+ console.log('handle search input');
3397
3632
  setOptions({
3398
3633
  loading: true
3399
3634
  });
@@ -3408,7 +3643,7 @@ var SearchInput = function SearchInput(_ref) {
3408
3643
 
3409
3644
  var fnName = _get('searchEngineQueryParamsFunction', SearchEngine);
3410
3645
 
3411
- var qsParsed = traversal.client[fnName]({
3646
+ var qsParsed = traversal.client.getQueryParamsSearchFunction(fnName)({
3412
3647
  path: traversal.path,
3413
3648
  start: page * PageSize,
3414
3649
  pageSize: PageSize,
@@ -3421,7 +3656,7 @@ var SearchInput = function SearchInput(_ref) {
3421
3656
  typeNameParsed = parser("type_name__in=" + typeNameQuery);
3422
3657
  }
3423
3658
 
3424
- 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) {
3425
3660
  searchTermQs = buildQs([].concat(qs, searchTermParsed, qsParsed, typeNameParsed, sortParsed));
3426
3661
  }
3427
3662
 
@@ -3446,7 +3681,7 @@ var SearchInput = function SearchInput(_ref) {
3446
3681
  return renderTextItemOption(item);
3447
3682
  }
3448
3683
 
3449
- return get$1(item, labelProperty, item.title) || item['@name'];
3684
+ return get(item, labelProperty, item.title) || item['@name'];
3450
3685
  };
3451
3686
 
3452
3687
  useEffect(function () {
@@ -3472,7 +3707,7 @@ var SearchInput = function SearchInput(_ref) {
3472
3707
  if (!ev.currentTarget.contains(ev.relatedTarget)) {
3473
3708
  if (searchTerm !== '') {
3474
3709
  setSearchTerm('');
3475
- setOptions(initialState);
3710
+ setOptions(initialState$1);
3476
3711
  }
3477
3712
 
3478
3713
  setIsOpen(false);
@@ -3490,6 +3725,7 @@ var SearchInput = function SearchInput(_ref) {
3490
3725
  }
3491
3726
 
3492
3727
  setIsOpen(!isOpen);
3728
+ console.log('on clic btn', options);
3493
3729
 
3494
3730
  if (!options.loading && !options.items) {
3495
3731
  handleSearch(options.page);
@@ -3498,7 +3734,7 @@ var SearchInput = function SearchInput(_ref) {
3498
3734
  "aria-haspopup": "true",
3499
3735
  "aria-controls": "dropdown-menu",
3500
3736
  children: [jsx("span", {
3501
- children: value ? get$1(valueLabel, value, value) : intl.formatMessage(genericMessages.choose)
3737
+ children: value ? get(valueLabel, value, value) : intl.formatMessage(genericMessages.choose)
3502
3738
  }), jsx("span", {
3503
3739
  className: "icon",
3504
3740
  children: jsx("i", {
@@ -3572,23 +3808,7 @@ var SearchInput = function SearchInput(_ref) {
3572
3808
  });
3573
3809
  };
3574
3810
 
3575
- function debounce$1(func, wait) {
3576
- var timeout;
3577
- return function () {
3578
- var context = this;
3579
- var args = arguments;
3580
-
3581
- var later = function later() {
3582
- timeout = null;
3583
- func.apply(context, args);
3584
- };
3585
-
3586
- clearTimeout(timeout);
3587
- timeout = setTimeout(later, wait);
3588
- };
3589
- }
3590
-
3591
- var initialState$1 = {
3811
+ var initialState$2 = {
3592
3812
  page: 0,
3593
3813
  items: undefined,
3594
3814
  loading: false,
@@ -3598,10 +3818,9 @@ var SearchInputList = function SearchInputList(_ref) {
3598
3818
  var onChange = _ref.onChange,
3599
3819
  error = _ref.error,
3600
3820
  errorZoneClassName = _ref.errorZoneClassName,
3601
- _ref$traversal = _ref.traversal,
3602
- traversal = _ref$traversal === void 0 ? null : _ref$traversal,
3821
+ traversal = _ref.traversal,
3603
3822
  _ref$path = _ref.path,
3604
- path = _ref$path === void 0 ? null : _ref$path,
3823
+ path = _ref$path === void 0 ? undefined : _ref$path,
3605
3824
  _ref$qs = _ref.qs,
3606
3825
  qs = _ref$qs === void 0 ? [] : _ref$qs,
3607
3826
  _ref$queryCondition = _ref.queryCondition,
@@ -3616,14 +3835,14 @@ var SearchInputList = function SearchInputList(_ref) {
3616
3835
  _ref$dataTestItem = _ref.dataTestItem,
3617
3836
  dataTestItem = _ref$dataTestItem === void 0 ? 'searchInputItemTest' : _ref$dataTestItem,
3618
3837
  _ref$renderTextItemOp = _ref.renderTextItemOption,
3619
- renderTextItemOption = _ref$renderTextItemOp === void 0 ? null : _ref$renderTextItemOp,
3838
+ renderTextItemOption = _ref$renderTextItemOp === void 0 ? undefined : _ref$renderTextItemOp,
3620
3839
  _ref$typeNameQuery = _ref.typeNameQuery,
3621
- typeNameQuery = _ref$typeNameQuery === void 0 ? null : _ref$typeNameQuery,
3840
+ typeNameQuery = _ref$typeNameQuery === void 0 ? undefined : _ref$typeNameQuery,
3622
3841
  _ref$labelProperty = _ref.labelProperty,
3623
3842
  labelProperty = _ref$labelProperty === void 0 ? 'id' : _ref$labelProperty;
3624
3843
  var intl = useIntl();
3625
3844
 
3626
- var _useSetState = useSetState(initialState$1),
3845
+ var _useSetState = useSetState(initialState$2),
3627
3846
  options = _useSetState[0],
3628
3847
  setOptions = _useSetState[1];
3629
3848
 
@@ -3669,7 +3888,7 @@ var SearchInputList = function SearchInputList(_ref) {
3669
3888
  };
3670
3889
  };
3671
3890
 
3672
- var delayedQuery = useCallback(debounce$1(function (value) {
3891
+ var delayedQuery = useCallback(debounce(function (value) {
3673
3892
  return handleSearch(0, false, value);
3674
3893
  }, 500), []);
3675
3894
 
@@ -3701,7 +3920,7 @@ var SearchInputList = function SearchInputList(_ref) {
3701
3920
 
3702
3921
  var fnName = _get('searchEngineQueryParamsFunction', SearchEngine);
3703
3922
 
3704
- var qsParsed = traversal.client[fnName]({
3923
+ var qsParsed = traversal.client.getQueryParamsSearchFunction(fnName)({
3705
3924
  path: traversal.path,
3706
3925
  start: page * PageSize,
3707
3926
  pageSize: PageSize,
@@ -3743,7 +3962,7 @@ var SearchInputList = function SearchInputList(_ref) {
3743
3962
  var searchTermParsed = ['__or', "id=" + value.join('%26id=')];
3744
3963
  var getSearch = traversal.registry.get;
3745
3964
  var fnName = getSearch('searchEngineQueryParamsFunction', SearchEngine);
3746
- var qsParsed = traversal.client[fnName]({
3965
+ var qsParsed = traversal.client.getQueryParamsSearchFunction(fnName)({
3747
3966
  path: traversal.path,
3748
3967
  start: 0,
3749
3968
  pageSize: 100,
@@ -3759,9 +3978,9 @@ var SearchInputList = function SearchInputList(_ref) {
3759
3978
  searchTermQs = buildQs([].concat(qs, [searchTermParsed], qsParsed, typeNameParsed));
3760
3979
  }
3761
3980
 
3762
- 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) {
3763
3982
  var newValuesLabel = data.items.reduce(function (result, item) {
3764
- result[item.id] = get$1(item, labelProperty, item.id);
3983
+ result[item.id] = get(item, labelProperty, item.id);
3765
3984
  return result;
3766
3985
  }, {});
3767
3986
  setValuesLabels(newValuesLabel);
@@ -3781,7 +4000,7 @@ var SearchInputList = function SearchInputList(_ref) {
3781
4000
  return renderTextItemOption(item);
3782
4001
  }
3783
4002
 
3784
- return get$1(item, labelProperty, item.title) || item['@name'];
4003
+ return get(item, labelProperty, item.title) || item['@name'];
3785
4004
  };
3786
4005
 
3787
4006
  useEffect(function () {
@@ -3804,7 +4023,7 @@ var SearchInputList = function SearchInputList(_ref) {
3804
4023
  children: value.map(function (tag, index) {
3805
4024
  return jsxs("div", {
3806
4025
  className: "tag is-info is-medium",
3807
- children: [get$1(valuesLabel, tag, tag), jsx("button", {
4026
+ children: [get(valuesLabel, tag, tag), jsx("button", {
3808
4027
  className: "delete is-small",
3809
4028
  onClick: function onClick(ev) {
3810
4029
  ev.stopPropagation();
@@ -3824,7 +4043,7 @@ var SearchInputList = function SearchInputList(_ref) {
3824
4043
  if (!ev.currentTarget.contains(ev.relatedTarget)) {
3825
4044
  if (searchTerm !== '') {
3826
4045
  setSearchTerm('');
3827
- setOptions(initialState$1);
4046
+ setOptions(initialState$2);
3828
4047
  }
3829
4048
 
3830
4049
  setIsOpen(false);
@@ -3888,7 +4107,7 @@ var SearchInputList = function SearchInputList(_ref) {
3888
4107
  if (onChange && !value.includes(item.id)) {
3889
4108
  var _extends2;
3890
4109
 
3891
- 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)));
3892
4111
  onChange([].concat(value, [item.id]));
3893
4112
  }
3894
4113
  },
@@ -4076,7 +4295,7 @@ function EditableField(_ref) {
4076
4295
  ref.current.focus();
4077
4296
  }
4078
4297
  });
4079
- var canModified = modifyContent && !get$1(schema, 'readonly', false);
4298
+ var canModified = schema !== undefined && modifyContent && !get(schema, 'readonly', false);
4080
4299
 
4081
4300
  var saveField = function saveField(ev) {
4082
4301
  try {
@@ -4142,7 +4361,7 @@ function EditableField(_ref) {
4142
4361
  var deleteField = function deleteField(ev) {
4143
4362
  try {
4144
4363
  if (ev) ev.preventDefault();
4145
- return Promise.resolve(function () {
4364
+ return Promise.resolve(function (_schema$items) {
4146
4365
  if ((schema == null ? void 0 : schema.widget) === 'file') {
4147
4366
  var _ns2, _ref4, _ref5;
4148
4367
 
@@ -4170,7 +4389,7 @@ function EditableField(_ref) {
4170
4389
  });
4171
4390
  } else if ((schema == null ? void 0 : schema.type) === 'string' && schema != null && schema.enum) {
4172
4391
  setValue(null);
4173
- } 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') {
4174
4393
  setValue([]);
4175
4394
  }
4176
4395
  }());
@@ -4227,7 +4446,7 @@ function EditableField(_ref) {
4227
4446
  dataTest: "editableFieldBtnCancelTest",
4228
4447
  children: intl.formatMessage(genericMessages.cancel)
4229
4448
  })
4230
- }), !required && fieldHaveDeleteButton(schema) && jsx("div", {
4449
+ }), !required && schema && fieldHaveDeleteButton(schema) && jsx("div", {
4231
4450
  className: "control",
4232
4451
  children: jsx(Button, {
4233
4452
  className: "is-small is-danger",
@@ -4256,7 +4475,8 @@ var DownloadField = function DownloadField(_ref) {
4256
4475
  var blob = new Blob([text], {
4257
4476
  type: data.content_type
4258
4477
  });
4259
- var url = window.URL.createObjectURL(blob);
4478
+ var url = window.URL.createObjectURL(blob); // Create blob link to download
4479
+
4260
4480
  var link = document.createElement('a');
4261
4481
  link.href = url;
4262
4482
 
@@ -4271,6 +4491,7 @@ var DownloadField = function DownloadField(_ref) {
4271
4491
  setTimeout(function () {
4272
4492
  var _link$parentNode;
4273
4493
 
4494
+ // For Firefox it is necessary to delay revoking the ObjectURL
4274
4495
  window.URL.revokeObjectURL(url);
4275
4496
  (_link$parentNode = link.parentNode) == null ? void 0 : _link$parentNode.removeChild(link);
4276
4497
  }, 100);
@@ -4346,23 +4567,27 @@ function RenderField(_ref) {
4346
4567
  }
4347
4568
 
4348
4569
  if (type === 'object') {
4570
+ var _schema$properties;
4571
+
4349
4572
  if (Array.isArray(value)) {
4350
- return value.map(function (item) {
4573
+ return value.map(function (item, index) {
4351
4574
  return jsx("div", {
4352
4575
  children: jsx(RenderField, {
4353
4576
  value: item
4354
4577
  })
4355
- }, item);
4578
+ }, "renderField_" + index + "_" + (schema == null ? void 0 : schema.title));
4356
4579
  });
4357
4580
  }
4358
4581
 
4359
- return Object.keys(value).map(function (key) {
4360
- return jsx(FieldValue, {
4361
- field: get$1(schema, "properties." + key + ".title", key),
4362
- schema: get$1(schema, "properties." + key, {}),
4363
- value: value[key]
4364
- }, key);
4365
- });
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
+ }
4366
4591
  }
4367
4592
 
4368
4593
  return jsxs("p", {
@@ -4406,6 +4631,7 @@ var SearchRenderField = function SearchRenderField(_ref3) {
4406
4631
  var schema = _ref3.schema,
4407
4632
  value = _ref3.value,
4408
4633
  modifyContent = _ref3.modifyContent;
4634
+ console.log('search render fields');
4409
4635
  var intl = useIntl();
4410
4636
 
4411
4637
  var _useState = useState([]),
@@ -4430,7 +4656,7 @@ var SearchRenderField = function SearchRenderField(_ref3) {
4430
4656
  var searchTermParsed = ['__or', "id=" + valuesToSearch.join('%26id=')];
4431
4657
  var getSearch = traversal.registry.get;
4432
4658
  var fnName = getSearch('searchEngineQueryParamsFunction', SearchEngine);
4433
- var qsParsed = traversal.client[fnName]({
4659
+ var qsParsed = traversal.client.getQueryParamsSearchFunction(fnName)({
4434
4660
  path: traversal.path,
4435
4661
  start: 0,
4436
4662
  pageSize: 100,
@@ -4441,11 +4667,11 @@ var SearchRenderField = function SearchRenderField(_ref3) {
4441
4667
  searchTermQs = buildQs([searchTermParsed].concat(qsParsed));
4442
4668
  }
4443
4669
 
4444
- 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) {
4445
4671
  var newValuesLabel = data.items.map(function (item) {
4446
4672
  var _schema$labelProperty;
4447
4673
 
4448
- 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);
4449
4675
  });
4450
4676
  setValuesLabels(newValuesLabel);
4451
4677
  setIsLoadingData(false);
@@ -4455,13 +4681,15 @@ var SearchRenderField = function SearchRenderField(_ref3) {
4455
4681
  }
4456
4682
  };
4457
4683
 
4458
- var valuesToSearch = value;
4684
+ var valuesToSearch = [];
4459
4685
 
4460
- if (typeof valuesToSearch === 'string') {
4461
- valuesToSearch = [valuesToSearch];
4686
+ if (typeof value === 'string' && value) {
4687
+ valuesToSearch = [value];
4688
+ } else if (Array.isArray(value)) {
4689
+ valuesToSearch = value;
4462
4690
  }
4463
4691
 
4464
- if (valuesToSearch !== undefined && valuesToSearch.length > 0) {
4692
+ if (valuesToSearch.length > 0) {
4465
4693
  fetchData(valuesToSearch);
4466
4694
  } else {
4467
4695
  setValuesLabels([]);
@@ -4496,7 +4724,7 @@ var VocabularyRenderField = function VocabularyRenderField(_ref4) {
4496
4724
  modifyContent = _ref4.modifyContent;
4497
4725
  var intl = useIntl();
4498
4726
  var DEFAULT_VALUE_EDITABLE_FIELD = getDefaultValueEditableField(intl);
4499
- 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) || '';
4500
4728
  var vocabulary = useVocabulary(vocabularyName);
4501
4729
 
4502
4730
  var getRenderProps = function getRenderProps() {
@@ -4507,7 +4735,7 @@ var VocabularyRenderField = function VocabularyRenderField(_ref4) {
4507
4735
  if (schema != null && schema.vocabularyName) {
4508
4736
  var _vocabularyValue$titl;
4509
4737
 
4510
- var vocabularyValue = get$1(vocabulary, 'data.items', []).find(function (item) {
4738
+ var vocabularyValue = get(vocabulary, 'data.items', []).find(function (item) {
4511
4739
  return item.token === value;
4512
4740
  });
4513
4741
  renderProps['value'] = (_vocabularyValue$titl = vocabularyValue == null ? void 0 : vocabularyValue.title) != null ? _vocabularyValue$titl : '';
@@ -4517,7 +4745,7 @@ var VocabularyRenderField = function VocabularyRenderField(_ref4) {
4517
4745
  renderProps['value'] = ((_renderProps$value = renderProps['value']) != null ? _renderProps$value : []).map(function (value) {
4518
4746
  var _get$find$title, _get$find;
4519
4747
 
4520
- 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) {
4521
4749
  return item.token === value;
4522
4750
  })) == null ? void 0 : _get$find.title) != null ? _get$find$title : '';
4523
4751
  });
@@ -4594,7 +4822,7 @@ var EditComponent = forwardRef(function (_ref, ref) {
4594
4822
  queryCondition: schema != null && schema.queryCondition ? schema.queryCondition : 'title__in',
4595
4823
  path: schema.queryPath,
4596
4824
  labelProperty: schema != null && schema.labelProperty ? schema.labelProperty : 'title',
4597
- typeNameQuery: schema != null && schema.typeNameQuery ? schema.typeNameQuery : null
4825
+ typeNameQuery: schema == null ? void 0 : schema.typeNameQuery
4598
4826
  })]
4599
4827
  });
4600
4828
  } else if ((schema == null ? void 0 : schema.widget) === 'search') {
@@ -4611,7 +4839,7 @@ var EditComponent = forwardRef(function (_ref, ref) {
4611
4839
  queryCondition: schema != null && schema.queryCondition ? schema.queryCondition : 'title__in',
4612
4840
  path: schema.queryPath,
4613
4841
  labelProperty: schema != null && schema.labelProperty ? schema.labelProperty : 'title',
4614
- typeNameQuery: schema != null && schema.typeNameQuery ? schema.typeNameQuery : null
4842
+ typeNameQuery: schema == null ? void 0 : schema.typeNameQuery
4615
4843
  })]
4616
4844
  });
4617
4845
  } else if ((schema == null ? void 0 : schema.widget) === 'textarea' || (schema == null ? void 0 : schema.widget) === 'richtext') {
@@ -4641,7 +4869,7 @@ var EditComponent = forwardRef(function (_ref, ref) {
4641
4869
 
4642
4870
  if (schema.items.vocabularyName) {
4643
4871
  return jsx(SelectVocabulary, {
4644
- vocabularyName: get$1(schema, 'items.vocabularyName', null),
4872
+ vocabularyName: get(schema, 'items.vocabularyName', ''),
4645
4873
  val: val || [],
4646
4874
  className: className,
4647
4875
  classWrap: "is-fullwidth",
@@ -4678,22 +4906,25 @@ var EditComponent = forwardRef(function (_ref, ref) {
4678
4906
  }), jsx(InputList, {
4679
4907
  value: val || [],
4680
4908
  className: className,
4681
- onChange: function onChange(ev) {
4682
- return _setValue(ev);
4909
+ onChange: function onChange(val) {
4910
+ return _setValue(val);
4683
4911
  },
4684
4912
  ref: ref,
4685
4913
  dataTest: dataTest
4686
4914
  })]
4687
4915
  });
4688
4916
  } else if ((schema == null ? void 0 : schema.widget) === 'file') {
4917
+ var value = val;
4689
4918
  return jsx(FileUpload, {
4690
4919
  onChange: function onChange(ev) {
4691
4920
  return _setValue(ev);
4692
4921
  },
4693
- label: get$1(val, 'filename', null),
4922
+ label: get(value, 'filename', undefined),
4694
4923
  dataTest: dataTest
4695
4924
  });
4696
4925
  } else if ((schema == null ? void 0 : schema.widget) === 'select' && schema.type === 'string') {
4926
+ var _schema$vocabulary;
4927
+
4697
4928
  if (schema != null && schema.vocabularyName) {
4698
4929
  return jsx(SelectVocabulary, {
4699
4930
  val: val || '',
@@ -4702,7 +4933,7 @@ var EditComponent = forwardRef(function (_ref, ref) {
4702
4933
  classWrap: "is-fullwidth",
4703
4934
  dataTest: dataTest,
4704
4935
  onChange: _setValue,
4705
- vocabularyName: get$1(schema, 'vocabularyName', null),
4936
+ vocabularyName: get(schema, 'vocabularyName', ''),
4706
4937
  placeholder: placeholder,
4707
4938
  id: id
4708
4939
  });
@@ -4714,7 +4945,7 @@ var EditComponent = forwardRef(function (_ref, ref) {
4714
4945
  appendDefault: true,
4715
4946
  classWrap: "is-fullwidth",
4716
4947
  dataTest: dataTest,
4717
- 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) {
4718
4949
  return {
4719
4950
  text: item,
4720
4951
  value: item
@@ -4725,26 +4956,27 @@ var EditComponent = forwardRef(function (_ref, ref) {
4725
4956
  id: id
4726
4957
  });
4727
4958
  } else if ((schema == null ? void 0 : schema.type) === 'object' && schema.widget !== 'file') {
4728
- var value = val;
4959
+ var _value = val;
4729
4960
  return jsxs(Fragment, {
4730
4961
  children: [schema.title && jsx("h4", {
4731
4962
  className: "subtitle mt-2",
4732
4963
  children: schema.title
4733
- }), Object.keys(get$1(schema, 'properties', {})).map(function (key) {
4964
+ }), Object.keys(get(schema, 'properties', {})).map(function (key) {
4734
4965
  var _subSchema$title;
4735
4966
 
4736
- var subSchema = get$1(schema, 'properties', {})[key];
4737
- 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;
4738
4970
  return jsx(EditComponent, {
4739
4971
  id: id + "[" + key + "]",
4740
4972
  schema: subSchema,
4741
- val: value && key in value ? value[key] : '',
4973
+ val: _value && key in _value ? _value[key] : '',
4742
4974
  placeholder: (_subSchema$title = subSchema == null ? void 0 : subSchema.title) != null ? _subSchema$title : '',
4743
4975
  required: requiredFields.includes(key),
4744
4976
  setValue: function setValue(ev) {
4745
4977
  var _extends2;
4746
4978
 
4747
- _setValue(_extends({}, value, (_extends2 = {}, _extends2[key] = ev, _extends2)));
4979
+ _setValue(_extends({}, _value, (_extends2 = {}, _extends2[key] = ev, _extends2)));
4748
4980
  },
4749
4981
  dataTest: key + "TestInput"
4750
4982
  }, id + "[" + key + "]");
@@ -4806,9 +5038,9 @@ function IAttachment(_ref) {
4806
5038
  }, 1), jsx("td", {
4807
5039
  children: jsx(EditableField, {
4808
5040
  field: key,
4809
- value: values[key],
5041
+ value: values.file,
4810
5042
  ns: "guillotina.behaviors.attachment.IAttachment",
4811
- schema: properties[key],
5043
+ schema: properties.file,
4812
5044
  modifyContent: modifyContent && ['file'].includes(key)
4813
5045
  })
4814
5046
  }, 2)]
@@ -4858,6 +5090,11 @@ function IMultiAttachment(_ref) {
4858
5090
 
4859
5091
  setLoading(true);
4860
5092
  setError(undefined);
5093
+
5094
+ if (!file) {
5095
+ return Promise.resolve();
5096
+ }
5097
+
4861
5098
  var endpoint = Ctx.path + "@upload/files/" + fileKey;
4862
5099
  return Promise.resolve(Ctx.client.upload(endpoint, file)).then(function (req) {
4863
5100
  if (req.status !== 200) {
@@ -4926,7 +5163,7 @@ function IMultiAttachment(_ref) {
4926
5163
  field: "files/" + key,
4927
5164
  value: values['files'][key],
4928
5165
  ns: "guillotina.behaviors.attachment.IMultiAttachment.files",
4929
- schema: properties['files']['additionalProperties'],
5166
+ schema: get(properties, 'files.additionalProperties', {}),
4930
5167
  modifyContent: false
4931
5168
  }), jsx("div", {
4932
5169
  className: "ml-5",
@@ -5150,13 +5387,18 @@ function IImageAttachment(_ref) {
5150
5387
  ev.preventDefault();
5151
5388
  setLoading(true);
5152
5389
  setError(undefined);
5390
+
5391
+ if (!file) {
5392
+ return Promise.resolve();
5393
+ }
5394
+
5153
5395
  var endpoint = Ctx.path + "@upload/image";
5154
5396
  return Promise.resolve(Ctx.client.upload(endpoint, file)).then(function (req) {
5155
5397
  var _exit;
5156
5398
 
5157
5399
  function _temp4(_result) {
5158
5400
  if (_exit) return _result;
5159
- setFile(undefined);
5401
+ setFile(null);
5160
5402
  setLoading(false);
5161
5403
  Ctx.flash(intl.formatMessage(genericFileMessages.image_uploaded), 'success');
5162
5404
  Ctx.refresh();
@@ -5437,7 +5679,7 @@ function IMultiImageAttachment(_ref) {
5437
5679
  fileKey = _useState[0],
5438
5680
  setFileKey = _useState[1];
5439
5681
 
5440
- var _useState2 = useState(null),
5682
+ var _useState2 = useState(undefined),
5441
5683
  file = _useState2[0],
5442
5684
  setFile = _useState2[1];
5443
5685
 
@@ -5470,6 +5712,11 @@ function IMultiImageAttachment(_ref) {
5470
5712
 
5471
5713
  setLoading(true);
5472
5714
  setError(undefined);
5715
+
5716
+ if (!file) {
5717
+ return Promise.resolve();
5718
+ }
5719
+
5473
5720
  var endpoint = Ctx.path + "@upload/images/" + fileKey;
5474
5721
  return Promise.resolve(Ctx.client.upload(endpoint, file)).then(function (req) {
5475
5722
  var _exit;
@@ -5572,7 +5819,7 @@ function IMultiImageAttachment(_ref) {
5572
5819
  field: "images/" + key,
5573
5820
  value: values['images'][key],
5574
5821
  ns: "guillotina.contrib.image.behaviors.IMultiImageAttachment.images",
5575
- schema: properties['images']['additionalProperties'],
5822
+ schema: get(properties, 'images.additionalProperties', {}),
5576
5823
  modifyContent: false,
5577
5824
  required: false
5578
5825
  }), jsx("div", {
@@ -5862,7 +6109,7 @@ function IMultiImageOrderedAttachment(_ref2) {
5862
6109
  sortedList = _useState2[0],
5863
6110
  setSortedList = _useState2[1];
5864
6111
 
5865
- var _useState3 = useState(null),
6112
+ var _useState3 = useState(undefined),
5866
6113
  file = _useState3[0],
5867
6114
  setFile = _useState3[1];
5868
6115
 
@@ -6006,7 +6253,7 @@ function IMultiImageOrderedAttachment(_ref2) {
6006
6253
  field: "images/" + key,
6007
6254
  value: values['images'][key],
6008
6255
  ns: "guillotina.contrib.image.behaviors.IMultiImageAttachment.images",
6009
- schema: properties['images']['additionalProperties'],
6256
+ schema: get(properties, 'images.additionalProperties', {}),
6010
6257
  modifyContent: false,
6011
6258
  required: false
6012
6259
  }), jsx("div", {
@@ -6061,163 +6308,6 @@ function IMultiImageOrderedAttachment(_ref2) {
6061
6308
  });
6062
6309
  }
6063
6310
 
6064
- var base = {
6065
- local: {
6066
- roleperm: {},
6067
- prinperm: {},
6068
- prinrole: {}
6069
- },
6070
- inherit: []
6071
- };
6072
- var Sharing = /*#__PURE__*/function () {
6073
- function Sharing(element) {
6074
- this.local = void 0;
6075
- this.inherit = void 0;
6076
- Object.assign(this, element || base);
6077
- }
6078
-
6079
- var _proto = Sharing.prototype;
6080
-
6081
- _proto.getRole = function getRole(role) {
6082
- return this.local.roleperm[role];
6083
- };
6084
-
6085
- _proto.getPrincipals = function getPrincipals(principal) {
6086
- return this.local.prinperm[principal];
6087
- };
6088
-
6089
- _proto.getPrinroles = function getPrinroles(role) {
6090
- return this.local.prinrole[role];
6091
- };
6092
-
6093
- _createClass(Sharing, [{
6094
- key: "roles",
6095
- get: function get() {
6096
- return Object.keys(this.local.roleperm);
6097
- }
6098
- }, {
6099
- key: "principals",
6100
- get: function get() {
6101
- return Object.keys(this.local.prinperm);
6102
- }
6103
- }, {
6104
- key: "prinrole",
6105
- get: function get() {
6106
- return Object.keys(this.local.prinrole);
6107
- }
6108
- }]);
6109
-
6110
- return Sharing;
6111
- }();
6112
-
6113
- var ItemModel = /*#__PURE__*/function () {
6114
- function ItemModel(item, url) {
6115
- if (url === void 0) {
6116
- url = '';
6117
- }
6118
-
6119
- this.item = void 0;
6120
- this.url = void 0;
6121
- this.item = item;
6122
- this.url = url;
6123
- }
6124
-
6125
- _createClass(ItemModel, [{
6126
- key: "path",
6127
- get: function get() {
6128
- var item = this.item['@id'] ? this.item['@id'] : this.item['@absolute_url'];
6129
- var path = item.split('//')[1].split('/').splice(1).join('/');
6130
- path = "/" + path + "/";
6131
-
6132
- if (this.url.length > 0) {
6133
- if (this.url.startsWith('/')) {
6134
- path = path.replace(this.url.substring(1), '');
6135
- } else {
6136
- path = path.replace(this.url, '');
6137
- }
6138
- }
6139
-
6140
- return path;
6141
- }
6142
- }, {
6143
- key: "name",
6144
- get: function get() {
6145
- return this.item.title || this.item['@name'];
6146
- }
6147
- }, {
6148
- key: "icon",
6149
- get: function get() {
6150
- var cfg = useConfig();
6151
-
6152
- if (cfg.icons && cfg.icons[this.type]) {
6153
- return cfg.icons[this.type];
6154
- }
6155
-
6156
- switch (this.type) {
6157
- case 'GroupManager':
6158
- return 'fas fa-users-cog';
6159
-
6160
- case 'UserManager':
6161
- return 'fas fa-user-cog';
6162
-
6163
- case 'User':
6164
- return 'fas fa-user';
6165
-
6166
- case 'Group':
6167
- return 'fas fa-users';
6168
-
6169
- case 'Folder':
6170
- return 'fas fa-folder';
6171
-
6172
- default:
6173
- return 'fas fa-file';
6174
- }
6175
- }
6176
- }, {
6177
- key: "fullPath",
6178
- get: function get() {
6179
- return this.url + this.item.id;
6180
- }
6181
- }, {
6182
- key: "id",
6183
- get: function get() {
6184
- if (this.item.id) {
6185
- return this.item.id;
6186
- }
6187
-
6188
- var id = this.item['@id'].split('&')[0].split('/');
6189
- return id[id.length - 1];
6190
- }
6191
- }, {
6192
- key: "uid",
6193
- get: function get() {
6194
- return this.item['@uid'];
6195
- }
6196
- }, {
6197
- key: "type",
6198
- get: function get() {
6199
- return this.item['@type'] || this.item.type_name;
6200
- }
6201
- }, {
6202
- key: "title",
6203
- get: function get() {
6204
- return this.item.title;
6205
- }
6206
- }, {
6207
- key: "created",
6208
- get: function get() {
6209
- return this.item.creation_date ? formatDate(this.item.creation_date) : '';
6210
- }
6211
- }, {
6212
- key: "updated",
6213
- get: function get() {
6214
- return this.item.modification_date ? formatDate(this.item.modification_date) : '';
6215
- }
6216
- }]);
6217
-
6218
- return ItemModel;
6219
- }();
6220
-
6221
6311
  var messages$1 = defineMessages({
6222
6312
  status_changed_ok: {
6223
6313
  id: "status_changed_ok",
@@ -6293,13 +6383,12 @@ function IWorkflow() {
6293
6383
  definition = _useState[0],
6294
6384
  setDefinition = _useState[1];
6295
6385
 
6296
- var _useState2 = useState(null),
6386
+ var _useState2 = useState(undefined),
6297
6387
  workflowAction = _useState2[0],
6298
6388
  setWorkflowAction = _useState2[1];
6299
6389
 
6300
- var model = new ItemModel(Ctx.context);
6301
6390
  var vocabulary = useVocabulary('workflow_states');
6302
- var currentState = model.item['guillotina.contrib.workflows.interfaces.IWorkflowBehavior']['review_state'];
6391
+ var currentState = Ctx.context['guillotina.contrib.workflows.interfaces.IWorkflowBehavior']['review_state'];
6303
6392
  useEffect(function () {
6304
6393
  loadDefinition();
6305
6394
  }, [Ctx.path]);
@@ -6319,7 +6408,7 @@ function IWorkflow() {
6319
6408
  }
6320
6409
 
6321
6410
  Ctx.refresh();
6322
- setWorkflowAction(null);
6411
+ setWorkflowAction(undefined);
6323
6412
  });
6324
6413
  });
6325
6414
  } catch (e) {
@@ -6328,21 +6417,23 @@ function IWorkflow() {
6328
6417
  };
6329
6418
 
6330
6419
  var getStateTitle = function getStateTitle() {
6331
- var _vocabulary$data, _vocabulary$data$item;
6420
+ var _vocabulary$data$item, _vocabulary$data;
6332
6421
 
6333
- if (((_vocabulary$data = vocabulary.data) == null ? void 0 : (_vocabulary$data$item = _vocabulary$data.items) == null ? void 0 : _vocabulary$data$item.length) > 0) {
6334
- var vocabularyValue = vocabulary.data.items.find(function (item) {
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;
6424
+
6425
+ var vocabularyValue = vocabulary == null ? void 0 : (_vocabulary$data2 = vocabulary.data) == null ? void 0 : _vocabulary$data2.items.find(function (item) {
6335
6426
  return item.token === currentState;
6336
6427
  });
6337
6428
 
6338
6429
  if (vocabularyValue) {
6339
- var translatedValue = get$1(vocabularyValue, "title.translated_title." + intl.locale, null);
6430
+ var translatedValue = get(vocabularyValue, "title.translated_title." + intl.locale, null);
6340
6431
 
6341
6432
  if (translatedValue !== null) {
6342
6433
  return translatedValue;
6343
6434
  }
6344
6435
 
6345
- var titleValue = get$1(vocabularyValue, "title.title." + intl.locale, null);
6436
+ var titleValue = get(vocabularyValue, "title.title." + intl.locale, null);
6346
6437
 
6347
6438
  if (titleValue !== null) {
6348
6439
  return titleValue;
@@ -6358,7 +6449,7 @@ function IWorkflow() {
6358
6449
  children: [workflowAction && jsx(Confirm, {
6359
6450
  loading: loading,
6360
6451
  onCancel: function onCancel() {
6361
- return setWorkflowAction(null);
6452
+ return setWorkflowAction(undefined);
6362
6453
  },
6363
6454
  onConfirm: doWorkflowAction,
6364
6455
  message: intl.formatMessage(messages$1.confirm_message, {
@@ -6384,7 +6475,7 @@ function IWorkflow() {
6384
6475
  onClick: function onClick() {
6385
6476
  return setWorkflowAction(transition['@id'].split('@workflow')[1].slice(1));
6386
6477
  },
6387
- children: get$1(transition, "metadata.translated_title." + intl.locale, transition.title)
6478
+ children: get(transition, "metadata.translated_title." + intl.locale, transition.title)
6388
6479
  }, transition['@id']);
6389
6480
  })]
6390
6481
  })]
@@ -6410,14 +6501,17 @@ function PanelActions() {
6410
6501
 
6411
6502
  return jsx(Fragment$1, {
6412
6503
  children: Object.keys(ACTIONS_OBJECT).map(function (actionKey) {
6413
- if (hasPerm(ACTIONS_OBJECT[actionKey].perms)) {
6504
+ var actionKeyTyped = actionKey;
6505
+ var actionObject = ACTIONS_OBJECT[actionKeyTyped];
6506
+
6507
+ if (hasPerm(actionObject.perms)) {
6414
6508
  return jsx("button", {
6415
6509
  className: "button mr-4",
6416
6510
  onClick: function onClick() {
6417
- onAction(actionKey);
6511
+ onAction(actionKeyTyped);
6418
6512
  },
6419
- children: ACTIONS_OBJECT[actionKey].text
6420
- }, "panel_action_" + ACTIONS_OBJECT[actionKey].text);
6513
+ children: actionObject.text
6514
+ }, "panel_action_" + actionObject.text);
6421
6515
  }
6422
6516
  })
6423
6517
  });
@@ -6459,7 +6553,8 @@ var messages$2 = defineMessages({
6459
6553
  "value": "Installed Addons"
6460
6554
  }]
6461
6555
  }
6462
- });
6556
+ }); // TODO: Refactor without useAsync... just crudContext
6557
+
6463
6558
  function PanelAddons() {
6464
6559
  var _state$data$available, _state$data, _state$data$available2, _state$data2, _state$data$installed, _state$data3, _state$data$installed2, _state$data4;
6465
6560
 
@@ -6614,8 +6709,9 @@ var prepareData = function prepareData(result) {
6614
6709
 
6615
6710
  var arrayToObject = function arrayToObject(array) {
6616
6711
  return array.reduce(function (obj, item) {
6617
- obj[item.id] = item;
6618
- return obj;
6712
+ var _extends2;
6713
+
6714
+ return _extends({}, obj, (_extends2 = {}, _extends2[item.id] = item, _extends2));
6619
6715
  }, {});
6620
6716
  };
6621
6717
 
@@ -6777,8 +6873,9 @@ function ItemsActionsProvider(_ref) {
6777
6873
 
6778
6874
  function onSelectAllItems(checked) {
6779
6875
  setSelected(items.reduce(function (obj, item) {
6780
- obj[item.path + "/" + item.id] = checked;
6781
- return obj;
6876
+ var _extends2;
6877
+
6878
+ return _extends({}, obj, (_extends2 = {}, _extends2[item.path + "/" + item.id] = checked, _extends2));
6782
6879
  }, {
6783
6880
  all: checked
6784
6881
  }));
@@ -6786,11 +6883,11 @@ function ItemsActionsProvider(_ref) {
6786
6883
 
6787
6884
  function onSelectOneItem(item) {
6788
6885
  setSelected(function (state) {
6789
- var _extends2;
6886
+ var _extends3;
6790
6887
 
6791
- return _extends({}, state, (_extends2 = {
6888
+ return _extends({}, state, (_extends3 = {
6792
6889
  all: false
6793
- }, _extends2[item.path + "/" + item.id] = !state[item.path + "/" + item.id], _extends2));
6890
+ }, _extends3[item.path + "/" + item.id] = !state[item.path + "/" + item.id], _extends3));
6794
6891
  });
6795
6892
  }
6796
6893
 
@@ -6812,13 +6909,38 @@ function ItemsActionsProvider(_ref) {
6812
6909
  children: children
6813
6910
  });
6814
6911
  }
6815
- function AllItemsCheckbox(_ref2) {
6816
- var dataTest = _ref2.dataTest;
6817
6912
 
6913
+ var useItemsActions = function useItemsActions() {
6818
6914
  var _useContext = useContext(ItemsActionsCtx),
6915
+ onAction = _useContext.onAction,
6916
+ onSelectOneItem = _useContext.onSelectOneItem,
6819
6917
  onSelectAllItems = _useContext.onSelectAllItems,
6820
6918
  selected = _useContext.selected;
6821
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
+
6822
6944
  return jsx(Checkbox, {
6823
6945
  onChange: onSelectAllItems,
6824
6946
  checked: selected.all,
@@ -6829,9 +6951,9 @@ function ItemCheckbox(_ref3) {
6829
6951
  var item = _ref3.item,
6830
6952
  dataTest = _ref3.dataTest;
6831
6953
 
6832
- var _useContext2 = useContext(ItemsActionsCtx),
6833
- selected = _useContext2.selected,
6834
- onSelectOneItem = _useContext2.onSelectOneItem;
6954
+ var _useItemsActions2 = useItemsActions(),
6955
+ selected = _useItemsActions2.selected,
6956
+ onSelectOneItem = _useItemsActions2.onSelectOneItem;
6835
6957
 
6836
6958
  var absId = item.path + "/" + item.id;
6837
6959
  var value = selected[absId];
@@ -6843,14 +6965,18 @@ function ItemCheckbox(_ref3) {
6843
6965
  dataTest: dataTest
6844
6966
  });
6845
6967
  }
6968
+ /**
6969
+ * Dropdown to choose some action to apply to the selected items.
6970
+ */
6971
+
6846
6972
  function ItemsActionsDropdown() {
6847
6973
  var intl = useIntl();
6848
6974
  var ACTIONS_OBJECT = getActionsObject(intl, true);
6849
6975
  var traversal = useTraversal();
6850
6976
 
6851
- var _useContext3 = useContext(ItemsActionsCtx),
6852
- selected = _useContext3.selected,
6853
- onAction = _useContext3.onAction;
6977
+ var _useItemsActions3 = useItemsActions(),
6978
+ selected = _useItemsActions3.selected,
6979
+ onAction = _useItemsActions3.onAction;
6854
6980
 
6855
6981
  var disabled = Object.values(selected).every(function (v) {
6856
6982
  return !v;
@@ -6934,6 +7060,7 @@ function Pagination(_ref) {
6934
7060
  "aria-label": "pagination",
6935
7061
  children: [jsx("a", {
6936
7062
  className: "pagination-previous is-small",
7063
+ // disabled={current === 0}
6937
7064
  onClick: function onClick() {
6938
7065
  return current > 0 ? doPaginate(current - 1) : null;
6939
7066
  },
@@ -6945,6 +7072,7 @@ function Pagination(_ref) {
6945
7072
  })
6946
7073
  }), jsx("a", {
6947
7074
  className: "pagination-next is-small",
7075
+ // disabled={current >= maxPages - 1}
6948
7076
  onClick: function onClick() {
6949
7077
  return doPaginate(current + 1);
6950
7078
  },
@@ -6959,6 +7087,170 @@ function Pagination(_ref) {
6959
7087
  });
6960
7088
  }
6961
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
+
6962
7254
  function Item(_ref) {
6963
7255
  var item = _ref.item,
6964
7256
  icon = _ref.icon;
@@ -7099,11 +7391,11 @@ function SearchOptionsLabels(_ref) {
7099
7391
  renderValue = _useState[0],
7100
7392
  setRenderValue = _useState[1];
7101
7393
 
7102
- var defaultRenderValue = location.get(query);
7394
+ var defaultRenderValue = location.get(query) || '';
7103
7395
  useEffect(function () {
7104
7396
  var value = defaultRenderValue;
7105
7397
 
7106
- if ((options != null ? options : []).length > 0) {
7398
+ if (options && (options != null ? options : []).length > 0) {
7107
7399
  var option = options.find(function (item) {
7108
7400
  return item.value === value;
7109
7401
  });
@@ -7152,14 +7444,16 @@ function SearchVocabularyLabels(_ref) {
7152
7444
  setRenderValue = _useState[1];
7153
7445
 
7154
7446
  var vocabulary = useVocabulary(vocabularyName);
7155
- var defaultRenderValue = location.get(query);
7447
+ var defaultRenderValue = location.get(query) || '';
7156
7448
  useEffect(function () {
7157
7449
  var _vocabulary$data$item, _vocabulary$data;
7158
7450
 
7159
7451
  var value = defaultRenderValue;
7160
7452
 
7161
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) {
7162
- 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) {
7163
7457
  return item.token === value;
7164
7458
  });
7165
7459
 
@@ -7193,7 +7487,7 @@ function SearchVocabularyLabels(_ref) {
7193
7487
  return null;
7194
7488
  }
7195
7489
 
7196
- var initialState$2 = {
7490
+ var initialState$3 = {
7197
7491
  page: 0,
7198
7492
  items: [],
7199
7493
  loading: true,
@@ -7212,7 +7506,7 @@ function PanelItems() {
7212
7506
  var intl = useIntl();
7213
7507
  var Ctx = useTraversal();
7214
7508
 
7215
- var _useSetState = useSetState(initialState$2),
7509
+ var _useSetState = useSetState(initialState$3),
7216
7510
  state = _useSetState[0],
7217
7511
  setState = _useSetState[1];
7218
7512
 
@@ -7228,7 +7522,7 @@ function PanelItems() {
7228
7522
  var page;
7229
7523
 
7230
7524
  try {
7231
- page = parseInt(location.get('page')) || 0;
7525
+ page = parseInt(location.get('page') || '0');
7232
7526
  } catch (_unused) {
7233
7527
  page = 0;
7234
7528
  }
@@ -7275,7 +7569,7 @@ function PanelItems() {
7275
7569
  var resultQueryParams = [];
7276
7570
  var resultDynamicLocation = [];
7277
7571
  filterSchema.forEach(function (filter) {
7278
- var itemParam = location.get(filter.attribute_key);
7572
+ var itemParam = location.get(filter.attribute_key) || '';
7279
7573
  resultDynamicLocation.push(itemParam);
7280
7574
 
7281
7575
  if (itemParam) {
@@ -7287,53 +7581,51 @@ function PanelItems() {
7287
7581
  var controller = new AbortController();
7288
7582
  if (Ctx.state.loading) return;
7289
7583
 
7290
- try {
7291
- setState({
7292
- loading: true,
7293
- total: Ctx.context.length
7294
- });
7295
- var get = Ctx.registry.get;
7296
- var fnName = get('searchEngineQueryParamsFunction', SearchEngine);
7297
-
7298
- if (sortParsed === undefined) {
7299
- var defaultSortValue = Ctx.registry.getDefaultSortValue(Ctx.context['@type'], {
7300
- key: 'id',
7301
- direction: 'des'
7584
+ var getData = function getData() {
7585
+ try {
7586
+ setState({
7587
+ loading: true,
7588
+ total: Ctx.context.length
7302
7589
  });
7303
- sortParsed = parser("_sort_" + defaultSortValue.direction + "=" + defaultSortValue.key);
7304
- }
7590
+ var get = Ctx.registry.get;
7591
+ var fnName = get('searchEngineQueryParamsFunction', SearchEngine);
7305
7592
 
7306
- var qsParsed = Ctx.client[fnName]({
7307
- path: Ctx.path,
7308
- start: page * PageSize,
7309
- pageSize: PageSize
7310
- });
7311
- 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 = '';
7312
7604
 
7313
- if (search || type || resultQueryParams.length > 0) {
7314
- var _searchParsed, _typeParsed, _sortParsed;
7605
+ if (search || type || resultQueryParams.length > 0) {
7606
+ var _searchParsed, _typeParsed, _sortParsed;
7315
7607
 
7316
- qs = buildQs([].concat(qsParsed, (_searchParsed = searchParsed) != null ? _searchParsed : [], (_typeParsed = typeParsed) != null ? _typeParsed : [], (_sortParsed = sortParsed) != null ? _sortParsed : [], resultQueryParams));
7317
- } else {
7318
- 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;
7319
7611
 
7320
- qs = buildQs([].concat(qsParsed, (_sortParsed2 = sortParsed) != null ? _sortParsed2 : []));
7321
- }
7612
+ qs = buildQs([].concat(qsParsed, (_sortParsed2 = sortParsed) != null ? _sortParsed2 : []));
7613
+ }
7322
7614
 
7323
- var signal = controller.signal;
7324
- return Promise.resolve(Ctx.client.search(Ctx.path, qs, false, false, {
7325
- signal: signal
7326
- })).then(function (data) {
7327
- setState({
7328
- items: data.member,
7329
- loading: false,
7330
- 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
+ });
7331
7622
  });
7332
- });
7333
- } catch (e) {
7334
- Promise.reject(e);
7335
- }
7623
+ } catch (e) {
7624
+ return Promise.reject(e);
7625
+ }
7626
+ };
7336
7627
 
7628
+ getData();
7337
7629
  return function () {
7338
7630
  controller.abort();
7339
7631
  };
@@ -7378,12 +7670,14 @@ function PanelItems() {
7378
7670
  var _filter$values;
7379
7671
 
7380
7672
  if (filter.type === 'select' && ((_filter$values = filter.values) != null ? _filter$values : []).length > 0) {
7673
+ var _filter$values2;
7674
+
7381
7675
  return jsx(Select, {
7382
7676
  id: filter.attribute_key,
7383
7677
  placeholder: filter.label,
7384
7678
  appendDefault: true,
7385
7679
  classWrap: "is-size-7 is-fullwidth",
7386
- options: filter.values,
7680
+ options: (_filter$values2 = filter.values) != null ? _filter$values2 : [],
7387
7681
  value: location.get(filter.attribute_key) || '',
7388
7682
  dataTest: "filterInput" + filter.attribute_key,
7389
7683
  onChange: function onChange(value) {
@@ -7450,7 +7744,7 @@ function PanelItems() {
7450
7744
  var filterData = location.get(filter.attribute_key);
7451
7745
 
7452
7746
  if (filterData) {
7453
- var _filter$values2;
7747
+ var _filter$values3;
7454
7748
 
7455
7749
  if (filter.type === 'select' && filter.vocabulary) {
7456
7750
  return jsx("div", {
@@ -7459,7 +7753,7 @@ function PanelItems() {
7459
7753
  vocabularyName: filter == null ? void 0 : filter.vocabulary
7460
7754
  })
7461
7755
  }, filter.attribute_key);
7462
- } 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) {
7463
7757
  return jsx("div", {
7464
7758
  children: jsx(SearchOptionsLabels, {
7465
7759
  query: filter.attribute_key,
@@ -7505,7 +7799,7 @@ function PanelItems() {
7505
7799
  className: "has-text-info is-flex is-align-items-center",
7506
7800
  children: [jsx("span", {
7507
7801
  children: column.label
7508
- }), getIcon(column.key, column.isSortable)]
7802
+ }), getIcon(column.key, !!column.isSortable)]
7509
7803
  })
7510
7804
  }, "table-col-" + column.label);
7511
7805
  }), jsx("th", {
@@ -7516,7 +7810,7 @@ function PanelItems() {
7516
7810
  children: [items && items.map(function (item) {
7517
7811
  return jsx(RItem, {
7518
7812
  item: item,
7519
- search: search,
7813
+ search: search != null ? search : '',
7520
7814
  columns: columns
7521
7815
  }, item['@uid']);
7522
7816
  }), items && items.length === 0 && jsx("tr", {
@@ -7540,17 +7834,19 @@ function PanelItems() {
7540
7834
  }
7541
7835
 
7542
7836
  function BehaviorsView(_ref) {
7837
+ var _context$__behaviors_;
7838
+
7543
7839
  var context = _ref.context,
7544
7840
  schema = _ref.schema;
7545
7841
  var Ctx = useTraversal();
7546
7842
  var getBehavior = Ctx.registry.getBehavior;
7547
- var behaviors = [].concat(context.__behaviors__, context['@static_behaviors']);
7843
+ var behaviors = [].concat((_context$__behaviors_ = context.__behaviors__) != null ? _context$__behaviors_ : [], Object(context['@static_behaviors']));
7548
7844
 
7549
- var GetBehavior = function GetBehavior(b) {
7550
- var Cls = getBehavior(b, BehaviorNotImplemented);
7845
+ var GetBehavior = function GetBehavior(behaviorName) {
7846
+ var Cls = getBehavior(behaviorName, BehaviorNotImplemented);
7551
7847
  return jsx(Cls, {
7552
- values: context[b],
7553
- properties: get$1(schema, ['definitions', b, 'properties'], {})
7848
+ values: context[behaviorName],
7849
+ properties: get(schema, ['definitions', behaviorName, 'properties'], {})
7554
7850
  });
7555
7851
  };
7556
7852
 
@@ -7646,9 +7942,11 @@ function PanelProperties() {
7646
7942
  var properties = Object.keys((schema == null ? void 0 : (_schema$data = schema.data) == null ? void 0 : _schema$data.properties) || []).filter(function (key) {
7647
7943
  return !ignoreFields.includes(key);
7648
7944
  }).map(function (key) {
7945
+ var _schema$data2;
7946
+
7649
7947
  return {
7650
7948
  key: key,
7651
- value: schema.data.properties[key]
7949
+ value: schema == null ? void 0 : (_schema$data2 = schema.data) == null ? void 0 : _schema$data2.properties[key]
7652
7950
  };
7653
7951
  });
7654
7952
  useEffect(function () {
@@ -7660,7 +7958,7 @@ function PanelProperties() {
7660
7958
  setSchema({
7661
7959
  loading: true
7662
7960
  });
7663
- 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) {
7664
7962
  setSchema({
7665
7963
  loading: false,
7666
7964
  data: dataJson
@@ -7735,7 +8033,7 @@ function PanelProperties() {
7735
8033
  }), jsx("td", {
7736
8034
  children: jsx(EditableField, {
7737
8035
  field: prop,
7738
- value: Ctx.context[prop],
8036
+ value: get(Ctx.context, prop, ''),
7739
8037
  modifyContent: false
7740
8038
  })
7741
8039
  })]
@@ -7759,7 +8057,7 @@ function PanelProperties() {
7759
8057
  })
7760
8058
  }), jsx("tbody", {
7761
8059
  children: properties.map(function (_ref) {
7762
- var _schema$data$required, _schema$data2;
8060
+ var _schema$data$required, _schema$data3;
7763
8061
 
7764
8062
  var key = _ref.key,
7765
8063
  value = _ref.value;
@@ -7772,10 +8070,10 @@ function PanelProperties() {
7772
8070
  }), jsx("td", {
7773
8071
  children: jsx(EditableField, {
7774
8072
  field: key,
7775
- value: Ctx.context[key],
8073
+ value: get(Ctx.context, key, ''),
7776
8074
  schema: value,
7777
8075
  modifyContent: modifyContent,
7778
- 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)
7779
8077
  })
7780
8078
  })]
7781
8079
  }, 'prop' + key);
@@ -7811,14 +8109,6 @@ function PermissionPrinperm(_ref) {
7811
8109
  state = _useSetState[0],
7812
8110
  setState = _useSetState[1];
7813
8111
 
7814
- var getMultiples = function getMultiples(field, setter) {
7815
- return function (values) {
7816
- var _setter;
7817
-
7818
- setter((_setter = {}, _setter[field] = values, _setter));
7819
- };
7820
- };
7821
-
7822
8112
  var savePermission = function savePermission() {
7823
8113
  try {
7824
8114
  if (!state.principal || !state.setting || state.permission.length === 0) {
@@ -7868,7 +8158,7 @@ function PermissionPrinperm(_ref) {
7868
8158
  children: intl.formatMessage(genericMessages.select_principal)
7869
8159
  }), jsx(Select, {
7870
8160
  appendDefault: true,
7871
- options: principals,
8161
+ options: principals != null ? principals : [],
7872
8162
  onChange: function onChange(value) {
7873
8163
  return setState({
7874
8164
  principal: value
@@ -7882,8 +8172,12 @@ function PermissionPrinperm(_ref) {
7882
8172
  className: "label",
7883
8173
  children: intl.formatMessage(genericMessages.select_permissions)
7884
8174
  }), jsx(Select, {
7885
- options: permissions,
7886
- onChange: getMultiples('permission', setState),
8175
+ options: permissions != null ? permissions : [],
8176
+ onChange: function onChange(values) {
8177
+ setState({
8178
+ permission: values
8179
+ });
8180
+ },
7887
8181
  size: 5,
7888
8182
  multiple: true,
7889
8183
  dataTest: "selectPermissionsTest"
@@ -7934,14 +8228,6 @@ function PermissionPrinrole(_ref) {
7934
8228
  state = _useSetState[0],
7935
8229
  setState = _useSetState[1];
7936
8230
 
7937
- var getMultiples = function getMultiples(field, setter) {
7938
- return function (values) {
7939
- var _setter;
7940
-
7941
- setter((_setter = {}, _setter[field] = values, _setter));
7942
- };
7943
- };
7944
-
7945
8231
  var savePermission = function savePermission() {
7946
8232
  try {
7947
8233
  if (!state.principal || !state.setting || state.roles.length === 0) {
@@ -7991,7 +8277,7 @@ function PermissionPrinrole(_ref) {
7991
8277
  children: intl.formatMessage(genericMessages.select_principal)
7992
8278
  }), jsx(Select, {
7993
8279
  appendDefault: true,
7994
- options: principals,
8280
+ options: principals != null ? principals : [],
7995
8281
  onChange: function onChange(value) {
7996
8282
  return setState({
7997
8283
  principal: value
@@ -8006,7 +8292,11 @@ function PermissionPrinrole(_ref) {
8006
8292
  children: intl.formatMessage(genericMessages.select_role)
8007
8293
  }), jsx(Select, {
8008
8294
  options: roles,
8009
- onChange: getMultiples('roles', setState),
8295
+ onChange: function onChange(values) {
8296
+ setState({
8297
+ roles: values
8298
+ });
8299
+ },
8010
8300
  size: 5,
8011
8301
  multiple: true,
8012
8302
  dataTest: "selectRoleTest"
@@ -8057,14 +8347,6 @@ function PermissionRoleperm(_ref) {
8057
8347
  state = _useSetState[0],
8058
8348
  setState = _useSetState[1];
8059
8349
 
8060
- var getMultiples = function getMultiples(field, setter) {
8061
- return function (values) {
8062
- var _setter;
8063
-
8064
- setter((_setter = {}, _setter[field] = values, _setter));
8065
- };
8066
- };
8067
-
8068
8350
  var savePermission = function savePermission() {
8069
8351
  try {
8070
8352
  if (!state.role || !state.setting || state.permission.length === 0) {
@@ -8128,8 +8410,12 @@ function PermissionRoleperm(_ref) {
8128
8410
  className: "label",
8129
8411
  children: intl.formatMessage(genericMessages.select_permissions)
8130
8412
  }), jsx(Select, {
8131
- options: permissions,
8132
- onChange: getMultiples('permission', setState),
8413
+ options: permissions != null ? permissions : [],
8414
+ onChange: function onChange(values) {
8415
+ setState({
8416
+ permission: values
8417
+ });
8418
+ },
8133
8419
  dataTest: "selectPermissionsTest",
8134
8420
  size: 5,
8135
8421
  multiple: true
@@ -8262,7 +8548,18 @@ function PanelPermissions() {
8262
8548
  useEffect(function () {
8263
8549
  get('@sharing');
8264
8550
  }, [reset]);
8265
- 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
+
8266
8563
  return jsxs("div", {
8267
8564
  className: "columns",
8268
8565
  children: [!loading && jsxs("div", {
@@ -8420,14 +8717,14 @@ function AddPermission(_ref) {
8420
8717
  return Promise.resolve(Ctx.client.getPrincipals(Ctx.path)).then(function (principalsData) {
8421
8718
  var groups = principalsData.groups.map(function (group) {
8422
8719
  return {
8423
- text: group.id,
8424
- value: group.id
8720
+ text: group['@name'],
8721
+ value: group['@name']
8425
8722
  };
8426
8723
  });
8427
8724
  var users = principalsData.users.map(function (user) {
8428
8725
  return {
8429
- text: user.fullname || user.id,
8430
- value: user.id
8726
+ text: user.fullname || user['@name'],
8727
+ value: user['@name']
8431
8728
  };
8432
8729
  });
8433
8730
  principals = [].concat(groups, users);
@@ -8498,18 +8795,6 @@ var prepareAvailable = function prepareAvailable(items, already, title) {
8498
8795
  text: "Add " + title
8499
8796
  };
8500
8797
  if (items.length === 0) return [];
8501
-
8502
- if (items[0] && typeof items[0] === 'string') {
8503
- return [def].concat(items.map(function (x) {
8504
- return {
8505
- value: x,
8506
- text: x
8507
- };
8508
- })).filter(function (item) {
8509
- return !already.includes(item.value);
8510
- });
8511
- }
8512
-
8513
8798
  return [def].concat(items).filter(function (item) {
8514
8799
  return !already.includes(item.value);
8515
8800
  });
@@ -8522,7 +8807,7 @@ function TagsWidget(_ref) {
8522
8807
  noData = _ref.noData,
8523
8808
  onChange = _ref.onChange,
8524
8809
  loading = _ref.loading;
8525
- var selectRef = useRef();
8810
+ var selectRef = useRef(null);
8526
8811
 
8527
8812
  var _useState = useState(items),
8528
8813
  result = _useState[0],
@@ -8570,7 +8855,7 @@ function TagsWidget(_ref) {
8570
8855
  marginBottom: '20px'
8571
8856
  },
8572
8857
  children: noData
8573
- }), available.length > 1 && jsx("li", {
8858
+ }), (available != null ? available : []).length > 1 && jsx("li", {
8574
8859
  className: "widget-list-add select is-small",
8575
8860
  children: jsx(Select, {
8576
8861
  options: availableData,
@@ -8588,13 +8873,13 @@ function TagsWidget(_ref) {
8588
8873
  });
8589
8874
  }
8590
8875
 
8591
- var initialState$3 = {
8592
- types: undefined
8876
+ var initialState$4 = {
8877
+ types: []
8593
8878
  };
8594
8879
  function CreateButton() {
8595
8880
  var intl = useIntl();
8596
8881
 
8597
- var _useSetState = useSetState(initialState$3),
8882
+ var _useSetState = useSetState(initialState$4),
8598
8883
  state = _useSetState[0],
8599
8884
  setState = _useSetState[1];
8600
8885
 
@@ -8642,7 +8927,8 @@ function CreateButton() {
8642
8927
 
8643
8928
  if (state.types && state.types.length === 0) {
8644
8929
  return null;
8645
- }
8930
+ } // Implement some kind of filtering
8931
+
8646
8932
 
8647
8933
  return jsx(Dropdown, {
8648
8934
  id: "dropdown-menu",
@@ -8681,7 +8967,7 @@ function ContextToolbar(_ref) {
8681
8967
  var AddButton = _ref.AddButton;
8682
8968
  var intl = useIntl();
8683
8969
 
8684
- var _useSetState2 = useSetState(initialState$3),
8970
+ var _useSetState2 = useSetState(initialState$4),
8685
8971
  state = _useSetState2[0],
8686
8972
  setState = _useSetState2[1];
8687
8973
 
@@ -8692,7 +8978,7 @@ function ContextToolbar(_ref) {
8692
8978
 
8693
8979
  var traversal = useTraversal();
8694
8980
  var Config = useConfig();
8695
- var searchText = location.get('q');
8981
+ var searchText = location.get('q') || '';
8696
8982
 
8697
8983
  var _useState = useState(searchText || ''),
8698
8984
  searchValue = _useState[0],
@@ -8705,14 +8991,13 @@ function ContextToolbar(_ref) {
8705
8991
  setSearchValue(searchText);
8706
8992
  }, [searchText]);
8707
8993
 
8708
- var onSearchQuery = function onSearchQuery(ev) {
8709
- var search = ev.target[0].value;
8994
+ var onSearchQuery = function onSearchQuery(event) {
8995
+ event.preventDefault();
8710
8996
  setLocation({
8711
- q: search,
8997
+ q: event.currentTarget.elements.filterInput.value,
8712
8998
  tab: 'Items',
8713
8999
  page: 0
8714
9000
  });
8715
- ev.preventDefault();
8716
9001
  };
8717
9002
 
8718
9003
  var onSearchByType = function onSearchByType(typeText) {
@@ -8746,7 +9031,8 @@ function ContextToolbar(_ref) {
8746
9031
  type: "text",
8747
9032
  className: "input is-size-7",
8748
9033
  placeholder: intl.formatMessage(genericMessages.search),
8749
- "data-test": "inputFilterTest"
9034
+ "data-test": "inputFilterTest",
9035
+ id: "filterInput"
8750
9036
  })
8751
9037
  }), jsx("div", {
8752
9038
  className: "control",
@@ -8773,7 +9059,9 @@ function ContextToolbar(_ref) {
8773
9059
  value: item
8774
9060
  };
8775
9061
  }),
8776
- onChange: onSearchByType
9062
+ onChange: function onChange(value) {
9063
+ return onSearchByType(value);
9064
+ }
8777
9065
  })
8778
9066
  }), traversal.hasPerm('guillotina.AddContent') && jsx("div", {
8779
9067
  className: "level-item",
@@ -8814,11 +9102,11 @@ function TabsPanel(_ref2) {
8814
9102
  location = _useLocation[0],
8815
9103
  setLocation = _useLocation[1];
8816
9104
 
8817
- if (location.get('tab')) {
8818
- currentTab = location.get('tab');
8819
- } else {
8820
- currentTab = currentTab || Object.keys(tabs)[0];
8821
- }
9105
+ currentTab = location.get('tab') || Object.keys(tabs)[0];
9106
+ /*if (!Object.keys(tabs).includes(currentTab)) {
9107
+ setLocation(defaultTab)
9108
+ currentTab = defaultTab
9109
+ }*/
8822
9110
 
8823
9111
  var _useState = useState(currentTab),
8824
9112
  current = _useState[0],
@@ -8827,7 +9115,7 @@ function TabsPanel(_ref2) {
8827
9115
  var CurrentComp = tabs[current] || fallback;
8828
9116
  React.useEffect(function () {
8829
9117
  if (Object.keys(tabs).includes(currentTab)) {
8830
- setTab(currentTab);
9118
+ setTab(currentTab); // setLocation({tab: currentTab})
8831
9119
  }
8832
9120
  }, [currentTab, tabs]);
8833
9121
 
@@ -8886,14 +9174,14 @@ var tabsPermissions = {
8886
9174
  Behaviors: 'guillotina.ModifyContent',
8887
9175
  Permissions: 'guillotina.SeePermissions'
8888
9176
  };
8889
- function FolderCtx(props) {
9177
+ function FolderCtx() {
8890
9178
  var ctx = useTraversal();
8891
9179
  var calculated = ctx.filterTabs(tabs, tabsPermissions);
8892
- return jsx(TabsPanel, _extends({
9180
+ return jsx(TabsPanel, {
8893
9181
  tabs: calculated,
8894
9182
  currentTab: "Items",
8895
- rightToolbar: jsx(ContextToolbar, _extends({}, props))
8896
- }, props));
9183
+ rightToolbar: jsx(ContextToolbar, {})
9184
+ });
8897
9185
  }
8898
9186
 
8899
9187
  var tabs$1 = {
@@ -8907,13 +9195,13 @@ var tabsPermissions$1 = {
8907
9195
  Behaviors: 'guillotina.ModifyContent',
8908
9196
  Permissions: 'guillotina.SeePermissions'
8909
9197
  };
8910
- function ItemCtx(props) {
9198
+ function ItemCtx() {
8911
9199
  var ctx = useTraversal();
8912
9200
  var calculated = ctx.filterTabs(tabs$1, tabsPermissions$1);
8913
- return jsx(TabsPanel, _extends({
9201
+ return jsx(TabsPanel, {
8914
9202
  tabs: calculated,
8915
9203
  currentTab: "Properties"
8916
- }, props));
9204
+ });
8917
9205
  }
8918
9206
 
8919
9207
  function _catch$7(body, recover) {
@@ -8932,8 +9220,9 @@ function _catch$7(body, recover) {
8932
9220
 
8933
9221
  function ApplicationCtx() {
8934
9222
  var intl = useIntl();
8935
- var context = useTraversal();
8936
- var databases = context.state.context.databases;
9223
+ var traversal = useTraversal();
9224
+ var appContext = traversal.state.context;
9225
+ var databases = appContext.databases;
8937
9226
  return jsxs(Fragment, {
8938
9227
  children: [jsx("h3", {
8939
9228
  children: intl.formatMessage({
@@ -8947,22 +9236,26 @@ function ApplicationCtx() {
8947
9236
  className: "container",
8948
9237
  children: [jsx(ItemTitle, {
8949
9238
  title: "Objects"
8950
- }), databases.map(function (db) {
8951
- return jsx(Item, {
8952
- item: {
8953
- id: db,
8954
- path: "/" + db + "/"
8955
- },
8956
- icon: 'fas fa-database'
8957
- }, 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
+ })
8958
9251
  })]
8959
9252
  })]
8960
9253
  });
8961
9254
  }
8962
9255
  function DatabaseCtx() {
8963
- var context = useTraversal();
8964
- var containers = context.state.context.containers;
8965
- var path = context.state.path;
9256
+ var traversal = useTraversal();
9257
+ var containers = traversal.state.context.containers;
9258
+ var path = traversal.state.path;
8966
9259
  return jsx(Fragment, {
8967
9260
  children: jsxs("div", {
8968
9261
  className: "container",
@@ -9250,17 +9543,17 @@ function UsersToolbar() {
9250
9543
 
9251
9544
  var searchText = location.get('q');
9252
9545
 
9253
- var onSearchQuery = function onSearchQuery(ev) {
9254
- var search = ev.target[0].value;
9546
+ var onSearchQuery = function onSearchQuery(event) {
9547
+ event.preventDefault();
9255
9548
  setLocation({
9256
- q: search,
9549
+ q: event.currentTarget.elements.filterInput.value,
9257
9550
  page: 0
9258
9551
  });
9259
- ev.preventDefault();
9260
- };
9552
+ }; // cleanup form on state.search change
9553
+
9261
9554
 
9262
9555
  useEffect(function () {
9263
- if (!searchText || searchText === '') {
9556
+ if (ref.current && (!searchText || searchText === '')) {
9264
9557
  ref.current.value = '';
9265
9558
  }
9266
9559
  }, [searchText]);
@@ -9280,7 +9573,8 @@ function UsersToolbar() {
9280
9573
  type: "text",
9281
9574
  className: "input is-size-7",
9282
9575
  placeholder: intl.formatMessage(genericMessages.search),
9283
- "data-test": "inputFilterTest"
9576
+ "data-test": "inputFilterTest",
9577
+ id: "filterInput"
9284
9578
  })
9285
9579
  }), jsx("div", {
9286
9580
  className: "control",
@@ -9312,12 +9606,12 @@ function UsersToolbar() {
9312
9606
  })]
9313
9607
  });
9314
9608
  }
9315
- function UsersCtx(props) {
9316
- return jsx(TabsPanel, _extends({
9609
+ function UsersCtx() {
9610
+ return jsx(TabsPanel, {
9317
9611
  tabs: tabs$3,
9318
9612
  currentTab: "Users",
9319
9613
  rightToolbar: jsx(UsersToolbar, {})
9320
- }, props));
9614
+ });
9321
9615
  }
9322
9616
  function UserCtx() {
9323
9617
  var intl = useIntl();
@@ -9334,9 +9628,10 @@ function UserCtx() {
9334
9628
  state = _useState[0],
9335
9629
  setState = _useState[1];
9336
9630
 
9631
+ var userDataContext = Ctx.context;
9337
9632
  var fields = {
9338
9633
  user_groups: [],
9339
- user_roles: Ctx.context.user_roles
9634
+ user_roles: userDataContext.user_roles
9340
9635
  };
9341
9636
 
9342
9637
  var _useRemoteField = useRemoteField(fields),
@@ -9440,7 +9735,7 @@ function UserCtx() {
9440
9735
  "value": "Username"
9441
9736
  }]
9442
9737
  }), ":", ' ']
9443
- }), ' ', Ctx.context.username, " (", Ctx.context.email, ")"]
9738
+ }), ' ', userDataContext.username, " (", userDataContext.email, ")"]
9444
9739
  }), jsxs("p", {
9445
9740
  children: [jsxs("label", {
9446
9741
  children: [' ', intl.formatMessage({
@@ -9450,7 +9745,7 @@ function UserCtx() {
9450
9745
  "value": "Creation Date"
9451
9746
  }]
9452
9747
  }), ":", ' ']
9453
- }), ' ', formatDate(Ctx.context.creation_date)]
9748
+ }), ' ', formatDate(userDataContext.creation_date)]
9454
9749
  }), jsxs("p", {
9455
9750
  children: [jsxs("label", {
9456
9751
  children: [' ', intl.formatMessage({
@@ -9460,7 +9755,7 @@ function UserCtx() {
9460
9755
  "value": "Modification Date"
9461
9756
  }]
9462
9757
  }), ":", ' ']
9463
- }), ' ', formatDate(Ctx.context.modification_date)]
9758
+ }), ' ', formatDate(userDataContext.modification_date)]
9464
9759
  }), jsx(Button, {
9465
9760
  className: "is-size-7 is-info",
9466
9761
  onClick: function onClick() {
@@ -9479,7 +9774,7 @@ function UserCtx() {
9479
9774
  onSubmit: function onSubmit(ev) {
9480
9775
  return updateObject(ev);
9481
9776
  },
9482
- formData: Ctx.context,
9777
+ formData: userDataContext,
9483
9778
  exclude: ['password'],
9484
9779
  remotes: remotes,
9485
9780
  submitButton: false,
@@ -9493,7 +9788,7 @@ function UserCtx() {
9493
9788
  className: "column",
9494
9789
  children: [jsx(TagsWidget, {
9495
9790
  onChange: updateRemote('user_groups'),
9496
- items: Ctx.context.user_groups,
9791
+ items: userDataContext.user_groups,
9497
9792
  title: "Groups",
9498
9793
  noData: intl.formatMessage({
9499
9794
  id: "there_is_no_groups_for_this_user",
@@ -9514,7 +9809,12 @@ function UserCtx() {
9514
9809
  "value": "The user doesn't have any role"
9515
9810
  }]
9516
9811
  }),
9517
- available: state.roles
9812
+ available: state.roles.map(function (x) {
9813
+ return {
9814
+ value: x,
9815
+ text: x
9816
+ };
9817
+ })
9518
9818
  })]
9519
9819
  })]
9520
9820
  })]
@@ -9530,7 +9830,7 @@ function CopyItems(props) {
9530
9830
  try {
9531
9831
  return Promise.resolve(Promise.all(items.map(function (item, i) {
9532
9832
  var input = form[i + 1] || {};
9533
- return Ctx.client.post("" + Ctx.path + item['@name'] + "/@duplicate", {
9833
+ return Ctx.client.post("" + Ctx.path + item.id + "/@duplicate", {
9534
9834
  destination: path,
9535
9835
  new_id: input.value || getNewId(item.id)
9536
9836
  });
@@ -9576,7 +9876,7 @@ function CopyItems(props) {
9576
9876
  }), jsx("input", {
9577
9877
  type: "text",
9578
9878
  className: "input",
9579
- "data-test": "inputCopyIdTest-" + item['@name'],
9879
+ "data-test": "inputCopyIdTest-" + item.id,
9580
9880
  defaultValue: getNewId(item.id)
9581
9881
  })]
9582
9882
  }, item.id);
@@ -9649,9 +9949,9 @@ function MoveItems(props) {
9649
9949
  var moveItems = function moveItems(path) {
9650
9950
  try {
9651
9951
  return Promise.resolve(Promise.all(items.map(function (item) {
9652
- return Ctx.client.post("" + Ctx.path + item['@name'] + "/@move", {
9952
+ return Ctx.client.post("" + Ctx.path + item.id + "/@move", {
9653
9953
  destination: path,
9654
- new_id: item['@name']
9954
+ new_id: item.id
9655
9955
  });
9656
9956
  }))).then(function (responses) {
9657
9957
  Ctx.refresh();
@@ -9988,17 +10288,17 @@ function GroupToolbar() {
9988
10288
 
9989
10289
  var searchText = location.get('q');
9990
10290
 
9991
- var onSearchQuery = function onSearchQuery(ev) {
9992
- var search = ev.target[0].value;
10291
+ var onSearchQuery = function onSearchQuery(event) {
10292
+ event.preventDefault();
9993
10293
  setLocation({
9994
- q: search,
10294
+ q: event.currentTarget.elements.filterInput.value,
9995
10295
  page: 0
9996
10296
  });
9997
- ev.preventDefault();
9998
- };
10297
+ }; // cleanup form on state.search change
10298
+
9999
10299
 
10000
10300
  useEffect(function () {
10001
- if (!searchText || searchText === '') {
10301
+ if (ref.current && (!searchText || searchText === '')) {
10002
10302
  ref.current.value = '';
10003
10303
  }
10004
10304
  }, [searchText]);
@@ -10018,7 +10318,8 @@ function GroupToolbar() {
10018
10318
  type: "text",
10019
10319
  className: "input is-size-7",
10020
10320
  placeholder: intl.formatMessage(genericMessages.search),
10021
- "data-test": "inputFilterTest"
10321
+ "data-test": "inputFilterTest",
10322
+ id: "filterInput"
10022
10323
  })
10023
10324
  }), jsx("div", {
10024
10325
  className: "control",
@@ -10056,12 +10357,12 @@ function GroupToolbar() {
10056
10357
  })]
10057
10358
  });
10058
10359
  }
10059
- function GroupsCtx(props) {
10060
- return jsx(TabsPanel, _extends({
10360
+ function GroupsCtx() {
10361
+ return jsx(TabsPanel, {
10061
10362
  tabs: tabs$4,
10062
10363
  currentTab: "Groups",
10063
10364
  rightToolbar: jsx(GroupToolbar, {})
10064
- }, props));
10365
+ });
10065
10366
  }
10066
10367
  var sortParsed = parser("_sort_asc=id");
10067
10368
  var searchParsed = parser('type_name=User');
@@ -10076,6 +10377,7 @@ function GroupCtx() {
10076
10377
  roles = _useState[0],
10077
10378
  setRoles = _useState[1];
10078
10379
 
10380
+ var groupDataContext = Ctx.context;
10079
10381
  useEffect(function () {
10080
10382
  var getRoles = function getRoles() {
10081
10383
  try {
@@ -10129,11 +10431,11 @@ function GroupCtx() {
10129
10431
  var addRole = function addRole(role) {
10130
10432
  try {
10131
10433
  return Promise.resolve(patch({
10132
- user_roles: Ctx.context.user_roles.concat(role)
10434
+ user_roles: groupDataContext.user_roles.concat(role)
10133
10435
  })).then(function (_ref) {
10134
10436
  var isError = _ref.isError,
10135
10437
  errorMessage = _ref.errorMessage;
10136
- handleResponse(isError, intl.formatMessage({
10438
+ handleResponse(!!isError, intl.formatMessage({
10137
10439
  id: "role_added_to_group",
10138
10440
  defaultMessage: [{
10139
10441
  "type": 0,
@@ -10147,7 +10449,7 @@ function GroupCtx() {
10147
10449
  }]
10148
10450
  }, {
10149
10451
  role: role
10150
- }), errorMessage);
10452
+ }), errorMessage != null ? errorMessage : '');
10151
10453
  });
10152
10454
  } catch (e) {
10153
10455
  return Promise.reject(e);
@@ -10157,13 +10459,13 @@ function GroupCtx() {
10157
10459
  var removeRole = function removeRole(role) {
10158
10460
  try {
10159
10461
  return Promise.resolve(patch({
10160
- user_roles: Ctx.context.user_roles.filter(function (r) {
10462
+ user_roles: groupDataContext.user_roles.filter(function (r) {
10161
10463
  return r !== role;
10162
10464
  })
10163
10465
  })).then(function (_ref2) {
10164
10466
  var isError = _ref2.isError,
10165
10467
  errorMessage = _ref2.errorMessage;
10166
- handleResponse(isError, intl.formatMessage({
10468
+ handleResponse(!!isError, intl.formatMessage({
10167
10469
  id: "role_removed_from_group",
10168
10470
  defaultMessage: [{
10169
10471
  "type": 0,
@@ -10177,7 +10479,7 @@ function GroupCtx() {
10177
10479
  }]
10178
10480
  }, {
10179
10481
  role: role
10180
- }), errorMessage);
10482
+ }), errorMessage != null ? errorMessage : '');
10181
10483
  });
10182
10484
  } catch (e) {
10183
10485
  return Promise.reject(e);
@@ -10187,30 +10489,32 @@ function GroupCtx() {
10187
10489
  var addUser = function addUser(newUserId) {
10188
10490
  try {
10189
10491
  var data = {};
10190
- Ctx.context.users.forEach(function (user) {
10492
+ groupDataContext.users.forEach(function (user) {
10191
10493
  data[user] = true;
10192
10494
  });
10193
10495
  data[newUserId] = true;
10194
10496
  return Promise.resolve(Ctx.client.rest.patch(Ctx.containerPath + "@groups/" + Ctx.context['@name'], {
10195
10497
  users: data
10196
- })).then(function (_ref3) {
10197
- var isError = _ref3.isError,
10198
- errorMessage = _ref3.errorMessage;
10199
- handleResponse(isError, intl.formatMessage({
10200
- id: "user_added_to_group",
10201
- defaultMessage: [{
10202
- "type": 0,
10203
- "value": "User "
10204
- }, {
10205
- "type": 1,
10206
- "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
+ }]
10207
10514
  }, {
10208
- "type": 0,
10209
- "value": " added to group"
10210
- }]
10211
- }, {
10212
- user: newUserId
10213
- }), errorMessage);
10515
+ user: newUserId
10516
+ }), errorMessage != null ? errorMessage : '');
10517
+ });
10214
10518
  });
10215
10519
  } catch (e) {
10216
10520
  return Promise.reject(e);
@@ -10220,29 +10524,31 @@ function GroupCtx() {
10220
10524
  var removeUser = function removeUser(userToRemove) {
10221
10525
  try {
10222
10526
  var data = {};
10223
- Ctx.context.users.forEach(function (user) {
10527
+ groupDataContext.users.forEach(function (user) {
10224
10528
  data[user] = userToRemove !== user;
10225
10529
  });
10226
10530
  return Promise.resolve(Ctx.client.rest.patch(Ctx.containerPath + "@groups/" + Ctx.context['@name'], {
10227
10531
  users: data
10228
- })).then(function (_ref4) {
10229
- var isError = _ref4.isError,
10230
- errorMessage = _ref4.errorMessage;
10231
- handleResponse(isError, intl.formatMessage({
10232
- id: "user_removed_from_group",
10233
- defaultMessage: [{
10234
- "type": 0,
10235
- "value": "User "
10236
- }, {
10237
- "type": 1,
10238
- "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
+ }]
10239
10548
  }, {
10240
- "type": 0,
10241
- "value": " removed from group"
10242
- }]
10243
- }, {
10244
- user: userToRemove
10245
- }), errorMessage);
10549
+ user: userToRemove
10550
+ }), errorMessage != null ? errorMessage : '');
10551
+ });
10246
10552
  });
10247
10553
  } catch (e) {
10248
10554
  return Promise.reject(e);
@@ -10297,11 +10603,13 @@ function GroupCtx() {
10297
10603
  })
10298
10604
  }), jsx(Select, {
10299
10605
  options: roles.filter(function (role) {
10300
- return !Ctx.context.user_roles.includes(role.value);
10606
+ return !groupDataContext.user_roles.includes(role.value);
10301
10607
  }),
10302
10608
  appendDefault: true,
10303
- onChange: addRole
10304
- }), 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) {
10305
10613
  return jsx("p", {
10306
10614
  className: "control",
10307
10615
  children: jsx(Tag, {
@@ -10333,7 +10641,7 @@ function GroupCtx() {
10333
10641
  traversal: Ctx,
10334
10642
  onChange: addUser,
10335
10643
  btnClass: "is-small"
10336
- }), jsx("hr", {}), Ctx.context.users.map(function (user) {
10644
+ }), jsx("hr", {}), groupDataContext.users.map(function (user) {
10337
10645
  return jsx("p", {
10338
10646
  className: "control",
10339
10647
  children: jsx(Tag, {
@@ -10482,7 +10790,7 @@ function Path() {
10482
10790
  var links = buildPaths(segments);
10483
10791
 
10484
10792
  if (segments.length === 1) {
10485
- return false;
10793
+ return null;
10486
10794
  }
10487
10795
 
10488
10796
  return jsx("nav", {
@@ -10616,11 +10924,13 @@ var getComponent = function getComponent(context, path, fallback) {
10616
10924
  fallback = undefined;
10617
10925
  }
10618
10926
 
10619
- if (!context) return;
10927
+ if (!context) return; // console.log("Component for path", path)
10928
+ // lookup by path
10620
10929
 
10621
10930
  if (registry.paths[path]) {
10622
10931
  return registry.paths[path];
10623
- }
10932
+ } // by type
10933
+
10624
10934
 
10625
10935
  if (registry.views[context['@type']]) {
10626
10936
  return registry.views[context['@type']];
@@ -10643,19 +10953,15 @@ var getItemsColumn = function getItemsColumn(type) {
10643
10953
  return undefined;
10644
10954
  };
10645
10955
 
10646
- var getForm = function getForm(type, fallback) {
10647
- if (fallback === void 0) {
10648
- fallback = BaseForm;
10649
- }
10956
+ var getView = function getView(name) {
10957
+ return registry.views[name];
10958
+ };
10650
10959
 
10651
- return registry.forms[type] || fallback;
10960
+ var getForm = function getForm(type, fallback) {
10961
+ return registry.forms[type] || fallback || BaseForm;
10652
10962
  };
10653
10963
 
10654
10964
  var getAction = function getAction(type, fallback) {
10655
- if (fallback === void 0) {
10656
- fallback = undefined;
10657
- }
10658
-
10659
10965
  return registry.actions[type] || fallback;
10660
10966
  };
10661
10967
 
@@ -10672,10 +10978,21 @@ var getSchemas = function getSchemas(type) {
10672
10978
  };
10673
10979
 
10674
10980
  var getFieldsToFilter = function getFieldsToFilter(type, fallback) {
10981
+ if (fallback === void 0) {
10982
+ fallback = ['title'];
10983
+ }
10984
+
10675
10985
  return registry.fieldsToFilter[type] || fallback;
10676
10986
  };
10677
10987
 
10678
10988
  var getDefaultSortValue = function getDefaultSortValue(type, fallback) {
10989
+ if (fallback === void 0) {
10990
+ fallback = {
10991
+ key: 'id',
10992
+ direction: 'des'
10993
+ };
10994
+ }
10995
+
10679
10996
  return registry.defaultSortValue[type] || fallback;
10680
10997
  };
10681
10998
 
@@ -10683,12 +11000,14 @@ var defaultComponent = function defaultComponent(context) {
10683
11000
  return context.is_folderish ? FolderCtx : ItemCtx;
10684
11001
  };
10685
11002
  function useRegistry(data) {
11003
+ // if data is provided we need to merge it into actual registry
10686
11004
  var ref = React.useRef();
10687
11005
 
10688
11006
  if (data && !ref.current) {
10689
11007
  ref.current = true;
10690
11008
  Object.keys(data).map(function (key) {
10691
- return registry[key] = _extends({}, registry[key], data[key]);
11009
+ var registryKey = key;
11010
+ registry[registryKey] = _extends({}, registry[registryKey], data[registryKey]);
10692
11011
  });
10693
11012
  }
10694
11013
 
@@ -10703,86 +11022,26 @@ function useRegistry(data) {
10703
11022
  getItemsColumn: getItemsColumn,
10704
11023
  getFieldsToFilter: getFieldsToFilter,
10705
11024
  getDefaultSortValue: getDefaultSortValue,
10706
- getSchemas: getSchemas
11025
+ getSchemas: getSchemas,
11026
+ getView: getView
10707
11027
  };
10708
11028
  }
11029
+ /*
10709
11030
 
10710
- var initialState$4 = {
10711
- path: '',
10712
- loading: false,
10713
- context: undefined,
10714
- flash: {
10715
- message: undefined,
10716
- type: undefined
10717
- },
10718
- action: {
10719
- action: undefined,
10720
- params: undefined
11031
+ const registry = {
11032
+ paths: {
11033
+ "/db/guillotina/tags/": TagsContext
10721
11034
  },
10722
- permissions: undefined,
10723
- errorStatus: undefined,
10724
- registry: {},
10725
- refresh: undefined
10726
- };
10727
- function guillotinaReducer(state, action) {
10728
- switch (action.type) {
10729
- case 'SET_PATH':
10730
- return _extends({}, state, {
10731
- path: action.payload,
10732
- loading: true
10733
- });
10734
-
10735
- case 'SET_CONTEXT':
10736
- return _extends({}, state, action.payload, {
10737
- errorStatus: undefined,
10738
- loading: false
10739
- });
10740
-
10741
- case 'SET_ERROR':
10742
- return _extends({}, state, {
10743
- errorStatus: action.payload,
10744
- loading: false
10745
- });
10746
-
10747
- case 'SET_FLASH':
10748
- return _extends({}, state, action.payload);
10749
-
10750
- case 'CLEAR_FLASH':
10751
- return _extends({}, state, {
10752
- flash: {
10753
- message: undefined,
10754
- type: undefined
10755
- }
10756
- });
10757
-
10758
- case 'SET_ACTION':
10759
- return _extends({}, state, {
10760
- action: action.payload
10761
- });
11035
+ forms: {
11036
+ Tag: AddTagForm
11037
+ }
11038
+ }
10762
11039
 
10763
- case 'CLEAR_ACTION':
10764
- return _extends({}, state, {
10765
- action: {
10766
- action: undefined,
10767
- params: undefined
10768
- }
10769
- });
10770
11040
 
10771
- case 'REFRESH':
10772
- return _extends({}, state, {
10773
- refresh: Date.now(),
10774
- loading: !action.payload.transparent
10775
- });
11041
+ <guillotina registry={registry} />
10776
11042
 
10777
- case 'APPLY':
10778
- return _extends({}, state, {
10779
- context: _extends({}, state.context, action.payload)
10780
- });
10781
11043
 
10782
- default:
10783
- return state;
10784
- }
10785
- }
11044
+ */
10786
11045
 
10787
11046
  var actions = [
10788
11047
  {
@@ -13593,25 +13852,27 @@ function Guillotina(_ref) {
13593
13852
  props = _objectWithoutPropertiesLoose(_ref, ["auth", "locale"]);
13594
13853
 
13595
13854
  var messages = loadLocaleData(locale);
13596
- var url = props.url || 'http://localhost:8080';
13855
+ var url = props.url || 'http://localhost:8080'; // without trailing slash
13856
+
13597
13857
  var config = props.config || {};
13598
13858
  var client = useGuillotinaClient();
13599
13859
 
13600
13860
  var _useConfig = useConfig(config),
13601
13861
  Permissions = _useConfig.Permissions;
13602
13862
 
13603
- var registry = useRegistry(props.registry || {});
13863
+ var registry = useRegistry(props.registry); // Location is cooked routing solution (only uses search params)
13604
13864
 
13605
13865
  var _useLocation = useLocation(),
13606
- location = _useLocation[0];
13866
+ location = _useLocation[0]; // if there is no path provided just go to root
13867
+
13607
13868
 
13608
13869
  var searchPath = location.get('path') || '/';
13609
13870
 
13610
13871
  if (searchPath && searchPath !== '') {
13611
- initialState$4.path = searchPath;
13872
+ initialState.path = searchPath;
13612
13873
  }
13613
13874
 
13614
- var _useReducer = useReducer(guillotinaReducer, initialState$4),
13875
+ var _useReducer = useReducer(guillotinaReducer, initialState),
13615
13876
  state = _useReducer[0],
13616
13877
  dispatch = _useReducer[1];
13617
13878
 
@@ -13619,8 +13880,10 @@ function Guillotina(_ref) {
13619
13880
  refresh = state.refresh;
13620
13881
  useEffect(function () {
13621
13882
  dispatch({
13622
- type: 'SET_PATH',
13623
- payload: searchPath
13883
+ type: GuillotinaReducerActionTypes.SET_PATH,
13884
+ payload: {
13885
+ path: searchPath
13886
+ }
13624
13887
  });
13625
13888
  }, [searchPath]);
13626
13889
  useEffect(function () {
@@ -13629,14 +13892,18 @@ function Guillotina(_ref) {
13629
13892
  return Promise.resolve(client.getContext(path)).then(function (data) {
13630
13893
  if (data.status === 401) {
13631
13894
  dispatch({
13632
- type: 'SET_ERROR',
13633
- payload: 'notallowed'
13895
+ type: GuillotinaReducerActionTypes.SET_ERROR,
13896
+ payload: {
13897
+ errorStatus: 'notallowed'
13898
+ }
13634
13899
  });
13635
13900
  return;
13636
13901
  } else if (data.status === 404) {
13637
13902
  dispatch({
13638
- type: 'SET_ERROR',
13639
- payload: 'notfound'
13903
+ type: GuillotinaReducerActionTypes.SET_ERROR,
13904
+ payload: {
13905
+ errorStatus: 'notallowed'
13906
+ }
13640
13907
  });
13641
13908
  return;
13642
13909
  }
@@ -13645,7 +13912,7 @@ function Guillotina(_ref) {
13645
13912
  return Promise.resolve(client.canido(path, Permissions)).then(function (pr) {
13646
13913
  return Promise.resolve(pr.json()).then(function (permissions) {
13647
13914
  dispatch({
13648
- type: 'SET_CONTEXT',
13915
+ type: GuillotinaReducerActionTypes.SET_CONTEXT,
13649
13916
  payload: {
13650
13917
  context: context,
13651
13918
  permissions: permissions
@@ -13662,9 +13929,9 @@ function Guillotina(_ref) {
13662
13929
 
13663
13930
  initContext();
13664
13931
  }, [path, refresh, client]);
13665
- var ErrorBoundary = registry.get('views', 'ErrorBoundary');
13666
- var NotAllowed = registry.get('views', 'NotAllowed');
13667
- var NotFound = registry.get('views', 'NotFound');
13932
+ var ErrorBoundary = registry.getView('ErrorBoundary');
13933
+ var NotAllowed = registry.getView('NotAllowed');
13934
+ var NotFound = registry.getView('NotFound');
13668
13935
  var Path = registry.get('components', 'Path');
13669
13936
  var contextData = {
13670
13937
  url: url,
@@ -13687,7 +13954,7 @@ function Guillotina(_ref) {
13687
13954
  children: jsxs(ErrorBoundary, {
13688
13955
  children: [!errorStatus && jsx(TraversalProvider, _extends({}, contextData, {
13689
13956
  children: permissions && jsxs(React.Fragment, {
13690
- children: [action.action && jsx(Action, _extends({}, action.params)), jsx("div", {
13957
+ children: [action.action && Action !== null && jsx(Action, _extends({}, action.params)), jsx("div", {
13691
13958
  className: "level",
13692
13959
  children: jsx("div", {
13693
13960
  className: "level-left",
@@ -13696,7 +13963,7 @@ function Guillotina(_ref) {
13696
13963
  children: jsx(Path, {})
13697
13964
  })
13698
13965
  })
13699
- }), jsx(Flash, {}), Main && jsx(ErrorBoundary, {
13966
+ }), jsx(Flash, {}), Main !== undefined && jsx(ErrorBoundary, {
13700
13967
  children: jsxs("div", {
13701
13968
  className: "box main-panel",
13702
13969
  children: [state.loading && jsx(Loading, {}), !state.loading && jsx(Main, {
@@ -13806,7 +14073,7 @@ var ERRORS = {
13806
14073
  var initialState$5 = {
13807
14074
  username: '',
13808
14075
  password: '',
13809
- loading: undefined,
14076
+ loading: false,
13810
14077
  errors: undefined
13811
14078
  };
13812
14079
  var Login = function Login(_ref) {
@@ -13822,7 +14089,7 @@ var Login = function Login(_ref) {
13822
14089
 
13823
14090
  var inputRef = useRef(null);
13824
14091
  useEffect(function () {
13825
- if (inputRef) {
14092
+ if (inputRef && inputRef.current) {
13826
14093
  inputRef.current.focus();
13827
14094
  }
13828
14095
  }, [inputRef]);
@@ -14043,30 +14310,30 @@ function RequiredFieldsForm(_ref) {
14043
14310
  dataTest: dataTest,
14044
14311
  children: [schema && schema.data && !schema.loading && schema.formFields.map(function (key) {
14045
14312
  if (!ignoreFiels.includes(key)) {
14046
- var _value$title;
14313
+ var _schema$data, _value$title, _schema$data2;
14047
14314
 
14048
- var value = schema.data.properties[key];
14315
+ var value = (_schema$data = schema.data) == null ? void 0 : _schema$data.properties[key];
14049
14316
  return jsx(EditComponent, {
14050
14317
  id: key,
14051
14318
  placeholder: (_value$title = value == null ? void 0 : value.title) != null ? _value$title : '',
14052
14319
  className: "",
14053
14320
  required: true,
14054
- schema: schema.data.properties[key],
14055
- setValue: function setValue(ev) {
14321
+ schema: (_schema$data2 = schema.data) == null ? void 0 : _schema$data2.properties[key],
14322
+ setValue: function setValue(value) {
14056
14323
  if (key === 'title') {
14057
14324
  var _extends2;
14058
14325
 
14059
14326
  setFormData(_extends({}, formData, (_extends2 = {
14060
- uuid: stringToSlug(ev)
14061
- }, _extends2[key] = ev, _extends2)));
14327
+ uuid: stringToSlug(value)
14328
+ }, _extends2[key] = value, _extends2)));
14062
14329
  } else if (key === 'uuid') {
14063
14330
  setFormData(_extends({}, formData, {
14064
- uuid: stringToSlug(ev)
14331
+ uuid: stringToSlug(value)
14065
14332
  }));
14066
14333
  } else {
14067
14334
  var _extends3;
14068
14335
 
14069
- setFormData(_extends({}, formData, (_extends3 = {}, _extends3[key] = ev, _extends3)));
14336
+ setFormData(_extends({}, formData, (_extends3 = {}, _extends3[key] = value, _extends3)));
14070
14337
  }
14071
14338
  },
14072
14339
  error: errors[key],
@@ -14197,6 +14464,7 @@ var Auth = /*#__PURE__*/function () {
14197
14464
  method: 'post'
14198
14465
  })).then(function (data) {
14199
14466
  if (data.status === 401) {
14467
+ // invalid token
14200
14468
  _this4.cleanAuth();
14201
14469
 
14202
14470
  _this4.logout();
@@ -14259,7 +14527,7 @@ var Auth = /*#__PURE__*/function () {
14259
14527
 
14260
14528
  if (!authToken) return {};
14261
14529
 
14262
- if (this.willExpire(expires) && this.retryRefresh < this.maxRetry) {
14530
+ if (this.willExpire(expires != null ? expires : '') && this.retryRefresh < this.maxRetry) {
14263
14531
 
14264
14532
  (function () {
14265
14533
  try {
@@ -14317,5 +14585,14 @@ var Auth = /*#__PURE__*/function () {
14317
14585
  return Auth;
14318
14586
  }();
14319
14587
 
14320
- 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 };
14321
14598
  //# sourceMappingURL=react-gmi.esm.js.map