1- import { Component , Inject , Input , OnDestroy , OnInit , PLATFORM_ID , ViewEncapsulation } from '@angular/core' ;
1+ import {
2+ Component ,
3+ HostListener ,
4+ Inject ,
5+ Input ,
6+ OnDestroy ,
7+ OnInit ,
8+ PLATFORM_ID ,
9+ ViewChild ,
10+ ViewEncapsulation
11+ } from '@angular/core' ;
212import { DOCUMENT , isPlatformBrowser } from '@angular/common' ;
313
414import { BehaviorSubject , Observable } from 'rxjs' ;
515
616import { MediaViewerItem } from '../../core/shared/media-viewer-item.model' ;
717import { VideojsService } from './services/videojs.service' ;
18+ import { hasValue } from '../empty.util' ;
819
920@Component ( {
1021 selector : 'ds-media-player' ,
@@ -24,6 +35,17 @@ export class MediaPlayerComponent implements OnInit, OnDestroy {
2435 */
2536 @Input ( ) startUUID : string ;
2637
38+ /**
39+ * A reference to the video player container
40+ */
41+ @ViewChild ( 'videoContainerRef' , { static : false } ) videoContainerRef ;
42+
43+ /**
44+ * A reference to the video playlist container
45+ */
46+ @ViewChild ( 'playlistContainerRef' , { static : false } ) playlistContainerRef ;
47+
48+
2749 /**
2850 * A boolean representing whether audio player is initialized or not
2951 */
@@ -103,15 +125,15 @@ export class MediaPlayerComponent implements OnInit, OnDestroy {
103125 this . isVideo$ . next ( this . mediaIsVideo ( item ) ) ;
104126 if ( this . isVideo$ . value ) {
105127 if ( this . isVideoPlayerInitialized$ . value ) {
106- this . changePlayingItem ( item ) ;
128+ this . changePlayingItem ( ) ;
107129 } else {
108- this . initPlayer ( item ) ;
130+ this . initPlayer ( ) ;
109131 }
110132 } else {
111133 if ( this . isAudioPlayerInitialized$ . value ) {
112- this . changePlayingItem ( item ) ;
134+ this . changePlayingItem ( ) ;
113135 } else {
114- this . initPlayer ( item ) ;
136+ this . initPlayer ( ) ;
115137 }
116138 }
117139 }
@@ -125,13 +147,20 @@ export class MediaPlayerComponent implements OnInit, OnDestroy {
125147 }
126148 }
127149
150+ /**
151+ * Listen to window resize to adapt playlist size based on video size
152+ */
153+ @HostListener ( 'window:resize' )
154+ onResize ( ) : void {
155+ this . resizeMediaPlaylist ( ) ;
156+ }
157+
128158 /**
129159 * Init videojs player with the given item as source
130160 *
131- * @param item
132161 * @private
133162 */
134- private initPlayer ( item : MediaViewerItem ) : void {
163+ private initPlayer ( ) : void {
135164 if ( this . isVideo$ . value ) {
136165 this . isVideoPlayerInitialized$ . next ( true ) ;
137166 // stop audio player when switching from audio to video
@@ -141,6 +170,7 @@ export class MediaPlayerComponent implements OnInit, OnDestroy {
141170 this . _document . getElementById ( 'video_player' ) ,
142171 this . currentItem$ ?. value
143172 ) ;
173+ this . resizeMediaPlaylist ( ) ;
144174 } , 100 ) ;
145175
146176 } else {
@@ -152,6 +182,7 @@ export class MediaPlayerComponent implements OnInit, OnDestroy {
152182 this . _document . getElementById ( 'audio_player' ) ,
153183 this . currentItem$ ?. value
154184 ) ;
185+ this . resizeMediaPlaylist ( ) ;
155186 } , 100 ) ;
156187
157188 }
@@ -165,10 +196,9 @@ export class MediaPlayerComponent implements OnInit, OnDestroy {
165196 /**
166197 * Change the source according to the given item
167198 *
168- * @param item
169199 * @private
170200 */
171- private changePlayingItem ( item : MediaViewerItem ) {
201+ private changePlayingItem ( ) {
172202 if ( this . isVideo$ . value ) {
173203 // stop audio player when switching from audio to video
174204 this . disposeAudioPlayer ( ) ;
@@ -233,4 +263,13 @@ export class MediaPlayerComponent implements OnInit, OnDestroy {
233263 this . isVideoPlayerInitialized$ . next ( false ) ;
234264 }
235265 }
266+
267+ /**
268+ * Resize playlist container
269+ */
270+ private resizeMediaPlaylist ( ) : void {
271+ if ( hasValue ( this . playlistContainerRef ?. nativeElement ) ) {
272+ this . playlistContainerRef . nativeElement . style . height = `${ this . videoContainerRef . nativeElement . getBoundingClientRect ( ) . height } px` ;
273+ }
274+ }
236275}
0 commit comments