@panneau/field-resource-item 2.0.77 → 2.0.80

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