/* eslint-disable @typescript-eslint/member-ordering */ import { Component, inject, input } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormsModule } from '@angular/forms'; import { NgIcon, provideIcons } from '@ng-icons/core'; import { Store } from '@ngrx/store'; import { lucideUserX, lucideBan } from '@ng-icons/lucide'; import { Room, User } from '../../../../core/models'; import { UsersActions } from '../../../../store/users/users.actions'; import { WebRTCService } from '../../../../core/services/webrtc.service'; import { selectCurrentUser, selectOnlineUsers } from '../../../../store/users/users.selectors'; import { UserAvatarComponent } from '../../../../shared'; @Component({ selector: 'app-members-settings', standalone: true, imports: [CommonModule, FormsModule, NgIcon, UserAvatarComponent], viewProviders: [ provideIcons({ lucideUserX, lucideBan }) ], templateUrl: './members-settings.component.html' }) export class MembersSettingsComponent { private store = inject(Store); private webrtcService = inject(WebRTCService); /** The currently selected server, passed from the parent. */ server = input(null); /** Whether the current user is admin of this server. */ isAdmin = input(false); currentUser = this.store.selectSignal(selectCurrentUser); onlineUsers = this.store.selectSignal(selectOnlineUsers); membersFiltered(): User[] { const me = this.currentUser(); return this.onlineUsers().filter((user) => user.id !== me?.id && user.oderId !== me?.oderId); } changeRole(user: User, role: 'admin' | 'moderator' | 'member'): void { this.store.dispatch(UsersActions.updateUserRole({ userId: user.id, role })); this.webrtcService.broadcastMessage({ type: 'role-change', targetUserId: user.id, role }); } kickMember(user: User): void { this.store.dispatch(UsersActions.kickUser({ userId: user.id })); this.webrtcService.broadcastMessage({ type: 'kick', targetUserId: user.id, kickedBy: this.currentUser()?.id }); } banMember(user: User): void { this.store.dispatch(UsersActions.banUser({ userId: user.id })); this.webrtcService.broadcastMessage({ type: 'ban', targetUserId: user.id, bannedBy: this.currentUser()?.id }); } }