Your IP : 216.73.216.79


Current Path : /var/www/html/protegev2/node_modules/vuesax/src/functions/vsNotification/Base/
Upload File :
Current File : /var/www/html/protegev2/node_modules/vuesax/src/functions/vsNotification/Base/index.ts

import Vue from 'vue';
import './style.sass'
import component from './VsNotification'

interface NotificationParams {
  title?: string
  text?: string
  position?: string
  color?: string
  border?: string
  icon?: string
  duration?: number | string
  onClick?: any
  buttonClose?: boolean
  flat?: boolean
  onDestroy?: any
  sticky?: boolean
  square?: boolean
  width?: string
  loading?: boolean
  progress?: any
  notPadding?: any
  content?: any
  clickClose?: boolean
  classNotification?: string
}

const notificationConstructor = Vue.extend(component)

// tslint:disable-next-line:only-arrow-functions
notificationConstructor.prototype.close = function() {
  this.isVisible = false
}

notificationConstructor.prototype.setLoading = function(val: boolean) {
  this.loading = val
}

notificationConstructor.prototype.changeProgress = function(val: number) {
  if (val) {
    this.progress = val
  }
}

notificationConstructor.prototype.toggleClass = function(val: number) {
  if (val) {
    this.classNotification = val
    this.$el.closest('.vs-notification-parent').classList.toggle(val)
  }
}

const notification = (params: NotificationParams = {}) => {
  const instance = new notificationConstructor()

  instance.$data.title = params.title
  instance.$data.text = params.text
  instance.$data.color = params.color
  instance.$data.colorName = params.color
  instance.$data.border = params.border
  instance.$data.icon = params.icon
  instance.$data.onClick = params.onClick
  instance.$data.flat = params.flat
  instance.$data.onDestroy = params.onDestroy
  instance.$data.sticky = params.sticky
  instance.$data.square = params.square
  instance.$data.width = params.width
  instance.$data.loading = params.loading
  instance.$data.notPadding = params.notPadding
  instance.$data.clickClose = params.clickClose
  instance.$data.classNotification = params.classNotification
  if (params.duration !== 'none') {
    instance.$data.duration = params.duration || 4000
  }
  if (params.progress == 'auto' && params.duration !== 'none') {
    instance.$data.progressAuto = true
  } else {
    instance.$data.progress = params.progress
  }
  if (typeof params.buttonClose == 'boolean') {
    instance.$data.buttonClose = params.buttonClose
  }

  if (params.width == '100%' || window.innerWidth < 600) {
    if (params.position === 'top-left' || params.position === 'top-right') {
      params.position = 'top-center'
    } else if (params.position === 'bottom-left' || params.position === 'bottom-right' || !params.position) {
      params.position = 'bottom-center'
    }
  }

  if (typeof params.position !== 'string') {
    params.position = 'bottom-right'
  }

  const parent: HTMLElement =
  document.querySelector(`.vs-notification-parent--${params.position || 'bottom-right'}`) || document.createElement('div')

  if (!document.querySelector(`.vs-notification-parent--${params.position || 'bottom-right'}`)) {
    parent.className = 'vs-notification-parent'
    parent.classList.add(`vs-notification-parent--${params.position || 'bottom-right'}`)
  }

  if (params.classNotification) {
    parent.classList.add(params.classNotification)
  }

  parent.appendChild(instance.$mount().$el)

  document.body.appendChild(parent)

  Vue.nextTick(() => {
    instance.$data.isVisible = true
    instance.$data.content = params.content
  })

  if (params.duration !== 'none') {
    setTimeout(() => {
      (instance as any).close()
    }, Number(params.duration) || 4000)
  }

  return instance
}

export default notification