Repository navigation
fix(react-native): UI Kit docs corrections, the Ongoing Call page and SDK contract tables — ENG-39154 - #524
suraj-chauhan-cometchat wants to merge 19 commits into
Conversation
…port
ENG-39166. Five imports on four React Native pages named symbols that
@cometchat/chat-uikit-react-native does not export from its package root, so
copied snippets failed with TS2305 (and EnterKeyBehavior, used as a value, was
undefined at runtime). Each is now fixed with a docs-only change that uses the
kit's public API as it ships today.
call-buttons
OutgoingCallConfiguration is not exported. outgoingCallConfiguration is spread
straight into the outgoing call component, so a plain object satisfies it.
This is also more correct than the class it replaces: that class's
constructor copies only 3 of its 9 fields and silently drops the rest.
compact-message-composer
- EnterKeyBehavior is not exported by name, but it is public through the
exported CometChatUiKitConstants namespace. All four references (two in the
example, one in the props table) now use
CometChatUiKitConstants.EnterKeyBehavior.*. A plain "sendMessage" string
does not work: string enums are nominal, so it fails with TS2322.
- Removed the "Configuration" section. It built a
SingleLineMessageComposerConfiguration that no v5 component accepts and
never used it. Every option it showed is already a direct prop in the props
table (hideVoiceRecording is an alias of the documented
hideVoiceRecordingButton). Nothing linked to the section.
component-styling
CometChatReceipt is not exported, and the snippet also used
CometChatUiKitConstants without importing it. The theme override is now shown
on CometChatConversations. It is deliberately not shown on
CometChatMessageList: message bubbles pass their own receipt style, which wins
the merge, so a top-level receiptStyles override does not change them. Run
against the kit's default light theme and its real deepMerge, the read-receipt
tint resolves to the override (#FFAB00) for Conversations and stays at the
bubble default (#09C26F) for MessageList. The prose now says exactly that.
search
SearchStyle was imported only as a type annotation. The type is now derived
from the component (React.ComponentProps<typeof CometChatSearch>["style"]),
which also corrects Partial<> to the prop's real DeepPartial<>.
Verified: every edited code block was extracted from the page and compiled
against the published kit; deliberately broken copies (a misspelled theme key,
enum member and component name) fail, so the checks are live. MDX fences and
tags remain balanced on all four pages. Rendered behaviour was confirmed by the
reporter on device before commit.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ENG-39167. The React Native events page listed names the kit never emits, so a
listener copied from it silently never fired. Every name on the corrected page
was checked against the kit source.
Names
ccUserUnblocked -> ccUserUnBlocked (kit spelling, capital B)
ccGroupMemberUnbanned -> ccGroupMemberUnBanned
ccLiveReaction -> removed; no such event exists
Call events
onIncomingCallAccepted -> ccCallAccepted
onIncomingCallRejected -> ccCallRejected
onCallEnded -> ccCallEnded
onCallInitiated -> ccOutgoingCall. ccCallInitiated is declared but never
emitted; ccOutgoingCall is what fires after
CometChat.initiateCall() succeeds.
onOutgoingCallAccepted/Rejected -> removed. ccOutgoingCallAccepted and
ccOutgoingCallRejected are declared but never emitted.
The page now points to the Chat SDK's call listener,
where these callbacks do exist.
Handlers receive { call }, not a bare call. Two descriptions were also wrong:
ccCallRejected fires when the user cancels their own outgoing call as well as
when they reject an incoming one, and ccCallEnded is emitted with no call when
an answered call ends.
Structure
ccActiveChatChanged moved from UI events to message events: it is declared on
the message listener and only fires through addMessageListener. The
"CometChatUIEventListener" heading is renamed "UI Events"; no such symbol
exists in the kit.
Verified
- All 39 names on the page type-check on the listener their section belongs
to; a known-wrong name fails, so the check is live.
- All 39 reach an inline listener through the real CometChatUIEventHandler
dispatcher (39/39), and each has at least one emit site in the kit.
- The SDK example compiles. CallListener does not key-check its argument, so
the callback names were confirmed against the SDK's CallListener class and
five shipped kit call sites, including CometChatOutgoingCall.
- Rendered in a local Mintlify preview; confirmed by the reporter.
Not addressed here: listeners whose handler is a named function never fire
even with the correct name, because the dispatcher matches on the function's
.name. That is a kit defect, tracked separately as ENG-39300.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ENG-39170 (ban round trip).
CometChatGroupMembers gives owners, admins and moderators a Ban option by
default, but the UI Kit ships no screen to list banned members or unban them,
and the group chat guide never said so. It listed banGroupMember() in its
feature matrix with no unban counterpart, and described the members list as
offering only "scope changes and removal". A reader following the guide could
ban a member and find no documented way back.
The round trip is already documented, and correct, on the Chat SDK page
sdk/react-native/group-kick-ban-members; the guide simply never pointed to it.
guide-group-chat
- Section 4 now says what the menu offers and to whom: owners, admins and
moderators can change scope, remove, or ban (RolePermissions in
CometChatGroupMembers; participants get no actions).
- A note after the section 4 example states the UI Kit has no banned-members
or unban screen, links to the SDK sections for listing banned members
(BannedMembersRequestBuilder) and unbanning (unbanGroupMember), and to
hideBanMemberOption for removing the Ban option instead.
- The feature matrix gains "Unban member" and "List banned members".
Verified
- The kit on dev-v5 has no unbanGroupMember or BannedMembersRequestBuilder
usage and exports no banned-members component.
- The SDK page's ban, unban and banned-members TypeScript examples compile
against the Chat SDK; misspelled copies of both APIs fail, so the check is
live.
- All three new links resolve in a local Mintlify preview: the two SDK anchors
exist on the rendered page, and group-members renders the
hideBanMemberOption row. Confirmed by the reporter.
Not in this change: a details-screen recipe and replacement guidance in the
upgrade guide (ENG-39170 items 2 and 3) are left as follow-ups.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
ENG-39171. The kit exports CometChatOngoingCall, the in-call screen, but the
React Native v5 docs had no page for it: ui-kit/react-native/ongoing-call has
never existed (only the v4 page does), and the live URL redirects to the docs
home. iOS and Vue have current Ongoing Call pages; the new page follows the iOS
structure (Usage, Customization, Common Patterns), since Vue's is an older
props-only page. It uses React Native code and documents only what the RN kit
supports.
ongoing-call (new)
- Integration: render it with a session ID and a CallSettingsBuilder whose
OngoingCallListener ends the session, mirroring CometChatIncomingCall.
Incoming and Outgoing Call normally render it for you.
- Actions: onError is the only callback. It fires when the component cannot
get a call token; a plain Error arrives as a CometChatException with code
TOKEN_GENERATION_FAILED, and SDK exceptions pass through unchanged.
- Filters: the CallSettingsBuilder methods and defaults, taken from the Calls
SDK typings; the three methods the SDK marks obsolete are left out.
- Events: the component emits none. ccCallEnded comes only from Incoming and
Outgoing Call.
- Customization: no style prop and no view slots; the loading spinner uses
the theme's primary color. The builder must be an instance (its build() is
called), and only the settings built on the first render are used.
- Common Patterns: accepting a call, video and audio-only settings, call-end
handling, and passing a builder to Incoming Call, Outgoing Call or Call
Buttons. Given a builder, those components set their own
OngoingCallListener on it and skip their default layout and audio-only
settings.
docs.json
Adds the page to the React Native nav after Outgoing Call, as on iOS.
components-overview
Adds CometChatOngoingCall to the Calling catalog.
Verified
- The component's source is identical in kit 5.4.0 and 5.5.0, and the builder
props on Incoming Call, Outgoing Call and Call Buttons are unchanged.
- All 8 code blocks compile against kit 5.4.0, Chat SDK 4.0.28 and Calls SDK
5.0.5 under strict TypeScript. A misspelled copy of each fails, and a
control file with a deliberate error confirms the checker ran.
- Runtime claims ran in Jest against the real component with the SDKs mocked:
spinner then call view, full-size root view, the onError codes, first-render
settings kept, a plain settings object throws, and the spinner color.
- Rendered in a local Mintlify preview: the section structure matches the iOS
page, and all 28 links and anchors resolve. Confirmed by the reporter.
Not verified: the end-of-call steps in a live call on a device.
Not in this change: an onError function that changes between renders, such as
an inline arrow, makes the component request a new call token and fall back to
the spinner (reproduced in Jest). That is a kit defect, not documented here as
intended behavior.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ENG-39176. 38 of the 58 React Native SDK pages carry an AI Integration Quick
Reference contract table. These seven functional API pages did not, so return
types, error behaviour and constraints had to be recovered from CometChat.d.ts.
Two had no Quick Reference accordion at all (campaigns, upload-files); five had
one holding only a code snippet (overview, pin-conversation, pin-message,
save-message, thread-subscription). The snippets are untouched — the table goes
above them, as on 30 of the 38 pages that already had a table.
Each table uses the nine rows every existing table uses: Package, Import, Key
Methods, Key Classes, Prerequisites, Primary output, Constraints, Related and
Full reference.
The Constraints rows carry the per-page facts that are easy to get wrong, each
already stated on the page or in the typings:
- pin-conversation: pin by UID/GUID plus receiver type, not conversation id;
needs the features.ux.conversations.pinned.enabled flag, which no plan
seeds; a never-messaged or hidden conversation rejects with
ERR_CONVERSATION_NOT_ACCESSIBLE; this SDK has no ConversationListener.
- pin-message: moderation action, the server decides; a cap breach returns the
ceiling in errorParams.limit; no isPinned()/isSystemPinned() — read
getPinnedAt().
- save-message: savedAt is per-viewer; saves are account-wide, so
setSavedOnly(true) must not be combined with setUID()/setGUID(); no
isSaved() — read getSavedAt().
- thread-subscription: a thread is its parent message id, passed as a number;
unsubscribing hard-deletes the row; setThreadSubscribed() is local only;
ThreadsRequestBuilder spells its scope setters setUid()/setGuid().
- upload-files: one request per destination and batch; receiverId and
receiverType must match the message sent later; fileId is caller-supplied;
onFileError means rejected, not failed mid-upload.
- campaigns: card messages are receive-only; the cards library only renders.
- overview: init() once before anything else; Auth Key for development only.
Verified against @cometchat/chat-sdk-react-native 4.1.0, the published latest,
rather than the 4.0.28 typecheck harness:
- Every method named exists in the CometChat namespace, and all 40 type-level
assertions pass: each Primary output return type, plus the negative claims
(BaseMessage has getPinnedAt and getSavedAt but no isPinned, isSaved or
isSystemPinned; CometChat has no ConversationListener; ThreadsRequestBuilder
has setUid, not setUID). A control file and two deliberately wrong
assertions fail, so the check is live.
- All seven pages render in a local Mintlify preview with all nine rows, and
the escaped pipes in union types render as "|" instead of splitting the cell.
- Every link in the new tables resolves. Three targets redirect in the local
preview only — authentication-overview, receive-messages and
retrieve-conversations, which carry a pre-existing MDX parse error from an
unescaped | inside a table cell. All three return 200 on the live site and
are untouched here.
- Confirmed by the reporter.
Not in this change: the 13 remaining pages without a table are conceptual and
landing pages (changelog, key-concepts, rate-limits, the *-overview pages,
llms-react-native-v4, message-structure-and-hierarchy, upgrading-from-v3,
users-overview), where a method-contract table does not apply.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… kit declares
ENG-39175. The Expo and React Native CLI integration pages told integrators to
add WRITE_EXTERNAL_STORAGE and READ_EXTERNAL_STORAGE by hand. The UI Kit already
declares both in its own manifest, so the instruction is redundant and teaches
an outdated practice: WRITE_EXTERNAL_STORAGE has had no effect since Android 11,
and Android 13 replaced READ_EXTERNAL_STORAGE with the granular media
permissions.
expo-integration
Drops both from the android.permissions array in the app.json snippet, leaving
INTERNET, CAMERA, MODIFY_AUDIO_SETTINGS, RECORD_AUDIO, ACCESS_NETWORK_STATE
and VIBRATE.
react-native-cli-integration
Drops both from the AndroidManifest.xml snippet, leaving VIBRATE, INTERNET,
CAMERA and RECORD_AUDIO.
Both pages now say the UI Kit declares the two storage permissions in its own
manifest, so nobody adds them back.
This does not change the permissions of a built app, and neither page claims it
does: the kit's manifest still declares them and Android's manifest merger
unions them in. Removing them for real is a kit change, tracked separately.
Verified
- packages/ChatUiKit/android/src/main/AndroidManifest.xml at v5.5.0 declares
INTERNET, WRITE_EXTERNAL_STORAGE and READ_EXTERNAL_STORAGE.
- Both edited snippets still parse: the app.json block as JSON, the manifest
block as XML.
- No other v5 React Native page mentions either permission; the v4 pages are
left as they are.
- Both pages render in a local Mintlify preview with the note in place and no
storage permission left in any code block. Confirmed by the reporter.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…r page
ENG-39173. The kit exports the components the staging tray is built from, but
the Message Composer page described the tray only as behaviour: nothing said
which components render it, what props they take, or that two of them are
exported under a second name. Anyone replacing the tray had to read the kit
source.
message-composer
Adds "The tray components" to the Multi-Attachment Staging Tray section, in
four parts:
- An alias table. CometChatAttachmentTray and CometChatAttachmentPreview are
the same component under two names, as are CometChatAttachmentTile and
CometChatAttachmentPreviewItem. The ticket named five components; there are
three, because two of the names are aliases.
- Prop tables for CometChatAttachmentTray, CometChatAttachmentTile,
CometChatAttachmentViewer and CometChatMediaViewer, each listing the full
prop set, which props are required, and the theme style slot.
- A note that these components exist only in the React Native UI Kit, and
that CometChatMediaViewer supersedes CometChatAttachmentViewer for the
attachments of a sent message. The Viewer is still exported, but the kit no
longer renders it: the composer and the image and video bubbles use
MediaViewer.
- A note that SelectedAttachment, the composer's staging model, is not
exported, with the React.ComponentProps derivation to use instead. The one
code example uses that derivation rather than naming the type.
Verified against kit 5.4.0 under strict TypeScript, with 19 type-level
assertions:
- The two alias claims hold as type identities, not by name similarity.
- Every prop table matches the component's props exactly: the key set, the
required set (Tray and Tile need attachments/attachment, onRemove and
onRetry; Viewer needs all but visible; MediaViewer needs all but message
and canPreview), the callback signatures, and the theme style types.
- CometChatAttachmentTile's attachment is the same type as one element of
CometChatAttachmentTray's attachments, so a tile takes what the tray holds.
- Importing SelectedAttachment from the package fails, which is why the note
and the example derive it.
- The documented example compiles. A copy with onRetry misspelled as
onRetries fails, a deliberately wrong required-props assertion fails, and a
control file with a plain type error fails, so the check is live.
- The section renders in a local Mintlify preview: the new heading, the four
component headings, the prop tables and the example. Confirmed by the
reporter.
Not verified: the runtime defaults read from the source rather than the types,
namely visible defaulting to true on CometChatAttachmentViewer and canPreview
defaulting to images and videos.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…or chain
ENG-39169. The RN customization API behind custom message types —
DataSourceDecorator -> MessageDataSource / ExtensionsDataSource ->
ChatConfigurator.enable() — had no end-to-end page. MessageDataSource and
ExtensionsDataSource were documented nowhere in v5; the only occurrence of
either name was the LLM context page stating the gap itself.
custom-message-types (new)
- The decorator chain, with MessageDataSource as the default source and
enable() layering rather than replacing.
- The five required overrides. The existing guidance said four and omitted
getId, which is what produces the broken subclass: the base throws
"Method not implemented.", the class is not abstract so TypeScript cannot
force the override, and returning the wrapped source's id is worse still —
enable() dedupes on the id and skips the decorator silently.
- Registration timing: after login() resolves, not after init().
enableExtensions() opens with ChatConfigurator.init(), which replaces
dataSource and resets the names dedup list.
- The surviving route, both halves: an ExtensionsDataSource in
uiKitSettings.extensions is re-applied after the reset, but the base
enable() gates on isExtensionEnabled(getExtensionId()), false for any
custom type, so the subclass must override enable() too. Both steps or
neither.
- A poll message type worked end to end, and a route-comparison table.
message-list
The four-method table becomes five with an Identity row for getId, and the
"each must call super" rule now carves getId out explicitly, with both
failure modes and a link to the new page.
llms-react-native-v5
Three sites corrected: the decorator-chain summary said "override what you
need calling super each time" (getId is neither optional nor delegating),
the customization entry said four overrides, and the "no dedicated RN page"
gap note is replaced by a pointer to the page.
docs.json
Adds the page to the React Native Guides nav after guide-block-unblock-user.
Verified against @cometchat/chat-uikit-react-native 5.2.11 source:
- DataSourceDecorator.getId() throws and the class is concrete; 48 other
base methods delegate.
- ChatConfigurator.enable() dedupes on names via newSource.getId();
init() replaces dataSource and resets names to ["message_utils"].
- enableExtensions() opens with ChatConfigurator.init(), then re-applies
uiKitSettings.extensions, calling enable() on each.
- ExtensionsDataSource is abstract over addExtension()/getExtensionId()
with a concrete enable() gating on CometChat.isExtensionEnabled().
- Every symbol used in the examples is exported from the package root, and
CometChat.CATEGORY_CUSTOM, getCustomData() and UIKitSettings.extensions
exist in the SDK typings.
- mint validate and mint broken-links flag none of the changed files; the
page and all its link targets render in a local Mintlify preview, and the
#filtering-messages anchor it links to resolves.
Not verified: the examples were not compiled against the kit. The call-site
count for enableExtensions() is deliberately left unstated — 5.2.11 has four,
and the 5.4/5.5 source reports five.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ies components
ENG-39174. CometChatConversationStarter and CometChatSmartReplies are exported
from the kit root but appeared on no v5 page; their props were documented
nowhere. CometChatConversationSummary, the third component of the same family,
was already shown on ai-features, so the omission read as an oversight rather
than a decision.
ai-features
- "Rendering the component directly" under both Conversation Starter and
Smart Replies, each with the full prop set and an example. Both say up
front that CometChatMessageList renders the component when the matching
toggle is set, so the standalone component is for custom placement only —
unlike Conversation Summary, where the header ships no panel and rendering
it yourself is mandatory.
- A Warning on Smart Replies: CometChat.getSmartReplies() is declared
Promise<Object>, but the component's getSmartReplies prop expects
Promise<string[]>. Without Object.values() no chips render. The kit's own
MessageList does exactly that mapping. getConversationStarter() needs none,
being already Promise<Array<string>>.
- A props table for Conversation Summary. The section documented
getConversationSummary but not closeCallback, which was undocumented.
- A "Standalone components" row in the Quick Reference accordion.
- All three are noted as having no style prop; they theme through useTheme().
components-overview
The AI catalog listed only CometChatAIAssistantChatHistory. Adds all three,
as the React UI Kit's catalog already does.
Verified against @cometchat/chat-uikit-react-native 5.5.0, fetched from npm,
rather than the older local copy:
- Both components are exported from index.ts, imported at :179-180 exactly
as reported.
- The prop sets are taken from the source interfaces, not inferred:
ConversationStarter takes getConversationStarters (required) and
onSuggestionClicked; SmartReplies adds getSmartReplies (required) and
closeCallback; ConversationSummary takes getConversationSummary (required)
and closeCallback. None declares a style prop.
- The SDK return types are from the 4.x typings: Promise<Array<string>>,
Promise<Object> and Promise<string> respectively.
- MessageList renders both components internally behind the two toggles, so
the "custom placement only" framing is accurate.
- mint validate and mint broken-links flag neither file; both pages render
in a local Mintlify preview and the three #conversation-* anchors the new
catalog rows link to resolve.
Not verified: the examples were not compiled against the kit.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…n components
ENG-39172. Reactions are on by default in v5 and the list-level props are
documented, but the three components the list is built from — CometChatReactions,
CometChatQuickReactions and CometChatReactionList — had no props anywhere.
CometChatReactionList appeared only on component-styling, for style keys.
While checking them, the documented type for quickReactionList turned out to be
wrong, on a path that is already documented and in use.
message-list
- quickReactionList is typed [string, string?, string?, string?, string?] —
a tuple capped at five — not string[], which both the props table and the
Quick Reference block claimed. A sixth emoji does not compile, and a value
typed as string[] is rejected with TS2322 even when it holds five items,
so the documented type was the one that does not work. The stated default,
"Predefined reactions", is replaced with the real one.
- A "Reaction Components" section with prop tables for all three, following
the shape of "The tray components" on the composer page. It records the
three things that cannot be guessed from the names:
· CometChatReactions takes messageObject; CometChatReactionList takes
message. Both are a CometChat.BaseMessage.
· CometChatQuickReactionsProps is not exported from the package root,
unlike CometChatReactionsInterface and CometChatReactionListInterface,
so it needs the React.ComponentProps derivation the composer page
already uses for SelectedAttachment.
· maxContentWidth changes the pill cap from 3 to as many as fit.
components-overview
Adds the three components to the Messages catalog.
Verified against @cometchat/chat-uikit-react-native 5.5.0 from npm:
- All three are exported from index.ts; CometChatQuickReactionsProps is not.
- Every prop, its optionality and its type comes from the source interfaces
CometChatReactionsInterface, CometChatQuickReactionsProps and
CometChatReactionListInterface.
- MessageList declares quickReactionList with the same five-slot tuple the
component does, and the default emoji set is the component's own literal.
- mint validate and mint broken-links flag neither file; both pages render
in a local Mintlify preview, the #reaction-components and
#quickreactionlist anchors resolve, and the default emoji render as
characters rather than escapes.
Two notes on the ticket text, for anyone reading it later: v4 had three
reaction pages, not two — reaction-list as well — and component-styling does
carry a working CometChatReactionList usage example, not only style keys.
Not verified: the examples were not compiled against the kit.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…rride key — ENG-39154 Verified against the shipped 5.5.0 bundles, not against the page text. - The override example keyed on "en-US". Under the default autoDetectLanguage the kit resolves a device to the bare language code, so an en-US override is silently ignored. The example now keys on "en", which works on every version. - The supported list showed `zh-TW`; the shipped key is lowercase `zh-tw`. `zh-TW` is not recognised on 5.5.0 and falls back to English. - The page claimed 19 languages. The kit ships 21 keys — 18 distinct languages plus `en-US`, `en-GB` and `en-IN`, which all alias to `en`. The list also omitted `en` and `en-IN`, and `en` is the key auto-detect always lands on. Callouts are scoped to "v5.5.0 and earlier" and the examples are written to stay correct once ENG-39523 ships, so the page does not go stale on upgrade. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…39154 Carries over the review points from the closed #161 that still applied to main, checked against UI Kit 5.5.2 (master-v5): - core-features: Report option shows only on other users' messages (MessageDataSource !isSentByMe) and is hidden for AI agents. - core-features: mention @ALL under Mentions (group chats only). - message-composer: @ALL is group-only, label has no leading @, default "all", no effect with disableMentions. - TODO marker: Report screenshot is the Android one, needs an RN capture. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-39154 Addresses review on 6cb76c9: - core-features: Report is also hidden by hideFlagMessageOption and is not offered in the Pinned Messages panel. - message-composer: disableMentionAll has no effect when disableMentions is true (both are set only inside the !disableMentions block). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rrent — ENG-39154 The panel's own source calls the reportMessage exclusion temporary (CometChatPinnedMessages.tsx:81), so say "currently" and link the page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
raj-dubey1
left a comment
There was a problem hiding this comment.
Docs review: request changes
Most of this PR is correct and well verified. A few statements are still wrong in ways that would mislead people integrating the kit. Checked against the React Native UI Kit source (5.5.1 on master-v5), the published kit 5.5.2, chat SDK 4.1.0 and calls SDK 5.0.6. Structural checks pass: no 404s, no unresolved navigation refs, no broken links in the changed pages.
P0: wrong or misleading
custom-message-types.mdx:248-253turns off every built-in extension.extensions: [new PollExtension()]replaces the defaults (CometChatUIKit.ts:226:this.uiKitSettings?.extensions || this.defaultExtensions). Stickers, link preview, translation, polls and the others are lost, which contradictsextensions.mdx. Use[...CometChatUIKit.defaultExtensions, new PollExtension()]and add a warning. The snippet also usesCometChatUIKitandPollDataSourcewithout importing them.events.mdxdropsccCallFailed. The kit emits it fromCometChatCallButtons.tsx:198,CometChatCallLogs.tsx:352,CometChatIncomingCall.tsx:213andCometChatOutgoingCall.tsx:237, andcall-buttons.mdxdocuments it, so the two pages now contradict each other.- The old event names are still used on other pages:
users.mdx:17,257,272(ccUserUnblocked, including a listener example that will never fire) andgroups.mdx:17,259(ccGroupMemberUnbanned). The source names areccUserUnBlockedandccGroupMemberUnBanned(CometChatUIEvents.ts). compact-message-composer.mdx:629documentshideVoiceRecordingButton, which has no effect. The prop is declared (CometChatCompactMessageComposer.tsx:804), but onlyhideVoiceRecordingis read (:1211,:1274). It is the same in 5.5.2. DocumenthideVoiceRecording, and file a kit bug for the dead prop.message-list.mdx:747says theCometChatReactionsstyle is "DeepPartial, merged over the theme". It isn't: the component never callsuseTheme()and readsstyledirectly. The list passesgetCurrentBubbleStyle(...).reactionStylesitself (CometChatMessageList.tsx:4433). The page's own example (754-758), which passes nostyle, renders unstyled pills.
P1: should fix
call-buttons.mdx:76:ccCallRejecteddoes not fire when the receiver rejects. CallButtons emits it only when the local user cancels (CometChatCallButtons.tsx:330-334). It now contradictsevents.mdx.components-overview.mdxCalling table (edited here):onClosePressshould beonEndCallButtonPressed;onVoiceCallPressandonVideoCallPressdon't exist;callLogsRequestBuildershould becallLogRequestBuilder.events.mdxpresents itself as the full list but misses emitted events:ccMessageError,ccThreadSubscriptionChanged,ccMessagePinned/Unpinned/Saved/Unsaved, andopenChat. Separately,message-list.mdx:393listsccMessageDelivered, which nothing emits.ongoing-call.mdx:- Joining a group call from the meeting bubble also renders the call screen (
CallingExtensionDecorator.tsx:308-350, configured withgroupCallSettingsBuilder). That path emits noccCallEnded. Add it to the "Use your own settings" table. - Explain why
onErrormust be stable. The token effect is keyed on[sessionID, onError]and its cleanup setscallSettings.current = null, so a changingonErrorleaves the spinner up for good (the same happens under StrictMode in dev).
- Joining a group call from the meeting bubble also renders the call screen (
message-list.mdx:800: Component Styling only coversreactionListStyles. Bubble reactions are onmessage-bubble-styling.mdx, andquickReactionStyleisn't documented anywhere.- The PR description doesn't cover
custom-message-types.mdx, the Reactions section, the AI "render directly" sections or the@allmention rows. Those have no verification notes.
P2: nits
core-features.mdx:189: a TODO comment left in the published source.ongoing-call.mdx:153:callListeneris never defined.search.mdx:221: the prose still saysDeepPartial<SearchStyle>, a type that can't be imported.component-styling.mdx:1376: receipt styles have no "alignment" field.call-buttons.mdx:25: links tocomponents-overview#components, an anchor that doesn't exist.llms-react-native-v5.mdx::357,373: callingsuper.getId()throws an error, while returningthis.dataSource.getId()gets the decorator silently skipped. Say which is which.:39still says "verified against 5.4.0".
- SDK Key Methods rows:
pin-message.mdxis missinggetSystemPinMessageLimit().save-message.mdxis missingremoveMessageListener().
guide-overview.mdxdoesn't list the new Custom Message Types guide.- AI components: Smart Replies and Conversation Starter fetch only on mount, so rendering them directly needs a changing
keyto refetch.
Checked and correct
- Imports: the names the PR removes really aren't exported (
OutgoingCallConfiguration,SingleLineMessageComposerConfiguration,SearchStyle,CometChatReceipt), and the replacements are. - Events: the
UnBlocked/UnBannednames;ccLiveReactionremoved; the declared-but-never-emitted call keys;ccActiveChatChangedemitted throughemitMessageEvent. - Styling and localization: the receipt-merge example, and the localization behaviour on 5.5.0 vs 5.5.1+.
- Calls: the
CallSettingsBuildertable against calls SDK 5.0.6, and the OngoingCall props. - Composer: the tray, tile and viewer prop tables.
- SDK: every SDK contract table compiles against 4.1.0 under strict
tsc.
jitvarpatil
left a comment
There was a problem hiding this comment.
🤖 Review Buddy (review-docs-pr)
Recommendation: approve. Automated review; the final decision stays with a maintainer.
TL;DR. Structurally safe: 0 unresolved nav refs (the two new docs.json entries resolve), 0 removed/renamed pages so no redirects needed, 0 broken internal links in ui-kit/react-native/ + sdk/react-native/, and every anchor the PR adds resolves to a real heading. The Mintlify preview for the head SHA (42bb622) built green. I re-checked the kit/SDK claims against the local v5.5.0 tag, the npm tarballs @cometchat/chat-uikit-react-native@5.5.2 (today's latest), @cometchat/chat-sdk-react-native@4.1.0 and @cometchat/calls-sdk-react-native@5.0.5/5.0.6: event names and emit sites, the five "not exported" symbols, CometChatOngoingCall props/onError code, the tray/reaction/AI component props, the quickReactionList tuple, the login()→enableExtensions()→ChatConfigurator.init() chain, getId() throwing, the manifest permissions, mentionAllLabel/disableMentionAll defaults, the Report option's !isSentByMe rule, the 18 locale bundles + en-* aliases, and every SDK return type in the seven new contract tables — all hold. Eight P2s below; none misleads integration, so nothing blocks the merge.
P0 — blockers
None.
P1 — should fix before merge
None.
P2 — nits / follow-ups
ui-kit/react-native/events.mdx:100-105—ccCallFailedis emitted but not listed. The kit emits it from four sites in both 5.5.0 and 5.5.2 (CometChatIncomingCall.tsx:213andCometChatOutgoingCall.tsx:237with{ error },CometChatCallButtons.tsx:198andCometChatCallLogs.tsx:352with{ call }), and it is aCallUIEventListenerkey. The call table now says it lists the events the kit emits; add accCallFailedrow (payload{ error }or{ call }depending on the emitter).ccShowOngoingCallis also emitted but carries a component, so leaving it out is reasonable.ui-kit/react-native/ongoing-call.mdx:49(Integration) —CometChatCalls.endSession()is deprecated in the Calls SDK the page targets.@cometchat/calls-sdk-react-native5.0.5 and 5.0.6 both mark it@deprecated use leaveSession() instead(dist/index.d.ts:1574). The kit's ownCometChatIncomingCallstill callsendSession(), so the snippet mirrors the kit, but a new page should not teach a deprecated call: switch toCometChatCalls.leaveSession()or add a one-line note.ui-kit/react-native/ongoing-call.mdx"Style" section — verified against 5.5.0, but npmlatestis 5.5.2 (published today) and the component was rewritten. 5.5.2 wraps the call in aSafeAreaViewwithbackgroundColor: theme.color.background1and waits 150 ms for the layout to settle before mounting the Calls SDK view, so "the only UI Kit element is the loading spinner" is already stale. Props,onError/TOKEN_GENERATION_FAILED, the first-render-only builder and the[sessionID, onError]dependency all still hold. Suggest a quick re-check against 5.5.2 and dropping the "only element" sentence.ui-kit/react-native/components-overview.mdx:71— staleonClosePresson the row directly above the newCometChatOngoingCallrow. The PR body already notes the kit has no such prop; 5.5.2 confirms it isonEndCallButtonPressed(CometChatOutgoingCall.tsx:40). Since the table is being edited here, fix it in the same PR.ui-kit/react-native/core-features.mdx:219— a{/* TODO … */}comment was added above an Android screenshot (/images/android-flag-message.png) on a React Native page. The comment does not render, but it is a placeholder left in shipped content and the image is still the wrong platform. Either add the RN capture or drop the<Frame>and keep the prose.- Pre-existing broken anchors / stale calls in files this PR touches (not introduced here, but cheap to fix while in the file):
methods#how-to-login-a-user-with-auth-token→ actual heading is#login-using-auth-token(expo-integration.mdx:71,251;react-native-cli-integration.mdx:67,303);components-overview#components→ the page has#component-catalog(call-buttons.mdx:25,compact-message-composer.mdx:27,message-composer.mdx:27);ai-features.mdx:11Quick Reference showsCometChatUIKit.login("UID")but the kit's signature islogin({ uid })(CometChatUIKit.ts:286), which the newcustom-message-types.mdxgets right. - PR description covers 7 of the 14 commits. "Six changes … one commit each" is stale:
f6adf2c5(Custom Message Types page),45d0a277(standalone Conversation Starter / Smart Replies / Summary),f98c24ce(quickReactionListtuple + reaction components),df299ed9(localize codes),6cb76c9e/4ae201c5/42bb6224(Report visibility,@all, Pinned Messages link) are not described, though the checklist ticks "accurately described". Worth a short section each so the reviewer and the Linear tickets line up. ui-kit/react-native/message-composer.mdxtray note — a simpler derivation exists.SelectedAttachmentis indeed not exported (true in 5.5.0 and 5.5.2), butCometChatAttachmentTrayPropsis exported from the package root in both versions, soCometChatAttachmentTrayProps["attachments"][number]reads better thanReact.ComponentProps<typeof CometChatAttachmentTray>["attachments"][number]. Optional.
What passed
- Build: 0 navigation refs that don't resolve; Mintlify preview for
42bb622is 🟢 Ready (deployed 10:13 UTC, same minute as the head commit). - Redirects: 0 files removed or renamed → nothing to redirect; 0 chained 404s. (The script's
-22redirect delta is base drift — the branch is 277 files behindmain, and the PR's owndocs.jsonchange is exactly the two nav entries.) - Links: 0 broken internal links across the 63 UI Kit and 163 SDK pages scanned; all 30+ anchored links the PR adds resolve, including the deep
#targets intogroup-kick-ban-members,real-time-listeners,send-message,sdk/reference/*,message-list#reaction-componentsandai-features#*. - Orphans: only
llms-react-native-v5/llms-react-native-v4, which are intentionally outside navigation onmaintoo. - Images: no new image refs; every existing one in the touched pages exists on the branch.
- Content integrity vs source: events (
ccUserUnBlocked,ccGroupMemberUnBanned, noccLiveReaction,ccActiveChatChangedviaemitMessageEvent,ccOutgoingCallAccepted/Rejected/ccCallInitiateddeclared but never emitted,ccCallEndedwith an empty payload atCometChatIncomingCall.tsx:183,ccCallRejectedon outgoing cancel); the five removed imports are absent from the rootindex.tsin 5.5.0 and 5.5.2;CometChatUiKitConstants.EnterKeyBehaviorexists;CometChatOngoingCallprops +TOKEN_GENERATION_FAILED;CallSettingsBuildertable defaults (180 s idle, recording off, tile click/drag on) and the three obsolete methods left out;CometChatCallButtons.callSettingsBuilderis a function and Incoming/Outgoing Call overwrite the listener viasetCallEventListener; tray/tile/viewer/MediaViewer props, aliases and defaults;CometChatAttachmentVieweris exported but rendered by nothing, MediaViewer by composer + image/video bubbles; reaction component props (messageObjectvsmessage),CometChatQuickReactionsPropsnot at root; AI component props andgetSmartReplies()→Promise<Object>;ChatConfigurator.init/enable,DataSourceDecorator.getId()throws,ExtensionsDataSource.enable()gates onisExtensionEnabled,UIKitSettings.extensions; manifest declaresINTERNET/WRITE_EXTERNAL_STORAGE/READ_EXTERNAL_STORAGE;mentionAllLabel = "all"; Report hidden for own messages (!isSentByMe), agentic users andhideFlagMessageOption, absent from Pinned Messages; 18 locale bundles withen-US/en-GB/en-INaliased toen, and the "v5.5.0 and earlier" caveats are accurate — 5.5.2 switched to case-insensitive, region-then-base resolution; all SDK method names and return types in the seven contract tables,ThreadsRequestBuilder.setUid(), noisPinned()/isSaved()/isSystemPinned(),getConversationStarter()→Promise<Array<string>>. - Out of scope, as the PR body says: the five SDK pages with unescaped
|in table cells, and the three pre-existing broken links inmessage-structure-and-hierarchy.mdx/authentication-overview.mdx.
Skipped: on-device run of the end-of-call steps (no device in this environment; the PR notes the same).
jitvarpatil
left a comment
There was a problem hiding this comment.
✅ Approved via Review Buddy after an automated review (P0: 0 · P1: 0 · P2: 8).
Findings: #524 (review)
…all prop names — ENG-39154
Review Buddy points checked against UI Kit 5.5.2 (master-v5):
- events: add ccCallFailed ({ call } from Call Buttons/Call Logs,
{ error } from Incoming/Outgoing Call).
- ongoing-call: snippet uses leaveSession() (endSession() is deprecated
in Calls SDK 5.x); Style now notes the safe-area container and
background1 fill added in 5.5.2.
- components-overview: real prop names for Outgoing Call
(onEndCallButtonPressed), Call Buttons (hide*CallButton) and
Call Logs (callLogRequestBuilder).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he TODO — ENG-39154 Decision: the Report section keeps the Android image; no RN capture planned. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-39154 Checked against UI Kit 5.5.2 (master-v5), chat SDK 4.1.0, calls SDK 5.0.6. P0 - custom-message-types: extensions REPLACE the defaults; spread CometChatUIKit.defaultExtensions, add the missing imports + a warning. - users/groups: ccUserUnBlocked / ccGroupMemberUnBanned (source names). - compact-message-composer: document hideVoiceRecording (hideVoiceRecordingButton is never read; logged as kit defect D37). - message-list: CometChatReactions style is NOT merged over the theme; example now passes theme.messageBubbleReactionStyles. P1 - call-buttons: ccCallRejected fires only on local cancel. - events: add ccMessageError, ccMessagePinned/Unpinned/Saved/Unsaved, ccThreadSubscriptionChanged, openChat; message-list drops ccMessageDelivered (never emitted) and fixes the openChat payload. - ongoing-call: meeting-bubble join path (no ccCallEnded); why onError must be stable. - message-list: where each reaction component is styled; quickReactionStyle. P2 - ongoing-call: define the listener in the example; search: SearchStyle not exported; component-styling: receipts have no alignment; call-buttons: fix anchor; llms: getId super vs this.dataSource, peer deps re-verified on 5.5.2; pin/save Key Methods; guide-overview lists Custom Message Types; AI components fetch on mount, use a changing key. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@raj-dubey1 thanks for the thorough review. Everything is addressed in c033251, plus 1c0917d for
Could you take another look? |
Conflict in ui-kit/react-native/guide-overview.mdx: kept main's renamed formatter rows (Text Color, Custom Text Formatter, Text Formatters) and this branch's new Custom Message Types row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks for the fixes. Nearly everything from my review is addressed now. Two points are only partly fixed, so I'm leaving this as changes requested for now: 1. P0 #5:
2. Optional nits:
Once 1 and 2 are fixed, this is good to approve. |
…; events block matches table — ENG-39154 From raj-dubey1's follow-up on #524: - message-list: theme.messageBubbleReactionStyles is never set by the default theme; use messageListStyles.{outgoing,incoming}MessageBubbleStyles.reactionStyles (style.ts:593/389) and call useTheme() inside a component. - message-list: AI quick-reference events block drops ccMessageDelivered and gives openChat { user }, matching the table; listener example updated. - events: ccMessageError also fires when fetching stickers fails (CometChatStickerKeyboard/hooks.ts:50). - llms: async-storage Gradle note kept (the Chat SDK depends on it) and says so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@raj-dubey1 both are fixed in b94fb8a:
Nits: |
Description
Six changes to the React Native docs from the ENG-39154 triage, one commit each. Every claim below was checked against the kit and SDK source, and every changed code block was compiled.
1. Four pages imported names the kit does not export — ENG-39166 (
59bac322)Copied into a TypeScript project, each of these imports failed with
TS2305(no exported member).call-buttonsnew OutgoingCallConfiguration({...})outgoingCallConfigurationcompact-message-composerEnterKeyBehavior.SendMessageCometChatUiKitConstants.EnterKeyBehavior.SendMessage, which is already publiccompact-message-composerSingleLineMessageComposerConfigurationhideVoiceRecordingunder its main name,hideVoiceRecordingButton)component-styling<CometChatReceipt>CometChatConversationssearchimport { SearchStyle }CometChatSearchThe receipts example does not use
CometChatMessageListon purpose. Message bubbles pass their own receipt style, which wins the merge. Run against the kit's default theme and its real merge, a read receipt resolves to the override (#FFAB00) in Conversations but stays at the bubble default (#09C26F) in the message list.2. The events page listed names the kit never emits — ENG-39167 (
a0aae25a)A listener copied from the page silently never fired.
ccUserUnblocked→ccUserUnBlocked, andccGroupMemberUnbanned→ccGroupMemberUnBanned.ccLiveReactionremoved; the kit has no such event.on…callbacks (onIncomingCallAccepted,onCallInitiated, …) that are not UI Kit event names. It now lists the four call events the kit emits:ccCallAccepted,ccCallRejected,ccCallEnded,ccOutgoingCall. The kit also declaresccCallInitiated,ccOutgoingCallAcceptedandccOutgoingCallRejectedas listener keys, but nothing emits them, so outgoing accept/reject now points to the Chat SDK's call listener.{ call }.ccCallRejectedalso fires when the user cancels their own outgoing call, and oneccCallEndedpath sends nocall.ccActiveChatChangedmoved to message events: it is emitted withemitMessageEvent, so onlyaddMessageListenerreceives it.CometChatUIEventListenerheading named a symbol the kit does not have; it is now "UI Events".3. No documented way to undo a ban — ENG-39170 (
aaa21c0f)CometChatGroupMembersgives owners, admins and moderators a Ban option by default, but the UI Kit has no screen to list banned members or unban them, andguide-group-chatnever said so. The Chat SDK pagegroup-kick-ban-membersalready documents both, and the guide now points to it:hideBanMemberOption.4. The in-call screen had no page — ENG-39171 (
af864950)The kit exports
CometChatOngoingCall, the screen users see during a call, but the React Native v5 docs never had a page for it. Only the v4 page exists, and/ui-kit/react-native/ongoing-callredirects to the docs home. iOS and Vue have current Ongoing Call pages, so the new page follows the iOS structure (Usage, Customization, Common Patterns); Vue's is an older props-only page. It uses React Native code and documents only what the RN kit supports:sessionID,callSettingsBuilderandonError. There is nostyleprop and there are no view slots, and the component emits no UI events of its own.CallSettingsBuilderwhoseOngoingCallListenerends the session, the same stepsCometChatIncomingCalltakes. Incoming and Outgoing Call normally render it for you.CallSettingsBuildermethods and their defaults, taken from the Calls SDK typings. The three methods the SDK marks obsolete are left out.ccCallEnded, so it never fires for a call screen you render yourself.OngoingCallListeneron it, and they skip their default layout and audio-only settings.The page is also added to the nav after Outgoing Call, as on iOS, and to the Calling catalog in
components-overview.5. Seven SDK pages had no contract table — ENG-39176 (
f8dd9019)38 of the 58 React Native SDK pages carry an AI Integration Quick Reference contract table. These seven functional API pages did not, so return types, error behaviour and constraints had to be read out of
CometChat.d.ts:campaigns·upload-files·overview·pin-conversation·pin-message·save-message·thread-subscriptionTwo had no Quick Reference accordion at all; five had one holding only a code snippet. Those snippets are untouched — the table goes above them, as on 30 of the 38 pages that already had a table. Each table uses the nine rows every existing table uses, and the Constraints row carries the per-page facts that are easy to get wrong: pinning is a moderation action and a cap breach returns the ceiling in
errorParams.limit; saves are per-viewer and account-wide; a thread is identified by its parent message ID; an upload request covers one destination and one batch; card messages are receive-only.The 13 pages still without a table are conceptual and landing pages, where a method contract does not apply.
6. Integration pages repeated storage permissions the kit declares — ENG-39175 (
3eba5729)The Expo and React Native CLI integration pages told integrators to add
WRITE_EXTERNAL_STORAGEandREAD_EXTERNAL_STORAGEby hand. The UI Kit already declares both in its own manifest, so the instruction was redundant and taught an outdated practice:WRITE_EXTERNAL_STORAGEhas had no effect since Android 11, and Android 13 replacedREAD_EXTERNAL_STORAGEwith the granular media permissions.Both lines are gone from the two snippets, and each page now says the kit declares them, so nobody adds them back.
This does not change the permissions of a built app, and neither page claims it does: the kit's manifest still declares them and Android's manifest merger unions them in. Removing them for real is a kit change, tracked separately.
7. The tray components were undocumented — ENG-39173 (
75e8d6fe)The Message Composer page described the multi-attachment staging tray only as behaviour. Nothing said which components render it, what props they take, or that two of them are exported under a second name, so anyone replacing the tray had to read the kit source.
"The tray components" now documents them: an alias table (
CometChatAttachmentTray≡CometChatAttachmentPreview,CometChatAttachmentTile≡CometChatAttachmentPreviewItem— the ticket named five components, there are three), prop tables for the Tray, the Tile,CometChatAttachmentViewerandCometChatMediaViewer, and one compiled example.Two notes carry the facts that are easy to get wrong: these components exist only in the React Native UI Kit, and
CometChatMediaViewersupersedesCometChatAttachmentViewerfor the attachments of a sent message — the Viewer is still exported, but the composer and the image and video bubbles render MediaViewer.SelectedAttachment, the composer's staging model, is not exported, so the note and the example derive it withReact.ComponentPropsinstead of naming it.Related Issue(s)
{ ccCallAccepted: handleAccept }, never fires even with the right event name, because the kit dispatches by comparing the event name with the function's.name.onErrorfunction that changes between renders, such as an inline arrow, makesCometChatOngoingCallrequest a new call token and fall back to the loading spinner (reproduced in Jest). The page'sonErrorexample usesuseCallback.Type of Change
Checklist
Additional Information
How it was verified. Compile checks used TypeScript 6.0.3 in strict mode against UI Kit 5.4.0, Chat SDK 4.0.28 and Calls SDK 5.0.5. A control file with a deliberate type error was included to prove the checker ran.
user,chatUser,loggedIn). The receipts block was wrapped in a function because it starts atreturn, and the two alternative composer usages were compiled as separate statements.CometChat.CallListener's constructor takes...args: any[], so a misspelled handler still compiles. Its two handler names were checked against theCallListenerclass in the SDK'sCometChat.d.tsinstead.TS2305.CometChat.BannedMembersRequestBuilderandCometChat.unbanGroupMember(), which the guide now names, compile.ccUserUnblocked,ccGroupMemberUnbanned,ccLiveReaction,onIncomingCallAcceptedandonCallInitiatedare rejected, and so isccActiveChatChangedon the UI listener.CometChatUIEventHandlerin Jest.onErrorcodes, only the first render's settings being used, a plain settings object throwing, and the spinner color.@cometchat/chat-sdk-react-native4.1.0, the published latest, rather than the 4.0.28 harness the other sections used.CometChatnamespace, and all 40 type-level assertions pass: each "Primary output" return type, plus the negative claims —BaseMessagehasgetPinnedAt()andgetSavedAt()but noisPinned(),isSaved()orisSystemPinned();CometChathas noConversationListener;ThreadsRequestBuilderhassetUid(), notsetUID(). A control file and two deliberately wrong assertions fail, so the check is live.|instead of splitting the cell.v5.5.0declaresINTERNET,WRITE_EXTERNAL_STORAGEandREAD_EXTERNAL_STORAGE. Both edited snippets still parse — theapp.jsonblock as JSON, the manifest block as XML — and both pages render with the note and no storage permission left in any code block. No other v5 page mentions either permission; the v4 pages are untouched.CometChatAttachmentTile'sattachmentis the same type as one element of the Tray'sattachments, so a tile takes what the tray holds.SelectedAttachmentfrom the package fails withTS2305, which is why the note and the example derive it.onRetrymisspelled asonRetriesfails, a deliberately wrong required-props assertion fails, and a control file fails, so the check is live.visibledefaulting totrueonCometChatAttachmentViewer, andcanPreviewdefaulting to images and videos.Unrelated, not touched:
authentication-overview,receive-messages,retrieve-conversations,retrieve-groupsandretrieve-users. Each has an unescaped|inside a table cell — for examplePromise<CometChat.User | null>atauthentication-overview.mdx:16:104— which splits the cell and leaves the rest to be parsed as JSX. All five serve fine on the live site, and three of them are linked from the new tables in section 5. Escaping those pipes as\|, the way the new tables do, is the fix.components-overview#components, an anchor that page does not have.components-overviewlistsonClosePressforCometChatOutgoingCall. Kit 5.5.0 has no such prop; the prop isonEndCallButtonPressed.Screenshots (if applicable)
Text, table and new-page changes only; each page was verified by rendering it locally.
Also in this PR (added after review)
Each one checked against UI Kit 5.5.2 (
master-v5), chat SDK 4.1.0 and calls SDK 5.0.6:custom-message-types.mdx, new): five required overrides, verified inDataSourceDecorator.tsx/ChatConfigurator.ts:15-22.getIdthrows when missing or when it callssuper, andenable()skips the decorator silently on a duplicate id.extensionsreplacesdefaultExtensions(CometChatUIKit.ts:226).message-list.mdx):CometChatReactionsreadsstyledirectly, with nouseTheme().CometChatQuickReactionsmerges overtheme.quickReactionStyle.ai-features.mdx): both components fetch in auseEffectwith[]deps, so a changingkeyis needed to refetch.message-composer.mdx):buildGroupMentionItemreturnsnullwithout a group. Both props are set only insideif (!disableMentions).events.mdx): every row maps to an emit site in the kit.ccMessageDeliveredis declared but never emitted, so it is removed.🤖 Generated with Claude Code