npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ciao-vue-dialog

v1.0.15

Published

A vue dialog plugin

Downloads

27

Readme

Ciao Vue Dialog

Vue Dialog Component

Demo

Feature

  • Basic title, content in dialog
  • Three size(large, middle, small)
  • Can catch and handle accept/dismiss action like JavasScript confirm
  • Inject custom vue component into dialog

Dependencies

Required

  • Vue.js 2.x

Installation

npm

npm install ciao-vue-dialog --save

or yarn

yarn add ciao-vue-dialog

Base Usage

Install VueDialog component in App.vue

<template>
  <div id="app">
  
    <!--plugin will auto mount dialog in here-->
    <VueDialog/>
    
    <button @click="showDialog">show dialog</button>
  </div>
</template>

<script>
import CiaoVueDialog from 'ciao-vue-dialog'
Vue.use(CiaoVueDialog)
export default {
  methods: {
    showDialog() {
      this.$dialog('hello world')
    }
  },
}
</script>

Remember import style file in App.vue

<style src="ciao-vue-dialog/dist/ciao-vue-dialog.css"></style>

style

String

You can setup style by style property

There has four Bootstrap style(success, primary, info, warning, danger)

this.$dialog({
  title: 'foo',
  style: 'warning'
})

content

String

this.$dialog({
  title: 'foo',
  content: 'bar',
})

close

Number

You can let dialog close automatically by configuring this property

Just pass delay time(milliseconds)

this.$dialog({
  title: 'Auto Close',
  close: 2000,
})

closeCallback

Function

You can do something by using closeCallback property

this.$dialog({
  title: 'Close Callback',
  closeCallback: () => alert('CloseCallback'),
})

size

String

We provide three size: 'lg', 'md', 'sm'

Default size is md

this.$dialog({
  title: 'foo',
  size: 'lg',
})

z-index

You can setup z-index by zIndex property of component

Default value is 1000

App.vue

<VueDialog :zIndex="6000"/>

accept

Object

When you wanna use dialog as confirm's accept action

accept.callback

You can do anything when user accept confirm by config callback property

export default {
  methods: {
    deleteConfirm() {
      this.$dialog({
        title: 'Delete',
        content: 'Do you really want to delete',
        accept: {
          callback: this.onAccept,
        },
      })
    },
    onAccept() {
      // do something here after accept
    },
  },
},

accept.label

Custom accept button label

Default is 'Accept'

String

this.$dialog({
  // ...
  accept: {
    label: 'Yes',
    callback: someCallback,
  }
})

accept.style

Custom accept button style by using Bootstrap class name

Default is 'primary'

String

this.$dialog({
  // ...
  accept: {
    style: 'success',
    callback: someCallback,
  }
})

accept.commitOnEnter

If this property set as true

User can commit accept action by pressing Enter key

Boolean

dismiss

Object

When you wanna use dialog as confirm's dismiss action

dismiss.callback

You can do anything when user dismiss confirm by config callback property

If you don't want to do anything after dismiss, you can skip this property

export default {
  methods: {
    deleteConfirm() {
      this.$dialog({
        title: 'Delete',
        content: 'Do you really want to delete',
        dismiss: {
          callback: this.onDismiss,
        },
      })
    },
    onDismiss() {
      // do something here after dismiss
    },
  },
},

dismiss.label

Custom dismiss button label

Default is 'Dismiss'

String

this.$dialog({
  // ...
  dismiss: {
    label: 'Cancel',
    callback: someCallback,
  }
})

dismiss.style

Custom dismiss button style by using Bootstrap class name

Or if you want to use Bootstrap 4 button's class name

Default is 'light'

String

this.$dialog({
  // ...
  dismiss: {
    style: 'warning',
    callback: someCallback,
  }
})

dismiss.commitOnEsc

If this property set as true

User can commit dismiss action by pressing ESC key

Boolean

component

Vue Component

You can inject a custom vue component into dialog by this property

import CustomComponent from 'path/to/custom/component'
export default {
  methods: {
    showDialog() {
      this.$dialog({
        title: 'Custom Component',
        component: CustomComponent,
      })
    },
  },
}

Bind data to custom component, and get it in accept/dismiss callback

Sometimes you need to inject a custom vue component and bind a data like a subscription button

You can use updateData event to sync data and get data in accept callback by this way

Main

import FormCustomComponent from './FormCustomComponent.vue'
export default {
  methods: {
    dialog() {
      this.$dialog({
        title: 'Send Product Menu',
        component: FormCustomComponent,
        accept: {
          callback: this.onAccept
        },
        dismiss: {
          callback: this.onDismiss
        },
      })
    },
    
    // you can get data which bind in custom component in accept callback
    onAccept(data) {
      if(!data) return
      alert(`We had sent email to ${data}`)
    },
    
    onDismiss(data) {
      // You can get data on dismiss, too 
    },
  },
}

FormCustomComponent.vue

<template>
  <div>
    <h5>Enter your email, we will send you product menu</h5>
    <input type="text" v-model="localData">
  </div>
</template>

<script>
export default {
  // use props get data
  props: {
    data: {
      default: null,
    },
  },
  data() {
    return {
      // this is local data for this custom vue component
      localData: null,
    }
  },
  watch: {
    // when localData is change, you should sync data immediately
    localData(value) {
      this.$emit('updateData', value)
    },
    // when data change, you should update localData immediately too
    data(value) {
      this.localData = value
    },
  },
}
</script>

Commit accept/dismiss action in custom component

You can commit accept/dismiss action by using $emit('commitAccept')$emit('commitDismiss') in custom component

You should use this two event be carefully

Here is example which commit accept action when user press Enter key

<template>
  <input type="text" @keyup.enter="$emit('commitAccept')" v-model="localData">
</template>

<script>
export default {
  // ....
}
</script>

Pass more data when inject custom component

Sometimes you may want pass more data (like user profile) into custom component

You can use meta property like this way when you active $dialog

this.$dialog({
  title: 'Send Product Menu',
  component: CustomComponent,
  meta: {
    name: 'Ciao',
    age: 26,
    email: '[email protected]',
  },
  accept: {
    // ...
  },
})

And you can get meta in custom component by using vue props feature

export default {
  props: {
    meta: {
      default: null,
    },
  },
  created() {
    alert(`Hi ${meta.name}`)
  },
}

Loading

If your accept/dismiss callback is async, it will trigger loading before async process is finished.

Also, if you has some async process in custom component, you can use setLoader method to set loading status.

export default {
  created() {
    this.init()
  },
  methods: {
    async init() {
      // start loading
      this.$emit('setLoader', true)
      
      await someAsyncProcess()
      
      // stop loading
      this.$emit('setLoader', false)
    },
  },
}

Action Error

When some error throw from actions(accept/dismiss) callback.

Dialog component will catch this error and pass it to your custom component.

You can get and handle error property in your custom component.

Script

this.$dialog({
  title: 'Handle Error in Action',
  component: CustomComponent,
  accept: {
    callback() {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          reject({
            reason1: 'some error message',
            reason2: 'another error message',
          })
        }, 3000)
      })
    },
  },
})

CustomComponent

<template>
  <div>
    <input type="text">
    
    <div v-if="error" style="color: red">
      <p>{{error.reason1}}</p>    
      <p>{{error.reason2}}</p>    
    </div>
  </div>
</template>

<script>
export default {
  props: {
    error: {
      default: () => null,
    },
  },
}
</script>