@panneau/field-resource-item 2.0.72 → 2.0.75
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/index.js +152 -90
- package/lib/index.js +151 -89
- package/package.json +10 -10
package/es/index.js
CHANGED
@@ -7,7 +7,7 @@ import get from 'lodash/get';
|
|
7
7
|
import isArray from 'lodash/isArray';
|
8
8
|
import isEmpty from 'lodash/isEmpty';
|
9
9
|
import PropTypes from 'prop-types';
|
10
|
-
import React, { useState,
|
10
|
+
import React, { useState, useCallback, useMemo } from 'react';
|
11
11
|
import { useIntl, FormattedMessage } from 'react-intl';
|
12
12
|
import { PropTypes as PropTypes$1 } from '@panneau/core';
|
13
13
|
import { usePanneauResource } from '@panneau/core/contexts';
|
@@ -27,6 +27,7 @@ var propTypes = {
|
|
27
27
|
errors: PropTypes$1.formErrors,
|
28
28
|
resource: PropTypes.string,
|
29
29
|
resourceType: PropTypes.string,
|
30
|
+
paginated: PropTypes.bool,
|
30
31
|
query: PropTypes.object,
|
31
32
|
// eslint-disable-line react/forbid-prop-types
|
32
33
|
page: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
@@ -45,8 +46,10 @@ var propTypes = {
|
|
45
46
|
itemLabelWithId: PropTypes.bool,
|
46
47
|
placeholder: PropTypes.string,
|
47
48
|
canCreate: PropTypes.bool,
|
48
|
-
|
49
|
-
|
49
|
+
canEdit: PropTypes.bool,
|
50
|
+
withoutModal: PropTypes.bool,
|
51
|
+
createButtonLabel: PropTypes$1.string,
|
52
|
+
editButtonLabel: PropTypes$1.message,
|
50
53
|
multiple: PropTypes.bool,
|
51
54
|
disabled: PropTypes.bool,
|
52
55
|
className: PropTypes.string,
|
@@ -59,6 +62,7 @@ var defaultProps = {
|
|
59
62
|
errors: null,
|
60
63
|
resource: null,
|
61
64
|
resourceType: null,
|
65
|
+
paginated: true,
|
62
66
|
query: null,
|
63
67
|
page: null,
|
64
68
|
count: null,
|
@@ -73,8 +77,10 @@ var defaultProps = {
|
|
73
77
|
itemLabelWithId: false,
|
74
78
|
placeholder: null,
|
75
79
|
canCreate: false,
|
76
|
-
|
80
|
+
canEdit: false,
|
81
|
+
withoutModal: false,
|
77
82
|
createButtonLabel: null,
|
83
|
+
editButtonLabel: null,
|
78
84
|
multiple: false,
|
79
85
|
disabled: false,
|
80
86
|
className: null,
|
@@ -82,12 +88,13 @@ var defaultProps = {
|
|
82
88
|
onChange: null
|
83
89
|
};
|
84
90
|
var ResourceItemField = function ResourceItemField(_ref) {
|
85
|
-
var
|
91
|
+
var _ref9;
|
86
92
|
var name = _ref.name,
|
87
93
|
value = _ref.value,
|
88
94
|
errors = _ref.errors,
|
89
95
|
resourceId = _ref.resource,
|
90
96
|
resourceType = _ref.resourceType,
|
97
|
+
paginated = _ref.paginated,
|
91
98
|
initialQuery = _ref.query,
|
92
99
|
initialPage = _ref.page,
|
93
100
|
initialCount = _ref.count,
|
@@ -102,45 +109,53 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
102
109
|
itemLabelWithId = _ref.itemLabelWithId,
|
103
110
|
placeholder = _ref.placeholder,
|
104
111
|
canCreate = _ref.canCreate,
|
105
|
-
|
112
|
+
canEdit = _ref.canEdit,
|
113
|
+
withoutModal = _ref.withoutModal,
|
106
114
|
createButtonLabel = _ref.createButtonLabel,
|
115
|
+
editButtonLabel = _ref.editButtonLabel,
|
107
116
|
multiple = _ref.multiple,
|
108
117
|
disabled = _ref.disabled,
|
109
118
|
className = _ref.className,
|
110
119
|
inputClassName = _ref.inputClassName,
|
111
120
|
onChange = _ref.onChange;
|
112
121
|
var intl = useIntl();
|
122
|
+
var resource = usePanneauResource(resourceId);
|
123
|
+
var resourceValues = useResourceValues(resource);
|
124
|
+
var defaultPage = initialPage || (paginated ? 1 : null);
|
125
|
+
var defaultCount = initialCount || (paginated ? 10 : null);
|
113
126
|
// const [initialValue] = useState(value);
|
114
|
-
|
127
|
+
|
128
|
+
var _useState = useState(initialCount),
|
115
129
|
_useState2 = _slicedToArray(_useState, 2),
|
116
|
-
|
117
|
-
_useState2[1];
|
118
|
-
|
130
|
+
formOpen = _useState2[0],
|
131
|
+
setFormOpen = _useState2[1];
|
132
|
+
|
133
|
+
// The text input search query
|
134
|
+
var _useState3 = useState(''),
|
119
135
|
_useState4 = _slicedToArray(_useState3, 2),
|
120
|
-
|
121
|
-
_useState4[1];
|
122
|
-
var
|
136
|
+
inputTextValue = _useState4[0],
|
137
|
+
setInputTextValue = _useState4[1];
|
138
|
+
var onInputChange = useCallback(function (textValue) {
|
139
|
+
setInputTextValue(textValue);
|
140
|
+
}, []);
|
141
|
+
|
142
|
+
// TODO: list state controls?
|
143
|
+
var _useState5 = useState(initialQuery),
|
123
144
|
_useState6 = _slicedToArray(_useState5, 2),
|
124
|
-
|
145
|
+
query = _useState6[0];
|
125
146
|
_useState6[1];
|
126
|
-
var _useState7 = useState(
|
147
|
+
var _useState7 = useState(defaultPage),
|
127
148
|
_useState8 = _slicedToArray(_useState7, 2),
|
128
|
-
|
129
|
-
_useState8[1];
|
130
|
-
|
131
|
-
// The create option
|
132
|
-
var _useState9 = useState(initialCount),
|
149
|
+
page = _useState8[0],
|
150
|
+
setPage = _useState8[1];
|
151
|
+
var _useState9 = useState(defaultCount),
|
133
152
|
_useState10 = _slicedToArray(_useState9, 2),
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
// The search query
|
138
|
-
var _useState11 = useState(''),
|
153
|
+
count = _useState10[0];
|
154
|
+
_useState10[1];
|
155
|
+
var _useState11 = useState(initialOptions),
|
139
156
|
_useState12 = _slicedToArray(_useState11, 2),
|
140
|
-
|
141
|
-
|
142
|
-
var resource = usePanneauResource(resourceId);
|
143
|
-
var resourceValues = useResourceValues(resource);
|
157
|
+
resourceOptions = _useState12[0];
|
158
|
+
_useState12[1];
|
144
159
|
var queryResource = useMemo(function () {
|
145
160
|
return {
|
146
161
|
id: resourceId
|
@@ -148,19 +163,36 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
148
163
|
}, [resourceId]);
|
149
164
|
var finalQuery = useMemo(function () {
|
150
165
|
return _objectSpread(_objectSpread(_objectSpread({}, query), !isEmpty(inputTextValue) ? _defineProperty({}, searchParamName, inputTextValue) : null), {}, {
|
151
|
-
paginated:
|
166
|
+
paginated: paginated
|
152
167
|
});
|
153
|
-
}, [inputTextValue]);
|
154
|
-
|
155
|
-
// console.log('resource', resourceId, resource);
|
156
|
-
|
157
|
-
var resourceItems = useResourceItems(queryResource, finalQuery, page, count, resourceOptions);
|
168
|
+
}, [inputTextValue, paginated]);
|
169
|
+
var resourceItems = useResourceItems(queryResource, finalQuery, paginated ? page : null, paginated ? count : null, resourceOptions);
|
158
170
|
var _ref3 = resourceItems || {},
|
159
|
-
_ref3$
|
160
|
-
partialItems = _ref3$
|
171
|
+
_ref3$allItems = _ref3.allItems,
|
172
|
+
partialItems = _ref3$allItems === void 0 ? null : _ref3$allItems,
|
173
|
+
_ref3$reload = _ref3.reload,
|
174
|
+
reload = _ref3$reload === void 0 ? null : _ref3$reload,
|
175
|
+
_ref3$reloadPage = _ref3.reloadPage,
|
176
|
+
reloadPage = _ref3$reloadPage === void 0 ? null : _ref3$reloadPage,
|
177
|
+
_ref3$reset = _ref3.reset,
|
178
|
+
reset = _ref3$reset === void 0 ? null : _ref3$reset,
|
179
|
+
_ref3$lastPage = _ref3.lastPage,
|
180
|
+
lastPage = _ref3$lastPage === void 0 ? null : _ref3$lastPage;
|
161
181
|
var items = (partialItems || []).concat(multiple && isArray(value) ? value : [value]).filter(function (it) {
|
162
182
|
return it !== null;
|
183
|
+
}).filter(function (v, i, a) {
|
184
|
+
return a.findIndex(function (v2) {
|
185
|
+
return v2.id === v.id;
|
186
|
+
}) === i;
|
163
187
|
});
|
188
|
+
var onScrollEnd = useCallback(function () {
|
189
|
+
if (page !== null && page >= lastPage) {
|
190
|
+
return;
|
191
|
+
}
|
192
|
+
if (paginated) {
|
193
|
+
setPage(page + 1);
|
194
|
+
}
|
195
|
+
}, [paginated, page, setPage, lastPage]);
|
164
196
|
var getItemLabel = useCallback(function (it, path) {
|
165
197
|
var id = get(it, 'id', null);
|
166
198
|
if (itemLabelWithId) {
|
@@ -178,45 +210,32 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
178
210
|
label: finalLabel
|
179
211
|
};
|
180
212
|
}, [getItemLabel, getItemDescription, itemLabelPath, itemDescriptionPath]);
|
181
|
-
var
|
182
|
-
return parseItem(it);
|
183
|
-
}) : value || null;
|
184
|
-
var finalValue = multiple && isArray(partialValue) ? partialValue.map(function (_ref4) {
|
213
|
+
var finalValue = multiple && isArray(value) ? value.map(function (_ref4) {
|
185
214
|
var _ref4$id = _ref4.id,
|
186
215
|
id = _ref4$id === void 0 ? null : _ref4$id;
|
187
216
|
return id;
|
188
217
|
}) : (value === null || value === void 0 ? void 0 : value.id) || null;
|
218
|
+
var _ref5 = !multiple && value !== null ? value : {
|
219
|
+
type: resourceType
|
220
|
+
},
|
221
|
+
_ref5$type = _ref5.type,
|
222
|
+
finalType = _ref5$type === void 0 ? null : _ref5$type;
|
189
223
|
var options = (items || []).map(function (it) {
|
190
224
|
return parseItem(it);
|
191
225
|
});
|
192
|
-
|
193
|
-
// TODO: filter duplicate IDs blabla
|
194
|
-
// const { id: valueId = null } = value || {};
|
195
|
-
// const filteredItems =
|
196
|
-
// responseItems !== null && valueId !== null
|
197
|
-
// ? responseItems.filter((it) => (it !== null && it.id ? it.id !== valueId : true))
|
198
|
-
// : responseItems || [];
|
199
|
-
// const arrayedValue = multiple ? value : [value];
|
200
|
-
// const items = [...filteredItems, ...(value !== null ? arrayedValue : [])];
|
201
|
-
// console.log(options, items, value, finalValue, onChange);
|
202
|
-
// console.log('ultimate', options, finalValue);
|
203
|
-
|
204
|
-
var onInputChange = useCallback(function (textValue) {
|
205
|
-
setInputTextValue(textValue);
|
206
|
-
}, []);
|
207
226
|
var onValueChange = useCallback(function (newId) {
|
208
227
|
if (onChange === null) return;
|
209
228
|
if (multiple) {
|
210
|
-
var newValue = items.filter(function (
|
211
|
-
var
|
212
|
-
id =
|
229
|
+
var newValue = items.filter(function (_ref6) {
|
230
|
+
var _ref6$id = _ref6.id,
|
231
|
+
id = _ref6$id === void 0 ? null : _ref6$id;
|
213
232
|
return newId.indexOf(id) !== -1;
|
214
233
|
}) || [];
|
215
234
|
onChange(newValue);
|
216
235
|
} else {
|
217
|
-
var _newValue = items.filter(function (
|
218
|
-
var
|
219
|
-
id =
|
236
|
+
var _newValue = items.filter(function (_ref7) {
|
237
|
+
var _ref7$id = _ref7.id,
|
238
|
+
id = _ref7$id === void 0 ? null : _ref7$id;
|
220
239
|
return id === newId;
|
221
240
|
}) || [];
|
222
241
|
if (_newValue !== null && _newValue.length > 0) {
|
@@ -226,13 +245,13 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
226
245
|
}
|
227
246
|
}
|
228
247
|
}, [items, onChange, multiple]);
|
229
|
-
var
|
230
|
-
|
231
|
-
}, [
|
232
|
-
var
|
233
|
-
|
234
|
-
}, [
|
235
|
-
var
|
248
|
+
var onOpenForm = useCallback(function () {
|
249
|
+
setFormOpen(true);
|
250
|
+
}, [setFormOpen]);
|
251
|
+
var onCloseForm = useCallback(function () {
|
252
|
+
setFormOpen(false);
|
253
|
+
}, [setFormOpen]);
|
254
|
+
var onFormSuccess = useCallback(function (newValue) {
|
236
255
|
if (onChange === null) return;
|
237
256
|
var finalNewValue = resourceType !== null ? _objectSpread({
|
238
257
|
type: resourceType
|
@@ -242,16 +261,45 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
242
261
|
} else {
|
243
262
|
onChange(finalNewValue);
|
244
263
|
}
|
245
|
-
|
246
|
-
}, [onChange, multiple, value,
|
264
|
+
setFormOpen(false);
|
265
|
+
}, [onChange, multiple, value, setFormOpen, resourceType, paginated, initialPage]);
|
266
|
+
|
267
|
+
// If empty try to fetch
|
268
|
+
var onFocus = useCallback(function () {
|
269
|
+
if ((partialItems || []).length === 0) {
|
270
|
+
if (paginated) {
|
271
|
+
reloadPage();
|
272
|
+
} else {
|
273
|
+
reload();
|
274
|
+
}
|
275
|
+
}
|
276
|
+
}, [paginated, partialItems]);
|
247
277
|
var onClickRemove = useCallback(function () {
|
248
278
|
if (onChange !== null) {
|
249
279
|
onChange(null);
|
250
280
|
}
|
251
|
-
|
281
|
+
// Clear the page and be good
|
282
|
+
if (paginated) {
|
283
|
+
setPage(defaultPage);
|
284
|
+
reset();
|
285
|
+
} else {
|
286
|
+
reset();
|
287
|
+
}
|
288
|
+
}, [onChange, paginated, defaultPage, reload, reloadPage, reset]);
|
289
|
+
var form = formOpen ? /*#__PURE__*/React.createElement(ResourceForm, {
|
290
|
+
resource: resource,
|
291
|
+
type: finalType,
|
292
|
+
item: !multiple ? value : null,
|
293
|
+
onSuccess: onFormSuccess
|
294
|
+
}) : null;
|
252
295
|
return /*#__PURE__*/React.createElement("div", {
|
253
296
|
className: classNames(['position-relative', _defineProperty({}, className, className != null)])
|
254
|
-
}, value !== null && !multiple ? /*#__PURE__*/React.createElement(
|
297
|
+
}, value !== null && !multiple ? /*#__PURE__*/React.createElement("div", {
|
298
|
+
className: "row"
|
299
|
+
}, /*#__PURE__*/React.createElement("div", {
|
300
|
+
className: "col-10 flex-grow-1"
|
301
|
+
}, /*#__PURE__*/React.createElement(ResourceCard, {
|
302
|
+
className: "flex-grow-1",
|
255
303
|
item: value,
|
256
304
|
getItemLabel: initialGetItemLabel,
|
257
305
|
getItemDescription: getItemDescription,
|
@@ -262,12 +310,20 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
262
310
|
itemLabelWithId: itemLabelWithId,
|
263
311
|
disable: disabled,
|
264
312
|
onClickRemove: onClickRemove
|
265
|
-
})
|
266
|
-
className:
|
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", {
|
322
|
+
className: "row align-items-center"
|
267
323
|
}, /*#__PURE__*/React.createElement("div", {
|
268
|
-
className: "col-
|
324
|
+
className: "col-10 flex-grow-1"
|
269
325
|
}, /*#__PURE__*/React.createElement(Select, {
|
270
|
-
className: classNames(['py-1', 'shadow-none', (
|
326
|
+
className: classNames(['py-1', 'shadow-none', (_ref9 = {}, _defineProperty(_ref9, disabled, disabled), _defineProperty(_ref9, 'is-invalid', errors !== null), _defineProperty(_ref9, inputClassName, inputClassName !== null), _ref9)]),
|
271
327
|
disabled: disabled,
|
272
328
|
name: name,
|
273
329
|
value: finalValue,
|
@@ -283,20 +339,30 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
283
339
|
}),
|
284
340
|
onChange: onValueChange,
|
285
341
|
onInputChange: onInputChange,
|
342
|
+
onFocus: onFocus,
|
343
|
+
onMenuScrollToBottom: onScrollEnd,
|
286
344
|
multiple: multiple
|
287
345
|
})), canCreate ? /*#__PURE__*/React.createElement("div", {
|
288
346
|
className: "col-auto"
|
289
347
|
}, /*#__PURE__*/React.createElement(Button, {
|
290
348
|
theme: "primary",
|
291
349
|
icon: createButtonLabel === null ? 'plus-lg' : null,
|
292
|
-
onClick:
|
350
|
+
onClick: formOpen ? onCloseForm : onOpenForm,
|
293
351
|
outline: true
|
294
|
-
}, createButtonLabel)) : null,
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
352
|
+
}, createButtonLabel)) : null), formOpen ? withoutModal ? /*#__PURE__*/React.createElement("div", {
|
353
|
+
className: "card mt-4 p-4"
|
354
|
+
}, form) : /*#__PURE__*/React.createElement(Dialog, {
|
355
|
+
title: !multiple && value !== null ? /*#__PURE__*/React.createElement(FormattedMessage, {
|
356
|
+
values: resourceValues,
|
357
|
+
id: "mCfzkJ",
|
358
|
+
defaultMessage: [{
|
359
|
+
"type": 0,
|
360
|
+
"value": "Edit "
|
361
|
+
}, {
|
362
|
+
"type": 1,
|
363
|
+
"value": "a_singular"
|
364
|
+
}]
|
365
|
+
}) : /*#__PURE__*/React.createElement(FormattedMessage, {
|
300
366
|
values: resourceValues,
|
301
367
|
id: "6viUpq",
|
302
368
|
defaultMessage: [{
|
@@ -308,12 +374,8 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
308
374
|
}]
|
309
375
|
}),
|
310
376
|
size: "lg",
|
311
|
-
onClickClose:
|
312
|
-
},
|
313
|
-
resource: resource,
|
314
|
-
type: resourceType,
|
315
|
-
onSuccess: onCreateSuccess
|
316
|
-
})) : null));
|
377
|
+
onClickClose: onCloseForm
|
378
|
+
}, form) : null);
|
317
379
|
};
|
318
380
|
ResourceItemField.propTypes = propTypes;
|
319
381
|
ResourceItemField.defaultProps = defaultProps;
|
package/lib/index.js
CHANGED
@@ -49,6 +49,7 @@ var propTypes = {
|
|
49
49
|
errors: core.PropTypes.formErrors,
|
50
50
|
resource: PropTypes__default["default"].string,
|
51
51
|
resourceType: PropTypes__default["default"].string,
|
52
|
+
paginated: PropTypes__default["default"].bool,
|
52
53
|
query: PropTypes__default["default"].object,
|
53
54
|
// eslint-disable-line react/forbid-prop-types
|
54
55
|
page: PropTypes__default["default"].oneOfType([PropTypes__default["default"].number, PropTypes__default["default"].string]),
|
@@ -67,8 +68,10 @@ var propTypes = {
|
|
67
68
|
itemLabelWithId: PropTypes__default["default"].bool,
|
68
69
|
placeholder: PropTypes__default["default"].string,
|
69
70
|
canCreate: PropTypes__default["default"].bool,
|
70
|
-
|
71
|
-
|
71
|
+
canEdit: PropTypes__default["default"].bool,
|
72
|
+
withoutModal: PropTypes__default["default"].bool,
|
73
|
+
createButtonLabel: core.PropTypes.string,
|
74
|
+
editButtonLabel: core.PropTypes.message,
|
72
75
|
multiple: PropTypes__default["default"].bool,
|
73
76
|
disabled: PropTypes__default["default"].bool,
|
74
77
|
className: PropTypes__default["default"].string,
|
@@ -81,6 +84,7 @@ var defaultProps = {
|
|
81
84
|
errors: null,
|
82
85
|
resource: null,
|
83
86
|
resourceType: null,
|
87
|
+
paginated: true,
|
84
88
|
query: null,
|
85
89
|
page: null,
|
86
90
|
count: null,
|
@@ -95,8 +99,10 @@ var defaultProps = {
|
|
95
99
|
itemLabelWithId: false,
|
96
100
|
placeholder: null,
|
97
101
|
canCreate: false,
|
98
|
-
|
102
|
+
canEdit: false,
|
103
|
+
withoutModal: false,
|
99
104
|
createButtonLabel: null,
|
105
|
+
editButtonLabel: null,
|
100
106
|
multiple: false,
|
101
107
|
disabled: false,
|
102
108
|
className: null,
|
@@ -104,12 +110,13 @@ var defaultProps = {
|
|
104
110
|
onChange: null
|
105
111
|
};
|
106
112
|
var ResourceItemField = function ResourceItemField(_ref) {
|
107
|
-
var
|
113
|
+
var _ref9;
|
108
114
|
var name = _ref.name,
|
109
115
|
value = _ref.value,
|
110
116
|
errors = _ref.errors,
|
111
117
|
resourceId = _ref.resource,
|
112
118
|
resourceType = _ref.resourceType,
|
119
|
+
paginated = _ref.paginated,
|
113
120
|
initialQuery = _ref.query,
|
114
121
|
initialPage = _ref.page,
|
115
122
|
initialCount = _ref.count,
|
@@ -124,45 +131,53 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
124
131
|
itemLabelWithId = _ref.itemLabelWithId,
|
125
132
|
placeholder = _ref.placeholder,
|
126
133
|
canCreate = _ref.canCreate,
|
127
|
-
|
134
|
+
canEdit = _ref.canEdit,
|
135
|
+
withoutModal = _ref.withoutModal,
|
128
136
|
createButtonLabel = _ref.createButtonLabel,
|
137
|
+
editButtonLabel = _ref.editButtonLabel,
|
129
138
|
multiple = _ref.multiple,
|
130
139
|
disabled = _ref.disabled,
|
131
140
|
className = _ref.className,
|
132
141
|
inputClassName = _ref.inputClassName,
|
133
142
|
onChange = _ref.onChange;
|
134
143
|
var intl$1 = reactIntl.useIntl();
|
144
|
+
var resource = contexts.usePanneauResource(resourceId);
|
145
|
+
var resourceValues = intl.useResourceValues(resource);
|
146
|
+
var defaultPage = initialPage || (paginated ? 1 : null);
|
147
|
+
var defaultCount = initialCount || (paginated ? 10 : null);
|
135
148
|
// const [initialValue] = useState(value);
|
136
|
-
|
149
|
+
|
150
|
+
var _useState = React.useState(initialCount),
|
137
151
|
_useState2 = _slicedToArray__default["default"](_useState, 2),
|
138
|
-
|
139
|
-
_useState2[1];
|
140
|
-
|
152
|
+
formOpen = _useState2[0],
|
153
|
+
setFormOpen = _useState2[1];
|
154
|
+
|
155
|
+
// The text input search query
|
156
|
+
var _useState3 = React.useState(''),
|
141
157
|
_useState4 = _slicedToArray__default["default"](_useState3, 2),
|
142
|
-
|
143
|
-
_useState4[1];
|
144
|
-
var
|
158
|
+
inputTextValue = _useState4[0],
|
159
|
+
setInputTextValue = _useState4[1];
|
160
|
+
var onInputChange = React.useCallback(function (textValue) {
|
161
|
+
setInputTextValue(textValue);
|
162
|
+
}, []);
|
163
|
+
|
164
|
+
// TODO: list state controls?
|
165
|
+
var _useState5 = React.useState(initialQuery),
|
145
166
|
_useState6 = _slicedToArray__default["default"](_useState5, 2),
|
146
|
-
|
167
|
+
query = _useState6[0];
|
147
168
|
_useState6[1];
|
148
|
-
var _useState7 = React.useState(
|
169
|
+
var _useState7 = React.useState(defaultPage),
|
149
170
|
_useState8 = _slicedToArray__default["default"](_useState7, 2),
|
150
|
-
|
151
|
-
_useState8[1];
|
152
|
-
|
153
|
-
// The create option
|
154
|
-
var _useState9 = React.useState(initialCount),
|
171
|
+
page = _useState8[0],
|
172
|
+
setPage = _useState8[1];
|
173
|
+
var _useState9 = React.useState(defaultCount),
|
155
174
|
_useState10 = _slicedToArray__default["default"](_useState9, 2),
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
// The search query
|
160
|
-
var _useState11 = React.useState(''),
|
175
|
+
count = _useState10[0];
|
176
|
+
_useState10[1];
|
177
|
+
var _useState11 = React.useState(initialOptions),
|
161
178
|
_useState12 = _slicedToArray__default["default"](_useState11, 2),
|
162
|
-
|
163
|
-
|
164
|
-
var resource = contexts.usePanneauResource(resourceId);
|
165
|
-
var resourceValues = intl.useResourceValues(resource);
|
179
|
+
resourceOptions = _useState12[0];
|
180
|
+
_useState12[1];
|
166
181
|
var queryResource = React.useMemo(function () {
|
167
182
|
return {
|
168
183
|
id: resourceId
|
@@ -170,19 +185,36 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
170
185
|
}, [resourceId]);
|
171
186
|
var finalQuery = React.useMemo(function () {
|
172
187
|
return _objectSpread__default["default"](_objectSpread__default["default"](_objectSpread__default["default"]({}, query), !isEmpty__default["default"](inputTextValue) ? _defineProperty__default["default"]({}, searchParamName, inputTextValue) : null), {}, {
|
173
|
-
paginated:
|
188
|
+
paginated: paginated
|
174
189
|
});
|
175
|
-
}, [inputTextValue]);
|
176
|
-
|
177
|
-
// console.log('resource', resourceId, resource);
|
178
|
-
|
179
|
-
var resourceItems = data.useResourceItems(queryResource, finalQuery, page, count, resourceOptions);
|
190
|
+
}, [inputTextValue, paginated]);
|
191
|
+
var resourceItems = data.useResourceItems(queryResource, finalQuery, paginated ? page : null, paginated ? count : null, resourceOptions);
|
180
192
|
var _ref3 = resourceItems || {},
|
181
|
-
_ref3$
|
182
|
-
partialItems = _ref3$
|
193
|
+
_ref3$allItems = _ref3.allItems,
|
194
|
+
partialItems = _ref3$allItems === void 0 ? null : _ref3$allItems,
|
195
|
+
_ref3$reload = _ref3.reload,
|
196
|
+
reload = _ref3$reload === void 0 ? null : _ref3$reload,
|
197
|
+
_ref3$reloadPage = _ref3.reloadPage,
|
198
|
+
reloadPage = _ref3$reloadPage === void 0 ? null : _ref3$reloadPage,
|
199
|
+
_ref3$reset = _ref3.reset,
|
200
|
+
reset = _ref3$reset === void 0 ? null : _ref3$reset,
|
201
|
+
_ref3$lastPage = _ref3.lastPage,
|
202
|
+
lastPage = _ref3$lastPage === void 0 ? null : _ref3$lastPage;
|
183
203
|
var items = (partialItems || []).concat(multiple && isArray__default["default"](value) ? value : [value]).filter(function (it) {
|
184
204
|
return it !== null;
|
205
|
+
}).filter(function (v, i, a) {
|
206
|
+
return a.findIndex(function (v2) {
|
207
|
+
return v2.id === v.id;
|
208
|
+
}) === i;
|
185
209
|
});
|
210
|
+
var onScrollEnd = React.useCallback(function () {
|
211
|
+
if (page !== null && page >= lastPage) {
|
212
|
+
return;
|
213
|
+
}
|
214
|
+
if (paginated) {
|
215
|
+
setPage(page + 1);
|
216
|
+
}
|
217
|
+
}, [paginated, page, setPage, lastPage]);
|
186
218
|
var getItemLabel = React.useCallback(function (it, path) {
|
187
219
|
var id = get__default["default"](it, 'id', null);
|
188
220
|
if (itemLabelWithId) {
|
@@ -200,45 +232,32 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
200
232
|
label: finalLabel
|
201
233
|
};
|
202
234
|
}, [getItemLabel, getItemDescription, itemLabelPath, itemDescriptionPath]);
|
203
|
-
var
|
204
|
-
return parseItem(it);
|
205
|
-
}) : value || null;
|
206
|
-
var finalValue = multiple && isArray__default["default"](partialValue) ? partialValue.map(function (_ref4) {
|
235
|
+
var finalValue = multiple && isArray__default["default"](value) ? value.map(function (_ref4) {
|
207
236
|
var _ref4$id = _ref4.id,
|
208
237
|
id = _ref4$id === void 0 ? null : _ref4$id;
|
209
238
|
return id;
|
210
239
|
}) : (value === null || value === void 0 ? void 0 : value.id) || null;
|
240
|
+
var _ref5 = !multiple && value !== null ? value : {
|
241
|
+
type: resourceType
|
242
|
+
},
|
243
|
+
_ref5$type = _ref5.type,
|
244
|
+
finalType = _ref5$type === void 0 ? null : _ref5$type;
|
211
245
|
var options = (items || []).map(function (it) {
|
212
246
|
return parseItem(it);
|
213
247
|
});
|
214
|
-
|
215
|
-
// TODO: filter duplicate IDs blabla
|
216
|
-
// const { id: valueId = null } = value || {};
|
217
|
-
// const filteredItems =
|
218
|
-
// responseItems !== null && valueId !== null
|
219
|
-
// ? responseItems.filter((it) => (it !== null && it.id ? it.id !== valueId : true))
|
220
|
-
// : responseItems || [];
|
221
|
-
// const arrayedValue = multiple ? value : [value];
|
222
|
-
// const items = [...filteredItems, ...(value !== null ? arrayedValue : [])];
|
223
|
-
// console.log(options, items, value, finalValue, onChange);
|
224
|
-
// console.log('ultimate', options, finalValue);
|
225
|
-
|
226
|
-
var onInputChange = React.useCallback(function (textValue) {
|
227
|
-
setInputTextValue(textValue);
|
228
|
-
}, []);
|
229
248
|
var onValueChange = React.useCallback(function (newId) {
|
230
249
|
if (onChange === null) return;
|
231
250
|
if (multiple) {
|
232
|
-
var newValue = items.filter(function (
|
233
|
-
var
|
234
|
-
id =
|
251
|
+
var newValue = items.filter(function (_ref6) {
|
252
|
+
var _ref6$id = _ref6.id,
|
253
|
+
id = _ref6$id === void 0 ? null : _ref6$id;
|
235
254
|
return newId.indexOf(id) !== -1;
|
236
255
|
}) || [];
|
237
256
|
onChange(newValue);
|
238
257
|
} else {
|
239
|
-
var _newValue = items.filter(function (
|
240
|
-
var
|
241
|
-
id =
|
258
|
+
var _newValue = items.filter(function (_ref7) {
|
259
|
+
var _ref7$id = _ref7.id,
|
260
|
+
id = _ref7$id === void 0 ? null : _ref7$id;
|
242
261
|
return id === newId;
|
243
262
|
}) || [];
|
244
263
|
if (_newValue !== null && _newValue.length > 0) {
|
@@ -248,13 +267,13 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
248
267
|
}
|
249
268
|
}
|
250
269
|
}, [items, onChange, multiple]);
|
251
|
-
var
|
252
|
-
|
253
|
-
}, [
|
254
|
-
var
|
255
|
-
|
256
|
-
}, [
|
257
|
-
var
|
270
|
+
var onOpenForm = React.useCallback(function () {
|
271
|
+
setFormOpen(true);
|
272
|
+
}, [setFormOpen]);
|
273
|
+
var onCloseForm = React.useCallback(function () {
|
274
|
+
setFormOpen(false);
|
275
|
+
}, [setFormOpen]);
|
276
|
+
var onFormSuccess = React.useCallback(function (newValue) {
|
258
277
|
if (onChange === null) return;
|
259
278
|
var finalNewValue = resourceType !== null ? _objectSpread__default["default"]({
|
260
279
|
type: resourceType
|
@@ -264,16 +283,45 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
264
283
|
} else {
|
265
284
|
onChange(finalNewValue);
|
266
285
|
}
|
267
|
-
|
268
|
-
}, [onChange, multiple, value,
|
286
|
+
setFormOpen(false);
|
287
|
+
}, [onChange, multiple, value, setFormOpen, resourceType, paginated, initialPage]);
|
288
|
+
|
289
|
+
// If empty try to fetch
|
290
|
+
var onFocus = React.useCallback(function () {
|
291
|
+
if ((partialItems || []).length === 0) {
|
292
|
+
if (paginated) {
|
293
|
+
reloadPage();
|
294
|
+
} else {
|
295
|
+
reload();
|
296
|
+
}
|
297
|
+
}
|
298
|
+
}, [paginated, partialItems]);
|
269
299
|
var onClickRemove = React.useCallback(function () {
|
270
300
|
if (onChange !== null) {
|
271
301
|
onChange(null);
|
272
302
|
}
|
273
|
-
|
303
|
+
// Clear the page and be good
|
304
|
+
if (paginated) {
|
305
|
+
setPage(defaultPage);
|
306
|
+
reset();
|
307
|
+
} else {
|
308
|
+
reset();
|
309
|
+
}
|
310
|
+
}, [onChange, paginated, defaultPage, reload, reloadPage, reset]);
|
311
|
+
var form = formOpen ? /*#__PURE__*/React__default["default"].createElement(ResourceForm__default["default"], {
|
312
|
+
resource: resource,
|
313
|
+
type: finalType,
|
314
|
+
item: !multiple ? value : null,
|
315
|
+
onSuccess: onFormSuccess
|
316
|
+
}) : null;
|
274
317
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
275
318
|
className: classNames__default["default"](['position-relative', _defineProperty__default["default"]({}, className, className != null)])
|
276
|
-
}, value !== null && !multiple ? /*#__PURE__*/React__default["default"].createElement(
|
319
|
+
}, value !== null && !multiple ? /*#__PURE__*/React__default["default"].createElement("div", {
|
320
|
+
className: "row"
|
321
|
+
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
322
|
+
className: "col-10 flex-grow-1"
|
323
|
+
}, /*#__PURE__*/React__default["default"].createElement(ResourceCard__default["default"], {
|
324
|
+
className: "flex-grow-1",
|
277
325
|
item: value,
|
278
326
|
getItemLabel: initialGetItemLabel,
|
279
327
|
getItemDescription: getItemDescription,
|
@@ -284,12 +332,20 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
284
332
|
itemLabelWithId: itemLabelWithId,
|
285
333
|
disable: disabled,
|
286
334
|
onClickRemove: onClickRemove
|
287
|
-
})
|
288
|
-
className:
|
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", {
|
344
|
+
className: "row align-items-center"
|
289
345
|
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
290
|
-
className: "col-
|
346
|
+
className: "col-10 flex-grow-1"
|
291
347
|
}, /*#__PURE__*/React__default["default"].createElement(Select__default["default"], {
|
292
|
-
className: classNames__default["default"](['py-1', 'shadow-none', (
|
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)]),
|
293
349
|
disabled: disabled,
|
294
350
|
name: name,
|
295
351
|
value: finalValue,
|
@@ -305,20 +361,30 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
305
361
|
}),
|
306
362
|
onChange: onValueChange,
|
307
363
|
onInputChange: onInputChange,
|
364
|
+
onFocus: onFocus,
|
365
|
+
onMenuScrollToBottom: onScrollEnd,
|
308
366
|
multiple: multiple
|
309
367
|
})), canCreate ? /*#__PURE__*/React__default["default"].createElement("div", {
|
310
368
|
className: "col-auto"
|
311
369
|
}, /*#__PURE__*/React__default["default"].createElement(Button__default["default"], {
|
312
370
|
theme: "primary",
|
313
371
|
icon: createButtonLabel === null ? 'plus-lg' : null,
|
314
|
-
onClick:
|
372
|
+
onClick: formOpen ? onCloseForm : onOpenForm,
|
315
373
|
outline: true
|
316
|
-
}, createButtonLabel)) : null,
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
374
|
+
}, createButtonLabel)) : null), formOpen ? withoutModal ? /*#__PURE__*/React__default["default"].createElement("div", {
|
375
|
+
className: "card mt-4 p-4"
|
376
|
+
}, form) : /*#__PURE__*/React__default["default"].createElement(Dialog__default["default"], {
|
377
|
+
title: !multiple && value !== null ? /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
|
378
|
+
values: resourceValues,
|
379
|
+
id: "mCfzkJ",
|
380
|
+
defaultMessage: [{
|
381
|
+
"type": 0,
|
382
|
+
"value": "Edit "
|
383
|
+
}, {
|
384
|
+
"type": 1,
|
385
|
+
"value": "a_singular"
|
386
|
+
}]
|
387
|
+
}) : /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
|
322
388
|
values: resourceValues,
|
323
389
|
id: "6viUpq",
|
324
390
|
defaultMessage: [{
|
@@ -330,12 +396,8 @@ var ResourceItemField = function ResourceItemField(_ref) {
|
|
330
396
|
}]
|
331
397
|
}),
|
332
398
|
size: "lg",
|
333
|
-
onClickClose:
|
334
|
-
},
|
335
|
-
resource: resource,
|
336
|
-
type: resourceType,
|
337
|
-
onSuccess: onCreateSuccess
|
338
|
-
})) : null));
|
399
|
+
onClickClose: onCloseForm
|
400
|
+
}, form) : null);
|
339
401
|
};
|
340
402
|
ResourceItemField.propTypes = propTypes;
|
341
403
|
ResourceItemField.defaultProps = defaultProps;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@panneau/field-resource-item",
|
3
|
-
"version": "2.0.
|
3
|
+
"version": "2.0.75",
|
4
4
|
"description": "An item mapping a resource",
|
5
5
|
"keywords": [
|
6
6
|
"javascript"
|
@@ -45,14 +45,14 @@
|
|
45
45
|
},
|
46
46
|
"dependencies": {
|
47
47
|
"@babel/runtime": "^7.12.5",
|
48
|
-
"@panneau/core": "^2.0.
|
49
|
-
"@panneau/data": "^2.0.
|
50
|
-
"@panneau/element-button": "^2.0.
|
51
|
-
"@panneau/element-resource-card": "^2.0.
|
52
|
-
"@panneau/element-select": "^2.0.
|
53
|
-
"@panneau/form-resource": "^2.0.
|
54
|
-
"@panneau/intl": "^2.0.
|
55
|
-
"@panneau/modal-dialog": "^2.0.
|
48
|
+
"@panneau/core": "^2.0.75",
|
49
|
+
"@panneau/data": "^2.0.75",
|
50
|
+
"@panneau/element-button": "^2.0.75",
|
51
|
+
"@panneau/element-resource-card": "^2.0.75",
|
52
|
+
"@panneau/element-select": "^2.0.75",
|
53
|
+
"@panneau/form-resource": "^2.0.75",
|
54
|
+
"@panneau/intl": "^2.0.75",
|
55
|
+
"@panneau/modal-dialog": "^2.0.75",
|
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": "
|
64
|
+
"gitHead": "2b0ca89c848915cdafd65de777882516ae3df88e"
|
65
65
|
}
|