@panneau/field-resource-item 3.0.222 → 3.0.224

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 (2) hide show
  1. package/package.json +16 -13
  2. package/lib/index.js +0 -447
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panneau/field-resource-item",
3
- "version": "3.0.222",
3
+ "version": "3.0.224",
4
4
  "description": "An item mapping a resource",
5
5
  "keywords": [
6
6
  "javascript"
@@ -25,8 +25,11 @@
25
25
  }
26
26
  ],
27
27
  "license": "ISC",
28
- "main": "lib/index.js",
28
+ "type": "module",
29
29
  "module": "es/index.js",
30
+ "exports": {
31
+ ".": "./es/index.js"
32
+ },
30
33
  "files": [
31
34
  "lib",
32
35
  "es",
@@ -46,16 +49,16 @@
46
49
  },
47
50
  "dependencies": {
48
51
  "@babel/runtime": "^7.12.5",
49
- "@panneau/core": "^3.0.222",
50
- "@panneau/data": "^3.0.222",
51
- "@panneau/element-button": "^3.0.222",
52
- "@panneau/element-resource-card": "^3.0.222",
53
- "@panneau/element-select": "^3.0.222",
54
- "@panneau/form-resource": "^3.0.222",
55
- "@panneau/intl": "^3.0.222",
56
- "@panneau/modal-dialog": "^3.0.222",
57
- "@panneau/modal-resource-form": "^3.0.222",
58
- "@panneau/modal-resource-items": "^3.0.222",
52
+ "@panneau/core": "^3.0.224",
53
+ "@panneau/data": "^3.0.224",
54
+ "@panneau/element-button": "^3.0.224",
55
+ "@panneau/element-resource-card": "^3.0.224",
56
+ "@panneau/element-select": "^3.0.224",
57
+ "@panneau/form-resource": "^3.0.224",
58
+ "@panneau/intl": "^3.0.224",
59
+ "@panneau/modal-dialog": "^3.0.224",
60
+ "@panneau/modal-resource-form": "^3.0.224",
61
+ "@panneau/modal-resource-items": "^3.0.224",
59
62
  "classnames": "^2.5.1",
60
63
  "lodash": "^4.17.21",
61
64
  "prop-types": "^15.7.2",
@@ -64,5 +67,5 @@
64
67
  "publishConfig": {
65
68
  "access": "public"
66
69
  },
67
- "gitHead": "1d7f6c2943965c2c26fb6ce1d8f3c85eb88b2146"
70
+ "gitHead": "c95bd465867c4c7d112bf0ed66036574cc05c627"
68
71
  }
