Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/location/osm/src/ |
Upload File : |
import { AutocompleteServiceBase, Location, AutocompleteCache, } from 'location.core'; import type { AutocompleteServiceParams } from 'location.core'; import OSM from './osm'; export default class AutocompleteService extends AutocompleteServiceBase { #sourceLanguageId; #autocompleteResponseConverter; #autocompleteReplacements; #autocompletePromptsCount; constructor(props) { super(props); this.#sourceLanguageId = props.sourceLanguageId; this.#autocompleteResponseConverter = props.responseConverter; this.#autocompleteReplacements = props.autocompleteReplacements; this.#autocompletePromptsCount = props.autocompletePromptsCount; } autocomplete(text: String, autocompleteServiceParams: AutocompleteServiceParams): Promise<Array<Location>, Error> { if (text === '') { return new Promise((resolve) => { resolve([]); }); } const params = { q: this.#processQuery(text), limit: this.#autocompletePromptsCount, lang: this.#sourceLanguageId, }; if (autocompleteServiceParams.biasPoint) { const lat = autocompleteServiceParams.biasPoint.latitude; const lon = autocompleteServiceParams.biasPoint.longitude; if (lat && lon) { params.lat = lat; params.lon = lon; } } let cachedResult = AutocompleteCache.get(OSM.code, params); if (cachedResult !== null) { return Promise.resolve( this.#autocompleteResponseConverter.convertResponse( cachedResult.data.result, {text, autocompleteServiceParams} ) ); } return BX.ajax.runAction( 'location.api.location.autocomplete', {data: {params: params}} ) .then((response) => { if (response) { AutocompleteCache.set(OSM.code, params, { result: response.data }); } return response ? this.#autocompleteResponseConverter.convertResponse( response.data, {text, autocompleteServiceParams} ) : []; }) .catch((response) => { console.error(response); }); } #processQuery(query: string): string { let result = query; for (const partToReplace in this.#autocompleteReplacements) { if (this.#autocompleteReplacements.hasOwnProperty(partToReplace)) { result = result.replace(partToReplace, this.#autocompleteReplacements[partToReplace]) } } return result; } }