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.
@@ -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
- // if it's a header/divider, it won't have dropdownText or label
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
- var children = _react.Children.toArray(node);
59
- return children.map(function (c) {
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 labelText = getLabelText(v).toLowerCase();
123
- return labelText.includes(searchQuery.toLowerCase()) || normalize((_v$searchIndex = v.searchIndex) !== null && _v$searchIndex !== void 0 ? _v$searchIndex : "").includes(normalize(searchQuery));
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 === null || onChange === void 0 || onChange(val);
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
- // normal item
166
- var isActive = (selectedValue === null || selectedValue === void 0 ? void 0 : selectedValue.id) === (_typeof(v) === "object" ? v.id : v);
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
- }, (_v$dropdownText = v.dropdownText) !== null && _v$dropdownText !== void 0 ? _v$dropdownText : v.label);
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
- // support headers, dividers, and normal items
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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tabler-react-2",
3
- "version": "0.1.125",
3
+ "version": "0.1.126",
4
4
  "description": "A react implementation of Tabler ui",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {