linear-react-components-ui 0.4.76-beta.23 → 0.4.76-beta.26

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.
@@ -731,3 +731,23 @@
731
731
  left: 100%;
732
732
  }
733
733
  }
734
+
735
+ @keyframes slideRightToLeftWithFade {
736
+ from {
737
+ opacity: 0;
738
+ transform: translateX(2%);
739
+ } to {
740
+ opacity: 1;
741
+ transform: translateX(0);
742
+ }
743
+ }
744
+
745
+ @keyframes slideLeftToRightWithFade {
746
+ from {
747
+ opacity: 0;
748
+ transform: translateX(-2%);
749
+ } to {
750
+ opacity: 1;
751
+ transform: translateX(0);
752
+ }
753
+ }
@@ -19,6 +19,19 @@
19
19
  > .bodycontainer {
20
20
  overflow-y: auto;
21
21
  }
22
+ > .bodycontainer > .innertable > .tbody,
23
+ > .tbody {
24
+ position: relative;
25
+ &.skeleton-transparency::before {
26
+ content: '';
27
+ position: absolute;
28
+ width: 100%;
29
+ height: 100%;
30
+ background: rgb(255,255,255);
31
+ background: linear-gradient( 180deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.2) 30%,
32
+ rgba(255,255,255,0.6) 70%,rgba(255,255,255,0.8) 100%);
33
+ }
34
+ }
22
35
  > .headercontainer > .innertable > .theader > .trow,
23
36
  > .bodycontainer > .innertable > .tbody > .trow,
24
37
  > .theader > .trow,
@@ -0,0 +1,112 @@
1
+ @import "commons.scss";
2
+ @import "colors.scss";
3
+ @import "effects.scss";
4
+
5
+ $step-arrow-size: 22px;
6
+ $step-arrow-shadow-size: 26px;
7
+ %step-arrow {
8
+ content: '';
9
+ position: absolute;
10
+ border-bottom: $step-arrow-size solid transparent;
11
+ border-right: $step-arrow-size solid #fff;
12
+ border-top: $step-arrow-size solid transparent;
13
+ }
14
+ %step-arrow-shadow {
15
+ content: '';
16
+ position: absolute;
17
+ border-bottom: $step-arrow-shadow-size solid transparent;
18
+ border-right: $step-arrow-shadow-size solid rgba(0, 0, 0, 0.6);
19
+ border-top: $step-arrow-shadow-size solid transparent;
20
+ }
21
+ .uitour-component {
22
+ position: absolute;
23
+ width: 100%;
24
+ height: 100vh;
25
+ left: 0;
26
+ top: 0;
27
+ z-index: 99999999999999999999;
28
+ > .step {
29
+ background-color: #fff;
30
+ position: relative;
31
+ max-width: 450px;
32
+ display: flex;
33
+ flex-direction: column;
34
+ border: 3px solid rgba(0, 0, 0, 0.6);
35
+ border-radius: 8px;
36
+ padding: 5px 0;
37
+ &.-left {
38
+ animation: slideRightToLeftWithFade 0.5s;
39
+ &:before {
40
+ @extend %step-arrow-shadow;
41
+ top: 6px;
42
+ left: -$step-arrow-shadow-size;
43
+ }
44
+ &:after {
45
+ @extend %step-arrow;
46
+ top: 10px;
47
+ left: -$step-arrow-size;
48
+ }
49
+ }
50
+ &.-right {
51
+ animation: slideLeftToRightWithFade 0.5s;
52
+ &:before {
53
+ @extend %step-arrow-shadow;
54
+ top: 6px;
55
+ right: -$step-arrow-shadow-size;
56
+ transform: rotate(180deg);
57
+ }
58
+ &:after {
59
+ @extend %step-arrow;
60
+ top: 10px;
61
+ right: -$step-arrow-size;
62
+ transform: rotate(180deg);
63
+ }
64
+ }
65
+ > .closebutton {
66
+ align-self: flex-end;
67
+ padding: 0 5px 5px;
68
+ line-height: 0;
69
+ }
70
+ > .content {
71
+ width: 100%;
72
+ padding: 0px 20px;
73
+ margin-bottom: 0;
74
+ display: flex;
75
+ > .number {
76
+ display: flex;
77
+ width: 40px;
78
+ height: 40px;
79
+ align-items: center;
80
+ justify-content: center;
81
+ border-radius: 50%;
82
+ background-color: $success-color;
83
+ color: #fff;
84
+ margin-right: 10px;
85
+ font-weight: bold;
86
+ font-size: 20px;
87
+ line-height: 0;
88
+ }
89
+ > .about {
90
+ flex: 1;
91
+ margin-bottom: 10px;
92
+ > h3 {
93
+ font-size: 16px;
94
+ font-weight: bold;
95
+ }
96
+ > .description {
97
+ font-size: 14px;
98
+ line-height: 18px;
99
+ strong {
100
+ font-weight: bold;
101
+ }
102
+ }
103
+ }
104
+ }
105
+ > .footer {
106
+ display: flex;
107
+ justify-content: flex-end;
108
+ gap: 10px;
109
+ padding: 5px 10px 10px;
110
+ }
111
+ }
112
+ }
package/lib/form/index.js CHANGED
@@ -91,8 +91,7 @@ var Form = function Form(_ref) {
91
91
  onValidateForm = _ref.onValidateForm,
92
92
  externalFieldErrors = _ref.externalFieldErrors,
93
93
  onSubmit = _ref.onSubmit,
94
- skeletonize = _ref.skeletonize,
95
- disabled = _ref.disabled;
94
+ skeletonize = _ref.skeletonize;
96
95
 
97
96
  var _useState = (0, _react.useState)(dataSource),
98
97
  _useState2 = _slicedToArray(_useState, 2),
@@ -232,29 +231,10 @@ var Form = function Form(_ref) {
232
231
  };
233
232
  };
