@unif/react-native-chat 2.1.1 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/lib/module/components/Message/MarkdownContent/MarkdownContent.js +16 -5
  2. package/lib/module/components/Message/MarkdownContent/MarkdownContent.js.map +1 -1
  3. package/lib/module/components/MessageList/MessageList.js +64 -156
  4. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  5. package/lib/module/components/MessageList/MessageListRow.js +23 -0
  6. package/lib/module/components/MessageList/MessageListRow.js.map +1 -0
  7. package/lib/module/components/MessageList/useMessageListScroll.js +153 -0
  8. package/lib/module/components/MessageList/useMessageListScroll.js.map +1 -0
  9. package/lib/module/components/MessageList/webPrependAnchor/useWebPrependAnchor.web.js +35 -26
  10. package/lib/module/components/MessageList/webPrependAnchor/useWebPrependAnchor.web.js.map +1 -1
  11. package/lib/typescript/src/components/Message/MarkdownContent/MarkdownContent.d.ts.map +1 -1
  12. package/lib/typescript/src/components/Message/MarkdownContent/types.d.ts +3 -0
  13. package/lib/typescript/src/components/Message/MarkdownContent/types.d.ts.map +1 -1
  14. package/lib/typescript/src/components/MessageList/MessageList.d.ts.map +1 -1
  15. package/lib/typescript/src/components/MessageList/MessageListRow.d.ts +11 -0
  16. package/lib/typescript/src/components/MessageList/MessageListRow.d.ts.map +1 -0
  17. package/lib/typescript/src/components/MessageList/useMessageListScroll.d.ts +21 -0
  18. package/lib/typescript/src/components/MessageList/useMessageListScroll.d.ts.map +1 -0
  19. package/lib/typescript/src/components/MessageList/webPrependAnchor/types.d.ts +2 -0
  20. package/lib/typescript/src/components/MessageList/webPrependAnchor/types.d.ts.map +1 -1
  21. package/lib/typescript/src/components/MessageList/webPrependAnchor/useWebPrependAnchor.web.d.ts.map +1 -1
  22. package/package.json +1 -1
  23. package/src/components/Message/MarkdownContent/MarkdownContent.tsx +22 -5
  24. package/src/components/Message/MarkdownContent/types.ts +4 -0
  25. package/src/components/MessageList/MessageList.tsx +77 -176
  26. package/src/components/MessageList/MessageListRow.tsx +35 -0
  27. package/src/components/MessageList/useMessageListScroll.ts +216 -0
  28. package/src/components/MessageList/webPrependAnchor/types.ts +2 -0
  29. package/src/components/MessageList/webPrependAnchor/useWebPrependAnchor.web.ts +121 -87
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { Children, Fragment, useMemo } from 'react';
3
+ import { Children, cloneElement, Fragment, isValidElement, useMemo } from 'react';
4
4
  import { Pressable, Text } from 'react-native';
5
5
  import { Renderer, useMarkdown } from 'react-native-marked';
6
6
  import { useTheme, useThemedStyles } from '@unif/react-native-design';
