Skip to main content

Overview

The CometChatGroupItem component renders a single group entry within a list. It displays the group’s icon/avatar, name, type indicator (public, private, password-protected), and member count. The component supports custom templates for all visual sections, integrates a context menu for group-specific actions, and provides full keyboard accessibility with ARIA support.

Key Features

  • State Management: Active, selected, and focused states with distinct visual styling
  • Group Avatar: Displays the group icon with a group type indicator badge
  • Member Count: Shows the localized member count below the group name
  • Custom Templates: Template projection for leading, title, subtitle, and trailing sections
  • Context Menu: Configurable context menu options on hover or right-click
  • Keyboard Accessibility: Full keyboard support with Enter, Space, and Shift+F10 shortcuts
  • Global Config Priority: Supports a three-tier priority system (Input > GlobalConfig > Default)
Live Preview — default group item preview. Open in Storybook ↗

Basic Usage

import { Component } from '@angular/core';
import { CometChat } from '@cometchat/chat-sdk-javascript';
import { CometChatGroupItemComponent } from '@cometchat/chat-uikit-angular';

@Component({
  selector: 'app-group-item-demo',
  standalone: true,
  imports: [CometChatGroupItemComponent],
  template: `
    <cometchat-group-item
      [group]="group"
      [isActive]="false"
      (itemClick)="onItemClick($event)"
    ></cometchat-group-item>
  `
})
export class GroupItemDemoComponent {
  group!: CometChat.Group;

  onItemClick(group: CometChat.Group): void {
    console.log('Group clicked:', group.getName());
  }
}

Properties

PropertyTypeDefaultDescription
groupCometChat.GrouprequiredThe group object to render. Primary data source for the component.
isActivebooleanfalseWhether this group item is currently active/selected for viewing. Applies active styling.
isSelectedbooleanfalseWhether this group item is selected in selection mode. Shows selection indicator.
isFocusedbooleanfalseWhether this group item currently has keyboard focus. Applies focus styling.
tabIndexnumber-1The tabindex for roving tabindex pattern. Only the focused item should have 0.
hideGroupTypebooleanfalseWhether to hide the group type indicator (public, private, password). Supports global config override.
disableDefaultContextMenubooleantrueWhether to disable the browser’s default context menu on right-click/long-press.
contextMenuOptionsCometChatOption[]undefinedOptions for the context menu displayed on hover/right-click.
leadingViewTemplateRef<{ $implicit: CometChat.Group }>undefinedCustom template for the leading section (icon/avatar area).
titleViewTemplateRef<{ $implicit: CometChat.Group }>undefinedCustom template for the title section.
subtitleViewTemplateRef<{ $implicit: CometChat.Group }>undefinedCustom template for the subtitle section.
trailingViewTemplateRef<{ $implicit: CometChat.Group }>undefinedCustom template for the trailing section.

Events

EventPayload TypeDescription
itemClickCometChat.GroupEmitted when the group item is clicked or activated via keyboard.
itemSelect{ group: CometChat.Group; selected: boolean }Emitted when the group is selected/deselected in selection mode.
contextMenuOpenCometChat.GroupEmitted when the context menu is opened.
contextMenuOptionClick{ option: CometChatOption; group: CometChat.Group }Emitted when a context menu option is clicked.
itemFocusvoidEmitted when the item’s inner container receives native focus. Used by the parent list for roving tabindex management.

Customization

CSS Variable Overrides

The component uses CometChat CSS variables for theming. Override them on the host element or a parent wrapper:
cometchat-group-item {
  --cometchat-background-color-01: #ffffff;
  --cometchat-background-color-03: #e8e8e8;
  --cometchat-text-color-primary: #141414;
  --cometchat-text-color-secondary: #727272;
  --cometchat-primary-color: #6852D6;
  --cometchat-border-color-light: #e8e8e8;
}

Custom Templates

Provide custom templates via inputs to override any visual section:
<cometchat-group-item
  [group]="group"
  [subtitleView]="customSubtitle"
  [trailingView]="customTrailing"
>
  <ng-template #customSubtitle let-group>
    <span class="member-count">
      {{ group.getMembersCount() }} members
    </span>
  </ng-template>

  <ng-template #customTrailing let-group>
    <button (click)="joinGroup(group); $event.stopPropagation()">
      Join
    </button>
  </ng-template>
</cometchat-group-item>

Accessibility

Keyboard Navigation

KeyAction
EnterActivate the group item (emits itemClick)
SpaceActivate the group item (emits itemClick)
Shift + F10Open the context menu
ContextMenuOpen the context menu

ARIA Attributes

  • role="option" on the item container
  • aria-selected reflects the current selection state
  • aria-label combines the group name, type, and member count for screen readers
  • Proper tabindex management via roving tabindex pattern

Focus Management

  • Visible focus indicator meeting WCAG contrast requirements
  • Mouse clicks prevent focus outline (focus ring only appears for keyboard navigation)
  • Roving tabindex pattern for efficient list navigation
  • itemFocus output enables parent list to track focus position