tenjin-ui-kit 0.3.65 → 0.3.67

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.
@@ -7,9 +7,7 @@ exports.default = void 0;
7
7
  var _material = require("@mui/material");
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _react = _interopRequireWildcard(require("react"));
10
- var _fi = require("react-icons/fi");
11
10
  var colors = _interopRequireWildcard(require("@mui/material/colors"));
12
- var _system = require("@mui/system");
13
11
  var _button = _interopRequireDefault(require("../button"));
14
12
  var _text = _interopRequireDefault(require("../text"));
15
13
  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); }
@@ -43,7 +41,7 @@ var determineSelectedOptions = function determineSelectedOptions(options, select
43
41
  });
44
42
  });
45
43
  };
46
- var ValueSelector = function ValueSelector(_ref) {
44
+ var ValueSelector = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
47
45
  var options = _ref.options,
48
46
  valueKey = _ref.valueKey,
49
47
  displayKey = _ref.displayKey,
@@ -73,6 +71,43 @@ var ValueSelector = function ValueSelector(_ref) {
73
71
  _useState8 = _slicedToArray(_useState7, 2),
74
72
  filteredLocalOptions = _useState8[0],
75
73
  setFilteredLocalOptions = _useState8[1];
74
+ var _useState9 = (0, _react.useState)(-1),
75
+ _useState10 = _slicedToArray(_useState9, 2),
76
+ activeIndex = _useState10[0],
77
+ setActiveIndex = _useState10[1];
78
+ var itemRefs = (0, _react.useRef)([]);
79
+ (0, _react.useImperativeHandle)(ref, function () {
80
+ return {
81
+ handleKeyDown: function handleKeyDown(e) {
82
+ if (!["ArrowDown", "ArrowUp", "Enter"].includes(e.key)) return;
83
+ if (e.key === "ArrowDown") {
84
+ e.preventDefault();
85
+ setActiveIndex(function (prev) {
86
+ if (filteredLocalOptions.length === 0) return -1;
87
+ return prev < filteredLocalOptions.length - 1 ? prev + 1 : 0;
88
+ });
89
+ } else if (e.key === "ArrowUp") {
90
+ e.preventDefault();
91
+ setActiveIndex(function (prev) {
92
+ if (filteredLocalOptions.length === 0) return -1;
93
+ return prev > 0 ? prev - 1 : filteredLocalOptions.length - 1;
94
+ });
95
+ } else if (e.key === "Enter") {
96
+ if (activeIndex >= 0 && activeIndex < filteredLocalOptions.length) {
97
+ e.preventDefault();
98
+ handleSelection(filteredLocalOptions[activeIndex]);
99
+ }
100
+ }
101
+ }
102
+ };
103
+ });
104
+ (0, _react.useEffect)(function () {
105
+ if (activeIndex >= 0 && itemRefs.current[activeIndex]) {
106
+ itemRefs.current[activeIndex].scrollIntoView({
107
+ block: "nearest"
108
+ });
109
+ }
110
+ }, [activeIndex]);
76
111
  (0, _react.useEffect)(function () {
77
112
  resolveOptions();
78
113
  }, []);
@@ -208,21 +243,30 @@ var ValueSelector = function ValueSelector(_ref) {
208
243
  }
209
244
  }, (filteredLocalOptions === null || filteredLocalOptions === void 0 ? void 0 : filteredLocalOptions.length) === 0 ? /*#__PURE__*/_react.default.createElement(_text.default, {
210
245
  color: "secondary"
211
- }, "No Data") : filteredLocalOptions.map(function (o) {
246
+ }, "No Data") : filteredLocalOptions.map(function (o, index) {
212
247
  var altVal = o[avatarKey] === "/" ? " " : o[displayKey];
213
248
  var bgcAvatar = colors[o[colorKey]] ? colors[o[colorKey]][500] : "red";
214
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_material.ListItem, {
249
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
250
+ key: o[valueKey]
251
+ }, /*#__PURE__*/_react.default.createElement(_material.ListItem, {
215
252
  dense: true,
216
253
  disablePadding: true,
217
- key: o[valueKey],
218
- sx: o.selected && {
254
+ ref: function ref(el) {
255
+ return itemRefs.current[index] = el;
256
+ },
257
+ sx: _objectSpread(_objectSpread({}, o.selected && {
219
258
  backgroundColor: "#F5FAFF"
220
- }
259
+ }), activeIndex === index && {
260
+ backgroundColor: theme.palette.action.hover
261
+ })
221
262
  }, /*#__PURE__*/_react.default.createElement(_material.ListItemButton, {
222
263
  disableRipple: true,
223
264
  dense: true,
224
265
  onClick: function onClick() {
225
266
  return handleSelection(o);
267
+ },
268
+ onMouseEnter: function onMouseEnter() {
269
+ return setActiveIndex(index);
226
270
  }
227
271
  }, multiple && /*#__PURE__*/_react.default.createElement(_material.ListItemIcon, {
228
272
  sx: {
@@ -290,7 +334,7 @@ var ValueSelector = function ValueSelector(_ref) {
290
334
  semibold: true,
291
335
  variant: "caption"
292
336
  }, "Clear Selection"))))));
293
- };
337
+ });
294
338
  ValueSelector.propTypes = {
295
339
  label: _propTypes.default.string.isRequired,
296
340
  options: _propTypes.default.array,
@@ -8,11 +8,10 @@ exports.default = void 0;
8
8
  var _material = require("@mui/material");
9
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
10
  var _react = _interopRequireWildcard(require("react"));
11
- var _ValueSelector = _interopRequireDefault(require("./ValueSelector"));
12
11
  var _bs = require("react-icons/bs");
13
- var _system = require("@mui/system");
14
- var _text = _interopRequireDefault(require("../text"));
15
12
  var _button = _interopRequireDefault(require("../button"));
13
+ var _text = _interopRequireDefault(require("../text"));
14
+ var _ValueSelector = _interopRequireDefault(require("./ValueSelector"));
16
15
  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); }
