openvidu-components: Added toolbar additional buttons directive

Allowed added additional buttons in toolbar component without redefine it
pull/707/head
csantosm 2022-03-10 11:42:48 +01:00
parent e11af2ebd7
commit 115e9131d0
7 changed files with 47 additions and 7 deletions

View File

@ -18,7 +18,11 @@
max-height: 100% !important;
}
#media-buttons-container > *, ::ng-deep #media-buttons-container > * {
#media-buttons-container > button,
::ng-deep #media-buttons-container > button,
#media-buttons-container:not(#media-buttons-container > button) button,
/* Applying css for external additional buttons*/
::ng-deep #media-buttons-container:not(#media-buttons-container > button) button {
width: 40px;
height: 40px;
background-color: var(--ov-secondary-color);

View File

@ -55,8 +55,10 @@
<mat-icon *ngIf="!isFullscreenActive" matTooltip="Fullscreen">fullscreen</mat-icon>
</button>
<!-- Custom toolbar buttons -->
<ng-content select="[toolbar-btn]"></ng-content>
<!-- External additional buttons -->
<ng-container *ngIf="toolbarAdditionalButtonsTemplate">
<ng-container *ngTemplateOutlet="toolbarAdditionalButtonsTemplate"></ng-container>
</ng-container>
<!-- Leave session button -->
<button mat-icon-button *ngIf="showLeaveButton" (click)="leaveSession()" id="leave-btn">

View File

@ -27,6 +27,7 @@ import { ChatMessage } from '../../models/chat.model';
import { ParticipantService } from '../../services/participant/participant.service';
import { MenuType } from '../../models/menu.model';
import { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';
import { ToolbarAdditionalButtonsDirective } from '../../directives/template/openvidu-angular.directive';
@Component({
selector: 'ov-toolbar',
@ -35,7 +36,17 @@ import { OpenViduAngularConfigService } from '../../services/config/openvidu-ang
changeDetection: ChangeDetectionStrategy.OnPush
})
export class ToolbarComponent implements OnInit, OnDestroy {
@ContentChild('centeredButtons', { read: TemplateRef }) centeredButtonsTemplate: TemplateRef<any>;
@ContentChild('toolbarAdditionalButtons', { read: TemplateRef }) toolbarAdditionalButtonsTemplate: TemplateRef<any>;
@ContentChild(ToolbarAdditionalButtonsDirective)
set externalAdditionalButtons(externalAdditionalButtons: ToolbarAdditionalButtonsDirective) {
// This directive will has value only when ADDITIONAL BUTTONS component tagget with '*ovToolbarAdditionalButtons' directive
// is inside of the TOOLBAR component tagged with '*ovToolbar' directive
if (externalAdditionalButtons) {
this.toolbarAdditionalButtonsTemplate = externalAdditionalButtons.template;
}
}
@Output() onLeaveButtonClicked = new EventEmitter<any>();
@Output() onCameraButtonClicked = new EventEmitter<any>();
@Output() onMicrophoneButtonClicked = new EventEmitter<any>();

View File

@ -46,7 +46,13 @@
(onFullscreenButtonClicked)="onFullscreenButtonClicked()"
(onParticipantsPanelButtonClicked)="onParticipantsPanelButtonClicked()"
(onChatPanelButtonClicked)="onChatPanelButtonClicked()"
></ov-toolbar>
>
<ng-template #toolbarAdditionalButtons>
<ng-container *ngTemplateOutlet="openviduAngularToolbarAdditionalButtonsTemplate"></ng-container>
</ng-template>
</ov-toolbar>
</ng-template>
<ng-template #defaultPanel>

View File

@ -6,6 +6,7 @@ import {
ParticipantPanelItemDirective,
ParticipantsPanelDirective,
StreamDirective,
ToolbarAdditionalButtonsDirective,
ToolbarDirective
} from '../../directives/template/openvidu-angular.directive';
import { ILogger } from '../../models/logger.model';
@ -19,6 +20,7 @@ import { LoggerService } from '../../services/logger/logger.service';
export class VideoconferenceComponent implements OnInit, AfterViewInit {
// *** Toolbar ***
@ContentChild(ToolbarDirective) externalToolbar: ToolbarDirective;
@ContentChild(ToolbarAdditionalButtonsDirective) externalToolbarAdditionalButtons: ToolbarAdditionalButtonsDirective;
// *** Panels ***
@ContentChild(PanelDirective) externalPanel: PanelDirective;
@ -39,6 +41,7 @@ export class VideoconferenceComponent implements OnInit, AfterViewInit {
@ViewChild('defaultStream', { static: false, read: TemplateRef }) defaultStreamTemplate: TemplateRef<any>;
openviduAngularToolbarTemplate: TemplateRef<any>;
openviduAngularToolbarAdditionalButtonsTemplate: TemplateRef<any>;
openviduAngularPanelTemplate: TemplateRef<any>;
openviduAngularChatPanelTemplate: TemplateRef<any>;
openviduAngularParticipantsPanelTemplate: TemplateRef<any>;
@ -106,6 +109,10 @@ export class VideoconferenceComponent implements OnInit, AfterViewInit {
this.openviduAngularToolbarTemplate = this.externalToolbar.template;
this.log.d('Setting EXTERNAL TOOLBAR');
} else {
if (this.externalToolbarAdditionalButtons) {
this.log.d('Setting EXTERNAL TOOLBAR ADDITIONAL BUTTONS', this.externalToolbarAdditionalButtons.template);
this.openviduAngularToolbarAdditionalButtonsTemplate = this.externalToolbarAdditionalButtons.template;
}
this.openviduAngularToolbarTemplate = this.defaultToolbarTemplate;
this.log.d('Setting DEFAULT TOOLBAR');
}

View File

@ -6,6 +6,7 @@ import {
ParticipantPanelItemDirective,
ParticipantsPanelDirective,
StreamDirective,
ToolbarAdditionalButtonsDirective,
ToolbarDirective
} from './openvidu-angular.directive';
@ -17,7 +18,8 @@ import {
ParticipantPanelItemDirective,
ParticipantsPanelDirective,
StreamDirective,
ToolbarDirective
ToolbarDirective,
ToolbarAdditionalButtonsDirective
],
exports: [
ChatPanelDirective,
@ -26,7 +28,8 @@ import {
ParticipantPanelItemDirective,
ParticipantsPanelDirective,
StreamDirective,
ToolbarDirective
ToolbarDirective,
ToolbarAdditionalButtonsDirective
]
})
export class OpenViduAngularDirectiveModule {}

View File

@ -7,6 +7,13 @@ export class ToolbarDirective {
constructor(public template: TemplateRef<any>, public viewContainer: ViewContainerRef) {}
}
@Directive({
selector: '[ovToolbarAdditionalButtons]'
})
export class ToolbarAdditionalButtonsDirective {
constructor(public template: TemplateRef<any>, public viewContainer: ViewContainerRef) {}
}
@Directive({
selector: '[ovPanel]'
})