@k-int/stripes-kint-components 2.7.1 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/es/index.js +14 -0
  3. package/es/lib/ActionList/ActionList.js +7 -2
  4. package/es/lib/ActionList/ActionListFieldArray.js +8 -4
  5. package/es/lib/CustomProperties/View/CustomPropertiesViewCtx.js +1 -1
  6. package/es/lib/CycleButton/CycleButton.js +2 -1
  7. package/es/lib/EditableRefdataCategoryList/EditableRefdataCategoryList.js +8 -1
  8. package/es/lib/EditableRefdataList/EditableRefdataList.js +8 -1
  9. package/es/lib/IconSelect/IconSelect.js +105 -110
  10. package/es/lib/RichSelect/RichSelect.js +252 -0
  11. package/es/lib/RichSelect/index.js +23 -0
  12. package/es/lib/RichSelect/useSelectedOption.js +39 -0
  13. package/package.json +1 -1
  14. package/src/index.js +1 -0
  15. package/src/lib/ActionList/ActionList.js +8 -1
  16. package/src/lib/ActionList/ActionListFieldArray.js +11 -4
  17. package/src/lib/ActionList/README.md +1 -0
  18. package/src/lib/CustomProperties/View/CustomPropertiesViewCtx.js +1 -1
  19. package/src/lib/CycleButton/CycleButton.js +3 -2
  20. package/src/lib/EditableRefdataCategoryList/EditableRefdataCategoryList.js +8 -1
  21. package/src/lib/EditableRefdataList/EditableRefdataList.js +8 -1
  22. package/src/lib/IconSelect/IconSelect.js +94 -113
  23. package/src/lib/IconSelect/README.md +6 -2
  24. package/src/lib/RichSelect/README.md +56 -0
  25. package/src/lib/RichSelect/RichSelect.js +230 -0
  26. package/src/lib/RichSelect/index.js +2 -0
  27. package/src/lib/RichSelect/useSelectedOption.js +14 -0
  28. package/src/lib/hooks/useMutateRefdataCategory.js +3 -3
  29. package/styles/RichSelect.css +7 -0
  30. package/translations/stripes-kint-components/ar.json +2 -1
  31. package/translations/stripes-kint-components/cs_CZ.json +2 -1
  32. package/translations/stripes-kint-components/de.json +2 -1
  33. package/translations/stripes-kint-components/en.json +2 -1
  34. package/translations/stripes-kint-components/es.json +2 -1
  35. package/translations/stripes-kint-components/hi_IN.json +2 -1
  36. package/translations/stripes-kint-components/hu.json +2 -1
  37. package/translations/stripes-kint-components/it_IT.json +2 -1
  38. package/translations/stripes-kint-components/ja.json +2 -1
  39. package/translations/stripes-kint-components/ko.json +2 -1
  40. package/translations/stripes-kint-components/pt_PT.json +2 -1
  41. package/translations/stripes-kint-components/ru.json +2 -1
  42. package/translations/stripes-kint-components/sv.json +2 -1
  43. package/translations/stripes-kint-components/zh_CN.json +2 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
- ## 2.7.1 2022-07-06
1
+ ## 2.8.0 2022-07-15
2
2
  * Fixed bug where non-createable fields which were editable would display a field on creation.
3
+ * RichSelect -- A Select style form component allowing for more custom render behaviour.
4
+ * Refactored IconSelect to use RichSelect under the hood
5
+ * EditableRefdataList/EditableRefdataCategoryList Added validation to prevent attempting null save
6
+ * PropTypes updated
7
+ * ActionList Save button is now disabled if the form has submissionErrors.
8
+ * ActionList Added a prop to bootstrap defaults in while adding new object inline.
9
+ * Linting and refactoring
3
10
 
4
11
  ## 2.7.0 2022-07-05
5
12
  * Fixed missing translation issue
package/es/index.js CHANGED
@@ -155,6 +155,12 @@ Object.defineProperty(exports, "RefdataButtons", {
155
155
  return _RefdataButtons.default;
156
156
  }
157
157
  });
