Sha256: b9c575fee29fbfd656831dd1cd5c076f4cb905386cb9fcad807c70dbe46827f8

Contents?: true

Size: 1.66 KB

Versions: 16

Compression:

Stored size: 1.66 KB

Contents

/* global Swal */

document.addEventListener("spree:load", function() {
  const alertEl = document.querySelectorAll('[data-alert-type]')

  if (!alertEl) return

  alertEl.forEach(function (elem) {
    const alertType = elem.dataset.alertType
    const alertMessage = elem.innerHTML

    show_flash(alertType, alertMessage)
  })
})

// eslint-disable-next-line camelcase
function show_flash(type, message) {
  let sanitizedType = DOMPurify.sanitize(type)
  const sanitizedMessage = DOMPurify.sanitize(message)

  if (sanitizedType === 'notice') sanitizedType = 'info'

  // Set up Swal toast alert defaults
  const Toast = Swal.mixin({
    toast: true,
    position: 'bottom',
    showConfirmButton: false,
    showCloseButton: true,
    timer: 4500,
    timerProgressBar: false,
    showClass: {
      popup: 'animate__animated animate__fadeInUp animate__faster',
      backdrop: '-',
      icon: '-'
    },
    hideClass: {
      popup: 'animate__animated animate__fadeOutDown animate__faster',
      backdrop: '-',
      icon: '-'
    }
  })

  Toast.fire({
    icon: sanitizedType,
    title: sanitizedMessage
  })

  appendToFlashAlertsContainer(sanitizedMessage, sanitizedType)
}

function appendToFlashAlertsContainer (message, type) {
  if (type === 'info') type = 'notice'

  const parnetNode = document.querySelector('#FlashAlertsContainer')
  const node = document.createElement('SPAN');
  const textNode = document.createTextNode(message);

  // Only the most recent alert should be left in the #FlashAlertsContainer.
  parnetNode.innerHTML = ''

  node.classList.add('d-none')
  node.setAttribute('data-alert-type', type);
  node.appendChild(textNode)

  parnetNode.appendChild(node);
}

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
spree_backend-4.8.4 app/assets/javascripts/spree/backend/global/alerts.es6
spree_backend-4.8.3 app/assets/javascripts/spree/backend/global/alerts.es6
spree_backend-4.8.2 app/assets/javascripts/spree/backend/global/alerts.es6
spree_backend-4.8.1 app/assets/javascripts/spree/backend/global/alerts.es6
spree_backend-4.7.2 app/assets/javascripts/spree/backend/global/alerts.es6
spree_backend-4.6.2 app/assets/javascripts/spree/backend/global/alerts.es6
spree_backend-4.7.1 app/assets/javascripts/spree/backend/global/alerts.es6
spree_backend-4.7.0 app/assets/javascripts/spree/backend/global/alerts.es6
spree_backend-4.6.1 app/assets/javascripts/spree/backend/global/alerts.es6
spree_backend-4.6.0 app/assets/javascripts/spree/backend/global/alerts.es6
spree_backend-4.5.1 app/assets/javascripts/spree/backend/global/alerts.es6
spree_backend-4.5.0 app/assets/javascripts/spree/backend/global/alerts.es6
spree_backend-4.4.1 app/assets/javascripts/spree/backend/global/alerts.es6
spree_backend-4.4.0 app/assets/javascripts/spree/backend/global/alerts.es6
spree_backend-4.4.0.rc2 app/assets/javascripts/spree/backend/global/alerts.es6
spree_backend-4.4.0.rc1 app/assets/javascripts/spree/backend/global/alerts.es6