234
233
 
235
- var formProps = function formProps() {
236
- var propsForm = null;
237
-
238
- if (!disabled) {
239
- propsForm = {
240
- onSubmit: function onSubmit(e) {
241
- return e.preventDefault();
242
- },
243
- onKeyPress: function onKeyPress(e) {
244
- return submitOnEnter(e);
245
- }
246
- };
247
- }
248
-
249
- return propsForm;
250
- };
251
-
252
234
  (0, _react.useEffect)(function () {
253
- if (!disabled) {
254
- handlerSubmit(onFormSubmit);
255
- if (handlerReset) handlerReset(onReset);
256
- if (handlerValidates) handlerValidates(checkIsValid);
257
- }
235
+ handlerSubmit(onFormSubmit);
236
+ if (handlerReset) handlerReset(onReset);
237
+ if (handlerValidates) handlerValidates(checkIsValid);
258
238
  }, [data]);
259
239
  (0, _react.useEffect)(function () {
260
240
  if (securityBeforeUnload) {
@@ -267,24 +247,27 @@ var Form = function Form(_ref) {
267
247
  };
268
248
  }, [securityBeforeUnload, onBeforeUnload]);
269
249
  (0, _react.useEffect)(function () {
270
- if (!disabled) {
271
- if (submitOnPressEnterKey !== submitFormOnEnter || dataSource !== originalData) {
272
- setData(dataSource);
273
- setOriginalData(function (prevState) {
274
- return prevState || dataSource;
275
- });
276
- setSubmitFormOnEnter(submitOnPressEnterKey);
277
- }
250
+ if (submitOnPressEnterKey !== submitFormOnEnter || dataSource !== originalData) {
251
+ setData(dataSource);
252
+ setOriginalData(function (prevState) {
253
+ return prevState || dataSource;
254
+ });
255
+ setSubmitFormOnEnter(submitOnPressEnterKey);
278
256
  }
279
257
  }, [submitOnPressEnterKey, dataSource]);
280
258
  return /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, /*#__PURE__*/_react["default"].createElement(_helpers.FormContext.Provider, {
281
259
  value: getContextValue()
282
- }, /*#__PURE__*/_react["default"].createElement("form", _extends({
283
- style: style
284
- }, formProps(), {
260
+ }, /*#__PURE__*/_react["default"].createElement("form", {
261
+ style: style,
262
+ onSubmit: function onSubmit(e) {
263
+ return e.preventDefault();
264
+ },
265
+ onKeyPress: function onKeyPress(e) {
266
+ return submitOnEnter(e);
267
+ },
285
268
  role: "presentation",
286
269
  className: "form-component ".concat(customClass)
287
- }), children)), /*#__PURE__*/_react["default"].createElement(_dialog.DialogQuestion, {
270
+ }, children)), /*#__PURE__*/_react["default"].createElement(_dialog.DialogQuestion, {
288
271
  zIndex: "99999999",
289
272
  title: securityTitle || 'Dados Alterados',
290
273
  text: securityText || 'Você possui dados alterados, confirma o fechamento?',
@@ -310,8 +293,7 @@ Form.propTypes = {
310
293
  securityTitle: _propTypes["default"].string,
311
294
  securityText: _propTypes["default"].string,
312
295
  externalFieldErrors: _propTypes["default"].object,
313
- skeletonize: _propTypes["default"].bool,
314
- disabled: _propTypes["default"].bool
296
+ skeletonize: _propTypes["default"].bool
315
297
  };
316
298
  Form.defaultProps = {
317
299
  onValidateForm: undefined,
@@ -325,8 +307,7 @@ Form.defaultProps = {
325
307
  securityTitle: null,
326
308
  securityText: null,
327
309
  externalFieldErrors: {},
328
- skeletonize: false,
329
- disabled: false
310
+ skeletonize: false
330
311
  };
331
312
  var _default = Form;
332
313
  exports["default"] = _default;
@@ -554,6 +554,10 @@ function getIcons() {
554
554
  flipVertical4: {
555
555
  viewbox: '0 0 16 16',
556
556
  paths: ['M0.854 5.146c-0.143-0.143-0.358-0.186-0.545-0.108s-0.309 0.26-0.309 0.462v10c0 0.202 0.122 0.385 0.309 0.462 0.062 0.026 0.127 0.038 0.191 0.038 0.13 0 0.258-0.051 0.354-0.146l5-5c0.195-0.195 0.195-0.512 0-0.707l-5-5z', 'M7.5 7c-0.276 0-0.5-0.224-0.5-0.5v-1c0-0.276 0.224-0.5 0.5-0.5s0.5 0.224 0.5 0.5v1c0 0.276-0.224 0.5-0.5 0.5z', 'M7.5 10c-0.276 0-0.5-0.224-0.5-0.5v-1c0-0.276 0.224-0.5 0.5-0.5s0.5 0.224 0.5 0.5v1c0 0.276-0.224 0.5-0.5 0.5z', 'M7.5 13c-0.276 0-0.5-0.224-0.5-0.5v-1c0-0.276 0.224-0.5 0.5-0.5s0.5 0.224 0.5 0.5v1c0 0.276-0.224 0.5-0.5 0.5z', 'M7.5 16c-0.276 0-0.5-0.224-0.5-0.5v-1c0-0.276 0.224-0.5 0.5-0.5s0.5 0.224 0.5 0.5v1c0 0.276-0.224 0.5-0.5 0.5z', 'M14.691 5.038c-0.062-0.026-0.127-0.038-0.191-0.038-0.13 0-0.258 0.051-0.354 0.146l-5 5c-0.195 0.195-0.195 0.512 0 0.707l5 5c0.143 0.143 0.358 0.186 0.545 0.108s0.309-0.26 0.309-0.462v-10c0-0.202-0.122-0.385-0.309-0.462zM13.875 13.991l-3.491-3.491 3.491-3.491v6.982z', 'M11.5 3c-0.943-1.257-2.419-2-4-2-1.672 0-3.226 0.831-4.158 2.222-0.154 0.229-0.092 0.54 0.137 0.694s0.54 0.092 0.694-0.137c0.745-1.113 1.989-1.778 3.327-1.778 1.313 0 2.534 0.64 3.284 1.716l-1.284 1.284h3.5v-3.5l-1.5 1.5z']
557
+ },
558
+ tools: {
559
+ viewbox: '0 0 20 16',
560
+ paths: ['M7.696 11.009l2.295 2.295-1.823 2.341c-0.334 0.437-0.926 0.476-1.315 0.087l-1.586-1.586c-0.389-0.389-0.35-0.98 0.087-1.315l2.341-1.823zM19.899 4.101l-2.399 2.399-3-3 2.399-2.399c-0.289-0.066-0.59-0.101-0.899-0.101-2.209 0-4 1.791-4 4 0 0.797 0.233 1.539 0.635 2.163l-2.233 1.739-3.402-3.402 4.5-4.5h-5l-2.22 2.22-0.22-0.22h-1.061v1.061l0.22 0.22-3.22 3.22 2.5 2.5 3-3 9 9 1.5-1.5-3.902-3.902 1.739-2.233c0.624 0.402 1.366 0.635 2.163 0.635 2.209 0 4-1.791 4-4 0-0.309-0.035-0.61-0.101-0.899z']
557
561
  }
558
562
  };
559
563
  return icons;
@@ -79,7 +79,12 @@ var InputTextBase = function InputTextBase(props) {
79
79
  onDeniedActions = props.onDeniedActions,
80
80
  handlerSetOnDenied = props.handlerSetOnDenied,
81
81
  targetRef = props.targetRef,
82
- skeletonize = props.skeletonize;
82
+ skeletonize = props.skeletonize,
83
+ style = props.style,
84
+ styleForInputContent = props.styleForInputContent,
85
+ styleForWrapper = props.styleForWrapper,
86
+ styleForLabel = props.styleForLabel,
87
+ styleForSideButtons = props.styleForSideButtons;
83
88
  var options = [_permissionValidations.OPTIONS_ON_DENIED.disabled, _permissionValidations.OPTIONS_ON_DENIED.unvisible, _permissionValidations.OPTIONS_ON_DENIED.readOnly, _permissionValidations.OPTIONS_ON_DENIED.hideContent];
84
89
 
85
90
  var _useState = (0, _react.useState)(onDeniedActions || (0, _permissionValidations.actionsOnPermissionDenied)(permissionAttr, options)),
@@ -153,23 +158,28 @@ var InputTextBase = function InputTextBase(props) {
153
158
 
154
159
  if (!visible || unvisible) return null;
155
160
  return /*#__PURE__*/_react["default"].createElement("div", {
161
+ style: style,
156
162
  className: "input-base-component ".concat(skeletonize ? '-skeletonized' : '', " ").concat(customClass),
157
163
  ref: inputBaseRef
158
164
  }, label && /*#__PURE__*/_react["default"].createElement("div", {
159
165
  className: "labelcontainer"
160
166
  }, /*#__PURE__*/_react["default"].createElement("span", {
167
+ style: styleForLabel,
161
168
  className: "label ".concat(customClassForLabel, " ").concat(labelUppercase && ' -uppercase')
162
169
  }, label, required && /*#__PURE__*/_react["default"].createElement("span", {
163
170
  className: "-requiredlabel"
164
171
  }, "*"))), /*#__PURE__*/_react["default"].createElement("div", {
165
172
  "data-testid": "testInputWrapper",
173
+ style: styleForWrapper,
166
174
  className: helpers.getInputWrapperClass(_extends({}, props, {
167
175
  disabled: shouldDisable() || hideContent
168
176
  }))
169
177
  }, leftElements && /*#__PURE__*/_react["default"].createElement("div", {
178
+ style: styleForSideButtons,
170
179
  className: "sidebuttons ".concat(customClassForSideButtons)
171
180
  }, leftElements), /*#__PURE__*/_react["default"].createElement("div", {
172
181
  "data-testid": "testInputContent",
182
+ style: styleForInputContent,
173
183
  className: "inputcontent ".concat(customClassForInputContent)
174
184
  }, type === 'textarea' ? /*#__PURE__*/_react["default"].createElement("textarea", _extends({
175
185
  rows: props.rows,
@@ -223,7 +233,12 @@ InputTextBase.propTypes = {
223
233
  handlerSetOnDenied: _propTypes["default"].func,
224
234
  targetRef: _propTypes["default"].func,
225
235
  gridLayout: _propTypes["default"].string,
226
- skeletonize: _propTypes["default"].bool
236
+ skeletonize: _propTypes["default"].bool,
237
+ style: _propTypes["default"].object,
238
+ styleForInputContent: _propTypes["default"].object,
239
+ styleForWrapper: _propTypes["default"].object,
240
+ styleForLabel: _propTypes["default"].object,
241
+ styleForSideButtons: _propTypes["default"].object
227
242
  };
228
243
  InputTextBase.defaultProps = {
229
244
  value: undefined,
@@ -266,7 +281,12 @@ InputTextBase.defaultProps = {
266
281
  handlerSetOnDenied: undefined,
267
282
  targetRef: undefined,
268
283
  gridLayout: undefined,
269
- skeletonize: false
284
+ skeletonize: false,
285
+ style: {},
286
+ styleForInputContent: {},
287
+ styleForWrapper: {},
288
+ styleForLabel: {},
289
+ styleForSideButtons: {}
270
290
  };
271
291
 
272
292
  var _default = (0, _inputHOC["default"])((0, _withTooltip["default"])(InputTextBase));
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ var getCalendarDropdownStyle = function getCalendarDropdownStyle(_ref) {
9
+ var topPosition = _ref.topPosition,
10
+ leftPosition = _ref.leftPosition,
11
+ width = _ref.width;
12
+ return "top: ".concat(topPosition, "px;\n left: ").concat(leftPosition, "px;\n width:").concat(width, "px");
13
+ };
14
+
15
+ var _default = getCalendarDropdownStyle;
16
+ exports["default"] = _default;
@@ -7,8 +7,6 @@ exports["default"] = void 0;
7
7
 
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
 
10
- var _propTypes = _interopRequireDefault(require("prop-types"));
11
-
12
10
  var _BaseMask = _interopRequireDefault(require("./BaseMask"));
13
11
 
14
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -16,17 +14,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
16
14
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
17
15
 
18
16
  var PhoneField = function PhoneField(props) {
19
- var cellNumber = props.cellNumber;
20
17
  return /*#__PURE__*/_react["default"].createElement(_BaseMask["default"], _extends({}, props, {
21
- mask: cellNumber ? '(00) 00000-0000' : '(00) 0000-0000'
18
+ mask: "(00) 0000-0000"
22
19
  }));
23
20
  };
24
21
 
25
- PhoneField.propTypes = {
26
- cellNumber: _propTypes["default"].bool
27
- };
28
- PhoneField.defaultProps = {
29
- cellNumber: false
30
- };
31
22
  var _default = PhoneField;
32
23
  exports["default"] = _default;
@@ -270,12 +270,12 @@ var MultipleSelect = /*#__PURE__*/function (_Component) {
270
270
 
271
271
  if (e.keyCode === constants.keyCodes.ENTER) {
272
272
  this.onSelect(selected);
273
- } else if ([constants.keyCodes.ARROW_DOWN, constants.keyCodes.ARROW_UP].includes(e.keyCode)) {
273
+ } else if ([constants.keyCodes.ARROW_UP, constants.keyCodes.ARROW_DOWN].includes(e.keyCode)) {
274
274
  var index = dataSource.findIndex(function (d) {
275
275
  return d === selected;
276
276
  });
277
277
 
278
- if (e.keyCode === constants.keyCodes.ARROW_UP) {
278
+ if (e.keyCode === constants.keyCodes.ARROW_DOWN) {
279
279
  index = index === dataSource.length - 1 ? 0 : index + 1;
280
280
  } else {
281
281
  index = index === 0 ? dataSource.length - 1 : index - 1;
@@ -385,12 +385,12 @@ var _initialiseProps = function _initialiseProps() {
385
385
  e.preventDefault();
386
386
 
387
387
  _this3.onSelect(selected);
388
- } 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)) {
389
389
  var index = dataSource.findIndex(function (d) {
390
390
  return d[idKey] === selected[idKey];
391
391
  });
392
392
 
393
- if (e.keyCode === constants.keyCodes.ARROW_UP) {
393
+ if (e.keyCode === constants.keyCodes.ARROW_DOWN) {
394
394
  index = index === dataSource.length - 1 ? 0 : index + 1;
395
395
  } else {
396
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,16 +102,28 @@ 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 = function onKeyDown(e) {
112
+ if ([constants.keyCodes.ENTER].includes(e.keyCode)) {
113
+ e.preventDefault();
114
+ handleOnSelectItem(e);
115
+ if (url) history.push(url);
116
+ }
117
+ };
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,
126
+ onKeyDown: onKeyDown,
110
127
  role: 'button',
111
128
  tabIndex: '0'
112
129
  };
@@ -114,6 +131,7 @@ var Item = function Item(props) {
114
131
 
115
132
  if (!visible || onDenied.unvisible) return null;
116
133
  return /*#__PURE__*/_react["default"].createElement("li", _extends({
134
+ ref: itemId && selectedItemId === itemId ? selectedItemRef : null,
117
135
  style: style,
118
136
  className: "item-container ".concat(hovered && 'hovered', "\n ").concat(itemId && selectedItemId === itemId ? '-activedlist' : '')
119
137
  }, 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