package/lib/index.js DELETED
@@ -1,447 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
6
- var _defineProperty = require('@babel/runtime/helpers/defineProperty');
7
- var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
8
- var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
9
- var classNames = require('classnames');
10
- var isArray = require('lodash/isArray');
11
- var isEmpty = require('lodash/isEmpty');
12
- var uniqBy = require('lodash/uniqBy');
13
- var PropTypes = require('prop-types');
14
- var React = require('react');
15
- var reactIntl = require('react-intl');
16
- var core = require('@panneau/core');
17
- var contexts = require('@panneau/core/contexts');
18
- var utils = require('@panneau/core/utils');
19
- var data = require('@panneau/data');
20
- var Button = require('@panneau/element-button');
21
- var ResourceCard = require('@panneau/element-resource-card');
22
- var Select = require('@panneau/element-select');
23
- var ResourceForm = require('@panneau/form-resource');
24
- var intl = require('@panneau/intl');
25
- var Dialog = require('@panneau/modal-dialog');
26
- var ResourceItemsModal = require('@panneau/modal-resource-items');
27
-
28
- // TODO: improve the modals (esc key) and switch to FormModal
29
-
30
- var propTypes = {
31
- name: PropTypes.string,
32
- value: PropTypes.object,
33
- // eslint-disable-line react/forbid-prop-types
34
- errors: core.PropTypes.formErrors,
35
- resource: PropTypes.string,
36
- resourceType: PropTypes.string,
37
- paginated: PropTypes.bool,
38
- query: PropTypes.object,
39
- // eslint-disable-line react/forbid-prop-types
40
- page: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
41
- // eslint-disable-line react/forbid-prop-types
42
- count: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
43
- // eslint-disable-line react/forbid-prop-types
44
- options: PropTypes.object,
45
- // eslint-disable-line react/forbid-prop-types
46
- searchParamName: PropTypes.string,
47
- getItemLabel: PropTypes.func,
48
- getItemDescription: PropTypes.func,
49
- getItemImage: PropTypes.func,
50
- itemLabelPath: PropTypes.string,
51
- itemDescriptionPath: PropTypes.string,
52
- itemImagePath: PropTypes.string,
53
- itemLabelWithId: PropTypes.bool,
54
- placeholder: PropTypes.string,
55
- canCreate: PropTypes.bool,
56
- canEdit: PropTypes.bool,
57
- canFind: PropTypes.bool,
58
- withoutModal: PropTypes.bool,
59
- createButtonLabel: core.PropTypes.message,
60
- editButtonLabel: core.PropTypes.message,
61
- findButtonLabel: core.PropTypes.message,
62
- multiple: PropTypes.bool,
63
- disabled: PropTypes.bool,
64
- className: PropTypes.string,
65
- inputClassName: PropTypes.string,
66
- onChange: PropTypes.func
67
- };
68
- var defaultProps = {
69
- name: null,
70
- value: null,
71
- errors: null,
72
- resource: null,
73
- resourceType: null,
74
- paginated: true,
75
- query: null,
76
- page: null,
77
- count: null,
78
- options: null,
79
- searchParamName: 'search',
80
- getItemLabel: utils.getPathValue,
81
- getItemDescription: utils.getPathValue,
82
- getItemImage: utils.getPathValue,
83
- itemLabelPath: 'label',
84
- itemDescriptionPath: null,
85
- itemImagePath: 'image.thumbnail_url',
86
- itemLabelWithId: false,
87
- placeholder: null,
88
- canCreate: false,
89
- canEdit: false,
90
- canFind: false,
91
- withoutModal: false,
92
- createButtonLabel: null,
93
- editButtonLabel: null,
94
- findButtonLabel: null,
95
- multiple: false,
96
- disabled: false,
97
- className: null,
98
- inputClassName: null,
99
- onChange: null
100
- };
101
- var ResourceItemField = function ResourceItemField(_ref) {
102
- var name = _ref.name,
103
- value = _ref.value,
104
- errors = _ref.errors,
105
- resourceId = _ref.resource,
106
- resourceType = _ref.resourceType,
107
- paginated = _ref.paginated,
108
- initialQuery = _ref.query,
109
- initialPage = _ref.page,
110
- initialCount = _ref.count,
111
- initialOptions = _ref.options,
112
- searchParamName = _ref.searchParamName,
113
- initialGetItemLabel = _ref.getItemLabel,
114
- getItemDescription = _ref.getItemDescription,
115
- getItemImage = _ref.getItemImage,
116
- itemLabelPath = _ref.itemLabelPath,
117
- itemDescriptionPath = _ref.itemDescriptionPath,
118
- itemImagePath = _ref.itemImagePath,
119
- itemLabelWithId = _ref.itemLabelWithId,
120
- placeholder = _ref.placeholder,
121
- canCreate = _ref.canCreate,
122
- canEdit = _ref.canEdit,
123
- canFind = _ref.canFind,
124
- withoutModal = _ref.withoutModal,
125
- createButtonLabel = _ref.createButtonLabel,
126
- editButtonLabel = _ref.editButtonLabel,
127
- findButtonLabel = _ref.findButtonLabel,
128
- multiple = _ref.multiple,
129
- disabled = _ref.disabled,
130
- className = _ref.className,
131
- inputClassName = _ref.inputClassName,
132
- onChange = _ref.onChange;
133
- var intl$1 = reactIntl.useIntl();
134
- var resource = contexts.usePanneauResource(resourceId);
135
- var resourceValues = intl.useResourceValues(resource);
136
- var defaultPage = React.useMemo(function () {
137
- return initialPage || (paginated ? 1 : null);
138
- }, [initialPage, paginated]);
139
- var defaultCount = React.useMemo(function () {
140
- return initialCount || (paginated ? 8 : null);
141
- }, [initialCount, paginated]);
142
- var hasValue = value !== null && !isEmpty(value);
143
-
144
- // const [initialValue] = useState(value);
145
-
146
- var _useState = React.useState(false),
147
- _useState2 = _slicedToArray(_useState, 2),
148
- formOpen = _useState2[0],
149
- setFormOpen = _useState2[1];
150
- var _useState3 = React.useState(false),
151
- _useState4 = _slicedToArray(_useState3, 2),
152
- listOpen = _useState4[0],
153
- setListOpen = _useState4[1];
154
-
155
- // TODO: list state controls?
156
- var _useState5 = React.useState(initialQuery),
157
- _useState6 = _slicedToArray(_useState5, 2),
158
- query = _useState6[0];
159
- _useState6[1];
160
- var _useState7 = React.useState(defaultPage),
161
- _useState8 = _slicedToArray(_useState7, 2),
162
- page = _useState8[0],
163
- setPage = _useState8[1];
164
- var _useState9 = React.useState(defaultCount),
165
- _useState10 = _slicedToArray(_useState9, 2),
166
- count = _useState10[0];
167
- _useState10[1];
168
- var _useState11 = React.useState(initialOptions),
169
- _useState12 = _slicedToArray(_useState11, 2),
170
- resourceOptions = _useState12[0];
171
- _useState12[1];
172
-
173
- // The text input search query
174
- var _useState13 = React.useState(''),
175
- _useState14 = _slicedToArray(_useState13, 2),
176
- inputTextValue = _useState14[0],
177
- setInputTextValue = _useState14[1];
178
- var _useState15 = React.useState(''),
179
- _useState16 = _slicedToArray(_useState15, 2),
180
- queryTextValue = _useState16[0],
181
- setQueryTextValue = _useState16[1];
182
- var onInputChange = React.useCallback(function (textValue) {
183
- setInputTextValue(textValue);
184
- setPage(defaultPage);
185
- }, [setInputTextValue, setPage, defaultPage]);
186
- React.useEffect(function () {
187
- var id = setTimeout(function () {
188
- setQueryTextValue(inputTextValue);
189
- }, 500);
190
- return function () {
191
- clearTimeout(id);
192
- };
193
- }, [inputTextValue, setQueryTextValue]);
194
- var queryResource = React.useMemo(function () {
195
- return {
196
- id: resourceId
197
- };
198
- }, [resourceId]);
199
- var finalQuery = React.useMemo(function () {
200
- return _objectSpread(_objectSpread(_objectSpread({}, query), !isEmpty(queryTextValue) ? _defineProperty({}, searchParamName, queryTextValue) : null), {}, {
201
- paginated: paginated
202
- });
203
- }, [queryTextValue, paginated]);
204
- var _useResourceItems = data.useResourceItems(queryResource, finalQuery, paginated ? page : null, paginated ? count : null, resourceOptions),
205
- _useResourceItems$all = _useResourceItems.allItems,
206
- partialItems = _useResourceItems$all === void 0 ? null : _useResourceItems$all,
207
- _useResourceItems$rel = _useResourceItems.reload,
208
- reload = _useResourceItems$rel === void 0 ? null : _useResourceItems$rel,
209
- _useResourceItems$pag = _useResourceItems.pagination,
210
- pagination = _useResourceItems$pag === void 0 ? null : _useResourceItems$pag;
211
- var _ref3 = pagination || {},
212
- _ref3$lastPage = _ref3.lastPage,
213
- lastPage = _ref3$lastPage === void 0 ? null : _ref3$lastPage;
214
- var items = uniqBy((partialItems || []).concat(multiple && isArray(value) ? value : [value]).filter(function (it) {
215
- return it !== null;
216
- }), function (_ref4) {
217
- var _ref4$id = _ref4.id,
218
- id = _ref4$id === void 0 ? null : _ref4$id;
219
- return id;
220
- });
221
- var onScrollEnd = React.useCallback(function () {
222
- if (page !== null && page >= lastPage) {
223
- return;
224
- }
225
- if (paginated) {
226
- setPage(page + 1);
227
- }
228
- }, [paginated, page, setPage, lastPage]);
229
- var getItemLabel = React.useCallback(function (it, path) {
230
- var _ref5 = it || {},
231
- _ref5$id = _ref5.id,
232
- id = _ref5$id === void 0 ? null : _ref5$id;
233
- if (itemLabelWithId) {
234
- var label = initialGetItemLabel(it, path);
235
- return label ? "".concat(label, " (#").concat(id, ")") : "#".concat(id);
236
- }
237
- return path !== null ? initialGetItemLabel(it, path) : "#".concat(id);
238
- }, [initialGetItemLabel, itemLabelWithId]);
239
- var parseItem = React.useCallback(function (it) {
240
- var label = getItemLabel(it, itemLabelPath);
241
- var description = getItemDescription(it, itemDescriptionPath);
242
- var finalLabel = description !== null ? "".concat(label, ": ").concat(description) : label;
243
- return {
244
- value: it.id,
245
- label: finalLabel
246
- };
247
- }, [getItemLabel, getItemDescription, itemLabelPath, itemDescriptionPath]);
248
- var finalValue = multiple && isArray(value) ? value.map(function (_ref6) {
249
- var _ref6$id = _ref6.id,
250
- id = _ref6$id === void 0 ? null : _ref6$id;
251
- return id;
252
- }) : (value === null || value === void 0 ? void 0 : value.id) || null;
253
- var _ref7 = !multiple && hasValue ? value : {
254
- type: resourceType
255
- },
256
- _ref7$type = _ref7.type,
257
- finalType = _ref7$type === void 0 ? null : _ref7$type;
258
- var options = (items || []).map(function (it) {
259
- return parseItem(it);
260
- });
261
- var onValueChange = React.useCallback(function (newId) {
262
- if (onChange === null) return;
263
- if (multiple) {
264
- var newValue = items.filter(function (_ref8) {
265
- var _ref8$id = _ref8.id,
266
- id = _ref8$id === void 0 ? null : _ref8$id;
267
- return newId.indexOf(id) !== -1;
268
- }) || [];
269
- onChange(newValue);
270
- } else {
271
- var _newValue = items.filter(function (_ref9) {
272
- var _ref9$id = _ref9.id,
273
- id = _ref9$id === void 0 ? null : _ref9$id;
274
- return id === newId;
275
- }) || [];
276
- if (_newValue !== null && _newValue.length > 0) {
277
- onChange(_newValue[0]);
278
- } else {
279
- onChange(null);
280
- }
281
- }
282
- }, [items, onChange, multiple]);
283
- var onOpenForm = React.useCallback(function () {
284
- setFormOpen(true);
285
- }, [setFormOpen]);
286
- var onCloseForm = React.useCallback(function () {
287
- setFormOpen(false);
288
- }, [setFormOpen]);
289
- var onFormSuccess = React.useCallback(function (newValue) {
290
- if (onChange === null) return;
291
- var finalNewValue = resourceType !== null ? _objectSpread({
292
- type: resourceType
293
- }, newValue) : newValue;
294
- if (multiple) {
295
- onChange(isArray(value) ? [].concat(_toConsumableArray(value), [finalNewValue]) : [finalNewValue]);
296
- } else {
297
- onChange(finalNewValue);
298
- }
299
- setFormOpen(false);
300
- }, [onChange, multiple, value, setFormOpen, resourceType, paginated, initialPage]);
301
- var onOpenList = React.useCallback(function () {
302
- setListOpen(false); // TODO: fix this
303
- }, [setListOpen]);
304
- var onCloseList = React.useCallback(function () {
305
- setListOpen(false);
306
- }, [setListOpen]);
307
- var onSelectListItem = React.useCallback(function (newValue) {
308
- if (onChange !== null) {
309
- onChange(newValue);
310
- setListOpen(false);
311
- }
312
- }, [onChange, setListOpen]);
313
-
314
- // If empty try to fetch
315
- // const onFocus = useCallback(() => {
316
- // if ((partialItems || []).length === 0) {
317
- // reloadall();
318
- // }
319
- // }, [paginated, reloadall]);
320
-
321
- var onClickRemove = React.useCallback(function () {
322
- if (onChange !== null) {
323
- onChange(null);
324
- }
325
-
326
- // Clear the page and be good
327
- if (paginated) {
328
- setPage(defaultPage);
329
- reload();
330
- } else {
331
- reload();
332
- }
333
- }, [onChange, paginated, defaultPage, reload]);
334
- var form = formOpen ? /*#__PURE__*/React.createElement(ResourceForm, {
335
- resource: resource,
336
- type: finalType,
337
- item: !multiple ? value : null,
338
- onSuccess: onFormSuccess
339
- }) : null;
340
- return /*#__PURE__*/React.createElement("div", {
341
- className: classNames(['position-relative', _defineProperty({}, className, className != null)])
342
- }, hasValue && !multiple ? /*#__PURE__*/React.createElement("div", {
343
- className: "row"
344
- }, /*#__PURE__*/React.createElement("div", {
345
- className: "col-10 flex-grow-1"
346
- }, /*#__PURE__*/React.createElement(ResourceCard, {
347
- className: "flex-grow-1",
348
- item: value,
349
- getItemLabel: initialGetItemLabel,
350
- getItemDescription: getItemDescription,
351
- getItemImage: getItemImage,
352
- itemLabelPath: itemLabelPath,
353
- itemDescriptionPath: itemDescriptionPath,
354
- itemImagePath: itemImagePath,
355
- itemLabelWithId: itemLabelWithId,
356
- disable: disabled,
357
- onClickEdit: canEdit && !multiple ? formOpen ? onCloseForm : onOpenForm : null,
358
- onClickRemove: onClickRemove,
359
- editButtonLabel: editButtonLabel
360
- }))) : /*#__PURE__*/React.createElement("div", {
361
- className: "row align-items-center"
362
- }, /*#__PURE__*/React.createElement("div", {
363
- className: "col-8 flex-grow-1"
364
- }, /*#__PURE__*/React.createElement(Select, {
365
- className: classNames(['py-1', 'shadow-none', _defineProperty(_defineProperty(_defineProperty({}, disabled, disabled), 'is-invalid', errors !== null), inputClassName, inputClassName !== null)]),
366
- disabled: disabled,
367
- name: name,
368
- value: finalValue,
369
- options: options,
370
- isClearable: true,
371
- isSearchable: true,
372
- placeholder: utils.isMessage(placeholder) ? intl$1.formatMessage(placeholder) : /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
373
- id: "oc3YLT",
374
- defaultMessage: [{
375
- "type": 0,
376
- "value": "Choose an item"
377
- }]
378
- }),
379
- onChange: onValueChange,
380
- onInputChange: onInputChange
381
- // onFocus={onFocus}
382
- ,
383
- onMenuScrollToBottom: onScrollEnd,
384
- multiple: multiple
385
- })), canFind ? /*#__PURE__*/React.createElement("div", {
386
- className: "col-auto"
387
- }, /*#__PURE__*/React.createElement(Button, {
388
- theme: "primary",
389
- icon: findButtonLabel === null ? 'search' : null,
390
- onClick: listOpen ? onCloseList : onOpenList,
391
- outline: true
392
- }, findButtonLabel)) : null, canCreate ? /*#__PURE__*/React.createElement("div", {
393
- className: "col-auto"
394
- }, /*#__PURE__*/React.createElement(Button, {
395
- theme: "primary",
396
- icon: createButtonLabel === null ? 'plus-lg' : null,
397
- onClick: formOpen ? onCloseForm : onOpenForm,
398
- outline: true
399
- }, createButtonLabel)) : null), formOpen ? withoutModal ? /*#__PURE__*/React.createElement("div", {
400
- className: "card mt-4 p-4"
401
- }, form) : /*#__PURE__*/React.createElement(Dialog, {
402
- id: resourceId,
403
- title: hasValue && !multiple ? /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
404
- values: resourceValues,
405
- id: "mCfzkJ",
406
- defaultMessage: [{
407
- "type": 0,
408
- "value": "Edit "
409
- }, {
410
- "type": 1,
411
- "value": "a_singular"
412
- }]
413
- }) : /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
414
- values: resourceValues,
415
- id: "6viUpq",
416
- defaultMessage: [{
417
- "type": 0,
418
- "value": "Create "
419
- }, {
420
- "type": 1,
421
- "value": "a_singular"
422
- }]
423
- }),
424
- size: "lg",
425
- onClose: onCloseForm
426
- }, form) : null, listOpen ? /*#__PURE__*/React.createElement(ResourceItemsModal, {
427
- resource: resourceId,
428
- onClose: onCloseList,
429
- listProps: {
430
- actions: ['select'],
431
- actionsProps: {
432
- onClickSelect: onSelectListItem
433
- }
434
- }
435
- }) : null);
436
- };
437
- ResourceItemField.propTypes = propTypes;
438
- ResourceItemField.defaultProps = defaultProps;
439
- var ResourceItemField$1 = ResourceItemField;
440
-
441
- var definition = {
442
- id: 'resource-item',
443
- component: 'ResourceItem'
444
- };
445
-
446
- exports.default = ResourceItemField$1;
447
- exports.definition = definition;