@panneau/field-resource-item 2.0.67 → 2.0.69

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 +71 -22
  2. package/lib/index.js +72 -22
  3. package/package.json +10 -9
package/es/index.js CHANGED
@@ -14,6 +14,7 @@ import { usePanneauResource } from '@panneau/core/contexts';
14
14
  import { isMessage, getPathValue } from '@panneau/core/utils';
15
15
  import { useResourceItems } from '@panneau/data';
16
16
  import Button from '@panneau/element-button';
17
+ import ResourceCard from '@panneau/element-resource-card';
17
18
  import Select from '@panneau/element-select';
18
19
  import ResourceForm from '@panneau/form-resource';
19
20
  import { useResourceValues } from '@panneau/intl';
@@ -36,13 +37,14 @@ var propTypes = {
36
37
  searchParamName: PropTypes.string,
37
38
  getItemLabel: PropTypes.func,
38
39
  getItemDescription: PropTypes.func,
39
- // getItemImage: PropTypes.func,
40
+ getItemImage: PropTypes.func,
40
41
  itemLabelPath: PropTypes.string,
41
42
  itemDescriptionPath: PropTypes.string,
42
- // itemImagePath: PropTypes.string,
43
+ itemImagePath: PropTypes.string,
43
44
  itemLabelWithId: PropTypes.bool,
44
45
  placeholder: PropTypes.string,
45
46
  canCreate: PropTypes.bool,
47
+ createInPlace: PropTypes.bool,
46
48
  multiple: PropTypes.bool,
47
49
  disabled: PropTypes.bool,
48
50
  className: PropTypes.string,
@@ -61,13 +63,14 @@ var defaultProps = {
61
63
  searchParamName: 'search',
62
64
  getItemLabel: getPathValue,
63
65
  getItemDescription: getPathValue,
64
- // getItemImage: getPathValue,
66
+ getItemImage: getPathValue,
65
67
  itemLabelPath: 'label',
66
68
  itemDescriptionPath: null,
67
- // itemImagePath: 'image',
69
+ itemImagePath: 'image',
68
70
  itemLabelWithId: false,
69
71
  placeholder: null,
70
72
  canCreate: false,
73
+ createInPlace: false,
71
74
  multiple: false,
72
75
  disabled: false,
73
76
  className: null,
@@ -87,11 +90,14 @@ var ResourceItemField = function ResourceItemField(_ref) {
87
90
  searchParamName = _ref.searchParamName,
88
91
  initialGetItemLabel = _ref.getItemLabel,
89
92
  getItemDescription = _ref.getItemDescription,
93
+ getItemImage = _ref.getItemImage,
90
94
  itemLabelPath = _ref.itemLabelPath,
91
95
  itemDescriptionPath = _ref.itemDescriptionPath,
96
+ itemImagePath = _ref.itemImagePath,
92
97
  itemLabelWithId = _ref.itemLabelWithId,
93
98
  placeholder = _ref.placeholder,
94
99
  canCreate = _ref.canCreate,
100
+ createInPlace = _ref.createInPlace,
95
101
  multiple = _ref.multiple,
96
102
  disabled = _ref.disabled,
97
103
  className = _ref.className,
@@ -135,19 +141,20 @@ var ResourceItemField = function ResourceItemField(_ref) {
135
141
  };
136
142
  }, [resourceId]);
137
143
  var finalQuery = useMemo(function () {
138
- return _objectSpread(_objectSpread({}, query), !isEmpty(inputTextValue) ? _defineProperty({}, searchParamName, inputTextValue) : null);
144
+ return _objectSpread(_objectSpread(_objectSpread({}, query), !isEmpty(inputTextValue) ? _defineProperty({}, searchParamName, inputTextValue) : null), {}, {
145
+ paginated: false // TODO: implement this...
146
+ });
139
147
  }, [inputTextValue]);
148
+
149
+ // console.log('resource', resourceId, resource);
150
+
140
151
  var resourceItems = useResourceItems(queryResource, finalQuery, page, count, resourceOptions);
141
152
  var _ref3 = resourceItems || {},
142
- _ref3$data = _ref3.data,
143
- responseItems = _ref3$data === void 0 ? null : _ref3$data;
144
- var _ref4 = value || {},
145
- _ref4$id = _ref4.id,
146
- valueId = _ref4$id === void 0 ? null : _ref4$id;
147
- var filteredItems = responseItems !== null && valueId !== null ? responseItems.filter(function (it) {
148
- return it !== null && it.id ? it.id !== valueId : true;
149
- }) : responseItems || [];
150
- var items = [].concat(_toConsumableArray(filteredItems), _toConsumableArray(value !== null ? value : []));
153
+ _ref3$items = _ref3.items,
154
+ partialItems = _ref3$items === void 0 ? null : _ref3$items;
155
+ var items = (partialItems || []).concat(multiple && isArray(value) ? value : [value]).filter(function (it) {
156
+ return it !== null;
157
+ });
151
158
  var getItemLabel = useCallback(function (it, path) {
152
159
  var id = get(it, 'id', null);
153
160
  if (itemLabelWithId) {
@@ -165,12 +172,29 @@ var ResourceItemField = function ResourceItemField(_ref) {
165
172
  label: finalLabel
166
173
  };
167
174
  }, [getItemLabel, getItemDescription, itemLabelPath, itemDescriptionPath]);
175
+ var partialValue = multiple && isArray(value) ? value.map(function (it) {
176
+ return parseItem(it);
177
+ }) : value || null;
178
+ var finalValue = multiple && isArray(partialValue) ? partialValue.map(function (_ref4) {
179
+ var _ref4$id = _ref4.id,
180
+ id = _ref4$id === void 0 ? null : _ref4$id;
181
+ return id;
182
+ }) : (value === null || value === void 0 ? void 0 : value.id) || null;
168
183
  var options = (items || []).map(function (it) {
169
184
  return parseItem(it);
170
185
  });
171
- var finalValue = multiple && isArray(value) ? value.map(function (it) {
172
- return parseItem(it);
173
- }) : value;
186
+
187
+ // TODO: filter duplicate IDs blabla
188
+ // const { id: valueId = null } = value || {};
189
+ // const filteredItems =
190
+ // responseItems !== null && valueId !== null
191
+ // ? responseItems.filter((it) => (it !== null && it.id ? it.id !== valueId : true))
192
+ // : responseItems || [];
193
+ // const arrayedValue = multiple ? value : [value];
194
+ // const items = [...filteredItems, ...(value !== null ? arrayedValue : [])];
195
+ // console.log(options, items, value, finalValue, onChange);
196
+ // console.log('ultimate', options, finalValue);
197
+
174
198
  var onInputChange = useCallback(function (textValue) {
175
199
  setInputTextValue(textValue);
176
200
  }, []);
@@ -203,13 +227,33 @@ var ResourceItemField = function ResourceItemField(_ref) {
203
227
  setCreateOpen(false);
204
228
  }, [setCreateOpen]);
205
229
  var onCreateSuccess = useCallback(function (newValue) {
206
- onChange(newValue);
230
+ if (onChange === null) return;
231
+ if (multiple) {
232
+ onChange(value !== null && isArray(value) ? [].concat(_toConsumableArray(value), [newValue]) : [newValue]);
233
+ } else {
234
+ onChange(newValue);
235
+ }
207
236
  setCreateOpen(false);
208
- // setInputTextValue('');
237
+ }, [onChange, multiple, value, setCreateOpen]);
238
+ var onClickRemove = useCallback(function () {
239
+ if (onChange !== null) {
240
+ onChange(null);
241
+ }
209
242
  }, [onChange]);
210
243
  return /*#__PURE__*/React.createElement("div", {
211
244
  className: classNames(['position-relative', _defineProperty({}, className, className != null)])
212
- }, /*#__PURE__*/React.createElement("div", {
245
+ }, value !== null && !multiple ? /*#__PURE__*/React.createElement(ResourceCard, {
246
+ item: value,
247
+ getItemLabel: initialGetItemLabel,
248
+ getItemDescription: getItemDescription,
249
+ getItemImage: getItemImage,
250
+ itemLabelPath: itemLabelPath,
251
+ itemDescriptionPath: itemDescriptionPath,
252
+ itemImagePath: itemImagePath,
253
+ itemLabelWithId: itemLabelWithId,
254
+ disable: disabled,
255
+ onClickRemove: onClickRemove
256
+ }) : /*#__PURE__*/React.createElement("div", {
213
257
  className: classNames(['row', 'align-items-center'])
214
258
  }, /*#__PURE__*/React.createElement("div", {
215
259
  className: "col-auto flex-grow-1"
@@ -236,8 +280,12 @@ var ResourceItemField = function ResourceItemField(_ref) {
236
280
  }, /*#__PURE__*/React.createElement(Button, {
237
281
  theme: "primary",
238
282
  icon: "plus-lg",
239
- onClick: createOpen ? onCloseCreate : onOpenCreate
240
- })) : null, createOpen ? /*#__PURE__*/React.createElement(Dialog, {
283
+ onClick: createOpen ? onCloseCreate : onOpenCreate,
284
+ outline: true
285
+ })) : null, createOpen ? createInPlace ? /*#__PURE__*/React.createElement(ResourceForm, {
286
+ resource: resource,
287
+ onSuccess: onCreateSuccess
288
+ }) : /*#__PURE__*/React.createElement(Dialog, {
241
289
  title: /*#__PURE__*/React.createElement(FormattedMessage, {
242
290
  values: resourceValues,
243
291
  id: "6viUpq",
@@ -249,6 +297,7 @@ var ResourceItemField = function ResourceItemField(_ref) {
249
297
  "value": "a_singular"
250
298
  }]
251
299
  }),
300
+ size: "lg",
252
301
  onClickClose: onCloseCreate
253
302
  }, /*#__PURE__*/React.createElement(ResourceForm, {
254
303
  resource: resource,
package/lib/index.js CHANGED
@@ -18,6 +18,7 @@ var contexts = require('@panneau/core/contexts');
18
18
  var utils = require('@panneau/core/utils');
19
19
  var data = require('@panneau/data');
20
20
  var Button = require('@panneau/element-button');
21
+ var ResourceCard = require('@panneau/element-resource-card');
21
22
  var Select = require('@panneau/element-select');
22
23
  var ResourceForm = require('@panneau/form-resource');
23
24
  var intl = require('@panneau/intl');
@@ -36,6 +37,7 @@ var isEmpty__default = /*#__PURE__*/_interopDefaultLegacy(isEmpty);
36
37
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
37
38
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
38
39
  var Button__default = /*#__PURE__*/_interopDefaultLegacy(Button);
40
+ var ResourceCard__default = /*#__PURE__*/_interopDefaultLegacy(ResourceCard);
39
41
  var Select__default = /*#__PURE__*/_interopDefaultLegacy(Select);
40
42
  var ResourceForm__default = /*#__PURE__*/_interopDefaultLegacy(ResourceForm);
41
43
  var Dialog__default = /*#__PURE__*/_interopDefaultLegacy(Dialog);
@@ -57,13 +59,14 @@ var propTypes = {
57
59
  searchParamName: PropTypes__default["default"].string,
58
60
  getItemLabel: PropTypes__default["default"].func,
59
61
  getItemDescription: PropTypes__default["default"].func,
60
- // getItemImage: PropTypes.func,
62
+ getItemImage: PropTypes__default["default"].func,
61
63
  itemLabelPath: PropTypes__default["default"].string,
62
64
  itemDescriptionPath: PropTypes__default["default"].string,
63
- // itemImagePath: PropTypes.string,
65
+ itemImagePath: PropTypes__default["default"].string,
64
66
  itemLabelWithId: PropTypes__default["default"].bool,
65
67
  placeholder: PropTypes__default["default"].string,
66
68
  canCreate: PropTypes__default["default"].bool,
69
+ createInPlace: PropTypes__default["default"].bool,
67
70
  multiple: PropTypes__default["default"].bool,
68
71
  disabled: PropTypes__default["default"].bool,
69
72
  className: PropTypes__default["default"].string,
@@ -82,13 +85,14 @@ var defaultProps = {
82
85
  searchParamName: 'search',
83
86
  getItemLabel: utils.getPathValue,
84
87
  getItemDescription: utils.getPathValue,
85
- // getItemImage: getPathValue,
88
+ getItemImage: utils.getPathValue,
86
89
  itemLabelPath: 'label',
87
90
  itemDescriptionPath: null,
88
- // itemImagePath: 'image',
91
+ itemImagePath: 'image',
89
92
  itemLabelWithId: false,
90
93
  placeholder: null,
91
94
  canCreate: false,
95
+ createInPlace: false,
92
96
  multiple: false,
93
97
  disabled: false,
94
98
  className: null,
@@ -108,11 +112,14 @@ var ResourceItemField = function ResourceItemField(_ref) {
108
112
  searchParamName = _ref.searchParamName,
109
113
  initialGetItemLabel = _ref.getItemLabel,
110
114
  getItemDescription = _ref.getItemDescription,
115
+ getItemImage = _ref.getItemImage,
111
116
  itemLabelPath = _ref.itemLabelPath,
112
117
  itemDescriptionPath = _ref.itemDescriptionPath,
118
+ itemImagePath = _ref.itemImagePath,
113
119
  itemLabelWithId = _ref.itemLabelWithId,
114
120
  placeholder = _ref.placeholder,
115
121
  canCreate = _ref.canCreate,
122
+ createInPlace = _ref.createInPlace,
116
123
  multiple = _ref.multiple,
117
124
  disabled = _ref.disabled,
118
125
  className = _ref.className,
@@ -156,19 +163,20 @@ var ResourceItemField = function ResourceItemField(_ref) {
156
163
  };
157
164
  }, [resourceId]);
158
165
  var finalQuery = React.useMemo(function () {
159
- return _objectSpread__default["default"](_objectSpread__default["default"]({}, query), !isEmpty__default["default"](inputTextValue) ? _defineProperty__default["default"]({}, searchParamName, inputTextValue) : null);
166
+ return _objectSpread__default["default"](_objectSpread__default["default"](_objectSpread__default["default"]({}, query), !isEmpty__default["default"](inputTextValue) ? _defineProperty__default["default"]({}, searchParamName, inputTextValue) : null), {}, {
167
+ paginated: false // TODO: implement this...
168
+ });
160
169
  }, [inputTextValue]);
170
+
171
+ // console.log('resource', resourceId, resource);
172
+
161
173
  var resourceItems = data.useResourceItems(queryResource, finalQuery, page, count, resourceOptions);
162
174
  var _ref3 = resourceItems || {},
163
- _ref3$data = _ref3.data,
164
- responseItems = _ref3$data === void 0 ? null : _ref3$data;
165
- var _ref4 = value || {},
166
- _ref4$id = _ref4.id,
167
- valueId = _ref4$id === void 0 ? null : _ref4$id;
168
- var filteredItems = responseItems !== null && valueId !== null ? responseItems.filter(function (it) {
169
- return it !== null && it.id ? it.id !== valueId : true;
170
- }) : responseItems || [];
171
- var items = [].concat(_toConsumableArray__default["default"](filteredItems), _toConsumableArray__default["default"](value !== null ? value : []));
175
+ _ref3$items = _ref3.items,
176
+ partialItems = _ref3$items === void 0 ? null : _ref3$items;
177
+ var items = (partialItems || []).concat(multiple && isArray__default["default"](value) ? value : [value]).filter(function (it) {
178
+ return it !== null;
179
+ });
172
180
  var getItemLabel = React.useCallback(function (it, path) {
173
181
  var id = get__default["default"](it, 'id', null);
174
182
  if (itemLabelWithId) {
@@ -186,12 +194,29 @@ var ResourceItemField = function ResourceItemField(_ref) {
186
194
  label: finalLabel
187
195
  };
188
196
  }, [getItemLabel, getItemDescription, itemLabelPath, itemDescriptionPath]);
197
+ var partialValue = multiple && isArray__default["default"](value) ? value.map(function (it) {
198
+ return parseItem(it);
199
+ }) : value || null;
200
+ var finalValue = multiple && isArray__default["default"](partialValue) ? partialValue.map(function (_ref4) {
201
+ var _ref4$id = _ref4.id,
202
+ id = _ref4$id === void 0 ? null : _ref4$id;
203
+ return id;
204
+ }) : (value === null || value === void 0 ? void 0 : value.id) || null;
189
205
  var options = (items || []).map(function (it) {
190
206
  return parseItem(it);
191
207
  });
192
- var finalValue = multiple && isArray__default["default"](value) ? value.map(function (it) {
193
- return parseItem(it);
194
- }) : value;
208
+
209
+ // TODO: filter duplicate IDs blabla
210
+ // const { id: valueId = null } = value || {};
211
+ // const filteredItems =
212
+ // responseItems !== null && valueId !== null
213
+ // ? responseItems.filter((it) => (it !== null && it.id ? it.id !== valueId : true))
214
+ // : responseItems || [];
215
+ // const arrayedValue = multiple ? value : [value];
216
+ // const items = [...filteredItems, ...(value !== null ? arrayedValue : [])];
217
+ // console.log(options, items, value, finalValue, onChange);
218
+ // console.log('ultimate', options, finalValue);
219
+
195
220
  var onInputChange = React.useCallback(function (textValue) {
196
221
  setInputTextValue(textValue);
197
222
  }, []);
@@ -224,13 +249,33 @@ var ResourceItemField = function ResourceItemField(_ref) {
224
249
  setCreateOpen(false);
225
250
  }, [setCreateOpen]);
226
251
  var onCreateSuccess = React.useCallback(function (newValue) {
227
- onChange(newValue);
252
+ if (onChange === null) return;
253
+ if (multiple) {
254
+ onChange(value !== null && isArray__default["default"](value) ? [].concat(_toConsumableArray__default["default"](value), [newValue]) : [newValue]);
255
+ } else {
256
+ onChange(newValue);
257
+ }
228
258
  setCreateOpen(false);
229
- // setInputTextValue('');
259
+ }, [onChange, multiple, value, setCreateOpen]);
260
+ var onClickRemove = React.useCallback(function () {
261
+ if (onChange !== null) {
262
+ onChange(null);
263
+ }
230
264
  }, [onChange]);
231
265
  return /*#__PURE__*/React__default["default"].createElement("div", {
232
266
  className: classNames__default["default"](['position-relative', _defineProperty__default["default"]({}, className, className != null)])
233
- }, /*#__PURE__*/React__default["default"].createElement("div", {
267
+ }, value !== null && !multiple ? /*#__PURE__*/React__default["default"].createElement(ResourceCard__default["default"], {
268
+ item: value,
269
+ getItemLabel: initialGetItemLabel,
270
+ getItemDescription: getItemDescription,
271
+ getItemImage: getItemImage,
272
+ itemLabelPath: itemLabelPath,
273
+ itemDescriptionPath: itemDescriptionPath,
274
+ itemImagePath: itemImagePath,
275
+ itemLabelWithId: itemLabelWithId,
276
+ disable: disabled,
277
+ onClickRemove: onClickRemove
278
+ }) : /*#__PURE__*/React__default["default"].createElement("div", {
234
279
  className: classNames__default["default"](['row', 'align-items-center'])
235
280
  }, /*#__PURE__*/React__default["default"].createElement("div", {
236
281
  className: "col-auto flex-grow-1"
@@ -257,8 +302,12 @@ var ResourceItemField = function ResourceItemField(_ref) {
257
302
  }, /*#__PURE__*/React__default["default"].createElement(Button__default["default"], {
258
303
  theme: "primary",
259
304
  icon: "plus-lg",
260
- onClick: createOpen ? onCloseCreate : onOpenCreate
261
- })) : null, createOpen ? /*#__PURE__*/React__default["default"].createElement(Dialog__default["default"], {
305
+ onClick: createOpen ? onCloseCreate : onOpenCreate,
306
+ outline: true
307
+ })) : null, createOpen ? createInPlace ? /*#__PURE__*/React__default["default"].createElement(ResourceForm__default["default"], {
308
+ resource: resource,
309
+ onSuccess: onCreateSuccess
310
+ }) : /*#__PURE__*/React__default["default"].createElement(Dialog__default["default"], {
262
311
  title: /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
263
312
  values: resourceValues,
264
313
  id: "6viUpq",
@@ -270,6 +319,7 @@ var ResourceItemField = function ResourceItemField(_ref) {
270
319
  "value": "a_singular"
271
320
  }]
272
321
  }),
322
+ size: "lg",
273
323
  onClickClose: onCloseCreate
274
324
  }, /*#__PURE__*/React__default["default"].createElement(ResourceForm__default["default"], {
275
325
  resource: resource,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panneau/field-resource-item",
3
- "version": "2.0.67",
3
+ "version": "2.0.69",
4
4
  "description": "An item mapping a resource",
5
5
  "keywords": [
6
6
  "javascript"
@@ -45,13 +45,14 @@
45
45
  },
46
46
  "dependencies": {
47
47
  "@babel/runtime": "^7.12.5",
48
- "@panneau/core": "^2.0.58",
49
- "@panneau/data": "^2.0.58",
50
- "@panneau/element-button": "^2.0.59",
51
- "@panneau/element-select": "^2.0.58",
52
- "@panneau/form-resource": "^2.0.58",
53
- "@panneau/intl": "^2.0.58",
54
- "@panneau/modal-dialog": "^2.0.67",
48
+ "@panneau/core": "^2.0.69",
49
+ "@panneau/data": "^2.0.69",
50
+ "@panneau/element-button": "^2.0.69",
51
+ "@panneau/element-resource-card": "^2.0.69",
52
+ "@panneau/element-select": "^2.0.69",
53
+ "@panneau/form-resource": "^2.0.69",
54
+ "@panneau/intl": "^2.0.69",
55
+ "@panneau/modal-dialog": "^2.0.69",
55
56
  "classnames": "^2.2.6",
56
57
  "lodash": "^4.17.21",
57
58
  "prop-types": "^15.7.2",
@@ -60,5 +61,5 @@
60
61
  "publishConfig": {
61
62
  "access": "public"
62
63
  },
63
- "gitHead": "ac972a8e66c405de1c4d4606d347f3a3f1e839e8"
64
+ "gitHead": "270c1e84966861e94a390d20ee525c33f7edadb0"
64
65
  }