@panneau/core 1.0.4 → 1.1.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.
package/es/contexts.js CHANGED
@@ -13,10 +13,11 @@ import { loadGoogleApi, loadGoogleMaps } from '@folklore/services';
13
13
  import { useIntl } from 'react-intl';
14
14
  import { getDisplayName } from '@panneau/core/utils';
15
15
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
16
- import { generatePath, useHistory } from 'react-router';
16
+ import { generatePath, useNavigate } from 'react-router';
17
17
  import { TrackingContext, TrackingContainer } from '@folklore/tracking';
18
18
  export { TrackingContext } from '@folklore/tracking';
19
19
  import { v1 } from 'uuid';
20
+ import EventEmitter from 'wolfy87-eventemitter';
20
21
 
21
22
  var MODALS_NAMESPACE = 'modals';
22
23
  var FIELDS_NAMESPACE = 'fields';
@@ -24,6 +25,7 @@ var FORMS_NAMESPACE = 'forms';
24
25
  var FILTERS_NAMESPACE = 'filters';
25
26
  var LISTS_NAMESPACE = 'lists';
26
27
  var DISPLAYS_NAMESPACE = 'displays';
28
+ var PAGES_NAMESPACE = 'pages';
27
29
  var APP_NAMESPACE = 'app';
28
30
  var ComponentsContext = /*#__PURE__*/React.createContext(null);
29
31
 
@@ -146,6 +148,21 @@ var useDisplayComponent = function useDisplayComponent(name) {
146
148
  return useComponent(name, defaultComponent, DISPLAYS_NAMESPACE);
147
149
  };
148
150
 
151
+ /**
152
+ * Pages hooks
153
+ */
154
+ var usePagesComponentsManager = function usePagesComponentsManager() {
155
+ return useComponentsManager(PAGES_NAMESPACE);
156
+ };
157
+ var usePagesComponents = function usePagesComponents() {
158
+ var defaultComponents = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
159
+ return useComponents(PAGES_NAMESPACE, defaultComponents);
160
+ };
161
+ var usePageComponent = function usePageComponent(name) {
162
+ var defaultComponent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
163
+ return useComponent(name, defaultComponent, PAGES_NAMESPACE);
164
+ };
165
+
149
166
  /**
150
167
  * App hooks
151
168
  */
@@ -231,13 +248,13 @@ var toggle = PropTypes.shape({
231
248
  label: PropTypes.string
232
249
  });
233
250
  PropTypes.arrayOf(toggle);
234
- var tableColumn = PropTypes.shape({
251
+ var tableColumn = PropTypes.oneOfType([PropTypes.string, PropTypes.shape({
235
252
  id: PropTypes.string,
236
253
  component: PropTypes.string,
237
254
  path: PropTypes.string,
238
255
  field: PropTypes.string,
239
256
  columnClassName: PropTypes.string
240
- });
257
+ })]);
241
258
  PropTypes.arrayOf(tableColumn);
242
259
 
243
260
  /**
@@ -1022,33 +1039,34 @@ var useUrlGenerator = function useUrlGenerator() {
1022
1039
  };
1023
1040
  var useRoutePush = function useRoutePush() {
1024
1041
  var url = useUrlGenerator();
1025
- var history = useHistory();
1042
+ var navigate = useNavigate();
1026
1043
  var push = useCallback(function (route, data) {
1027
1044
  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
1028
1045
  args[_key - 2] = arguments[_key];
1029
1046
  }
1030
1047
  if (isString(route)) {
1031
- history.push.apply(history, [url(route, data)].concat(args));
1048
+ var _history;
1049
+ (_history = history).push.apply(_history, [url(route, data)].concat(args));
1032
1050
  } else {
1033
1051
  var _ref = route || {},
1034
1052
  _ref$pathname = _ref.pathname,
1035
1053
  pathname = _ref$pathname === void 0 ? null : _ref$pathname,
1036
1054
  _ref$search = _ref.search,
1037
1055
  search = _ref$search === void 0 ? null : _ref$search;
1038
- history.push.apply(history, [{
1056
+ navigate.apply(void 0, [{
1039
1057
  pathname: url(pathname, data),
1040
1058
  search: search
1041
1059
  }].concat(args));
1042
1060
  }
1043
- }, [history, url]);
1061
+ }, [navigate, url]);
1044
1062
  return push;
1045
1063
  };
1046
1064
  var useRouteBack = function useRouteBack() {
1047
1065
  var url = useUrlGenerator();
1048
- var history = useHistory();
1066
+ var navigate = useNavigate();
1049
1067
  var back = useCallback(function () {
1050
- return history.goBack();
1051
- }, [history, url]);
1068
+ return navigate(-1);
1069
+ }, [navigate, url]);
1052
1070
  return back;
1053
1071
  };
1054
1072
  var propTypes$2 = {
@@ -1106,6 +1124,40 @@ var TrackingProvider = function TrackingProvider(_ref) {
1106
1124
  TrackingProvider.propTypes = propTypes$1;
1107
1125
  TrackingProvider.defaultProps = defaultProps$1;
1108
1126
 
1127
+ /**
1128
+ * Locale loader
1129
+ */
1130
+ var loaders = {};
1131
+ var events = new EventEmitter();
1132
+ function loadPackage(name, loader) {
1133
+ if (typeof loaders[name] === 'undefined') {
1134
+ loaders[name] = {
1135
+ loader: loader().then(function (response) {
1136
+ loaders[name].loader = null;
1137
+ loaders[name].loaded = true;
1138
+ loaders[name].resource = response;
1139
+ events.emit("loaded:".concat(name), response);
1140
+ return response;
1141
+ }),
1142
+ loaded: false,
1143
+ resource: null
1144
+ };
1145
+ }
1146
+ return new Promise(function (resolve) {
1147
+ var _ref = loaders[name] || {},
1148
+ _ref$loaded = _ref.loaded,
1149
+ loaded = _ref$loaded === void 0 ? false : _ref$loaded,
1150
+ resource = _ref.resource;
1151
+ if (loaded === true) {
1152
+ resolve(resource);
1153
+ } else {
1154
+ events.once("loaded:".concat(name), function (response) {
1155
+ resolve(response);
1156
+ });
1157
+ }
1158
+ });
1159
+ }
1160
+
1109
1161
  /**
1110
1162
  * Locale loader
1111
1163
  */
