import { Component } from '@angular/core';
import { CometChat } from '@cometchat/chat-sdk-javascript';
import { CometChatReactionListComponent } from '@cometchat/chat-uikit-angular';
@Component({
selector: 'app-custom-reaction-container',
standalone: true,
imports: [CometChatReactionListComponent],
template: `
<div class="custom-reaction-container">
<!-- Custom Header -->
<div class="custom-reaction-container__header">
<span class="custom-reaction-container__icon">💬</span>
<h3 class="custom-reaction-container__title">
{{ 'message_bubble_reactions' | translate }}
</h3>
<span class="custom-reaction-container__count">
{{ getTotalReactionCount() }}
</span>
</div>
<!-- Reaction List -->
<div class="custom-reaction-container__content">
<cometchat-reaction-list
[message]="message"
(itemClick)="onItemClick($event)">
</cometchat-reaction-list>
</div>
<!-- Custom Footer -->
<div class="custom-reaction-container__footer">
<button
class="custom-reaction-container__add-btn"
(click)="onAddReaction()">
{{ 'reaction_list_add' | translate }}
</button>
</div>
</div>
`,
styles: [`
.custom-reaction-container {
display: flex;
flex-direction: column;
background: var(--cometchat-background-color-01);
border-radius: var(--cometchat-radius-4);
overflow: hidden;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
}
.custom-reaction-container__header {
display: flex;
align-items: center;
gap: var(--cometchat-spacing-2);
padding: var(--cometchat-spacing-4);
background: var(--cometchat-extended-primary-color-50);
border-bottom: 1px solid var(--cometchat-border-color-light);
}
.custom-reaction-container__icon {
font-size: 20px;
}
.custom-reaction-container__title {
font: var(--cometchat-font-heading4-bold);
color: var(--cometchat-text-color-primary);
margin: 0;
flex: 1;
}
.custom-reaction-container__count {
font: var(--cometchat-font-body-medium);
color: var(--cometchat-primary-color);
background: var(--cometchat-background-color-01);
padding: var(--cometchat-spacing-1) var(--cometchat-spacing-3);
border-radius: var(--cometchat-radius-max);
}
.custom-reaction-container__content {
flex: 1;
overflow: hidden;
}
.custom-reaction-container__footer {
padding: var(--cometchat-spacing-3) var(--cometchat-spacing-4);
border-top: 1px solid var(--cometchat-border-color-light);
}
.custom-reaction-container__add-btn {
width: 100%;
padding: var(--cometchat-spacing-3);
background: var(--cometchat-primary-color);
color: var(--cometchat-static-white);
border: none;
border-radius: var(--cometchat-radius-2);
font: var(--cometchat-font-button-medium);
cursor: pointer;
transition: background-color 0.2s ease;
}
.custom-reaction-container__add-btn:hover {
background: var(--cometchat-extended-primary-color-700);
}
.custom-reaction-container__add-btn:focus {
outline: 2px solid var(--cometchat-primary-color);
outline-offset: 2px;
}
`]
})
export class CustomReactionContainerComponent {
message!: CometChat.BaseMessage;
getTotalReactionCount(): number {
const reactions = this.message.getReactions() || [];
return reactions.reduce((total, r) => total + r.getCount(), 0);
}
onItemClick(event: { reaction: CometChat.Reaction; message: CometChat.BaseMessage }): void {
console.log('Reaction clicked:', event);
}
onAddReaction(): void {
console.log('Add reaction clicked');
// Open emoji picker
}
}