@unbxd-ui/unbxd-react-components 0.2.220 → 0.3.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 (112) hide show
  1. package/README.md +17 -1
  2. package/components/Accordian/Accordian.js +14 -11
  3. package/components/Accordian/Accordian.stories.js +141 -118
  4. package/components/Accordian/index.js +1 -1
  5. package/components/Button/Button.js +4 -4
  6. package/components/Button/Button.stories.js +168 -62
  7. package/components/Button/DropdownButton.js +5 -6
  8. package/components/Button/buttonTheme.css +1 -1
  9. package/components/Button/index.js +2 -3
  10. package/components/DataLoader/DataLoader.js +6 -7
  11. package/components/DataLoader/DataLoader.stories.js +244 -58
  12. package/components/DataLoader/index.js +1 -1
  13. package/components/Form/Checkbox.js +12 -11
  14. package/components/Form/DragDropFileUploader.js +6 -7
  15. package/components/Form/Dropdown.js +14 -12
  16. package/components/Form/FileUploader.js +3 -4
  17. package/components/Form/Form.js +6 -7
  18. package/components/Form/FormElementWrapper.js +1 -1
  19. package/components/Form/Input.js +24 -15
  20. package/components/Form/RadioList.js +8 -9
  21. package/components/Form/RangeSlider.js +12 -13
  22. package/components/Form/SearchableDropdown.js +563 -0
  23. package/components/Form/ServerPaginatedDDList.js +56 -41
  24. package/components/Form/Textarea.js +26 -10
  25. package/components/Form/Toggle.js +6 -7
  26. package/components/Form/formCore.css +1 -1
  27. package/components/Form/formTheme.css +1 -1
  28. package/components/Form/index.js +8 -1
  29. package/components/Form/stories/Checkbox.stories.js +139 -40
  30. package/components/Form/stories/Dropdown.stories.js +323 -92
  31. package/components/Form/stories/FileUploader.stories.js +178 -19
  32. package/components/Form/stories/Input.stories.js +115 -0
  33. package/components/Form/stories/RangeSlider.stories.js +162 -64
  34. package/components/Form/stories/SearchableDropdown.stories.js +189 -0
  35. package/components/Form/stories/ServerPaginatedDropdown.stories.js +365 -0
  36. package/components/Form/stories/Textarea.stories.js +113 -34
  37. package/components/Form/stories/Toggle.stories.js +193 -14
  38. package/components/Form/variables.css +0 -0
  39. package/components/InlineModal/InlineModal.js +119 -21
  40. package/components/InlineModal/InlineModal.stories.js +239 -45
  41. package/components/InlineModal/index.js +1 -2
  42. package/components/InlineModal/inlineModalCore.css +1 -1
  43. package/components/List/List.js +11 -8
  44. package/components/List/List.stories.js +238 -0
  45. package/components/List/index.js +1 -1
  46. package/components/Modal/Modal.js +67 -20
  47. package/components/Modal/Modal.stories.js +257 -38
  48. package/components/Modal/index.js +1 -1
  49. package/components/Modal/modalCore.css +1 -1
  50. package/components/NoDataPlaceholder/NoDataPlaceholder.js +41 -0
  51. package/components/NoDataPlaceholder/NoDataPlaceholder.stories.js +42 -0
  52. package/components/NoDataPlaceholder/index.js +9 -0
  53. package/components/NoDataPlaceholder/noDataPlaceholderCore.css +1 -0
  54. package/components/NotificationComponent/NotificationComponent.js +20 -10
  55. package/components/NotificationComponent/NotificationComponent.stories.js +171 -19
  56. package/components/NotificationComponent/index.js +1 -1
  57. package/components/NotificationComponent/notificationTheme.css +1 -1
  58. package/components/PageLoader/PageLoader.js +84 -0
  59. package/components/PageLoader/PageLoader.stories.js +276 -0
  60. package/components/PageLoader/index.js +9 -0
  61. package/components/PageLoader/pageLoaderCore.css +1 -0
  62. package/components/ProgressBar/ProgressBar.css +0 -0
  63. package/components/ProgressBar/ProgressBar.js +1 -1
  64. package/components/ProgressBar/ProgressBar.stories.js +203 -10
  65. package/components/ProgressBar/index.js +1 -1
  66. package/components/ProgressBar/progressBarCore.css +1 -1
  67. package/components/Table/BaseTable.js +86 -342
  68. package/components/Table/PaginationComponent.js +4 -4
  69. package/components/Table/Table.js +7 -326
  70. package/components/Table/Table.stories.js +2117 -158
  71. package/components/Table/TableChild.js +383 -0
  72. package/components/Table/TableConstants.js +15 -0
  73. package/components/Table/hooks/usePrevious.js +14 -0
  74. package/components/Table/index.js +14 -1
  75. package/components/Table/tableCore.css +1 -1
  76. package/components/TableOld/BaseTable.js +373 -0
  77. package/components/TableOld/PaginationComponent.js +86 -0
  78. package/components/TableOld/TableOld.js +367 -0
  79. package/components/TableOld/index.js +15 -0
  80. package/components/TabsComponent/TabsComponent.js +6 -7
  81. package/components/TabsComponent/TabsComponent.stories.js +291 -53
  82. package/components/TabsComponent/index.js +1 -1
  83. package/components/ToastNotification/ToastNotificationWrapper.js +212 -0
  84. package/components/ToastNotification/ToastNotificationWrapper.stories.js +554 -0
  85. package/components/ToastNotification/index.js +40 -0
  86. package/components/ToastNotification/toastNotificationCore.css +1 -0
  87. package/components/Tooltip/Tooltip.js +231 -56
  88. package/components/Tooltip/Tooltip.stories.js +380 -15
  89. package/components/Tooltip/index.js +1 -1
  90. package/components/Tooltip/tooltipCore.css +1 -1
  91. package/components/Tooltip/tooltipTheme.css +1 -1
  92. package/components/common/NoDataDropdown.js +50 -0
  93. package/components/common/common.css +1 -0
  94. package/components/core.css +2 -3
  95. package/components/core.scss +20 -1
  96. package/components/index.js +66 -3
  97. package/components/theme.css +2 -3
  98. package/core/Validators.js +1 -1
  99. package/core/customHooks.js +4 -4
  100. package/core/dataLoader.js +58 -17
  101. package/core/index.js +1 -1
  102. package/core/utils.js +15 -4
  103. package/index.js +54 -0
  104. package/package.json +41 -28
  105. package/components/Button/DropdownButton.stories.js +0 -49
  106. package/components/Form/stories/DragDropFileUploader.stories.js +0 -25
  107. package/components/Form/stories/FormDefault.stories.js +0 -115
  108. package/components/Form/stories/RadioList.stories.js +0 -53
  109. package/components/Form/stories/TextInput.stories.js +0 -76
  110. package/components/Form/stories/form.stories.js +0 -233
  111. package/components/List/list.stories.js +0 -35
  112. package/core/dataLoader.stories.js +0 -119