@@ -22,10 +22,21 @@ export function MarkdownContent({
22
22
  instance.table = (...args) => /*#__PURE__*/_jsx(Fragment, {
23
23
  children: renderTable(...args)
24
24
  }, instance.getKey());
25
- instance.image = (uri, alt, _imageStyle, title) => /*#__PURE__*/_jsx(MarkdownImage, {
26
- uri: uri,
27
- label: alt || title
28
- }, instance.getKey());
25
+ const renderImage = instance.image.bind(instance);
26
+ instance.image = (uri, alt, imageStyle, title) => {
27
+ // 沿用上游的 SVG 识别与加载,位图适配只避免重复测量。
28
+ if (uri.endsWith('.svg')) {
29
+ const image = renderImage(uri, alt, imageStyle, title);
30
+ // 上游 SVG 节点支持 alt,但 Renderer 未转交 Markdown 的标签。
31
+ return /*#__PURE__*/isValidElement(image) ? /*#__PURE__*/cloneElement(image, {
32
+ alt: alt || title || undefined
33
+ }) : image;
34
+ }
35
+ return /*#__PURE__*/_jsx(MarkdownImage, {
36
+ uri: uri,
37
+ label: alt || title
38
+ }, instance.getKey());
39
+ };
29
40
  instance.link = (children, href, linkStyle, title) => /*#__PURE__*/_jsx(Text, {
30
41
  selectable: true,
31
42
  style: linkStyle,
@@ -1 +1 @@
1
- {"version":3,"names":["Children","Fragment","useMemo","Pressable","Text","Renderer","useMarkdown","useTheme","useThemedStyles","createStyles","MarkdownImage","jsx","_jsx","_Fragment","MarkdownContent","text","onLinkPress","scheme","styles","markdown","instance","renderTable","table","bind","args","children","getKey","image","uri","alt","_imageStyle","title","label","link","href","linkStyle","selectable","style","accessibilityRole","undefined","accessibilityLabel","onPress","event","stopPropagation","linkImage","imageStyle","content","renderer","nodes","colorScheme","toArray"],"sourceRoot":"../../../../../src","sources":["components/Message/MarkdownContent/MarkdownContent.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Children","cloneElement","Fragment","isValidElement","useMemo","Pressable","Text","Renderer","useMarkdown","useTheme","useThemedStyles","createStyles","MarkdownImage","jsx","_jsx","_Fragment","MarkdownContent","text","onLinkPress","scheme","styles","markdown","instance","renderTable","table","bind","args","children","getKey","renderImage","image","uri","alt","imageStyle","title","endsWith","undefined","label","link","href","linkStyle","selectable","style","accessibilityRole","accessibilityLabel","onPress","event","stopPropagation","linkImage","content","renderer","nodes","colorScheme","toArray"],"sourceRoot":"../../../../../src","sources":["components/Message/MarkdownContent/MarkdownContent.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,12 +1,17 @@
1
1
  "use strict";
2
2
 
3
- import { useImperativeHandle, useLayoutEffect, useRef, useState } from 'react';
3
+ import { useCallback, useImperativeHandle, useMemo, useRef } from 'react';
4
4
  import { FlatList, View } from 'react-native';
5
5
  import { Button } from '@unif/react-native-design';
6
6
  import { DEFAULT_END_THRESHOLD } from "./constants.js";
7
7
  import { styles } from "./styles.js";
8
8
  import { useWebPrependAnchor } from "./webPrependAnchor/index.js";
9
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
9
+ import { useMessageListScroll } from "./useMessageListScroll.js";
10
+ import { MessageListRow } from "./MessageListRow.js";
11
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
+ const MAINTAIN_VISIBLE_POSITION = {
13
+ minIndexForVisible: 0
14
+ };
10
15
  export function MessageList({
11
16
  items,
12
17
  keyExtractor,
@@ -30,22 +35,7 @@ export function MessageList({
30
35
  ref
31
36
  }) {
32
37
  const listRef = useRef(null);
33
- const measurements = useRef({
34
- viewport: 0,
35
- content: 0,
36
- offset: 0,
37
- hasContentSize: false
38
- });
39
- const initial = useRef(initialPosition);
40
- const initialized = useRef(false);
41
- const previousKeys = useRef([]);
42
- const prependPending = useRef(false);
43
- const pendingScroll = useRef(undefined);
44
- const userScrolling = useRef(false);
45
- const atEndRef = useRef(undefined);
46
- const [atEnd, setAtEnd] = useState(true);
47
- const threshold = Number.isFinite(endThreshold) ? Math.max(0, endThreshold) : DEFAULT_END_THRESHOLD;
48
- const keys = items.map(keyExtractor);
38
+ const keys = useMemo(() => items.map(keyExtractor), [items, keyExtractor]);
49
39
  const {
50
40
  getRowNativeID,
51
41
  preservingPrependRef,
@@ -55,94 +45,56 @@ export function MessageList({
55
45
  itemsIdentity: items,
56
46
  keys
57
47
  });
58
- useLayoutEffect(() => {
59
- const previous = previousKeys.current;
60
- const added = keys.length - previous.length;
61
- const onlyPrepended = previous.length > 0 && added > 0 && previous.every((key, index) => keys[index + added] === key);
62
- const changed = keys.length !== previous.length || keys.some((key, index) => key !== previous[index]);
63
- if (changed) prependPending.current = onlyPrepended;
64
- previousKeys.current = keys;
48
+ const {
49
+ atEnd,
50
+ scrollToEnd,
51
+ onLayout,
52
+ onContentSizeChange,
53
+ onScroll,
54
+ onUserScrollBegin,
55
+ onScrollEndDrag,
56
+ onMomentumScrollEnd
57
+ } = useMessageListScroll({
58
+ listRef,
59
+ keys,
60
+ initialPosition,
61
+ followOutput,
62
+ endThreshold,
63
+ onAtEndChange,
64
+ preservingPrependRef,
65
+ cancelPrependPreservation
65
66
  });
66
- function ready() {
67
- const current = measurements.current;
68
- return current.viewport > 0 && current.hasContentSize;
69
- }
70
- function publishPosition() {
71
- if (!ready()) return;
72
- const {
73
- viewport,
74
- content,
75
- offset
76
- } = measurements.current;
77
- const next = content - viewport - Math.max(0, offset) <= threshold;
78
- if (next !== atEndRef.current) {
79
- atEndRef.current = next;
80
- setAtEnd(next);
81
- onAtEndChange?.(next);
82
- }
83
- }
84
- function scrollToEnd(options = {}) {
85
- cancelPrependPreservation();
86
- const request = {
87
- animated: options.animated ?? true
88
- };
89
- if (!ready()) {
90
- pendingScroll.current = request;
91
- return;
92
- }
93
- pendingScroll.current = undefined;
94
- listRef.current?.scrollToOffset({
95
- offset: Math.max(0, measurements.current.content - measurements.current.viewport),
96
- animated: request.animated
97
- });
98
- if (measurements.current.content <= measurements.current.viewport) publishPosition();
99
- }
100
67
  useImperativeHandle(ref, () => ({
101
68
  scrollToEnd
102
- }));
103
- function reconcileLayout(contentChanged) {
104
- if (!ready()) return;
105
- const request = pendingScroll.current;
106
- if (items.length > 0 && !initialized.current) {
107
- initialized.current = true;
108
- if (request || initial.current === 'end') {
109
- scrollToEnd(request ?? {
110
- animated: false
111
- });
112
- return;
113
- }
114
- publishPosition();
115
- return;
116
- }
117
- if (request) {
118
- scrollToEnd(request);
119
- return;
120
- }
121
- const prepended = prependPending.current;
122
- if (contentChanged) prependPending.current = false;
123
- const shouldFollow = initialized.current && followOutput === 'whenAtEnd' && !userScrolling.current && !prepended && !preservingPrependRef.current && atEndRef.current;
124
- if (shouldFollow) scrollToEnd({
125
- animated: false
126
- });else publishPosition();
127
- }
128
- function onScroll(event) {
129
- const {
130
- contentOffset,
131
- contentSize,
132
- layoutMeasurement
133
- } = event.nativeEvent;
134
- const movedUp = contentOffset.y < measurements.current.offset;
135
- const resizingAtEnd = atEndRef.current && !movedUp && !userScrolling.current && followOutput === 'whenAtEnd' && (measurements.current.content !== contentSize.height || measurements.current.viewport !== layoutMeasurement.height);
136
- measurements.current = {
137
- offset: contentOffset.y,
138
- content: contentSize.height,
139
- viewport: layoutMeasurement.height,
140
- hasContentSize: true
141
- };
142
- if (!resizingAtEnd) publishPosition();
143
- }
69
+ }), [scrollToEnd]);
70
+ const renderRow = useCallback(({
71
+ item,
72
+ index
73
+ }) => /*#__PURE__*/_jsx(MessageListRow, {
74
+ item: item,
75
+ index: index,
76
+ previous: renderSeparator ? items[index - 1] : undefined,
77
+ nativeID: getRowNativeID(keys[index]),
78
+ renderItem: renderItem,
79
+ renderSeparator: renderSeparator,
80
+ extraData: extraData
81
+ }), [extraData, getRowNativeID, items, keys, renderItem, renderSeparator]);
144
82
  const history = hasEarlier && onRequestEarlier;
145
83
  const hasHeader = Boolean(header || history);
84
+ const listHeader = useMemo(() => hasHeader ? /*#__PURE__*/_jsxs(View, {
85
+ children: [header, history ? /*#__PURE__*/_jsx(Button, {
86
+ label: loadingEarlier ? '正在加载…' : '查看更早消息',
87
+ variant: "text",
88
+ loading: loadingEarlier,
89
+ onPress: onRequestEarlier
90
+ }) : null]
91
+ }) : undefined, [hasHeader, header, history, loadingEarlier, onRequestEarlier]);
92
+ const listFooter = useMemo(() => footer ? /*#__PURE__*/_jsx(View, {
93
+ children: footer
94
+ }) : undefined, [footer]);
95
+ const listEmpty = useMemo(() => empty ? /*#__PURE__*/_jsx(View, {
96
+ children: empty
97
+ }) : undefined, [empty]);
146
98
  return /*#__PURE__*/_jsxs(View, {
147
99
  style: [styles.root, style],
148
100
  testID: testID,
@@ -153,65 +105,21 @@ export function MessageList({
153
105
  data: items,
154
106
  keyExtractor: keyExtractor,
155
107
  extraData: extraData,
156
- renderItem: ({
157
- item,
158
- index
159
- }) => /*#__PURE__*/_jsxs(View, {
160
- nativeID: getRowNativeID(keyExtractor(item)),
161
- children: [index > 0 && renderSeparator ? renderSeparator(items[index - 1], item) : null, renderItem(item, index)]
162
- }),
163
- ListHeaderComponent: hasHeader ? /*#__PURE__*/_jsxs(View, {
164
- children: [header, history ? /*#__PURE__*/_jsx(Button, {
165
- label: loadingEarlier ? '正在加载…' : '查看更早消息',
166
- variant: "text",
167
- loading: loadingEarlier,
168
- onPress: onRequestEarlier
169
- }) : null]
170
- }) : undefined,
171
- ListFooterComponent: footer ? /*#__PURE__*/_jsx(View, {
172
- children: footer
173
- }) : undefined,
174
- ListEmptyComponent: empty ? /*#__PURE__*/_jsx(View, {
175
- children: empty
176
- }) : undefined,
177
- maintainVisibleContentPosition: {
178
- minIndexForVisible: 0
179
- },
108
+ renderItem: renderRow,
109
+ ListHeaderComponent: listHeader,
110
+ ListFooterComponent: listFooter,
111
+ ListEmptyComponent: listEmpty,
112
+ maintainVisibleContentPosition: MAINTAIN_VISIBLE_POSITION,
180
113
  keyboardDismissMode: keyboardDismissMode,
181
114
  keyboardShouldPersistTaps: "handled",
182
115
  scrollEventThrottle: 16,
183
- onLayout: ({
184
- nativeEvent: {
185
- layout
186
- }
187
- }) => {
188
- measurements.current.viewport = layout.height;
189
- reconcileLayout(false);
190
- },
191
- onContentSizeChange: (_width, height) => {
192
- measurements.current.content = height;
193
- measurements.current.hasContentSize = true;
194
- reconcileLayout(true);
195
- },
116
+ onLayout: onLayout,
117
+ onContentSizeChange: onContentSizeChange,
196
118
  onScroll: onScroll,
197
- onScrollBeginDrag: () => {
198
- userScrolling.current = true;
199
- },
200
- onMomentumScrollBegin: () => {
201
- userScrolling.current = true;
202
- },
203
- onScrollEndDrag: event => {
204
- onScroll(event);
205
- if (!event.nativeEvent.velocity?.y) {
206
- userScrolling.current = false;
207
- publishPosition();
208
- }
209
- },
210
- onMomentumScrollEnd: event => {
211
- onScroll(event);
212
- userScrolling.current = false;
213
- publishPosition();
214
- }
119
+ onScrollBeginDrag: onUserScrollBegin,
120
+ onMomentumScrollBegin: onUserScrollBegin,
121
+ onScrollEndDrag: onScrollEndDrag,
122
+ onMomentumScrollEnd: onMomentumScrollEnd
215
123
  }), showScrollToEnd && items.length > 0 && !atEnd ? /*#__PURE__*/_jsx(Button, {
216
124
  label: "\u56DE\u5230\u6700\u65B0\u6D88\u606F",
217
125
  variant: "secondary",
@@ -1 +1 @@
1
- {"version":3,"names":["useImperativeHandle","useLayoutEffect","useRef","useState","FlatList","View","Button","DEFAULT_END_THRESHOLD","styles","useWebPrependAnchor","jsxs","_jsxs","jsx","_jsx","MessageList","items","keyExtractor","renderItem","extraData","header","footer","empty","renderSeparator","initialPosition","followOutput","endThreshold","showScrollToEnd","onAtEndChange","hasEarlier","loadingEarlier","onRequestEarlier","keyboardDismissMode","style","testID","ref","listRef","measurements","viewport","content","offset","hasContentSize","initial","initialized","previousKeys","prependPending","pendingScroll","undefined","userScrolling","atEndRef","atEnd","setAtEnd","threshold","Number","isFinite","Math","max","keys","map","getRowNativeID","preservingPrependRef","cancelPrependPreservation","itemsIdentity","previous","current","added","length","onlyPrepended","every","key","index","changed","some","ready","publishPosition","next","scrollToEnd","options","request","animated","scrollToOffset","reconcileLayout","contentChanged","prepended","shouldFollow","onScroll","event","contentOffset","contentSize","layoutMeasurement","nativeEvent","movedUp","y","resizingAtEnd","height","history","hasHeader","Boolean","root","children","list","data","item","nativeID","ListHeaderComponent","label","variant","loading","onPress","ListFooterComponent","ListEmptyComponent","maintainVisibleContentPosition","minIndexForVisible","keyboardShouldPersistTaps","scrollEventThrottle","onLayout","layout","onContentSizeChange","_width","onScrollBeginDrag","onMomentumScrollBegin","onScrollEndDrag","velocity","onMomentumScrollEnd","returnToEnd"],"sourceRoot":"../../../../src","sources":["components/MessageList/MessageList.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useImperativeHandle","useMemo","useRef","FlatList","View","Button","DEFAULT_END_THRESHOLD","styles","useWebPrependAnchor","useMessageListScroll","MessageListRow","jsx","_jsx","jsxs","_jsxs","MAINTAIN_VISIBLE_POSITION","minIndexForVisible","MessageList","items","keyExtractor","renderItem","extraData","header","footer","empty","renderSeparator","initialPosition","followOutput","endThreshold","showScrollToEnd","onAtEndChange","hasEarlier","loadingEarlier","onRequestEarlier","keyboardDismissMode","style","testID","ref","listRef","keys","map","getRowNativeID","preservingPrependRef","cancelPrependPreservation","itemsIdentity","atEnd","scrollToEnd","onLayout","onContentSizeChange","onScroll","onUserScrollBegin","onScrollEndDrag","onMomentumScrollEnd","renderRow","item","index","previous","undefined","nativeID","history","hasHeader","Boolean","listHeader","children","label","variant","loading","onPress","listFooter","listEmpty","root","list","data","ListHeaderComponent","ListFooterComponent","ListEmptyComponent","maintainVisibleContentPosition","keyboardShouldPersistTaps","scrollEventThrottle","onScrollBeginDrag","onMomentumScrollBegin","length","returnToEnd"],"sourceRoot":"../../../../src","sources":["components/MessageList/MessageList.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ import { memo } from 'react';
4
+ import { View } from 'react-native';
5
+ import { jsxs as _jsxs } from "react/jsx-runtime";
6
+ function MessageListRowContent({
7
+ item,
8
+ previous,
9
+ index,
10
+ nativeID,
11
+ renderItem,
12
+ renderSeparator
13
+ }) {
14
+ return /*#__PURE__*/_jsxs(View, {
15
+ nativeID: nativeID,
16
+ children: [index > 0 && renderSeparator ? renderSeparator(previous, item) : null, renderItem(item, index)]
17
+ });
18
+ }
19
+
20
+ // extraData participates in memo's shallow comparison even though renderers
21
+ // read that external display state through their own closures.
22
+ export const MessageListRow = /*#__PURE__*/memo(MessageListRowContent);
23
+ //# sourceMappingURL=MessageListRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","View","jsxs","_jsxs","MessageListRowContent","item","previous","index","nativeID","renderItem","renderSeparator","children","MessageListRow"],"sourceRoot":"../../../../src","sources":["components/MessageList/MessageListRow.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,OAAO;AAC5B,SAASC,IAAI,QAAQ,cAAc;AAAC,SAAAC,IAAA,IAAAC,KAAA;AAapC,SAASC,qBAAqBA,CAAI;EAChCC,IAAI;EACJC,QAAQ;EACRC,KAAK;EACLC,QAAQ;EACRC,UAAU;EACVC;AACsB,CAAC,EAAE;EACzB,oBACEP,KAAA,CAACF,IAAI;IAACO,QAAQ,EAAEA,QAAS;IAAAG,QAAA,GACtBJ,KAAK,GAAG,CAAC,IAAIG,eAAe,GAAGA,eAAe,CAACJ,QAAQ,EAAGD,IAAI,CAAC,GAAG,IAAI,EACtEI,UAAU,CAACJ,IAAI,EAAEE,KAAK,CAAC;EAAA,CACpB,CAAC;AAEX;;AAEA;AACA;AACA,OAAO,MAAMK,cAAc,gBAAGZ,IAAI,CAChCI,qBACF,CAAiC","ignoreList":[]}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useLayoutEffect, useRef, useState } from 'react';
4
+ import { DEFAULT_END_THRESHOLD } from "./constants.js";
5
+ export function useMessageListScroll({
6
+ listRef,
7
+ keys,
8
+ initialPosition,
9
+ followOutput,
10
+ endThreshold = DEFAULT_END_THRESHOLD,
11
+ onAtEndChange,
12
+ preservingPrependRef,
13
+ cancelPrependPreservation
14
+ }) {
15
+ const measurements = useRef({
16
+ viewport: 0,
17
+ content: 0,
18
+ offset: 0,
19
+ hasContentSize: false
20
+ });
21
+ const initial = useRef(initialPosition);
22
+ const initialized = useRef(false);
23
+ const previousKeys = useRef([]);
24
+ const prependPending = useRef(false);
25
+ const pendingScroll = useRef(undefined);
26
+ const userScrolling = useRef(false);
27
+ const atEndRef = useRef(undefined);
28
+ const [atEnd, setAtEnd] = useState(true);
29
+ const threshold = Number.isFinite(endThreshold) ? Math.max(0, endThreshold) : DEFAULT_END_THRESHOLD;
30
+ useLayoutEffect(() => {
31
+ const previous = previousKeys.current;
32
+ const added = keys.length - previous.length;
33
+ const onlyPrepended = previous.length > 0 && added > 0 && previous.every((key, index) => keys[index + added] === key);
34
+ const changed = keys.length !== previous.length || keys.some((key, index) => key !== previous[index]);
35
+ if (changed) prependPending.current = onlyPrepended;
36
+ previousKeys.current = keys;
37
+ }, [keys]);
38
+ const ready = useCallback(() => {
39
+ const current = measurements.current;
40
+ return current.viewport > 0 && current.hasContentSize;
41
+ }, []);
42
+ const publishPosition = useCallback(() => {
43
+ if (!ready()) return;
44
+ const {
45
+ viewport,
46
+ content,
47
+ offset
48
+ } = measurements.current;
49
+ const next = content - viewport - Math.max(0, offset) <= threshold;
50
+ if (next !== atEndRef.current) {
51
+ atEndRef.current = next;
52
+ setAtEnd(next);
53
+ onAtEndChange?.(next);
54
+ }
55
+ }, [onAtEndChange, ready, threshold]);
56
+ const scrollToEnd = useCallback((options = {}) => {
57
+ cancelPrependPreservation();
58
+ const request = {
59
+ animated: options.animated ?? true
60
+ };
61
+ if (!ready()) {
62
+ pendingScroll.current = request;
63
+ return;
64
+ }
65
+ pendingScroll.current = undefined;
66
+ listRef.current?.scrollToOffset({
67
+ offset: Math.max(0, measurements.current.content - measurements.current.viewport),
68
+ animated: request.animated
69
+ });
70
+ if (measurements.current.content <= measurements.current.viewport) publishPosition();
71
+ }, [cancelPrependPreservation, listRef, publishPosition, ready]);
72
+ const itemCount = keys.length;
73
+ const reconcileLayout = useCallback(contentChanged => {
74
+ if (!ready()) return;
75
+ const request = pendingScroll.current;
76
+ if (itemCount > 0 && !initialized.current) {
77
+ initialized.current = true;
78
+ if (request || initial.current === 'end') {
79
+ scrollToEnd(request ?? {
80
+ animated: false
81
+ });
82
+ return;
83
+ }
84
+ publishPosition();
85
+ return;
86
+ }
87
+ if (request) {
88
+ scrollToEnd(request);
89
+ return;
90
+ }
91
+ const prepended = prependPending.current;
92
+ if (contentChanged) prependPending.current = false;
93
+ const shouldFollow = initialized.current && followOutput === 'whenAtEnd' && !userScrolling.current && !prepended && !preservingPrependRef.current && atEndRef.current;
94
+ if (shouldFollow) scrollToEnd({
95
+ animated: false
96
+ });else publishPosition();
97
+ }, [followOutput, itemCount, preservingPrependRef, publishPosition, ready, scrollToEnd]);
98
+ const onScroll = useCallback(event => {
99
+ const {
100
+ contentOffset,
101
+ contentSize,
102
+ layoutMeasurement
103
+ } = event.nativeEvent;
104
+ const movedUp = contentOffset.y < measurements.current.offset;
105
+ const resizingAtEnd = atEndRef.current && !movedUp && !userScrolling.current && followOutput === 'whenAtEnd' && (measurements.current.content !== contentSize.height || measurements.current.viewport !== layoutMeasurement.height);
106
+ measurements.current = {
107
+ offset: contentOffset.y,
108
+ content: contentSize.height,
109
+ viewport: layoutMeasurement.height,
110
+ hasContentSize: true
111
+ };
112
+ if (!resizingAtEnd) publishPosition();
113
+ }, [followOutput, publishPosition]);
114
+ const onLayout = useCallback(({
115
+ nativeEvent: {
116
+ layout
117
+ }
118
+ }) => {
119
+ measurements.current.viewport = layout.height;
120
+ reconcileLayout(false);
121
+ }, [reconcileLayout]);
122
+ const onContentSizeChange = useCallback((_width, height) => {
123
+ measurements.current.content = height;
124
+ measurements.current.hasContentSize = true;
125
+ reconcileLayout(true);
126
+ }, [reconcileLayout]);
127
+ const onUserScrollBegin = useCallback(() => {
128
+ userScrolling.current = true;
129
+ }, []);
130
+ const onScrollEndDrag = useCallback(event => {
131
+ onScroll(event);
132
+ if (!event.nativeEvent.velocity?.y) {
133
+ userScrolling.current = false;
134
+ publishPosition();
135
+ }
136
+ }, [onScroll, publishPosition]);
137
+ const onMomentumScrollEnd = useCallback(event => {
138
+ onScroll(event);
139
+ userScrolling.current = false;
140
+ publishPosition();
141
+ }, [onScroll, publishPosition]);
142
+ return {
143
+ atEnd,
144
+ scrollToEnd,
145
+ onLayout,
146
+ onContentSizeChange,
147
+ onScroll,
148
+ onUserScrollBegin,
149
+ onScrollEndDrag,
150
+ onMomentumScrollEnd
151
+ };
152
+ }
153
+ //# sourceMappingURL=useMessageListScroll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useLayoutEffect","useRef","useState","DEFAULT_END_THRESHOLD","useMessageListScroll","listRef","keys","initialPosition","followOutput","endThreshold","onAtEndChange","preservingPrependRef","cancelPrependPreservation","measurements","viewport","content","offset","hasContentSize","initial","initialized","previousKeys","prependPending","pendingScroll","undefined","userScrolling","atEndRef","atEnd","setAtEnd","threshold","Number","isFinite","Math","max","previous","current","added","length","onlyPrepended","every","key","index","changed","some","ready","publishPosition","next","scrollToEnd","options","request","animated","scrollToOffset","itemCount","reconcileLayout","contentChanged","prepended","shouldFollow","onScroll","event","contentOffset","contentSize","layoutMeasurement","nativeEvent","movedUp","y","resizingAtEnd","height","onLayout","layout","onContentSizeChange","_width","onUserScrollBegin","onScrollEndDrag","velocity","onMomentumScrollEnd"],"sourceRoot":"../../../../src","sources":["components/MessageList/useMessageListScroll.ts"],"mappings":"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","ignoreList":[]}