@sendbird/uikit-react-native 3.0.0-rc.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _reactNative = require("react-native");
8
+ /**
9
+ * */
10
+
11
+ function shouldUseScrollViewEnhancer() {
12
+ if (_reactNative.Platform.constants.reactNativeVersion.major < 1) {
13
+ if (_reactNative.Platform.constants.reactNativeVersion.minor < 72) {
14
+ return true;
15
+ }
16
+ }
17
+ return false;
18
+ }
19
+ function getFlatList() {
20
+ if (shouldUseScrollViewEnhancer()) {
21
+ try {
22
+ return require('@sendbird/react-native-scrollview-enhancer').FlatList;
23
+ } catch {
24
+ return require('react-native').FlatList;
25
+ }
26
+ } else {
27
+ return require('react-native').FlatList;
28
+ }
29
+ }
30
+ const FlatListInternal = getFlatList();
31
+ var _default = FlatListInternal;
32
+ exports.default = _default;
33
+ //# sourceMappingURL=FlatListInternal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","shouldUseScrollViewEnhancer","Platform","constants","reactNativeVersion","major","minor","getFlatList","FlatList","FlatListInternal","_default","exports","default"],"sources":["FlatListInternal.tsx"],"sourcesContent":["/**\n * */\nimport type { ForwardedRef, ReactElement } from 'react';\nimport type { FlatListProps, FlatList as RNFlatList, ScrollViewProps } from 'react-native';\nimport { Platform } from 'react-native';\n\nimport type { SendbirdMessage } from '@sendbird/uikit-utils';\n\ntype FlatListBidirectional<T = SendbirdMessage> = (props: FlatListProps<T> & BidirectionalProps<T>) => ReactElement;\ntype BidirectionalProps<T> = {\n onStartReached?: ((info: { distanceFromStart: number }) => void) | null | undefined;\n onStartReachedThreshold?: number | null | undefined;\n onEndReached?: ((info: { distanceFromEnd: number }) => void) | null | undefined;\n onEndReachedThreshold?: number | null | undefined;\n maintainVisibleContentPosition?: ScrollViewProps['maintainVisibleContentPosition'];\n ref: ForwardedRef<RNFlatList<T>>;\n};\n\nfunction shouldUseScrollViewEnhancer() {\n if (Platform.constants.reactNativeVersion.major < 1) {\n if (Platform.constants.reactNativeVersion.minor < 72) {\n return true;\n }\n }\n return false;\n}\nfunction getFlatList(): FlatListBidirectional {\n if (shouldUseScrollViewEnhancer()) {\n try {\n return require('@sendbird/react-native-scrollview-enhancer').FlatList;\n } catch {\n return require('react-native').FlatList;\n }\n } else {\n return require('react-native').FlatList;\n }\n}\n\nconst FlatListInternal = getFlatList();\nexport default FlatListInternal;\n"],"mappings":";;;;;;AAIA,IAAAA,YAAA,GAAAC,OAAA;AAJA;AACA;;AAiBA,SAASC,2BAA2BA,CAAA,EAAG;EACrC,IAAIC,qBAAQ,CAACC,SAAS,CAACC,kBAAkB,CAACC,KAAK,GAAG,CAAC,EAAE;IACnD,IAAIH,qBAAQ,CAACC,SAAS,CAACC,kBAAkB,CAACE,KAAK,GAAG,EAAE,EAAE;MACpD,OAAO,IAAI;IACb;EACF;EACA,OAAO,KAAK;AACd;AACA,SAASC,WAAWA,CAAA,EAA0B;EAC5C,IAAIN,2BAA2B,EAAE,EAAE;IACjC,IAAI;MACF,OAAOD,OAAO,CAAC,4CAA4C,CAAC,CAACQ,QAAQ;IACvE,CAAC,CAAC,MAAM;MACN,OAAOR,OAAO,CAAC,cAAc,CAAC,CAACQ,QAAQ;IACzC;EACF,CAAC,MAAM;IACL,OAAOR,OAAO,CAAC,cAAc,CAAC,CAACQ,QAAQ;EACzC;AACF;AAEA,MAAMC,gBAAgB,GAAGF,WAAW,EAAE;AAAC,IAAAG,QAAA,GACxBD,gBAAgB;AAAAE,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
@@ -8,28 +8,14 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
9
  var _uikitReactNativeFoundation = require("@sendbird/uikit-react-native-foundation");
10
10
  var _uikitUtils = require("@sendbird/uikit-utils");
11
+ var _FlatListInternal = _interopRequireDefault(require("./FlatListInternal"));
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
13
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
14
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
15
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
14
16
  let ANDROID_BUG_ALERT_SHOWED = _reactNative.Platform.OS !== 'android';
15
17
  const BOTTOM_DETECT_THRESHOLD = 25;
16
18
  const UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;
17
- function shouldUseScrollViewEnhancer() {
18
- if (_reactNative.Platform.constants.reactNativeVersion.major < 1) {
19
- if (_reactNative.Platform.constants.reactNativeVersion.minor < 72) {
20
- return true;
21
- }
22
- }
23
- return false;
24
- }
25
- function getFlatList() {
26
- try {
27
- return !shouldUseScrollViewEnhancer() ? require('@sendbird/react-native-scrollview-enhancer').FlatList : require('react-native').FlatList;
28
- } catch {
29
- return require('react-native').FlatList;
30
- }
31
- }
32
- const FlatList = getFlatList();
33
19
  // FIXME: Inverted FlatList performance issue on Android {@link https://github.com/facebook/react-native/issues/30034}