158
+ Object.defineProperty(exports, "RichSelect", {
159
+ enumerable: true,
160
+ get: function get() {
161
+ return _RichSelect.default;
162
+ }
163
+ });
158
164
  Object.defineProperty(exports, "SASQLookupComponent", {
159
165
  enumerable: true,
160
166
  get: function get() {
@@ -384,6 +390,12 @@ Object.defineProperty(exports, "useRefdata", {
384
390
  return _hooks.useRefdata;
385
391
  }
386
392
  });
393
+ Object.defineProperty(exports, "useSelectedOption", {
394
+ enumerable: true,
395
+ get: function get() {
396
+ return _RichSelect.useSelectedOption;
397
+ }
398
+ });
387
399
  Object.defineProperty(exports, "useSettings", {
388
400
  enumerable: true,
389
401
  get: function get() {
@@ -441,6 +453,8 @@ var _CycleButton = _interopRequireDefault(require("./lib/CycleButton"));
441
453
 
442
454
  var _IconSelect = _interopRequireDefault(require("./lib/IconSelect"));
443
455
 
456
+ var _RichSelect = _interopRequireWildcard(require("./lib/RichSelect"));
457
+
444
458
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
445
459
 
446
460
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -21,7 +21,7 @@ var _ActionListFieldArray = _interopRequireDefault(require("./ActionListFieldArr
21
21
 
22
22
  var _jsxRuntime = require("react/jsx-runtime");
23
23
 
24
- var _excluded = ["actionAssigner", "actionCalls", "columnMapping", "contentData", "creatableFields", "createCallback", "editableFields", "fieldComponents", "hideCreateButton", "label", "validateFields", "visibleFields"];
24
+ var _excluded = ["actionAssigner", "actionCalls", "columnMapping", "contentData", "creatableFields", "createCallback", "defaultNewObject", "editableFields", "fieldComponents", "hideCreateButton", "label", "validateFields", "visibleFields"];
25
25
 
26
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
27
 
@@ -46,10 +46,12 @@ var propTypes = {
46
46
  contentData: _propTypes.default.arrayOf(_propTypes.default.object),
47
47
  creatableFields: _propTypes.default.object,
48
48
  createCallback: _propTypes.default.func,
49
+ defaultNewObject: _propTypes.default.object,
49
50
  editableFields: _propTypes.default.object,
50
51
  fieldComponents: _propTypes.default.object,
51
52
  hideCreateButton: _propTypes.default.bool,
52
- label: _propTypes.default.string,
53
+ label: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node]),
54
+ validateFields: _propTypes.default.object,
53
55
  visibleFields: _propTypes.default.arrayOf(_propTypes.default.string)
54
56
  };
55
57
  var ActionList = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
@@ -61,6 +63,8 @@ var ActionList = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
61
63
  _ref$creatableFields = _ref.creatableFields,
62
64
  creatableFields = _ref$creatableFields === void 0 ? {} : _ref$creatableFields,
63
65
  createCallback = _ref.createCallback,
66
+ _ref$defaultNewObject = _ref.defaultNewObject,
67
+ defaultNewObject = _ref$defaultNewObject === void 0 ? {} : _ref$defaultNewObject,
64
68
  _ref$editableFields = _ref.editableFields,
65
69
  editableFields = _ref$editableFields === void 0 ? {} : _ref$editableFields,
66
70
  _ref$fieldComponents = _ref.fieldComponents,
@@ -103,6 +107,7 @@ var ActionList = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
103
107
  component: ActionListFieldArrayWithRef,
104
108
  creatableFields: creatableFields,
105
109
  createCallback: createCallback,
110
+ defaultNewObject: defaultNewObject,
106
111
  editableFields: editableFields,
107
112
  fieldComponents: fieldComponents,
108
113
  hideCreateButton: hideCreateButton,
@@ -23,7 +23,7 @@ var _ActionListFieldArray = _interopRequireDefault(require("../../../styles/Acti
23
23
 
24
24
  var _jsxRuntime = require("react/jsx-runtime");
25
25
 
26
- var _excluded = ["actionAssigner", "actionCalls", "columnMapping", "creatableFields", "createCallback", "editableFields", "fields", "fieldComponents", "hideCreateButton", "label", "validateFields", "visibleFields", "triggerFormSubmit"],
26
+ var _excluded = ["actionAssigner", "actionCalls", "columnMapping", "creatableFields", "createCallback", "defaultNewObject", "editableFields", "fields", "fieldComponents", "hideCreateButton", "label", "validateFields", "visibleFields", "triggerFormSubmit"],
27
27
  _excluded2 = ["actionListActions", "fieldName", "fieldIndex"],
28
28
  _excluded3 = ["actionListActions", "fieldName", "fieldIndex"],
29
29
  _excluded4 = ["actionListActions"],
@@ -74,12 +74,15 @@ var propTypes = {
74
74
  columnMapping: _propTypes.default.object,
75
75
  creatableFields: _propTypes.default.object,
76
76
  createCallback: _propTypes.default.func,
77
+ defaultNewObject: _propTypes.default.object,
77
78
  editableFields: _propTypes.default.object,
78
79
  fields: _propTypes.default.object,
79
80
  fieldComponents: _propTypes.default.object,
80
81
  formatter: _propTypes.default.object,
81
82
  hideCreateButton: _propTypes.default.bool,
82
- label: _propTypes.default.string,
83
+ label: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node]),
84
+ triggerFormSubmit: _propTypes.default.func.isRequired,
85
+ validateFields: _propTypes.default.object,
83
86
  visibleFields: _propTypes.default.arrayOf(_propTypes.default.string)
84
87
  };
85
88
  var ActionListFieldArray = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
@@ -88,6 +91,7 @@ var ActionListFieldArray = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, r
88
91
  columnMapping = _ref.columnMapping,
89
92
  creatableFields = _ref.creatableFields,
90
93
  createCallback = _ref.createCallback,
94
+ defaultNewObject = _ref.defaultNewObject,
91
95
  editableFields = _ref.editableFields,
92
96
  fields = _ref.fields,
93
97
  fieldComponents = _ref.fieldComponents,
@@ -166,7 +170,7 @@ var ActionListFieldArray = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, r
166
170
 
167
171
  var handleClickCreate = function handleClickCreate() {
168
172
  toggleEditing('NEW_ROW');
169
- fields.unshift({});
173
+ fields.unshift(defaultNewObject);
170
174
  }; // Way to go into create mode from external component, and way to tell internal editing state
171
175
 
172
176
 
@@ -201,7 +205,7 @@ var ActionListFieldArray = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, r
201
205
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
202
206
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
203
207
  buttonStyle: "primary",
204
- disabled: submitting || pristine,
208
+ disabled: hasValidationErrors || submitting || pristine,
205
209
  marginBottom0: true,
206
210
  onClick: function onClick() {
207
211
  triggerFormSubmit(); // This is set up as () => null in ActionList, so essentially only acts here to force validation
@@ -91,7 +91,7 @@ var CustomPropertiesViewCtx = function CustomPropertiesViewCtx(_ref) {
91
91
  }, // Within those groups, sort by weight
92
92
  {
93
93
  path: 'label'
94
- } //For those with the same weight, sort by label
94
+ } // For those with the same weight, sort by label
95
95
  ]
96
96
  }
97
97
  }),
@@ -75,7 +75,8 @@ CycleButton.propTypes = {
75
75
  className: _propTypes.default.object,
76
76
  icon: _propTypes.default.string.isRequired,
77
77
  onClick: _propTypes.default.func.isRequired
78
- }))
78
+ })),
79
+ startIndex: _propTypes.default.number
79
80
  };
