@gravity-ui/dashkit 8.0.2-beta.0 → 8.0.2-beta.1

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.
@@ -8,6 +8,33 @@ const cn_1 = require("../../utils/cn");
8
8
  const Item_1 = tslib_1.__importDefault(require("../Item/Item"));
9
9
  const OverlayControls_1 = tslib_1.__importDefault(require("../OverlayControls/OverlayControls"));
10
10
  const b = (0, cn_1.cn)('dashkit-grid-item');
11
+ class WindowFocusObserver {
12
+ constructor() {
13
+ this.blurHandler = (e) => {
14
+ if (e.target === window) {
15
+ this.isFocused = false;
16
+ }
17
+ };
18
+ this.focusHandler = (e) => {
19
+ if (e.target === window) {
20
+ this.isFocused = true;
21
+ }
22
+ };
23
+ this.subscribers = 0;
24
+ this.isFocused = !document.hidden;
25
+ window.addEventListener('blur', this.blurHandler, true);
26
+ window.addEventListener('focus', this.focusHandler, true);
27
+ }
28
+ // Method to get state after all blur\focus events in document are triggered
29
+ async getFocuseState() {
30
+ return new Promise((resolve) => {
31
+ requestAnimationFrame(() => {
32
+ resolve(this.isFocused);
33
+ });
34
+ });
35
+ }
36
+ }
37
+ const windowFocusObserver = new WindowFocusObserver();
11
38
  class GridItem extends react_1.default.PureComponent {
12
39
  constructor() {
13
40
  super(...arguments);
@@ -18,7 +45,11 @@ class GridItem extends react_1.default.PureComponent {
18
45
  this.setState({ isFocused: true });
19
46
  };
20
47
  this.onBlurHandler = () => {
21
- this.setState({ isFocused: false });
48
+ windowFocusObserver.getFocuseState().then((isWindowFocused) => {
49
+ if (isWindowFocused) {
50
+ this.setState({ isFocused: false });
51
+ }
52
+ });
22
53
  };
23
54
  }
24
55
  renderOverlay() {
@@ -6,6 +6,33 @@ import Item from '../Item/Item';
6
6
  import OverlayControls from '../OverlayControls/OverlayControls';
7
7
  import './GridItem.css';
8
8
  const b = cn('dashkit-grid-item');
9
+ class WindowFocusObserver {
10
+ constructor() {
11
+ this.blurHandler = (e) => {
12
+ if (e.target === window) {
13
+ this.isFocused = false;
14
+ }
15
+ };
16
+ this.focusHandler = (e) => {
17
+ if (e.target === window) {
18
+ this.isFocused = true;
19
+ }
20
+ };
21
+ this.subscribers = 0;
22
+ this.isFocused = !document.hidden;
23
+ window.addEventListener('blur', this.blurHandler, true);
24
+ window.addEventListener('focus', this.focusHandler, true);
25
+ }
26
+ // Method to get state after all blur\focus events in document are triggered
27
+ async getFocuseState() {
28
+ return new Promise((resolve) => {
29
+ requestAnimationFrame(() => {
30
+ resolve(this.isFocused);
31
+ });
32
+ });
33
+ }
34
+ }
35
+ const windowFocusObserver = new WindowFocusObserver();
9
36
  class GridItem extends React.PureComponent {
10
37
  constructor() {
11
38
  super(...arguments);
@@ -16,7 +43,11 @@ class GridItem extends React.PureComponent {
16
43
  this.setState({ isFocused: true });
17
44
  };
18
45
  this.onBlurHandler = () => {
19
- this.setState({ isFocused: false });
46
+ windowFocusObserver.getFocuseState().then((isWindowFocused) => {
47
+ if (isWindowFocused) {
48
+ this.setState({ isFocused: false });
49
+ }
50
+ });
20
51
  };
21
52
  }
22
53
  renderOverlay() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/dashkit",
3
- "version": "8.0.2-beta.0",
3
+ "version": "8.0.2-beta.1",
4
4
  "description": "Library for rendering dashboard grid layout",
5
5
  "license": "MIT",
6
6
  "repository": {