Advertisement
valeraplusplus

folder-block-lpc 2)

Nov 30th, 2023
759
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2.     class FolderBlockButton {
  3.         constructor($self) {
  4.             var _this = this;
  5.             this.$block = $self;
  6.             this.items = null,
  7.             this.$block = $self;
  8.             //this.items = this.getFolderFetch();
  9.             this.itemsFolderId = this.$block.find('.items-folder-id');
  10.             this.queryFolder = this.$block.find(`.lpc-query-folder`); // Logic query
  11.             this.selectFolder = this.queryFolder.find('.lpc-query-folder__select');
  12.  
  13.             this.arrayItemsFolder = null;
  14.             if(_this.itemsFolderId.text() && _this.itemsFolderId.text() != 'not_found'){
  15.                 this.arrayItemsFolder = this.itemsFolderId.text().split(',');
  16.             }
  17.             this.helperFunction = {
  18.                 selectOpen(){
  19.                     _this.queryFolder
  20.                         .find('.lpc-query-folder__input')
  21.                         .on('click', function (e) {
  22.                             _this.selectFolder.toggleClass("open");
  23.                         });
  24.                 },
  25.                 in_array(needle, haystack, strict) {
  26.                     var found = false, key, strict = !!strict;
  27.                
  28.                     for (key in haystack) {
  29.                         if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
  30.                             found = true;
  31.                             break;
  32.                         }
  33.                     }
  34.                
  35.                     return found;
  36.                 }
  37.                
  38.             }
  39.             this.eventHandler = {
  40.                 selected(e){
  41.                    
  42.                 },
  43.             }
  44.             this.topLevelEventHendler = function(){
  45.                
  46.             };
  47.             this.createSelectOption = async function(){
  48.                 _this.items = await _this.getFolderFetch(() => { // get ITEMS and callback
  49.                     _this.queryFolder.addClass('lpc-shop-not-found');
  50.                 });
  51.                 let dropDownList = _this.dropDownListHtml(_this.items);
  52.  
  53.                 _this.queryFolder
  54.                     .removeClass('load')
  55.                     .addClass('loaded')
  56.                     .find('.lpc-query-folder__body')
  57.                     .append(dropDownList);
  58.  
  59.                 let allUl = $(dropDownList).find('ul');
  60.                 let counterItem = function(elem){
  61.                     $(elem).each( function(i, el){
  62.                         let $this = $(this);
  63.                         let $li = $this.children('li');
  64.                         let $div = $this.prev();
  65.                    
  66.                         $div.append( `<i>(${$li.length})</i>` );
  67.                     });
  68.                  }
  69.                  counterItem(dropDownList);
  70.                  counterItem(allUl);
  71.  
  72.                 return true;
  73.             }
  74.         }
  75.         createButton(){
  76.             let $list = this.$block.find('.lpc-menu-horizontal__list');
  77.    
  78.             let lpcMenuView = $list.attr('data-lpc-menu-view');
  79.             let lpcButtons = $list.attr('data-lpc-buttons');
  80.             let itemsFolder = this.itemsFolderId.text().split(',');
  81.             let lpcRowButtonClone = $list.find('.lpc-row-button').removeClass('show').clone();
  82.             $list.find('.lpc-row-button').remove()
  83.  
  84.        
  85.             let templatesContainer = '';
  86.             this.items.forEach(item => {
  87.    
  88.                 for(let i = 0; i < itemsFolder.length; i++){
  89.                     if(itemsFolder[i] == item.folder_id){
  90.                        
  91.                         let link = '/' + item.alias;
  92.                         //var image = item.folder_image ? '/d/' + item.folder_image.filename : null;
  93.                         let name = item.folder_name;
  94.                         let template = `<li class="lpc-menu-horizontal__item ${lpcMenuView}" data-lp-selector=".lpc-menu-horizontal__item" data-elem-type="container">
  95.                             <a class="lpc-menu-horizontal__link lp-button ${lpcButtons}" href="${link}" data-lp-selector=".lpc-menu-horizontal__link" data-elem-type="text">
  96.                                 ${name}
  97.                                 <span class="lpc-menu-horizontal__arrow" data-elem-type="container" data-lp-selector=".lpc-menu-horizontal__arrow-line">
  98.                                     <span class="lpc-menu-horizontal__arrow-line"></span>
  99.                                     <span class="lpc-menu-horizontal__arrow-line"></span>
  100.                                 </span>
  101.                             </a>
  102.                         </li>`;
  103.                        
  104.                         //let tempDiv = document.createElement( "div" );
  105.                         //tempDiv.innerHTML = template;
  106.                        
  107.                         //$list.prepend( tempDiv.childNodes[0] );
  108.                         templatesContainer += template;
  109.  
  110.                     }
  111.                 }
  112.             });
  113.    
  114.             //$list.find('.items-folder-remove').remove();
  115.             $list.html(templatesContainer);
  116.             $list.append(lpcRowButtonClone);
  117.    
  118.             if(!this.$block.hasClass('lpc-simple-menu')){
  119.                 this.$block.addClass('lpc-row-menu');
  120.                 lpc_template.queue.rowMenu($('body'));
  121.             }
  122.    
  123.         }
  124.         dropDownListHtml(data) {
  125.             var rootUL = document.createElement('ul');
  126.             var levelObject = {};
  127.             var parentLi = null;
  128.             data.shift();
  129.  
  130.             data.forEach(item => {
  131.                 var li = document.createElement('li');
  132.                 var div = document.createElement('div');
  133.                 div.className = 'lpc-query-folder__option lpc-query__option';
  134.                 div.setAttribute('data-folder_id', item.folder_id);
  135.        
  136.                 var span = document.createElement('span');
  137.                
  138.                 function decodeHtmlEntities(input) {
  139.                     var doc = new DOMParser().parseFromString(input, "text/html");
  140.                     return doc.documentElement.textContent;
  141.                 }
  142.                 span.textContent = decodeHtmlEntities( item.folder_name );
  143.                 div.title = decodeHtmlEntities( item.folder_name );
  144.    
  145.                 //var i = document.createElement('i');
  146.                 //i.textContent = `(${item.items})`;
  147.        
  148.                 div.appendChild(span);
  149.                 //div.appendChild(i);
  150.                 li.appendChild(div);
  151.  
  152.                 if(this.arrayItemsFolder){
  153.                     if(this.helperFunction.in_array(item.folder_id, this.arrayItemsFolder)){
  154.                         div.classList.add('active');
  155.                     }
  156.                 }
  157.        
  158.                 let level = Number(item._level);
  159.        
  160.                 if (level == 1) {
  161.                     li.classList.add('first-level')
  162.                     rootUL.appendChild(li);
  163.                     parentLi = li;
  164.                     levelObject = {};
  165.                 } else {
  166.                     if (!levelObject[level]) {
  167.                         levelObject[level] = document.createElement('ul');
  168.                         parentLi.appendChild(levelObject[level]);
  169.                         parentLi.classList.add('hasChild')
  170.                     }
  171.                     levelObject[level].appendChild(li);
  172.                     parentLi = li;
  173.                 }
  174.             });
  175.        
  176.             return rootUL;
  177.         }
  178.         async getFolderFetch(notFolder) {
  179.             try {
  180.                 // Создаем параметры запроса
  181.                 let params = new URLSearchParams();
  182.                 params.append('param[type]', 'shop2');
  183.                 params.append('param[depth]', 99);
  184.    
  185.                 // Формируем URL для GET-запроса
  186.                 let url = '/my/s3/xapi/public/?method=folder/getTree&' + params.toString();
  187.    
  188.                 // Отправляем GET-запрос с использованием fetch
  189.                 let response = await fetch(url, {
  190.                     method: 'GET',
  191.                     headers: {
  192.                         'Content-Type': 'application/json'
  193.                     }
  194.                 });
  195.    
  196.                 if (!response.ok) {
  197.                     throw new Error('Ошибка при выполнении запроса');
  198.                 }
  199.    
  200.                 let data = await response.json();
  201.    
  202.                 if (data.result.success) {
  203.                     let items = data.result.items;
  204.    
  205.                     // Нет категории магазина
  206.                     if (!items.length) {
  207.                         notFolder();
  208.                         return false;
  209.                     }
  210.    
  211.                     return items;
  212.                 }
  213.             } catch (error) {
  214.                 console.error('Ошибка при выполнении запроса:', error);
  215.                 return false;
  216.             }
  217.         }
  218.         initSelect(){
  219.             let _this = this;
  220.             (async function () {
  221.                
  222.                 _this.helperFunction.selectOpen();
  223.  
  224.                 await _this.createSelectOption();
  225.  
  226.                 let queryFolderOption = _this.queryFolder.find('.lpc-query-folder__option'); /* option select */
  227.                 let $allLi = _this.queryFolder.find('li');
  228.  
  229.                 queryFolderOption.on('click', function (e) {
  230.                     queryFolderOption.removeClass('active');
  231.                     $allLi.removeClass('active')
  232.  
  233.                     let $this = $(this);
  234.                     let $li = $this.closest('li');
  235.                     let $ul = $li.children('ul');
  236.  
  237.                     $li.remove('active');
  238.  
  239.                     $li.addClass('active');
  240.  
  241.                     $li.parents('.hasChild').addClass('active');
  242.                    
  243.  
  244.                     var $firstLevel = _this.queryFolder.find('.first-level')
  245.                    
  246.                     let $option = $ul.children('li').children('.lpc-query-folder__option');
  247.                     if($this.hasClass('all-folders')){
  248.                         $option = $firstLevel.find(' > .lpc-query-folder__option');
  249.                     }
  250.  
  251.                     $option.addClass('active');
  252.    
  253.  
  254.                     let srtBlock = '';
  255.                     let len = $option.length - 1;
  256.  
  257.                     $option.each(function(index){
  258.                         let last = ',';
  259.                         if(index == len){
  260.                             last = '';
  261.                         }
  262.                         srtBlock += $(this).attr('data-folder_id') + last;
  263.                     });
  264.                     //console.log( srtBlock )
  265.                    
  266.                     _this.itemsFolderId
  267.                         .text(srtBlock)
  268.                         .addClass('modified modified-text');
  269.    
  270.                     _this.createButton();
  271.    
  272.                     // if (!flagLoadFolder) {
  273.                     //  queryFolder.addClass('folder-selected')
  274.                     // }
  275.    
  276.                 });
  277.    
  278.                 if(_this.itemsFolderId.text() && _this.itemsFolderId.text() != 'not_found'){
  279.                     _this.createButton();
  280.                 }
  281.             })();
  282.         }
  283.         init(){
  284.             this.initSelect();
  285.         }
  286.     };
  287.    
  288.     lpc_template.queue.folderBlock = function ($self) {
  289.    
  290.         let $blocks = $self.hasClass('lpc-folder-block') ? $self : $self.find('.lpc-folder-block');
  291.    
  292.         if ($blocks.length) {
  293.    
  294.             $blocks.each(function () {
  295.                 let $block = $(this);
  296.                
  297.                 if (s3LP.is_cms) {
  298.                     var folderBlock = new FolderBlockButton($block);
  299.                     folderBlock.init();
  300.                 }
  301.    
  302.             })
  303.         }
  304.     };
  305.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement