Sprievodcovia

Autocomplete názvu firmy

Vyhľadávanie firmy počas písania: oneskorenie dopytov, zrušenie staršej požiadavky a načítanie detailu po výbere firmy.

Vyhľadávanie firmy počas písania použite v registrácii, CRM alebo fakturačnom formulári. Endpoint /v1/search prijíma názov alebo IČO a vracia zoznam kandidátov. Používateľ vyberie firmu a aplikácia následne načíta jej detail.

Vyhľadávanie v JavaScripte

Tento príklad vložte do stránky s prvkami <input id="firma"> a <div id="vysledky" aria-live="polite"></div>. Výsledky vykresľuje ako tlačidlá s textovým obsahom. Po výbere odovzdá udalosť firma-vybrana s IČO a krajinou.

const input = document.querySelector("#firma");
const results = document.querySelector("#vysledky");
let timer;
let controller;
let revision = 0;

input.addEventListener("input", () => {
  clearTimeout(timer);
  controller?.abort();
  const current = ++revision;
  results.replaceChildren();
  const query = input.value.trim();
  if (query.length < 2 || query.length > 120) return;

  timer = setTimeout(async () => {
    controller = new AbortController();
    try {
      const params = new URLSearchParams({ q: query, country: "sk", limit: "5" });
      const response = await fetch(`https://api.subjekt.sk/v1/search?${params}`, {
        signal: AbortSignal.any([controller.signal, AbortSignal.timeout(10000)])
      });
      if (!response.ok) throw new Error(`API chyba ${response.status}`);
      const data = await response.json();
      if (current !== revision) return;
      results.replaceChildren();
      for (const firma of data.results) {
        const button = document.createElement("button");
        button.type = "button";
        button.textContent = `${firma.name} · ${firma.ico} · ${firma.address?.city ?? ""}`;
        button.addEventListener("click", () => {
          input.value = firma.name;
          results.replaceChildren();
          input.dispatchEvent(new CustomEvent("firma-vybrana", {
            bubbles: true,
            detail: { ico: firma.ico, country: firma.address.country.toLowerCase() }
          }));
        });
        results.append(button);
      }
      if (!data.results.length) results.textContent = "Žiadne výsledky. Spresnite názov alebo zadajte IČO.";
    } catch (error) {
      if (current === revision && error.name !== "AbortError") {
        results.textContent = "Vyhľadávanie nie je dostupné. Údaje môžete zadať ručne.";
      }
    }
  }, 300);
});

Oneskorenie 300 ms znižuje počet volaní pri písaní. Zrušenie požiadavky a kontrola poradia chránia zoznam pred oneskorenou odpoveďou na starší text. Tlačidlá sú dostupné aj klávesnicou; ide o jednoduchý zoznam návrhov, nie plný ARIA combobox.

Po výbere načítajte detail

Použite IČO a krajinu z vybraného výsledku na volanie /v1/entity/{ico}?country=sk. V ukážke je vyhľadávanie obmedzené na Slovensko. Pre Česko zmeňte country na cz; pre oba registre na both a rešpektujte krajinu každého výsledku.

Vyhľadávanie pri slovenských živnostníkoch zámerne nevracia ulicu ani číslo domu. Pre predvyplnenie celej adresy načítajte detail firmy. Návod Fakturačné údaje podľa IČO ukazuje spracovanie detailu a chýbajúcich polí.

Limity a neúplné výsledky

Zoznam je stránkovaný. count je počet položiek aktuálnej stránky, nie celkový počet zhôd. Pri country=both sledujte warnings: príliš všeobecný názov môže viesť k vynechaniu českých výsledkov. Chybu služby nezobrazujte ako „firma neexistuje“.

Pozri parametre vyhľadávania, stránkovanie a limity požiadaviek.

Táto stránka vo formáte Markdown