linear-react-components-ui 0.4.76-beta.32 → 0.4.76-beta.33

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.
@@ -78,7 +78,6 @@ var SimpleSelect = /*#__PURE__*/function (_Component) {
78
78
  onDenied: undefined,
79
79
  isTyping: false
80
80
  };
81
- _this.dropdownRef = /*#__PURE__*/_react["default"].createRef();
82
81
  _this.componentId = "select-component".concat(_uuid["default"].v1());
83
82
  _this.componentRef = /*#__PURE__*/_react["default"].createRef();
84
83
  return _this;
@@ -153,7 +152,6 @@ var SimpleSelect = /*#__PURE__*/function (_Component) {
153
152
  }))
154
153
  })), opened && /*#__PURE__*/_react["default"].createElement(_Dropdown["default"], _extends({}, this.state, this.props, {
155
154
  selectFieldRef: this.componentRef,
156
- dropdownRef: this.dropdownRef,
157
155
  gridWrapperStyle: gridLayout ? window.getComputedStyle(this.gridEl) : undefined,
158
156
  handleOnSelect: this.onSelect,
159
157
  handleOnFilter: this.onFilter,
@@ -174,14 +172,14 @@ Object.defineProperty(SimpleSelect, "getDerivedStateFromProps", {
174
172
  value: function value(props, state) {
175
173
  var value = props.value,
176
174
  dataSource = props.dataSource,
177
- descriptionKey = props.descriptionKey,
178
175
  idKey = props.idKey,
179
176
  selectFirstOnEnter = props.selectFirstOnEnter,
177
+ descriptionKey = props.descriptionKey,
180
178
  remoteSearch = props.remoteSearch,
181
179
  undigitable = props.undigitable;
182
180
  var current = null;
183
181
 
184
- if (value !== state.valueFromProps && dataSource.length > 0) {
182
+ if (value !== state.valueFromProps) {
185
183
  if (value !== null) {
186
184
  current = dataSource.find(function (i) {
187
185
  return i[idKey].toString().toLowerCase() === value.toString().toLowerCase();
@@ -229,11 +227,10 @@ var _initialiseProps = function _initialiseProps() {
229
227
  enumerable: true,
230
228
  writable: true,
231
229
  value: function value(event) {
232
- var selectWrapper = _this3.selectWrapper,
233
- dropdownRef = _this3.dropdownRef;
230
+ var selectWrapper = _this3.selectWrapper;
234
231
  var target = event.target;
235
232
 
236
- if (target !== selectWrapper && !selectWrapper.contains(target) && dropdownRef.current && !dropdownRef.current.contains(target)) {
233
+ if (target !== selectWrapper && !selectWrapper.contains(target)) {
237
234
  _this3.setState({
238
235
  opened: false
239
236
  });
@@ -388,12 +385,12 @@ var _initialiseProps = function _initialiseProps() {
388
385
  e.preventDefault();
389
386
 
390
387
  _this3.onSelect(selected);
391
- } else if ([constants.keyCodes.ARROW_DOWN, constants.keyCodes.ARROW_UP].includes(e.keyCode)) {
388
+ } else if ([constants.keyCodes.ARROW_UP, constants.keyCodes.ARROW_DOWN].includes(e.keyCode)) {
392
389
  var index = dataSource.findIndex(function (d) {
393
390
  return d[idKey] === selected[idKey];
394
391
  });
395
392
 
396
- if (e.keyCode === constants.keyCodes.ARROW_UP) {
393
+ if (e.keyCode === constants.keyCodes.ARROW_DOWN) {
397
394
  index = index === dataSource.length - 1 ? 0 : index + 1;
398
395
  } else {
399
396
  index = index === 0 ? dataSource.length - 1 : index - 1;
@@ -7,9 +7,10 @@ exports.PARA_ENGANAR_O_ESLINT_JA_QUE_TENHO_SO_UMA_CONSTANTE = exports.keyCodes =
7
7
  var keyCodes = {
8
8
  TAB: 9,
9
9
  ENTER: 13,
10
- ARROW_UP: 40,
11
- ARROW_DOWN: 38,
12
- BACKSPACE: 8
10
+ ARROW_UP: 38,
11
+ ARROW_DOWN: 40,
12
+ BACKSPACE: 8,
13
+ F: 70
13
14
  };
14
15
  exports.keyCodes = keyCodes;
15
16
  var PARA_ENGANAR_O_ESLINT_JA_QUE_TENHO_SO_UMA_CONSTANTE = 1;
package/lib/list/Item.js CHANGED
@@ -21,6 +21,8 @@ var _helpers = _interopRequireDefault(require("./helpers"));
21
21
 
22
22
  var _withDropdown = require("../dropdown/withDropdown");
23
23
 
24
+ var constants = _interopRequireWildcard(require("../internals/constants"));
25
+
24
26
  var _permissionValidations = require("../permissionValidations");
25
27
 
26
28
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -44,7 +46,7 @@ function _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "und
44
46
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
45
47
 
46
48
  var Item = function Item(props) {
47
- var _onClick = props.onClick,
49
+ var onClick = props.onClick,
48
50
  leftIconName = props.leftIconName,
49
51
  leftIcon = props.leftIcon,
50
52
  displayCheckbox = props.displayCheckbox,
@@ -68,7 +70,8 @@ var Item = function Item(props) {
68
70
  var _useContext = (0, _react.useContext)(_helpers["default"]),
69
71
  handleSelectItem = _useContext.handleSelectItem,
70
72
  selectable = _useContext.selectable,
71
- selectedItemId = _useContext.selectedItemId;
73
+ selectedItemId = _useContext.selectedItemId,
74
+ selectedItemRef = _useContext.selectedItemRef;
72
75
 
73
76
  var dropdownContext = (0, _react.useContext)(_withDropdown.WithDropdownContext);
74
77
  var options = [_permissionValidations.OPTIONS_ON_DENIED.disabled, _permissionValidations.OPTIONS_ON_DENIED.unvisible];
@@ -77,6 +80,8 @@ var Item = function Item(props) {
77
80
  _useState2 = _slicedToArray(_useState, 1),
78
81
  onDenied = _useState2[0];
79
82
 
83
+ var history = (0, _reactRouterDom.useHistory)();
84
+
80
85
  var shouldDisable = function shouldDisable() {
81
86
  return disabled || onDenied.disabled;
82
87
  };
@@ -97,23 +102,42 @@ var Item = function Item(props) {
97
102
  return null;
98
103
  };
99
104
 
105
+ var handleOnSelectItem = function handleOnSelectItem(e) {
106
+ if (onClick !== undefined) onClick(e, itemId);
107
+ if (dropdownContext) dropdownContext.handleDropdownClose();
108
+ if (selectable) handleSelectItem(itemId, onClick);
109
+ };
110
+
111
+ var onKeyDown = (0, _react.useCallback)(function (e) {
112
+ if ([constants.keyCodes.ENTER].includes(e.keyCode)) {
113
+ e.preventDefault();
114
+ handleOnSelectItem(e);
115
+ if (url) history.push(url);
116
+ }
117
+ }, [url]);
118
+
100
119
  var getProps = function getProps() {
101
120
  if (shouldDisable()) return undefined;
102
- if (_onClick === undefined && dropdownContext === undefined && !selectable) return null;
121
+ if (onClick === undefined && dropdownContext === undefined && !selectable) return null;
103
122
  return {
104
123
  onClick: function onClick(e) {
105
- if (_onClick !== undefined) _onClick(e, itemId);
106
- if (dropdownContext) dropdownContext.handleDropdownClose();
107
- if (selectable) handleSelectItem(itemId, _onClick);
124
+ handleOnSelectItem(e);
108
125
  },
109
- onKeyDown: null,
110
126
  role: 'button',
127
+ onKeyDown: onKeyDown,
111
128
  tabIndex: '0'
112
129
  };
113
130
  };
114
131
 
132
+ (0, _react.useEffect)(function () {
133
+ document.addEventListener('keydown', onKeyDown);
134
+ return function () {
135
+ document.removeEventListener('keydown', onKeyDown);
136
+ };
137
+ }, []);
115
138
  if (!visible || onDenied.unvisible) return null;
116
139
  return /*#__PURE__*/_react["default"].createElement("li", _extends({
140
+ ref: itemId && selectedItemId === itemId ? selectedItemRef : null,
117
141
  style: style,
118
142
  className: "item-container ".concat(hovered && 'hovered', "\n ").concat(itemId && selectedItemId === itemId ? '-activedlist' : '')
119
143
  }, getProps(), {
package/lib/list/index.js CHANGED
@@ -33,6 +33,8 @@ var _Header = _interopRequireDefault(require("./Header"));
33
33
 
34
34
  var _Item = _interopRequireDefault(require("./Item"));
35
35
 
36
+ var constants = _interopRequireWildcard(require("../internals/constants"));
37
+
36
38
  var _Separator = _interopRequireDefault(require("./Separator"));
37
39
 
38
40
  require("../assets/styles/list.scss");
@@ -58,6 +60,19 @@ function _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "und
58
60
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
59
61
 
60
62
  var List = function List(props) {
63
+ var selectedItemRef = (0, _react.useRef)(null);
64
+ var listRef = (0, _react.useRef)(null);
65
+
66
+ var _useState = (0, _react.useState)(''),
67
+ _useState2 = _slicedToArray(_useState, 2),
68
+ selectedItemId = _useState2[0],
69
+ setSelectedItemId = _useState2[1];
70
+
71
+ var _useState3 = (0, _react.useState)([]),
72
+ _useState4 = _slicedToArray(_useState3, 2),
73
+ itensId = _useState4[0],
74
+ setItensId = _useState4[1];
75
+
61
76
  var children = props.children,
62
77
  customClass = props.customClass,
63
78
  condensed = props.condensed,
@@ -65,29 +80,92 @@ var List = function List(props) {
65
80
  style = props.style,
66
81
  selectable = props.selectable,
67
82
  onSelectItem = props.onSelectItem;
68
-
69
- var _useState = (0, _react.useState)(''),
70
- _useState2 = _slicedToArray(_useState, 2),
71
- selectedItemId = _useState2[0],
72
- setSelectedItemId = _useState2[1];
73
-
74
83
  var contextValues = {
75
84
  selectable: selectable,
76
85
  selectedItemId: selectedItemId,
77
- handleSelectItem: function handleSelectItem(selectedId, onClick) {
78
- if (!onSelectItem && onClick) setSelectedItemId(selectedId);
79
- if (onSelectItem) onSelectItem(selectedId);
86
+ selectedItemRef: selectedItemRef,
87
+ children: children,
88
+ handleSelectItem: function handleSelectItem(itemId, onClick) {
89
+ if (!onSelectItem && onClick) setSelectedItemId(itemId);
90
+ if (onSelectItem) onSelectItem(itemId);
91
+ }
92
+ };
93
+
94
+ var onKeyDown = function onKeyDown(e) {
95
+ if ([constants.keyCodes.ARROW_DOWN, constants.keyCodes.ARROW_UP].includes(e.keyCode)) {
96
+ e.preventDefault();
97
+
98
+ if (e.keyCode === constants.keyCodes.ARROW_DOWN) {
99
+ if (selectedItemId === itensId[itensId.length - 1]) {
100
+ setSelectedItemId(itensId[0]);
101
+ } else {
102
+ var index = itensId.indexOf(selectedItemId === '' ? '0' : selectedItemId);
103
+ setSelectedItemId(itensId[index + 1]);
104
+ }
105
+ } else if (e.keyCode === constants.keyCodes.ARROW_UP) {
106
+ if (selectedItemId === itensId[0]) {
107
+ setSelectedItemId(itensId[itensId.length - 1]);
108
+ } else {
109
+ var _index = itensId.indexOf(selectedItemId);
110
+
111
+ setSelectedItemId(itensId[_index - 1]);
112
+ }
113
+ }
114
+
115
+ return selectedItemRef.current && selectedItemRef.current.focus();
80
116
  }
117
+
118
+ return null;
81
119
  };
120
+
121
+ (0, _react.useEffect)(function () {
122
+ if (selectedItemRef.current && listRef.current && listRef.current.scroll) {
123
+ var selectedItemRect = selectedItemRef.current.getBoundingClientRect();
124
+ var listRect = listRef.current.getBoundingClientRect();
125
+ var defaultScrollTop = 0;
126
+ var defaultBottomOffset = 100;
127
+
128
+ if (selectedItemRect.top - selectedItemRect.height > listRect.bottom) {
129
+ listRef.current.scroll({
130
+ top: selectedItemRect.top
131
+ });
132
+ } else if (selectedItemRect.top + selectedItemRect.height - listRect.y >= listRect.height) {
133
+ listRef.current.scroll({
134
+ top: listRef.current.scrollTop + selectedItemRect.height
135
+ });
136
+ } else if (selectedItemRect.bottom < defaultBottomOffset) {
137
+ listRef.current.scroll({
138
+ top: defaultScrollTop
139
+ });
140
+ } else {
141
+ listRef.current.scroll({
142
+ top: listRef.current.scrollTop - selectedItemRect.height
143
+ });
144
+ }
145
+ }
146
+ }, [selectedItemRef.current]);
147
+ (0, _react.useEffect)(function () {
148
+ document.addEventListener('keydown', onKeyDown);
149
+ return function () {
150
+ document.removeEventListener('keydown', onKeyDown);
151
+ };
152
+ });
82
153
  (0, _react.useEffect)(function () {
83
154
  if (onSelectItem && props.selectedItemId) setSelectedItemId(props.selectedItemId);
84
155
  }, [props.selectedItemId]);
156
+ (0, _react.useEffect)(function () {
157
+ var newItensIds = children.length > 0 && children.map(function (item) {
158
+ return item.props.itemId;
159
+ }).filter(Boolean);
160
+ setItensId(newItensIds);
161
+ }, [children.length]);
85
162
  return /*#__PURE__*/_react["default"].createElement(_helpers["default"].Provider, {
86
163
  value: contextValues
87
164
  }, /*#__PURE__*/_react["default"].createElement("ul", {
88
165
  "data-testid": "list-component",
89
166
  style: style,
90
- className: "list-component ".concat(condensed && '-condensed', " ").concat(customClass, " ").concat(!transparent && '-listbackground')
167
+ ref: listRef,
168
+ className: "list-component ".concat(condensed && '-condensed', "\n ").concat(customClass, " ").concat(!transparent && '-listbackground')
91
169
  }, children));
92
170
  };
93
171