@hi-ui/tabs 4.0.0-beta.18 → 4.0.0-beta.19

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.
@@ -35,6 +35,8 @@ var typeAssertion = require('@hi-ui/type-assertion');
35
35
 
36
36
  var iconButton = require('@hi-ui/icon-button');
37
37
 
38
+ var index = require('./hooks/index.js');
39
+
38
40
  function _interopDefaultLegacy(e) {
39
41
  return e && _typeof(e) === 'object' && 'default' in e ? e : {
40
42
  'default': e
@@ -103,12 +105,39 @@ var TabList = /*#__PURE__*/React.forwardRef(function (_a, ref) {
103
105
  setTranslateY = _useState4[1];
104
106
 
105
107
  var itemsRef = React.useRef({});
106
- var showScrollBtn = false;
107
108
 
108
- if (scrollRef && innerRef) {
109
- showScrollBtn = direction === 'horizontal' ? scrollRef.clientWidth > innerRef.clientWidth : scrollRef.clientHeight > innerRef.clientHeight;
110
- }
109
+ var _useState5 = React.useState(false),
110
+ showScrollBtn = _useState5[0],
111
+ setShowScrollBtn = _useState5[1];
112
+
113
+ var showHorizontal = direction === 'horizontal'; // 响应式滚动按钮展示
111
114
 
115
+ index.useResizeObserver({
116
+ element: innerRef,
117
+ getSize: function getSize(element) {
118
+ return showHorizontal ? element.clientWidth : element.clientHeight;
119
+ },
120
+ onResize: function onResize(_, size) {
121
+ if (scrollRef) {
122
+ var _showScrollBtn = showHorizontal ? scrollRef.clientWidth > size : scrollRef.clientHeight > size;
123
+
124
+ setShowScrollBtn(_showScrollBtn);
125
+ }
126
+ }
127
+ });
128
+ index.useResizeObserver({
129
+ element: scrollRef,
130
+ getSize: function getSize(element) {
131
+ return showHorizontal ? element.clientWidth : element.clientHeight;
132
+ },
133
+ onResize: function onResize(_, size) {
134
+ if (innerRef) {
135
+ var _showScrollBtn2 = showHorizontal ? size > innerRef.clientWidth : size > innerRef.clientHeight;
136
+
137
+ setShowScrollBtn(_showScrollBtn2);
138
+ }
139
+ }
140
+ });
112
141
  var onClickTab = React.useCallback(function (key, event) {
113
142
  if (onTabClick) {
114
143
  onTabClick(key, event);
@@ -0,0 +1,55 @@
1
+ /** @LICENSE
2
+ * @hi-ui/tabs
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/tabs#readme
4
+ *
5
+ * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ 'use strict';
11
+
12
+ Object.defineProperty(exports, '__esModule', {
13
+ value: true
14
+ });
15
+
16
+ var React = require('react');
17
+
18
+ var useLatest = require('@hi-ui/use-latest');
19
+
20
+ var useResizeObserver = function useResizeObserver(_ref) {
21
+ var element = _ref.element,
22
+ onResize = _ref.onResize,
23
+ _ref$initialSize = _ref.initialSize,
24
+ initialSize = _ref$initialSize === void 0 ? 0 : _ref$initialSize,
25
+ getSize = _ref.getSize;
26
+ var getSizeLatestRef = useLatest.useLatestRef(getSize);
27
+ var onResizeLatest = useLatest.useLatestCallback(onResize);
28
+ var prevSizeRef = React.useRef(initialSize);
29
+ React.useEffect(function () {
30
+ if (element) {
31
+ var _resizeObserver = new ResizeObserver(function () {
32
+ var getSize = getSizeLatestRef.current;
33
+
34
+ if (element) {
35
+ if (getSize) {
36
+ var nextSize = getSize(element);
37
+
38
+ if (prevSizeRef.current !== nextSize) {
39
+ prevSizeRef.current = nextSize;
40
+ onResizeLatest(element, nextSize);
41
+ }
42
+ } else {
43
+ onResizeLatest(element);
44
+ }
45
+ }
46
+ });
47
+
48
+ _resizeObserver.observe(element);
49
+ }
50
+
51
+ return function () {};
52
+ }, [element, getSizeLatestRef, onResizeLatest]);
53
+ };
54
+
55
+ exports.useResizeObserver = useResizeObserver;
@@ -17,6 +17,7 @@ import { TabInk } from './TabInk.js';
17
17
  import { LeftOutlined, UpOutlined, RightOutlined, DownOutlined, PlusOutlined } from '@hi-ui/icons';
18
18
  import { isUndef } from '@hi-ui/type-assertion';
19
19
  import { IconButton } from '@hi-ui/icon-button';
20
+ import { useResizeObserver } from './hooks/index.js';
20
21
  var _role = 'tabs';
21
22
 
22
23
  var _prefix = getPrefixCls(_role);
@@ -77,12 +78,39 @@ var TabList = /*#__PURE__*/forwardRef(function (_a, ref) {
77
78
  setTranslateY = _useState4[1];
78
79
 
79
80
  var itemsRef = useRef({});
80
- var showScrollBtn = false;
81
81
 
82
- if (scrollRef && innerRef) {
83
- showScrollBtn = direction === 'horizontal' ? scrollRef.clientWidth > innerRef.clientWidth : scrollRef.clientHeight > innerRef.clientHeight;
84
- }
82
+ var _useState5 = useState(false),
83
+ showScrollBtn = _useState5[0],
84
+ setShowScrollBtn = _useState5[1];
85
85
 
86
+ var showHorizontal = direction === 'horizontal'; // 响应式滚动按钮展示
87
+
88
+ useResizeObserver({
89
+ element: innerRef,
90
+ getSize: function getSize(element) {
91
+ return showHorizontal ? element.clientWidth : element.clientHeight;
92
+ },
93
+ onResize: function onResize(_, size) {
94
+ if (scrollRef) {
95
+ var _showScrollBtn = showHorizontal ? scrollRef.clientWidth > size : scrollRef.clientHeight > size;
96
+
97
+ setShowScrollBtn(_showScrollBtn);
98
+ }
99
+ }
100
+ });
101
+ useResizeObserver({
102
+ element: scrollRef,
103
+ getSize: function getSize(element) {
104
+ return showHorizontal ? element.clientWidth : element.clientHeight;
105
+ },
106
+ onResize: function onResize(_, size) {
107
+ if (innerRef) {
108
+ var _showScrollBtn2 = showHorizontal ? size > innerRef.clientWidth : size > innerRef.clientHeight;
109
+
110
+ setShowScrollBtn(_showScrollBtn2);
111
+ }
112
+ }
113
+ });
86
114
  var onClickTab = useCallback(function (key, event) {
87
115
  if (onTabClick) {
88
116
  onTabClick(key, event);
@@ -0,0 +1,48 @@
1
+ /** @LICENSE
2
+ * @hi-ui/tabs
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/tabs#readme
4
+ *
5
+ * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ import { useRef, useEffect } from 'react';
11
+ import { useLatestRef, useLatestCallback } from '@hi-ui/use-latest';
12
+
13
+ var useResizeObserver = function useResizeObserver(_ref) {
14
+ var element = _ref.element,
15
+ onResize = _ref.onResize,
16
+ _ref$initialSize = _ref.initialSize,
17
+ initialSize = _ref$initialSize === void 0 ? 0 : _ref$initialSize,
18
+ getSize = _ref.getSize;
19
+ var getSizeLatestRef = useLatestRef(getSize);
20
+ var onResizeLatest = useLatestCallback(onResize);
21
+ var prevSizeRef = useRef(initialSize);
22
+ useEffect(function () {
23
+ if (element) {
24
+ var _resizeObserver = new ResizeObserver(function () {
25
+ var getSize = getSizeLatestRef.current;
26
+
27
+ if (element) {
28
+ if (getSize) {
29
+ var nextSize = getSize(element);
30
+
31
+ if (prevSizeRef.current !== nextSize) {
32
+ prevSizeRef.current = nextSize;
33
+ onResizeLatest(element, nextSize);
34
+ }
35
+ } else {
36
+ onResizeLatest(element);
37
+ }
38
+ }
39
+ });
40
+
41
+ _resizeObserver.observe(element);
42
+ }
43
+
44
+ return function () {};
45
+ }, [element, getSizeLatestRef, onResizeLatest]);
46
+ };
47
+
48
+ export { useResizeObserver };
@@ -0,0 +1,8 @@
1
+ interface UseResizeObserverProps {
2
+ element: HTMLElement | null;
3
+ onResize: (element: HTMLElement, size?: any) => void;
4
+ initialSize?: any;
5
+ getSize?: (element: HTMLElement) => any;
6
+ }
7
+ export declare const useResizeObserver: ({ element, onResize, initialSize, getSize, }: UseResizeObserverProps) => void;
8
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hi-ui/tabs",
3
- "version": "4.0.0-beta.18",
3
+ "version": "4.0.0-beta.19",
4
4
  "description": "A sub-package for @hi-ui/hiui.",
5
5
  "keywords": [],
6
6
  "author": "HIUI <mi-hiui@xiaomi.com>",
@@ -50,6 +50,7 @@
50
50
  "@hi-ui/icon-button": "^4.0.0-beta.10",
51
51
  "@hi-ui/icons": "^4.0.0-beta.11",
52
52
  "@hi-ui/type-assertion": "^4.0.0-beta.5",
53
+ "@hi-ui/use-latest": "^4.0.0-beta.5",
53
54
  "@hi-ui/use-uncontrolled-state": "^4.0.0-beta.5"
54
55
  },
55
56
  "peerDependencies": {
@@ -61,5 +62,5 @@
61
62
  "react": "^17.0.1",
62
63
  "react-dom": "^17.0.1"
63
64
  },
64
- "gitHead": "ef96654e009a72c3445d8df4a4182973631d00e9"
65
+ "gitHead": "9956956831546dfe051b56cf8330912a772fa86f"
65
66
  }