@tarojs/components-advanced 4.1.12-beta.7 → 4.1.12-beta.70

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.
Files changed (84) hide show
  1. package/dist/components/index.js +2 -1
  2. package/dist/components/index.js.map +1 -1
  3. package/dist/components/list/hooks/useItemSizeCache.d.ts +1 -1
  4. package/dist/components/list/hooks/useItemSizeCache.js +5 -5
  5. package/dist/components/list/hooks/useItemSizeCache.js.map +1 -1
  6. package/dist/components/list/hooks/useListNestedScroll.d.ts +18 -0
  7. package/dist/components/list/hooks/useListNestedScroll.js +61 -0
  8. package/dist/components/list/hooks/useListNestedScroll.js.map +1 -0
  9. package/dist/components/list/hooks/useListScrollElementAttach.d.ts +25 -0
  10. package/dist/components/list/hooks/useListScrollElementAttach.js +88 -0
  11. package/dist/components/list/hooks/useListScrollElementAttach.js.map +1 -0
  12. package/dist/components/list/hooks/useListScrollElementAttachWeapp.d.ts +15 -0
  13. package/dist/components/list/hooks/useListScrollElementAttachWeapp.js +135 -0
  14. package/dist/components/list/hooks/useListScrollElementAttachWeapp.js.map +1 -0
  15. package/dist/components/list/hooks/useMeasureStartOffset.d.ts +4 -2
  16. package/dist/components/list/hooks/useMeasureStartOffset.js +56 -15
  17. package/dist/components/list/hooks/useMeasureStartOffset.js.map +1 -1
  18. package/dist/components/list/hooks/useMeasureStartOffsetWeapp.d.ts +14 -0
  19. package/dist/components/list/hooks/useMeasureStartOffsetWeapp.js +87 -0
  20. package/dist/components/list/hooks/useMeasureStartOffsetWeapp.js.map +1 -0
  21. package/dist/components/list/hooks/useRefresher.d.ts +8 -2
  22. package/dist/components/list/hooks/useRefresher.js +125 -67
  23. package/dist/components/list/hooks/useRefresher.js.map +1 -1
  24. package/dist/components/list/hooks/useResizeObserver.d.ts +4 -1
  25. package/dist/components/list/hooks/useResizeObserver.js +8 -7
  26. package/dist/components/list/hooks/useResizeObserver.js.map +1 -1
  27. package/dist/components/list/hooks/useScrollCorrection.js +2 -1
  28. package/dist/components/list/hooks/useScrollCorrection.js.map +1 -1
  29. package/dist/components/list/hooks/useScrollParentAutoFind.d.ts +20 -0
  30. package/dist/components/list/hooks/useScrollParentAutoFind.js +81 -0
  31. package/dist/components/list/hooks/useScrollParentAutoFind.js.map +1 -0
  32. package/dist/components/list/index.d.ts +12 -17
  33. package/dist/components/list/index.js +266 -286
  34. package/dist/components/list/index.js.map +1 -1
  35. package/dist/components/list/utils.d.ts +12 -0
  36. package/dist/components/list/utils.js +23 -1
  37. package/dist/components/list/utils.js.map +1 -1
  38. package/dist/components/virtual-list/vue/list.d.ts +10 -10
  39. package/dist/components/virtual-waterfall/vue/waterfall.d.ts +10 -10
  40. package/dist/components/water-flow/feed-column.d.ts +2 -0
  41. package/dist/components/water-flow/feed-column.js +10 -0
  42. package/dist/components/water-flow/feed-column.js.map +1 -0
  43. package/dist/components/water-flow/flow-item.js +18 -11
  44. package/dist/components/water-flow/flow-item.js.map +1 -1
  45. package/dist/components/water-flow/flow-section.js +1 -1
  46. package/dist/components/water-flow/flow-section.js.map +1 -1
  47. package/dist/components/water-flow/index.d.ts +1 -1
  48. package/dist/components/water-flow/interface.d.ts +31 -4
  49. package/dist/components/water-flow/node.d.ts +3 -0
  50. package/dist/components/water-flow/node.js +34 -1
  51. package/dist/components/water-flow/node.js.map +1 -1
  52. package/dist/components/water-flow/root.d.ts +36 -3
  53. package/dist/components/water-flow/root.js +143 -44
  54. package/dist/components/water-flow/root.js.map +1 -1
  55. package/dist/components/water-flow/section.d.ts +23 -1
  56. package/dist/components/water-flow/section.js +120 -20
  57. package/dist/components/water-flow/section.js.map +1 -1
  58. package/dist/components/water-flow/utils.d.ts +2 -0
  59. package/dist/components/water-flow/utils.js +3 -1
  60. package/dist/components/water-flow/utils.js.map +1 -1
  61. package/dist/components/water-flow/water-flow-node-cache.d.ts +24 -0
  62. package/dist/components/water-flow/water-flow-node-cache.js +161 -0
  63. package/dist/components/water-flow/water-flow-node-cache.js.map +1 -0
  64. package/dist/components/water-flow/water-flow.d.ts +2 -3
  65. package/dist/components/water-flow/water-flow.js +257 -77
  66. package/dist/components/water-flow/water-flow.js.map +1 -1
  67. package/dist/index.js +4 -1
  68. package/dist/index.js.map +1 -1
  69. package/dist/utils/dom.d.ts +2 -2
  70. package/dist/utils/dom.js +7 -6
  71. package/dist/utils/dom.js.map +1 -1
  72. package/dist/utils/index.d.ts +2 -0
  73. package/dist/utils/index.js +2 -0
  74. package/dist/utils/index.js.map +1 -1
  75. package/dist/utils/scrollElementContext.d.ts +15 -0
  76. package/dist/utils/scrollElementContext.js +14 -0
  77. package/dist/utils/scrollElementContext.js.map +1 -0
  78. package/dist/utils/scrollParent.d.ts +33 -0
  79. package/dist/utils/scrollParent.js +88 -0
  80. package/dist/utils/scrollParent.js.map +1 -0
  81. package/dist/utils/weapp-scope.d.ts +7 -0
  82. package/dist/utils/weapp-scope.js +20 -0
  83. package/dist/utils/weapp-scope.js.map +1 -0
  84. package/package.json +9 -9
@@ -1,81 +1,146 @@
1
1
  import { __rest } from 'tslib';
2
2
  import { View, ScrollView } from '@tarojs/components';
3
- import { nextTick } from '@tarojs/taro';
4
- import { useContext, useRef, useId, useMemo, Children, cloneElement, useEffect, createElement } from 'react';
3
+ import Taro, { useResize, nextTick } from '@tarojs/taro';
4
+ import { useContext, useRef, useCallback, useId, useMemo, useLayoutEffect, useEffect, Children, cloneElement, createElement, forwardRef } from 'react';
5
5
  import '../../utils/index.js';
6
- import { ListScrollElementContext } from '../list/index.js';
6
+ import { ScrollElementContextOrFallback } from '../../utils/scrollElementContext.js';
7
7
  import { useMeasureStartOffset } from '../list/hooks/useMeasureStartOffset.js';
8
+ import { useMeasureStartOffsetWeapp } from '../list/hooks/useMeasureStartOffsetWeapp.js';
9
+ import { useScrollParentAutoFind } from '../list/hooks/useScrollParentAutoFind.js';
10
+ import { getFeedColumn } from './feed-column.js';
8
11
  import { Root, RootEvents } from './root.js';
9
12
  import { Section } from './section.js';
10
13
  import { useMemoizedFn } from './use-memoized-fn.js';
11
14
  import { useObservedAttr } from './use-observed-attr.js';
12
- import { getSysInfo, isH5 } from './utils.js';
15
+ import { getSysInfo, isH5, isWeapp } from './utils.js';
16
+ import { createWaterFlowNodeCacheControl } from './water-flow-node-cache.js';
13
17
  import { getScrollViewContextNode } from '../../utils/dom.js';
14
18
  import { debounce } from '../../utils/lodash.js';
19
+ import { weappScope } from '../../utils/weapp-scope.js';
15
20
 
16
21
  getSysInfo();
