Skip to content
Snippets Groups Projects
Commit fd48eb85 authored by jojohoch's avatar jojohoch
Browse files

[player] Replace IntersectionService with IntersectionDetector class

parent 7f1184be
No related branches found
No related tags found
No related merge requests found
import { import { EventEmitter } from '@angular/core';
EventEmitter, Inject, Injectable, Output
} from '@angular/core';
import { DOCUMENT } from '@angular/common';
@Injectable({ export class IntersectionDetector {
providedIn: 'root'
})
export class IntersectionService {
intersectionObserver!: IntersectionObserver; intersectionObserver!: IntersectionObserver;
elements: { id: string, element: Element }[] = []; elements: { id: string, element: Element }[] = [];
@Output() intersecting = new EventEmitter<string>(); root!: Document;
intersecting = new EventEmitter<string>();
constructor(@Inject(DOCUMENT) private document: Document) { constructor(root: Document) {
this.root = root;
this.initIntersectionObserver(); this.initIntersectionObserver();
} }
...@@ -24,7 +20,7 @@ export class IntersectionService { ...@@ -24,7 +20,7 @@ export class IntersectionService {
} }
}); });
}, { }, {
root: document, root: this.root,
rootMargin: '0px 0px 0px 0px' rootMargin: '0px 0px 0px 0px'
} }
); );
...@@ -39,7 +35,6 @@ export class IntersectionService { ...@@ -39,7 +35,6 @@ export class IntersectionService {
const intersectedElementIndex = this.elements.findIndex(e => e.element === element); const intersectedElementIndex = this.elements.findIndex(e => e.element === element);
if (intersectedElementIndex > -1) { if (intersectedElementIndex > -1) {
const intersectedElement = this.elements[intersectedElementIndex]; const intersectedElement = this.elements[intersectedElementIndex];
this.intersecting.emit(intersectedElement.id);
this.intersectionObserver.unobserve(intersectedElement.element); this.intersectionObserver.unobserve(intersectedElement.element);
this.elements.splice(intersectedElementIndex, 1); this.elements.splice(intersectedElementIndex, 1);
} }
......
import { Injectable } from '@angular/core'; import { Inject, Injectable } from '@angular/core';
import { Observable, Subject } from 'rxjs'; import { Observable, Subject } from 'rxjs';
import { DOCUMENT } from '@angular/common';
import { import {
StatusChangeElement, StatusChangeElement,
UnitStateElementCode, UnitStateElementCode,
...@@ -12,7 +13,7 @@ import { ...@@ -12,7 +13,7 @@ import {
import { TextElement } from '../../../../common/models/text-element'; import { TextElement } from '../../../../common/models/text-element';
import { VideoElement } from '../../../../common/models/video-element'; import { VideoElement } from '../../../../common/models/video-element';
import { AudioElement } from '../../../../common/models/audio-element'; import { AudioElement } from '../../../../common/models/audio-element';
import { IntersectionService } from './intersection.service'; import { IntersectionDetector } from '../classes/intersection-detector';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
...@@ -20,9 +21,12 @@ import { IntersectionService } from './intersection.service'; ...@@ -20,9 +21,12 @@ import { IntersectionService } from './intersection.service';
export class UnitStateService { export class UnitStateService {
private _presentedPageAdded = new Subject<number>(); private _presentedPageAdded = new Subject<number>();
private _unitStateElementCodeChanged = new Subject<UnitStateElementCode>(); private _unitStateElementCodeChanged = new Subject<UnitStateElementCode>();
private intersectionDetector!: IntersectionDetector;
unitStateElementCodes!: UnitStateElementCode[]; unitStateElementCodes!: UnitStateElementCode[];
constructor(private intersectionService: IntersectionService) {} constructor(@Inject(DOCUMENT) private document: Document) {
this.intersectionDetector = new IntersectionDetector(document);
}
private getUnitStateElement(id: string): UnitStateElementCode | undefined { private getUnitStateElement(id: string): UnitStateElementCode | undefined {
return this.unitStateElementCodes return this.unitStateElementCodes
...@@ -58,8 +62,8 @@ export class UnitStateService { ...@@ -58,8 +62,8 @@ export class UnitStateService {
registerElement(elementModel: UIElement, element: Element): void { registerElement(elementModel: UIElement, element: Element): void {
this.initUnitStateValue(elementModel); this.initUnitStateValue(elementModel);
this.intersectionService.observe(elementModel.id, element); this.intersectionDetector.observe(elementModel.id, element);
this.intersectionService.intersecting this.intersectionDetector.intersecting
.subscribe((id: string) => { .subscribe((id: string) => {
this.changeElementStatus({ id: id, status: 'DISPLAYED' }); this.changeElementStatus({ id: id, status: 'DISPLAYED' });
}); });
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment