Skip to main content

Documentation Index

Fetch the complete documentation index at: https://cometchat-22654f5b-react-uikit-v7.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

{
  "component": "CometChatGroupMembers",
  "package": "@cometchat/chat-uikit-react",
  "import": "import { CometChatGroupMembers } from \"@cometchat/chat-uikit-react\";",
  "cssImport": "import \"@cometchat/chat-uikit-react/css-variables.css\";",
  "description": "Scrollable list of members for a specific group with role-based actions like kick, ban, and scope change.",
  "cssRootClass": ".cometchat-group-members",
  "primaryOutput": {
    "prop": "onItemClick",
    "type": "(member: CometChat.GroupMember) => void"
  },
  "props": {
    "data": {
      "group": {
        "type": "CometChat.Group",
        "default": "none (required)",
        "note": "The group whose members to display"
      },
      "groupMemberRequestBuilder": {
        "type": "CometChat.GroupMembersRequestBuilder",
        "default": "SDK default (30 per page)",
        "note": "Pass the builder instance, not the result of .build()"
      },
      "searchRequestBuilder": {
        "type": "CometChat.GroupMembersRequestBuilder",
        "default": "undefined"
      },
      "searchKeyword": {
        "type": "string",
        "default": "undefined"
      }
    },
    "callbacks": {
      "onItemClick": "(member: CometChat.GroupMember) => void",
      "onSelect": "(member: CometChat.GroupMember, selected: boolean) => void",
      "onError": "((error: CometChat.CometChatException) => void) | null",
      "onEmpty": "() => void",
      "onBack": "() => void"
    },
    "visibility": {
      "hideUserStatus": { "type": "boolean", "default": false },
      "hideSearch": { "type": "boolean", "default": false },
      "hideKickMemberOption": { "type": "boolean", "default": false },
      "hideBanMemberOption": { "type": "boolean", "default": false },
      "hideScopeChangeOption": { "type": "boolean", "default": false },
      "showScrollbar": { "type": "boolean", "default": false }
    },
    "selection": {
      "selectionMode": {
        "type": "CometChatGroupMembersSelectionMode",
        "values": ["'none'", "'single'", "'multiple'"],
        "default": "'none'"
      }
    },
    "viewSlots": {
      "itemView": "(member: CometChat.GroupMember) => ReactNode",
      "leadingView": "(member: CometChat.GroupMember) => ReactNode",
      "titleView": "(member: CometChat.GroupMember) => ReactNode",
      "subtitleView": "(member: CometChat.GroupMember) => ReactNode",
      "trailingView": "(member: CometChat.GroupMember) => ReactNode",
      "headerView": "ReactNode",
      "loadingView": "ReactNode",
      "emptyView": "ReactNode",
      "errorView": "ReactNode",
      "options": "(member: CometChat.GroupMember) => CometChatGroupMemberOption[]"
    }
  },
  "events": [],
  "eventsReceived": [
    {
      "name": "ui:group/member-added",
      "payload": "{ group: CometChat.Group, members: CometChat.User[], messages: CometChat.BaseMessage[] }",
      "description": "Adds new members to the list"
    },
    {
      "name": "ui:group/member-kicked",
      "payload": "{ group: CometChat.Group, user: CometChat.User, message: CometChat.BaseMessage }",
      "description": "Removes the kicked member from the list"
    },
    {
      "name": "ui:group/member-banned",
      "payload": "{ group: CometChat.Group, user: CometChat.User, message: CometChat.BaseMessage }",
      "description": "Removes the banned member from the list"
    },
    {
      "name": "ui:group/member-scope-changed",
      "payload": "{ group: CometChat.Group, user: CometChat.User, newScope: string }",
      "description": "Updates the member's scope/role display"
    }
  ],
  "sdkListeners": [
    "onGroupMemberJoined",
    "onGroupMemberLeft",
    "onGroupMemberKicked",
    "onGroupMemberBanned",
    "onGroupMemberScopeChanged",
    "onMemberAddedToGroup"
  ],
  "types": {
    "CometChatGroupMemberOption": {
      "id": "string",
      "title": "string",
      "iconURL": "string | undefined",
      "onClick": "(member: CometChat.GroupMember) => void"
    },
    "CometChatGroupMembersSelectionMode": "'none' | 'single' | 'multiple'"
  }
}

Overview

CometChatGroupMembers is a list component that renders all members of a specific group. It provides role-based actions (kick, ban, scope change) for admins and moderators, and emits the selected CometChat.GroupMember via onItemClick. Use it inside group details panels or as a standalone member management view.
Live Preview — interact with the default group members list.Open in Storybook ↗
The component handles:
  • Paginated fetching with infinite scroll
  • Real-time membership updates (joins, leaves, kicks, bans, scope changes)
  • Search filtering
  • Role-based action menus (kick, ban, change scope)
  • Selection mode (single/multiple)

