Current Path : /var/www/www-root/data/www/info.monolith-realty.ru/bitrix/js/landing/provider/map/src/ |
Current File : /var/www/www-root/data/www/info.monolith-realty.ru/bitrix/js/landing/provider/map/src/map.js |
import {Type} from 'main.core'; import {BaseProvider} from './base_provider'; import {GoogleMap} from './google_map'; import {YandexMap} from './yandex_map'; import 'ui.fonts.opensans'; import './css/style.css' export class Map { static +PROVIDERS = { google: GoogleMap, yandex: YandexMap, }; static +DEFAULT_PROVIDER = 'google'; static +DATA_ATTRIBUTE = 'mapProvider'; /** * If API not loaded already - create schedule * @type {{}} */ static scheduled = {}; constructor() { } /** * Create map provider for current node * @param node * @param options * @return {*} */ static create(node: HTMLElement, options: {}): BaseProvider { // handler for load api options.onApiLoaded = Map.onApiLoaded; // get provider code let providerCode = node.dataset[Map.DATA_ATTRIBUTE]; if ( !providerCode || Object.keys(Map.PROVIDERS).indexOf(providerCode) === -1 ) { providerCode = Map.DEFAULT_PROVIDER; } // init or set to schedule const provider = new (Map.PROVIDERS[providerCode])(options); if (provider.isApiLoaded()) { provider.init(); } else { if (!Type.isArray(Map.scheduled[provider.getCode()])) { Map.scheduled[provider.getCode()] = []; } Map.scheduled[provider.getCode()].push(provider); } return provider; } static onApiLoaded(providerCode: string) { if (Type.isArray(Map.scheduled[providerCode])) { Map.scheduled[providerCode].forEach(provider => { provider.init(); }); } } }