import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';
import { get } from 'scriptjs';
import { GeowidgetTypeEnum, IGeoWidgetInitConfig } from './angular-inpost-geowidget.model';
import { AngularInpostGeowidgetService } from './angular-inpost-geowidget.service';
import { Subscription } from 'rxjs';
declare var easyPack;
@Component({
selector: 'lib-angular-inpost-geowidget',
template: `
`,
styles: []
})
export class AngularInpostGeowidgetComponent implements OnInit, OnDestroy {
@Input()
public initialConfig: IGeoWidgetInitConfig = {};
@Input()
public id = 'easypack-map';
@Input()
public widgetType: GeowidgetTypeEnum = GeowidgetTypeEnum.WIDGET;
@Output()
public onPointSelect: EventEmitter = new EventEmitter();
private _map: any;
private _isScriptInitiated = false;
private _openedModalSubscription: Subscription;
constructor(private angularInpostGeowidgetService: AngularInpostGeowidgetService) {
}
public ngOnInit(): void {
get('https://geowidget.easypack24.net/js/sdk-for-javascript.js', () => {
this._isScriptInitiated = true;
easyPack.init(this.initialConfig);
this._initMap();
});
this._openedModalSubscription = this.angularInpostGeowidgetService.openModalWidget.subscribe(() => this._executeModalWidget());
}
public ngOnDestroy(): void {
if (this._openedModalSubscription) {
this._openedModalSubscription.unsubscribe();
}
}
private _initMap(): void {
if (this._isScriptInitiated) {
switch (this.widgetType) {
case GeowidgetTypeEnum.DROPDOWN:
this._executeDropdownWidget();
break;
case GeowidgetTypeEnum.MODAL:
break;
default:
this._executeMapWidget();
break;
}
}
}
private _executeMapWidget(): void {
this._map = easyPack.mapWidget(this.id, point => this.onPointSelect.emit(point));
}
private _executeModalWidget(): void {
this._map = new easyPack.modalMap((point, modal) => {
modal.closeModal();
this.onPointSelect.emit(point);
}, {width: 1200, height: 600});
}
private _executeDropdownWidget(): void {
this._map = easyPack.dropdownWidget(this.id, point => this.onPointSelect.emit(point));
}
}