Usage

Flat API

import { CometChatGroupMembers } from "@cometchat/chat-uikit-react";

function MemberList({ group }: { group: CometChat.Group }) {
  return (
    <CometChatGroupMembers
      group={group}
      onItemClick={(member) => {
        console.log("Selected member:", member.getName());
      }}
    />
  );
}

Compound Composition

import { CometChatGroupMembers } from "@cometchat/chat-uikit-react";

function MemberList({ group }: { group: CometChat.Group }) {
  return (
    <CometChatGroupMembers.Root group={group} onItemClick={handleClick}>
      <CometChatGroupMembers.Header title="Members" onBack={goBack} />
      <CometChatGroupMembers.SearchBar placeholder="Search members..." />
      <CometChatGroupMembers.LoadingState />
      <CometChatGroupMembers.ErrorState />
      <CometChatGroupMembers.EmptyState>
        <p>No members found.</p>
      </CometChatGroupMembers.EmptyState>
      <CometChatGroupMembers.List />
    </CometChatGroupMembers.Root>
  );
}

Group Details Example

import { useState } from "react";
import { CometChat } from "@cometchat/chat-sdk-javascript";
import {
  CometChatGroupMembers,
  CometChatMessages,
} from "@cometchat/chat-uikit-react";

function GroupDetailsPanel({ group }: { group: CometChat.Group }) {
  const [selectedMember, setSelectedMember] = useState<
    CometChat.GroupMember | undefined
  >();

  return (
    <div style={{ display: "flex", height: "100vh" }}>
      <div style={{ width: 320 }}>
        <CometChatGroupMembers
          group={group}
          onItemClick={(member) => setSelectedMember(member)}
          onBack={() => navigateBack()}
        />
      </div>
      {selectedMember && (
        <div style={{ flex: 1 }}>
          {/* Show member profile or start DM */}
        </div>
      )}
    </div>
  );
}

Filtering

Pass a CometChat.GroupMembersRequestBuilder to groupMemberRequestBuilder to control which members load. Pass the builder instance — not the result of .build().
<CometChatGroupMembers
  group={group}
  groupMemberRequestBuilder={
    new CometChat.GroupMembersRequestBuilder(group.getGuid())
      .setLimit(15)
      .setScopes(["admin", "moderator"])
  }
/>
The component includes a built-in search bar. When the user types, it fetches matching members from the server. For custom search behavior, pass a searchRequestBuilder:
<CometChatGroupMembers
  group={group}
  searchRequestBuilder={
    new CometChat.GroupMembersRequestBuilder(group.getGuid())
      .setLimit(30)
      .setSearchKeyword("")
  }
/>

Filter Recipes

RecipeCode
Only adminsnew CometChat.GroupMembersRequestBuilder(guid).setScopes(["admin"])
Admins & moderatorsnew CometChat.GroupMembersRequestBuilder(guid).setScopes(["admin", "moderator"])
Limit page sizenew CometChat.GroupMembersRequestBuilder(guid).setLimit(10)

Actions and Events

Callback Props

PropSignatureFires when
onItemClick(member: CometChat.GroupMember) => voidUser clicks a member item
onSelect(member: CometChat.GroupMember, selected: boolean) => voidMember selected/deselected (selection mode)
onError((error: CometChat.CometChatException) => void) | nullSDK error occurs
onEmpty() => voidList is empty after initial fetch
onBack() => voidBack button is clicked

Events Emitted

This component does not emit any UI events directly. Kick, ban, and scope change actions are handled by internal action handlers that publish their own events.

Events Received

UI events this component subscribes to (published by other components):
EventPayloadBehavior
ui:group/member-added{ group, members, messages }Adds new members to the list
ui:group/member-kicked{ group, user, message }Removes the kicked member from the list
ui:group/member-banned{ group, user, message }Removes the banned member from the list
ui:group/member-scope-changed{ group, user, newScope }Updates the member’s scope/role display

SDK Listeners (Automatic)

These SDK listeners are attached internally. The component updates its state automatically — no manual subscription needed:
  • Groups: onGroupMemberJoined, onGroupMemberLeft, onGroupMemberKicked, onGroupMemberBanned, onGroupMemberScopeChanged, onMemberAddedToGroup

Customization

View Props

Use view props to replace sections of the default UI while keeping the component’s behavior intact:
<CometChatGroupMembers
  group={group}
  headerView={<MyCustomHeader />}
  itemView={(member) => <MyCustomMemberItem member={member} />}
  emptyView={<EmptyState />}
  loadingView={<Skeleton />}
  errorView={<ErrorBanner />}
