HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/innodrive/src/js/modules/cart.js
import Modal from './modal';
import { $ } from '@utils';
import axios from 'axios';
import { updateCartCounter } from './catalog';
import { reachGoal } from './yandexCounter';

const itemTemplate = '<li class="modal__order-item" data-id="{ID}">\n' +
  '                        <h4><a href="{URL}">{TITLE}</a></h4>\n' +
  '                        <div class="card-buttons__quant">\n' +
  '                            <button class="card-buttons__quant-hand">-</button>\n' +
  '                            <button class="card-buttons__quant-hand">+</button>\n' +
  '                            <input type="text" min="0" placeholder="1" value="{QUANTITY}" data-id="{ID}" class="js-cart-quantity" />\n' +
  '                        </div>\n' +
  '                        <button class="modal__order-remove js-remove-from-cart" data-id="{ID}">\n' +
  '                            <svg class="icon" width="11" height="11" viewBox="0 0 11 11">\n' +
  '                                <use xlink:href="/wp-content/themes/innodrive/assets/sprite/sprite.svg#icon-close"></use>\n' +
  '                            </svg>\n' +
  '                        </button>\n' +
  '                    </li>';

export const updateFormState = (count) => {
  if (count > 0) {
    $('.modal__order-form').classList.remove('js-hidden');
    $('.cart-header').classList.remove('js-cart-is-empty');
  } else {
    $('.modal__order-form').classList.add('js-hidden');
    $('.cart-header').classList.add('js-cart-is-empty');
  }
};

const initCart = () => {
  const itemsList = $('.modal__order-list');
  const modalElement = $('#modal-cart');

  const spinner = $('.spinner').spinner;

  if (!modalElement) { return }

  const CartModal = new Modal(modalElement, {
    trigger: $('.user-nav__button--cart'),
    onClose: () => {
      // Nothing
    },
    onOpen: () => {
      if (typeof window.smartCaptcha !== undefined) {
        window.smartCaptcha.reset();
      }
      reachGoal('OpenCart');
      itemsList.innerHTML = '';
      $('#cartForm').classList.remove('js-hidden');
      $('#cartFormHolder .modal__response').classList.add('js-hidden');

      spinner.run();

      axios.get('/wp-json/cart/items?lang=' + window.currentLanguage)
        .then(function (res) {
          spinner.stop();

          if (res.data.status === 'ok') {
            updateCartCounter(res.data.count);
            updateFormState(res.data.count);

            const prefix = window.currentLanguage == 'ru' ? '' : '/' + window.currentLanguage;

            if (res.data.count) {
              res.data.products.forEach((item) => {
                let row = itemTemplate;
                row = row.split('{ID}').join(item.id);
                row = row.split('{TITLE}').join(item.name);
                row = row.split('{QUANTITY}').join(item.quantity);
                row = row.split('{URL}').join(prefix + item.link);
                itemsList.insertAdjacentHTML('beforeEnd', row);
              });
            } else {
            // Nothing
            }
          }
        })
        .catch((err) => {
          spinner.stop();
        });
    }
  });

  $('.js-close-cart-modal').addEventListener('click', (ev) => {
    ev.stopPropagation();
    ev.preventDefault();

    CartModal.close();
  });

  $('.js-save-order').addEventListener('click', (ev) => {
    ev.preventDefault();
    ev.stopPropagation();

    $('#cartSelfEmail').value = 1;
    $('#cartWithCart').value = 1;
    $('#cartForm').dispatchEvent(new Event('submit', {cancelable: true }));

    return false;
  });

  $('.js-send-order').addEventListener('click', (ev) => {
    ev.preventDefault();
    ev.stopPropagation();

    $('#cartSelfEmail').value = 0;
    $('#cartWithCart').value = 1;
    $('#cartForm').dispatchEvent(new Event('submit', {cancelable: true }));

    return false;
  });
};

export default () => {
  initCart();
};