stream-chat 9.42.3 → 9.43.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.
Files changed (39) hide show
  1. package/dist/cjs/index.browser.js +1451 -1169
  2. package/dist/cjs/index.browser.js.map +3 -3
  3. package/dist/cjs/index.node.js +1452 -1171
  4. package/dist/cjs/index.node.js.map +3 -3
  5. package/dist/esm/index.mjs +1451 -1169
  6. package/dist/esm/index.mjs.map +3 -3
  7. package/dist/types/messageComposer/CustomDataManager.d.ts +3 -0
  8. package/dist/types/messageComposer/LocationComposer.d.ts +3 -0
  9. package/dist/types/messageComposer/MessageComposerEffectHandlers.d.ts +17 -0
  10. package/dist/types/messageComposer/attachmentManager.d.ts +7 -0
  11. package/dist/types/messageComposer/linkPreviewsManager.d.ts +4 -1
  12. package/dist/types/messageComposer/messageComposer.d.ts +39 -1
  13. package/dist/types/messageComposer/middleware/textComposer/TextComposerMiddlewareExecutor.d.ts +2 -1
  14. package/dist/types/messageComposer/middleware/textComposer/commandEffects.d.ts +5 -0
  15. package/dist/types/messageComposer/middleware/textComposer/commandUtils.d.ts +7 -0
  16. package/dist/types/messageComposer/middleware/textComposer/commands.d.ts +2 -0
  17. package/dist/types/messageComposer/middleware/textComposer/index.d.ts +1 -0
  18. package/dist/types/messageComposer/middleware/textComposer/textMiddlewareUtils.d.ts +0 -34
  19. package/dist/types/messageComposer/middleware/textComposer/types.d.ts +13 -0
  20. package/dist/types/messageComposer/pollComposer.d.ts +3 -0
  21. package/dist/types/messageComposer/textComposer.d.ts +5 -1
  22. package/package.json +1 -1
  23. package/src/messageComposer/CustomDataManager.ts +8 -0
  24. package/src/messageComposer/LocationComposer.ts +8 -0
  25. package/src/messageComposer/MessageComposerEffectHandlers.ts +87 -0
  26. package/src/messageComposer/attachmentManager.ts +55 -0
  27. package/src/messageComposer/linkPreviewsManager.ts +12 -3
  28. package/src/messageComposer/messageComposer.ts +107 -0
  29. package/src/messageComposer/middleware/messageComposer/compositionValidation.ts +58 -18
  30. package/src/messageComposer/middleware/textComposer/TextComposerMiddlewareExecutor.ts +7 -1
  31. package/src/messageComposer/middleware/textComposer/commandEffects.ts +51 -0
  32. package/src/messageComposer/middleware/textComposer/commandStringExtraction.ts +1 -4
  33. package/src/messageComposer/middleware/textComposer/commandUtils.ts +48 -0
  34. package/src/messageComposer/middleware/textComposer/commands.ts +15 -7
  35. package/src/messageComposer/middleware/textComposer/index.ts +1 -0
  36. package/src/messageComposer/middleware/textComposer/textMiddlewareUtils.ts +3 -46
  37. package/src/messageComposer/middleware/textComposer/types.ts +20 -0
  38. package/src/messageComposer/pollComposer.ts +8 -0
  39. package/src/messageComposer/textComposer.ts +54 -6
@@ -1,9 +1,14 @@
1
1
  import { TextComposerMiddlewareExecutor } from './middleware';
2
2
  import { StateStore } from '../store';
3
3
  import { logChatPromiseExecution } from '../utils';
4
+ import type { TextComposerMiddlewareExecutorState } from './middleware';
4
5
  import type { TextComposerSuggestion } from './middleware/textComposer/types';
5
6
  import type { TextSelection } from './middleware/textComposer/types';
