@hmcts/media-viewer
Version:
98 lines • 18.4 kB
JavaScript
import { Injectable } from '@angular/core';
import { select } from '@ngrx/store';
import * as fromIcpActions from '../store/actions/icp.actions';
import * as fromIcpSelectors from '../store/selectors/icp.selectors';
import * as fromDocument from '../store/selectors/document.selectors';
import { filter, take } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "../toolbar/toolbar-event.service";
import * as i2 from "../viewers/viewer-event.service";
import * as i3 from "./icp-update.service";
import * as i4 from "./icp-presenter.service";
import * as i5 from "./icp-follower.service";
import * as i6 from "@ngrx/store";
import * as i7 from "../toolbar/icp-event.service";
export class IcpService {
constructor(toolbarEvents, viewerEvents, socketService, presenterSubscriptions, followerSubscriptions, store, icpEventService) {
this.toolbarEvents = toolbarEvents;
this.viewerEvents = viewerEvents;
this.socketService = socketService;
this.presenterSubscriptions = presenterSubscriptions;
this.followerSubscriptions = followerSubscriptions;
this.store = store;
this.icpEventService = icpEventService;
this.subscription = this.store.pipe(select(fromIcpSelectors.getCaseId), filter(value => !!value)).subscribe(caseId => {
this.caseId = caseId;
});
this.subscription.add(this.store.pipe(select(fromDocument.getDocumentId)).subscribe(docId => this.documentId = docId));
this.subscription.add(this.icpEventService.sessionLaunch.subscribe(() => {
if (this.caseId && this.documentId) {
this.launchSession();
}
}));
}
ngOnDestroy() {
this.unsubscribeSession();
this.subscription.unsubscribe();
}
launchSession() {
this.store.dispatch(new fromIcpActions.LoadIcpSession({ caseId: this.caseId, documentId: this.documentId }));
this.subscription.add(this.store.pipe(select(fromIcpSelectors.getIcpSession), filter(value => !!value && Object.keys(value).length > 1), take(1)).subscribe(() => { this.setUpSessionSubscriptions(); }));
}
setUpSessionSubscriptions() {
this.sessionSubscription = this.icpEventService.becomingPresenter.subscribe(() => this.becomePresenter());
this.sessionSubscription.add(this.icpEventService.stoppingPresenting.subscribe(() => this.stopPresenting()));
this.sessionSubscription.add(this.icpEventService.sessionExitConfirmed.subscribe(() => this.leavePresentation()));
this.sessionSubscription.add(this.store.pipe(select(fromIcpSelectors.getPresenter)).subscribe(presenter => this.presenter = presenter));
this.sessionSubscription.add(this.store.pipe(select(fromIcpSelectors.getClient)).subscribe(client => this.client = client));
this.sessionSubscription.add(this.store.pipe(select(fromIcpSelectors.isPresenter)).subscribe(isPresenter => {
this.isPresenter = isPresenter;
this.presenterSubscriptions.update(isPresenter);
this.followerSubscriptions.update(!isPresenter);
}));
this.sessionSubscription.add(this.socketService.clientDisconnected().subscribe(cli => this.clientDisconnected(cli)));
this.sessionSubscription.add(this.socketService.presenterUpdated().subscribe(pres => {
this.store.dispatch(new fromIcpActions.IcpPresenterUpdated(pres));
}));
this.sessionSubscription.add(this.socketService.participantListUpdated().subscribe(participants => {
this.store.dispatch(new fromIcpActions.IcpParticipantListUpdated(participants));
}));
}
unsubscribeSession() {
this.presenterSubscriptions.update(false);
this.followerSubscriptions.update(false);
this.sessionSubscription.unsubscribe();
}
leavePresentation() {
if (this.isPresenter) {
this.stopPresenting();
}
this.removeParticipant(this.client.id);
this.socketService.leaveSession();
this.store.dispatch(new fromIcpActions.LeaveIcpSocketSession());
this.unsubscribeSession();
}
stopPresenting() {
const presenter = { username: '', id: '' };
this.socketService.updatePresenter(presenter);
}
becomePresenter() {
this.socketService.updatePresenter(this.client);
}
clientDisconnected(client) {
if (client === this.presenter.id) {
this.stopPresenting();
}
this.removeParticipant(client);
}
removeParticipant(participantId) {
this.socketService.removeParticipant(participantId);
}
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IcpService, deps: [{ token: i1.ToolbarEventService }, { token: i2.ViewerEventService }, { token: i3.IcpUpdateService }, { token: i4.IcpPresenterService }, { token: i5.IcpFollowerService }, { token: i6.Store }, { token: i7.IcpEventService }], target: i0.ɵɵFactoryTarget.Injectable }); }
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IcpService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IcpService, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}], ctorParameters: () => [{ type: i1.ToolbarEventService }, { type: i2.ViewerEventService }, { type: i3.IcpUpdateService }, { type: i4.IcpPresenterService }, { type: i5.IcpFollowerService }, { type: i6.Store }, { type: i7.IcpEventService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi9pY3AvaWNwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQVF0RCxPQUFPLEVBQUUsTUFBTSxFQUFTLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxjQUFjLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxLQUFLLGdCQUFnQixNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sS0FBSyxZQUFZLE1BQU0sdUNBQXVDLENBQUM7QUFDdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBSTlDLE1BQU0sT0FBTyxVQUFVO0lBV3JCLFlBQTZCLGFBQWtDLEVBQzVDLFlBQWdDLEVBQ2hDLGFBQStCLEVBQy9CLHNCQUEyQyxFQUMzQyxxQkFBeUMsRUFDbEQsS0FBc0IsRUFDYixlQUFnQztRQU50QixrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7UUFDNUMsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUMvQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXFCO1FBQzNDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBb0I7UUFDbEQsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFDYixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxF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LENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQztrSUFoR1UsVUFBVTtzSUFBVixVQUFVLGNBREcsTUFBTTs7NEZBQ25CLFVBQVU7a0JBRHRCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJY3BQYXJ0aWNpcGFudCwgSWNwU3RhdGUgfSBmcm9tICcuL2ljcC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVG9vbGJhckV2ZW50U2VydmljZSB9IGZyb20gJy4uL3Rvb2xiYXIvdG9vbGJhci1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFZpZXdlckV2ZW50U2VydmljZSB9IGZyb20gJy4uL3ZpZXdlcnMvdmlld2VyLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgSWNwVXBkYXRlU2VydmljZSB9IGZyb20gJy4vaWNwLXVwZGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEljcFByZXNlbnRlclNlcnZpY2UgfSBmcm9tICcuL2ljcC1wcmVzZW50ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBJY3BGb2xsb3dlclNlcnZpY2UgfSBmcm9tICcuL2ljcC1mb2xsb3dlci5zZXJ2aWNlJztcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgKiBhcyBmcm9tSWNwQWN0aW9ucyBmcm9tICcuLi9zdG9yZS9hY3Rpb25zL2ljcC5hY3Rpb25zJztcbmltcG9ydCAqIGFzIGZyb21JY3BTZWxlY3RvcnMgZnJvbSAnLi4vc3RvcmUvc2VsZWN0b3JzL2ljcC5zZWxlY3RvcnMnO1xuaW1wb3J0ICogYXMgZnJvbURvY3VtZW50IGZyb20gJy4uL3N0b3JlL3NlbGVjdG9ycy9kb2N1bWVudC5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWNwRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vdG9vbGJhci9pY3AtZXZlbnQuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgSWNwU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgY2FzZUlkOiBzdHJpbmc7XG4gIGNsaWVudDogSWNwUGFydGljaXBhbnQ7XG4gIHByZXNlbnRlcjogSWNwUGFydGljaXBhbnQ7XG4gIGlzUHJlc2VudGVyOiBib29sZWFuO1xuICBkb2N1bWVudElkOiBzdHJpbmc7XG5cbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHNlc3Npb25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHRvb2xiYXJFdmVudHM6IFRvb2xiYXJFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3ZXJFdmVudHM6IFZpZXdlckV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNvY2tldFNlcnZpY2U6IEljcFVwZGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmVzZW50ZXJTdWJzY3JpcHRpb25zOiBJY3BQcmVzZW50ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9sbG93ZXJTdWJzY3JpcHRpb25zOiBJY3BGb2xsb3dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8SWNwU3RhdGU+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNwRXZlbnRTZXJ2aWNlOiBJY3BFdmVudFNlcnZpY2UpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3QoZnJvbUljcFNlbGVjdG9ycy5nZXRDYXNlSWQpLCBmaWx0ZXIodmFsdWUgPT4gISF2YWx1ZSkpLnN1YnNjcmliZShjYXNlSWQgPT4ge1xuICAgICAgdGhpcy5jYXNlSWQgPSBjYXNlSWQ7XG4gICAgfSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuc3RvcmUucGlwZShzZWxlY3QoZnJvbURvY3VtZW50LmdldERvY3VtZW50SWQpKS5zdWJzY3JpYmUoZG9jSWQgPT4gdGhpcy5kb2N1bWVudElkID0gZG9jSWQpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5pY3BFdmVudFNlcnZpY2Uuc2Vzc2lvbkxhdW5jaC5zdWJzY3JpYmUoKCkgPT4ge1xuXG4gICAgICBpZiAodGhpcy5jYXNlSWQgJiYgdGhpcy5kb2N1bWVudElkKSB7IHRoaXMubGF1bmNoU2Vzc2lvbigpOyB9XG4gICAgfSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVNlc3Npb24oKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbGF1bmNoU2Vzc2lvbigpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBmcm9tSWNwQWN0aW9ucy5Mb2FkSWNwU2Vzc2lvbih7IGNhc2VJZDogdGhpcy5jYXNlSWQsIGRvY3VtZW50SWQ6IHRoaXMuZG9jdW1lbnRJZCB9KSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuc3RvcmUucGlwZShzZWxlY3QoZnJvbUljcFNlbGVjdG9ycy5nZXRJY3BTZXNzaW9uKSxcbiAgICAgIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPiAxKSxcbiAgICAgIHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7IHRoaXMuc2V0VXBTZXNzaW9uU3Vic2NyaXB0aW9ucygpOyB9KSk7XG4gIH1cblxuICBzZXRVcFNlc3Npb25TdWJzY3JpcHRpb25zKCkge1xuICAgIHRoaXMuc2Vzc2lvblN1YnNjcmlwdGlvbiA9IHRoaXMuaWNwRXZlbnRTZXJ2aWNlLmJlY29taW5nUHJlc2VudGVyLnN1YnNjcmliZSgoKSA9PiB0aGlzLmJlY29tZVByZXNlbnRlcigpKTtcbiAgICB0aGlzLnNlc3Npb25TdWJzY3JpcHRpb24uYWRkKHRoaXMuaWNwRXZlbnRTZXJ2aWNlLnN0b3BwaW5nUHJlc2VudGluZy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdG9wUHJlc2VudGluZygpKSk7XG4gICAgdGhpcy5zZXNzaW9uU3Vic2NyaXB0aW9uLmFkZCh0aGlzLmljcEV2ZW50U2VydmljZS5zZXNzaW9uRXhpdENvbmZpcm1lZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5sZWF2ZVByZXNlbnRhdGlvbigpKSk7XG4gICAgdGhpcy5zZXNzaW9uU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuc3RvcmUucGlwZShzZWxlY3QoZnJvbUljcFNlbGVjdG9ycy5nZXRQcmVzZW50ZXIpKS5zdWJzY3JpYmUocHJlc2VudGVyID0+IHRoaXMucHJlc2VudGVyID0gcHJlc2VudGVyKVxuICAgICk7XG4gICAgdGhpcy5zZXNzaW9uU3Vic2NyaXB0aW9uLmFkZCh0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KGZyb21JY3BTZWxlY3RvcnMuZ2V0Q2xpZW50KSkuc3Vic2NyaWJlKGNsaWVudCA9PiB0aGlzLmNsaWVudCA9IGNsaWVudCkpO1xuICAgIHRoaXMuc2Vzc2lvblN1YnNjcmlwdGlvbi5hZGQodGhpcy5zdG9yZS5waXBlKHNlbGVjdChmcm9tSWNwU2VsZWN0b3JzLmlzUHJlc2VudGVyKSkuc3Vic2NyaWJlKGlzUHJlc2VudGVyID0+IHtcbiAgICAgIHRoaXMuaXNQcmVzZW50ZXIgPSBpc1ByZXNlbnRlcjtcbiAgICAgIHRoaXMucHJlc2VudGVyU3Vic2NyaXB0aW9ucy51cGRhdGUoaXNQcmVzZW50ZXIpO1xuICAgICAgdGhpcy5mb2xsb3dlclN1YnNjcmlwdGlvbnMudXBkYXRlKCFpc1ByZXNlbnRlcik7XG4gICAgfSkpO1xuICAgIHRoaXMuc2Vzc2lvblN1YnNjcmlwdGlvbi5hZGQodGhpcy5zb2NrZXRTZXJ2aWNlLmNsaWVudERpc2Nvbm5lY3RlZCgpLnN1YnNjcmliZShjbGkgPT4gdGhpcy5jbGllbnREaXNjb25uZWN0ZWQoY2xpKSkpO1xuICAgIHRoaXMuc2Vzc2lvblN1YnNjcmlwdGlvbi5hZGQodGhpcy5zb2NrZXRTZXJ2aWNlLnByZXNlbnRlclVwZGF0ZWQoKS5zdWJzY3JpYmUocHJlcyA9PiB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBmcm9tSWNwQWN0aW9ucy5JY3BQcmVzZW50ZXJVcGRhdGVkKHByZXMpKTtcbiAgICB9KSk7XG4gICAgdGhpcy5zZXNzaW9uU3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNvY2tldFNlcnZpY2UucGFydGljaXBhbnRMaXN0VXBkYXRlZCgpLnN1YnNjcmliZShwYXJ0aWNpcGFudHMgPT4ge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgZnJvbUljcEFjdGlvbnMuSWNwUGFydGljaXBhbnRMaXN0VXBkYXRlZChwYXJ0aWNpcGFudHMpKTtcbiAgICB9KSk7XG4gIH1cblxuICB1bnN1YnNjcmliZVNlc3Npb24oKSB7XG4gICAgdGhpcy5wcmVzZW50ZXJTdWJzY3JpcHRpb25zLnVwZGF0ZShmYWxzZSk7XG4gICAgdGhpcy5mb2xsb3dlclN1YnNjcmlwdGlvbnMudXBkYXRlKGZhbHNlKTtcbiAgICB0aGlzLnNlc3Npb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGxlYXZlUHJlc2VudGF0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzUHJlc2VudGVyKSB7XG4gICAgICB0aGlzLnN0b3BQcmVzZW50aW5nKCk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlUGFydGljaXBhbnQodGhpcy5jbGllbnQuaWQpO1xuICAgIHRoaXMuc29ja2V0U2VydmljZS5sZWF2ZVNlc3Npb24oKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBmcm9tSWNwQWN0aW9ucy5MZWF2ZUljcFNvY2tldFNlc3Npb24oKSk7XG4gICAgdGhpcy51bnN1YnNjcmliZVNlc3Npb24oKTtcbiAgfVxuXG4gIHN0b3BQcmVzZW50aW5nKCkge1xuICAgIGNvbnN0IHByZXNlbnRlcjogSWNwUGFydGljaXBhbnQgPSB7IHVzZXJuYW1lOiAnJywgaWQ6ICcnIH07XG4gICAgdGhpcy5zb2NrZXRTZXJ2aWNlLnVwZGF0ZVByZXNlbnRlcihwcmVzZW50ZXIpO1xuICB9XG5cbiAgYmVjb21lUHJlc2VudGVyKCkge1xuICAgIHRoaXMuc29ja2V0U2VydmljZS51cGRhdGVQcmVzZW50ZXIodGhpcy5jbGllbnQpO1xuICB9XG5cbiAgY2xpZW50RGlzY29ubmVjdGVkKGNsaWVudCkge1xuICAgIGlmIChjbGllbnQgPT09IHRoaXMucHJlc2VudGVyLmlkKSB7XG4gICAgICB0aGlzLnN0b3BQcmVzZW50aW5nKCk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlUGFydGljaXBhbnQoY2xpZW50KTtcbiAgfVxuXG4gIHJlbW92ZVBhcnRpY2lwYW50KHBhcnRpY2lwYW50SWQpIHtcbiAgICB0aGlzLnNvY2tldFNlcnZpY2UucmVtb3ZlUGFydGljaXBhbnQocGFydGljaXBhbnRJZCk7XG4gIH1cbn1cbiJdfQ==