17
- function WaterFlow(_a) {
18
- var _b, _c;
22
+ /** 仅有效数字才作为 ScrollView 受控滚动偏移,避免 undefined/null 在 H5 经 Number(null)→0 归顶 */
23
+ function pickControlledScrollOffset(value) {
24
+ return typeof value === 'number' && !Number.isNaN(value) ? value : undefined;
25
+ }
26
+ const InnerWaterFlow = (_a, ref) => {
27
+ var _b, _c, _d, _e;
19
28
  var { children } = _a, props = __rest(_a, ["children"]);
20
- const { id, style = {}, className, cacheCount = 1, onScrollToUpper, onScrollToLower, upperThresholdCount, lowerThresholdCount, scrollIntoView, type: flowType = 'default', scrollElement, startOffset, containerHeight, onScrollHeightChange, onScrollIntoViewComplete } = props, rest = __rest(props
21
- // 任务 4.1:支持从 ListScrollElementContext 获取(List 内嵌 WaterFlow 时)
22
- , ["id", "style", "className", "cacheCount", "onScrollToUpper", "onScrollToLower", "upperThresholdCount", "lowerThresholdCount", "scrollIntoView", "type", "scrollElement", "startOffset", "containerHeight", "onScrollHeightChange", "onScrollIntoViewComplete"]);
23
- // 任务 4.1:支持从 ListScrollElementContext 获取(List 内嵌 WaterFlow 时)
24
- const listScrollCtx = useContext(ListScrollElementContext);
25
- const effectiveScrollElement = scrollElement !== null && scrollElement !== void 0 ? scrollElement : listScrollCtx === null || listScrollCtx === void 0 ? void 0 : listScrollCtx.scrollRef;
29
+ const { id, style = {}, className, cacheCount = 1, onScrollToUpper, onScrollToLower, upperThresholdCount, lowerThresholdCount, scrollIntoView, nestedScroll, scrollElement, startOffset, containerHeight, onScrollHeightChange, onScrollIntoViewComplete, onScroll: onScrollProp, scrollTop, scrollLeft } = props, rest = __rest(props, ["id", "style", "className", "cacheCount", "onScrollToUpper", "onScrollToLower", "upperThresholdCount", "lowerThresholdCount", "scrollIntoView", "nestedScroll", "scrollElement", "startOffset", "containerHeight", "onScrollHeightChange", "onScrollIntoViewComplete", "onScroll", "scrollTop", "scrollLeft"]);
30
+ const flowType = nestedScroll === true ? 'nested' : 'default';
31
+ // ScrollElementContext 获取 scrollRef(List/ScrollView 内嵌时提供);无 Context 时兜底为 fallback
32
+ const scrollElementCtx = useContext(ScrollElementContextOrFallback);
26
33
  const contentWrapperRef = useRef(null);
27
- const measuredStartOffset = useMeasureStartOffset(effectiveScrollElement !== null && effectiveScrollElement !== void 0 ? effectiveScrollElement : { current: null }, contentWrapperRef, {
28
- enabled: !!((flowType === 'nested' && effectiveScrollElement && isH5) &&
29
- startOffset == null &&
30
- !listScrollCtx),
31
- isHorizontal: false,
32
- });
33
- const effectiveStartOffset = (_c = (_b = startOffset !== null && startOffset !== void 0 ? startOffset : listScrollCtx === null || listScrollCtx === void 0 ? void 0 : listScrollCtx.startOffset) !== null && _b !== void 0 ? _b : measuredStartOffset) !== null && _c !== void 0 ? _c : 0;
34
- const effectiveContainerHeight = containerHeight !== null && containerHeight !== void 0 ? containerHeight : listScrollCtx === null || listScrollCtx === void 0 ? void 0 : listScrollCtx.containerHeight;
34
+ const setContainerRef = useCallback((el) => {
35
+ contentWrapperRef.current = el;
36
+ if (typeof ref === 'function')
37
+ ref(el);
38
+ else if (ref)
39
+ ref.current = el;
40
+ }, [ref]);
41
+ const defaultId = useId().replace(/:/g, '');
42
+ /** 仅在原有 id 后追加同一实例内共享的随机数尾缀,不替换原 id 串 */
43
+ const instanceIdSuffixRef = useRef(null);
44
+ if (instanceIdSuffixRef.current === null) {
45
+ instanceIdSuffixRef.current = String(Math.floor(Math.random() * 1e9));
46
+ }
47
+ const instanceSuffix = instanceIdSuffixRef.current;
48
+ const contentId = useMemo(() => `${id !== null && id !== void 0 ? id : defaultId}_${instanceSuffix}`, [id, defaultId, instanceSuffix]);
49
+ const needAutoFind = flowType === 'nested' &&
50
+ !scrollElement &&
51
+ !(scrollElementCtx === null || scrollElementCtx === void 0 ? void 0 : scrollElementCtx.scrollRef) &&
52
+ (isH5 || isWeapp);
53
+ const { scrollParentRef: autoFoundRef, status: autoFindStatus } = useScrollParentAutoFind(contentWrapperRef, { enabled: !!needAutoFind, isHorizontal: false, contentId: isWeapp ? contentId : undefined });
54
+ const effectiveScrollElement = (_b = scrollElement !== null && scrollElement !== void 0 ? scrollElement : scrollElementCtx === null || scrollElementCtx === void 0 ? void 0 : scrollElementCtx.scrollRef) !== null && _b !== void 0 ? _b : (needAutoFind && autoFindStatus === 'found' ? autoFoundRef : null);
55
+ const ctxStart = scrollElementCtx === null || scrollElementCtx === void 0 ? void 0 : scrollElementCtx.startOffset;
56
+ const hasExplicitStartOffset = ctxStart != null && ctxStart > 0;
57
+ const needMeasureStartOffset = flowType === 'nested' &&
58
+ effectiveScrollElement &&
59
+ isH5 &&
60
+ startOffset == null &&
61
+ !hasExplicitStartOffset;
62
+ const needMeasureStartOffsetWeapp = flowType === 'nested' &&
63
+ effectiveScrollElement &&
64
+ isWeapp &&
65
+ startOffset == null &&
66
+ !hasExplicitStartOffset;
67
+ const measuredStartOffset = useMeasureStartOffset(effectiveScrollElement !== null && effectiveScrollElement !== void 0 ? effectiveScrollElement : { current: null }, contentWrapperRef, { enabled: !!needMeasureStartOffset, isHorizontal: false });
68
+ const effectiveStartOffsetRef = useRef(0);
69
+ const measuredStartOffsetWeapp = useMeasureStartOffsetWeapp(effectiveScrollElement !== null && effectiveScrollElement !== void 0 ? effectiveScrollElement : { current: null }, contentId, { enabled: !!needMeasureStartOffsetWeapp, isHorizontal: false, startOffsetRef: effectiveStartOffsetRef });
70
+ const effectiveStartOffset = (_e = (_d = (_c = startOffset !== null && startOffset !== void 0 ? startOffset : (ctxStart != null && ctxStart > 0 ? ctxStart : null)) !== null && _c !== void 0 ? _c : measuredStartOffset) !== null && _d !== void 0 ? _d : measuredStartOffsetWeapp) !== null && _e !== void 0 ? _e : 0;
71
+ const effectiveContainerHeight = containerHeight !== null && containerHeight !== void 0 ? containerHeight : scrollElementCtx === null || scrollElementCtx === void 0 ? void 0 : scrollElementCtx.containerHeight;
35
72
  const startOffsetRef = useRef(effectiveStartOffset);
36
73
  const containerHeightRef = useRef(effectiveContainerHeight);
37
74
  const lastReportedHeightRef = useRef(0);
38
75
  startOffsetRef.current = effectiveStartOffset;
76
+ if (!needMeasureStartOffsetWeapp) {
77
+ effectiveStartOffsetRef.current = effectiveStartOffset;
78
+ }
39
79
  containerHeightRef.current = effectiveContainerHeight;
40
- // type=nested 时显式开启 scrollElement 模式;否则始终用 default(自有 ScrollView)
41
- const useScrollElementMode = flowType === 'nested' && !!(effectiveScrollElement && isH5);
42
- if (flowType === 'nested' && !effectiveScrollElement && isH5) {
80
+ const useScrollElementMode = flowType === 'nested' && !!(effectiveScrollElement && (isH5 || isWeapp));
81
+ const renderView = useScrollElementMode || (!!needAutoFind && autoFindStatus === 'pending');
82
+ const scrollViewShellRef = useRef(null);
83
+ if (flowType === 'nested' && !effectiveScrollElement && (isH5 || isWeapp) && autoFindStatus === 'not-found') {
43
84
  // eslint-disable-next-line no-console
44
- console.warn('[WaterFlow] type=nested 但无 scrollElement(propsContext),回退为 default');
85
+ console.warn('[WaterFlow] nestedScroll 模式但无 scrollElement(props/Context/自动查找),回退为 default,将渲染自有 ScrollView');
45
86
  }
46
- const defaultId = useId().replace(/:/g, '');
47
87
  /**
48
88
  * 初始化数据模型
49
89
  */
50
90
  const root = useMemo(() => {
51
91
  return new Root({
52
- id: id !== null && id !== void 0 ? id : defaultId,
92
+ id: contentId,
53
93
  cacheCount,
54
94
  upperThresholdCount,
55
95
  lowerThresholdCount,
56
- skipContainerMeasure: useScrollElementMode,
96
+ skipContainerMeasure: useScrollElementMode || (!!needAutoFind && autoFindStatus === 'pending'),
57
97
  });
58
- }, [id, cacheCount, upperThresholdCount, lowerThresholdCount, useScrollElementMode]);
98
+ }, [contentId, upperThresholdCount, lowerThresholdCount, useScrollElementMode, needAutoFind, autoFindStatus]);
99
+ /** props 动态修改 cacheCount 时同步到 Root,避免重建 Root;并收敛快滑单边放大到新的基线 */
100
+ useLayoutEffect(() => {
101
+ root.cacheCount = cacheCount;
102
+ root.setNodeCacheRange(cacheCount, cacheCount);
103
+ }, [root, cacheCount]);
59
104
  const isScrolling$ = useObservedAttr(root, 'isScrolling');
60
105
  const scrollHeight$ = useObservedAttr(root, 'scrollHeight');
61
106
  const renderRange$ = useObservedAttr(root, 'renderRange');
62
107
  const refEventOrig = useRef();
108
+ const nodeCacheCtlRef = useRef(null);
109
+ useLayoutEffect(() => {
110
+ if (root.skipContainerMeasure)
111
+ return;
112
+ const shell = renderView ? contentWrapperRef.current : scrollViewShellRef.current;
113
+ root.measureContainerSize(shell).catch(() => { });
114
+ }, [root, renderView, needAutoFind, autoFindStatus]);
115
+ useEffect(() => {
116
+ const ctl = createWaterFlowNodeCacheControl(root, () => root.cacheCount);
117
+ nodeCacheCtlRef.current = ctl;
118
+ return () => {
119
+ ctl.dispose();
120
+ nodeCacheCtlRef.current = null;
121
+ };
122
+ }, [root]);
63
123
  /**
64
124
  * 滚动事件
65
125
  */
66
126
  const handleScroll = useMemoizedFn((ev) => {
127
+ var _a;
67
128
  refEventOrig.current = ev;
68
- root.sections.forEach((section) => section.getNodeRenderRange());
69
- const { scrollTop } = ev.detail;
70
- // 确定滚动方向
71
- const scrollDirection = root.getState().scrollOffset < scrollTop ? 'forward' : 'backward';
72
- // 设置滚动信息,包括方向和偏移量
129
+ const { scrollTop: detailScrollTop } = ev.detail;
130
+ (_a = nodeCacheCtlRef.current) === null || _a === void 0 ? void 0 : _a.onScrollSample(detailScrollTop);
131
+ const scrollDirection = root.getState().scrollOffset < detailScrollTop ? 'forward' : 'backward';
73
132
  root.setStateBatch({
74
133
  scrollDirection: scrollDirection,
75
- scrollOffset: scrollTop,
134
+ scrollOffset: detailScrollTop,
76
135
  isScrolling: true,
77
136
  });
78
137
  });
138
+ const onScrollMerged = useMemoizedFn((ev) => {
139
+ handleScroll(ev);
140
+ onScrollProp === null || onScrollProp === void 0 ? void 0 : onScrollProp(ev);
141
+ });
142
+ const controlledScrollTop = pickControlledScrollOffset(scrollTop);
143
+ const controlledScrollLeft = pickControlledScrollOffset(scrollLeft);
79
144
  const sections = useMemo(() => {
80
145
  var _a;
81
146
  const [start, end] = renderRange$;
@@ -87,38 +152,86 @@ function WaterFlow(_a) {
87
152
  const sectionProps = child.props;
88
153
  const sectionId = sectionProps.id || `section-${order}`;
89
154
  const childCount = Children.count(sectionProps.children);
155
+ const autoColumn = !!sectionProps.autoColumn;
90
156
  let section = root.findSection(sectionId);
91
157
  if (section) {
92
158
  const originalCount = section.count;
93
159
  if (childCount > originalCount) {
94
- section.pushNodes(childCount - originalCount);
160
+ section.pushNodesStructuralOnly(childCount - originalCount);
95
161
  }
96
162
  }
97
163
  else {
98
164
  section = new Section(root, {
99
165
  id: sectionId,
100
166
  order,
101
- col: (_a = sectionProps.column) !== null && _a !== void 0 ? _a : 1,
167
+ col: autoColumn
168
+ ? getFeedColumn(Taro.getSystemInfoSync().windowWidth)
169
+ : ((_a = sectionProps.column) !== null && _a !== void 0 ? _a : 1),
102
170
  rowGap: sectionProps.rowGap || 0,
103
171
  columnGap: sectionProps.columnGap || 0,
104
172
  count: Children.count(sectionProps.children),
105
173
  });
106
174
  }
175
+ // 同步只读控制字段(纯赋值,不触发 pub);autoColumn 下列数由 useResize/reflow 驱动
176
+ section.autoColumn = autoColumn;
177
+ section.onColumnChange = sectionProps.onColumnChange;
107
178
  return cloneElement(child, { section, key: `${props.id}-${order}` });
108
179
  })) === null || _a === void 0 ? void 0 : _a.slice(start, end + 1);
109
180
  }, [renderRange$[0], renderRange$[1], children, root, props.id]);
