Skip to content

Commit fdd9576

Browse files
committed
chore: resolve conflicts from develop
2 parents b35d4bc + 84e9216 commit fdd9576

File tree

42 files changed

+468
-297
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+468
-297
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
[![NPM](https://img.shields.io/npm/v/stream-chat-react-native.svg)](https://www.npmjs.com/package/stream-chat-react-native)
1111
[![Build Status](https://github.com/GetStream/stream-chat-react-native/actions/workflows/release.yml/badge.svg)](https://github.com/GetStream/stream-chat-react-native/actions)
1212
[![Component Reference](https://img.shields.io/badge/docs-component%20reference-blue.svg)](https://getstream.io/chat/docs/sdk/reactnative)
13-
![JS Bundle Size](https://img.shields.io/badge/js_bundle_size-467%20KB-blue)
13+
![JS Bundle Size](https://img.shields.io/badge/js_bundle_size-469%20KB-blue)
1414

1515
<img align="right" src="https://getstream.imgix.net/images/ios-chat-tutorial/[email protected]?auto=format,enhance" width="50%" />
1616

examples/ExpoMessaging/yarn.lock

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4070,6 +4070,11 @@ emoji-regex@^10.3.0:
40704070
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23"
40714071
integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==
40724072

4073+
emoji-regex@^10.4.0:
4074+
version "10.4.0"
4075+
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4"
4076+
integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==
4077+
40734078
emoji-regex@^8.0.0:
40744079
version "8.0.0"
40754080
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
@@ -7403,13 +7408,33 @@ [email protected], stream-buffers@~2.2.0:
74037408
version "0.0.0"
74047409
uid ""
74057410

7411+
7412+
version "7.0.0"
7413+
resolved "https://registry.yarnpkg.com/stream-chat-react-native-core/-/stream-chat-react-native-core-7.0.0.tgz#ba5439c9a446713356105a40c7d2f90c3ccbf4a3"
7414+
integrity sha512-qjjukVUXl13/cQDCovTAUHMUXgweg6fhh0we2t+C3RI3gN0AaiXMpzejA6RSuArBtezV4AB/mv9BoT7BRTzqeA==
7415+
dependencies:
7416+
"@gorhom/bottom-sheet" "^5.1.1"
7417+
dayjs "1.10.5"
7418+
emoji-regex "^10.3.0"
7419+
i18next "^21.6.14"
7420+
intl-pluralrules "^2.0.1"
7421+
linkifyjs "^4.1.1"
7422+
lodash-es "4.17.21"
7423+
mime-types "^2.1.34"
7424+
path "0.12.7"
7425+
react-native-markdown-package "1.8.2"
7426+
react-native-url-polyfill "^1.3.0"
7427+
stream-chat "^9.0.0"
7428+
use-sync-external-store "^1.4.0"
7429+
74067430
"stream-chat-react-native-core@link:../../package":
74077431
version "0.0.0"
74087432
uid ""
74097433

7410-
"stream-chat@https://github.com/GetStream/stream-chat-js.git#9bc79358e9d0a23e0ff7e2a056711289e5bdf917":
7411-
version "0.0.0-development"
7412-
resolved "https://github.com/GetStream/stream-chat-js.git#9bc79358e9d0a23e0ff7e2a056711289e5bdf917"
7434+
stream-chat@^9.0.0:
7435+
version "9.0.0"
7436+
resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-9.0.0.tgz#cb22dcb8b7f070c623a13b6b75b212d560534d6c"
7437+
integrity sha512-I4+/DEp7dP3WBgRmqHaLswL+Y2fyQkUWJhYBS5zx4bpu1cYM6WEir9HYjToDNuJjltqa/FFIEF/tMPWr7iTc0A==
74137438
dependencies:
74147439
"@types/jsonwebtoken" "^9.0.8"
74157440
"@types/ws" "^8.5.14"

examples/SampleApp/CHANGELOG.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,34 @@
11
# Change Log
22

3+
## [3.0.0](https://github.com/GetStream/stream-chat-react-native/compare/[email protected]@v3.0.0) (2025-05-06)
4+
5+
6+
### ⚠ BREAKING CHANGES
7+
8+
* V7 release candidate
9+
10+
* chore: add rc channel
11+
12+
* fix: typo in branch name
13+
* Release V7
14+
15+
* chore: remove dryRun
16+
17+
* chore: bump stream-chat version to latest rc
18+
19+
* chore: bump stream-chat to latest
20+
21+
### Features
22+
23+
* V7 ([#2999](https://github.com/GetStream/stream-chat-react-native/issues/2999)) ([e2a01e9](https://github.com/GetStream/stream-chat-react-native/commit/e2a01e9375267b97a7b552055edaf4548c9ef551)), closes [#2993](https://github.com/GetStream/stream-chat-react-native/issues/2993) [#3000](https://github.com/GetStream/stream-chat-react-native/issues/3000) [#3005](https://github.com/GetStream/stream-chat-react-native/issues/3005) [#3010](https://github.com/GetStream/stream-chat-react-native/issues/3010) [#3050](https://github.com/GetStream/stream-chat-react-native/issues/3050) [#3061](https://github.com/GetStream/stream-chat-react-native/issues/3061) [#3073](https://github.com/GetStream/stream-chat-react-native/issues/3073) [#3072](https://github.com/GetStream/stream-chat-react-native/issues/3072)
24+
25+
### [2.5.3](https://github.com/GetStream/stream-chat-react-native/compare/[email protected]@v2.5.3) (2025-04-30)
26+
27+
28+
### Bug Fixes
29+
30+
* thread messages updates ([#3069](https://github.com/GetStream/stream-chat-react-native/issues/3069)) ([9705d90](https://github.com/GetStream/stream-chat-react-native/commit/9705d90fbfbf60f7c0f791795e240dd40cd85eab))
31+
332
### [2.5.2](https://github.com/GetStream/stream-chat-react-native/compare/[email protected]@v2.5.2) (2025-04-22)
433

534

examples/SampleApp/ios/Podfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2234,7 +2234,7 @@ PODS:
22342234
- libwebp (~> 1.0)
22352235
- SDWebImage/Core (~> 5.10)
22362236
- SocketRocket (0.7.1)
2237-
- stream-chat-react-native (6.7.3):
2237+
- stream-chat-react-native (7.0.0):
22382238
- DoubleConversion
22392239
- glog
22402240
- hermes-engine
@@ -2662,7 +2662,7 @@ SPEC CHECKSUMS:
26622662
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
26632663
SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d
26642664
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
2665-
stream-chat-react-native: c96c58a2eff61b86ae8034cf59317bf6b40a9117
2665+
stream-chat-react-native: 655e616ec1738f03ab9796eb12693bb1a91bb65e
26662666
Yoga: be02ca501b03c79d7027a6bbbd0a8db985034f11
26672667

26682668
PODFILE CHECKSUM: 4f662370295f8f9cee909f1a4c59a614999a209d

examples/SampleApp/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "sampleapp",
3-
"version": "2.5.2",
3+
"version": "3.0.0",
44
"private": true,
55
"repository": {
66
"type": "git",
Lines changed: 74 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import mergeWith from 'lodash.mergewith';
2-
32
import type {
3+
Middleware,
44
SearchSourceOptions,
55
SearchSourceType,
6+
TextComposerMiddlewareExecutorState,
67
TextComposerMiddlewareOptions,
7-
TextComposerMiddlewareParams,
88
TextComposerSuggestion,
99
} from 'stream-chat';
1010
import {
@@ -14,19 +14,11 @@ import {
1414
insertItemWithTrigger,
1515
replaceWordWithEntity,
1616
} from 'stream-chat';
17-
import { EmojiSearchIndex } from 'stream-chat-react-native';
18-
19-
export type EmojiSearchIndexResult = {
20-
id: string;
21-
name: string;
22-
skins: Array<{ native: string }>;
23-
emoticons?: Array<string>;
24-
native?: string;
25-
};
17+
import { Emoji, EmojiSearchIndex } from 'stream-chat-react-native';
18+
19+
export type EmojiSuggestion<T extends Emoji = Emoji> = TextComposerSuggestion<T>;
2620

27-
class EmojiSearchSource<
28-
T extends TextComposerSuggestion<EmojiSearchIndexResult>,
29-
> extends BaseSearchSource<T> {
21+
class EmojiSearchSource<T extends TextComposerSuggestion<Emoji>> extends BaseSearchSource<T> {
3022
readonly type: SearchSourceType = 'emoji';
3123
private emojiSearchIndex: EmojiSearchIndex;
3224

@@ -41,6 +33,7 @@ class EmojiSearchSource<
4133
}
4234
const emojis = (await this.emojiSearchIndex.search(searchQuery)) ?? [];
4335

36+
// emojiIndex.search sometimes returns undefined values, so filter those out first
4437
return {
4538
items: emojis
4639
.filter(Boolean)
@@ -72,6 +65,11 @@ class EmojiSearchSource<
7265

7366
const DEFAULT_OPTIONS: TextComposerMiddlewareOptions = { minChars: 1, trigger: ':' };
7467

68+
export type EmojiMiddleware<T extends Emoji = Emoji> = Middleware<
69+
TextComposerMiddlewareExecutorState<EmojiSuggestion<T>>,
70+
'onChange' | 'onSuggestionItemSelect'
71+
>;
72+
7573
/**
7674
* TextComposer middleware for mentions
7775
* Usage:
@@ -89,105 +87,91 @@ const DEFAULT_OPTIONS: TextComposerMiddlewareOptions = { minChars: 1, trigger: '
8987
* }} options
9088
* @returns
9189
*/
92-
export const createTextComposerEmojiMiddleware = <
93-
T extends EmojiSearchIndexResult = EmojiSearchIndexResult,
94-
>(
90+
export const createTextComposerEmojiMiddleware = (
9591
emojiSearchIndex: EmojiSearchIndex,
9692
options?: Partial<TextComposerMiddlewareOptions>,
97-
) => {
93+
): EmojiMiddleware => {
9894
const finalOptions = mergeWith(DEFAULT_OPTIONS, options ?? {});
9995
const emojiSearchSource = new EmojiSearchSource(emojiSearchIndex);
10096
emojiSearchSource.activate();
10197

10298
return {
103-
id: 'stream-io/emoji-middleware',
104-
onChange: async ({ input, nextHandler }: TextComposerMiddlewareParams<T>) => {
105-
const { state } = input;
106-
if (!state.selection) {
107-
return nextHandler(input);
108-
}
109-
110-
const triggerWithToken = getTriggerCharWithToken({
111-
acceptTrailingSpaces: false,
112-
text: state.text.slice(0, state.selection.end),
113-
trigger: finalOptions.trigger,
114-
});
115-
116-
const triggerWasRemoved =
117-
!triggerWithToken || triggerWithToken.length < finalOptions.minChars;
118-
119-
if (triggerWasRemoved) {
120-
const hasSuggestionsForTrigger = input.state.suggestions?.trigger === finalOptions.trigger;
121-
const newInput = { ...input };
122-
if (hasSuggestionsForTrigger && newInput.state.suggestions) {
123-
delete newInput.state.suggestions;
99+
handlers: {
100+
onChange: async ({ complete, forward, next, state }) => {
101+
if (!state.selection) {
102+
return forward();
124103
}
125-
return nextHandler(newInput);
126-
}
127104

128-
const newSearchTriggerred = triggerWithToken && triggerWithToken === finalOptions.trigger;
105+
const triggerWithToken = getTriggerCharWithToken({
106+
acceptTrailingSpaces: false,
107+
text: state.text.slice(0, state.selection.end),
108+
trigger: finalOptions.trigger,
109+
});
129110

130-
if (newSearchTriggerred) {
131-
emojiSearchSource.resetStateAndActivate();
132-
}
111+
const triggerWasRemoved =
112+
!triggerWithToken || triggerWithToken.length < finalOptions.minChars;
133113

134-
const textWithReplacedWord = await replaceWordWithEntity({
135-
caretPosition: state.selection.end,
136-
getEntityString: async (word: string) => {
137-
const { items } = await emojiSearchSource.query(word);
114+
if (triggerWasRemoved) {
115+
const hasSuggestionsForTrigger = state.suggestions?.trigger === finalOptions.trigger;
116+
const newState = { ...state };
117+
if (hasSuggestionsForTrigger && newState.suggestions) {
118+
delete newState.suggestions;
119+
}
120+
return next(newState);
121+
}
138122

139-
const emoji = items
140-
.filter(Boolean)
141-
.slice(0, 10)
142-
.find(({ emoticons }) => !!emoticons?.includes(word));
123+
const newSearchTriggerred = triggerWithToken && triggerWithToken === finalOptions.trigger;
143124

144-
if (!emoji) {
145-
return null;
146-
}
125+
if (newSearchTriggerred) {
126+
emojiSearchSource.resetStateAndActivate();
127+
}
128+
129+
const textWithReplacedWord = await replaceWordWithEntity({
130+
caretPosition: state.selection.end,
131+
getEntityString: async (word: string) => {
132+
const { items } = await emojiSearchSource.query(word);
147133

148-
const [firstSkin] = emoji.skins ?? [];
134+
const emoji = items
135+
.filter(Boolean)
136+
.slice(0, 10)
137+
.find(({ emoticons }) => !!emoticons?.includes(word));
149138

150-
return emoji.native ?? firstSkin.native;
151-
},
152-
text: state.text,
153-
});
139+
if (!emoji) {
140+
return null;
141+
}
154142

155-
if (textWithReplacedWord !== state.text) {
156-
return {
157-
state: {
143+
const [firstSkin] = emoji.skins ?? [];
144+
145+
return emoji.native ?? firstSkin.native;
146+
},
147+
text: state.text,
148+
});
149+
150+
if (textWithReplacedWord !== state.text) {
151+
return complete({
158152
...state,
159153
suggestions: undefined, // to prevent the TextComposerMiddlewareExecutor to run the first page query
160154
text: textWithReplacedWord,
161-
},
162-
stop: true, // Stop other middleware from processing '@' character
163-
};
164-
}
155+
});
156+
}
165157

166-
return {
167-
state: {
158+
return complete({
168159
...state,
169160
suggestions: {
170161
query: triggerWithToken.slice(1),
171162
searchSource: emojiSearchSource,
172163
trigger: finalOptions.trigger,
173164
},
174-
},
175-
stop: true, // Stop other middleware from processing '@' character
176-
};
177-
},
178-
onSuggestionItemSelect: ({
179-
input,
180-
nextHandler,
181-
selectedSuggestion,
182-
}: TextComposerMiddlewareParams<T>) => {
183-
const { state } = input;
184-
if (!selectedSuggestion || state.suggestions?.trigger !== finalOptions.trigger) {
185-
return nextHandler(input);
186-
}
187-
188-
emojiSearchSource.resetStateAndActivate();
189-
return Promise.resolve({
190-
state: {
165+
});
166+
},
167+
onSuggestionItemSelect: ({ complete, forward, state }) => {
168+
const { selectedSuggestion } = state.change ?? {};
169+
if (!selectedSuggestion || state.suggestions?.trigger !== finalOptions.trigger) {
170+
return forward();
171+
}
172+
173+
emojiSearchSource.resetStateAndActivate();
174+
return complete({
191175
...state,
192176
...insertItemWithTrigger({
193177
insertText: `${'native' in selectedSuggestion ? selectedSuggestion.native : ''} `,
@@ -196,8 +180,9 @@ export const createTextComposerEmojiMiddleware = <
196180
trigger: finalOptions.trigger,
197181
}),
198182
suggestions: undefined, // Clear suggestions after selection
199-
},
200-
});
183+
});
184+
},
201185
},
186+
id: 'stream-io/emoji-middleware',
202187
};
203188
};

0 commit comments

Comments
 (0)