From d7e88a2fb1bfd82170861bfa6ba4a932d2f4b18c Mon Sep 17 00:00:00 2001
From: jojohoch <joachim.hoch@iqb.hu-berlin.de>
Date: Wed, 10 Nov 2021 09:48:50 +0100
Subject: [PATCH] Implement abstract class MediaPlayerElementComponent

AudioComponent and VideoComponent inherit from
MediaPlayerElementComponent to avoid duplicate code
---
 projects/common/element-components/audio.component.ts     | 8 +++-----
 projects/common/element-components/video.component.ts     | 8 +++-----
 .../common/media-player-element-component.directive.ts    | 8 ++++++++
 3 files changed, 14 insertions(+), 10 deletions(-)
 create mode 100644 projects/common/media-player-element-component.directive.ts

diff --git a/projects/common/element-components/audio.component.ts b/projects/common/element-components/audio.component.ts
index d07463380..582bdfa8e 100644
--- a/projects/common/element-components/audio.component.ts
+++ b/projects/common/element-components/audio.component.ts
@@ -1,7 +1,6 @@
-import { Component, EventEmitter, Output } from '@angular/core';
-import { ElementComponent } from '../element-component.directive';
+import { Component } from '@angular/core';
 import { AudioElement } from '../models/audio-element';
-import { ValueChangeElement } from '../models/uI-element';
+import { MediaPlayerElementComponent } from '../media-player-element-component.directive';
 
 @Component({
   selector: 'app-audio',
@@ -19,7 +18,6 @@ import { ValueChangeElement } from '../models/uI-element';
     </div>
   `
 })
-export class AudioComponent extends ElementComponent {
-  @Output() playbackTimeChanged = new EventEmitter<ValueChangeElement>();
+export class AudioComponent extends MediaPlayerElementComponent {
   elementModel!: AudioElement;
 }
diff --git a/projects/common/element-components/video.component.ts b/projects/common/element-components/video.component.ts
index 0398d550a..add8712dc 100644
--- a/projects/common/element-components/video.component.ts
+++ b/projects/common/element-components/video.component.ts
@@ -1,7 +1,6 @@
-import { Component, EventEmitter, Output } from '@angular/core';
-import { ElementComponent } from '../element-component.directive';
+import { Component } from '@angular/core';
 import { VideoElement } from '../models/video-element';
-import { ValueChangeElement } from '../models/uI-element';
+import { MediaPlayerElementComponent } from '../media-player-element-component.directive';
 
 @Component({
   selector: 'app-video',
@@ -22,7 +21,6 @@ import { ValueChangeElement } from '../models/uI-element';
   `,
   styles: ['.correct-position{ display: block; margin-top: -4px; }']
 })
-export class VideoComponent extends ElementComponent {
-  @Output() playbackTimeChanged = new EventEmitter<ValueChangeElement>();
+export class VideoComponent extends MediaPlayerElementComponent {
   elementModel!: VideoElement;
 }
diff --git a/projects/common/media-player-element-component.directive.ts b/projects/common/media-player-element-component.directive.ts
new file mode 100644
index 000000000..fd1875481
--- /dev/null
+++ b/projects/common/media-player-element-component.directive.ts
@@ -0,0 +1,8 @@
+import { Directive, EventEmitter, Output } from '@angular/core';
+import { ValueChangeElement } from './models/uI-element';
+import { ElementComponent } from './element-component.directive';
+
+@Directive()
+export abstract class MediaPlayerElementComponent extends ElementComponent {
+  @Output() playbackTimeChanged = new EventEmitter<ValueChangeElement>();
+}
-- 
GitLab