@@ -1125,7 +1177,9 @@ var useUppyCore = function useUppyCore() {
1125
1177
  canceled = true;
1126
1178
  };
1127
1179
  }
1128
- import('@uppy/core').then(function (_ref) {
1180
+ loadPackage('@uppy/core', function () {
1181
+ return import('@uppy/core');
1182
+ }).then(function (_ref) {
1129
1183
  var Uppy = _ref["default"];
1130
1184
  packageCache = Uppy;
1131
1185
  if (!canceled) {
@@ -1147,10 +1201,14 @@ var useUppyCore = function useUppyCore() {
1147
1201
  var packagesCache$2 = {};
1148
1202
  var defaultPackagesMap$2 = {
1149
1203
  fr: function fr() {
1150
- return import('@uppy/locales/lib/fr_FR');
1204
+ return loadPackage('@uppy/locales/lib/fr_FR', function () {
1205
+ return import('@uppy/locales/lib/fr_FR');
1206
+ });
1151
1207
  },
1152
1208
  en: function en() {
1153
- return import('@uppy/locales/lib/en_US');
1209
+ return loadPackage('@uppy/locales/lib/en_US', function () {
1210
+ return import('@uppy/locales/lib/en_US');
1211
+ });
1154
1212
  }
1155
1213
  };
1156
1214
  var useUppyLocale = function useUppyLocale(locale) {
@@ -1195,19 +1253,29 @@ var _excluded$2 = ["default"];
1195
1253
  var packagesCache$1 = {};
1196
1254
  var defaultPackagesMap$1 = {
1197
1255
  webcam: function webcam() {
1198
- return import('@uppy/webcam');
1256
+ return loadPackage('@uppy/webcam', function () {
1257
+ return import('@uppy/webcam');
1258
+ });
1199
1259
  },
1200
1260
  facebook: function facebook() {
1201
- return import('@uppy/facebook');
1261
+ return loadPackage('@uppy/facebook', function () {
1262
+ return import('@uppy/facebook');
1263
+ });
1202
1264
  },
1203
1265
  instagram: function instagram() {
1204
- return import('@uppy/instagram');
1266
+ return loadPackage('@uppy/instagram', function () {
1267
+ return import('@uppy/instagram');
1268
+ });
1205
1269
  },
1206
1270
  dropbox: function dropbox() {
1207
- return import('@uppy/dropbox');
1271
+ return loadPackage('@uppy/dropbox', function () {
1272
+ return import('@uppy/dropbox');
1273
+ });
1208
1274
  },
1209
1275
  'google-drive': function googleDrive() {
1210
- return import('@uppy/google-drive');
1276
+ return loadPackage('@uppy/google-drive', function () {
1277
+ return import('@uppy/google-drive');
1278
+ });
1211
1279
  }
1212
1280
  };
1213
1281
  var useUppySources = function useUppySources(sources) {
@@ -1281,13 +1349,19 @@ var _excluded$1 = ["default"];
1281
1349
  var packagesCache = {};
1282
1350
  var defaultPackagesMap = {
1283
1351
  transloadit: function transloadit() {
1284
- return import('@uppy/transloadit');
1352
+ return loadPackage('@uppy/transloadit', function () {
1353
+ return import('@uppy/transloadit');
1354
+ });
1285
1355
  },
1286
1356
  tus: function tus() {
1287
- return import('@uppy/tus');
1357
+ return loadPackage('@uppy/tus', function () {
1358
+ return import('@uppy/tus');
1359
+ });
1288
1360
  },
1289
1361
  xhr: function xhr() {
1290
- return import('@uppy/xhr-upload');
1362
+ return loadPackage('@uppy/xhr-upload', function () {
1363
+ return import('@uppy/xhr-upload');
1364
+ });
1291
1365
  }
1292
1366
  };
1293
1367
  var useUppyTransport = function useUppyTransport(transport) {
@@ -1623,4 +1697,4 @@ var UppyProvider = function UppyProvider(_ref5) {
1623
1697
  UppyProvider.propTypes = propTypes;
1624
1698
  UppyProvider.defaultProps = defaultProps;
1625
1699
 
1626
- export { APP_NAMESPACE, ComponentsContext, ComponentsProvider, DISPLAYS_NAMESPACE, DefinitionProvider, FIELDS_NAMESPACE, FILTERS_NAMESPACE, FORMS_NAMESPACE, FieldsContext, FieldsProvider, FontsContext, FontsProvider, FormProvider, GoogleApiClientContext, GoogleApiClientProvider, GoogleKeysContext, GoogleKeysProvider, GoogleMapsClientContext, GoogleMapsClientProvider, LISTS_NAMESPACE, LocalesContext, LocalesProvider, MODALS_NAMESPACE, ModalsContext, ModalsProvider, PanelsContext, PanelsProvider, PanneauProvider, ResourceProvider, RoutesContext, RoutesProvider, TrackingProvider, UppyContext, UppyProvider, useAppComponent, useAppComponents, useAppComponentsManager, useComponent, useComponents, useComponentsManager, useDefinition, useDefinitionContext, useDisplayComponent, useDisplaysComponents, useDisplaysComponentsManager, useField, useFieldComponent, useFields, useFieldsComponents, useFieldsComponentsManager, useFieldsManager, useFilterComponent, useFiltersComponents, useFiltersComponentsManager, useFonts, useForm, useFormComponent, useFormSetValue, useFormValue, useFormsComponents, useFormsComponentsManager, useGoogleApiClient, useGoogleFonts, useGoogleKeys, useGoogleMapsClient, useListComponent, useListsComponents, useListsComponentsManager, useLocales, useModalComponent, useModals, useModalsComponents, useModalsComponentsManager, useOtherLocales, usePanels, usePanneau, usePanneauAuth, usePanneauColorScheme, usePanneauComponent, usePanneauComponents, usePanneauResource, usePanneauResources, usePanneauSettings, useResource, useRouteBack, useRoutePush, useRoutes, useTracking, useUppy, useUrlGenerator, withGoogleApiClient, withGoogleMapsClient, withModals, withPanels };
1700
+ export { APP_NAMESPACE, ComponentsContext, ComponentsProvider, DISPLAYS_NAMESPACE, DefinitionProvider, FIELDS_NAMESPACE, FILTERS_NAMESPACE, FORMS_NAMESPACE, FieldsContext, FieldsProvider, FontsContext, FontsProvider, FormProvider, GoogleApiClientContext, GoogleApiClientProvider, GoogleKeysContext, GoogleKeysProvider, GoogleMapsClientContext, GoogleMapsClientProvider, LISTS_NAMESPACE, LocalesContext, LocalesProvider, MODALS_NAMESPACE, ModalsContext, ModalsProvider, PAGES_NAMESPACE, PanelsContext, PanelsProvider, PanneauProvider, ResourceProvider, RoutesContext, RoutesProvider, TrackingProvider, UppyContext, UppyProvider, useAppComponent, useAppComponents, useAppComponentsManager, useComponent, useComponents, useComponentsManager, useDefinition, useDefinitionContext, useDisplayComponent, useDisplaysComponents, useDisplaysComponentsManager, useField, useFieldComponent, useFields, useFieldsComponents, useFieldsComponentsManager, useFieldsManager, useFilterComponent, useFiltersComponents, useFiltersComponentsManager, useFonts, useForm, useFormComponent, useFormSetValue, useFormValue, useFormsComponents, useFormsComponentsManager, useGoogleApiClient, useGoogleFonts, useGoogleKeys, useGoogleMapsClient, useListComponent, useListsComponents, useListsComponentsManager, useLocales, useModalComponent, useModals, useModalsComponents, useModalsComponentsManager, useOtherLocales, usePageComponent, usePagesComponents, usePagesComponentsManager, usePanels, usePanneau, usePanneauAuth, usePanneauColorScheme, usePanneauComponent, usePanneauComponents, usePanneauResource, usePanneauResources, usePanneauSettings, useResource, useRouteBack, useRoutePush, useRoutes, useTracking, useUppy, useUrlGenerator, withGoogleApiClient, withGoogleMapsClient, withModals, withPanels };
package/es/hooks.js CHANGED
@@ -4,7 +4,7 @@ import { useIntl } from 'react-intl';
4
4
  import isString from 'lodash/isString';
5
5
  import dayjs from 'dayjs';
6
6
  import { EventsManager, MediasParser } from '@panneau/core';
7
- import { createUseEvent } from '@panneau/core/utils';
7
+ import { createUseEvent, loadPackage } from '@panneau/core/utils';
8
8
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
9
9
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
10
10
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
@@ -565,7 +565,9 @@ var useLoadedFonts = function useLoadedFonts(fonts) {
565
565
  }, null);
566
566
  var hasConfig = config !== null;
567
567
  if (hasConfig && typeof window !== 'undefined') {
568
- import('webfontloader').then(function (_ref2) {
568
+ loadPackage('webfontloader', function () {
569
+ return import('webfontloader');
570
+ }).then(function (_ref2) {
569
571
  var WebFont = _ref2["default"];
570
572
  return WebFont.load(_objectSpread(_objectSpread({}, config), {}, {
571
573
  timeout: 3000,
package/es/index.js CHANGED
@@ -63,13 +63,13 @@ var toggle = PropTypes$1.shape({
63
63
  label: PropTypes$1.string
64
64
  });
65
65
  var toggles = PropTypes$1.arrayOf(toggle);
66
- var tableColumn = PropTypes$1.shape({
66
+ var tableColumn = PropTypes$1.oneOfType([PropTypes$1.string, PropTypes$1.shape({
67
67
  id: PropTypes$1.string,
68
68
  component: PropTypes$1.string,
69
69
  path: PropTypes$1.string,
70
70
  field: PropTypes$1.string,
71
71
  columnClassName: PropTypes$1.string
72
- });
72
+ })]);
73
73
  var tableColumns = PropTypes$1.arrayOf(tableColumn);
74
74
 
75
75
  /**
@@ -228,6 +228,8 @@ var getComponentFromName = function getComponentFromName() {
228
228
  return component;
229
229
  };
230
230
 
231
+ new EventEmitter();
232
+
231
233
  var ComponentsManager = /*#__PURE__*/function (_EventEmitter) {
232
234
  _inherits(ComponentsManager, _EventEmitter);
233
235
  var _super = _createSuper(ComponentsManager);
package/es/utils.js CHANGED
@@ -13,6 +13,7 @@ import isArray from 'lodash/isArray';
13
13
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
14
14
  import get from 'lodash/get';
15
15
  import capitalize from 'lodash/capitalize';
16
+ import EventEmitter from 'wolfy87-eventemitter';
16
17
  import slugify from 'slugify';
17
18
 
18
19
  var convertStyleToString = function convertStyleToString(style) {
@@ -78,7 +79,7 @@ var getComponent = function getComponent(component) {
78
79
  };
79
80
  };
80
81
 
81
- var _excluded = ["field"];
82
+ var _excluded = ["id", "field"];
82
83
  var getColumnFromField = function getColumnFromField(field) {
83
84
  if (field === null) {
84
85
  return null;
@@ -109,12 +110,17 @@ var getColumnsWithFields = function getColumnsWithFields(resource, columns) {
109
110
  var _ref = isString(column) ? {
110
111
  field: column
111
112
  } : column,
113
+ _ref$id = _ref.id,
114
+ colId = _ref$id === void 0 ? null : _ref$id,
112
115
  _ref$field = _ref.field,
113
- fieldName = _ref$field === void 0 ? null : _ref$field,
116
+ colField = _ref$field === void 0 ? null : _ref$field,
114
117
  otherProps = _objectWithoutProperties(_ref, _excluded);
115
- return _objectSpread(_objectSpread({}, fieldName !== null ? getColumnFromField(fields.find(function (it) {
118
+ var fieldName = colField || colId;
119
+ return _objectSpread(_objectSpread(_objectSpread({}, fieldName !== null ? getColumnFromField(fields.find(function (it) {
116
120
  return it.name === fieldName;
117
- }) || null) : null), otherProps);
121
+ }) || null) : null), otherProps), {}, {
122
+ id: colId
123
+ });
118
124
  }).filter(function (it) {
119
125
  return it !== null;
120
126
  }) : [];
@@ -249,6 +255,40 @@ var isMessage = function isMessage(message) {
249
255
  return isObject(message) && typeof message.defaultMessage !== 'undefined';
250
256
  };
251
257
 
258
+ /**
259
+ * Locale loader
260
+ */
261
+ var loaders = {};
262
+ var events = new EventEmitter();
263
+ function loadPackage(name, loader) {
264
+ if (typeof loaders[name] === 'undefined') {
265
+ loaders[name] = {
266
+ loader: loader().then(function (response) {
267
+ loaders[name].loader = null;
268
+ loaders[name].loaded = true;
269
+ loaders[name].resource = response;
270
+ events.emit("loaded:".concat(name), response);
271
+ return response;
272
+ }),
273
+ loaded: false,
274
+ resource: null
275
+ };
276
+ }
277
+ return new Promise(function (resolve) {
278
+ var _ref = loaders[name] || {},
279
+ _ref$loaded = _ref.loaded,
280
+ loaded = _ref$loaded === void 0 ? false : _ref$loaded,
281
+ resource = _ref.resource;
282
+ if (loaded === true) {
283
+ resolve(resource);
284
+ } else {
285
+ events.once("loaded:".concat(name), function (response) {
286
+ resolve(response);
287
+ });
288
+ }
289
+ });
290
+ }
291
+
252
292
  var setValue = function setValue(value, keyParts, fieldValue) {
253
293
  var key = keyParts.shift();
254
294
  var isArray = key.match(/^[0-9]+$/) !== null;
@@ -289,4 +329,4 @@ var validateFields = function validateFields(fields, value) {
289
329
  }, true);
290
330
  };
291
331
 
292
- export { convertStyleToString, createNullableOnChange, createUseEvent, flattenComponents, getColumnsWithFields, getComponent, getComponentFromName, getDefinitionFromId, getDisplayName, getFieldByName, getFieldFromPath, getFileName, getPathValue, getSelectOptions, isMessage, setValue as setFieldValue, slug, validateFields };
332
+ export { convertStyleToString, createNullableOnChange, createUseEvent, flattenComponents, getColumnsWithFields, getComponent, getComponentFromName, getDefinitionFromId, getDisplayName, getFieldByName, getFieldFromPath, getFileName, getPathValue, getSelectOptions, isMessage, loadPackage, setValue as setFieldValue, slug, validateFields };
package/lib/contexts.js CHANGED
@@ -20,6 +20,7 @@ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProp
20
20
  var reactRouter = require('react-router');
21
21
  var tracking = require('@folklore/tracking');
22
22
  var uuid = require('uuid');
23
+ var EventEmitter = require('wolfy87-eventemitter');
23
24
 
24
25
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
25
26
 
@@ -51,6 +52,7 @@ var uniqBy__default = /*#__PURE__*/_interopDefaultLegacy(uniqBy);
51
52
  var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
52
53
  var isObject__default = /*#__PURE__*/_interopDefaultLegacy(isObject);
53
54
  var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
55
+ var EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter);
54
56
 
55
57
  var MODALS_NAMESPACE = 'modals';
56
58
  var FIELDS_NAMESPACE = 'fields';
@@ -58,6 +60,7 @@ var FORMS_NAMESPACE = 'forms';
58
60
  var FILTERS_NAMESPACE = 'filters';
59
61
  var LISTS_NAMESPACE = 'lists';
60
62
  var DISPLAYS_NAMESPACE = 'displays';
63
+ var PAGES_NAMESPACE = 'pages';
61
64
  var APP_NAMESPACE = 'app';
62
65
  var ComponentsContext = /*#__PURE__*/React__default["default"].createContext(null);
63
66
 
@@ -180,6 +183,21 @@ var useDisplayComponent = function useDisplayComponent(name) {
180
183
  return useComponent(name, defaultComponent, DISPLAYS_NAMESPACE);
181
184
  };
182
185
 
186
+ /**
187
+ * Pages hooks
188
+ */
189
+ var usePagesComponentsManager = function usePagesComponentsManager() {
190
+ return useComponentsManager(PAGES_NAMESPACE);
191
+ };
192
+ var usePagesComponents = function usePagesComponents() {
193
+ var defaultComponents = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
194
+ return useComponents(PAGES_NAMESPACE, defaultComponents);
195
+ };
196
+ var usePageComponent = function usePageComponent(name) {
197
+ var defaultComponent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
198
+ return useComponent(name, defaultComponent, PAGES_NAMESPACE);
199
+ };
200
+
183
201
  /**
184
202
  * App hooks
185
203
  */
@@ -265,13 +283,13 @@ var toggle = PropTypes__default["default"].shape({
265
283
  label: PropTypes__default["default"].string
266
284
  });
267
285
  PropTypes__default["default"].arrayOf(toggle);
268
- var tableColumn = PropTypes__default["default"].shape({
286
+ var tableColumn = PropTypes__default["default"].oneOfType([PropTypes__default["default"].string, PropTypes__default["default"].shape({
269
287
  id: PropTypes__default["default"].string,
270
288
  component: PropTypes__default["default"].string,
271
289
  path: PropTypes__default["default"].string,
272
290
  field: PropTypes__default["default"].string,
273
291
  columnClassName: PropTypes__default["default"].string
274
- });
292
+ })]);
275
293
  PropTypes__default["default"].arrayOf(tableColumn);
276
294
 
277
295
  /**
@@ -1056,33 +1074,34 @@ var useUrlGenerator = function useUrlGenerator() {
1056
1074
  };
1057
1075
  var useRoutePush = function useRoutePush() {
1058
1076
  var url = useUrlGenerator();
1059
- var history = reactRouter.useHistory();
1077
+ var navigate = reactRouter.useNavigate();
1060
1078
  var push = React.useCallback(function (route, data) {
1061
1079
  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
1062
1080
  args[_key - 2] = arguments[_key];
1063
1081
  }
1064
1082
  if (isString__default["default"](route)) {
1065
- history.push.apply(history, [url(route, data)].concat(args));
1083
+ var _history;
1084
+ (_history = history).push.apply(_history, [url(route, data)].concat(args));
1066
1085
  } else {
1067
1086
  var _ref = route || {},
1068
1087
  _ref$pathname = _ref.pathname,
1069
1088
  pathname = _ref$pathname === void 0 ? null : _ref$pathname,
1070
1089
  _ref$search = _ref.search,
1071
1090
  search = _ref$search === void 0 ? null : _ref$search;
1072
- history.push.apply(history, [{
1091
+ navigate.apply(void 0, [{
1073
1092
  pathname: url(pathname, data),
1074
1093
  search: search
1075
1094
  }].concat(args));
1076
1095
  }
1077
- }, [history, url]);
1096
+ }, [navigate, url]);
1078
1097
  return push;
1079
1098
  };
1080
1099
  var useRouteBack = function useRouteBack() {
1081
1100
  var url = useUrlGenerator();
1082
- var history = reactRouter.useHistory();
1101
+ var navigate = reactRouter.useNavigate();
1083
1102
  var back = React.useCallback(function () {
1084
- return history.goBack();
1085
- }, [history, url]);
1103
+ return navigate(-1);
1104
+ }, [navigate, url]);
1086
1105
  return back;
1087
1106
  };
1088
1107
  var propTypes$2 = {
@@ -1140,6 +1159,40 @@ var TrackingProvider = function TrackingProvider(_ref) {
1140
1159
  TrackingProvider.propTypes = propTypes$1;
1141
1160
  TrackingProvider.defaultProps = defaultProps$1;
1142
1161
 
1162
+ /**
1163
+ * Locale loader
1164
+ */
1165
+ var loaders = {};
1166
+ var events = new EventEmitter__default["default"]();
1167
+ function loadPackage(name, loader) {
1168
+ if (typeof loaders[name] === 'undefined') {
1169
+ loaders[name] = {
1170
+ loader: loader().then(function (response) {
1171
+ loaders[name].loader = null;
1172
+ loaders[name].loaded = true;
1173
+ loaders[name].resource = response;
1174
+ events.emit("loaded:".concat(name), response);
1175
+ return response;
1176
+ }),
1177
+ loaded: false,
1178
+ resource: null
1179
+ };
1180
+ }
1181
+ return new Promise(function (resolve) {
1182
+ var _ref = loaders[name] || {},
1183
+ _ref$loaded = _ref.loaded,
1184
+ loaded = _ref$loaded === void 0 ? false : _ref$loaded,
1185
+ resource = _ref.resource;
1186
+ if (loaded === true) {
1187
+ resolve(resource);
1188
+ } else {
1189
+ events.once("loaded:".concat(name), function (response) {
1190
+ resolve(response);
1191
+ });
1192
+ }
1193
+ });
1194
+ }
1195
+
1143
1196
  /**
1144
1197
  * Locale loader
1145
1198
  */
@@ -1159,7 +1212,9 @@ var useUppyCore = function useUppyCore() {
1159
1212
  canceled = true;
1160
1213
  };
1161
1214
  }
1162
- Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/core')); }).then(function (_ref) {
1215
+ loadPackage('@uppy/core', function () {
1216
+ return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/core')); });
1217
+ }).then(function (_ref) {
1163
1218
  var Uppy = _ref["default"];
1164
1219
  packageCache = Uppy;
1165
1220
  if (!canceled) {
@@ -1181,10 +1236,14 @@ var useUppyCore = function useUppyCore() {
1181
1236
  var packagesCache$2 = {};
1182
1237
  var defaultPackagesMap$2 = {
1183
1238
  fr: function fr() {
1184
- return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/locales/lib/fr_FR')); });
1239
+ return loadPackage('@uppy/locales/lib/fr_FR', function () {
1240
+ return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/locales/lib/fr_FR')); });
1241
+ });
1185
1242
  },
1186
1243
  en: function en() {
1187
- return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/locales/lib/en_US')); });
1244
+ return loadPackage('@uppy/locales/lib/en_US', function () {
1245
+ return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/locales/lib/en_US')); });
1246
+ });
1188
1247
  }
1189
1248
  };
1190
1249
  var useUppyLocale = function useUppyLocale(locale) {
@@ -1229,19 +1288,29 @@ var _excluded$2 = ["default"];
1229
1288
  var packagesCache$1 = {};
1230
1289
  var defaultPackagesMap$1 = {
1231
1290
  webcam: function webcam() {
1232
- return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/webcam')); });
1291
+ return loadPackage('@uppy/webcam', function () {
1292
+ return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/webcam')); });
1293
+ });
1233
1294
  },
1234
1295
  facebook: function facebook() {
1235
- return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/facebook')); });
1296
+ return loadPackage('@uppy/facebook', function () {
1297
+ return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/facebook')); });
1298
+ });
1236
1299
  },
1237
1300
  instagram: function instagram() {
1238
- return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/instagram')); });
1301
+ return loadPackage('@uppy/instagram', function () {
1302
+ return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/instagram')); });
1303
+ });
1239
1304
  },
1240
1305
  dropbox: function dropbox() {
1241
- return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/dropbox')); });
1306
+ return loadPackage('@uppy/dropbox', function () {
1307
+ return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/dropbox')); });
1308
+ });
1242
1309
  },
1243
1310
  'google-drive': function googleDrive() {
1244
- return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/google-drive')); });
1311
+ return loadPackage('@uppy/google-drive', function () {
1312
+ return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/google-drive')); });
1313
+ });
1245
1314
  }
1246
1315
  };
1247
1316
  var useUppySources = function useUppySources(sources) {
@@ -1315,13 +1384,19 @@ var _excluded$1 = ["default"];
1315
1384
  var packagesCache = {};
1316
1385
  var defaultPackagesMap = {
1317
1386
  transloadit: function transloadit() {
1318
- return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/transloadit')); });
1387
+ return loadPackage('@uppy/transloadit', function () {
1388
+ return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/transloadit')); });
1389
+ });
1319
1390
  },
1320
1391
  tus: function tus() {
1321
- return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/tus')); });
1392
+ return loadPackage('@uppy/tus', function () {
1393
+ return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/tus')); });
1394
+ });
1322
1395
  },
1323
1396
  xhr: function xhr() {
1324
- return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/xhr-upload')); });
1397
+ return loadPackage('@uppy/xhr-upload', function () {
1398
+ return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@uppy/xhr-upload')); });
1399
+ });
1325
1400
  }
1326
1401
  };
1327
1402
  var useUppyTransport = function useUppyTransport(transport) {
@@ -1686,6 +1761,7 @@ exports.LocalesProvider = LocalesProvider;
1686
1761
  exports.MODALS_NAMESPACE = MODALS_NAMESPACE;
1687
1762
  exports.ModalsContext = ModalsContext;
1688
1763
  exports.ModalsProvider = ModalsProvider;
1764
+ exports.PAGES_NAMESPACE = PAGES_NAMESPACE;
1689
1765
  exports.PanelsContext = PanelsContext;
1690
1766
  exports.PanelsProvider = PanelsProvider;
1691
1767
  exports.PanneauProvider = PanneauProvider;
@@ -1735,6 +1811,9 @@ exports.useModals = useModals;
1735
1811
  exports.useModalsComponents = useModalsComponents;
1736
1812
  exports.useModalsComponentsManager = useModalsComponentsManager;
1737
1813
  exports.useOtherLocales = useOtherLocales;
1814
+ exports.usePageComponent = usePageComponent;
1815
+ exports.usePagesComponents = usePagesComponents;
1816
+ exports.usePagesComponentsManager = usePagesComponentsManager;
1738
1817
  exports.usePanels = usePanels;
1739
1818
  exports.usePanneau = usePanneau;
1740
1819
  exports.usePanneauAuth = usePanneauAuth;
package/lib/hooks.js CHANGED
@@ -600,7 +600,9 @@ var useLoadedFonts = function useLoadedFonts(fonts) {
600
600
  }, null);
601
601
  var hasConfig = config !== null;
602
602
  if (hasConfig && typeof window !== 'undefined') {
603
- Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('webfontloader')); }).then(function (_ref2) {
603
+ utils.loadPackage('webfontloader', function () {
604
+ return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('webfontloader')); });
605
+ }).then(function (_ref2) {
604
606
  var WebFont = _ref2["default"];
605
607
  return WebFont.load(_objectSpread__default["default"](_objectSpread__default["default"]({}, config), {}, {
606
608
  timeout: 3000,
package/lib/index.js CHANGED
@@ -85,13 +85,13 @@ var toggle = PropTypes__default["default"].shape({
85
85
  label: PropTypes__default["default"].string
86
86
  });
87
87
  var toggles = PropTypes__default["default"].arrayOf(toggle);
88
- var tableColumn = PropTypes__default["default"].shape({
88
+ var tableColumn = PropTypes__default["default"].oneOfType([PropTypes__default["default"].string, PropTypes__default["default"].shape({
89
89
  id: PropTypes__default["default"].string,
90
90
  component: PropTypes__default["default"].string,
91
91
  path: PropTypes__default["default"].string,
92
92
  field: PropTypes__default["default"].string,
93
93
  columnClassName: PropTypes__default["default"].string
94
- });
94
+ })]);
95
95
  var tableColumns = PropTypes__default["default"].arrayOf(tableColumn);
96
96
 
97
97
  /**
@@ -250,6 +250,8 @@ var getComponentFromName = function getComponentFromName() {
250
250
  return component;
251
251
  };
252
252
 
253
+ new EventEmitter__default["default"]();
254
+
253
255
  var ComponentsManager = /*#__PURE__*/function (_EventEmitter) {
254
256
  _inherits__default["default"](ComponentsManager, _EventEmitter);
255
257
  var _super = _createSuper__default["default"](ComponentsManager);
package/lib/utils.js CHANGED
@@ -16,6 +16,7 @@ var isArray = require('lodash/isArray');
16
16
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
17
17
  var get = require('lodash/get');
18
18
  var capitalize = require('lodash/capitalize');
19
+ var EventEmitter = require('wolfy87-eventemitter');
19
20
  var slugify = require('slugify');
20
21
 
21
22
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -31,6 +32,7 @@ var isArray__default = /*#__PURE__*/_interopDefaultLegacy(isArray);
31
32
  var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
32
33
  var get__default = /*#__PURE__*/_interopDefaultLegacy(get);
33
34
  var capitalize__default = /*#__PURE__*/_interopDefaultLegacy(capitalize);
35
+ var EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter);
34
36
  var slugify__default = /*#__PURE__*/_interopDefaultLegacy(slugify);
35
37
 
36
38
  var convertStyleToString = function convertStyleToString(style) {
@@ -96,7 +98,7 @@ var getComponent = function getComponent(component) {
96
98
  };
97
99
  };
98
100
 
99
- var _excluded = ["field"];
101
+ var _excluded = ["id", "field"];
100
102
  var getColumnFromField = function getColumnFromField(field) {
101
103
  if (field === null) {
102
104
  return null;
@@ -127,12 +129,17 @@ var getColumnsWithFields = function getColumnsWithFields(resource, columns) {
127
129
  var _ref = isString__default["default"](column) ? {
128
130
  field: column
129
131
  } : column,
132
+ _ref$id = _ref.id,
133
+ colId = _ref$id === void 0 ? null : _ref$id,
130
134
  _ref$field = _ref.field,
131
- fieldName = _ref$field === void 0 ? null : _ref$field,
135
+ colField = _ref$field === void 0 ? null : _ref$field,
132
136
  otherProps = _objectWithoutProperties__default["default"](_ref, _excluded);
133
- return _objectSpread__default["default"](_objectSpread__default["default"]({}, fieldName !== null ? getColumnFromField(fields.find(function (it) {
137
+ var fieldName = colField || colId;
138
+ return _objectSpread__default["default"](_objectSpread__default["default"](_objectSpread__default["default"]({}, fieldName !== null ? getColumnFromField(fields.find(function (it) {
134
139
  return it.name === fieldName;
135
- }) || null) : null), otherProps);
140
+ }) || null) : null), otherProps), {}, {
141
+ id: colId
142
+ });
136
143
  }).filter(function (it) {
137
144
  return it !== null;
138
145
  }) : [];
@@ -267,6 +274,40 @@ var isMessage = function isMessage(message) {
267
274
  return isObject__default["default"](message) && typeof message.defaultMessage !== 'undefined';
268
275
  };
269
276
 
277
+ /**
278
+ * Locale loader
279
+ */
280
+ var loaders = {};
281
+ var events = new EventEmitter__default["default"]();
282
+ function loadPackage(name, loader) {
283
+ if (typeof loaders[name] === 'undefined') {
284
+ loaders[name] = {
285
+ loader: loader().then(function (response) {
286
+ loaders[name].loader = null;
287
+ loaders[name].loaded = true;
288
+ loaders[name].resource = response;
289
+ events.emit("loaded:".concat(name), response);
290
+ return response;
291
+ }),
292
+ loaded: false,
293
+ resource: null
294
+ };
295
+ }
296
+ return new Promise(function (resolve) {
297
+ var _ref = loaders[name] || {},
298
+ _ref$loaded = _ref.loaded,
299
+ loaded = _ref$loaded === void 0 ? false : _ref$loaded,
300
+ resource = _ref.resource;
301
+ if (loaded === true) {
302
+ resolve(resource);
303
+ } else {
304
+ events.once("loaded:".concat(name), function (response) {
305
+ resolve(response);
306
+ });
307
+ }
308
+ });
309
+ }
310
+
270
311
  var setValue = function setValue(value, keyParts, fieldValue) {
271
312
  var key = keyParts.shift();
272
313
  var isArray = key.match(/^[0-9]+$/) !== null;
@@ -334,6 +375,7 @@ exports.getFileName = getFileName;
334
375
  exports.getPathValue = getPathValue;
335
376
  exports.getSelectOptions = getSelectOptions;
336
377
  exports.isMessage = isMessage;
378
+ exports.loadPackage = loadPackage;
337
379
  exports.setFieldValue = setValue;
338
380
  exports.slug = slug;
339
381
  exports.validateFields = validateFields;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panneau/core",
3
- "version": "1.0.4",
3
+ "version": "1.1.0",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "javascript"
@@ -88,7 +88,7 @@
88
88
  "@uppy/tus": "^2.2.0",
89
89
  "@uppy/webcam": "^2.0.5",
90
90
  "@uppy/xhr-upload": "^2.0.7",
91
- "bootstrap": "5.2.0-beta1",
91
+ "bootstrap": "^5.2.0",
92
92
  "change-case": "^4.1.2",
93
93
  "classnames": "^2.2.6",
94
94
  "css-mediaquery": "^0.1.2",
@@ -101,8 +101,8 @@
101
101
  "react-helmet": "^6.1.0",
102
102
  "react-intl": "^5.15.8||^6.0.0",
103
103
  "react-is": "^17.0.2",
104
- "react-router": "^5.2.0",
105
- "react-router-dom": "^5.2.0",
104
+ "react-router": "^6.2.1",
105
+ "react-router-dom": "^6.2.1",
106
106
  "react-use-gesture": "^9.0.0",
107
107
  "slugify": "^1.5.0",
108
108
  "snake-case": "^3.0.4",
@@ -114,5 +114,5 @@
114
114
  "publishConfig": {
115
115
  "access": "public"
116
116
  },
117
- "gitHead": "95997ec1ccd1b55d0d6f2522baa92d831bf5f13d"
117
+ "gitHead": "1d4ce10073e63024309c615ffaec2e1193aeec7e"
118
118
  }