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
1,113 changes: 572 additions & 541 deletions ai-docs/ai-migration-v9-to-v10.md

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions ai-docs/ai-migration.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> **Upgrading from v9 to v10?** This file covers v8 → v9 only. Use
> https://raw.githubusercontent.com/GetStream/stream-chat-react-native/V10/ai-docs/ai-migration-v9-to-v10.md instead.

# stream-chat-react-native v8 → v9 — Agent Migration Guide

> Machine-oriented migration reference for AI coding agents. The prose-heavy
Expand Down
10 changes: 5 additions & 5 deletions ai-docs/channel-state-ui-migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ Beyond the flattening, three things changed name or shape rather than location:

- **`channel.disconnected` → `channel.pendingDisposal`**, and the old name is **removed outright — there is
no deprecated alias.** (V10 is a major, so the LLC is not carrying aliases through it.) The flag is one-way
and terminal: the paginators are disposed, the subscriptions unregistered, and the client drops the channel
from `activeChannels`, so it never revives. `getClient()` throws on such an instance. RN had five call
and terminal: the paginators are disposed, the subscriptions unregistered, and `client.channelManager` drops
the channel, so it never revives. `getClient()` throws on such an instance. RN had five call
sites, all plain property reads.
- **`WatcherState` → `ChannelWatchState`**, also with no alias. The slice no longer describes only *other*
people watching (`watchers`, `watcherCount`) — it now also answers whether *this client* is watching, so
Expand All @@ -49,9 +49,9 @@ ownCapabilities consumers.
`client.on(...)` subscription + imperative `channel.muteStatus()` call. `useMutedChannels` stayed
event-based on purpose (it's the client-global muted-channel *list*, not this channel's status).

**3. Channel lifecycle wired.** `<Channel>` calls `channel.activate()` on mount and
`channel.deactivate()` on unmount (refcounted). This is what gates the reconnect no-destructive-reseed
of an open channel's message list.
**3. Channel lifecycle wired.** `<Channel>` calls `channel.activate()` on mount and the release
function it returns on unmount (refcounted; there is no `deactivate()`). This is what gates the
reconnect no-destructive-reseed of an open channel's message list.

**4. AI indicator.** `useAIState` became a thin `useStateStore(channel.state, (s) => ({ aiState: s.aiState }))`
reader — the public `{ aiState }` shape is unchanged, and it now honors `ai_indicator.stop`. The
Expand Down
6 changes: 3 additions & 3 deletions ai-docs/i18n-v10-migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,9 +184,9 @@ where a plural is the bare `<key>`; a dictionary needs the `_one` / `_other` ent
> number, and the `t('timestamp.X', { timestamp })` path is **not type-checked** — i18next's
> interpolation bag is untyped, so a raw wire number compiles. This SDK's `getDateString` wrapper
> suppresses the resulting `Invalid Date`, so a missed conversion renders a **blank** timestamp rather
> than an error. The magnitude-based rescue that used to cover this (`normalizeTimestamp` in
> `src/i18n/utils.ts`) is gone. If a timestamp is blank, check the conversion first; see
> [Part I](./ai-migration-v9-to-v10.md) on server-sent dates.
> than an error. Nothing rescales an out-of-range number for you. If a timestamp is blank, check the
> conversion first; see §17.5 (Part I) of [`ai-migration-v9-to-v10.md`](./ai-migration-v9-to-v10.md) on
> server-sent dates.

Two steps, and the second is the one that gets missed.

Expand Down
Loading
Loading