@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.
- package/README.md +17 -1
- package/components/Accordian/Accordian.js +14 -11
- package/components/Accordian/Accordian.stories.js +141 -118
- package/components/Accordian/index.js +1 -1
- package/components/Button/Button.js +4 -4
- package/components/Button/Button.stories.js +168 -62
- package/components/Button/DropdownButton.js +5 -6
- package/components/Button/buttonTheme.css +1 -1
- package/components/Button/index.js +2 -3
- package/components/DataLoader/DataLoader.js +6 -7
- package/components/DataLoader/DataLoader.stories.js +244 -58
- package/components/DataLoader/index.js +1 -1
- package/components/Form/Checkbox.js +12 -11
- package/components/Form/DragDropFileUploader.js +6 -7
- package/components/Form/Dropdown.js +14 -12
- package/components/Form/FileUploader.js +3 -4
- package/components/Form/Form.js +6 -7
- package/components/Form/FormElementWrapper.js +1 -1
- package/components/Form/Input.js +24 -15
- package/components/Form/RadioList.js +8 -9
- package/components/Form/RangeSlider.js +12 -13
- package/components/Form/SearchableDropdown.js +563 -0
- package/components/Form/ServerPaginatedDDList.js +56 -41
- package/components/Form/Textarea.js +26 -10
- package/components/Form/Toggle.js +6 -7
- package/components/Form/formCore.css +1 -1
- package/components/Form/formTheme.css +1 -1
- package/components/Form/index.js +8 -1
- package/components/Form/stories/Checkbox.stories.js +139 -40
- package/components/Form/stories/Dropdown.stories.js +323 -92
- package/components/Form/stories/FileUploader.stories.js +178 -19
- package/components/Form/stories/Input.stories.js +115 -0
- package/components/Form/stories/RangeSlider.stories.js +162 -64
- package/components/Form/stories/SearchableDropdown.stories.js +189 -0
- package/components/Form/stories/ServerPaginatedDropdown.stories.js +365 -0
- package/components/Form/stories/Textarea.stories.js +113 -34
- package/components/Form/stories/Toggle.stories.js +193 -14
- package/components/Form/variables.css +0 -0
- package/components/InlineModal/InlineModal.js +119 -21
- package/components/InlineModal/InlineModal.stories.js +239 -45
- package/components/InlineModal/index.js +1 -2
- package/components/InlineModal/inlineModalCore.css +1 -1
- package/components/List/List.js +11 -8
- package/components/List/List.stories.js +238 -0
- package/components/List/index.js +1 -1
- package/components/Modal/Modal.js +67 -20
- package/components/Modal/Modal.stories.js +257 -38
- package/components/Modal/index.js +1 -1
- package/components/Modal/modalCore.css +1 -1
- package/components/NoDataPlaceholder/NoDataPlaceholder.js +41 -0
- package/components/NoDataPlaceholder/NoDataPlaceholder.stories.js +42 -0
- package/components/NoDataPlaceholder/index.js +9 -0
- package/components/NoDataPlaceholder/noDataPlaceholderCore.css +1 -0
- package/components/NotificationComponent/NotificationComponent.js +20 -10
- package/components/NotificationComponent/NotificationComponent.stories.js +171 -19
- package/components/NotificationComponent/index.js +1 -1
- package/components/NotificationComponent/notificationTheme.css +1 -1
- package/components/PageLoader/PageLoader.js +84 -0
- package/components/PageLoader/PageLoader.stories.js +276 -0
- package/components/PageLoader/index.js +9 -0
- package/components/PageLoader/pageLoaderCore.css +1 -0
- package/components/ProgressBar/ProgressBar.css +0 -0
- package/components/ProgressBar/ProgressBar.js +1 -1
- package/components/ProgressBar/ProgressBar.stories.js +203 -10
- package/components/ProgressBar/index.js +1 -1
- package/components/ProgressBar/progressBarCore.css +1 -1
- package/components/Table/BaseTable.js +86 -342
- package/components/Table/PaginationComponent.js +4 -4
- package/components/Table/Table.js +7 -326
- package/components/Table/Table.stories.js +2117 -158
- package/components/Table/TableChild.js +383 -0
- package/components/Table/TableConstants.js +15 -0
- package/components/Table/hooks/usePrevious.js +14 -0
- package/components/Table/index.js +14 -1
- package/components/Table/tableCore.css +1 -1
- package/components/TableOld/BaseTable.js +373 -0
- package/components/TableOld/PaginationComponent.js +86 -0
- package/components/TableOld/TableOld.js +367 -0
- package/components/TableOld/index.js +15 -0
- package/components/TabsComponent/TabsComponent.js +6 -7
- package/components/TabsComponent/TabsComponent.stories.js +291 -53
- package/components/TabsComponent/index.js +1 -1
- package/components/ToastNotification/ToastNotificationWrapper.js +212 -0
- package/components/ToastNotification/ToastNotificationWrapper.stories.js +554 -0
- package/components/ToastNotification/index.js +40 -0
- package/components/ToastNotification/toastNotificationCore.css +1 -0
- package/components/Tooltip/Tooltip.js +231 -56
- package/components/Tooltip/Tooltip.stories.js +380 -15
- package/components/Tooltip/index.js +1 -1
- package/components/Tooltip/tooltipCore.css +1 -1
- package/components/Tooltip/tooltipTheme.css +1 -1
- package/components/common/NoDataDropdown.js +50 -0
- package/components/common/common.css +1 -0
- package/components/core.css +2 -3
- package/components/core.scss +20 -1
- package/components/index.js +66 -3
- package/components/theme.css +2 -3
- package/core/Validators.js +1 -1
- package/core/customHooks.js +4 -4
- package/core/dataLoader.js +58 -17
- package/core/index.js +1 -1
- package/core/utils.js +15 -4
- package/index.js +54 -0
- package/package.json +41 -28
- package/components/Button/DropdownButton.stories.js +0 -49
- package/components/Form/stories/DragDropFileUploader.stories.js +0 -25
- package/components/Form/stories/FormDefault.stories.js +0 -115
- package/components/Form/stories/RadioList.stories.js +0 -53
- package/components/Form/stories/TextInput.stories.js +0 -76
- package/components/Form/stories/form.stories.js +0 -233
- package/components/List/list.stories.js +0 -35
- 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;
|