(()=>{"use strict";class e{constructor({data:e,renderer:t,el:n},a,s=0){this._renderedItems=e,this._container=n?n.querySelector(a):document.querySelector(a),this._renderer=t,this._delay=0,this._delayTime=s}hideParentEl(){this._container.closest(".parent-sect").style.display="none"}setItem(e){this._container.prepend(e)}setData(e){this._renderedItems=e}setItems(e){this._renderedItems=e}appendItem(e){this._container.append(e)}clear(){this._container.innerHTML="",this._delay=0}renderFiltered(e){this.clear(),this._renderedItems=e,this._renderedItems.forEach(e=>{this._renderer(e)}),0===e.length&&(this._container.textContent="По Вашему условию поиска статей пока нет.")}renderItems(){this._renderedItems.forEach(e=>{this.renderItem(e)})}renderItem(e){this._renderer(e)}renderItemsSlice(e,t){this.clear(),this._renderedItems.slice(e,t).forEach(e=>{this.renderItem(e)})}renderItemsFilteredByKey(e,t){this.clear(),this._renderedItems.filter(n=>n[e]===t).forEach(e=>{this.renderItem(e)})}}class t{constructor(e,t={}){this._configFields=e,this._elementsMap=new Map,this._sectionsMap=new Map,this._defaultClickHandler=t.defaultClickHandler||null,this._sectionHandlers=t.sectionHandlers||{};const n={};e.forEach(e=>{n[e.selector]||(n[e.selector]=[]),n[e.selector].push(e)}),this._configBySelector=n}_configElementsMap(t){Object.keys(this._configBySelector).forEach(a=>{let s;s=":self"===a||"this"===a||"$self"===a?t:t.querySelector(a),s?this._configBySelector[a].forEach(r=>{if(this[r.privateVarname]=s,"array"!==r.whatChange)this._elementsMap.set(r.privateVarname,{element:s,whatChange:r.whatChange,keyInData:r.key_in_dataobj,formatter:r.formatter||!1,type:"property"});else{this._elementsMap.set(r.privateVarname,{element:s,whatChange:r.whatChange,keyInData:r.key_in_dataobj,type:"array"});const i=r.configForInnerSection,c=new e({items:[],el:t,renderer:e=>{const t=this._sectionHandlers[r.privateVarname]||this._defaultClickHandler,a=new n({cardTemplateSelector:i.cardTemplateSelector,cardSelector:i.cardSelector,configFields:i.configFields,cardObj:e,handleCardClick:t}),s=a.generateCard();return c.appendItem(s),a}},a);this._sectionsMap.set(r.privateVarname,c)}}):console.warn(`Элемент с селектором ${a} не найден в карточке`)})}_loadImage(e){return new Promise((t,n)=>{const a=new Image;a.onload=()=>t(a),a.onerror=()=>n(new Error(`Не удалось загрузить по ${e}`)),a.src=e})}async _setProperty(e,t){const n=e.element,a=e.whatChange,s=e.keyInData,r=e.formatter||!1;if(console.log(t),null===t[s]&&(n.closest(".parent-sect")&&(n.closest(".parent-sect").style.display="none"),console.log("element.closest('.parent-sect')",n.closest(".parent-sect"))),n&&void 0!==t[s]&&null!==t[s]){const e=r?r(t[s]):t[s];"dataset"===a?"object"==typeof e?Object.keys(e).forEach(t=>{n.dataset[t]=e[t]}):n.dataset[s]=e:"textContent"===a?n.textContent=e:"innerHTML"===a?n.innerHTML=e:"src"===a?n.src=e:"srcAsync"===a?(console.log("Картинка начала грузиться"),await this._loadImage(e),console.log("Картинка загрузилась"),n.src=e):"alt"===a?n.alt=e:a in n&&(n[a]=e)}}_renderArray(e,t,n){const a=e.keyInData,s=this._sectionsMap.get(t);console.log("Пытаемся отрендерить массивчик тегов data[dataKey]=",n[a],Array.isArray(n[a])),console.log(this._sectionsMap),console.log("config.",e),s&&Array.isArray(n[a])&&(s._container.closest(".parent-sect")&&!n[a].length&&(console.log("YOOOO section._container.closest"),s._container.closest(".parent-sect").style.display="none"),console.log("element.closest('.parent-sect')",s),e.element.innerHTML="",s.setItems(n[a]),s.renderItems())}_renderObj(e){this._elementsMap.forEach((t,n)=>{"property"===t.type&&this._setProperty(t,e)}),this._elementsMap.forEach((t,n)=>{"array"===t.type&&this._renderArray(t,n,e)})}_clearObj(){this._sectionsMap.forEach((e,t)=>{const n=this._elementsMap.get(t);n&&n.element&&(n.element.innerHTML="",console.log("Очистка секции",n,n.element))}),this._elementsMap.forEach((e,t)=>{const n=e.element,a=e.whatChange;n&&("dataset"===a?Object.keys(n.dataset).forEach(e=>{delete n.dataset[e]}):"textContent"===a||"innerHTML"===a?n[a]="":"src"===a||"srcAsync"===a?n.src="":"alt"===a?n.alt="":"value"===a&&(n.value=""))})}updateField(e,t){const n=this._elementsMap.get(e);n&&n.element&&(n.element[n.whatChange]=t)}}class n{constructor({cardTemplateSelector:e,cardSelector:n,configFields:a,cardObj:s,handleCardClick:r},i=null){this._handleCardClick=r,this._cardTemplateSelector=e,this._cardSelector=n,this._dynamicRenderer=i||new t(a),this._cardObj=s,this._element=null,this._boundClickHandler=null}_getTemplate(){return document.querySelector(this._cardTemplateSelector).content.querySelector(this._cardSelector).cloneNode(!0)}generateCard(){return this._element=this._getTemplate(),this._dynamicRenderer._configElementsMap(this._element),this._dynamicRenderer._renderObj(this._cardObj),this._setEventListeners(),this._element}setHandleClick(e){this._boundClickHandler&&this._element&&this._element.removeEventListener("mousedown",this._boundClickHandler),this._handleCardClick=e,this._handleCardClick&&this._element&&(this._boundClickHandler=()=>{this._handleCardClick(this._cardObj,this._element)},this._element.addEventListener("mousedown",this._boundClickHandler))}_setEventListeners(){this._handleCardClick&&this._element&&(this._boundClickHandler=()=>{this._handleCardClick(this._cardObj,this._element)},this._element.addEventListener("mousedown",this._boundClickHandler))}}const a={cardTemplateSelector:"#card-object-template",cardSelector:".card",configFields:[{selector:".card-title",whatChange:"textContent",privateVarname:"_cardTitleEl",key_in_dataobj:"title"},{selector:".card-equipment",whatChange:"textContent",privateVarname:"_cardEquipmentEl",key_in_dataobj:"equipment"},{selector:".card-reg",whatChange:"textContent",privateVarname:"_cardRegion",key_in_dataobj:"region"},{selector:".card-loc",whatChange:"textContent",privateVarname:"_cardLocation",key_in_dataobj:"location"},{selector:".project__poster",whatChange:"src",privateVarname:"_cardPosterSrc",key_in_dataobj:"imageUrl"},{selector:".project__poster",whatChange:"alt",privateVarname:"_cardPosterAlt",key_in_dataobj:"title"}]},s=e=>{if(null==e)return null;if("string"!=typeof e)return e;try{return JSON.parse(e)}catch{return e}};function r(e){return e.map(e=>{const t=new Date(e.date),n=t.getMonth()+1;return{...e,formattedDate:e.date?`${t.getDate()}.${n<10?"0":""}${n}.${t.getFullYear()}`:"",images:s(e.images)}}).sort((e,t)=>new Date(t.date)-new Date(e.date))}function i(e){return e.map(e=>({...e,sequence:s(e.sequence),dict:s(e.dict)}))}function c(e){return e.map(e=>({...e,tags:s(e.tags),consumersIds:s(e.consumersIds)}))}function o(e){return e.map(e=>({...e,tags:s(e.tags),relevanceIds:s(e.relevanceIds),consumersIds:s(e.consumersIds),imagesFromGalleryIds:s(e.imagesFromGalleryIds)}))}function l(e){return e.map(e=>({...e,additional_data:e.additional_data}))}const d=new class{constructor({baseUrl:e,headers:t,incident_api_postfix:n=""}){this._baseUrl=e,this._headers=t,this._incident_api_postfix=n}_isResponseOk(e){return e.ok?e.json():Promise.reject(`Ошибка: ${e.status}`)}getDataRequest(e){return fetch(`https://${this._baseUrl}/data/${e}${this._incident_api_postfix}`,{headers:this._headers}).then(e=>this._isResponseOk(e))}getCustomRequest(e){return fetch(`https://${this._baseUrl}/custom/${e}`,{headers:this._headers}).then(e=>this._isResponseOk(e))}getSharedTable(e){return fetch(`https://${this._baseUrl}/${e}${this._incident_api_postfix}`,{headers:this._headers}).then(e=>this._isResponseOk(e))}getReviewRequest(e){return fetch(`https://${this._baseUrl}/reviews/${e}`,{headers:this._headers}).then(e=>this._isResponseOk(e))}sendForm(e,t){return fetch(`https://${this._baseUrl}/forms/${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),isBase64Encoded:!1}).then(e=>(console.log(e),this._isResponseOk(e)))}}({baseUrl:"станкостальконструкция.рф/api",incident_api_postfix:".json",headers:{Accept:"application/json","Content-Type":"application/json;charset=utf-8"}}),{api:h,service:_}={service:{getNews:()=>d.getSharedTable("news").then(r),getContacts:()=>d.getSharedTable("contacts").then(l),getDicts:()=>d.getSharedTable("sharedDictAndFields").then(i),getFaqs:()=>d.getSharedTable("faqs").then(o),getGallery:()=>d.getSharedTable("gallery").then(c)},api:d},m={..._,getObjects:()=>h.getDataRequest("objects")},p=document.querySelector(".object-section"),u=new e({data:null,renderer:e=>{const s=function({config:{cardTemplateSelector:e,cardSelector:a,configFields:s,...r},cardObj:i,handleCardClick:c=()=>{},additionalObj:o={}}){const l=new t(s);return new n({cardTemplateSelector:e,cardSelector:a,configFields:s,handleCardClick:c,cardObj:{...i,...o},...r},l).generateCard()}({config:a,cardObj:e,handleCardClick:e=>console.log(`Карточка кликнута c ${e.title} и ${e.location}`)});u.appendItem(s)}},".object-list"),g=document.querySelector(".objects-more-button");g.addEventListener("click",async e=>{g.classList.add("hidden"),await async function(){const e=document.createElement("div");e.classList.add("p-4","font-medium"),e.textContent="Загружаем...",u.appendItem(e);const t=await m.getObjects();p.scrollIntoView({behavior:"smooth"}),u.clear(),u.setData(t),u.renderItems()}()})})();