Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions package/src/components/Chat/Chat.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -59,15 +59,14 @@ export type ChatProps = Pick<ChatContextValue, 'client'> &
* channels; inactive channels are hydrated on their next explicit query. The
* last-sync timestamp is still advanced so the same payload is not retried.
*
* Defaults to {@link DEFAULT_MAX_SYNC_EVENTS_LIMIT} (250). Pass a larger number
* to raise the cap, or any non-positive value (e.g. `0`) for no limit — i.e.
* replay every event (the historical behavior).
* Defaults to {@link DEFAULT_MAX_SYNC_EVENTS_LIMIT} (250). Pass `false` to
* disable the limit entirely (replay every event — the historical behavior).
*
* Only relevant when `enableOfflineSupport` is enabled.
*
* @default 250
*/
maxSyncEventsLimit?: number;
maxSyncEventsLimit?: number | false;
/**
* When true, multipart uploads use the SDK's native upload adapter when available.
* When false, uploads stay on the default axios adapter.
Expand Down
12 changes: 12 additions & 0 deletions package/src/components/Chat/__tests__/Chat.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -355,4 +355,16 @@ describe('TranslationContext', () => {
);
expect(DEFAULT_MAX_SYNC_EVENTS_LIMIT).toBe(250);
});

it('disables the sync event limit when maxSyncEventsLimit is false', async () => {
const chatClientWithUser = await getTestClientWithUser({ id: 'testID' });

render(<Chat client={chatClientWithUser} enableOfflineSupport maxSyncEventsLimit={false} />);

await waitFor(() => {
expect(chatClientWithUser.offlineDb).toBeDefined();
});
// `false` opts out: the client stores no limit (undefined), so replay always runs.
expect(chatClientWithUser.offlineDb!.syncManager.syncMaxEventCount).toBeUndefined();
});
});
13 changes: 11 additions & 2 deletions package/src/store/OfflineDB.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,17 @@ import * as api from './apis';
import { SqliteClient } from './SqliteClient';

export class OfflineDB extends AbstractOfflineDB {
constructor({ client, maxSyncEventsLimit }: { client: StreamChat; maxSyncEventsLimit?: number }) {
super({ client, syncMaxEventCount: maxSyncEventsLimit });
constructor({
client,
maxSyncEventsLimit,
}: {
client: StreamChat;
maxSyncEventsLimit?: number | false;
}) {
super({
client,
syncMaxEventCount: maxSyncEventsLimit === false ? undefined : maxSyncEventsLimit,
});
}

upsertCidsForQuery = api.upsertCidsForQuery;
Expand Down