Files
lulandia.pl/modules/x13gpsr/views/js/x13gpsrBulkUpdater.js
2025-04-01 00:38:54 +02:00

2 lines
4.5 KiB
JavaScript

!function(){"use strict";class t{constructor(){this.modalContainerId="gsprModalContainer",this.init()}init(){document.querySelectorAll(".xgpsr-bulk-assign-button").forEach((t=>{const e=t.closest("a");e&&(e.removeAttribute("onclick"),e.classList.add("xgpsr-bulk-update-button"))})),document.addEventListener("click",(t=>{t.target.closest(".xgpsr-bulk-update-button")&&this.handleBulkUpdateButton(t,t.target.closest(".xgpsr-bulk-update-button"))})),document.addEventListener("click",(t=>{t.target&&"xgpsr-submit-bulk-update"===t.target.id&&this.handleConfirm(t)})),document.addEventListener("click",(t=>{const e=t.target.closest('[data-action="xgpsr-product-update"]');e&&this.handleSingleUpdateButton(t,e)}))}handleSingleUpdateButton(t,e){t.preventDefault();const r=[{id:e.getAttribute("data-id"),name:e.getAttribute("data-name")}],n=e.getAttribute("data-type");0!==r.length?this.loadModal(n,r):alert(x13gpsrSelectAtLeastOneProduct)}handleBulkUpdateButton(t,e){t.preventDefault();const r=[...e.querySelector("i").classList].find((t=>t.startsWith("xgpsr-bulk-assign-button-type-"))),n=r?r.replace("xgpsr-bulk-assign-button-type-",""):"",s=e.closest("form");if(!s)return void alert("Error: Cannot find the parent form.");const o=[...s.querySelectorAll('input[name$="productsBox[]"]:checked')].map((t=>{const e=t.closest("tr").querySelectorAll("td")[3].innerText.trim();return{id:t.value,name:e}}));0!==o.length?this.loadModal(n,o):alert(x13gpsrSelectAtLeastOneProduct)}loadModal(t,e){fetch(GsprAjaxUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({ajax:1,action:"renderBulkAssignModal",type:t,selectedProducts:JSON.stringify(e)})}).then((t=>t.text())).then((t=>this.displayModal(t))).catch((()=>alert(x13gpsrErrorLoadingModal)))}displayModal(t){let e=document.getElementById(this.modalContainerId);e||(e=document.createElement("div"),e.id=this.modalContainerId,e.classList.add("modal","fade","x13gpsr-modal"),e.setAttribute("tabindex","-1"),e.setAttribute("role","dialog"),document.querySelector(".bootstrap").appendChild(e)),e.innerHTML=t,$(e).modal("show"),$(e).on("hidden.bs.modal",(()=>{e.innerHTML=""}))}scrollToBottom(t){t.scrollTop=t.scrollHeight}handleConfirm(t){const e=document.getElementById(this.modalContainerId),r=t.target.getAttribute("data-type");if(!e)return void alert("Error: Modal container not found.");const n=[...e.querySelectorAll('input[name="selectedProducts[]"]')].map((t=>({id:t.value,name:t.dataset.name})));if(0===n.length)return void alert(x13gpsrSelectAtLeastOneProduct);const s=new FormData;e.querySelectorAll('[name^="bulk_update_data["]').forEach((t=>{"checkbox"===t.type||"radio"===t.type?t.checked&&s.append(t.name,t.value):s.append(t.name,t.value)})),s.append("ajax",1),s.append("action","performBulkAssign"),s.append("type",r);const o=[];for(let t=0;t<n.length;t+=100)o.push(n.slice(t,t+100));const a=e.querySelector(".x13gpsr-logs"),l=e.querySelector("#xgpsr-progress-container"),d=e.querySelector("#xgpsr-progress-bar"),i=e.querySelector("#xgpsr-bulk-update-logs"),c=e.querySelector("#xgpsr-updater-specific-container"),u=e.querySelector("#xgpsr-cancel-button"),p=e.querySelector("#xgpsr-submit-bulk-update"),g=e.querySelector("#xgpsr-close-button");g.addEventListener("click",(()=>{location.reload()})),a.style.display="block",l.style.display="block",d.style.width="0%",d.setAttribute("aria-valuenow","0"),d.textContent="0%",i.innerHTML="",p.disabled=!0,u.disabled=!0;const h=t=>{if(t>=o.length)return c.innerHTML="",p.style.display="none",u.style.display="none",g.style.display="block",i.innerHTML+=`<hr><div class="text-info"><strong>${x13gpsrActionSuccessful}</strong></div>`,void this.scrollToBottom(i);const e=o[t];s.set("selectedProducts",JSON.stringify(e)),fetch(GsprAjaxUrl,{method:"POST",body:s}).then((t=>t.json())).then((e=>{if(e.error)return i.innerHTML+=`<div class="text-danger">${e.error}</div>`,c.innerHTML="",p.style.display="none",u.style.display="none",g.style.display="block",void this.scrollToBottom(i);if(e.results){e.results.forEach((t=>{"success"===t.status?i.innerHTML+=`<div class="text-success">${x13gpsProduct} <strong>${t.name}</strong> (ID: ${t.id}) ${t.message}</div>`:"warning"===t.status&&(i.innerHTML+=`<div class="text-warning">${t.message}</div>`)}));const r=Math.round((t+1)/o.length*100);d.style.width=`${r}%`,d.setAttribute("aria-valuenow",r),d.textContent=`${r}%`}this.scrollToBottom(i),h(t+1)})).catch((()=>{i.innerHTML+=`<div class="text-danger">${x13gpsrErrorPerformingUpdate}</div>`,this.scrollToBottom(i),h(t+1)}))};h(0)}}document.addEventListener("DOMContentLoaded",(()=>new t))}();