17
16
  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; }
18
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -75,6 +74,15 @@ var Filter = function Filter(_ref) {
75
74
  _useState8 = _slicedToArray(_useState7, 2),
76
75
  filter = _useState8[0],
77
76
  setFilter = _useState8[1];
77
+ var valueSelectorRef = (0, _react.useRef)(null);
78
+ var handleKeyDown = function handleKeyDown(e) {
79
+ if (["ArrowDown", "ArrowUp", "Enter"].includes(e.key)) {
80
+ e.stopPropagation();
81
+ }
82
+ if (valueSelectorRef.current) {
83
+ valueSelectorRef.current.handleKeyDown(e);
84
+ }
85
+ };
78
86
  var handleFilterChange = function handleFilterChange(e) {
79
87
  var value = e.target.value;
80
88
  setFilter(value);
@@ -107,6 +115,7 @@ var Filter = function Filter(_ref) {
107
115
  anchorEl: menuAnchor,
108
116
  open: Boolean(menuAnchor),
109
117
  onClose: handleMenuClose,
118
+ onKeyDownCapture: handleKeyDown,
110
119
  PaperProps: {
111
120
  style: {
112
121
  width: "25ch",
@@ -136,6 +145,7 @@ var Filter = function Filter(_ref) {
136
145
  paddingBottom: 1.5
137
146
  }, /*#__PURE__*/_react.default.createElement(_material.TextField, {
138
147
  fullWidth: true,
148
+ autoFocus: true,
139
149
  value: filter,
140
150
  onChange: handleFilterChange,
141
151
  placeholder: "Type to search...",
@@ -185,6 +195,7 @@ var Filter = function Filter(_ref) {
185
195
  width: "100%",
186
196
  height: 10
187
197
  })) : /*#__PURE__*/_react.default.createElement(_ValueSelector.default, {
198
+ ref: valueSelectorRef,
188
199
  key: JSON.stringify(filter),
189
200
  options: filter ? options.filter(function (data) {
190
201
  return "".concat(data.id).concat(data.name).trim().toLowerCase().includes(filter.trim().toLowerCase());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tenjin-ui-kit",
3
- "version": "0.3.65",
3
+ "version": "0.3.67",
4
4
  "repository": {
5
5
  "url": "git+https://gitlab.com/yethi/react/tenjin-ui-kit.git"
6
6
  },
@@ -112,13 +112,13 @@
112
112
  "peerDependencies": {
113
113
  "@emotion/react": "^11.10.5",
114
114
  "@emotion/styled": "^11.10.5",
115
+ "@mui/lab": "5.0.0-alpha.116",
115
116
  "@mui/material": "^5.11.3",
116
117
  "@testing-library/jest-dom": "^5.16.5",
117
118
  "@testing-library/react": "^13.4.0",
118
119
  "@testing-library/user-event": "^13.5.0",
119
120
  "react": "^18.2.0",
120
121
  "react-dom": "^18.2.0",
121
- "react-router-dom": "^6.6.1",
122
- "@mui/lab": "5.0.0-alpha.116"
122
+ "react-router-dom": "^6.6.1"
123
123
  }
124
124
  }