Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/js/location/widget/src/address/features/
Upload File :
Current File : /var/www/homesaver/www/bitrix/js/location/widget/src/address/features/autocompletefeature.js

import {Address, ControlMode} from 'location.core';
import BaseFeature from './basefeature';
import Autocomplete from '../../autocomplete/autocomplete';

/**
 * Complex address widget
 */
export default class AutocompleteFeature extends BaseFeature
{
	static searchStartedEvent = 'searchStarted';
	static searchCompletedEvent = 'searchCompleted';
	static showOnMapClickedEvent = 'showOnMapClicked';

	#autocomplete;
	#addressWidget = null;

	constructor(props)
	{
		super(props);

		if(!(props.autocomplete instanceof Autocomplete))
		{
			BX.debug('props.autocomplete  must be instance of Autocomplete');
		}

		this.#autocomplete = props.autocomplete;

		this.#autocomplete.onAddressChangedEventSubscribe(
			(event) =>
			{
				const data = event.getData();

				this.#addressWidget.setAddressByFeature(
					data.address,
					this,
					data.excludeSetAddressFeatures,
					data.options
				);
			});

		this.#autocomplete.onStateChangedEventSubscribe(
			(event) =>
			{
				const data = event.getData();
				this.#addressWidget.setStateByFeature(data.state);
			});

		this.#autocomplete.onSearchStartedEventSubscribe(
			(event) =>
			{
				const data = event.getData();
				this.#addressWidget.emitFeatureEvent(
					{
						feature: this,
						eventCode: AutocompleteFeature.searchStartedEvent,
						payload: data
					}
				);
			});

		this.#autocomplete.onSearchCompletedEventSubscribe(
			(event) =>
			{
				const data = event.getData();
				this.#addressWidget.emitFeatureEvent(
					{
						feature: this,
						eventCode: AutocompleteFeature.searchCompletedEvent,
						payload: data
					}
				);
			});

		this.#autocomplete.onShowOnMapClickedEventSubscribe(
			(event) =>
			{
				const data = event.getData();
				this.#addressWidget.emitFeatureEvent(
					{
						feature: this,
						eventCode: AutocompleteFeature.showOnMapClickedEvent,
						payload: data
					}
				);
			});
	}

	resetView(): void
	{
		this.#autocomplete.closePrompt();
	}

	render(props): void
	{
		if(this.#addressWidget.mode === ControlMode.edit)
		{
			this.#autocomplete.render({
				inputNode: this.#addressWidget.inputNode,
				menuNode: props.autocompleteMenuElement,
				address: this.#addressWidget.address,
				mode: this.#addressWidget.mode,
			});
		}
	}

	setAddress(address: ?Address): void
	{
		this.#autocomplete.address = address;
	}

	setAddressWidget(addressWidget)
	{
		this.#addressWidget = addressWidget;
	}

	destroy()
	{
		this.#autocomplete.destroy();
		this.#autocomplete = null;
	}
}