34
20
  const ChatFlatList = /*#__PURE__*/(0, _react.forwardRef)(function CustomFlatList(_ref, ref) {
35
21
  var _props$data;
@@ -63,7 +49,7 @@ const ChatFlatList = /*#__PURE__*/(0, _react.forwardRef)(function CustomFlatList
63
49
  // eslint-disable-next-line no-console
64
50
  console.warn('UIKit Warning: The inverted FlatList has a performance issue on Android. Maybe this is a bug.\n' + 'Please refer to the link: https://github.com/facebook/react-native/issues/30034');
65
51
  }
66
- return /*#__PURE__*/_react.default.createElement(FlatList, _extends({
52
+ return /*#__PURE__*/_react.default.createElement(_FlatListInternal.default, _extends({
67
53
  bounces: false,
68
54
  removeClippedSubviews: true,
69
55
  keyboardDismissMode: 'on-drag',
@@ -94,4 +80,4 @@ const ChatFlatList = /*#__PURE__*/(0, _react.forwardRef)(function CustomFlatList
94
80
  });
95
81
  var _default = ChatFlatList;
96
82
  exports.default = _default;
97
- //# sourceMappingURL=ChatFlatList.js.map
83
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_uikitReactNativeFoundation","_uikitUtils","_FlatListInternal","_interopRequireDefault","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_extends","assign","bind","target","i","arguments","length","source","apply","ANDROID_BUG_ALERT_SHOWED","Platform","OS","BOTTOM_DETECT_THRESHOLD","UNREACHABLE_THRESHOLD","Number","MIN_SAFE_INTEGER","ChatFlatList","forwardRef","CustomFlatList","_ref","ref","_props$data","onTopReached","onBottomReached","onScrolledAwayFromBottom","onScroll","props","select","useUIKitTheme","contentOffsetY","useRef","_onScroll","useFreshCallback","event","contentOffset","nativeEvent","prevOffsetY","current","currOffsetY","y","__DEV__","console","warn","createElement","bounces","removeClippedSubviews","keyboardDismissMode","keyboardShouldPersistTaps","indicatorStyle","light","dark","inverted","Boolean","data","onEndReached","onScrollToIndexFailed","NOOP","onStartReached","scrollEventThrottle","keyExtractor","getMessageUniqId","style","flex","StyleSheet","flatten","maintainVisibleContentPosition","minIndexForVisible","autoscrollToTopThreshold","_default","exports"],"sources":["index.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from 'react';\nimport { FlatListProps, Platform, FlatList as RNFlatList, StyleSheet } from 'react-native';\n\nimport { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { NOOP, SendbirdMessage, getMessageUniqId, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport FlatListInternal from './FlatListInternal';\n\nlet ANDROID_BUG_ALERT_SHOWED = Platform.OS !== 'android';\nconst BOTTOM_DETECT_THRESHOLD = 25;\nconst UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;\n\ntype Props = Omit<FlatListProps<SendbirdMessage>, 'onEndReached'> & {\n onBottomReached: () => void;\n onTopReached: () => void;\n onScrolledAwayFromBottom: (value: boolean) => void;\n};\n// FIXME: Inverted FlatList performance issue on Android {@link https://github.com/facebook/react-native/issues/30034}\nconst ChatFlatList = forwardRef<RNFlatList, Props>(function CustomFlatList(\n { onTopReached, onBottomReached, onScrolledAwayFromBottom, onScroll, ...props },\n ref,\n) {\n const { select } = useUIKitTheme();\n const contentOffsetY = useRef(0);\n\n const _onScroll = useFreshCallback<NonNullable<Props['onScroll']>>((event) => {\n onScroll?.(event);\n\n const { contentOffset } = event.nativeEvent;\n\n const prevOffsetY = contentOffsetY.current;\n const currOffsetY = contentOffset.y;\n\n if (BOTTOM_DETECT_THRESHOLD < prevOffsetY && currOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(false);\n } else if (BOTTOM_DETECT_THRESHOLD < currOffsetY && prevOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(true);\n }\n\n contentOffsetY.current = contentOffset.y;\n });\n\n if (__DEV__ && !ANDROID_BUG_ALERT_SHOWED) {\n ANDROID_BUG_ALERT_SHOWED = true;\n // eslint-disable-next-line no-console\n console.warn(\n 'UIKit Warning: The inverted FlatList has a performance issue on Android. Maybe this is a bug.\\n' +\n 'Please refer to the link: https://github.com/facebook/react-native/issues/30034',\n );\n }\n\n return (\n <FlatListInternal\n bounces={false}\n removeClippedSubviews\n keyboardDismissMode={'on-drag'}\n keyboardShouldPersistTaps={'handled'}\n indicatorStyle={select({ light: 'black', dark: 'white' })}\n {...props}\n // FIXME: inverted list of ListEmptyComponent is reversed {@link https://github.com/facebook/react-native/issues/21196#issuecomment-836937743}\n inverted={Boolean(props.data?.length)}\n ref={ref}\n onEndReached={onTopReached}\n onScrollToIndexFailed={NOOP}\n onStartReached={onBottomReached}\n scrollEventThrottle={16}\n onScroll={_onScroll}\n keyExtractor={getMessageUniqId}\n style={{ flex: 1, ...StyleSheet.flatten(props.style) }}\n maintainVisibleContentPosition={{ minIndexForVisible: 0, autoscrollToTopThreshold: UNREACHABLE_THRESHOLD }}\n />\n );\n});\n\nexport default ChatFlatList;\n"],"mappings":"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"}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- const VERSION = '2.5.0';
7
+ const VERSION = '3.0.0';
8
8
  var _default = VERSION;
9
9
  exports.default = _default;
10
10
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["VERSION","_default","exports","default"],"sources":["version.ts"],"sourcesContent":["const VERSION = '2.5.0';\nexport default VERSION;\n"],"mappings":";;;;;;AAAA,MAAMA,OAAO,GAAG,OAAO;AAAC,IAAAC,QAAA,GACTD,OAAO;AAAAE,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
1
+ {"version":3,"names":["VERSION","_default","exports","default"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.0.0';\nexport default VERSION;\n"],"mappings":";;;;;;AAAA,MAAMA,OAAO,GAAG,OAAO;AAAC,IAAAC,QAAA,GACTD,OAAO;AAAAE,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * */
3
+
4
+ import { Platform } from 'react-native';
5
+ function shouldUseScrollViewEnhancer() {
6
+ if (Platform.constants.reactNativeVersion.major < 1) {
7
+ if (Platform.constants.reactNativeVersion.minor < 72) {
8
+ return true;
9
+ }
10
+ }
11
+ return false;
12
+ }
13
+ function getFlatList() {
14
+ if (shouldUseScrollViewEnhancer()) {
15
+ try {
16
+ return require('@sendbird/react-native-scrollview-enhancer').FlatList;
17
+ } catch {
18
+ return require('react-native').FlatList;
19
+ }
20
+ } else {
21
+ return require('react-native').FlatList;
22
+ }
23
+ }
24
+ const FlatListInternal = getFlatList();
25
+ export default FlatListInternal;
26
+ //# sourceMappingURL=FlatListInternal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Platform","shouldUseScrollViewEnhancer","constants","reactNativeVersion","major","minor","getFlatList","require","FlatList","FlatListInternal"],"sources":["FlatListInternal.tsx"],"sourcesContent":["/**\n * */\nimport type { ForwardedRef, ReactElement } from 'react';\nimport type { FlatListProps, FlatList as RNFlatList, ScrollViewProps } from 'react-native';\nimport { Platform } from 'react-native';\n\nimport type { SendbirdMessage } from '@sendbird/uikit-utils';\n\ntype FlatListBidirectional<T = SendbirdMessage> = (props: FlatListProps<T> & BidirectionalProps<T>) => ReactElement;\ntype BidirectionalProps<T> = {\n onStartReached?: ((info: { distanceFromStart: number }) => void) | null | undefined;\n onStartReachedThreshold?: number | null | undefined;\n onEndReached?: ((info: { distanceFromEnd: number }) => void) | null | undefined;\n onEndReachedThreshold?: number | null | undefined;\n maintainVisibleContentPosition?: ScrollViewProps['maintainVisibleContentPosition'];\n ref: ForwardedRef<RNFlatList<T>>;\n};\n\nfunction shouldUseScrollViewEnhancer() {\n if (Platform.constants.reactNativeVersion.major < 1) {\n if (Platform.constants.reactNativeVersion.minor < 72) {\n return true;\n }\n }\n return false;\n}\nfunction getFlatList(): FlatListBidirectional {\n if (shouldUseScrollViewEnhancer()) {\n try {\n return require('@sendbird/react-native-scrollview-enhancer').FlatList;\n } catch {\n return require('react-native').FlatList;\n }\n } else {\n return require('react-native').FlatList;\n }\n}\n\nconst FlatListInternal = getFlatList();\nexport default FlatListInternal;\n"],"mappings":"AAAA;AACA;;AAGA,SAASA,QAAQ,QAAQ,cAAc;AAcvC,SAASC,2BAA2BA,CAAA,EAAG;EACrC,IAAID,QAAQ,CAACE,SAAS,CAACC,kBAAkB,CAACC,KAAK,GAAG,CAAC,EAAE;IACnD,IAAIJ,QAAQ,CAACE,SAAS,CAACC,kBAAkB,CAACE,KAAK,GAAG,EAAE,EAAE;MACpD,OAAO,IAAI;IACb;EACF;EACA,OAAO,KAAK;AACd;AACA,SAASC,WAAWA,CAAA,EAA0B;EAC5C,IAAIL,2BAA2B,EAAE,EAAE;IACjC,IAAI;MACF,OAAOM,OAAO,CAAC,4CAA4C,CAAC,CAACC,QAAQ;IACvE,CAAC,CAAC,MAAM;MACN,OAAOD,OAAO,CAAC,cAAc,CAAC,CAACC,QAAQ;IACzC;EACF,CAAC,MAAM;IACL,OAAOD,OAAO,CAAC,cAAc,CAAC,CAACC,QAAQ;EACzC;AACF;AAEA,MAAMC,gBAAgB,GAAGH,WAAW,EAAE;AACtC,eAAeG,gBAAgB"}
@@ -3,25 +3,10 @@ import React, { forwardRef, useRef } from 'react';
3
3
  import { Platform, StyleSheet } from 'react-native';
4
4
  import { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
5
5
  import { NOOP, getMessageUniqId, useFreshCallback } from '@sendbird/uikit-utils';
6
+ import FlatListInternal from './FlatListInternal';
6
7
  let ANDROID_BUG_ALERT_SHOWED = Platform.OS !== 'android';
7
8
  const BOTTOM_DETECT_THRESHOLD = 25;
8
9
  const UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;
9
- function shouldUseScrollViewEnhancer() {
10
- if (Platform.constants.reactNativeVersion.major < 1) {
11
- if (Platform.constants.reactNativeVersion.minor < 72) {
12
- return true;
13
- }
14
- }
15
- return false;
16
- }
17
- function getFlatList() {
18
- try {
19
- return !shouldUseScrollViewEnhancer() ? require('@sendbird/react-native-scrollview-enhancer').FlatList : require('react-native').FlatList;
20
- } catch {
21
- return require('react-native').FlatList;
22
- }
23
- }
24
- const FlatList = getFlatList();
25
10
  // FIXME: Inverted FlatList performance issue on Android {@link https://github.com/facebook/react-native/issues/30034}
26
11
  const ChatFlatList = /*#__PURE__*/forwardRef(function CustomFlatList(_ref, ref) {
27
12
  var _props$data;
@@ -55,7 +40,7 @@ const ChatFlatList = /*#__PURE__*/forwardRef(function CustomFlatList(_ref, ref)
55
40
  // eslint-disable-next-line no-console
56
41
  console.warn('UIKit Warning: The inverted FlatList has a performance issue on Android. Maybe this is a bug.\n' + 'Please refer to the link: https://github.com/facebook/react-native/issues/30034');
57
42
  }
58
- return /*#__PURE__*/React.createElement(FlatList, _extends({
43
+ return /*#__PURE__*/React.createElement(FlatListInternal, _extends({
59
44
  bounces: false,
60
45
  removeClippedSubviews: true,
61
46
  keyboardDismissMode: 'on-drag',
@@ -85,4 +70,4 @@ const ChatFlatList = /*#__PURE__*/forwardRef(function CustomFlatList(_ref, ref)
85
70
  }));
86
71
  });
87
72
  export default ChatFlatList;
88
- //# sourceMappingURL=ChatFlatList.js.map
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","forwardRef","useRef","Platform","StyleSheet","useUIKitTheme","NOOP","getMessageUniqId","useFreshCallback","FlatListInternal","ANDROID_BUG_ALERT_SHOWED","OS","BOTTOM_DETECT_THRESHOLD","UNREACHABLE_THRESHOLD","Number","MIN_SAFE_INTEGER","ChatFlatList","CustomFlatList","_ref","ref","_props$data","onTopReached","onBottomReached","onScrolledAwayFromBottom","onScroll","props","select","contentOffsetY","_onScroll","event","contentOffset","nativeEvent","prevOffsetY","current","currOffsetY","y","__DEV__","console","warn","createElement","_extends","bounces","removeClippedSubviews","keyboardDismissMode","keyboardShouldPersistTaps","indicatorStyle","light","dark","inverted","Boolean","data","length","onEndReached","onScrollToIndexFailed","onStartReached","scrollEventThrottle","keyExtractor","style","flex","flatten","maintainVisibleContentPosition","minIndexForVisible","autoscrollToTopThreshold"],"sources":["index.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from 'react';\nimport { FlatListProps, Platform, FlatList as RNFlatList, StyleSheet } from 'react-native';\n\nimport { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { NOOP, SendbirdMessage, getMessageUniqId, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport FlatListInternal from './FlatListInternal';\n\nlet ANDROID_BUG_ALERT_SHOWED = Platform.OS !== 'android';\nconst BOTTOM_DETECT_THRESHOLD = 25;\nconst UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;\n\ntype Props = Omit<FlatListProps<SendbirdMessage>, 'onEndReached'> & {\n onBottomReached: () => void;\n onTopReached: () => void;\n onScrolledAwayFromBottom: (value: boolean) => void;\n};\n// FIXME: Inverted FlatList performance issue on Android {@link https://github.com/facebook/react-native/issues/30034}\nconst ChatFlatList = forwardRef<RNFlatList, Props>(function CustomFlatList(\n { onTopReached, onBottomReached, onScrolledAwayFromBottom, onScroll, ...props },\n ref,\n) {\n const { select } = useUIKitTheme();\n const contentOffsetY = useRef(0);\n\n const _onScroll = useFreshCallback<NonNullable<Props['onScroll']>>((event) => {\n onScroll?.(event);\n\n const { contentOffset } = event.nativeEvent;\n\n const prevOffsetY = contentOffsetY.current;\n const currOffsetY = contentOffset.y;\n\n if (BOTTOM_DETECT_THRESHOLD < prevOffsetY && currOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(false);\n } else if (BOTTOM_DETECT_THRESHOLD < currOffsetY && prevOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(true);\n }\n\n contentOffsetY.current = contentOffset.y;\n });\n\n if (__DEV__ && !ANDROID_BUG_ALERT_SHOWED) {\n ANDROID_BUG_ALERT_SHOWED = true;\n // eslint-disable-next-line no-console\n console.warn(\n 'UIKit Warning: The inverted FlatList has a performance issue on Android. Maybe this is a bug.\\n' +\n 'Please refer to the link: https://github.com/facebook/react-native/issues/30034',\n );\n }\n\n return (\n <FlatListInternal\n bounces={false}\n removeClippedSubviews\n keyboardDismissMode={'on-drag'}\n keyboardShouldPersistTaps={'handled'}\n indicatorStyle={select({ light: 'black', dark: 'white' })}\n {...props}\n // FIXME: inverted list of ListEmptyComponent is reversed {@link https://github.com/facebook/react-native/issues/21196#issuecomment-836937743}\n inverted={Boolean(props.data?.length)}\n ref={ref}\n onEndReached={onTopReached}\n onScrollToIndexFailed={NOOP}\n onStartReached={onBottomReached}\n scrollEventThrottle={16}\n onScroll={_onScroll}\n keyExtractor={getMessageUniqId}\n style={{ flex: 1, ...StyleSheet.flatten(props.style) }}\n maintainVisibleContentPosition={{ minIndexForVisible: 0, autoscrollToTopThreshold: UNREACHABLE_THRESHOLD }}\n />\n );\n});\n\nexport default ChatFlatList;\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAEC,MAAM,QAAQ,OAAO;AACjD,SAAwBC,QAAQ,EAA0BC,UAAU,QAAQ,cAAc;AAE1F,SAASC,aAAa,QAAQ,yCAAyC;AACvE,SAASC,IAAI,EAAmBC,gBAAgB,EAAEC,gBAAgB,QAAQ,uBAAuB;AAEjG,OAAOC,gBAAgB,MAAM,oBAAoB;AAEjD,IAAIC,wBAAwB,GAAGP,QAAQ,CAACQ,EAAE,KAAK,SAAS;AACxD,MAAMC,uBAAuB,GAAG,EAAE;AAClC,MAAMC,qBAAqB,GAAGC,MAAM,CAACC,gBAAgB;AAOrD;AACA,MAAMC,YAAY,gBAAGf,UAAU,CAAoB,SAASgB,cAAcA,CAAAC,IAAA,EAExEC,GAAG,EACH;EAAA,IAAAC,WAAA;EAAA,IAFA;IAAEC,YAAY;IAAEC,eAAe;IAAEC,wBAAwB;IAAEC,QAAQ;IAAE,GAAGC;EAAM,CAAC,GAAAP,IAAA;EAG/E,MAAM;IAAEQ;EAAO,CAAC,GAAGrB,aAAa,EAAE;EAClC,MAAMsB,cAAc,GAAGzB,MAAM,CAAC,CAAC,CAAC;EAEhC,MAAM0B,SAAS,GAAGpB,gBAAgB,CAAkCqB,KAAK,IAAK;IAC5EL,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGK,KAAK,CAAC;IAEjB,MAAM;MAAEC;IAAc,CAAC,GAAGD,KAAK,CAACE,WAAW;IAE3C,MAAMC,WAAW,GAAGL,cAAc,CAACM,OAAO;IAC1C,MAAMC,WAAW,GAAGJ,aAAa,CAACK,CAAC;IAEnC,IAAIvB,uBAAuB,GAAGoB,WAAW,IAAIE,WAAW,IAAItB,uBAAuB,EAAE;MACnFW,wBAAwB,CAAC,KAAK,CAAC;IACjC,CAAC,MAAM,IAAIX,uBAAuB,GAAGsB,WAAW,IAAIF,WAAW,IAAIpB,uBAAuB,EAAE;MAC1FW,wBAAwB,CAAC,IAAI,CAAC;IAChC;IAEAI,cAAc,CAACM,OAAO,GAAGH,aAAa,CAACK,CAAC;EAC1C,CAAC,CAAC;EAEF,IAAIC,OAAO,IAAI,CAAC1B,wBAAwB,EAAE;IACxCA,wBAAwB,GAAG,IAAI;IAC/B;IACA2B,OAAO,CAACC,IAAI,CACV,iGAAiG,GAC/F,iFAAiF,CACpF;EACH;EAEA,oBACEtC,KAAA,CAAAuC,aAAA,CAAC9B,gBAAgB,EAAA+B,QAAA;IACfC,OAAO,EAAE,KAAM;IACfC,qBAAqB;IACrBC,mBAAmB,EAAE,SAAU;IAC/BC,yBAAyB,EAAE,SAAU;IACrCC,cAAc,EAAEnB,MAAM,CAAC;MAAEoB,KAAK,EAAE,OAAO;MAAEC,IAAI,EAAE;IAAQ,CAAC;EAAE,GACtDtB,KAAK;IACT;IACAuB,QAAQ,EAAEC,OAAO,EAAA7B,WAAA,GAACK,KAAK,CAACyB,IAAI,cAAA9B,WAAA,uBAAVA,WAAA,CAAY+B,MAAM,CAAE;IACtChC,GAAG,EAAEA,GAAI;IACTiC,YAAY,EAAE/B,YAAa;IAC3BgC,qBAAqB,EAAE/C,IAAK;IAC5BgD,cAAc,EAAEhC,eAAgB;IAChCiC,mBAAmB,EAAE,EAAG;IACxB/B,QAAQ,EAAEI,SAAU;IACpB4B,YAAY,EAAEjD,gBAAiB;IAC/BkD,KAAK,EAAE;MAAEC,IAAI,EAAE,CAAC;MAAE,GAAGtD,UAAU,CAACuD,OAAO,CAAClC,KAAK,CAACgC,KAAK;IAAE,CAAE;IACvDG,8BAA8B,EAAE;MAAEC,kBAAkB,EAAE,CAAC;MAAEC,wBAAwB,EAAEjD;IAAsB;EAAE,GAC3G;AAEN,CAAC,CAAC;AAEF,eAAeG,YAAY"}
@@ -1,3 +1,3 @@
1
- const VERSION = '2.5.0';
1
+ const VERSION = '3.0.0';
2
2
  export default VERSION;
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '2.5.0';\nexport default VERSION;\n"],"mappings":"AAAA,MAAMA,OAAO,GAAG,OAAO;AACvB,eAAeA,OAAO"}
1
+ {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.0.0';\nexport default VERSION;\n"],"mappings":"AAAA,MAAMA,OAAO,GAAG,OAAO;AACvB,eAAeA,OAAO"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * */
3
+ import type { ForwardedRef, ReactElement } from 'react';
4
+ import type { FlatListProps, FlatList as RNFlatList, ScrollViewProps } from 'react-native';
5
+ import type { SendbirdMessage } from '@sendbird/uikit-utils';
6
+ type FlatListBidirectional<T = SendbirdMessage> = (props: FlatListProps<T> & BidirectionalProps<T>) => ReactElement;
7
+ type BidirectionalProps<T> = {
8
+ onStartReached?: ((info: {
9
+ distanceFromStart: number;
10
+ }) => void) | null | undefined;
11
+ onStartReachedThreshold?: number | null | undefined;
12
+ onEndReached?: ((info: {
13
+ distanceFromEnd: number;
14
+ }) => void) | null | undefined;
15
+ onEndReachedThreshold?: number | null | undefined;
16
+ maintainVisibleContentPosition?: ScrollViewProps['maintainVisibleContentPosition'];
17
+ ref: ForwardedRef<RNFlatList<T>>;
18
+ };
19
+ declare const FlatListInternal: FlatListBidirectional<SendbirdMessage>;
20
+ export default FlatListInternal;
@@ -10,7 +10,7 @@ import type { ClipboardServiceInterface, FileServiceInterface, MediaServiceInter
10
10
  import type { ErrorBoundaryProps, LocalCacheStorage } from '../types';
11
11
  type UnimplementedFeatures = 'enableVoiceMessage' | 'threadReplySelectType' | 'replyType';
12
12
  export declare const SendbirdUIKit: Readonly<{
13
- VERSION: "2.5.0";
13
+ VERSION: "3.0.0";
14
14
  PLATFORM: string;
15
15
  DEFAULT: {
16
16
  AUTO_PUSH_TOKEN_REGISTRATION: boolean;
@@ -1,2 +1,2 @@
1
- declare const VERSION = "2.5.0";
1
+ declare const VERSION = "3.0.0";
2
2
  export default VERSION;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sendbird/uikit-react-native",
3
- "version": "3.0.0-rc.0",
3
+ "version": "3.0.0",
4
4
  "description": "Sendbird UIKit for React Native: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.",
5
5
  "keywords": [
6
6
  "sendbird",
@@ -38,6 +38,7 @@
38
38
  "test": "jest",
39
39
  "build": "yarn generate-version && bob build",
40
40
  "clean": "del lib",
41
+ "publish:next": "npm publish --tag next",
41
42
  "generate-version": "node scripts/generate-version.js ./src/version.ts",
42
43
  "create-domain": "node scripts/create-core-domain"
43
44
  },
@@ -57,10 +58,10 @@
57
58
  "access": "public"
58
59
  },
59
60
  "dependencies": {
60
- "@sendbird/uikit-chat-hooks": "3.0.0-rc.0",
61
- "@sendbird/uikit-react-native-foundation": "3.0.0-rc.0",
61
+ "@sendbird/uikit-chat-hooks": "3.0.0",
62
+ "@sendbird/uikit-react-native-foundation": "3.0.0",
62
63
  "@sendbird/uikit-tools": "^0.0.1-alpha.38",
63
- "@sendbird/uikit-utils": "3.0.0-rc.0"
64
+ "@sendbird/uikit-utils": "3.0.0"
64
65
  },
65
66
  "devDependencies": {
66
67
  "@bam.tech/react-native-image-resizer": "^3.0.4",
@@ -202,5 +203,6 @@
202
203
  "entryPoint": "./src/index.ts",
203
204
  "readmeFile": "./README.md",
204
205
  "displayName": "@sendbird/uikit-react-native"
205
- }
206
+ },
207
+ "gitHead": "210cca5d00f4b29a2551418ca764b1a0f87de38c"
206
208
  }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * */
3
+ import type { ForwardedRef, ReactElement } from 'react';
4
+ import type { FlatListProps, FlatList as RNFlatList, ScrollViewProps } from 'react-native';
5
+ import { Platform } from 'react-native';
6
+
7
+ import type { SendbirdMessage } from '@sendbird/uikit-utils';
8
+
9
+ type FlatListBidirectional<T = SendbirdMessage> = (props: FlatListProps<T> & BidirectionalProps<T>) => ReactElement;
10
+ type BidirectionalProps<T> = {
11
+ onStartReached?: ((info: { distanceFromStart: number }) => void) | null | undefined;
12
+ onStartReachedThreshold?: number | null | undefined;
13
+ onEndReached?: ((info: { distanceFromEnd: number }) => void) | null | undefined;
14
+ onEndReachedThreshold?: number | null | undefined;
15
+ maintainVisibleContentPosition?: ScrollViewProps['maintainVisibleContentPosition'];
16
+ ref: ForwardedRef<RNFlatList<T>>;
17
+ };
18
+
19
+ function shouldUseScrollViewEnhancer() {
20
+ if (Platform.constants.reactNativeVersion.major < 1) {
21
+ if (Platform.constants.reactNativeVersion.minor < 72) {
22
+ return true;
23
+ }
24
+ }
25
+ return false;
26
+ }
27
+ function getFlatList(): FlatListBidirectional {
28
+ if (shouldUseScrollViewEnhancer()) {
29
+ try {
30
+ return require('@sendbird/react-native-scrollview-enhancer').FlatList;
31
+ } catch {
32
+ return require('react-native').FlatList;
33
+ }
34
+ } else {
35
+ return require('react-native').FlatList;
36
+ }
37
+ }
38
+
39
+ const FlatListInternal = getFlatList();
40
+ export default FlatListInternal;
@@ -1,46 +1,15 @@
1
- import React, { ForwardedRef, forwardRef, useRef } from 'react';
2
- import { FlatListProps, Platform, FlatList as RNFlatList, ScrollViewProps, StyleSheet } from 'react-native';
1
+ import React, { forwardRef, useRef } from 'react';
2
+ import { FlatListProps, Platform, FlatList as RNFlatList, StyleSheet } from 'react-native';
3
3
 
4
4
  import { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
5
5
  import { NOOP, SendbirdMessage, getMessageUniqId, useFreshCallback } from '@sendbird/uikit-utils';
6
6
 
7
+ import FlatListInternal from './FlatListInternal';
8
+
7
9
  let ANDROID_BUG_ALERT_SHOWED = Platform.OS !== 'android';
8
10
  const BOTTOM_DETECT_THRESHOLD = 25;
9
11
  const UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;
10
12
 
11
- type FlatListBidirectional<T = SendbirdMessage> = (
12
- props: FlatListProps<T> & BidirectionalProps<T>,
13
- ) => React.ReactElement;
14
- type BidirectionalProps<T> = {
15
- onStartReached?: ((info: { distanceFromStart: number }) => void) | null | undefined;
16
- onStartReachedThreshold?: number | null | undefined;
17
- onEndReached?: ((info: { distanceFromEnd: number }) => void) | null | undefined;
18
- onEndReachedThreshold?: number | null | undefined;
19
- maintainVisibleContentPosition?: ScrollViewProps['maintainVisibleContentPosition'];
20
- ref: ForwardedRef<RNFlatList<T>>;
21
- };
22
-
23
- function shouldUseScrollViewEnhancer() {
24
- if (Platform.constants.reactNativeVersion.major < 1) {
25
- if (Platform.constants.reactNativeVersion.minor < 72) {
26
- return true;
27
- }
28
- }
29
- return false;
30
- }
31
-
32
- function getFlatList(): FlatListBidirectional {
33
- try {
34
- return !shouldUseScrollViewEnhancer()
35
- ? require('@sendbird/react-native-scrollview-enhancer').FlatList
36
- : require('react-native').FlatList;
37
- } catch {
38
- return require('react-native').FlatList;
39
- }
40
- }
41
-
42
- const FlatList = getFlatList();
43
-
44
13
  type Props = Omit<FlatListProps<SendbirdMessage>, 'onEndReached'> & {
45
14
  onBottomReached: () => void;
46
15
  onTopReached: () => void;
@@ -81,7 +50,7 @@ const ChatFlatList = forwardRef<RNFlatList, Props>(function CustomFlatList(
81
50
  }
82
51
 
83
52
  return (
84
- <FlatList
53
+ <FlatListInternal
85
54
  bounces={false}
86
55
  removeClippedSubviews
87
56
  keyboardDismissMode={'on-drag'}
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
- const VERSION = '3.0.0-rc.0';
1
+ const VERSION = '3.0.0';
2
2
  export default VERSION;
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_uikitReactNativeFoundation","_uikitUtils","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_extends","assign","bind","target","i","arguments","length","source","apply","ANDROID_BUG_ALERT_SHOWED","Platform","OS","BOTTOM_DETECT_THRESHOLD","UNREACHABLE_THRESHOLD","Number","MIN_SAFE_INTEGER","shouldUseScrollViewEnhancer","constants","reactNativeVersion","major","minor","getFlatList","FlatList","ChatFlatList","forwardRef","CustomFlatList","_ref","ref","_props$data","onTopReached","onBottomReached","onScrolledAwayFromBottom","onScroll","props","select","useUIKitTheme","contentOffsetY","useRef","_onScroll","useFreshCallback","event","contentOffset","nativeEvent","prevOffsetY","current","currOffsetY","y","__DEV__","console","warn","createElement","bounces","removeClippedSubviews","keyboardDismissMode","keyboardShouldPersistTaps","indicatorStyle","light","dark","inverted","Boolean","data","onEndReached","onScrollToIndexFailed","NOOP","onStartReached","scrollEventThrottle","keyExtractor","getMessageUniqId","style","flex","StyleSheet","flatten","maintainVisibleContentPosition","minIndexForVisible","autoscrollToTopThreshold","_default","exports"],"sources":["ChatFlatList.tsx"],"sourcesContent":["import React, { ForwardedRef, forwardRef, useRef } from 'react';\nimport { FlatListProps, Platform, FlatList as RNFlatList, ScrollViewProps, StyleSheet } from 'react-native';\n\nimport { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { NOOP, SendbirdMessage, getMessageUniqId, useFreshCallback } from '@sendbird/uikit-utils';\n\nlet ANDROID_BUG_ALERT_SHOWED = Platform.OS !== 'android';\nconst BOTTOM_DETECT_THRESHOLD = 25;\nconst UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;\n\ntype FlatListBidirectional<T = SendbirdMessage> = (\n props: FlatListProps<T> & BidirectionalProps<T>,\n) => React.ReactElement;\ntype BidirectionalProps<T> = {\n onStartReached?: ((info: { distanceFromStart: number }) => void) | null | undefined;\n onStartReachedThreshold?: number | null | undefined;\n onEndReached?: ((info: { distanceFromEnd: number }) => void) | null | undefined;\n onEndReachedThreshold?: number | null | undefined;\n maintainVisibleContentPosition?: ScrollViewProps['maintainVisibleContentPosition'];\n ref: ForwardedRef<RNFlatList<T>>;\n};\n\nfunction shouldUseScrollViewEnhancer() {\n if (Platform.constants.reactNativeVersion.major < 1) {\n if (Platform.constants.reactNativeVersion.minor < 72) {\n return true;\n }\n }\n return false;\n}\n\nfunction getFlatList(): FlatListBidirectional {\n try {\n return !shouldUseScrollViewEnhancer()\n ? require('@sendbird/react-native-scrollview-enhancer').FlatList\n : require('react-native').FlatList;\n } catch {\n return require('react-native').FlatList;\n }\n}\n\nconst FlatList = getFlatList();\n\ntype Props = Omit<FlatListProps<SendbirdMessage>, 'onEndReached'> & {\n onBottomReached: () => void;\n onTopReached: () => void;\n onScrolledAwayFromBottom: (value: boolean) => void;\n};\n// FIXME: Inverted FlatList performance issue on Android {@link https://github.com/facebook/react-native/issues/30034}\nconst ChatFlatList = forwardRef<RNFlatList, Props>(function CustomFlatList(\n { onTopReached, onBottomReached, onScrolledAwayFromBottom, onScroll, ...props },\n ref,\n) {\n const { select } = useUIKitTheme();\n const contentOffsetY = useRef(0);\n\n const _onScroll = useFreshCallback<NonNullable<Props['onScroll']>>((event) => {\n onScroll?.(event);\n\n const { contentOffset } = event.nativeEvent;\n\n const prevOffsetY = contentOffsetY.current;\n const currOffsetY = contentOffset.y;\n\n if (BOTTOM_DETECT_THRESHOLD < prevOffsetY && currOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(false);\n } else if (BOTTOM_DETECT_THRESHOLD < currOffsetY && prevOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(true);\n }\n\n contentOffsetY.current = contentOffset.y;\n });\n\n if (__DEV__ && !ANDROID_BUG_ALERT_SHOWED) {\n ANDROID_BUG_ALERT_SHOWED = true;\n // eslint-disable-next-line no-console\n console.warn(\n 'UIKit Warning: The inverted FlatList has a performance issue on Android. Maybe this is a bug.\\n' +\n 'Please refer to the link: https://github.com/facebook/react-native/issues/30034',\n );\n }\n\n return (\n <FlatList\n bounces={false}\n removeClippedSubviews\n keyboardDismissMode={'on-drag'}\n keyboardShouldPersistTaps={'handled'}\n indicatorStyle={select({ light: 'black', dark: 'white' })}\n {...props}\n // FIXME: inverted list of ListEmptyComponent is reversed {@link https://github.com/facebook/react-native/issues/21196#issuecomment-836937743}\n inverted={Boolean(props.data?.length)}\n ref={ref}\n onEndReached={onTopReached}\n onScrollToIndexFailed={NOOP}\n onStartReached={onBottomReached}\n scrollEventThrottle={16}\n onScroll={_onScroll}\n keyExtractor={getMessageUniqId}\n style={{ flex: 1, ...StyleSheet.flatten(props.style) }}\n maintainVisibleContentPosition={{ minIndexForVisible: 0, autoscrollToTopThreshold: UNREACHABLE_THRESHOLD }}\n />\n );\n});\n\nexport default ChatFlatList;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","forwardRef","useRef","Platform","StyleSheet","useUIKitTheme","NOOP","getMessageUniqId","useFreshCallback","ANDROID_BUG_ALERT_SHOWED","OS","BOTTOM_DETECT_THRESHOLD","UNREACHABLE_THRESHOLD","Number","MIN_SAFE_INTEGER","shouldUseScrollViewEnhancer","constants","reactNativeVersion","major","minor","getFlatList","require","FlatList","ChatFlatList","CustomFlatList","_ref","ref","_props$data","onTopReached","onBottomReached","onScrolledAwayFromBottom","onScroll","props","select","contentOffsetY","_onScroll","event","contentOffset","nativeEvent","prevOffsetY","current","currOffsetY","y","__DEV__","console","warn","createElement","_extends","bounces","removeClippedSubviews","keyboardDismissMode","keyboardShouldPersistTaps","indicatorStyle","light","dark","inverted","Boolean","data","length","onEndReached","onScrollToIndexFailed","onStartReached","scrollEventThrottle","keyExtractor","style","flex","flatten","maintainVisibleContentPosition","minIndexForVisible","autoscrollToTopThreshold"],"sources":["ChatFlatList.tsx"],"sourcesContent":["import React, { ForwardedRef, forwardRef, useRef } from 'react';\nimport { FlatListProps, Platform, FlatList as RNFlatList, ScrollViewProps, StyleSheet } from 'react-native';\n\nimport { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { NOOP, SendbirdMessage, getMessageUniqId, useFreshCallback } from '@sendbird/uikit-utils';\n\nlet ANDROID_BUG_ALERT_SHOWED = Platform.OS !== 'android';\nconst BOTTOM_DETECT_THRESHOLD = 25;\nconst UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;\n\ntype FlatListBidirectional<T = SendbirdMessage> = (\n props: FlatListProps<T> & BidirectionalProps<T>,\n) => React.ReactElement;\ntype BidirectionalProps<T> = {\n onStartReached?: ((info: { distanceFromStart: number }) => void) | null | undefined;\n onStartReachedThreshold?: number | null | undefined;\n onEndReached?: ((info: { distanceFromEnd: number }) => void) | null | undefined;\n onEndReachedThreshold?: number | null | undefined;\n maintainVisibleContentPosition?: ScrollViewProps['maintainVisibleContentPosition'];\n ref: ForwardedRef<RNFlatList<T>>;\n};\n\nfunction shouldUseScrollViewEnhancer() {\n if (Platform.constants.reactNativeVersion.major < 1) {\n if (Platform.constants.reactNativeVersion.minor < 72) {\n return true;\n }\n }\n return false;\n}\n\nfunction getFlatList(): FlatListBidirectional {\n try {\n return !shouldUseScrollViewEnhancer()\n ? require('@sendbird/react-native-scrollview-enhancer').FlatList\n : require('react-native').FlatList;\n } catch {\n return require('react-native').FlatList;\n }\n}\n\nconst FlatList = getFlatList();\n\ntype Props = Omit<FlatListProps<SendbirdMessage>, 'onEndReached'> & {\n onBottomReached: () => void;\n onTopReached: () => void;\n onScrolledAwayFromBottom: (value: boolean) => void;\n};\n// FIXME: Inverted FlatList performance issue on Android {@link https://github.com/facebook/react-native/issues/30034}\nconst ChatFlatList = forwardRef<RNFlatList, Props>(function CustomFlatList(\n { onTopReached, onBottomReached, onScrolledAwayFromBottom, onScroll, ...props },\n ref,\n) {\n const { select } = useUIKitTheme();\n const contentOffsetY = useRef(0);\n\n const _onScroll = useFreshCallback<NonNullable<Props['onScroll']>>((event) => {\n onScroll?.(event);\n\n const { contentOffset } = event.nativeEvent;\n\n const prevOffsetY = contentOffsetY.current;\n const currOffsetY = contentOffset.y;\n\n if (BOTTOM_DETECT_THRESHOLD < prevOffsetY && currOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(false);\n } else if (BOTTOM_DETECT_THRESHOLD < currOffsetY && prevOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(true);\n }\n\n contentOffsetY.current = contentOffset.y;\n });\n\n if (__DEV__ && !ANDROID_BUG_ALERT_SHOWED) {\n ANDROID_BUG_ALERT_SHOWED = true;\n // eslint-disable-next-line no-console\n console.warn(\n 'UIKit Warning: The inverted FlatList has a performance issue on Android. Maybe this is a bug.\\n' +\n 'Please refer to the link: https://github.com/facebook/react-native/issues/30034',\n );\n }\n\n return (\n <FlatList\n bounces={false}\n removeClippedSubviews\n keyboardDismissMode={'on-drag'}\n keyboardShouldPersistTaps={'handled'}\n indicatorStyle={select({ light: 'black', dark: 'white' })}\n {...props}\n // FIXME: inverted list of ListEmptyComponent is reversed {@link https://github.com/facebook/react-native/issues/21196#issuecomment-836937743}\n inverted={Boolean(props.data?.length)}\n ref={ref}\n onEndReached={onTopReached}\n onScrollToIndexFailed={NOOP}\n onStartReached={onBottomReached}\n scrollEventThrottle={16}\n onScroll={_onScroll}\n keyExtractor={getMessageUniqId}\n style={{ flex: 1, ...StyleSheet.flatten(props.style) }}\n maintainVisibleContentPosition={{ minIndexForVisible: 0, autoscrollToTopThreshold: UNREACHABLE_THRESHOLD }}\n />\n );\n});\n\nexport default ChatFlatList;\n"],"mappings":"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"}