@ucloud-fe/react-components 1.5.1 → 1.5.2

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.
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.default = void 0;
11
+
12
+ var _newArrowCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/newArrowCheck"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
17
+
18
+ var _resizeObserverPolyfill = _interopRequireDefault(require("resize-observer-polyfill"));
19
+
20
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+
22
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+
24
+ var DEFAULT_DEP = [];
25
+ /**
26
+ * 计算容器内的元素最大展示数量
27
+ * @returns {[number, number, boolean]} [当前测试的展示数, 最终确定的展示数, 是否在测试过程中]
28
+ */
29
+
30
+ var useOverflow = function useOverflow(_ref) {
31
+ var _this = this;
32
+
33
+ var containerRef = _ref.containerRef,
34
+ _ref$defaultCount = _ref.defaultCount,
35
+ defaultCount = _ref$defaultCount === void 0 ? 0 : _ref$defaultCount,
36
+ maxCount = _ref.maxCount,
37
+ _ref$minCount = _ref.minCount,
38
+ minCount = _ref$minCount === void 0 ? 0 : _ref$minCount;
39
+ var deps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_DEP;
40
+
41
+ var _useState = (0, _react.useState)(function () {
42
+ (0, _newArrowCheck2.default)(this, _this);
43
+ return Math.min(defaultCount, maxCount);
44
+ }.bind(this)),
45
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
46
+ count = _useState2[0],
47
+ setCount = _useState2[1];
48
+
49
+ var _useState3 = (0, _react.useState)(count),
50
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
51
+ measureCount = _useState4[0],
52
+ setMeasureCount = _useState4[1];
53
+
54
+ var _useState5 = (0, _react.useState)(null),
55
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
56
+ latestValidCount = _useState6[0],
57
+ setLatestValidCount = _useState6[1];
58
+
59
+ var _useState7 = (0, _react.useState)(true),
60
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
61
+ measuring = _useState8[0],
62
+ setMeasuring = _useState8[1];
63
+
64
+ var startMeasuring = (0, _react.useCallback)(function () {
65
+ (0, _newArrowCheck2.default)(this, _this);
66
+ setMeasuring(true);
67
+ setLatestValidCount(null);
68
+ }.bind(this), []);
69
+ var endMeasuring = (0, _react.useCallback)(function (measureCount) {
70
+ (0, _newArrowCheck2.default)(this, _this);
71
+ setMeasuring(false);
72
+ setMeasureCount(measureCount);
73
+ }.bind(this), []);
74
+ (0, _react.useEffect)(function () {
75
+ (0, _newArrowCheck2.default)(this, _this);
76
+ startMeasuring(); // eslint-disable-next-line react-hooks/exhaustive-deps
77
+ }.bind(this), deps);
78
+ (0, _react.useEffect)(function () {
79
+ (0, _newArrowCheck2.default)(this, _this);
80
+ // reset when config changed
81
+ startMeasuring();
82
+ }.bind(this), [minCount, maxCount, startMeasuring]);
83
+ var measuringRef = (0, _react.useRef)(measuring);
84
+ (0, _react.useEffect)(function () {
85
+ (0, _newArrowCheck2.default)(this, _this);
86
+ measuringRef.current = measuring;
87
+ }.bind(this), [measuring]);
88
+ (0, _react.useLayoutEffect)(function () {
89
+ var _this2 = this;
90
+
91
+ (0, _newArrowCheck2.default)(this, _this);
92
+ var containerDOM = containerRef === null || containerRef === void 0 ? void 0 : containerRef.current;
93
+ var resizeObserver = null;
94
+
95
+ if (containerDOM) {
96
+ resizeObserver = new _resizeObserverPolyfill.default(function () {
97
+ (0, _newArrowCheck2.default)(this, _this2);
98
+
99
+ if (!measuringRef.current) {
100
+ startMeasuring();
101
+ }
102
+ }.bind(this));
103
+ resizeObserver.observe(containerDOM);
104
+ }
105
+
106
+ return function () {
107
+ (0, _newArrowCheck2.default)(this, _this2);
108
+
109
+ if (resizeObserver) {
110
+ resizeObserver.disconnect();
111
+ }
112
+ }.bind(this);
113
+ }.bind(this), [containerRef, startMeasuring]);
114
+ (0, _react.useLayoutEffect)(function () {
115
+ (0, _newArrowCheck2.default)(this, _this);
116
+ var containerDOM = containerRef === null || containerRef === void 0 ? void 0 : containerRef.current;
117
+ if (!containerDOM) return;
118
+
119
+ if (count === latestValidCount) {
120
+ endMeasuring(latestValidCount);
121
+ return;
122
+ }
123
+
124
+ var newCount = count;
125
+
126
+ if (containerDOM.offsetWidth >= containerDOM.scrollWidth) {
127
+ setLatestValidCount(count);
128
+ newCount = Math.min(count + 1, maxCount);
129
+ } else if (containerDOM.offsetWidth < containerDOM.scrollWidth) {
130
+ if (count === 0) setLatestValidCount(count);
131
+ newCount = Math.max(0, minCount, count - 1);
132
+ }
133
+
134
+ setCount(newCount);
135
+ }.bind(this), [containerRef, count, endMeasuring, latestValidCount, maxCount, minCount]);
136
+ return [count, measureCount, measuring];
137
+ };
138
+
139
+ var _default = useOverflow;
140
+ exports.default = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ucloud-fe/react-components",
3
- "version": "1.5.1",
3
+ "version": "1.5.2",
4
4
  "title": "UCloud react components",
5
5
  "description": "UCloud react components",
6
6
  "keywords": [