tabler-react-2 0.1.125 → 0.1.126
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/dist/input/dropdown.js +23 -42
- package/docs/src/docs/changelog.mdx +8 -0
- package/package.json +1 -1
package/dist/input/dropdown.js
CHANGED
|
@@ -44,24 +44,18 @@ var DropdownInput = exports.DropdownInput = function DropdownInput(_ref) {
|
|
|
44
44
|
maxHeight = _ref$maxHeight === void 0 ? "300px" : _ref$maxHeight,
|
|
45
45
|
required = _ref.required,
|
|
46
46
|
props = _objectWithoutProperties(_ref, _excluded);
|
|
47
|
-
// Allow aliasing: pass either `values` or `items`
|
|
48
47
|
var values = ivalues || items || [];
|
|
49
|
-
|
|
50
|
-
// Helper: extract text from label or dropdownText for filtering
|
|
51
48
|
var getLabelText = function getLabelText(val) {
|
|
52
49
|
var _val$dropdownText;
|
|
53
|
-
|
|
50
|
+
if (val.type === "header") return String(val.text);
|
|
54
51
|
var node = (_val$dropdownText = val.dropdownText) !== null && _val$dropdownText !== void 0 ? _val$dropdownText : val.label;
|
|
55
52
|
if (typeof node === "string" || typeof node === "number") {
|
|
56
53
|
return String(node);
|
|
57
54
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return typeof c === "string" ? c : "";
|
|
55
|
+
return _react.Children.toArray(node).filter(function (c) {
|
|
56
|
+
return typeof c === "string";
|
|
61
57
|
}).join("");
|
|
62
58
|
};
|
|
63
|
-
|
|
64
|
-
// loading state
|
|
65
59
|
if (loading) {
|
|
66
60
|
return /*#__PURE__*/_react["default"].createElement(_index.Util.Col, null, showLabel && label && /*#__PURE__*/_react["default"].createElement("label", {
|
|
67
61
|
className: "form-label"
|
|
@@ -70,8 +64,6 @@ var DropdownInput = exports.DropdownInput = function DropdownInput(_ref) {
|
|
|
70
64
|
disabled: true
|
|
71
65
|
}, prompt));
|
|
72
66
|
}
|
|
73
|
-
|
|
74
|
-
// disabled state
|
|
75
67
|
if (disabled) {
|
|
76
68
|
return /*#__PURE__*/_react["default"].createElement(_index.Util.Col, null, showLabel && label && /*#__PURE__*/_react["default"].createElement("label", {
|
|
77
69
|
className: "form-label"
|
|
@@ -79,13 +71,9 @@ var DropdownInput = exports.DropdownInput = function DropdownInput(_ref) {
|
|
|
79
71
|
disabled: true
|
|
80
72
|
}, disabledText || prompt));
|
|
81
73
|
}
|
|
82
|
-
|
|
83
|
-
// Helper: if value is an object, use its id; otherwise, assume the value itself is the id.
|
|
84
74
|
var getId = function getId(val) {
|
|
85
75
|
return _typeof(val) === "object" && val !== null ? val.id : val;
|
|
86
76
|
};
|
|
87
|
-
|
|
88
|
-
// State for selected value + search
|
|
89
77
|
var _useState = (0, _react.useState)(values.find(function (v) {
|
|
90
78
|
return v.id === getId(value);
|
|
91
79
|
}) || null),
|
|
@@ -100,8 +88,6 @@ var DropdownInput = exports.DropdownInput = function DropdownInput(_ref) {
|
|
|
100
88
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
101
89
|
filteredValues = _useState6[0],
|
|
102
90
|
setFilteredValues = _useState6[1];
|
|
103
|
-
|
|
104
|
-
// sync selectedValue when prop changes
|
|
105
91
|
(0, _react.useEffect)(function () {
|
|
106
92
|
var match = values.find(function (v) {
|
|
107
93
|
return v.id === getId(value);
|
|
@@ -112,20 +98,17 @@ var DropdownInput = exports.DropdownInput = function DropdownInput(_ref) {
|
|
|
112
98
|
var _str$toLowerCase;
|
|
113
99
|
return str === null || str === void 0 || (_str$toLowerCase = str.toLowerCase()) === null || _str$toLowerCase === void 0 ? void 0 : _str$toLowerCase.replace(/[\s_\-+]+/g, "");
|
|
114
100
|
};
|
|
115
|
-
|
|
116
|
-
// filter logic
|
|
117
101
|
(0, _react.useEffect)(function () {
|
|
118
102
|
setFilteredValues(values.filter(function (v) {
|
|
119
103
|
var _v$searchIndex;
|
|
120
|
-
// always keep headers/dividers
|
|
121
104
|
if (v.type === "divider" || v.type === "header") return true;
|
|
122
|
-
var
|
|
123
|
-
return
|
|
105
|
+
var text = getLabelText(v).toLowerCase();
|
|
106
|
+
return text.includes(searchQuery.toLowerCase()) || normalize((_v$searchIndex = v.searchIndex) !== null && _v$searchIndex !== void 0 ? _v$searchIndex : "").includes(normalize(searchQuery));
|
|
124
107
|
}));
|
|
125
108
|
}, [searchQuery, values]);
|
|
126
109
|
var handleSelection = function handleSelection(val) {
|
|
127
110
|
setSelectedValue(val);
|
|
128
|
-
onChange
|
|
111
|
+
onChange(val);
|
|
129
112
|
};
|
|
130
113
|
var dropdownContent = /*#__PURE__*/_react["default"].createElement("div", _extends({
|
|
131
114
|
className: "dropdown"
|
|
@@ -162,18 +145,21 @@ var DropdownInput = exports.DropdownInput = function DropdownInput(_ref) {
|
|
|
162
145
|
className: "dropdown-header"
|
|
163
146
|
}, v.text);
|
|
164
147
|
}
|
|
165
|
-
|
|
166
|
-
var
|
|
148
|
+
var isActive = (selectedValue === null || selectedValue === void 0 ? void 0 : selectedValue.id) === v.id;
|
|
149
|
+
var isItemDisabled = v.disabled === true;
|
|
167
150
|
return /*#__PURE__*/_react["default"].createElement("a", {
|
|
168
151
|
key: (_v$id = v.id) !== null && _v$id !== void 0 ? _v$id : i,
|
|
169
|
-
className: "dropdown-item".concat(isActive ? " active" : ""),
|
|
152
|
+
className: "dropdown-item".concat(isActive ? " active" : "").concat(isItemDisabled ? " disabled" : ""),
|
|
170
153
|
onClick: function onClick() {
|
|
171
|
-
return handleSelection(v);
|
|
154
|
+
return !isItemDisabled && handleSelection(v);
|
|
172
155
|
},
|
|
173
156
|
style: {
|
|
174
|
-
cursor: "pointer"
|
|
175
|
-
}
|
|
176
|
-
|
|
157
|
+
cursor: isItemDisabled ? "not-allowed" : "pointer"
|
|
158
|
+
},
|
|
159
|
+
href: v.href || "#"
|
|
160
|
+
}, v.icon && /*#__PURE__*/_react["default"].createElement("span", {
|
|
161
|
+
className: "dropdown-item-icon"
|
|
162
|
+
}, v.icon), (_v$dropdownText = v.dropdownText) !== null && _v$dropdownText !== void 0 ? _v$dropdownText : v.label);
|
|
177
163
|
}), filteredValues.length === 0 && /*#__PURE__*/_react["default"].createElement("div", {
|
|
178
164
|
className: "dropdown-item text-muted"
|
|
179
165
|
}, "No results found"))));
|
|
@@ -183,26 +169,21 @@ var DropdownInput = exports.DropdownInput = function DropdownInput(_ref) {
|
|
|
183
169
|
};
|
|
184
170
|
DropdownInput.propTypes = {
|
|
185
171
|
prompt: _propTypes["default"].string.isRequired,
|
|
186
|
-
|
|
187
|
-
values: _propTypes["default"].arrayOf(_propTypes["default"].oneOfType([
|
|
188
|
-
// divider
|
|
189
|
-
_propTypes["default"].shape({
|
|
172
|
+
values: _propTypes["default"].arrayOf(_propTypes["default"].oneOfType([_propTypes["default"].shape({
|
|
190
173
|
type: _propTypes["default"].oneOf(["divider"]).isRequired
|
|
191
|
-
}),
|
|
192
|
-
// header
|
|
193
|
-
_propTypes["default"].shape({
|
|
174
|
+
}), _propTypes["default"].shape({
|
|
194
175
|
type: _propTypes["default"].oneOf(["header"]).isRequired,
|
|
195
176
|
text: _propTypes["default"].string.isRequired
|
|
196
|
-
}),
|
|
197
|
-
// normal selectable item
|
|
198
|
-
_propTypes["default"].shape({
|
|
177
|
+
}), _propTypes["default"].shape({
|
|
199
178
|
id: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]).isRequired,
|
|
200
179
|
label: _propTypes["default"].string.isRequired,
|
|
201
180
|
dropdownText: _propTypes["default"].string,
|
|
202
|
-
searchIndex: _propTypes["default"].string
|
|
181
|
+
searchIndex: _propTypes["default"].string,
|
|
182
|
+
disabled: _propTypes["default"].bool,
|
|
183
|
+
href: _propTypes["default"].string,
|
|
184
|
+
icon: _propTypes["default"].node
|
|
203
185
|
})])),
|
|
204
186
|
items: _propTypes["default"].array,
|
|
205
|
-
// alias for values
|
|
206
187
|
value: _propTypes["default"].oneOfType([_propTypes["default"].shape({
|
|
207
188
|
id: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]).isRequired
|
|
208
189
|
}), _propTypes["default"].string, _propTypes["default"].number]),
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
title: Changelog
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
+
# 0.1.125
|
|
6
|
+
|
|
7
|
+
- Added support for `disabled` in the `DropdownInput` component.
|
|
8
|
+
|
|
9
|
+
# 0.1.124
|
|
10
|
+
|
|
11
|
+
- Added support for `seperator` and `header` in the `DropdownInput` component.
|
|
12
|
+
|
|
5
13
|
# 0.1.123
|
|
6
14
|
|
|
7
15
|
- Added `icon` prop to the `Table` component.
|