frontend: add copy links functionality for moderator and publisher in video room

This commit is contained in:
Carlos Santos 2025-07-03 13:18:12 +02:00
parent 5a6d17d61a
commit b968a9cdd5
2 changed files with 39 additions and 2 deletions

View File

@ -135,6 +135,29 @@
> >
@if (features().canModerateRoom) { @if (features().canModerateRoom) {
<div *ovToolbarAdditionalButtons> <div *ovToolbarAdditionalButtons>
<!-- Copy Links Button -->
<button
id="copy-links-btn"
mat-icon-button
[matMenuTriggerFor]="linksMenu"
matTooltip="Copy meeting links"
[disableRipple]="true"
class="copy-links-btn"
>
<mat-icon>link</mat-icon>
</button>
<mat-menu #linksMenu="matMenu">
<button mat-menu-item (click)="copyModeratorLink()" id="copy-moderator-link">
<mat-icon>content_copy</mat-icon>
<span>Copy Moderator Link</span>
</button>
<button mat-menu-item (click)="copyPublisherLink()" id="copy-publisher-link">
<mat-icon>content_copy</mat-icon>
<span>Copy Publisher Link</span>
</button>
</mat-menu>
<!-- Leave Button -->
<button <button
id="leave-btn" id="leave-btn"
mat-icon-button mat-icon-button
@ -160,7 +183,7 @@
<!-- Participant Panel Item Elements --> <!-- Participant Panel Item Elements -->
<div *ovParticipantPanelItemElements="let participant"> <div *ovParticipantPanelItemElements="let participant">
<!-- Leave Button for Local Participant --> <!-- Kick participant -->
@if (!participant.isLocal) { @if (!participant.isLocal) {
<button <button
mat-icon-button mat-icon-button

View File

@ -1,3 +1,4 @@
import { Clipboard } from '@angular/cdk/clipboard';
import { Component, OnDestroy, OnInit, Signal } from '@angular/core'; import { Component, OnDestroy, OnInit, Signal } from '@angular/core';
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
import { MatButtonModule, MatIconButton } from '@angular/material/button'; import { MatButtonModule, MatIconButton } from '@angular/material/button';
@ -81,7 +82,8 @@ export class VideoRoomComponent implements OnInit, OnDestroy {
protected participantService: ParticipantTokenService, protected participantService: ParticipantTokenService,
protected wcManagerService: WebComponentManagerService, protected wcManagerService: WebComponentManagerService,
protected sessionStorageService: SessionStorageService, protected sessionStorageService: SessionStorageService,
protected featureConfService: FeatureConfigurationService protected featureConfService: FeatureConfigurationService,
protected clipboard: Clipboard
) { ) {
this.features = this.featureConfService.features; this.features = this.featureConfService.features;
} }
@ -150,6 +152,18 @@ export class VideoRoomComponent implements OnInit, OnDestroy {
await this.roomService.kickParticipant(this.roomId, participant.identity); await this.roomService.kickParticipant(this.roomId, participant.identity);
} }
// TODO: Improve this method for avoiding rest requests
async copyModeratorLink() {
const room = await this.roomService.getRoom(this.roomId);
this.clipboard.copy(room.moderatorRoomUrl);
}
// TODO: Improve this method for avoiding rest requests
async copyPublisherLink() {
const room = await this.roomService.getRoom(this.roomId);
this.clipboard.copy(room.publisherRoomUrl);
}
/** /**
* Initializes the participant name in the form control. * Initializes the participant name in the form control.
* *