| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- import { formscreen } from "./formscreen";
- import { database } from "./database.js";
- import { autocomplete_database } from "./autocomplete_database.js";
- import { import_loop } from "./import_loop.js";
- import { searcher } from "./searcher.js";
- import { import_log } from "./import_log.js";
- import { downloader } from "./downloader.js";
- export class import_products extends formscreen {
- #file;
- #content;
- get _name() {
- return _("import-products-json");
- }
- _build_form() {
- this._create_input("file", "Database:", "", (input) => {
- this.#file = input;
- input.type = "file";
- input.accept = "application/json";
- });
- }
- async #load_file() {
- if (this.#file.files.length === 0) {
- throw new Error("select-products-json-database-first");
- }
- const file = this.#file.files.item(0);
- const text = await file.text();
-
- return JSON.parse(text);
- }
- async _process() {
- try {
- this._info = _("loading-file");
- this.#content = await this.#load_file();
- this._info = _("parsing-file-to-dataset");
-
- const result = new import_log();
- const dataset = new database(this.#content)
- .on_skip((fail) => {
- this._info = _("skipping-import-product-__barcode__").format({
- barcode: fail.product.barcode
- });
- result.skip(fail);
- })
- .process()
- .results();
- const loop = new import_loop(dataset)
- .on_autocomplete((target) => {
- this._info = _("searching-for-product-__barcode__").format({
- barcode: target.barcode
- });
- })
- .on_create((target) => {
- this._info = _("creating-product-__barcode__").format({
- barcode: target.barcode
- });
- })
- .on_single_fail((target) => {
- this._info = _("can-not-add-product-__barcode__").format({
- barcode: target.product.barcode
- })
- result.fail(target);
- })
- .on_skip((target) => {
- this._info = _("skipping-product-__barcode").format({
- barcode: target.product.barcode
- })
- result.skip(target);
- })
- .on_single_success((target) => {
- this._info = _("created-product-__barcode__").format({
- barcode: target.barcode
- })
- })
- .finally(() => {
- searcher.reload();
- const log = new downloader()
- .content(result.content())
- .type("text/plain")
- .encode("utf-8")
- .name("import-json.log")
- .process();
-
- if (result.length === 0) {
- this._success = _("all-items-imported");
- setTimeout(() => {
- this.hide();
- });
- } else {
- this._success = _("not-all-items-imported");
- }
- })
- .process();
- } catch (error) {
- this._error = new String(error);
- }
- }
- }
|