Fix offer workspace mutation observer loop

This commit is contained in:
pavlov346346-source 2026-09-08 08:15:37 +03:00
parent 40ecd73f1c
commit 3253a711f4

View File

@ -10,7 +10,7 @@
const modal=()=>$('sunClientOfferModal');
const dialog=()=>modal()?.querySelector('.dialog')||null;
const toast=(text,type='info',ms=4200)=>{try{return window.SunEnterprise?.toast?.(text,type,ms)}catch(_){};};
let mode='preview',wasOpen=false,activeOrderId='';
let mode='preview',activeOrderId='';
let openersPatched=false,classicPatched=false;
function readGalleryMap(){try{const v=JSON.parse(localStorage.getItem(GALLERY_KEY)||'{}');return v&&typeof v==='object'&&!Array.isArray(v)?v:{}}catch(_){return{}}}
@ -105,8 +105,8 @@
function refreshOffer(){try{window.dispatchEvent(new CustomEvent('sunoffertemplatechange',{detail:{galleryOnly:true,orderId:activeOrderId}}))}catch(_){}}
function patchOpeners(){
if(openersPatched)return true;const one=window.sunOpenClientOffer,cur=window.sunOpenCurrentClientOffer;if(typeof one!=='function'||typeof cur!=='function')return false;
window.sunOpenClientOffer=function(id,...rest){activeOrderId=String(id??'');const out=one.call(this,id,...rest);setTimeout(syncGalleryUi,80);return out};
window.sunOpenCurrentClientOffer=function(...args){activeOrderId=currentDraftId();const out=cur.apply(this,args);setTimeout(syncGalleryUi,80);return out};
window.sunOpenClientOffer=function(id,...rest){activeOrderId=String(id??'');mode='preview';const out=one.call(this,id,...rest);setTimeout(()=>{enhance();setMode('preview',false);syncGalleryUi()},80);return out};
window.sunOpenCurrentClientOffer=function(...args){activeOrderId=currentDraftId();mode='preview';const out=cur.apply(this,args);setTimeout(()=>{enhance();setMode('preview',false);syncGalleryUi()},80);return out};
window.sunOpenClientOffer.__sunV1769=true;window.sunOpenCurrentClientOffer.__sunV1769=true;openersPatched=true;return true;
}
function patchClassic(){
@ -127,10 +127,9 @@
},true);
window.addEventListener('sun:offer-gallery-v1769-change',syncGalleryUi);
const observer=new MutationObserver(()=>{
const m=modal();if(!m)return;enhance();const open=m.classList.contains('on');if(open&&!wasOpen)setMode('preview',false);wasOpen=open;
});
observer.observe(document.documentElement,{subtree:true,childList:true,attributes:true,attributeFilter:['class']});
let enhanceQueued=false;
const observer=new MutationObserver(()=>{if(enhanceQueued)return;enhanceQueued=true;queueMicrotask(()=>{enhanceQueued=false;enhance()})});
observer.observe(document.documentElement,{subtree:true,childList:true});
installStyle();enhance();
const retry=setInterval(()=>{if(patchOpeners()&&patchClassic())clearInterval(retry)},350);setTimeout(()=>clearInterval(retry),15000);
window.SunOfferWorkspaceV1769={VERSION,RELEASE,GALLERY_KEY,setMode,enhance,galleryFor,checks:()=>({version:VERSION,mode,modal:Boolean(modal()),tabs:Boolean($('sunOfferWorkspaceTabsV1769')),activeOrderId,openersPatched,classicPatched})};