/>
SlotSignatureReplaces
itemView(member) => ReactNodeEntire member row
leadingView(member) => ReactNodeAvatar section
titleView(member) => ReactNodeMember name
subtitleView(member) => ReactNodeStatus / role text
trailingView(member) => ReactNodeScope badge + action menu
headerViewReactNodeHeader area
loadingViewReactNodeLoading shimmer
emptyViewReactNodeEmpty state
errorViewReactNodeError state

Compound Composition

For full layout control, use sub-components. Omit any sub-component to hide it:
<CometChatGroupMembers.Root group={group} onItemClick={handleClick}>
  {/* No Header or SearchBar — they won't render */}
  <CometChatGroupMembers.List />
</CometChatGroupMembers.Root>
Available sub-components:
Sub-componentDescriptionPropsFlat API equivalent
RootContext provider and containerAll Root props + children
ListScrollable member listitemView, classNameitemView
ItemIndividual member rowleadingView, titleView, subtitleView, trailingView, classNamePer-item view props
HeaderHeader areatitle, childrenheaderView
SearchBarSearch inputplaceholder
EmptyStateEmpty statechildrenemptyView
ErrorStateError statechildrenerrorView
LoadingStateLoading shimmerchildrenloadingView

CSS Styling

Override design tokens on the component selector:
.cometchat-group-members {
  --cometchat-background-color-01: #1a1a2e;
  --cometchat-text-color-primary: #ffffff;
}

.cometchat-group-members__item-scope {
  color: var(--cometchat-primary-color);
  font-weight: 600;
}

Props

All props are optional unless marked Required.
View slot props (headerView, searchView, loadingView, emptyView, errorView, itemView, leadingView, titleView, subtitleView, trailingView) are convenience props available only on the flat API. In compound composition mode, use the corresponding sub-components directly.

group

Required. The group whose members to display.
TypeCometChat.Group
Default

groupMemberRequestBuilder

Custom request builder for fetching group members. Controls pagination, filtering, and sorting.
TypeCometChat.GroupMembersRequestBuilder
DefaultSDK default (limit 30)

searchRequestBuilder

Custom request builder used specifically when the user searches. Separate from the main builder.
TypeCometChat.GroupMembersRequestBuilder
Defaultundefined

searchKeyword

Initial search keyword to pre-filter members on mount.
Typestring
Defaultundefined

hideUserStatus

Hide the online/offline status indicator on member avatars.
Typeboolean
Defaultfalse

hideSearch

Hide the search bar entirely.
Typeboolean
Defaultfalse

hideKickMemberOption

Hide the “Kick Member” option from the action menu (even for admins/owners).
Typeboolean
Defaultfalse

hideBanMemberOption

Hide the “Ban Member” option from the action menu (even for admins/owners).
Typeboolean
Defaultfalse

hideScopeChangeOption

Hide the “Change Scope” option from the action menu (even for admins/owners).
Typeboolean
Defaultfalse

showScrollbar

Show the native scrollbar on the member list.
Typeboolean
Defaultfalse

selectionMode

Enable selection mode for single or multi-select operations.
Type'none' | 'single' | 'multiple'
Default'none'

options

Function that returns context menu options for each member item (shown on hover/swipe). Overrides the default kick/ban/scope options.
Type(member: CometChat.GroupMember) => CometChatGroupMemberOption[]
DefaultDefault options (kick, ban, change scope — based on logged-in user’s role)
<CometChatGroupMembers
  group={group}
  options={(member) => [
    {
      id: "message",
      title: "Message Privately",
      iconURL: messageIcon,
      onClick: (m) => openDirectMessage(m),
    },
    {
      id: "remove",
      title: "Remove",
      iconURL: removeIcon,
      onClick: (m) => kickMember(m),
    },
  ]}
/>

onItemClick

Callback when a member item is clicked.
Type(member: CometChat.GroupMember) => void
Defaultundefined

onSelect

Callback when a member is selected or deselected (only fires in selection mode).
Type(member: CometChat.GroupMember, selected: boolean) => void
Defaultundefined

onError

Callback when an SDK error occurs during fetch or real-time operations.
Type((error: CometChat.CometChatException) => void) | null
Defaultnull

onEmpty

Callback when the member list is empty after the initial fetch completes.
Type() => void
Defaultundefined

onBack

Callback when the back button in the header is clicked.
Type() => void
Defaultundefined

CSS Selectors

TargetSelector
Root container.cometchat-group-members
Header.cometchat-group-members__header
Search bar.cometchat-group-members__search-bar
List container.cometchat-group-members__list
Member item.cometchat-group-members__item
Scope badge.cometchat-group-members__item-scope
Empty state.cometchat-group-members__empty-state
Error state.cometchat-group-members__error-state
Loading state.cometchat-group-members__loading-state

Next Steps

Groups

Browse and select groups

Banned Members

View and unban banned group members

Add Members

Add new members to a group

Theming

Customize colors, fonts, and spacing