6
- import type { TextComposerState } from './middleware/textComposer/types';
7
+ import type {
8
+ TextComposerCommandActivationEffect,
9
+ TextComposerState,
10
+ TextComposerStateSnapshot,
11
+ } from './middleware/textComposer/types';
7
12
  import type { Suggestions } from './middleware/textComposer/types';
8
13
  import type { MessageComposer } from './messageComposer';
9
14
  import type { CommandResponse, DraftMessage, LocalMessage, UserResponse } from '../types';
@@ -13,6 +18,8 @@ export type TextComposerOptions = {
13
18
  message?: DraftMessage | LocalMessage;
14
19
  };
15
20
 
21
+ export type TextComposerSnapshot = TextComposerStateSnapshot;
22
+
16
23
  export const textIsEmpty = (text: string) => {
17
24
  const trimmedText = text.trim();
18
25
  return (
@@ -147,12 +154,24 @@ export class TextComposer {
147
154
  this.state.next(initState({ composer: this.composer, message }));
148
155
  };
149
156
 
157
+ getSnapshot = (state = this.state.getLatestValue()): TextComposerSnapshot => state;
158
+
159
+ restoreSnapshot = (snapshot: TextComposerSnapshot) => {
160
+ this.state.next(snapshot);
161
+ };
162
+
150
163
  setMentionedUsers(users: UserResponse[]) {
151
164
  this.state.partialNext({ mentionedUsers: users });
152
165
  }
153
166
 
154
167
  clearCommand() {
155
- this.state.partialNext({ command: null });
168
+ if (!this.command) return;
169
+
170
+ this.commitState({
171
+ ...this.state.getLatestValue(),
172
+ command: null,
173
+ effects: [{ type: 'command.clear' }],
174
+ });
156
175
  }
157
176
 
158
177
  upsertMentionedUser = (user: UserResponse) => {
@@ -179,8 +198,29 @@ export class TextComposer {
179
198
  };
180
199
 
181
200
  setCommand = (command: CommandResponse | null) => {
182
- if (command?.name === this.command?.name) return;
183
- this.state.partialNext({ command });
201
+ if (!command) {
202
+ this.clearCommand();
203
+ return;
204
+ }
205
+ if (command.name === this.command?.name) return;
206
+ if (this.composer.isCommandDisabled(command)) return;
207
+
208
+ const stateToRestore: TextComposerCommandActivationEffect['stateToRestore'] = {
209
+ command: null,
210
+ };
211
+
212
+ this.commitState({
213
+ ...this.state.getLatestValue(),
214
+ command,
215
+ effects: [
216
+ {
217
+ command,
218
+ stateToRestore,
219
+ type: 'command.activate',
220
+ },
221
+ ],
222
+ suggestions: undefined,
223
+ });
184
224
  };
185
225
 
186
226
  setText = (text: string) => {
@@ -270,6 +310,14 @@ export class TextComposer {
270
310
  };
271
311
  // --- END STATE API ---
272
312
 
313
+ private commitState = (state: TextComposerMiddlewareExecutorState) => {
314
+ const { change, effects, ...nextState } = state;
315
+ void change;
316
+
317
+ this.state.next(nextState);
318
+ this.composer.applyEffects(effects);
319
+ };
320
+
273
321
  // --- START TEXT PROCESSING ----
274
322
 
275
323
  handleChange = async ({
@@ -289,7 +337,7 @@ export class TextComposer {
289
337
  },
290
338
  });
291
339
  if (output.status === 'discard') return;
292
- this.state.next(output.state);
340
+ this.commitState(output.state);
293
341
 
294
342
  if (this.config.publishTypingEvents && text) {
295
343
  logChatPromiseExecution(
@@ -312,7 +360,7 @@ export class TextComposer {
312
360
  },
313
361
  });
314
362
  if (output?.status === 'discard') return;
315
- this.state.next(output.state);
363
+ this.commitState(output.state);
316
364
  };
317
365
  // --- END TEXT PROCESSING ----
318
366
  }