@sheinx/hooks 3.9.14-beta.9 → 3.9.15-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.
- package/cjs/components/use-input/use-input-number.d.ts +1 -0
- package/cjs/components/use-input/use-input-number.d.ts.map +1 -1
- package/cjs/components/use-input/use-input-number.js +8 -5
- package/cjs/components/use-input/use-input-number.type.d.ts +1 -0
- package/cjs/components/use-input/use-input-number.type.d.ts.map +1 -1
- package/cjs/components/use-table/use-table-virtual-external.d.ts +19 -0
- package/cjs/components/use-table/use-table-virtual-external.d.ts.map +1 -0
- package/cjs/components/use-table/use-table-virtual-external.js +85 -0
- package/cjs/components/use-table/use-table-virtual.d.ts +7 -0
- package/cjs/components/use-table/use-table-virtual.d.ts.map +1 -1
- package/cjs/components/use-table/use-table-virtual.js +23 -3
- package/esm/components/use-input/use-input-number.d.ts +1 -0
- package/esm/components/use-input/use-input-number.d.ts.map +1 -1
- package/esm/components/use-input/use-input-number.js +8 -5
- package/esm/components/use-input/use-input-number.type.d.ts +1 -0
- package/esm/components/use-input/use-input-number.type.d.ts.map +1 -1
- package/esm/components/use-table/use-table-virtual-external.d.ts +19 -0
- package/esm/components/use-table/use-table-virtual-external.d.ts.map +1 -0
- package/esm/components/use-table/use-table-virtual-external.js +79 -0
- package/esm/components/use-table/use-table-virtual.d.ts +7 -0
- package/esm/components/use-table/use-table-virtual.d.ts.map +1 -1
- package/esm/components/use-table/use-table-virtual.js +23 -3
- package/package.json +1 -1
|
@@ -3,6 +3,7 @@ import { InputNumberProps } from './use-input-number.type';
|
|
|
3
3
|
declare const useNumberFormat: (props: InputNumberProps) => {
|
|
4
4
|
onPlus: () => void;
|
|
5
5
|
onMinus: () => void;
|
|
6
|
+
onClear: () => void;
|
|
6
7
|
onChange: (v: string | undefined) => void;
|
|
7
8
|
onBlur: (e: React.FocusEvent<HTMLInputElement, Element>) => void;
|
|
8
9
|
onFocus: (e: React.FocusEvent<HTMLInputElement, Element>) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-input-number.d.ts","sourceRoot":"","sources":["use-input-number.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAK3D,QAAA,MAAM,eAAe,UAAW,gBAAgB
|
|
1
|
+
{"version":3,"file":"use-input-number.d.ts","sourceRoot":"","sources":["use-input-number.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAK3D,QAAA,MAAM,eAAe,UAAW,gBAAgB;;;;;;;;;CAiM/C,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -34,6 +34,7 @@ var useNumberFormat = function useNumberFormat(props) {
|
|
|
34
34
|
min = props.min,
|
|
35
35
|
max = props.max,
|
|
36
36
|
allowNull = props.allowNull,
|
|
37
|
+
clearToUndefined = props.clearToUndefined,
|
|
37
38
|
_props$step = props.step,
|
|
38
39
|
step = _props$step === void 0 ? 1 : _props$step,
|
|
39
40
|
cancelBlurChange = props.cancelBlurChange,
|
|
@@ -54,11 +55,8 @@ var useNumberFormat = function useNumberFormat(props) {
|
|
|
54
55
|
setInternalInputValue = _React$useState2[1];
|
|
55
56
|
var focusedRef = _react.default.useRef(false);
|
|
56
57
|
(0, _react.useEffect)(function () {
|
|
57
|
-
// 将外部值转为字符串后再比较,避免 number 5 vs string "5" 的类型不匹配误判
|
|
58
58
|
var stringValue = getStringValue(props.value);
|
|
59
|
-
|
|
60
|
-
// 但当外部值被清空时(如 clearable 触发),即使聚焦也需要同步
|
|
61
|
-
if (stringValue !== inernalInputValue && (!focusedRef.current || props.value == null || props.value === '')) {
|
|
59
|
+
if (stringValue !== inernalInputValue && (!focusedRef.current || props.value == null)) {
|
|
62
60
|
setInternalInputValue(stringValue);
|
|
63
61
|
}
|
|
64
62
|
}, [props.value]);
|
|
@@ -185,6 +183,10 @@ var useNumberFormat = function useNumberFormat(props) {
|
|
|
185
183
|
var num = changeValue(-step);
|
|
186
184
|
if (num !== undefined) setInternalInputValue(getStringValue(num));
|
|
187
185
|
});
|
|
186
|
+
var handleClear = (0, _usePersistFn.default)(function () {
|
|
187
|
+
setInternalInputValue('');
|
|
188
|
+
onChange === null || onChange === void 0 || onChange(clearToUndefined ? undefined : allowNull ? null : '');
|
|
189
|
+
});
|
|
188
190
|
return _objectSpread(_objectSpread({}, (0, _useInputFormat.default)({
|
|
189
191
|
value: inernalInputValue,
|
|
190
192
|
type: 'number',
|
|
@@ -198,7 +200,8 @@ var useNumberFormat = function useNumberFormat(props) {
|
|
|
198
200
|
cancelBlurChange: true
|
|
199
201
|
})), {}, {
|
|
200
202
|
onPlus: handlePlus,
|
|
201
|
-
onMinus: handleMinus
|
|
203
|
+
onMinus: handleMinus,
|
|
204
|
+
onClear: handleClear
|
|
202
205
|
});
|
|
203
206
|
};
|
|
204
207
|
var _default = exports.default = useNumberFormat;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-input-number.type.d.ts","sourceRoot":"","sources":["use-input-number.type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;AAC7D,MAAM,WAAW,gBACf,SAAQ,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAClF,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,SAAS,CAAC;IACnD;;;OAGG;IACH,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
|
|
1
|
+
{"version":3,"file":"use-input-number.type.d.ts","sourceRoot":"","sources":["use-input-number.type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;AAC7D,MAAM,WAAW,gBACf,SAAQ,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAClF,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,SAAS,CAAC;IACnD;;;OAGG;IACH,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
interface UseTableVirtualExternalProps {
|
|
3
|
+
disabled?: boolean;
|
|
4
|
+
dataLength: number;
|
|
5
|
+
theadHeight: number;
|
|
6
|
+
tfootHeight: number;
|
|
7
|
+
externalStickyHeader?: boolean;
|
|
8
|
+
virtualScrollContainer: () => HTMLElement | null;
|
|
9
|
+
tableRef?: React.RefObject<HTMLDivElement>;
|
|
10
|
+
getContentHeight: (index: number) => number;
|
|
11
|
+
updateIndexAndTopFromTop: (scrollTop: number) => void;
|
|
12
|
+
}
|
|
13
|
+
declare const useTableVirtualExternal: (props: UseTableVirtualExternalProps) => {
|
|
14
|
+
externalStickyRef: import("react").RefObject<HTMLDivElement>;
|
|
15
|
+
headerOffset: number;
|
|
16
|
+
tableOffsetRef: import("react").MutableRefObject<number>;
|
|
17
|
+
};
|
|
18
|
+
export default useTableVirtualExternal;
|
|
19
|
+
//# sourceMappingURL=use-table-virtual-external.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-table-virtual-external.d.ts","sourceRoot":"","sources":["use-table-virtual-external.tsx"],"names":[],"mappings":";AAGA,UAAU,4BAA4B;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,sBAAsB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,wBAAwB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED,QAAA,MAAM,uBAAuB,UAAW,4BAA4B;;;;CAyEnE,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _usePersistFn = require("../../common/use-persist-fn");
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
10
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
11
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
12
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
13
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
14
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
15
|
+
var useTableVirtualExternal = function useTableVirtualExternal(props) {
|
|
16
|
+
var _useState = (0, _react.useState)(0),
|
|
17
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
18
|
+
headerOffset = _useState2[0],
|
|
19
|
+
setHeaderOffset = _useState2[1];
|
|
20
|
+
var externalStickyRef = (0, _react.useRef)(null);
|
|
21
|
+
var tableOffsetRef = (0, _react.useRef)(0);
|
|
22
|
+
var handleExternalScroll = (0, _usePersistFn.usePersistFn)(function () {
|
|
23
|
+
var _props$tableRef, _externalStickyRef$cu;
|
|
24
|
+
if (props.disabled) return;
|
|
25
|
+
var container = props.virtualScrollContainer();
|
|
26
|
+
var tableEl = (_props$tableRef = props.tableRef) === null || _props$tableRef === void 0 ? void 0 : _props$tableRef.current;
|
|
27
|
+
if (!container || !tableEl) return;
|
|
28
|
+
if (tableOffsetRef.current === 0) {
|
|
29
|
+
if (container === document.documentElement || container === document.body) {
|
|
30
|
+
tableOffsetRef.current = tableEl.getBoundingClientRect().top + window.scrollY;
|
|
31
|
+
} else {
|
|
32
|
+
tableOffsetRef.current = tableEl.getBoundingClientRect().top - container.getBoundingClientRect().top + container.scrollTop;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
var rawScrollTop;
|
|
36
|
+
if (container === document.documentElement || container === document.body) {
|
|
37
|
+
var rect = tableEl.getBoundingClientRect();
|
|
38
|
+
rawScrollTop = -rect.top;
|
|
39
|
+
} else {
|
|
40
|
+
var containerRect = container.getBoundingClientRect();
|
|
41
|
+
var tableRect = tableEl.getBoundingClientRect();
|
|
42
|
+
rawScrollTop = containerRect.top - tableRect.top;
|
|
43
|
+
}
|
|
44
|
+
if (rawScrollTop < 0) rawScrollTop = 0;
|
|
45
|
+
var sumHeight = props.getContentHeight(props.dataLength - 1);
|
|
46
|
+
var viewportHeight = ((_externalStickyRef$cu = externalStickyRef.current) === null || _externalStickyRef$cu === void 0 ? void 0 : _externalStickyRef$cu.clientHeight) || container.clientHeight;
|
|
47
|
+
var scrollTop;
|
|
48
|
+
var max;
|
|
49
|
+
if (props.externalStickyHeader) {
|
|
50
|
+
max = sumHeight - props.tfootHeight - viewportHeight;
|
|
51
|
+
scrollTop = rawScrollTop;
|
|
52
|
+
} else {
|
|
53
|
+
var newHeaderOffset = Math.min(rawScrollTop, props.theadHeight);
|
|
54
|
+
if (newHeaderOffset !== headerOffset) {
|
|
55
|
+
setHeaderOffset(newHeaderOffset);
|
|
56
|
+
}
|
|
57
|
+
max = sumHeight - props.theadHeight - props.tfootHeight - viewportHeight;
|
|
58
|
+
scrollTop = rawScrollTop - props.theadHeight;
|
|
59
|
+
if (scrollTop < 0) scrollTop = 0;
|
|
60
|
+
}
|
|
61
|
+
if (max > 0 && scrollTop > max) {
|
|
62
|
+
scrollTop = max;
|
|
63
|
+
}
|
|
64
|
+
props.updateIndexAndTopFromTop(scrollTop);
|
|
65
|
+
});
|
|
66
|
+
(0, _react.useEffect)(function () {
|
|
67
|
+
if (props.disabled) return;
|
|
68
|
+
var container = props.virtualScrollContainer();
|
|
69
|
+
if (!container) return;
|
|
70
|
+
var scrollTarget = container === document.documentElement || container === document.body ? window : container;
|
|
71
|
+
scrollTarget.addEventListener('scroll', handleExternalScroll, {
|
|
72
|
+
passive: true
|
|
73
|
+
});
|
|
74
|
+
handleExternalScroll();
|
|
75
|
+
return function () {
|
|
76
|
+
scrollTarget.removeEventListener('scroll', handleExternalScroll);
|
|
77
|
+
};
|
|
78
|
+
}, [props.disabled, props.dataLength]);
|
|
79
|
+
return {
|
|
80
|
+
externalStickyRef: externalStickyRef,
|
|
81
|
+
headerOffset: headerOffset,
|
|
82
|
+
tableOffsetRef: tableOffsetRef
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
var _default = exports.default = useTableVirtualExternal;
|
|
@@ -15,6 +15,9 @@ interface UseTableVirtualProps {
|
|
|
15
15
|
colgroup: (number | string | undefined)[];
|
|
16
16
|
theadHeight: number;
|
|
17
17
|
tfootHeight: number;
|
|
18
|
+
virtualScrollContainer?: () => HTMLElement | null;
|
|
19
|
+
tableRef?: React.RefObject<HTMLDivElement>;
|
|
20
|
+
externalStickyHeader?: boolean;
|
|
18
21
|
}
|
|
19
22
|
declare const useTableVirtual: (props: UseTableVirtualProps) => {
|
|
20
23
|
scrollHeight: number;
|
|
@@ -36,6 +39,10 @@ declare const useTableVirtual: (props: UseTableVirtualProps) => {
|
|
|
36
39
|
rowSpanIndexArray: number[];
|
|
37
40
|
maxRowSpan: number;
|
|
38
41
|
} | null;
|
|
42
|
+
isExternalScroll: boolean;
|
|
43
|
+
externalStickyRef: import("react").RefObject<HTMLDivElement>;
|
|
44
|
+
headerOffset: number;
|
|
45
|
+
tableOffsetRef: import("react").MutableRefObject<number>;
|
|
39
46
|
};
|
|
40
47
|
export default useTableVirtual;
|
|
41
48
|
//# sourceMappingURL=use-table-virtual.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-table-virtual.d.ts","sourceRoot":"","sources":["use-table-virtual.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-table-virtual.d.ts","sourceRoot":"","sources":["use-table-virtual.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAYrD,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC,QAAQ,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AACD,QAAA,MAAM,eAAe,UAAW,oBAAoB;;;;;;oBAoNpC,MAAM;mBACP,MAAM;WACd,MAAM;gBACD,MAAM;kBACJ,OAAO;;0BArHuB,MAAM,UAAU,MAAM;2BAwJrB,MAAM,aAAa,MAAM,IAAI;qCAoBnB,MAAM;mCAUR,MAAM,GAAG,MAAM;;;;;;;;;CA8HnE,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _usePersistFn = require("../../common/use-persist-fn");
|
|
8
8
|
var _react = require("react");
|
|
9
|
+
var _useTableVirtualExternal = _interopRequireDefault(require("./use-table-virtual-external"));
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
11
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
10
12
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
11
13
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
@@ -155,8 +157,8 @@ var useTableVirtual = function useTableVirtual(props) {
|
|
|
155
157
|
setHeight(getContentHeight(props.data.length - 1));
|
|
156
158
|
}
|
|
157
159
|
var preIndex = context.preIndex;
|
|
158
|
-
// 解决: 从下往上滚
|
|
159
|
-
if (preIndex && preIndex > startIndex && startIndex === index) {
|
|
160
|
+
// 解决: 从下往上滚 由于高度变化会导致滚动条跳动(仅内部滚动需要)
|
|
161
|
+
if (!props.virtualScrollContainer && preIndex && preIndex > startIndex && startIndex === index) {
|
|
160
162
|
// 发生在顶部
|
|
161
163
|
if (context.heightCallback) return;
|
|
162
164
|
var offset = height - (beforeHeight || props.rowHeight);
|
|
@@ -406,6 +408,20 @@ var useTableVirtual = function useTableVirtual(props) {
|
|
|
406
408
|
}
|
|
407
409
|
return "translate3d(0, ".concat(0 - t, "px, 0)");
|
|
408
410
|
}, [innerTop]);
|
|
411
|
+
var isExternalScroll = !!props.virtualScrollContainer;
|
|
412
|
+
var externalInfo = (0, _useTableVirtualExternal.default)({
|
|
413
|
+
disabled: props.disabled || !isExternalScroll,
|
|
414
|
+
dataLength: props.data.length,
|
|
415
|
+
theadHeight: props.theadHeight,
|
|
416
|
+
tfootHeight: props.tfootHeight,
|
|
417
|
+
externalStickyHeader: props.externalStickyHeader,
|
|
418
|
+
virtualScrollContainer: props.virtualScrollContainer || function () {
|
|
419
|
+
return null;
|
|
420
|
+
},
|
|
421
|
+
tableRef: props.tableRef,
|
|
422
|
+
getContentHeight: getContentHeight,
|
|
423
|
+
updateIndexAndTopFromTop: updateIndexAndTopFromTop
|
|
424
|
+
});
|
|
409
425
|
return {
|
|
410
426
|
scrollHeight: scrollHeight,
|
|
411
427
|
startIndex: startIndex,
|
|
@@ -416,7 +432,11 @@ var useTableVirtual = function useTableVirtual(props) {
|
|
|
416
432
|
scrollToIndex: scrollToIndex,
|
|
417
433
|
scrollColumnByLeft: scrollColumnByLeft,
|
|
418
434
|
scrollColumnIntoView: scrollColumnIntoView,
|
|
419
|
-
rowSpanInfo: rowSpanInfo
|
|
435
|
+
rowSpanInfo: rowSpanInfo,
|
|
436
|
+
isExternalScroll: isExternalScroll,
|
|
437
|
+
externalStickyRef: externalInfo.externalStickyRef,
|
|
438
|
+
headerOffset: externalInfo.headerOffset,
|
|
439
|
+
tableOffsetRef: externalInfo.tableOffsetRef
|
|
420
440
|
};
|
|
421
441
|
};
|
|
422
442
|
var _default = exports.default = useTableVirtual;
|
|
@@ -3,6 +3,7 @@ import { InputNumberProps } from './use-input-number.type';
|
|
|
3
3
|
declare const useNumberFormat: (props: InputNumberProps) => {
|
|
4
4
|
onPlus: () => void;
|
|
5
5
|
onMinus: () => void;
|
|
6
|
+
onClear: () => void;
|
|
6
7
|
onChange: (v: string | undefined) => void;
|
|
7
8
|
onBlur: (e: React.FocusEvent<HTMLInputElement, Element>) => void;
|
|
8
9
|
onFocus: (e: React.FocusEvent<HTMLInputElement, Element>) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-input-number.d.ts","sourceRoot":"","sources":["use-input-number.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAK3D,QAAA,MAAM,eAAe,UAAW,gBAAgB
|
|
1
|
+
{"version":3,"file":"use-input-number.d.ts","sourceRoot":"","sources":["use-input-number.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAK3D,QAAA,MAAM,eAAe,UAAW,gBAAgB;;;;;;;;;CAiM/C,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -25,6 +25,7 @@ var useNumberFormat = function useNumberFormat(props) {
|
|
|
25
25
|
min = props.min,
|
|
26
26
|
max = props.max,
|
|
27
27
|
allowNull = props.allowNull,
|
|
28
|
+
clearToUndefined = props.clearToUndefined,
|
|
28
29
|
_props$step = props.step,
|
|
29
30
|
step = _props$step === void 0 ? 1 : _props$step,
|
|
30
31
|
cancelBlurChange = props.cancelBlurChange,
|
|
@@ -45,11 +46,8 @@ var useNumberFormat = function useNumberFormat(props) {
|
|
|
45
46
|
setInternalInputValue = _React$useState2[1];
|
|
46
47
|
var focusedRef = React.useRef(false);
|
|
47
48
|
useEffect(function () {
|
|
48
|
-
// 将外部值转为字符串后再比较,避免 number 5 vs string "5" 的类型不匹配误判
|
|
49
49
|
var stringValue = getStringValue(props.value);
|
|
50
|
-
|
|
51
|
-
// 但当外部值被清空时(如 clearable 触发),即使聚焦也需要同步
|
|
52
|
-
if (stringValue !== inernalInputValue && (!focusedRef.current || props.value == null || props.value === '')) {
|
|
50
|
+
if (stringValue !== inernalInputValue && (!focusedRef.current || props.value == null)) {
|
|
53
51
|
setInternalInputValue(stringValue);
|
|
54
52
|
}
|
|
55
53
|
}, [props.value]);
|
|
@@ -176,6 +174,10 @@ var useNumberFormat = function useNumberFormat(props) {
|
|
|
176
174
|
var num = changeValue(-step);
|
|
177
175
|
if (num !== undefined) setInternalInputValue(getStringValue(num));
|
|
178
176
|
});
|
|
177
|
+
var handleClear = usePersistFn(function () {
|
|
178
|
+
setInternalInputValue('');
|
|
179
|
+
onChange === null || onChange === void 0 || onChange(clearToUndefined ? undefined : allowNull ? null : '');
|
|
180
|
+
});
|
|
179
181
|
return _objectSpread(_objectSpread({}, useInputFormat({
|
|
180
182
|
value: inernalInputValue,
|
|
181
183
|
type: 'number',
|
|
@@ -189,7 +191,8 @@ var useNumberFormat = function useNumberFormat(props) {
|
|
|
189
191
|
cancelBlurChange: true
|
|
190
192
|
})), {}, {
|
|
191
193
|
onPlus: handlePlus,
|
|
192
|
-
onMinus: handleMinus
|
|
194
|
+
onMinus: handleMinus,
|
|
195
|
+
onClear: handleClear
|
|
193
196
|
});
|
|
194
197
|
};
|
|
195
198
|
export default useNumberFormat;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-input-number.type.d.ts","sourceRoot":"","sources":["use-input-number.type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;AAC7D,MAAM,WAAW,gBACf,SAAQ,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAClF,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,SAAS,CAAC;IACnD;;;OAGG;IACH,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
|
|
1
|
+
{"version":3,"file":"use-input-number.type.d.ts","sourceRoot":"","sources":["use-input-number.type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;AAC7D,MAAM,WAAW,gBACf,SAAQ,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAClF,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,SAAS,CAAC;IACnD;;;OAGG;IACH,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
interface UseTableVirtualExternalProps {
|
|
3
|
+
disabled?: boolean;
|
|
4
|
+
dataLength: number;
|
|
5
|
+
theadHeight: number;
|
|
6
|
+
tfootHeight: number;
|
|
7
|
+
externalStickyHeader?: boolean;
|
|
8
|
+
virtualScrollContainer: () => HTMLElement | null;
|
|
9
|
+
tableRef?: React.RefObject<HTMLDivElement>;
|
|
10
|
+
getContentHeight: (index: number) => number;
|
|
11
|
+
updateIndexAndTopFromTop: (scrollTop: number) => void;
|
|
12
|
+
}
|
|
13
|
+
declare const useTableVirtualExternal: (props: UseTableVirtualExternalProps) => {
|
|
14
|
+
externalStickyRef: import("react").RefObject<HTMLDivElement>;
|
|
15
|
+
headerOffset: number;
|
|
16
|
+
tableOffsetRef: import("react").MutableRefObject<number>;
|
|
17
|
+
};
|
|
18
|
+
export default useTableVirtualExternal;
|
|
19
|
+
//# sourceMappingURL=use-table-virtual-external.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-table-virtual-external.d.ts","sourceRoot":"","sources":["use-table-virtual-external.tsx"],"names":[],"mappings":";AAGA,UAAU,4BAA4B;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,sBAAsB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,wBAAwB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED,QAAA,MAAM,uBAAuB,UAAW,4BAA4B;;;;CAyEnE,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import { usePersistFn } from "../../common/use-persist-fn";
|
|
8
|
+
import { useState, useRef, useEffect } from 'react';
|
|
9
|
+
var useTableVirtualExternal = function useTableVirtualExternal(props) {
|
|
10
|
+
var _useState = useState(0),
|
|
11
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
12
|
+
headerOffset = _useState2[0],
|
|
13
|
+
setHeaderOffset = _useState2[1];
|
|
14
|
+
var externalStickyRef = useRef(null);
|
|
15
|
+
var tableOffsetRef = useRef(0);
|
|
16
|
+
var handleExternalScroll = usePersistFn(function () {
|
|
17
|
+
var _props$tableRef, _externalStickyRef$cu;
|
|
18
|
+
if (props.disabled) return;
|
|
19
|
+
var container = props.virtualScrollContainer();
|
|
20
|
+
var tableEl = (_props$tableRef = props.tableRef) === null || _props$tableRef === void 0 ? void 0 : _props$tableRef.current;
|
|
21
|
+
if (!container || !tableEl) return;
|
|
22
|
+
if (tableOffsetRef.current === 0) {
|
|
23
|
+
if (container === document.documentElement || container === document.body) {
|
|
24
|
+
tableOffsetRef.current = tableEl.getBoundingClientRect().top + window.scrollY;
|
|
25
|
+
} else {
|
|
26
|
+
tableOffsetRef.current = tableEl.getBoundingClientRect().top - container.getBoundingClientRect().top + container.scrollTop;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
var rawScrollTop;
|
|
30
|
+
if (container === document.documentElement || container === document.body) {
|
|
31
|
+
var rect = tableEl.getBoundingClientRect();
|
|
32
|
+
rawScrollTop = -rect.top;
|
|
33
|
+
} else {
|
|
34
|
+
var containerRect = container.getBoundingClientRect();
|
|
35
|
+
var tableRect = tableEl.getBoundingClientRect();
|
|
36
|
+
rawScrollTop = containerRect.top - tableRect.top;
|
|
37
|
+
}
|
|
38
|
+
if (rawScrollTop < 0) rawScrollTop = 0;
|
|
39
|
+
var sumHeight = props.getContentHeight(props.dataLength - 1);
|
|
40
|
+
var viewportHeight = ((_externalStickyRef$cu = externalStickyRef.current) === null || _externalStickyRef$cu === void 0 ? void 0 : _externalStickyRef$cu.clientHeight) || container.clientHeight;
|
|
41
|
+
var scrollTop;
|
|
42
|
+
var max;
|
|
43
|
+
if (props.externalStickyHeader) {
|
|
44
|
+
max = sumHeight - props.tfootHeight - viewportHeight;
|
|
45
|
+
scrollTop = rawScrollTop;
|
|
46
|
+
} else {
|
|
47
|
+
var newHeaderOffset = Math.min(rawScrollTop, props.theadHeight);
|
|
48
|
+
if (newHeaderOffset !== headerOffset) {
|
|
49
|
+
setHeaderOffset(newHeaderOffset);
|
|
50
|
+
}
|
|
51
|
+
max = sumHeight - props.theadHeight - props.tfootHeight - viewportHeight;
|
|
52
|
+
scrollTop = rawScrollTop - props.theadHeight;
|
|
53
|
+
if (scrollTop < 0) scrollTop = 0;
|
|
54
|
+
}
|
|
55
|
+
if (max > 0 && scrollTop > max) {
|
|
56
|
+
scrollTop = max;
|
|
57
|
+
}
|
|
58
|
+
props.updateIndexAndTopFromTop(scrollTop);
|
|
59
|
+
});
|
|
60
|
+
useEffect(function () {
|
|
61
|
+
if (props.disabled) return;
|
|
62
|
+
var container = props.virtualScrollContainer();
|
|
63
|
+
if (!container) return;
|
|
64
|
+
var scrollTarget = container === document.documentElement || container === document.body ? window : container;
|
|
65
|
+
scrollTarget.addEventListener('scroll', handleExternalScroll, {
|
|
66
|
+
passive: true
|
|
67
|
+
});
|
|
68
|
+
handleExternalScroll();
|
|
69
|
+
return function () {
|
|
70
|
+
scrollTarget.removeEventListener('scroll', handleExternalScroll);
|
|
71
|
+
};
|
|
72
|
+
}, [props.disabled, props.dataLength]);
|
|
73
|
+
return {
|
|
74
|
+
externalStickyRef: externalStickyRef,
|
|
75
|
+
headerOffset: headerOffset,
|
|
76
|
+
tableOffsetRef: tableOffsetRef
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
export default useTableVirtualExternal;
|
|
@@ -15,6 +15,9 @@ interface UseTableVirtualProps {
|
|
|
15
15
|
colgroup: (number | string | undefined)[];
|
|
16
16
|
theadHeight: number;
|
|
17
17
|
tfootHeight: number;
|
|
18
|
+
virtualScrollContainer?: () => HTMLElement | null;
|
|
19
|
+
tableRef?: React.RefObject<HTMLDivElement>;
|
|
20
|
+
externalStickyHeader?: boolean;
|
|
18
21
|
}
|
|
19
22
|
declare const useTableVirtual: (props: UseTableVirtualProps) => {
|
|
20
23
|
scrollHeight: number;
|
|
@@ -36,6 +39,10 @@ declare const useTableVirtual: (props: UseTableVirtualProps) => {
|
|
|
36
39
|
rowSpanIndexArray: number[];
|
|
37
40
|
maxRowSpan: number;
|
|
38
41
|
} | null;
|
|
42
|
+
isExternalScroll: boolean;
|
|
43
|
+
externalStickyRef: import("react").RefObject<HTMLDivElement>;
|
|
44
|
+
headerOffset: number;
|
|
45
|
+
tableOffsetRef: import("react").MutableRefObject<number>;
|
|
39
46
|
};
|
|
40
47
|
export default useTableVirtual;
|
|
41
48
|
//# sourceMappingURL=use-table-virtual.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-table-virtual.d.ts","sourceRoot":"","sources":["use-table-virtual.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-table-virtual.d.ts","sourceRoot":"","sources":["use-table-virtual.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAYrD,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC,QAAQ,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AACD,QAAA,MAAM,eAAe,UAAW,oBAAoB;;;;;;oBAoNpC,MAAM;mBACP,MAAM;WACd,MAAM;gBACD,MAAM;kBACJ,OAAO;;0BArHuB,MAAM,UAAU,MAAM;2BAwJrB,MAAM,aAAa,MAAM,IAAI;qCAoBnB,MAAM;mCAUR,MAAM,GAAG,MAAM;;;;;;;;;CA8HnE,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -11,6 +11,8 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
11
11
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
12
12
|
import { usePersistFn } from "../../common/use-persist-fn";
|
|
13
13
|
import { useState, useRef, useEffect, useMemo } from 'react';
|
|
14
|
+
import useTableVirtualExternal from "./use-table-virtual-external";
|
|
15
|
+
|
|
14
16
|
// 找出最大的连续数字的个数
|
|
15
17
|
function getMaxRowSpanLength(input) {
|
|
16
18
|
var map = new Map();
|
|
@@ -149,8 +151,8 @@ var useTableVirtual = function useTableVirtual(props) {
|
|
|
149
151
|
setHeight(getContentHeight(props.data.length - 1));
|
|
150
152
|
}
|
|
151
153
|
var preIndex = context.preIndex;
|
|
152
|
-
// 解决: 从下往上滚
|
|
153
|
-
if (preIndex && preIndex > startIndex && startIndex === index) {
|
|
154
|
+
// 解决: 从下往上滚 由于高度变化会导致滚动条跳动(仅内部滚动需要)
|
|
155
|
+
if (!props.virtualScrollContainer && preIndex && preIndex > startIndex && startIndex === index) {
|
|
154
156
|
// 发生在顶部
|
|
155
157
|
if (context.heightCallback) return;
|
|
156
158
|
var offset = height - (beforeHeight || props.rowHeight);
|
|
@@ -400,6 +402,20 @@ var useTableVirtual = function useTableVirtual(props) {
|
|
|
400
402
|
}
|
|
401
403
|
return "translate3d(0, ".concat(0 - t, "px, 0)");
|
|
402
404
|
}, [innerTop]);
|
|
405
|
+
var isExternalScroll = !!props.virtualScrollContainer;
|
|
406
|
+
var externalInfo = useTableVirtualExternal({
|
|
407
|
+
disabled: props.disabled || !isExternalScroll,
|
|
408
|
+
dataLength: props.data.length,
|
|
409
|
+
theadHeight: props.theadHeight,
|
|
410
|
+
tfootHeight: props.tfootHeight,
|
|
411
|
+
externalStickyHeader: props.externalStickyHeader,
|
|
412
|
+
virtualScrollContainer: props.virtualScrollContainer || function () {
|
|
413
|
+
return null;
|
|
414
|
+
},
|
|
415
|
+
tableRef: props.tableRef,
|
|
416
|
+
getContentHeight: getContentHeight,
|
|
417
|
+
updateIndexAndTopFromTop: updateIndexAndTopFromTop
|
|
418
|
+
});
|
|
403
419
|
return {
|
|
404
420
|
scrollHeight: scrollHeight,
|
|
405
421
|
startIndex: startIndex,
|
|
@@ -410,7 +426,11 @@ var useTableVirtual = function useTableVirtual(props) {
|
|
|
410
426
|
scrollToIndex: scrollToIndex,
|
|
411
427
|
scrollColumnByLeft: scrollColumnByLeft,
|
|
412
428
|
scrollColumnIntoView: scrollColumnIntoView,
|
|
413
|
-
rowSpanInfo: rowSpanInfo
|
|
429
|
+
rowSpanInfo: rowSpanInfo,
|
|
430
|
+
isExternalScroll: isExternalScroll,
|
|
431
|
+
externalStickyRef: externalInfo.externalStickyRef,
|
|
432
|
+
headerOffset: externalInfo.headerOffset,
|
|
433
|
+
tableOffsetRef: externalInfo.tableOffsetRef
|
|
414
434
|
};
|
|
415
435
|
};
|
|
416
436
|
export default useTableVirtual;
|