181
+ /** autoColumn:监听窗口变化,组件内部算列数并原地 reflow,不依赖业务改 props */
182
+ useResize(useMemoizedFn((res) => {
183
+ var _a, _b, _c;
184
+ const width = (_b = (_a = res === null || res === void 0 ? void 0 : res.size) === null || _a === void 0 ? void 0 : _a.windowWidth) !== null && _b !== void 0 ? _b : Taro.getSystemInfoSync().windowWidth;
185
+ const nextCol = getFeedColumn(width);
186
+ let changed = false;
187
+ for (const section of root.sectionMap.values()) {
188
+ if (section.autoColumn && section.col !== nextCol) {
189
+ section.reflow(nextCol);
190
+ changed = true;
191
+ }
192
+ }
193
+ if (changed) {
194
+ root.setStateIn('renderRange', root.getSectionRenderRange());
195
+ for (const section of root.sectionMap.values()) {
196
+ if (section.autoColumn)
197
+ (_c = section.onColumnChange) === null || _c === void 0 ? void 0 : _c.call(section, nextCol);
198
+ }
199
+ }
200
+ }));
201
+ /** 配对 pushNodesStructuralOnly:在 layout 阶段完成 Section 状态,避免 useMemo 内 setState 告警 */
202
+ useLayoutEffect(() => {
203
+ Children.forEach(children, (child, order) => {
204
+ var _a;
205
+ if (Object.is(child, null)) {
206
+ return;
207
+ }
208
+ const sectionProps = child.props;
209
+ const sectionId = sectionProps.id || `section-${order}`;
210
+ (_a = root.findSection(sectionId)) === null || _a === void 0 ? void 0 : _a.finalizePushNodesStateIfNeeded();
211
+ });
212
+ }, [children, root]);
110
213
  const scrollTo = useMemoizedFn((scrollOffset = 0) => {
111
214
  var _a;
112
215
  scrollOffset = Math.max(0, scrollOffset);
113
216
  if (root.getState().scrollOffset === scrollOffset)
114
217
  return;
115
- // scrollElement 模式下需操作外部容器,且需加上 startOffset
116
- if (useScrollElementMode && (effectiveScrollElement === null || effectiveScrollElement === void 0 ? void 0 : effectiveScrollElement.current) && isH5) {
218
+ if (useScrollElementMode && (effectiveScrollElement === null || effectiveScrollElement === void 0 ? void 0 : effectiveScrollElement.current)) {
117
219
  const el = effectiveScrollElement.current;
118
- const scrollTarget = scrollOffset + ((_a = startOffsetRef.current) !== null && _a !== void 0 ? _a : 0);
119
- el.scrollTo({ top: scrollTarget });
220
+ const startOff = isWeapp ? effectiveStartOffsetRef.current : ((_a = startOffsetRef.current) !== null && _a !== void 0 ? _a : 0);
221
+ const scrollTarget = scrollOffset + startOff;
222
+ if (isH5) {
223
+ el.scrollTo({ top: scrollTarget });
224
+ }
225
+ else if (isWeapp) {
226
+ const scrollViewId = el.id || `_wf_${contentId}`;
227
+ if (!el.id)
228
+ el.id = scrollViewId;
229
+ getScrollViewContextNode(`#${scrollViewId}`).then((node) => {
230
+ var _a;
231
+ (_a = node === null || node === void 0 ? void 0 : node.scrollTo) === null || _a === void 0 ? void 0 : _a.call(node, { top: scrollTarget, animated: true, duration: 300 });
232
+ });
233
+ }
120
234
  root.setStateBatch({ scrollOffset, isScrolling: true });
121
- root.sections.forEach((s) => s.getNodeRenderRange());
122
235
  return;
123
236
  }
124
237
  getScrollViewContextNode(`#${root.id}`).then((node) => {
@@ -138,6 +251,7 @@ function WaterFlow(_a) {
138
251
  }, [isScrolling$]);
139
252
  /**
140
253
  * 处理滚动阈值
254
+ * root 需入参:autoFind 从 pending→found 时 root 会重建,必须对新 root 重新订阅
141
255
  */
142
256
  useEffect(() => {
143
257
  const disposers = [
@@ -153,7 +267,7 @@ function WaterFlow(_a) {
153
267
  disposer();
154
268
  });
155
269
  };
156
- }, [onScrollToUpper, onScrollToLower]);
270
+ }, [root, onScrollToUpper, onScrollToLower]);
157
271
  /**
158
272
  * 处理 scrollIntoView
159
273
  * 竞态:快速切换目标时,取消前一次滚动,避免后发先至
@@ -201,34 +315,75 @@ function WaterFlow(_a) {
201
315
  }
202
316
  return () => { cancelled = true; };
203
317
  }, [scrollIntoView, renderRange$[0], renderRange$[1], onScrollIntoViewComplete]);
204
- // 任务 3.3:scrollElement 模式下监听外部滚动,更新 root.scrollOffset
318
+ // scrollElement 模式下监听外部滚动,更新 root.scrollOffset;effectiveStartOffset 变化时重新同步;内嵌时 scrollRef 可能尚未就绪,需重试
205
319
  useEffect(() => {
206
320
  if (!useScrollElementMode || !effectiveScrollElement)
207
321
  return;
208
- const el = effectiveScrollElement.current;
209
- if (!el)
210
- return;
211
- const handler = () => {
212
- var _a;
213
- const scrollTop = el.scrollTop;
214
- const offset = scrollTop - ((_a = startOffsetRef.current) !== null && _a !== void 0 ? _a : 0);
215
- const effectiveOffset = Math.max(0, offset);
216
- const scrollDirection = root.getState().scrollOffset < effectiveOffset ? 'forward' : 'backward';
217
- root.sections.forEach((section) => section.getNodeRenderRange());
218
- root.setStateBatch({
219
- scrollDirection,
220
- scrollOffset: effectiveOffset,
221
- isScrolling: true,
222
- });
322
+ let cancelled = false;
323
+ let teardown = null;
324
+ const maxRetries = 20;
325
+ const tryAttach = (retryCount = 0) => {
326
+ if (cancelled)
327
+ return;
328
+ const target = effectiveScrollElement.current;
329
+ if (!target) {
330
+ if (retryCount < maxRetries) {
331
+ setTimeout(() => tryAttach(retryCount + 1), 50);
332
+ }
333
+ return;
334
+ }
335
+ const getStartOffset = () => { var _a; return (isWeapp ? effectiveStartOffsetRef.current : ((_a = startOffsetRef.current) !== null && _a !== void 0 ? _a : 0)); };
336
+ const handler = (e) => {
337
+ var _a, _b, _c, _d, _e, _f;
338
+ const scrollTop = isWeapp
339
+ ? ((_e = (_b = (_a = e === null || e === void 0 ? void 0 : e.target) === null || _a === void 0 ? void 0 : _a.scrollTop) !== null && _b !== void 0 ? _b : (_d = (_c = e === null || e === void 0 ? void 0 : e.mpEvent) === null || _c === void 0 ? void 0 : _c.detail) === null || _d === void 0 ? void 0 : _d.scrollTop) !== null && _e !== void 0 ? _e : 0)
340
+ : target.scrollTop;
341
+ const offset = scrollTop - getStartOffset();
342
+ const effectiveOffset = Math.max(0, offset);
343
+ const prevOffset = root.getState().scrollOffset;
344
+ const scrollDirection = prevOffset < effectiveOffset ? 'forward' : 'backward';
345
+ (_f = nodeCacheCtlRef.current) === null || _f === void 0 ? void 0 : _f.onScrollSample(effectiveOffset);
346
+ root.setStateBatch({
347
+ scrollDirection,
348
+ scrollOffset: effectiveOffset,
349
+ isScrolling: true,
350
+ });
351
+ };
352
+ if (isWeapp) {
353
+ if (!target.id)
354
+ target.id = `_wf_${contentId}`;
355
+ const scrollViewId = target.id;
356
+ const scope = weappScope({ current: target });
357
+ const query = scope != null
358
+ ? Taro.createSelectorQuery().in(scope)
359
+ : Taro.createSelectorQuery();
360
+ query.select(`#${scrollViewId}`).scrollOffset().exec((res) => {
361
+ var _a;
362
+ if (cancelled)
363
+ return;
364
+ const info = res === null || res === void 0 ? void 0 : res[0];
365
+ if (info) {
366
+ const scrollTopVal = (_a = info.scrollTop) !== null && _a !== void 0 ? _a : 0;
367
+ const initialOffset = Math.max(0, scrollTopVal - getStartOffset());
368
+ root.setStateBatch({ scrollOffset: initialOffset, isScrolling: true });
369
+ }
370
+ });
371
+ }
372
+ else {
373
+ const initialOffset = Math.max(0, target.scrollTop - getStartOffset());
374
+ root.setStateBatch({ scrollOffset: initialOffset, isScrolling: true });
375
+ }
376
+ target.addEventListener('scroll', handler, isWeapp ? undefined : { passive: true });
377
+ teardown = () => target.removeEventListener('scroll', handler);
378
+ };
379
+ tryAttach();
380
+ return () => {
381
+ cancelled = true;
382
+ teardown === null || teardown === void 0 ? void 0 : teardown();
223
383
  };
224
- // 同步初始位置
225
- handler();
226
- el.addEventListener('scroll', handler, { passive: true });
227
- return () => el.removeEventListener('scroll', handler);
228
- }, [useScrollElementMode, effectiveScrollElement, root]);
229
- // 任务 4.2:scrollHeight 变化时回调,便于 List 动高联动(props 优先,其次从 Context 获取)
230
- // 防抖上报:Root 多源触发 updateScrollHeight 可能产生多轮不同值;等 150ms 无新值时上报当前值(视为布局收敛结果)
231
- const reportHeight = onScrollHeightChange !== null && onScrollHeightChange !== void 0 ? onScrollHeightChange : listScrollCtx === null || listScrollCtx === void 0 ? void 0 : listScrollCtx.reportNestedHeightChange;
384
+ }, [useScrollElementMode, effectiveScrollElement, root, effectiveStartOffset, contentId]);
385
+ // scrollHeight 变化时回调(props 优先,其次从 Context),便于 List 动高联动;防抖 150ms 上报
386
+ const reportHeight = onScrollHeightChange !== null && onScrollHeightChange !== void 0 ? onScrollHeightChange : scrollElementCtx === null || scrollElementCtx === void 0 ? void 0 : scrollElementCtx.reportNestedHeightChange;
232
387
  useEffect(() => {
233
388
  if (!reportHeight || scrollHeight$ <= 0)
234
389
  return;
@@ -240,13 +395,36 @@ function WaterFlow(_a) {
240
395
  }, 150);
241
396
  return () => clearTimeout(timer);
242
397
  }, [scrollHeight$, reportHeight]);
243
- // 任务 3.4:scrollElement 模式下 containerSize containerHeight / scrollElement 获取
244
- // ResizeObserver 监听 scrollElement 尺寸变化;containerHeight prop 变化时也需同步(如 List 内嵌时父传子)
398
+ // scrollElement 模式下监听容器尺寸:H5 ResizeObserver,小程序用 createSelectorQuery 轮询
245
399
  useEffect(() => {
246
400
  if (!useScrollElementMode || !effectiveScrollElement)
247
401
  return;
248
402
  const el = effectiveScrollElement.current;
249
- if (!el || typeof ResizeObserver === 'undefined')
403
+ if (!el)
404
+ return;
405
+ if (isWeapp) {
406
+ if (!el.id)
407
+ el.id = `_wf_${contentId}`;
408
+ const scrollViewId = el.id;
409
+ const measure = () => {
410
+ const scope = weappScope({ current: el });
411
+ const query = scope != null
412
+ ? Taro.createSelectorQuery().in(scope)
413
+ : Taro.createSelectorQuery();
414
+ query.select(`#${scrollViewId}`).boundingClientRect().exec((res) => {
415
+ var _a;
416
+ const rect = res === null || res === void 0 ? void 0 : res[0];
417
+ if (rect && rect.height > 0 && rect.width > 0) {
418
+ const height = (_a = containerHeightRef.current) !== null && _a !== void 0 ? _a : rect.height;
419
+ root.setStateIn('containerSize', { width: rect.width, height });
420
+ }
421
+ });
422
+ };
423
+ measure();
424
+ const interval = setInterval(measure, 150);
425
+ return () => clearInterval(interval);
426
+ }
427
+ if (typeof ResizeObserver === 'undefined')
250
428
  return;
251
429
  const update = () => {
252
430
  var _a;
@@ -260,19 +438,20 @@ function WaterFlow(_a) {
260
438
  const ro = new ResizeObserver(update);
261
439
  ro.observe(el);
262
440
  return () => ro.disconnect();
263
- }, [useScrollElementMode, effectiveScrollElement, root, effectiveContainerHeight]);
264
- // 任务 3.2:scrollElement 模式下不渲染 ScrollView,只渲染内容 View
265
- // 内容高度必须为 scrollHeight,否则父 scrollElement 无法正确滚动;显式写 height 覆盖 style 中的 height
266
- if (useScrollElementMode) {
441
+ }, [useScrollElementMode, effectiveScrollElement, root, effectiveContainerHeight, contentId]);
442
+ if (renderView) {
267
443
  return createElement(View, {
268
- ref: contentWrapperRef,
444
+ ref: setContainerRef,
269
445
  id: root.id,
270
446
  style: Object.assign(Object.assign({}, style), { width: '100%', position: 'relative', height: scrollHeight$, pointerEvents: isScrolling$ ? 'none' : 'auto' }),
271
447
  className,
272
448
  }, sections);
273
449
  }
274
- return createElement(ScrollView, Object.assign({ id: root.id, style: Object.assign({ WebkitOverflowScrolling: 'touch', overflow: 'auto' }, style), className, scrollY: true, onScroll: handleScroll }, rest), createElement(View, {
275
- id: 'waterflow-root',
450
+ return createElement(ScrollView, Object.assign(Object.assign(Object.assign({ id: root.id, ref: (el) => {
451
+ scrollViewShellRef.current = el;
452
+ }, style: Object.assign({ WebkitOverflowScrolling: 'touch', overflow: 'auto' }, style), className, scrollY: true, onScroll: onScrollMerged }, (controlledScrollTop !== undefined ? { scrollTop: controlledScrollTop } : {})), (controlledScrollLeft !== undefined ? { scrollLeft: controlledScrollLeft } : {})), rest), createElement(View, {
453
+ ref: setContainerRef,
454
+ id: `waterflow-root_${instanceSuffix}`,
276
455
  style: {
277
456
  width: '100%',
278
457
  position: 'relative',
@@ -280,7 +459,8 @@ function WaterFlow(_a) {
280
459
  pointerEvents: isScrolling$ ? 'none' : 'auto',
281
460
  },
282
461
  }, sections));
283
- }
462
+ };
463
+ const WaterFlow = forwardRef(InnerWaterFlow);
284
464
 
285
465
  export { WaterFlow };
286
466
  //# sourceMappingURL=water-flow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"water-flow.js","sources":["../../../src/components/water-flow/water-flow.ts"],"sourcesContent":["import { BaseEventOrig, ScrollView, ScrollViewProps, View } from '@tarojs/components'\nimport { nextTick } from '@tarojs/taro'\nimport {\n Children,\n cloneElement,\n createElement,\n PropsWithChildren,\n ReactElement,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n} from 'react'\n\nimport { debounce, getScrollViewContextNode } from '../../utils'\nimport { ListScrollElementContext } from '../list'\nimport { useMeasureStartOffset } from '../list/hooks/useMeasureStartOffset'\nimport { _FlowSectionProps } from './flow-section'\nimport { Root, RootEvents } from './root'\nimport { Section } from './section'\nimport { useMemoizedFn } from './use-memoized-fn'\nimport { useObservedAttr } from './use-observed-attr'\nimport { getSysInfo, isH5 } from './utils'\n\nimport type { ScrollDirection, WaterFlowProps } from './interface'\n\ngetSysInfo()\n\nexport function WaterFlow({ children, ...props }: PropsWithChildren<WaterFlowProps>) {\n const {\n id,\n style = {},\n className,\n cacheCount = 1,\n onScrollToUpper,\n onScrollToLower,\n upperThresholdCount,\n lowerThresholdCount,\n scrollIntoView,\n type: flowType = 'default',\n scrollElement,\n startOffset,\n containerHeight,\n onScrollHeightChange,\n onScrollIntoViewComplete,\n ...rest\n } = props\n // 任务 4.1:支持从 ListScrollElementContext 获取(List 内嵌 WaterFlow 时)\n const listScrollCtx = useContext(ListScrollElementContext)\n const effectiveScrollElement = scrollElement ?? listScrollCtx?.scrollRef\n const contentWrapperRef = useRef<HTMLDivElement>(null)\n const measuredStartOffset = useMeasureStartOffset(\n effectiveScrollElement ?? { current: null },\n contentWrapperRef,\n {\n enabled: !!(\n (flowType === 'nested' && effectiveScrollElement && isH5) &&\n startOffset == null &&\n !listScrollCtx\n ),\n isHorizontal: false,\n }\n )\n const effectiveStartOffset = startOffset ?? listScrollCtx?.startOffset ?? measuredStartOffset ?? 0\n const effectiveContainerHeight = containerHeight ?? listScrollCtx?.containerHeight\n\n const startOffsetRef = useRef(effectiveStartOffset)\n const containerHeightRef = useRef(effectiveContainerHeight)\n const lastReportedHeightRef = useRef<number>(0)\n startOffsetRef.current = effectiveStartOffset\n containerHeightRef.current = effectiveContainerHeight\n\n // type=nested 时显式开启 scrollElement 模式;否则始终用 default(自有 ScrollView)\n const useScrollElementMode =\n flowType === 'nested' && !!(effectiveScrollElement && isH5)\n if (flowType === 'nested' && !effectiveScrollElement && isH5) {\n // eslint-disable-next-line no-console\n console.warn('[WaterFlow] type=nested 但无 scrollElement(props 或 Context),回退为 default')\n }\n const defaultId = useId().replace(/:/g, '')\n /**\n * 初始化数据模型\n */\n const root = useMemo(() => {\n return new Root({\n id: id ?? defaultId,\n cacheCount,\n upperThresholdCount,\n lowerThresholdCount,\n skipContainerMeasure: useScrollElementMode,\n })\n }, [id, cacheCount, upperThresholdCount, lowerThresholdCount, useScrollElementMode])\n const isScrolling$ = useObservedAttr(root, 'isScrolling')\n const scrollHeight$ = useObservedAttr(root, 'scrollHeight')\n const renderRange$ = useObservedAttr(root, 'renderRange')\n const refEventOrig = useRef<BaseEventOrig>()\n\n /**\n * 滚动事件\n */\n const handleScroll = useMemoizedFn((ev: BaseEventOrig<ScrollViewProps.onScrollDetail>) => {\n refEventOrig.current = ev\n root.sections.forEach((section) => section.getNodeRenderRange())\n const { scrollTop } = ev.detail\n // 确定滚动方向\n const scrollDirection: ScrollDirection = root.getState().scrollOffset < scrollTop ? 'forward' : 'backward'\n // 设置滚动信息,包括方向和偏移量\n root.setStateBatch({\n scrollDirection: scrollDirection,\n scrollOffset: scrollTop,\n isScrolling: true,\n })\n })\n\n const sections = useMemo(() => {\n const [start, end] = renderRange$\n return Children.map(children, (child: ReactElement<PropsWithChildren<_FlowSectionProps>>, order) => {\n if (Object.is(child, null)) {\n return null\n }\n const sectionProps = child.props\n const sectionId = sectionProps.id || `section-${order}`\n const childCount = Children.count(sectionProps.children)\n let section = root.findSection(sectionId)\n if (section) {\n const originalCount = section.count\n if (childCount > originalCount) {\n section.pushNodes(childCount - originalCount)\n }\n } else {\n section = new Section(root, {\n id: sectionId,\n order,\n col: sectionProps.column ?? 1,\n rowGap: sectionProps.rowGap || 0,\n columnGap: sectionProps.columnGap || 0,\n count: Children.count(sectionProps.children),\n })\n }\n\n return cloneElement(child, { section, key: `${props.id}-${order}` })\n })?.slice(start, end + 1)\n }, [renderRange$[0], renderRange$[1], children, root, props.id])\n\n const scrollTo = useMemoizedFn((scrollOffset = 0) => {\n scrollOffset = Math.max(0, scrollOffset)\n if (root.getState().scrollOffset === scrollOffset) return\n // scrollElement 模式下需操作外部容器,且需加上 startOffset\n if (useScrollElementMode && effectiveScrollElement?.current && isH5) {\n const el = effectiveScrollElement.current\n const scrollTarget = scrollOffset + (startOffsetRef.current ?? 0)\n el.scrollTo({ top: scrollTarget })\n root.setStateBatch({ scrollOffset, isScrolling: true })\n root.sections.forEach((s) => s.getNodeRenderRange())\n return\n }\n getScrollViewContextNode(`#${root.id}`).then((node: any) => {\n node.scrollTo({\n animated: true,\n duration: 300,\n top: scrollOffset,\n })\n })\n })\n\n const resetScrolling = useMemoizedFn(() => {\n root.setStateIn('isScrolling', false)\n })\n\n const debouncedResetScrolling = debounce(resetScrolling)\n\n useEffect(() => {\n debouncedResetScrolling()\n }, [isScrolling$])\n\n /**\n * 处理滚动阈值\n */\n useEffect(() => {\n const disposers = [\n root.sub(\n RootEvents.ReachUpperThreshold,\n debounce(() => {\n onScrollToUpper?.(refEventOrig.current!)\n })\n ),\n root.sub(\n RootEvents.ReachLowerThreshold,\n debounce(() => {\n onScrollToLower?.(refEventOrig.current!)\n })\n ),\n ]\n return () => {\n disposers.forEach((disposer) => {\n disposer()\n })\n }\n }, [onScrollToUpper, onScrollToLower])\n\n /**\n * 处理 scrollIntoView\n * 竞态:快速切换目标时,取消前一次滚动,避免后发先至\n */\n useEffect(() => {\n let cancelled = false\n handleScrollIntoView()\n async function handleScrollIntoView() {\n if (!scrollIntoView) return\n const targetNode = root.findNode(scrollIntoView)\n if (!targetNode) {\n nextTick(() => { if (!cancelled) onScrollIntoViewComplete?.() })\n return\n }\n const targetSection = targetNode.section\n const doScroll = () => {\n if (cancelled) return\n scrollTo(targetNode.getState().scrollTop)\n if (cancelled) return\n nextTick(() => { if (!cancelled) onScrollIntoViewComplete?.() })\n }\n if (!targetSection.getState().layouted) {\n const order = targetSection.order\n root.setStateIn('renderRange', [\n Math.min(renderRange$[0], order),\n Math.max(renderRange$[1], order),\n ])\n nextTick(async () => {\n await targetNode.section.layoutedSignal.promise\n if (cancelled) return\n doScroll()\n })\n return\n }\n await targetSection.layoutedSignal.promise\n if (cancelled) return\n doScroll()\n }\n return () => { cancelled = true }\n }, [scrollIntoView, renderRange$[0], renderRange$[1], onScrollIntoViewComplete])\n\n // 任务 3.3:scrollElement 模式下监听外部滚动,更新 root.scrollOffset\n useEffect(() => {\n if (!useScrollElementMode || !effectiveScrollElement) return\n const el = effectiveScrollElement.current\n if (!el) return\n\n const handler = () => {\n const scrollTop = el.scrollTop\n const offset = scrollTop - (startOffsetRef.current ?? 0)\n const effectiveOffset = Math.max(0, offset)\n const scrollDirection: ScrollDirection = root.getState().scrollOffset < effectiveOffset ? 'forward' : 'backward'\n\n root.sections.forEach((section) => section.getNodeRenderRange())\n root.setStateBatch({\n scrollDirection,\n scrollOffset: effectiveOffset,\n isScrolling: true,\n })\n }\n\n // 同步初始位置\n handler()\n el.addEventListener('scroll', handler, { passive: true })\n return () => el.removeEventListener('scroll', handler)\n }, [useScrollElementMode, effectiveScrollElement, root])\n\n // 任务 4.2:scrollHeight 变化时回调,便于 List 动高联动(props 优先,其次从 Context 获取)\n // 防抖上报:Root 多源触发 updateScrollHeight 可能产生多轮不同值;等 150ms 无新值时上报当前值(视为布局收敛结果)\n const reportHeight = onScrollHeightChange ?? listScrollCtx?.reportNestedHeightChange\n useEffect(() => {\n if (!reportHeight || scrollHeight$ <= 0) return\n const timer = setTimeout(() => {\n if (Math.abs(lastReportedHeightRef.current - scrollHeight$) < 1) return\n lastReportedHeightRef.current = scrollHeight$\n reportHeight(scrollHeight$)\n }, 150)\n return () => clearTimeout(timer)\n }, [scrollHeight$, reportHeight])\n\n // 任务 3.4:scrollElement 模式下 containerSize 从 containerHeight / scrollElement 获取\n // ResizeObserver 监听 scrollElement 尺寸变化;containerHeight prop 变化时也需同步(如 List 内嵌时父传子)\n useEffect(() => {\n if (!useScrollElementMode || !effectiveScrollElement) return\n const el = effectiveScrollElement.current\n if (!el || typeof ResizeObserver === 'undefined') return\n\n const update = () => {\n const height = containerHeightRef.current ?? el.clientHeight\n const width = el.clientWidth\n if (height > 0 && width > 0) {\n root.setStateIn('containerSize', { width, height })\n }\n }\n update()\n const ro = new ResizeObserver(update)\n ro.observe(el)\n return () => ro.disconnect()\n }, [useScrollElementMode, effectiveScrollElement, root, effectiveContainerHeight])\n\n // 任务 3.2:scrollElement 模式下不渲染 ScrollView,只渲染内容 View\n // 内容高度必须为 scrollHeight,否则父 scrollElement 无法正确滚动;显式写 height 覆盖 style 中的 height\n if (useScrollElementMode) {\n return createElement(\n View,\n {\n ref: contentWrapperRef as any,\n id: root.id,\n style: {\n ...style,\n width: '100%',\n position: 'relative',\n height: scrollHeight$,\n pointerEvents: isScrolling$ ? 'none' : 'auto',\n },\n className,\n },\n sections\n )\n }\n\n return createElement(\n ScrollView,\n {\n id: root.id,\n style: {\n WebkitOverflowScrolling: 'touch',\n overflow: 'auto',\n ...style,\n },\n className,\n scrollY: true,\n onScroll: handleScroll,\n ...rest,\n },\n createElement(\n View,\n {\n id: 'waterflow-root',\n style: {\n width: '100%',\n position: 'relative',\n height: scrollHeight$,\n pointerEvents: isScrolling$ ? 'none' : 'auto',\n },\n },\n sections\n )\n )\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"water-flow.js","sources":["../../../src/components/water-flow/water-flow.ts"],"sourcesContent":["import { BaseEventOrig, ScrollView, ScrollViewProps, View } from '@tarojs/components'\nimport Taro, { nextTick, useResize } from '@tarojs/taro'\nimport {\n Children,\n cloneElement,\n createElement,\n forwardRef,\n PropsWithChildren,\n ReactElement,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n} from 'react'\n\nimport { debounce, getScrollViewContextNode, weappScope } from '../../utils'\nimport {\n type ScrollElementContextValueShape,\n ScrollElementContextOrFallback,\n} from '../../utils/scrollElementContext'\nimport { useMeasureStartOffset } from '../list/hooks/useMeasureStartOffset'\nimport { useMeasureStartOffsetWeapp } from '../list/hooks/useMeasureStartOffsetWeapp'\nimport { useScrollParentAutoFind } from '../list/hooks/useScrollParentAutoFind'\nimport { getFeedColumn } from './feed-column'\nimport { _FlowSectionProps } from './flow-section'\nimport { Root, RootEvents } from './root'\nimport { Section } from './section'\nimport { useMemoizedFn } from './use-memoized-fn'\nimport { useObservedAttr } from './use-observed-attr'\nimport { getSysInfo, isH5, isWeapp } from './utils'\nimport { createWaterFlowNodeCacheControl } from './water-flow-node-cache'\n\nimport type { ScrollDirection, WaterFlowProps } from './interface'\n\ngetSysInfo()\n\n/** 仅有效数字才作为 ScrollView 受控滚动偏移,避免 undefined/null 在 H5 经 Number(null)→0 归顶 */\nfunction pickControlledScrollOffset (value: unknown): number | undefined {\n return typeof value === 'number' && !Number.isNaN(value) ? value : undefined\n}\n\nconst InnerWaterFlow = (\n { children, ...props }: PropsWithChildren<WaterFlowProps>,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const {\n id,\n style = {},\n className,\n cacheCount = 1,\n onScrollToUpper,\n onScrollToLower,\n upperThresholdCount,\n lowerThresholdCount,\n scrollIntoView,\n nestedScroll,\n scrollElement,\n startOffset,\n containerHeight,\n onScrollHeightChange,\n onScrollIntoViewComplete,\n onScroll: onScrollProp,\n scrollTop,\n scrollLeft,\n ...rest\n } = props\n const flowType = nestedScroll === true ? 'nested' : 'default'\n // 从 ScrollElementContext 获取 scrollRef(List/ScrollView 内嵌时提供);无 Context 时兜底为 fallback\n const scrollElementCtx = useContext(ScrollElementContextOrFallback) as ScrollElementContextValueShape | null\n const contentWrapperRef = useRef<HTMLDivElement>(null)\n const setContainerRef = useCallback(\n (el: HTMLElement | null) => {\n (contentWrapperRef as React.MutableRefObject<HTMLElement | null>).current = el\n if (typeof ref === 'function') ref(el)\n else if (ref) (ref as React.MutableRefObject<HTMLElement | null>).current = el\n },\n [ref]\n )\n const defaultId = useId().replace(/:/g, '')\n /** 仅在原有 id 后追加同一实例内共享的随机数尾缀,不替换原 id 串 */\n const instanceIdSuffixRef = useRef<string | null>(null)\n if (instanceIdSuffixRef.current === null) {\n instanceIdSuffixRef.current = String(Math.floor(Math.random() * 1e9))\n }\n const instanceSuffix = instanceIdSuffixRef.current\n const contentId = useMemo(\n () => `${id ?? defaultId}_${instanceSuffix}`,\n [id, defaultId, instanceSuffix]\n )\n const needAutoFind =\n flowType === 'nested' &&\n !scrollElement &&\n !scrollElementCtx?.scrollRef &&\n (isH5 || isWeapp)\n const { scrollParentRef: autoFoundRef, status: autoFindStatus } = useScrollParentAutoFind(\n contentWrapperRef,\n { enabled: !!needAutoFind, isHorizontal: false, contentId: isWeapp ? contentId : undefined }\n )\n const effectiveScrollElement =\n scrollElement ??\n scrollElementCtx?.scrollRef ??\n (needAutoFind && autoFindStatus === 'found' ? autoFoundRef : null)\n const ctxStart = scrollElementCtx?.startOffset\n const hasExplicitStartOffset = ctxStart != null && ctxStart > 0\n const needMeasureStartOffset =\n flowType === 'nested' &&\n effectiveScrollElement &&\n isH5 &&\n startOffset == null &&\n !hasExplicitStartOffset\n const needMeasureStartOffsetWeapp =\n flowType === 'nested' &&\n effectiveScrollElement &&\n isWeapp &&\n startOffset == null &&\n !hasExplicitStartOffset\n const measuredStartOffset = useMeasureStartOffset(\n effectiveScrollElement ?? { current: null },\n contentWrapperRef,\n { enabled: !!needMeasureStartOffset, isHorizontal: false }\n )\n const effectiveStartOffsetRef = useRef(0)\n const measuredStartOffsetWeapp = useMeasureStartOffsetWeapp(\n effectiveScrollElement ?? { current: null },\n contentId,\n { enabled: !!needMeasureStartOffsetWeapp, isHorizontal: false, startOffsetRef: effectiveStartOffsetRef }\n )\n const effectiveStartOffset =\n startOffset ??\n (ctxStart != null && ctxStart > 0 ? ctxStart : null) ??\n measuredStartOffset ??\n measuredStartOffsetWeapp ??\n 0\n\n const effectiveContainerHeight = containerHeight ?? scrollElementCtx?.containerHeight\n\n const startOffsetRef = useRef(effectiveStartOffset)\n const containerHeightRef = useRef(effectiveContainerHeight)\n const lastReportedHeightRef = useRef<number>(0)\n startOffsetRef.current = effectiveStartOffset\n if (!needMeasureStartOffsetWeapp) {\n effectiveStartOffsetRef.current = effectiveStartOffset\n }\n containerHeightRef.current = effectiveContainerHeight\n\n const useScrollElementMode =\n flowType === 'nested' && !!(effectiveScrollElement && (isH5 || isWeapp))\n const renderView =\n useScrollElementMode || (!!needAutoFind && autoFindStatus === 'pending')\n const scrollViewShellRef = useRef<HTMLElement | null>(null)\n if (flowType === 'nested' && !effectiveScrollElement && (isH5 || isWeapp) && autoFindStatus === 'not-found') {\n // eslint-disable-next-line no-console\n console.warn('[WaterFlow] nestedScroll 模式但无 scrollElement(props/Context/自动查找),回退为 default,将渲染自有 ScrollView')\n }\n /**\n * 初始化数据模型\n */\n const root = useMemo(() => {\n return new Root({\n id: contentId,\n cacheCount,\n upperThresholdCount,\n lowerThresholdCount,\n skipContainerMeasure: useScrollElementMode || (!!needAutoFind && autoFindStatus === 'pending'),\n })\n }, [contentId, upperThresholdCount, lowerThresholdCount, useScrollElementMode, needAutoFind, autoFindStatus])\n\n /** props 动态修改 cacheCount 时同步到 Root,避免重建 Root;并收敛快滑单边放大到新的基线 */\n useLayoutEffect(() => {\n root.cacheCount = cacheCount\n root.setNodeCacheRange(cacheCount, cacheCount)\n }, [root, cacheCount])\n const isScrolling$ = useObservedAttr(root, 'isScrolling')\n const scrollHeight$ = useObservedAttr(root, 'scrollHeight')\n const renderRange$ = useObservedAttr(root, 'renderRange')\n const refEventOrig = useRef<BaseEventOrig>()\n const nodeCacheCtlRef = useRef<ReturnType<typeof createWaterFlowNodeCacheControl> | null>(null)\n\n useLayoutEffect(() => {\n if (root.skipContainerMeasure) return\n const shell = renderView ? contentWrapperRef.current : scrollViewShellRef.current\n root.measureContainerSize(shell as HTMLElement | null).catch(() => {})\n }, [root, renderView, needAutoFind, autoFindStatus])\n\n useEffect(() => {\n const ctl = createWaterFlowNodeCacheControl(root, () => root.cacheCount)\n nodeCacheCtlRef.current = ctl\n return () => {\n ctl.dispose()\n nodeCacheCtlRef.current = null\n }\n }, [root])\n\n /**\n * 滚动事件\n */\n const handleScroll = useMemoizedFn((ev: BaseEventOrig<ScrollViewProps.onScrollDetail>) => {\n refEventOrig.current = ev\n const { scrollTop: detailScrollTop } = ev.detail\n nodeCacheCtlRef.current?.onScrollSample(detailScrollTop)\n const scrollDirection: ScrollDirection = root.getState().scrollOffset < detailScrollTop ? 'forward' : 'backward'\n root.setStateBatch({\n scrollDirection: scrollDirection,\n scrollOffset: detailScrollTop,\n isScrolling: true,\n })\n })\n\n const onScrollMerged = useMemoizedFn((ev: BaseEventOrig<ScrollViewProps.onScrollDetail>) => {\n handleScroll(ev)\n onScrollProp?.(ev)\n })\n\n const controlledScrollTop = pickControlledScrollOffset(scrollTop)\n const controlledScrollLeft = pickControlledScrollOffset(scrollLeft)\n\n const sections = useMemo(() => {\n const [start, end] = renderRange$\n return Children.map(children, (child: ReactElement<PropsWithChildren<_FlowSectionProps>>, order) => {\n if (Object.is(child, null)) {\n return null\n }\n const sectionProps = child.props\n const sectionId = sectionProps.id || `section-${order}`\n const childCount = Children.count(sectionProps.children)\n const autoColumn = !!sectionProps.autoColumn\n let section = root.findSection(sectionId)\n if (section) {\n const originalCount = section.count\n if (childCount > originalCount) {\n section.pushNodesStructuralOnly(childCount - originalCount)\n }\n } else {\n section = new Section(root, {\n id: sectionId,\n order,\n col: autoColumn\n ? getFeedColumn(Taro.getSystemInfoSync().windowWidth)\n : (sectionProps.column ?? 1),\n rowGap: sectionProps.rowGap || 0,\n columnGap: sectionProps.columnGap || 0,\n count: Children.count(sectionProps.children),\n })\n }\n // 同步只读控制字段(纯赋值,不触发 pub);autoColumn 下列数由 useResize/reflow 驱动\n section.autoColumn = autoColumn\n section.onColumnChange = sectionProps.onColumnChange\n\n return cloneElement(child, { section, key: `${props.id}-${order}` })\n })?.slice(start, end + 1)\n }, [renderRange$[0], renderRange$[1], children, root, props.id])\n\n /** autoColumn:监听窗口变化,组件内部算列数并原地 reflow,不依赖业务改 props */\n useResize(useMemoizedFn((res: Taro.PageResizeObject) => {\n const width = res?.size?.windowWidth ?? Taro.getSystemInfoSync().windowWidth\n const nextCol = getFeedColumn(width)\n let changed = false\n for (const section of root.sectionMap.values()) {\n if (section.autoColumn && section.col !== nextCol) {\n section.reflow(nextCol)\n changed = true\n }\n }\n if (changed) {\n root.setStateIn('renderRange', root.getSectionRenderRange())\n for (const section of root.sectionMap.values()) {\n if (section.autoColumn) section.onColumnChange?.(nextCol)\n }\n }\n }))\n\n /** 配对 pushNodesStructuralOnly:在 layout 阶段完成 Section 状态,避免 useMemo 内 setState 告警 */\n useLayoutEffect(() => {\n Children.forEach(children, (child: ReactElement<PropsWithChildren<_FlowSectionProps>>, order) => {\n if (Object.is(child, null)) {\n return\n }\n const sectionProps = child.props\n const sectionId = sectionProps.id || `section-${order}`\n root.findSection(sectionId)?.finalizePushNodesStateIfNeeded()\n })\n }, [children, root])\n\n const scrollTo = useMemoizedFn((scrollOffset = 0) => {\n scrollOffset = Math.max(0, scrollOffset)\n if (root.getState().scrollOffset === scrollOffset) return\n if (useScrollElementMode && effectiveScrollElement?.current) {\n const el = effectiveScrollElement.current as any\n const startOff = isWeapp ? effectiveStartOffsetRef.current : (startOffsetRef.current ?? 0)\n const scrollTarget = scrollOffset + startOff\n if (isH5) {\n el.scrollTo({ top: scrollTarget })\n } else if (isWeapp) {\n const scrollViewId = el.id || `_wf_${contentId}`\n if (!el.id) el.id = scrollViewId\n getScrollViewContextNode(`#${scrollViewId}`).then((node: any) => {\n node?.scrollTo?.({ top: scrollTarget, animated: true, duration: 300 })\n })\n }\n root.setStateBatch({ scrollOffset, isScrolling: true })\n return\n }\n getScrollViewContextNode(`#${root.id}`).then((node: any) => {\n node.scrollTo({\n animated: true,\n duration: 300,\n top: scrollOffset,\n })\n })\n })\n\n const resetScrolling = useMemoizedFn(() => {\n root.setStateIn('isScrolling', false)\n })\n\n const debouncedResetScrolling = debounce(resetScrolling)\n\n useEffect(() => {\n debouncedResetScrolling()\n }, [isScrolling$])\n\n /**\n * 处理滚动阈值\n * root 需入参:autoFind 从 pending→found 时 root 会重建,必须对新 root 重新订阅\n */\n useEffect(() => {\n const disposers = [\n root.sub(\n RootEvents.ReachUpperThreshold,\n debounce(() => {\n onScrollToUpper?.(refEventOrig.current!)\n })\n ),\n root.sub(\n RootEvents.ReachLowerThreshold,\n debounce(() => {\n onScrollToLower?.(refEventOrig.current!)\n })\n ),\n ]\n return () => {\n disposers.forEach((disposer) => {\n disposer()\n })\n }\n }, [root, onScrollToUpper, onScrollToLower])\n\n /**\n * 处理 scrollIntoView\n * 竞态:快速切换目标时,取消前一次滚动,避免后发先至\n */\n useEffect(() => {\n let cancelled = false\n handleScrollIntoView()\n async function handleScrollIntoView() {\n if (!scrollIntoView) return\n const targetNode = root.findNode(scrollIntoView)\n if (!targetNode) {\n nextTick(() => { if (!cancelled) onScrollIntoViewComplete?.() })\n return\n }\n const targetSection = targetNode.section\n const doScroll = () => {\n if (cancelled) return\n scrollTo(targetNode.getState().scrollTop)\n if (cancelled) return\n nextTick(() => { if (!cancelled) onScrollIntoViewComplete?.() })\n }\n if (!targetSection.getState().layouted) {\n const order = targetSection.order\n root.setStateIn('renderRange', [\n Math.min(renderRange$[0], order),\n Math.max(renderRange$[1], order),\n ])\n nextTick(async () => {\n await targetNode.section.layoutedSignal.promise\n if (cancelled) return\n doScroll()\n })\n return\n }\n await targetSection.layoutedSignal.promise\n if (cancelled) return\n doScroll()\n }\n return () => { cancelled = true }\n }, [scrollIntoView, renderRange$[0], renderRange$[1], onScrollIntoViewComplete])\n\n // scrollElement 模式下监听外部滚动,更新 root.scrollOffset;effectiveStartOffset 变化时重新同步;内嵌时 scrollRef 可能尚未就绪,需重试\n useEffect(() => {\n if (!useScrollElementMode || !effectiveScrollElement) return\n\n let cancelled = false\n let teardown: (() => void) | null = null\n const maxRetries = 20\n\n const tryAttach = (retryCount = 0) => {\n if (cancelled) return\n const target = effectiveScrollElement.current as any\n if (!target) {\n if (retryCount < maxRetries) {\n setTimeout(() => tryAttach(retryCount + 1), 50)\n }\n return\n }\n\n const getStartOffset = () => (isWeapp ? effectiveStartOffsetRef.current : (startOffsetRef.current ?? 0))\n\n const handler = (e?: any) => {\n const scrollTop = isWeapp\n ? (e?.target?.scrollTop ?? e?.mpEvent?.detail?.scrollTop ?? 0)\n : target.scrollTop\n const offset = scrollTop - getStartOffset()\n const effectiveOffset = Math.max(0, offset)\n const prevOffset = root.getState().scrollOffset\n const scrollDirection: ScrollDirection = prevOffset < effectiveOffset ? 'forward' : 'backward'\n\n nodeCacheCtlRef.current?.onScrollSample(effectiveOffset)\n root.setStateBatch({\n scrollDirection,\n scrollOffset: effectiveOffset,\n isScrolling: true,\n })\n }\n\n if (isWeapp) {\n if (!target.id) target.id = `_wf_${contentId}`\n const scrollViewId = target.id\n const scope = weappScope({ current: target })\n const query = scope != null\n ? Taro.createSelectorQuery().in(scope as any)\n : Taro.createSelectorQuery()\n query.select(`#${scrollViewId}`).scrollOffset().exec((res) => {\n if (cancelled) return\n const info = res?.[0]\n if (info) {\n const scrollTopVal = info.scrollTop ?? 0\n const initialOffset = Math.max(0, scrollTopVal - getStartOffset())\n root.setStateBatch({ scrollOffset: initialOffset, isScrolling: true })\n }\n })\n } else {\n const initialOffset = Math.max(0, target.scrollTop - getStartOffset())\n root.setStateBatch({ scrollOffset: initialOffset, isScrolling: true })\n }\n\n target.addEventListener('scroll', handler, isWeapp ? undefined : { passive: true })\n teardown = () => target.removeEventListener('scroll', handler)\n }\n\n tryAttach()\n return () => {\n cancelled = true\n teardown?.()\n }\n }, [useScrollElementMode, effectiveScrollElement, root, effectiveStartOffset, contentId])\n\n // scrollHeight 变化时回调(props 优先,其次从 Context),便于 List 动高联动;防抖 150ms 上报\n const reportHeight = onScrollHeightChange ?? scrollElementCtx?.reportNestedHeightChange\n useEffect(() => {\n if (!reportHeight || scrollHeight$ <= 0) return\n const timer = setTimeout(() => {\n if (Math.abs(lastReportedHeightRef.current - scrollHeight$) < 1) return\n lastReportedHeightRef.current = scrollHeight$\n reportHeight(scrollHeight$)\n }, 150)\n return () => clearTimeout(timer)\n }, [scrollHeight$, reportHeight])\n\n // scrollElement 模式下监听容器尺寸:H5 用 ResizeObserver,小程序用 createSelectorQuery 轮询\n useEffect(() => {\n if (!useScrollElementMode || !effectiveScrollElement) return\n const el = effectiveScrollElement.current as any\n if (!el) return\n\n if (isWeapp) {\n if (!el.id) el.id = `_wf_${contentId}`\n const scrollViewId = el.id\n const measure = () => {\n const scope = weappScope({ current: el })\n const query = scope != null\n ? Taro.createSelectorQuery().in(scope as any)\n : Taro.createSelectorQuery()\n query.select(`#${scrollViewId}`).boundingClientRect().exec((res) => {\n const rect = res?.[0]\n if (rect && rect.height > 0 && rect.width > 0) {\n const height = containerHeightRef.current ?? rect.height\n root.setStateIn('containerSize', { width: rect.width, height })\n }\n })\n }\n measure()\n const interval = setInterval(measure, 150)\n return () => clearInterval(interval)\n }\n\n if (typeof ResizeObserver === 'undefined') return\n const update = () => {\n const height = containerHeightRef.current ?? el.clientHeight\n const width = el.clientWidth\n if (height > 0 && width > 0) {\n root.setStateIn('containerSize', { width, height })\n }\n }\n update()\n const ro = new ResizeObserver(update)\n ro.observe(el)\n return () => ro.disconnect()\n }, [useScrollElementMode, effectiveScrollElement, root, effectiveContainerHeight, contentId])\n\n if (renderView) {\n return createElement(\n View,\n {\n ref: setContainerRef as any,\n id: root.id,\n style: {\n ...style,\n width: '100%',\n position: 'relative',\n height: scrollHeight$,\n pointerEvents: isScrolling$ ? 'none' : 'auto',\n },\n className,\n },\n sections\n )\n }\n\n return createElement(\n ScrollView,\n {\n id: root.id,\n ref: (el: any) => {\n scrollViewShellRef.current = el\n },\n style: {\n WebkitOverflowScrolling: 'touch',\n overflow: 'auto',\n ...style,\n },\n className,\n scrollY: true,\n onScroll: onScrollMerged,\n ...(controlledScrollTop !== undefined ? { scrollTop: controlledScrollTop } : {}),\n ...(controlledScrollLeft !== undefined ? { scrollLeft: controlledScrollLeft } : {}),\n ...rest,\n },\n createElement(\n View,\n {\n ref: setContainerRef as any,\n id: `waterflow-root_${instanceSuffix}`,\n style: {\n width: '100%',\n position: 'relative',\n height: scrollHeight$,\n pointerEvents: isScrolling$ ? 'none' : 'auto',\n },\n },\n sections\n )\n )\n}\n\nexport const WaterFlow = forwardRef<HTMLElement, PropsWithChildren<WaterFlowProps>>(InnerWaterFlow)\n"],"names":[],"mappings":"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"}