@pingux/astro 2.0.4-alpha.2 → 2.0.4-alpha.3

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.
@@ -19,6 +19,7 @@ exports.useListLayout = useListLayout;
19
19
  var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/values"));
20
20
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
21
21
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
22
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
22
23
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
23
24
  var _react = _interopRequireWildcard(require("react"));
24
25
  var _i18n = require("@react-aria/i18n");
@@ -91,6 +92,10 @@ var ListView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
91
92
  selectionMode = props.selectionMode,
92
93
  selectionStyle = props.selectionStyle,
93
94
  others = (0, _objectWithoutProperties2["default"])(props, _excluded);
95
+ var _useState = (0, _react.useState)(null),
96
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
97
+ hoveredItem = _useState2[0],
98
+ setHoveredItem = _useState2[1];
94
99
  var isLoading = loadingState === _loadingStates["default"].LOADING_MORE || loadingState === _loadingStates["default"].LOADING;
95
100
  var renderWrapper = function renderWrapper(parent, reusableView) {
96
101
  return (0, _react2.jsx)(_virtualizer.VirtualizerItem, {
@@ -108,6 +113,10 @@ var ListView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
108
113
  var state = (0, _list2.useListState)(_objectSpread(_objectSpread({}, props), {}, {
109
114
  selectionBehavior: selectionStyle === 'highlight' ? 'replace' : 'toggle'
110
115
  }));
116
+ state.hover = {
117
+ hoveredItem: hoveredItem,
118
+ setHoveredItem: setHoveredItem
119
+ };
111
120
  var collection = state.collection,
112
121
  selectionManager = state.selectionManager;
113
122
  var layout = useListLayout(state);
@@ -127,6 +136,11 @@ var ListView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
127
136
  others.onFocus(e);
128
137
  }
129
138
  };
139
+
140
+ // This code removes hover when scrolling ListView in the Firefox browser.
141
+ var resetHoverState = function resetHoverState() {
142
+ state.hover.setHoveredItem(null);
143
+ };
130
144
  return (0, _react2.jsx)(_ListViewContext.ListViewContext.Provider, {
131
145
  value: {
132
146
  state: state
@@ -143,7 +157,8 @@ var ListView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
143
157
  collection: collection,
144
158
  transitionDuration: 0
145
159
  }, others, {
146
- onFocus: onFocus
160
+ onFocus: onFocus,
161
+ onScroll: resetHoverState
147
162
  }), function (type, item) {
148
163
  if (type === 'item') {
149
164
  return (0, _react2.jsx)(_ListViewItem["default"], {
@@ -333,4 +333,18 @@ test('list view not receive focus when click on checkbox', function () {
333
333
  expect(listItem[0]).not.toHaveClass('is-focused');
334
334
  checkbox[0].click();
335
335
  expect(listItem[0]).not.toHaveClass('is-focused');
336
+ });
337
+ test('list view reset hover on item when scroll', function () {
338
+ getComponent();
339
+ var listView = _testWrapper.screen.getAllByRole('grid');
340
+ var listItem = _testWrapper.screen.getAllByRole('gridcell');
341
+ expect(listItem[0]).not.toHaveClass('is-hovered');
342
+ _userEvent["default"].hover(listItem[0]);
343
+ expect(listItem[0]).toHaveClass('is-hovered');
344
+ _testWrapper.fireEvent.scroll(listView[0], {
345
+ target: {
346
+ scrollY: 100
347
+ }
348
+ });
349
+ expect(listItem[0]).not.toHaveClass('is-hovered');
336
350
  });
@@ -45,7 +45,11 @@ var ListViewItem = function ListViewItem(props) {
45
45
  var _useFocusRing2 = (0, _reactAria.useFocusRing)(),
46
46
  focusProps = _useFocusRing2.focusProps,
47
47
  isFocusVisible = _useFocusRing2.isFocusVisible;
48
- var _useHover = (0, _interactions.useHover)({}),
48
+ var _useHover = (0, _interactions.useHover)({
49
+ onHoverStart: function onHoverStart() {
50
+ state.hover.setHoveredItem(item.key);
51
+ }
52
+ }),
49
53
  hoverProps = _useHover.hoverProps,
50
54
  isHovered = _useHover.isHovered;
51
55
  var _useListItem = (0, _list.useListItem)({
@@ -58,7 +62,7 @@ var ListViewItem = function ListViewItem(props) {
58
62
  var isSelected = state.selectionManager.isSelected(item.key);
59
63
  var mergedProps = (0, _reactAria.mergeProps)(raRowProps, hoverProps, focusWithinProps, focusProps);
60
64
  var _useStatusClasses = (0, _hooks.useStatusClasses)(className, {
61
- isHovered: isSelectable && isHovered && isHoverable,
65
+ isHovered: isSelectable && isHovered && isHoverable && item.key === state.hover.hoveredItem,
62
66
  isSelected: isSelected,
63
67
  isFocused: isDisabled ? false : isFocusVisible || isFocusVisibleWithin,
64
68
  hasSeparator: hasSeparator,
@@ -8,12 +8,13 @@ import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/obje
8
8
  import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
9
9
  import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
10
10
  import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
11
+ import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
11
12
  import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
12
13
  var _excluded = ["disabledKeys", "isHoverable", "loadingState", "onLoadMore", "onSelectionChange", "selectedKeys", "selectionMode", "selectionStyle"];
13
14
  import _Object$values from "@babel/runtime-corejs3/core-js-stable/object/values";
14
15
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15
16
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
16
- import React, { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';
17
+ import React, { forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';
17
18
  import { useCollator } from '@react-aria/i18n';
18
19
  import { useList } from '@react-aria/list';
19
20
  import { Virtualizer, VirtualizerItem } from '@react-aria/virtualizer';
@@ -78,6 +79,10 @@ var ListView = /*#__PURE__*/forwardRef(function (props, ref) {
78
79
  selectionMode = props.selectionMode,
79
80
  selectionStyle = props.selectionStyle,
80
81
  others = _objectWithoutProperties(props, _excluded);
82
+ var _useState = useState(null),
83
+ _useState2 = _slicedToArray(_useState, 2),
84
+ hoveredItem = _useState2[0],
85
+ setHoveredItem = _useState2[1];
81
86
  var isLoading = loadingState === loadingStates.LOADING_MORE || loadingState === loadingStates.LOADING;
82
87
  var renderWrapper = function renderWrapper(parent, reusableView) {
83
88
  return ___EmotionJSX(VirtualizerItem, {
@@ -95,6 +100,10 @@ var ListView = /*#__PURE__*/forwardRef(function (props, ref) {
95
100
  var state = useListState(_objectSpread(_objectSpread({}, props), {}, {
96
101
  selectionBehavior: selectionStyle === 'highlight' ? 'replace' : 'toggle'
97
102
  }));
103
+ state.hover = {
104
+ hoveredItem: hoveredItem,
105
+ setHoveredItem: setHoveredItem
106
+ };
98
107
  var collection = state.collection,
99
108
  selectionManager = state.selectionManager;
100
109
  var layout = useListLayout(state);
@@ -114,6 +123,11 @@ var ListView = /*#__PURE__*/forwardRef(function (props, ref) {
114
123
  others.onFocus(e);
115
124
  }
116
125
  };
126
+
127
+ // This code removes hover when scrolling ListView in the Firefox browser.
128
+ var resetHoverState = function resetHoverState() {
129
+ state.hover.setHoveredItem(null);
130
+ };
117
131
  return ___EmotionJSX(ListViewContext.Provider, {
118
132
  value: {
119
133
  state: state
@@ -130,7 +144,8 @@ var ListView = /*#__PURE__*/forwardRef(function (props, ref) {
130
144
  collection: collection,
131
145
  transitionDuration: 0
132
146
  }, others, {
133
- onFocus: onFocus
147
+ onFocus: onFocus,
148
+ onScroll: resetHoverState
134
149
  }), function (type, item) {
135
150
  if (type === 'item') {
136
151
  return ___EmotionJSX(ListViewItem, {
@@ -18,7 +18,7 @@ import { Item } from 'react-stately';
18
18
  import userEvent from '@testing-library/user-event';
19
19
  import _ from 'lodash';
20
20
  import loadingStates from '../../utils/devUtils/constants/loadingStates';
21
- import { render, screen } from '../../utils/testUtils/testWrapper';
21
+ import { fireEvent, render, screen } from '../../utils/testUtils/testWrapper';
22
22
  import CheckboxField from '../CheckboxField';
23
23
  import ListView from './ListView';
24
24
  import { jsx as ___EmotionJSX } from "@emotion/react";
@@ -330,4 +330,18 @@ test('list view not receive focus when click on checkbox', function () {
330
330
  expect(listItem[0]).not.toHaveClass('is-focused');
331
331
  checkbox[0].click();
332
332
  expect(listItem[0]).not.toHaveClass('is-focused');
333
+ });
334
+ test('list view reset hover on item when scroll', function () {
335
+ getComponent();
336
+ var listView = screen.getAllByRole('grid');
337
+ var listItem = screen.getAllByRole('gridcell');
338
+ expect(listItem[0]).not.toHaveClass('is-hovered');
339
+ userEvent.hover(listItem[0]);
340
+ expect(listItem[0]).toHaveClass('is-hovered');
341
+ fireEvent.scroll(listView[0], {
342
+ target: {
343
+ scrollY: 100
344
+ }
345
+ });
346
+ expect(listItem[0]).not.toHaveClass('is-hovered');
333
347
  });
@@ -32,7 +32,11 @@ var ListViewItem = function ListViewItem(props) {
32
32
  var _useFocusRing2 = useFocusRing(),
33
33
  focusProps = _useFocusRing2.focusProps,
34
34
  isFocusVisible = _useFocusRing2.isFocusVisible;
35
- var _useHover = useHover({}),
35
+ var _useHover = useHover({
36
+ onHoverStart: function onHoverStart() {
37
+ state.hover.setHoveredItem(item.key);
38
+ }
39
+ }),
36
40
  hoverProps = _useHover.hoverProps,
37
41
  isHovered = _useHover.isHovered;
38
42
  var _useListItem = useListItem({
@@ -45,7 +49,7 @@ var ListViewItem = function ListViewItem(props) {
45
49
  var isSelected = state.selectionManager.isSelected(item.key);
46
50
  var mergedProps = mergeProps(raRowProps, hoverProps, focusWithinProps, focusProps);
47
51
  var _useStatusClasses = useStatusClasses(className, {
48
- isHovered: isSelectable && isHovered && isHoverable,
52
+ isHovered: isSelectable && isHovered && isHoverable && item.key === state.hover.hoveredItem,
49
53
  isSelected: isSelected,
50
54
  isFocused: isDisabled ? false : isFocusVisible || isFocusVisibleWithin,
51
55
  hasSeparator: hasSeparator,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pingux/astro",
3
- "version": "2.0.4-alpha.2",
3
+ "version": "2.0.4-alpha.3",
4
4
  "description": "PingUX themeable React component library",
5
5
  "repository": {
6
6
  "type": "git",