@@ -0,0 +1,563 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = exports.DefaultDropdownItem = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _List = _interopRequireDefault(require("../List"));
11
+ var _Form = require("./Form");
12
+ var _FormElementWrapper = _interopRequireDefault(require("./FormElementWrapper"));
13
+ var _ServerPaginatedDDList = _interopRequireDefault(require("./ServerPaginatedDDList"));
14
+ var _utils = _interopRequireDefault(require("../../core/utils"));
15
+ var _excluded = ["items", "selectedItems", "selectItem", "idAttribute", "nameAttribute", "DropdownItem", "ListHeaderItem", "showClippedContentTitle", "searchQuery"],
16
+ _excluded2 = ["halign", "label", "showLabel", "name", "SelectionSummary", "className", "value", "defaultValue", "onChange", "disabled", "options", "searchPlaceholder", "idAttribute", "nameAttribute", "noSelectionLabel", "appearance", "multiSelect", "DropdownItem", "validations", "paginationType", "requestId", "onItemsRenderedCB", "requestParams", "pageNoKey", "perPageKey", "pageSize", "searchAttribute", "maxHeight", "responseFormatter", "getUrlParams", "showCreateCTA", "createCTAComponent", "onCreateCTAClick", "serverListClassName", "showClear", "onClear", "minPageNo", "LoaderComponent", "ListHeaderItem", "isModalOpen", "onSearchChange", "showClippedContentTitle", "onModalOpenCB", "onModalCloseCB"];
17
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
18
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
19
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
20
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
21
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
22
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
23
+ 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."); }
24
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
25
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
26
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
27
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
28
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
29
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
30
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
31
+ var convertToArray = function convertToArray(value) {
32
+ if (!value) {
33
+ return [];
34
+ }
35
+ return Array.isArray(value) ? value : [value];
36
+ };
37
+ var getFilteredOptions = function getFilteredOptions() {
38
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
39
+ var searchQuery = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
40
+ var nameAttribute = arguments.length > 2 ? arguments[2] : undefined;
41
+ var setShowList = arguments.length > 3 ? arguments[3] : undefined;
42
+ // return options.filter(obj => {
43
+ // const nameValue = obj[nameAttribute].toLowerCase();
44
+ // return nameValue.indexOf(searchQuery.toLowerCase()) !== -1;
45
+ // });
46
+
47
+ var filteredOptions = options.filter(function (obj) {
48
+ var nameValue = obj[nameAttribute].toLowerCase();
49
+ return nameValue.indexOf(searchQuery.toLowerCase()) !== -1;
50
+ });
51
+ if (filteredOptions.length === 0) {
52
+ setShowList(false);
53
+ }
54
+ return filteredOptions;
55
+ };
56
+
57
+ /* eslint-disable react/prop-types */
58
+ var DefaultSelectionSummary = function DefaultSelectionSummary(_ref) {
59
+ var _ref$selectedItems = _ref.selectedItems,
60
+ selectedItems = _ref$selectedItems === void 0 ? [] : _ref$selectedItems,
61
+ multiSelect = _ref.multiSelect,
62
+ noSelectionLabel = _ref.noSelectionLabel,
63
+ nameAttribute = _ref.nameAttribute,
64
+ showClear = _ref.showClear,
65
+ clearSelectedItems = _ref.clearSelectedItems;
66
+ var summaryString = "";
67
+ var selectedCount = selectedItems.length;
68
+ if (multiSelect) {
69
+ summaryString = selectedCount ? "".concat(selectedCount, " selected") : noSelectionLabel;
70
+ } else {
71
+ summaryString = selectedCount ? selectedItems[0][nameAttribute] : noSelectionLabel;
72
+ }
73
+ return /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
74
+ className: "RCB-dd-label"
75
+ }, summaryString), /*#__PURE__*/_react["default"].createElement("span", {
76
+ className: "RCB-selection-wrapper"
77
+ }, showClear && /*#__PURE__*/_react["default"].createElement("span", {
78
+ className: "RCB-clear-selected",
79
+ onClick: clearSelectedItems
80
+ }, "Clear"), /*#__PURE__*/_react["default"].createElement("span", {
81
+ className: "RCB-select-arrow"
82
+ })));
83
+ };
84
+ var DefaultDropdownItem = exports.DefaultDropdownItem = function DefaultDropdownItem(props) {
85
+ var itemData = props.itemData,
86
+ selectItem = props.selectItem,
87
+ _props$selectedItems = props.selectedItems,
88
+ selectedItems = _props$selectedItems === void 0 ? [] : _props$selectedItems,
89
+ idAttribute = props.idAttribute,
90
+ nameAttribute = props.nameAttribute,
91
+ showClippedContentTitle = props.showClippedContentTitle;
92
+ var idValue = itemData[idAttribute];
93
+ var name = itemData[nameAttribute];
94
+ var isSelected = selectedItems.find(function (obj) {
95
+ return obj[idAttribute] === idValue;
96
+ }) ? true : false;
97
+ var className = "RCB-list-item " + (isSelected ? "selected" : "");
98
+ if (showClippedContentTitle) {
99
+ return /*#__PURE__*/_react["default"].createElement("li", {
100
+ onClick: function onClick() {
101
+ return selectItem(itemData);
102
+ },
103
+ className: className,
104
+ title: name
105
+ }, name);
106
+ } else {
107
+ return /*#__PURE__*/_react["default"].createElement("li", {
108
+ onClick: function onClick() {
109
+ return selectItem(itemData);
110
+ },
111
+ className: className
112
+ }, name);
113
+ }
114
+ };
115
+ DefaultDropdownItem.propTypes = {
116
+ itemData: _propTypes["default"].object.isRequired,
117
+ selectItem: _propTypes["default"].func.isRequired,
118
+ selectedItems: _propTypes["default"].array,
119
+ idAttribute: _propTypes["default"].string,
120
+ nameAttribute: _propTypes["default"].string,
121
+ showClippedContentTitle: _propTypes["default"].bool
122
+ };
123
+ var NormalList = function NormalList(_ref2) {
124
+ var _ref2$items = _ref2.items,
125
+ items = _ref2$items === void 0 ? [] : _ref2$items,
126
+ selectedItems = _ref2.selectedItems,
127
+ selectItem = _ref2.selectItem,
128
+ idAttribute = _ref2.idAttribute,
129
+ nameAttribute = _ref2.nameAttribute,
130
+ DropdownItem = _ref2.DropdownItem,
131
+ ListHeaderItem = _ref2.ListHeaderItem,
132
+ showClippedContentTitle = _ref2.showClippedContentTitle,
133
+ searchQuery = _ref2.searchQuery,
134
+ restProps = _objectWithoutProperties(_ref2, _excluded);
135
+ return /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, items.length ? ListHeaderItem : "", /*#__PURE__*/_react["default"].createElement(_List["default"], _extends({
136
+ items: items
137
+ }, restProps, {
138
+ // showNoDataMsg={false}
139
+ searchQuery: searchQuery,
140
+ ListItem: DropdownItem,
141
+ selectedItems: selectedItems,
142
+ selectItem: selectItem,
143
+ showClippedContentTitle: showClippedContentTitle,
144
+ idAttribute: idAttribute,
145
+ nameAttribute: nameAttribute
146
+ })));
147
+ };
148
+ NormalList.defaultProps = {
149
+ DropdownItem: DefaultDropdownItem
150
+ };
151
+
152
+ /* eslint-enable react/prop-types */
153
+
154
+ var SearchableDropdown = function SearchableDropdown(props, ref) {
155
+ var halign = props.halign,
156
+ label = props.label,
157
+ showLabel = props.showLabel,
158
+ name = props.name,
159
+ SelectionSummary = props.SelectionSummary,
160
+ className = props.className,
161
+ value = props.value,
162
+ defaultValue = props.defaultValue,
163
+ onChange = props.onChange,
164
+ disabled = props.disabled,
165
+ options = props.options,
166
+ searchPlaceholder = props.searchPlaceholder,
167
+ idAttribute = props.idAttribute,
168
+ nameAttribute = props.nameAttribute,
169
+ noSelectionLabel = props.noSelectionLabel,
170
+ appearance = props.appearance,
171
+ multiSelect = props.multiSelect,
172
+ DropdownItem = props.DropdownItem,
173
+ validations = props.validations,
174
+ paginationType = props.paginationType,
175
+ requestId = props.requestId,
176
+ onItemsRenderedCB = props.onItemsRenderedCB,
177
+ requestParams = props.requestParams,
178
+ pageNoKey = props.pageNoKey,
179
+ perPageKey = props.perPageKey,
180
+ pageSize = props.pageSize,
181
+ searchAttribute = props.searchAttribute,
182
+ maxHeight = props.maxHeight,
183
+ responseFormatter = props.responseFormatter,
184
+ getUrlParams = props.getUrlParams,
185
+ showCreateCTA = props.showCreateCTA,
186
+ createCTAComponent = props.createCTAComponent,
187
+ onCreateCTAClick = props.onCreateCTAClick,
188
+ serverListClassName = props.serverListClassName,
189
+ showClear = props.showClear,
190
+ onClear = props.onClear,
191
+ minPageNo = props.minPageNo,
192
+ _props$LoaderComponen = props.LoaderComponent,
193
+ LoaderComponent = _props$LoaderComponen === void 0 ? undefined : _props$LoaderComponen,
194
+ ListHeaderItem = props.ListHeaderItem,
195
+ _props$isModalOpen = props.isModalOpen,
196
+ isModalOpen = _props$isModalOpen === void 0 ? false : _props$isModalOpen,
197
+ propSearchChange = props.onSearchChange,
198
+ showClippedContentTitle = props.showClippedContentTitle,
199
+ onModalOpenCB = props.onModalOpenCB,
200
+ onModalCloseCB = props.onModalCloseCB,
201
+ restProps = _objectWithoutProperties(props, _excluded2);
202
+ var _useState = (0, _react.useState)(""),
203
+ _useState2 = _slicedToArray(_useState, 2),
204
+ searchQuery = _useState2[0],
205
+ setSearchQuery = _useState2[1];
206
+ var debouncedFn = (0, _react.useRef)();
207
+ var searchIpRef = (0, _react.useRef)();
208
+ var initialSelected = [];
209
+ var initialValue = typeof onChange === "function" ? value : defaultValue;
210
+ if (typeof initialValue !== "undefined") {
211
+ initialSelected = convertToArray(initialValue);
212
+ }
213
+
214
+ /* array of selected item objects */
215
+ var _useState3 = (0, _react.useState)(initialSelected),
216
+ _useState4 = _slicedToArray(_useState3, 2),
217
+ selectedItems = _useState4[0],
218
+ setSelectedItems = _useState4[1];
219
+ var _useState5 = (0, _react.useState)(false),
220
+ _useState6 = _slicedToArray(_useState5, 2),
221
+ showList = _useState6[0],
222
+ setShowList = _useState6[1];
223
+ var ssDDRef = (0, _react.useRef)(null);
224
+ var _useContext = (0, _react.useContext)(_Form.FormContext),
225
+ onValueChange = _useContext.onValueChange;
226
+ var inlineModalRef = (0, _react.useRef)();
227
+ var hideModal = function hideModal() {
228
+ // inlineModalRef.current.hideModal();
229
+ setShowList(false);
230
+ };
231
+ var postFormValueChange = function postFormValueChange(value) {
232
+ var _utils$checkIfValid = _utils["default"].checkIfValid(value, validations),
233
+ error = _utils$checkIfValid.error;
234
+ typeof onValueChange === "function" && onValueChange(name, value, error);
235
+ };
236
+ var selectItem = function selectItem(item) {
237
+ var id = item[idAttribute];
238
+ if (multiSelect) {
239
+ var isPresent = selectedItems.find(function (obj) {
240
+ return obj[idAttribute] === id;
241
+ });
242
+ if (!isPresent) {
243
+ selectedItems.push(item);
244
+ postFormValueChange(selectedItems);
245
+ typeof onChange === "function" && onChange(selectedItems);
246
+ }
247
+ } else {
248
+ selectedItems = [item];
249
+ postFormValueChange(item);
250
+ typeof onChange === "function" && onChange(item);
251
+ /* close the dropdown */
252
+ // hideModal();
253
+ setShowList(false);
254
+ }
255
+ setSelectedItems(selectedItems);
256
+ setSearchQuery(selectedItems[0][nameAttribute]);
257
+ };
258
+ var onBodyClick = function onBodyClick(e) {
259
+ var eventTarget = e.target;
260
+ var parentNode = ssDDRef.current;
261
+ var eventPathNodes = e.composedPath();
262
+ var isWithinParent = false;
263
+ if (parentNode.contains(eventTarget)) {
264
+ isWithinParent = true;
265
+ } else {
266
+ for (var i = 0; i < eventPathNodes.length; i++) {
267
+ var node = eventPathNodes[i];
268
+ if (node !== window && parentNode.contains(node)) {
269
+ isWithinParent = true;
270
+ break;
271
+ }
272
+ }
273
+ }
274
+ if (!isWithinParent) {
275
+ /* outside click -> close modal */
276
+ setShowList(false);
277
+ // if(typeof onChange === "function") {
278
+ // onChange(searchQuery);
279
+ // }
280
+ }
281
+ };
282
+ (0, _react.useEffect)(function () {
283
+ /* add when mounted */
284
+ document.addEventListener("click", onBodyClick);
285
+
286
+ /* return function to be called when unmounted */
287
+ return function () {
288
+ document.removeEventListener("click", onBodyClick);
289
+ };
290
+ }, []);
291
+ (0, _react.useEffect)(function () {
292
+ /* set the initial form element value in the form context */
293
+ var postValue = typeof onChange === "function" ? value : defaultValue;
294
+ if (typeof postValue !== "undefined") {
295
+ var arrayPostValue = convertToArray(postValue);
296
+ postValue = multiSelect ? arrayPostValue : postValue;
297
+ setSelectedItems(arrayPostValue);
298
+ if (arrayPostValue.length > 0) {
299
+ setSearchQuery(arrayPostValue[0][nameAttribute]);
300
+ } else {
301
+ setSearchQuery("");
302
+ }
303
+ }
304
+ postFormValueChange(postValue);
305
+ }, [value, defaultValue]);
306
+ var debouncedSearchChange = function debouncedSearchChange(value) {
307
+ setSearchQuery(value);
308
+ setSelectedItems([]);
309
+ // Always ensure the list is visible when searching
310
+
311
+ if (typeof propSearchChange === "function") {
312
+ propSearchChange(value);
313
+ }
314
+ if (typeof onChange === "function") {
315
+ onChange(_defineProperty(_defineProperty({}, idAttribute, value), nameAttribute, value));
316
+ postFormValueChange(_defineProperty(_defineProperty({}, idAttribute, value), nameAttribute, value));
317
+ }
318
+ setShowList(true);
319
+ };
320
+ var onSearchChange = function onSearchChange(event) {
321
+ var value = event.target.value;
322
+ debouncedSearchChange(value);
323
+ };
324
+
325
+ // const onModalStateChange = (isModalOpen) => {
326
+ // if(isModalOpen && typeof onModalOpenCB === "function") {
327
+ // onModalOpenCB();
328
+ // }
329
+ // if(!isModalOpen && typeof onModalCloseCB === "function") {
330
+ // onModalCloseCB();
331
+ // }
332
+ // if (isModalOpen && showSearch) {
333
+ // searchIpRef.current && searchIpRef.current.focus();
334
+ // } else {
335
+ // /* modal is closed */
336
+ // setSearchQuery("");
337
+ // }
338
+ // };
339
+
340
+ // const clearSelectedItems = (evnt) => {
341
+ // evnt.stopPropagation();
342
+ // setSelectedItems([]);
343
+ // typeof (onClear) === "function" && onClear();
344
+ // typeof (onChange) === "function" && onChange(null);
345
+ // /** Close modal after reset */
346
+ // hideModal();
347
+ // }
348
+
349
+ var commonAttributes = {
350
+ selectedItems: selectedItems,
351
+ selectItem: selectItem,
352
+ idAttribute: idAttribute,
353
+ nameAttribute: nameAttribute,
354
+ DropdownItem: DropdownItem,
355
+ ListHeaderItem: ListHeaderItem,
356
+ showClippedContentTitle: showClippedContentTitle,
357
+ searchQuery: searchQuery
358
+ };
359
+ (0, _react.useImperativeHandle)(ref, function () {
360
+ return {
361
+ closeDropdown: hideModal
362
+ };
363
+ });
364
+ var serverListAttrs = {
365
+ requestId: requestId,
366
+ requestParams: requestParams,
367
+ pageNoKey: pageNoKey,
368
+ perPageKey: perPageKey,
369
+ pageSize: pageSize,
370
+ maxHeight: maxHeight,
371
+ searchQuery: searchQuery,
372
+ searchAttribute: searchAttribute,
373
+ responseFormatter: responseFormatter,
374
+ getUrlParams: getUrlParams,
375
+ serverListClassName: serverListClassName,
376
+ minPageNo: minPageNo,
377
+ onItemsRenderedCB: onItemsRenderedCB,
378
+ setShowList: setShowList,
379
+ isSearchableDD: true
380
+ // showNoDataMsg:false
381
+ };
382
+
383
+ // const inlineModalClasses = "RCB-form-el " + (showCreateCTA ? "RCB-dd-with-create" : "");
384
+
385
+ return /*#__PURE__*/_react["default"].createElement("div", {
386
+ ref: ssDDRef,
387
+ className: className
388
+ }, /*#__PURE__*/_react["default"].createElement(_FormElementWrapper["default"], {
389
+ className: "RCB-dropdown ".concat(disabled ? "RCB-disabled" : "", " RCB-searchabledd"),
390
+ appearance: appearance
391
+ }, showLabel && /*#__PURE__*/_react["default"].createElement("label", {
392
+ className: "RCB-form-el-label",
393
+ htmlFor: name
394
+ }, label), /*#__PURE__*/_react["default"].createElement("div", {
395
+ className: "RCB-dd-search"
396
+ }, /*#__PURE__*/_react["default"].createElement("span", {
397
+ className: "RCB-dd-search-icon"
398
+ }), /*#__PURE__*/_react["default"].createElement("input", {
399
+ type: "text",
400
+ className: "RCB-dd-search-ip RCB-dd-searchabledd-search-ip RCB-form-el",
401
+ placeholder: searchPlaceholder,
402
+ onChange: onSearchChange,
403
+ ref: searchIpRef,
404
+ onFocus: function onFocus() {
405
+ return setShowList(true);
406
+ },
407
+ "data-hj-allow": true,
408
+ value: searchQuery,
409
+ disabled: disabled
410
+ })), showList && /*#__PURE__*/_react["default"].createElement("div", {
411
+ className: "RCB-inline-modal-body RCB-searchabledd-list-container ".concat(halign === "right" ? "RCB-align-right" : "RCB-align-left")
412
+ }, paginationType === "SERVER" ? /*#__PURE__*/_react["default"].createElement(_ServerPaginatedDDList["default"], _extends({}, commonAttributes, serverListAttrs, restProps, {
413
+ LoaderComponent: LoaderComponent
414
+ })) : /*#__PURE__*/_react["default"].createElement(NormalList, _extends({}, commonAttributes, restProps, {
415
+ items: getFilteredOptions(options, searchQuery, nameAttribute, setShowList)
416
+ })), showCreateCTA && /*#__PURE__*/_react["default"].createElement("div", {
417
+ className: "RCB-dd-create-cta",
418
+ onClick: onCreateCTAClick
419
+ }, createCTAComponent))));
420
+ };
421
+
422
+ // const VALUE_SHAPE = PropTypes.shape({
423
+ // id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
424
+ // name: PropTypes.string
425
+ // });
426
+
427
+ SearchableDropdown = /*#__PURE__*/(0, _react.forwardRef)(SearchableDropdown);
428
+ SearchableDropdown.propTypes = {
429
+ /** Pass any additional classNames to Dropdown component */
430
+ className: _propTypes["default"].string,
431
+ /** Pass infinite fixed list classname to Dropdown component */
432
+ serverListClassName: _propTypes["default"].string,
433
+ /** Horizontal alignment of the dropdown body */
434
+ halign: _propTypes["default"].oneOf(["left", "right"]),
435
+ /** Label for the dropdown element */
436
+ label: _propTypes["default"].string,
437
+ /** indicates whether to show or hide label */
438
+ showLabel: _propTypes["default"].bool,
439
+ /** Unique ID for the input element */
440
+ name: _propTypes["default"].string.isRequired,
441
+ /** Label for dropdown activator */
442
+ noSelectionLabel: _propTypes["default"].string,
443
+ /** Selection items list */
444
+ options: _propTypes["default"].arrayOf(_propTypes["default"].shape({
445
+ id: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
446
+ name: _propTypes["default"].string
447
+ })),
448
+ /** array of selected item objects, only considered if onChange event is given */
449
+ value: _propTypes["default"].any,
450
+ /** array of default selected item objects */
451
+ defaultValue: _propTypes["default"].any,
452
+ onChange: _propTypes["default"].func,
453
+ /** pass true if dropdown has to be disabled */
454
+ disabled: _propTypes["default"].bool,
455
+ /* placeholder to show in the search box */
456
+ searchPlaceholder: _propTypes["default"].string,
457
+ /** Is dropdown multi select or single select */
458
+ multiSelect: _propTypes["default"].bool,
459
+ /** ID attribute key to use when rendering the dropdown items, if the ID attribute is other than "id" */
460
+ idAttribute: _propTypes["default"].string,
461
+ /** name attribute key to use when rendering the dropdown items, if the name attribute is other than "name" */
462
+ nameAttribute: _propTypes["default"].string,
463
+ /** Add title attribute to list element for large data */
464
+ showClippedContentTitle: _propTypes["default"].bool,
465
+ /** Provide a custom element for rendering dropdown item */
466
+ DropdownItem: _propTypes["default"].oneOfType([_propTypes["default"].instanceOf(Element), _propTypes["default"].func]),
467
+ /** Pass true to show a create CTA at the end of the dropdown */
468
+ showCreateCTA: _propTypes["default"].bool,
469
+ /** Customize the create CTA HTML by passing a createCTAComponent */
470
+ createCTAComponent: _propTypes["default"].any,
471
+ /** Callback that gets called when Create CTA button is clicked */
472
+ onCreateCTAClick: _propTypes["default"].func,
473
+ /** Pass this component to customise the selection summary HTML.
474
+ * The array of selected item objects will be sent as props
475
+ */
476
+ SelectionSummary: _propTypes["default"].func,
477
+ /** Define the appearance of the form element. Accepted values are either "inline" or "block" */
478
+ appearance: _propTypes["default"].oneOf(["inline", "block"]),
479
+ /** Array of validations to perform on the form element value.
480
+ * If the validation fails, you will get an "error" field in the form onSubmit event */
481
+ validations: _propTypes["default"].arrayOf(_propTypes["default"].shape({
482
+ type: _propTypes["default"].oneOf(["REQUIRED", "CUSTOM"]).isRequired,
483
+ message: _propTypes["default"].string.isRequired,
484
+ validator: _propTypes["default"].func
485
+ })),
486
+ /** Type of pagination for the dropdown list items. Send "SERVER" for server side pagination */
487
+ paginationType: _propTypes["default"].oneOf(["NONE", "SERVER"]),
488
+ /** If paginationType is "SERVER", pass the requestId for the server request */
489
+ requestId: function requestId(props, propName) {
490
+ if (props["paginationType"] == "SERVER" && (!props[propName] || typeof props[propName] === "undefined")) {
491
+ return new Error("Please provide a requestId for paginationType 'SERVER'!");
492
+ }
493
+ },
494
+ /** If paginationType is "SERVER", pass any additional params to be sent to the server request */
495
+ requestParams: _propTypes["default"].object,
496
+ /** If paginationType is "SERVER", pass the pageNo. attribute to be sent to the server request */
497
+ pageNoKey: _propTypes["default"].string,
498
+ /** If paginationType is "SERVER", pass the pageSize attribute to be sent to the server request */
499
+ perPageKey: _propTypes["default"].string,
500
+ /** If paginationType is "SERVER", max height of the dropdown container */
501
+ maxHeight: _propTypes["default"].number,
502
+ /** If paginationType is "SERVER", height of each dropdown item */
503
+ ddItemHeight: _propTypes["default"].number,
504
+ /** If paginationType is "SERVER", max number of items to show for one page in the dropdown container */
505
+ pageSize: _propTypes["default"].number,
506
+ /** Default page number to use for server paginated list */
507
+ minPageNo: _propTypes["default"].number,
508
+ /** If paginationType is "SERVER" & showSearch is true, pass the search attribute to be sent to the server request */
509
+ searchAttribute: _propTypes["default"].string,
510
+ /** If paginationType is "SERVER",
511
+ * component expects the response to be of the form
512
+ * { [pageNoKey]: <pageNo>, [perPageKey]: <pageSize>, total: <totalCount>, entries: [{}] }
513
+ * If your data is not in this format, use the responseFormatter to format the data to this structure.
514
+ * Input to this function is the response received from your API
515
+ * */
516
+ responseFormatter: _propTypes["default"].func,
517
+ /** If paginationType is "SERVER", function that is expected to return the URL Params object */
518
+ getUrlParams: _propTypes["default"].func,
519
+ /** Show the optional clear button for resetting selections */
520
+ showClear: _propTypes["default"].bool,
521
+ /** Custom on clear function */
522
+ onClear: _propTypes["default"].func,
523
+ /** Callback on query search in dropdown */
524
+ onSearchChange: _propTypes["default"].func,
525
+ /** List header Component */
526
+ ListHeaderItem: _propTypes["default"].string,
527
+ /** Flag for modal state */
528
+ isModalOpen: _propTypes["default"].bool,
529
+ /** Loader Component */
530
+ LoaderComponent: _propTypes["default"].any
531
+ };
532
+ SearchableDropdown.defaultProps = {
533
+ className: "",
534
+ label: "",
535
+ showLabel: true,
536
+ searchPlaceholder: "Search",
537
+ searchAttribute: "search",
538
+ multiSelect: false,
539
+ idAttribute: "id",
540
+ nameAttribute: "name",
541
+ noSelectionLabel: "Select",
542
+ appearance: "inline",
543
+ halign: "left",
544
+ validations: [],
545
+ paginationType: "NONE",
546
+ pageNoKey: "page",
547
+ perPageKey: "count",
548
+ maxHeight: 200,
549
+ pageSize: 10,
550
+ getUrlParams: function getUrlParams() {
551
+ return {};
552
+ },
553
+ SelectionSummary: DefaultSelectionSummary,
554
+ showCreateCTA: false,
555
+ serverListClassName: "",
556
+ createCTAComponent: /*#__PURE__*/_react["default"].createElement("span", null, "Create New"),
557
+ onCreateCTAClick: function onCreateCTAClick() {},
558
+ showClear: false,
559
+ ListHeaderItem: "",
560
+ onClear: function onClear() {},
561
+ isModalOpen: false
562
+ };
563
+ var _default = exports["default"] = SearchableDropdown;