80
81
  var _default = CycleButton;
81
82
  exports.default = _default;
@@ -21,6 +21,8 @@ var _hooks = require("../hooks");
21
21
 
22
22
  var _ActionList = _interopRequireDefault(require("../ActionList"));
23
23
 
24
+ var _validators = require("../utils/validators");
25
+
24
26
  var _jsxRuntime = require("react/jsx-runtime");
25
27
 
26
28
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -56,7 +58,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
56
58
  var propTypes = {
57
59
  afterQueryCalls: _propTypes.default.object,
58
60
  catchQueryCalls: _propTypes.default.object,
59
- label: _propTypes.default.string,
61
+ label: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node]),
60
62
  labelOverrides: _propTypes.default.object,
61
63
  refdataEndpoint: _propTypes.default.string
62
64
  };
@@ -242,6 +244,11 @@ var EditableRefdataCategoryList = function EditableRefdataCategoryList(_ref) {
242
244
  }
243
245
  },
244
246
  label: label,
247
+ validateFields: {
248
+ desc: function desc() {
249
+ return _validators.required;
250
+ }
251
+ },
245
252
  visibleFields: ['desc', 'values']
246
253
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ConfirmationModal, {
247
254
  confirmLabel: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
@@ -21,6 +21,8 @@ var _hooks = require("../hooks");
21
21
 
22
22
  var _ActionList = _interopRequireDefault(require("../ActionList"));
23
23
 
24
+ var _validators = require("../utils/validators");
25
+
24
26
  var _jsxRuntime = require("react/jsx-runtime");
25
27
 
26
28
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -57,7 +59,7 @@ var propTypes = {
57
59
  afterQueryCalls: _propTypes.default.object,
58
60
  catchQueryCalls: _propTypes.default.object,
59
61
  desc: _propTypes.default.string,
60
- label: _propTypes.default.string,
62
+ label: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node]),
61
63
  labelOverrides: _propTypes.default.object,
