openaire-library/sharedComponents/base/base.component.ts

51 lines
1.9 KiB
TypeScript

import {Directive, OnDestroy} from "@angular/core";
import {Subscriber} from "rxjs";
import {EnvProperties} from "../../utils/properties/env-properties";
import {properties} from "src/environments/environment";
import {PiwikService} from "../../utils/piwik/piwik.service";
import {Meta, Title} from "@angular/platform-browser";
import {SEOService} from "../SEO/SEO.service";
import {Router} from "@angular/router";
@Directive()
export abstract class BaseComponent implements OnDestroy {
public properties: EnvProperties = properties;
protected subscriptions: any[] = [];
/** Metadata */
public title: string;
public description: string;
protected _piwikService: PiwikService;
protected _meta: Meta;
protected seoService: SEOService;
protected _title: Title;
protected _router: Router;
protected constructor() {
}
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if(subscription instanceof Subscriber) {
subscription.unsubscribe()
} else if(subscription instanceof Function) {
subscription();
} else if(typeof IntersectionObserver !== 'undefined' && subscription instanceof IntersectionObserver) {
subscription.disconnect();
} else if(typeof ResizeObserver !== 'undefined' && subscription instanceof ResizeObserver) {
subscription.disconnect();
}
});
}
public setMetadata() {
const url = properties.domain + properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(url, false);
this._meta.updateTag({content: url}, "property='og:url'");
this._meta.updateTag({content: this.description}, "name='description'");
this._meta.updateTag({content: this.description}, "property='og:description'");
this._meta.updateTag({content: this.title}, "property='og:title'");
this._title.setTitle(this.title);
this.subscriptions.push(this._piwikService.trackView(properties, this.title).subscribe());
}
}