Skip to content

Commit fbb0bd8

Browse files
committed
fix: handle messgaeflash list in thread
1 parent ca835fb commit fbb0bd8

File tree

6 files changed

+34
-23
lines changed

6 files changed

+34
-23
lines changed

examples/SampleApp/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
"@react-navigation/drawer": "7.4.1",
3838
"@react-navigation/native": "^7.1.10",
3939
"@react-navigation/stack": "^7.3.3",
40+
"@shopify/flash-list": "^2.0.3",
4041
"emoji-mart": "^5.6.0",
4142
"lodash.mergewith": "^4.6.2",
4243
"react": "19.1.0",

examples/SampleApp/yarn.lock

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2620,6 +2620,13 @@
26202620
read-yaml-file "^2.1.0"
26212621
strip-json-comments "^3.1.1"
26222622

2623+
"@shopify/flash-list@^2.0.3":
2624+
version "2.0.3"
2625+
resolved "https://registry.yarnpkg.com/@shopify/flash-list/-/flash-list-2.0.3.tgz#222427d1e09bf5cdd8a219d0a5a80f6f1d20465d"
2626+
integrity sha512-jUlHuZFoPdqRCDvOqsb2YkTttRPyV8Tb/EjCx3gE2wjr4UTM+fE0Ltv9bwBg0K7yo/SxRNXaW7xu5utusRb0xA==
2627+
dependencies:
2628+
tslib "2.8.1"
2629+
26232630
"@sideway/address@^4.1.5":
26242631
version "4.1.5"
26252632
resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5"
@@ -8443,16 +8450,16 @@ ts-api-utils@^2.1.0:
84438450
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91"
84448451
integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==
84458452

8453+
[email protected], tslib@^2.1.0, tslib@^2.4.0:
8454+
version "2.8.1"
8455+
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
8456+
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
8457+
84468458
tslib@^1.8.1:
84478459
version "1.14.1"
84488460
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
84498461
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
84508462

8451-
tslib@^2.1.0, tslib@^2.4.0:
8452-
version "2.8.1"
8453-
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
8454-
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
8455-
84568463
tsutils@^3.21.0:
84578464
version "3.21.0"
84588465
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"

package/jest-setup.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,7 @@ jest.mock('react-native/Libraries/Components/RefreshControl/RefreshControl', ()
6161
__esModule: true,
6262
default: require('./__mocks__/RefreshControlMock'),
6363
}));
64+
65+
jest.mock('@shopify/flash-list', () => ({
66+
FlashList: undefined,
67+
}));

package/src/components/MessageList/MessageFlashList.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,16 @@ import { mergeThemes, ThemeProvider, useTheme } from '../../contexts/themeContex
4444
import { ThreadContextValue, useThreadContext } from '../../contexts/threadContext/ThreadContext';
4545

4646
import { useStableCallback } from '../../hooks';
47-
import { getFlashList } from '../../native';
4847
import { FileTypes } from '../../types/types';
4948

49+
let FlashList;
50+
51+
try {
52+
FlashList = require('@shopify/flash-list').FlashList;
53+
} catch {
54+
FlashList = undefined;
55+
}
56+
5057
const keyExtractor = (item: LocalMessage) => {
5158
if (item.id) {
5259
return item.id;
@@ -1114,8 +1121,6 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
11141121
);
11151122
}
11161123

1117-
const FlashList = getFlashList();
1118-
11191124
if (!FlashList) {
11201125
throw new Error(
11211126
'The package @shopify/flash-list is not installed. Installing this package will enable the use of the FlashList component.',

package/src/components/Thread/Thread.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,21 @@ import {
1010
} from '../../contexts/messagesContext/MessagesContext';
1111
import { ThreadContextValue, useThreadContext } from '../../contexts/threadContext/ThreadContext';
1212

13-
import { isFlashListAvailable } from '../../native';
1413
import {
1514
MessageInput as DefaultMessageInput,
1615
MessageInputProps,
1716
} from '../MessageInput/MessageInput';
1817
import { MessageFlashList, MessageFlashListProps } from '../MessageList/MessageFlashList';
1918
import { MessageListProps } from '../MessageList/MessageList';
2019

20+
let FlashList;
21+
22+
try {
23+
FlashList = require('@shopify/flash-list').FlashList;
24+
} catch {
25+
FlashList = undefined;
26+
}
27+
2128
type ThreadPropsWithContext = Pick<ChatContextValue, 'client'> &
2229
Pick<MessagesContextValue, 'MessageList'> &
2330
Pick<
@@ -118,7 +125,7 @@ const ThreadWithContext = (props: ThreadPropsWithContext) => {
118125

119126
return (
120127
<React.Fragment key={`thread-${thread.id}`}>
121-
{isFlashListAvailable() ? (
128+
{FlashList ? (
122129
<MessageFlashList
123130
HeaderComponent={MemoizedThreadFooterComponent}
124131
threadList

package/src/native.ts

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -440,16 +440,3 @@ export const isImageMediaLibraryAvailable = () =>
440440
!!NativeHandlers.iOS14RefreshGallerySelection &&
441441
!!NativeHandlers.oniOS14GalleryLibrarySelectionChange &&
442442
!!NativeHandlers.getLocalAssetUri;
443-
444-
// Use this function to get the FlashList component from the @shopify/flash-list package
445-
export function getFlashList() {
446-
try {
447-
return require('@shopify/flash-list').FlashList;
448-
} catch {
449-
console.log(
450-
'You can also use the MessageFlashList component by installing the @shopify/flash-list package to optimize the performance of the MessageList component.',
451-
);
452-
}
453-
}
454-
455-
export const isFlashListAvailable = () => !!getFlashList();

0 commit comments

Comments
 (0)