62
64
  refdataEndpoint: _propTypes.default.string
63
65
  };
@@ -267,6 +269,11 @@ var EditableRefdataList = function EditableRefdataList(_ref) {
267
269
  }
268
270
  },
269
271
  label: label,
272
+ validateFields: {
273
+ label: function label() {
274
+ return _validators.required;
275
+ }
276
+ },
270
277
  visibleFields: ['label', 'value']
271
278
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ConfirmationModal, {
272
279
  confirmLabel: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
@@ -7,6 +9,8 @@ exports.default = void 0;
7
9
 
8
10
  var _react = require("react");
9
11
 
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+
10
14
  var _classnames = _interopRequireDefault(require("classnames"));
11
15
 
12
16
  var _reactIntl = require("react-intl");
@@ -15,15 +19,17 @@ var _components = require("@folio/stripes/components");
15
19
 
16
20
  var _IconSelect = _interopRequireDefault(require("../../../styles/IconSelect.css"));
17
21
 
22
+ var _RichSelect = _interopRequireWildcard(require("../RichSelect"));
23
+
18
24
  var _jsxRuntime = require("react/jsx-runtime");
19
25
 
20
26
  var _excluded = ["className"];
21
27
 
22
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
29
 
24
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
30
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
31
 
26
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
32
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
33
 
28
34
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
29
35
 
@@ -31,6 +37,10 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
31
37
 
32
38
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
33
39
 
40
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
41
+
42
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
43
+
34
44
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
35
45
 
36
46
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -52,21 +62,20 @@ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToAr
52
62
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
53
63
 
54
64
  // A form component which acts as a "Select for states with corresponding icons"
55
- var IconSelect = function IconSelect(_ref) {
56
- var _meta$initial, _meta$initial2, _selectedOption$butto;
65
+ var IconSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
66
+ var _selectedOption$butto;
57
67
 
58
68
  var ariaLabel = _ref.ariaLabel,
59
69
  _ref$disabled = _ref.disabled,
60
70
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
61
71
  id = _ref.id,
62
- _ref$input = _ref.input,
63
- formInput = _ref$input === void 0 ? {} : _ref$input,
72
+ input = _ref.input,
64
73
  label = _ref.label,
65
74
  meta = _ref.meta,
66
75
  _ref$notSet = _ref.notSet,
67
76
  notSet = _ref$notSet === void 0 ? {
68
- icon: "ellipsis",
69
- value: "",
77
+ icon: 'ellipsis',
78
+ value: '',
70
79
  label: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
71
80
  id: "stripes-kint-components.iconSelect.notSet"
72
81
  })
@@ -75,109 +84,95 @@ var IconSelect = function IconSelect(_ref) {
75
84
  _ref$options = _ref.options,
76
85
  userOptions = _ref$options === void 0 ? [] : _ref$options,
77
86
  _ref$required = _ref.required,
78
- required = _ref$required === void 0 ? false : _ref$required;
87
+ required = _ref$required === void 0 ? false : _ref$required,
88
+ value = _ref.value;
79
89
  // Options with notSet
80
- var options = [notSet].concat(_toConsumableArray(userOptions)); // Refs
81
-
82
- var hiddenInput = (0, _react.useRef)(null);
83
-
84
- var _useState = (0, _react.useState)((_meta$initial = meta.initial) !== null && _meta$initial !== void 0 ? _meta$initial : ''),
85
- _useState2 = _slicedToArray(_useState, 2),
86
- value = _useState2[0],
87
- setValue = _useState2[1];
88
-
89
- var findSelectedOptionByValue = function findSelectedOptionByValue(val) {
90
- return options.find(function (opt) {
91
- return opt.value === val;
92
- });
93
- };
94
-
95
- var _useState3 = (0, _react.useState)(findSelectedOptionByValue((_meta$initial2 = meta.initial) !== null && _meta$initial2 !== void 0 ? _meta$initial2 : '')),
96
- _useState4 = _slicedToArray(_useState3, 2),
97
- selectedOption = _useState4[0],
98
- setSelectedOption = _useState4[1];
99
-
100
- var handleChange = function handleChange(e) {
101
- // Actually set the value in the form
102
- formInput.onChange(e); // If the user has set up an onChange, this will ensure that that fires
103
-
104
- if (onChange) {
105
- onChange(e, e.target.value);
106
- }
107
- };
108
-
109
- var renderMenu = function renderMenu(_ref2) {
110
- var onToggle = _ref2.onToggle;
111
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.DropdownMenu, {
112
- children: options.map(function (opt) {
113
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
114
- autoFocus: (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.value) === opt.value,
115
- buttonStyle: "dropdownItem",
116
- id: "".concat(id, "-").concat(formInput.name, "-option-").concat(opt.value),
117
- marginBottom0: true,
118
- onClick: function onClick() {
119
- // Trigger change event
120
- (0, _components.nativeChangeFieldValue)(hiddenInput, false, opt.value); // Set internal states
121
-
122
- setValue(opt.value);
123
- setSelectedOption(findSelectedOptionByValue(opt.value)); // Close the menu on select
124
-
125
- onToggle();
126
- },
127
- children: opt.icon ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Icon, _objectSpread(_objectSpread({
128
- icon: opt.icon
129
- }, opt.iconProps), {}, {
130
- children: opt.label
131
- })) : opt.label
132
- });
133
- })
134
- });
135
- };
136
-
137
- var _ref3 = (_selectedOption$butto = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.buttonProps) !== null && _selectedOption$butto !== void 0 ? _selectedOption$butto : {},
138
- iconButtonClassName = _ref3.className,
139
- buttonProps = _objectWithoutProperties(_ref3, _excluded);
140
-
141
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
142
- children: [label || ariaLabel ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Label, {
143
- htmlFor: id,
144
- id: "".concat(id, "-label"),
145
- required: required,
146
- className: ariaLabel && 'sr-only',
147
- children: ariaLabel || label
148
- }) : '', /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Dropdown, {
149
- hasPadding: true,
150
- placement: "bottom-start",
151
- renderTrigger: function renderTrigger(_ref4) {
152
- var _selectedOption$icon;
153
-
154
- var onToggle = _ref4.onToggle,
155
- triggerRef = _ref4.triggerRef,
156
- keyHandler = _ref4.keyHandler,
157
- ariaProps = _ref4.ariaProps,
158
- getTriggerProps = _ref4.getTriggerProps;
159
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.IconButton, _objectSpread(_objectSpread(_objectSpread({
160
- ref: triggerRef,
161
- disabled: disabled,
162
- icon: (_selectedOption$icon = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.icon) !== null && _selectedOption$icon !== void 0 ? _selectedOption$icon : 'ellipsis',
163
- marginBottom0: true,
164
- onClick: onToggle,
165
- onKeyDown: keyHandler,
166
- type: "button"
167
- }, _objectSpread({
168
- className: (0, _classnames.default)(_IconSelect.default.buttonStyle, iconButtonClassName)
169
- }, buttonProps)), getTriggerProps()), ariaProps));
170
- },
171
- renderMenu: renderMenu
172
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("input", _objectSpread(_objectSpread({}, formInput), {}, {
173
- ref: hiddenInput,
174
- hidden: true,
175
- onChange: handleChange,
176
- type: "text",
177
- value: value
178
- }))]
90
+ var options = [notSet].concat(_toConsumableArray(userOptions));
91
+
92
+ var _useSelectedOption = (0, _RichSelect.useSelectedOption)(),
93
+ _useSelectedOption2 = _slicedToArray(_useSelectedOption, 2),
94
+ richSelectRef = _useSelectedOption2[0],
95
+ selectedOption = _useSelectedOption2[1];
96
+
97
+ (0, _react.useImperativeHandle)(ref, function () {
98
+ return {
99
+ selectedOption: selectedOption
100
+ };
179
101
  });
