diff --git a/examples/tutorial/package.json b/examples/tutorial/package.json
index 998f35bbf..f4d2d920e 100644
--- a/examples/tutorial/package.json
+++ b/examples/tutorial/package.json
@@ -16,7 +16,7 @@
"emoji-mart": "^5.6.0",
"react": "^19.2.6",
"react-dom": "^19.2.6",
- "stream-chat": "^9.50.2",
+ "stream-chat": "^9.52.0",
"stream-chat-react": "workspace:^"
},
"devDependencies": {
diff --git a/examples/vite/package.json b/examples/vite/package.json
index 34fc1ad5b..ff9fe2c6e 100644
--- a/examples/vite/package.json
+++ b/examples/vite/package.json
@@ -16,7 +16,7 @@
"modern-normalize": "^3.0.1",
"react": "^19.2.6",
"react-dom": "^19.2.6",
- "stream-chat": "^9.50.2",
+ "stream-chat": "^9.52.0",
"stream-chat-react": "workspace:^"
},
"devDependencies": {
diff --git a/examples/vite/src/App.tsx b/examples/vite/src/App.tsx
index 7abfd4087..60c98944a 100644
--- a/examples/vite/src/App.tsx
+++ b/examples/vite/src/App.tsx
@@ -4,14 +4,17 @@ import type {
ChannelOptions,
ChannelSort,
LocalMessage,
+ MessageComposer,
TextComposerMiddleware,
} from 'stream-chat';
import {
ChannelSearchSource,
createActiveCommandGuardMiddleware,
+ createAttachmentsCompositionMiddleware,
createCommandInjectionMiddleware,
createCommandStringExtractionMiddleware,
createDraftCommandInjectionMiddleware,
+ createSendWithPendingUploadsAttachmentsMiddleware,
SearchController,
UserSearchSource,
} from 'stream-chat';
@@ -71,6 +74,8 @@ import { ConfigurableMessageActions } from './CustomMessageActions';
import { InlineEditableMessage } from './InlineEditMessage';
import { SidebarToggle } from './Sidebar/SidebarToggle.tsx';
import { CommandModeAttachmentSelector } from './CommandModeAttachmentSelector.tsx';
+import { StreamDebugHandles } from './Debug';
+import { installUploadHarness } from './SendWhilePendingUploads';
const PUBLIC_VITE_EXAMPLE_API_KEY = 'xzwhhgtazy6h';
@@ -225,9 +230,27 @@ const CustomAttachmentWithActions = (props: AttachmentProps) => (
{FAILING_FILE_NAME_PREFIX}… files
+ {' '}
+ fails just the attachments whose file name starts with{' '}
+ {FAILING_FILE_NAME_PREFIX}, so a message with one good and one
+ bad attachment reproduces the partial retry: resending re-uploads only the one
+ that failed.
+ {toDebugJson(value)}
+ )}
+ | id | +type | +uploadState | +live progress | +preview | +
|---|---|---|---|---|
| {id?.slice(0, 8)} | +{attachment.type} | +{state ?? '—'} | + {/* Read from uploadManager, not the attachment: the value stored on an + attachment carried by a message is frozen at compose time. */} ++ {id && uploads[id] + ? `${uploads[id].uploadProgress ?? '?'}%` + : 'no record'} + | +{previewUri ? 'yes' : '—'} | +