UNPKG

autocompleter-typescript-gcba

Version:

Autocompleter para direcciones y lugares de la Ciudad de Buenos Aires

113 lines (112 loc) 3.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SuggesterDemo = void 0; const Suggester_1 = require("./Suggester"); const defaults = { debug: false, serverTimeout: 5000, maxRetries: 5, maxSuggestions: 10, }; // Datos de ejemplo para demostración const DEMO_DATA = [ { id: '1', nombre: 'Plaza de Mayo', descripcion: 'Plaza histórica de Buenos Aires', tipo: 'PLAZA', coordenadas: { x: -58.381592, y: -34.603722, srid: 4326, }, }, { id: '2', nombre: 'Obelisco', descripcion: 'Monumento histórico de Buenos Aires', tipo: 'MONUMENTO', coordenadas: { x: -58.381592, y: -34.603722, srid: 4326, }, }, { id: '3', nombre: 'Teatro Colón', descripcion: 'Teatro de ópera de Buenos Aires', tipo: 'TEATRO', coordenadas: { x: -58.383333, y: -34.601111, srid: 4326, }, }, ]; class SuggesterDemo extends Suggester_1.Suggester { constructor(name, options = {}) { const mergedOptions = { ...defaults, ...options, }; super(name, mergedOptions); this.lastRequest = null; } async getSuggestions(text, callback, maxSuggestions) { if (this.options.debug) { console.debug(`SuggesterDemo.getSuggestions('${text}')`); } try { // Cancelar petición anterior si existe this.abort(); // Crear nuevo AbortController para esta petición this.lastRequest = new AbortController(); // Simular una pequeña demora para demostrar el comportamiento asíncrono await new Promise((resolve) => setTimeout(resolve, 500)); // Filtrar los datos de ejemplo basados en el texto de búsqueda const filteredData = DEMO_DATA.filter((item) => item.nombre.toLowerCase().includes(text.toLowerCase()) || item.descripcion.toLowerCase().includes(text.toLowerCase())).slice(0, maxSuggestions !== null && maxSuggestions !== void 0 ? maxSuggestions : this.options.maxSuggestions); const suggestions = filteredData.map((d) => ({ title: d.nombre, subTitle: d.descripcion, type: d.tipo, category: d.tipo, suggesterName: this.name, data: d, })); // Simular una respuesta asíncrona setTimeout(() => { callback(suggestions, text, this.name); }, 100); } catch (error) { if (error instanceof Error && 'id' in error && error.id === 0) { callback([], text, this.name); } else { callback([error], text, this.name); } } finally { this.lastRequest = null; } } abort() { if (this.lastRequest) { this.lastRequest.abort(); this.lastRequest = null; } } ready() { return true; } setOptions(options) { const mergedOptions = { ...this.options, ...options, }; super.setOptions(mergedOptions); } } exports.SuggesterDemo = SuggesterDemo;