import { products_loader } from "./products_loader.js"; import { product_containers } from "./product_containers.js"; export class searcher { #input; #category; #manager; #result; static #instances; static #add(instance) { if (typeof(searcher.#instances) !== "object") { searcher.#instances = new Array(); } searcher.#instances.push(instance); } static reload() { if (typeof(searcher.#instances) !== "object") { return ; } searcher.#instances.forEach(instance => { instance.update(); }); } constructor(search_form, manager, result) { this.#input = search_form.querySelector("input[type=\"text\"]"); this.#category = search_form.querySelector("select"); this.#manager = manager; this.#result = result; this.#selector_complete(); search_form.addEventListener("submit", (target) => { target.preventDefault(); this.update(); }); searcher.#add(this); } get categories() { return { "name": _("name-category"), "author": _("author-category"), "barcode": _("barcode-category"), } } #selector_complete() { const category = this.#category; const categories = this.categories; Object.keys(categories).forEach(name => { const option = document.createElement("option"); option.value = name; option.innerText = categories[name]; category.appendChild(option); }); } get #loader() { return { "name": products_loader.search_name, "author": products_loader.search_author, "barcode": products_loader.search_barcode, }[this.category]; } get category() { return this.#category.value; } get phrase() { return this.#input.value.trim(); } get #result_title() { return this.#result.innerText; } set #result_title(target) { this.#result.innerText = target; } async update() { if (this.phrase.length === 0) { this.show_all(); return; } this.#insert(await this.#loader(this.phrase)); } #insert(list) { if (list.length === 0) { this.#result_title = _("not-found-anything"); } else { this.#result_title = _("browse-our-products"); } this.#manager .clean() .add_list(list) .update(); } async show_all() { this.#insert(await products_loader.all()) } }