jQuery(document).ready(function ($) { const $variantons = $('input[name="price-updates-variant"]'); const $contents = $("form[data-price-updates-variant]"); const $count = $(".price-updates-count"); const $countSuccess = $(".price-updates-count-success"); const $countError = $(".price-updates-count-error"); const $tableWrapper = $(".price-updates-response"); const $error = $(".price-updates-error"); const $loaderWrapper = $(".price-updates-loader-wrapper"); // [Событие] Смена варианита обновления цен $variantons.on("change", function () { const $varianton = $(this); $tableWrapper.find("tbody").html(""); $tableWrapper.addClass("hidden"); updatePriceUpdatesCountSuccess(0); updatePriceUpdatesCountError(0); $count.addClass("hidden"); $countSuccess.addClass("hidden"); $countError.addClass("hidden"); $contents.each(function() { const $content = $(this); if ($varianton.val() != $content.data("price-updates-variant")) { $content.addClass("hidden"); } else { $content.removeClass("hidden"); } }); }); // Инициализация вариантов обновления цен $variantons.each(function() { const $varianton = $(this); $contents.each(function() { const $content = $(this); if (!$varianton.is(":checked") && $varianton.val() == $content.data("price-updates-variant")) { $content.addClass("hidden"); } else { $content.removeClass("hidden"); } }); }); function getCount(response) { if (!response?.length) { return 0; } let success = 0; let error = 0; for (const item of response) { if (!item?.isError) { success += 1; } else { error += 1; } } return { success, error }; } function updatePriceUpdatesCountSuccess(count) { if (typeof count !== "number") return; $count.removeClass("hidden"); $countSuccess.removeClass("hidden"); $countSuccess.html(`Измененно элементов: ${count}`); } function updatePriceUpdatesCountError(count) { if (typeof count !== "number") return; $count.removeClass("hidden"); $countError.removeClass("hidden"); $countError.html(`Неудалось изменить элементов: ${count}`); } function getTableRow(data) { const row = document.createElement("tr"); const tempData = { ...data }; delete tempData.url; delete tempData.currency; for (const [key, value] of Object.entries(tempData)) { const ceil = document.createElement("td"); if (key === "sku") { const link = document.createElement("a"); link.href = data.url; link.textContent = value; ceil.appendChild(link); } else if (key === "regular" || key === "sale") { ceil.textContent = value["old"] != value["new"] ? `${value["old"]} ${data.currency} -> ${value["new"]} ${data.currency}` : `${value["new"]} ${data.currency}`; } row.appendChild(ceil); } return $(row); } function getTableRowError(data) { const row = document.createElement("tr"); const tempData = { sku: data?.sku, message: data?.message }; for (const [key, value] of Object.entries(tempData)) { const ceil = document.createElement("td"); ceil.textContent = value; if (key === "message") { ceil.colSpan = 2; } row.appendChild(ceil); } return $(row); } // [Событие] Отправка формы $contents.on("submit", function(e) { e.preventDefault(); $loaderWrapper.removeClass("hidden"); $.ajax({ method: "POST", url: priceUpdatesSettings.ajaxUrl + "/update", processData: false, contentType: false, data: new FormData(this), success: function (response) { $error.addClass("hidden"); $tableWrapper.find("tbody").html(""); if (!response?.length) { $tableWrapper.addClass("hidden"); updatePriceUpdatesCountSuccess(0); updatePriceUpdatesCountError(0); return; } const count = getCount(response); updatePriceUpdatesCountSuccess(count.success); updatePriceUpdatesCountError(count.error); $tableWrapper.removeClass("hidden"); for (const item of response) { let $row = null; if (!item?.isError) { $row = getTableRow(item); } else { $row = getTableRowError(item); } $tableWrapper.find("tbody").append($row); } }, error: function (error) { $tableWrapper.find("tbody").html(""); $tableWrapper.addClass("hidden"); updatePriceUpdatesCountSuccess(0); updatePriceUpdatesCountError(0); $count.addClass("hidden"); $countSuccess.addClass("hidden"); $countError.addClass("hidden"); $error.removeClass("hidden"); $error.text(error?.responseJSON?.message || "Неизвестная ошибка"); }, complete: function () { $loaderWrapper.addClass("hidden"); } }) }) });