180
- };
181
102
 
103
+ var _ref2 = (_selectedOption$butto = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.buttonProps) !== null && _selectedOption$butto !== void 0 ? _selectedOption$butto : {},
104
+ iconButtonClassName = _ref2.className,
105
+ buttonProps = _objectWithoutProperties(_ref2, _excluded);
106
+
107
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_RichSelect.default, {
108
+ ref: richSelectRef,
109
+ ariaLabel: ariaLabel,
110
+ disabled: disabled,
111
+ id: id,
112
+ input: input,
113
+ label: label,
114
+ meta: meta,
115
+ onChange: onChange,
116
+ options: options,
117
+ renderOption: function renderOption(opt) {
118
+ var _opt$label2;
119
+
120
+ if (opt.icon) {
121
+ var _opt$label;
122
+
123
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Icon, _objectSpread(_objectSpread({
124
+ icon: opt.icon
125
+ }, opt.iconProps), {}, {
126
+ children: (_opt$label = opt.label) !== null && _opt$label !== void 0 ? _opt$label : opt.value
127
+ }));
128
+ }
129
+
130
+ return (_opt$label2 = opt.label) !== null && _opt$label2 !== void 0 ? _opt$label2 : opt.value;
131
+ },
132
+ renderTrigger: function renderTrigger(_ref3) {
133
+ var _selectedOption$icon;
134
+
135
+ var onToggle = _ref3.onToggle,
136
+ triggerRef = _ref3.triggerRef,
137
+ keyHandler = _ref3.keyHandler,
138
+ ariaProps = _ref3.ariaProps,
139
+ getTriggerProps = _ref3.getTriggerProps;
140
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.IconButton, _objectSpread(_objectSpread(_objectSpread({
141
+ ref: triggerRef,
142
+ disabled: disabled,
143
+ icon: (_selectedOption$icon = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.icon) !== null && _selectedOption$icon !== void 0 ? _selectedOption$icon : 'ellipsis',
144
+ marginBottom0: true,
145
+ onClick: onToggle,
146
+ onKeyDown: keyHandler,
147
+ type: "button"
148
+ }, _objectSpread({
149
+ className: (0, _classnames.default)(_IconSelect.default.buttonStyle, iconButtonClassName)
150
+ }, buttonProps)), getTriggerProps()), ariaProps));
151
+ },
152
+ required: required,
153
+ value: value
154
+ });
155
+ });
156
+ IconSelect.propTypes = {
157
+ ariaLabel: _propTypes.default.string,
158
+ disabled: _propTypes.default.bool,
159
+ id: _propTypes.default.string,
160
+ input: _propTypes.default.object,
161
+ label: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.func, _propTypes.default.node]),
162
+ meta: _propTypes.default.object,
163
+ notSet: _propTypes.default.shape({
164
+ icon: _propTypes.default.string,
165
+ value: _propTypes.default.string.isRequired,
166
+ label: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node])
167
+ }),
168
+ onChange: _propTypes.default.func,
169
+ options: _propTypes.default.arrayOf(_propTypes.default.shape({
170
+ icon: _propTypes.default.string,
171
+ value: _propTypes.default.string.isRequired,
172
+ label: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node])
173
+ })),
174
+ required: _propTypes.default.bool,
175
+ value: _propTypes.default.string
176
+ };
182
177
  var _default = IconSelect;
183
178
  exports.default = _default;